API: laterally loaded pile
POST /v1/lateral — request and response fields for the COM624P p-y analysis, with runnable curl, JavaScript, and Python examples.
Solves a laterally loaded single pile by the p-y method — a beam supported by nonlinear soil springs, solved with the COM624P finite-difference formulation (Wang & Reese, FHWA-SA-91-048), the same engine behind LPILE and RSPile. It returns head response, maxima, and the full deflection / moment / shear profile. The method and every input are explained in Laterally loaded piles (p-y); the same analysis runs interactively at the lateral tool.
Endpoint
https://api.pilecalc.com/v1/lateral/v1/lateral?key=…&req=…&fields=…(for header-less callers)The request has three required parts: the pile (uniform, or sectioned with depth-varying diameter/ei), the soil profile (a stack of layers, each tagged with a p-y model — Matlock soft clay, Reese stiff clay, Reese or API sand, weak rock, elastic, or user-defined curves), and the head boundary condition (five variants covering free, fixed, and rotationally restrained heads). Optional fields add an axial load, cyclic loading, distributed loads, ground slope, a p-multiplier, and free-field soil movement. Two more options change what comes back: sweep solves a series of proportionally scaled head loads (a pushover curve) in one call, and section + material replace the constant pile EI with the section's fiber-integrated moment–curvature stiffness (cracked-section nonlinear EI) — see Load sweep and Cracked section.
For cyclic loading, soil.cycles applies only to profiles containing Welch–Reese stiff clay above water (default N = 100). Omit it for fixed cyclic branches such as Matlock, RCK and sand. RCK layer.k and optional kBottom are initial moduli for the active loading state, not automatically reduced static inputs. Choose cyclic values from FHWA GEC 9 Table A-1 or justified site data.
Authentication, rate limits, and the error envelope are shared by every endpoint — see the API overview. Requests are unit-agnostic: any self-consistent unit system works, and results come back in the same units. The examples below use SI (m, kN, kPa, kN/m³).
Request fields
This table is generated from the same schema that validates the request, so it cannot drift. Where a field appears once per variant row, it belongs to that variant only.
| Field | Type | Required | Constraints |
|---|---|---|---|
unitSystem | "si" | "us" | yes | Unit bundle for every dimensional input and output. "si": m, kN, kPa, kN/m³, kN·m, kN·m². "us": the kip–foot bundle — ft, kip, ksf, kip/ft³, kip·ft, kip·ft² (unit weights in kip/ft³, not pcf). Values are not converted, so every field must use the declared bundle. |
pile | object | yes | Pile geometry and bending stiffness: kind "uniform" (one diameter and EI) or "sectioned" (a stack of prismatic and/or tapered sections). |
pile.kind = "uniform" | variant | no | A prismatic pile with one constant diameter and EI (the default when kind is omitted). |
pile.length | number | yes | > 0 — Total pile length from the head to the tip (m for si, ft for us), including any free length above grade. |
pile.diameter | number | yes | > 0 — Pile width or diameter b (m for si, ft for us). |
pile.ei | number | yes | > 0 — Flexural rigidity EI of the pile (kN·m² for si, kip·ft² for us). |
pile.groundSurfaceDepth | number | no | ≥ 0 — Depth of the ground surface below the pile head, i.e. the free (unsupported) pile length above grade (m for si, ft for us). Omit or use 0 when the head is at the ground surface. |
pile.kind = "sectioned" | variant | yes | A pile built from a stack of prismatic and/or tapered sections that tile the pile from head to tip. |
pile.sections | object | object[] | yes | min 1 item — Pile sections ordered from the head down, contiguous with no gaps or overlaps. Each is prismatic (diameter + ei) or tapered (shape + diameterTop/diameterBottom + elasticModulus). |
pile.groundSurfaceDepth | number | no | ≥ 0 — Depth of the ground surface below the pile head, i.e. the free (unsupported) pile length above grade (m for si, ft for us). Omit or use 0 when the head is at the ground surface. |
soil | object | yes | Layered soil profile below the ground surface; each layer selects a p-y model. |
soil.layers[] | object[] | yes | min 1 item — Soil layers from the ground surface down, contiguous with no gaps or overlaps, each tagged with its p-y `model`. The last layer must reach at least the embedded pile tip. |
soil.layers[].model = "soft-clay" | variant | yes | Matlock (1970) soft clay, for soft to medium clay below the water table. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].c | number | yes | > 0 — Undrained shear strength (cohesion) c at the layer top (kPa for si, ksf for us). |
soil.layers[].cBottom | number | no | > 0 — Cohesion c at the layer bottom (kPa for si, ksf for us); c varies linearly from the top value. Omit for a constant layer. |
soil.layers[].e50 | number | yes | > 0 — Strain at 50% of the maximum principal stress difference in an undrained triaxial test, ε₅₀ (dimensionless), at the layer top. |
soil.layers[].e50Bottom | number | no | > 0 — ε₅₀ at the layer bottom (dimensionless); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].j | number | no | > 0 — Matlock empirical depth factor J (dimensionless). Omitted defaults to 0.5; 0.25 is sometimes used for stiffer clays. |
soil.layers[].model = "stiff-clay-above-water" | variant | yes | Welch & Reese (1972) stiff clay with no free water. Supplying k switches to the modified (Reese & Van Impe) form. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].c | number | yes | > 0 — Undrained shear strength (cohesion) c at the layer top (kPa for si, ksf for us). |
soil.layers[].cBottom | number | no | > 0 — Cohesion c at the layer bottom (kPa for si, ksf for us); c varies linearly from the top value. Omit for a constant layer. |
soil.layers[].e50 | number | yes | > 0 — Strain at 50% of the maximum principal stress difference in an undrained triaxial test, ε₅₀ (dimensionless), at the layer top. |
soil.layers[].e50Bottom | number | no | > 0 — ε₅₀ at the layer bottom (dimensionless); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].j | number | no | > 0 — Matlock empirical depth factor J (dimensionless). Omitted defaults to 0.5; 0.25 is sometimes used for stiffer clays. |
soil.layers[].k | number | no | > 0 — Optional initial subgrade modulus k (kN/m³ for si, kip/ft³ for us). When present, the modified stiff-clay curve p = min(k·z·y, Welch–Reese backbone) is used; omit for the original Welch & Reese curve. |
soil.layers[].kBottom | number | no | > 0 — Modified-model k at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from k. Omit for a constant layer. |
soil.layers[].model = "stiff-clay-below-water" | variant | yes | Reese, Cox & Koop stiff clay below the water table. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].c | number | yes | > 0 — Undrained shear strength c (kPa for si, ksf for us). Supported only as a constant strength equal to the surface-to-depth average: cBottom must equal c and, with direct layering, overlying layers must carry the same c. |
soil.layers[].cBottom | number | no | > 0 — Cohesion at the layer bottom (kPa for si, ksf for us). Varying strength is rejected for this model, so omit it or set it equal to c. |
soil.layers[].e50 | number | yes | > 0 — Strain at 50% of the maximum principal stress difference in an undrained triaxial test, ε₅₀ (dimensionless), at the layer top. |
soil.layers[].e50Bottom | number | no | > 0 — ε₅₀ at the layer bottom (dimensionless); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].k | number | yes | > 0 — Initial modulus of subgrade reaction k for the active loading state (kN/m³ for si, kip/ft³ for us): the static value for static loading, the cyclic value for cyclic loading. It is not reduced automatically. |
soil.layers[].kSource | "gec9-table-a1" | no | UI source-default selection provenance. k remains the explicit active-loading modulus used by the engine; the UI restores source selection only when k matches the default for the original loading and unit system. |
soil.layers[].kBottom | number | no | > 0 — Subgrade modulus k at the layer bottom for the active loading state (kN/m³ for si, kip/ft³ for us); varies linearly from k. Omit for a constant layer. |
soil.layers[].model = "sand-reese" | variant | yes | Reese, Cox & Koop (1974) sand (wedge and flow-around model). |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].phi | number | yes | 0 – 60 — Drained friction angle φ at the layer top, in degrees (0–60). |
soil.layers[].phiBottom | number | no | 0 – 60 — Friction angle φ at the layer bottom, in degrees (0–60); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].k | number | yes | > 0 — Initial modulus of subgrade reaction k at the layer top (force/length³: kN/m³ for si, kip/ft³ for us). |
soil.layers[].kBottom | number | no | > 0 — Subgrade modulus k at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].model = "sand-api" | variant | yes | API RP-2A / O'Neill & Murchison (1983) sand (hyperbolic-tangent curve). |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].phi | number | yes | 0 – 60 — Drained friction angle φ at the layer top, in degrees (0–60). |
soil.layers[].phiBottom | number | no | 0 – 60 — Friction angle φ at the layer bottom, in degrees (0–60); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].k | number | yes | > 0 — Initial modulus of subgrade reaction k at the layer top (force/length³: kN/m³ for si, kip/ft³ for us). |
soil.layers[].kBottom | number | no | > 0 — Subgrade modulus k at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].model = "weak-rock" | variant | yes | Reese (1997) weak rock. Static loading only. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].qu | number | yes | > 0 — Uniaxial (unconfined) compressive strength of the intact rock qu at the layer top (kPa for si, ksf for us). |
soil.layers[].quBottom | number | no | > 0 — qu at the layer bottom (kPa for si, ksf for us); varies linearly from qu. Omit for a constant layer. |
soil.layers[].eir | number | yes | > 0 — Initial rock-mass modulus Eir at the layer top (force/length²: kPa for si, ksf for us). |
soil.layers[].eirBottom | number | no | > 0 — Eir at the layer bottom (kPa for si, ksf for us); varies linearly from eir. Omit for a constant layer. |
soil.layers[].rqd | number | yes | 0 – 100 — Rock Quality Designation at the layer top, as a percentage (0–100). |
soil.layers[].rqdBottom | number | no | 0 – 100 — RQD at the layer bottom, as a percentage (0–100); varies linearly from rqd. Omit for a constant layer. |
soil.layers[].krm | number | no | > 0 — Rock strain factor k_rm (dimensionless), typically 0.0005 to 0.00005. Omitted defaults to 0.0005. |
soil.layers[].model = "elastic" | variant | yes | Linear-elastic (Winkler) subgrade: p = E_py·y, independent of deflection. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].esTop | number | yes | ≥ 0 — Soil-reaction modulus E_py at the layer top (force/length²: kN/m² for si, kip/ft² for us). |
soil.layers[].esBottom | number | no | ≥ 0 — E_py at the layer bottom (kN/m² for si, kip/ft² for us); varies linearly from esTop. Omitted means constant E_py = esTop. |
soil.layers[].model = "user" | variant | yes | User-defined resistance: a constant linear modulus es, or measured p-y curves at given depths. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].es | number | no | ≥ 0 — Constant soil modulus E_py for a linear Winkler spring p = es·y (force/length²: kN/m² for si, kip/ft² for us). When supplied it is used instead of curves. |
soil.layers[].curves[] | object[] | no | Depth-tagged p-y curves. Resistance is interpolated linearly along each curve and between curves in depth; above the first or below the last curve depth, the nearest curve applies. |
soil.layers[].curves[].depth | number | yes | ≥ 0 — Depth of this p-y curve below the ground surface (m for si, ft for us); must lie within the layer and increase strictly from curve to curve. |
soil.layers[].curves[].points[] | object[] | yes | min 2 items — The curve's (y, p) points, starting at (0, 0). |
soil.layers[].curves[].points[].y | number | yes | ≥ 0 — Lateral deflection y (m for si, ft for us). The first point is 0; values must be strictly increasing. |
soil.layers[].curves[].points[].p | number | yes | ≥ 0 — Soil resistance p per unit pile length (kN/m for si, kip/ft for us) at deflection y. The first point is 0; values must be nondecreasing, and p is held constant beyond the last point. |
soil.layers[].model = "liquefied-sand" | variant | yes | Rollins et al. (2005a) fully liquefied sand; resistance depends on depth only, with no strength inputs. Requires a pile diameter of at least 0.3 m within the layer. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].units | "SI" | "US" | yes | Working-unit tag for the dimensional Rollins constants. Must match the request's unitSystem: "SI" for si, "US" for us. |
soil.layers[].model = "silt-cphi" | variant | yes | Reese et al. (1974) silt or cemented c-φ soil with both cohesion and friction. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].c | number | yes | > 0 — Cohesion c at the layer top (kPa for si, ksf for us). |
soil.layers[].cBottom | number | no | > 0 — Cohesion c at the layer bottom (kPa for si, ksf for us); c varies linearly from the top value. Omit for a constant layer. |
soil.layers[].phi | number | yes | 0 – 60 — Drained friction angle φ at the layer top, in degrees (0–60). |
soil.layers[].phiBottom | number | no | 0 – 60 — Friction angle φ at the layer bottom, in degrees (0–60); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].k | number | yes | > 0 — Initial modulus of subgrade reaction k at the layer top (force/length³: kN/m³ for si, kip/ft³ for us). |
soil.layers[].kBottom | number | no | > 0 — Subgrade modulus k at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from the top value. Omit for a constant layer. |
soil.layers[].j | number | no | > 0 — Matlock J factor for the cohesive wedge (dimensionless). Omitted defaults to 0.5. |
soil.layers[].model = "piedmont-residual" | variant | yes | Simpson & Brown (2003) Piedmont residual soil (residual silty sands and saprolite). Static loading only. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].esi | number | yes | > 0 — Initial modulus of subgrade reaction Eₛᵢ at the layer top (force/length³: kN/m³ for si, kip/ft³ for us). Simpson & Brown (2003) Eq. 5.6 correlations, in pci: 22·N with N the uncorrected SPT blow count per 30 cm (not N₆₀, p. 64), 0.118·q_c (q_c in kPa), 0.076·E_DMT and 0.235·E_PMT (moduli in psi). |
soil.layers[].esiBottom | number | no | > 0 — Eₛᵢ at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from esi. Omit for a constant layer. |
soil.layers[].lambda | number | no | > 0 — Secant-modulus degradation constant λ (dimensionless). Omitted defaults to 0.23 (Simpson & Brown 2003). |
soil.layers[].model = "iso-clay" | variant | yes | ISO 19901-4 / Jeanjean et al. (2017) clay, the offshore alternative to Matlock. Static loading only. |
soil.layers[].top | number | yes | ≥ 0 — Depth to the top of the layer below the ground surface (m for si, ft for us). The first layer starts at 0 and each later layer starts at the previous layer's bottom. |
soil.layers[].bottom | number | yes | > 0 — Depth to the bottom of the layer below the ground surface (m for si, ft for us). The last layer must reach at least the embedded pile tip. |
soil.layers[].gamma | number | yes | > 0 — Unit weight at the layer top used to build the effective vertical stress: total unit weight above the water table, buoyant (effective) unit weight below it (kN/m³ for si, kip/ft³ for us). |
soil.layers[].gammaBottom | number | no | > 0 — Unit weight at the layer bottom (kN/m³ for si, kip/ft³ for us); varies linearly from gamma. Omit for a constant layer. |
soil.layers[].su | number | yes | > 0 — Undrained shear strength sᵤ on a Direct Simple Shear (DSS) basis at the layer top (force/length²: kPa for si, ksf for us). |
soil.layers[].suBottom | number | no | > 0 — sᵤ (DSS basis) at the layer bottom (kPa for si, ksf for us); varies linearly from su. Omit for a constant layer. |
soil.layers[].alpha | number | no | 0 – 1 — Pile–soil adhesion factor α (0–1); sets the deep bearing factor N_pd = 9 + 3α. Omitted defaults to 1. |
soil.layers[].gap | "open" | "closed" | no | Gapping behind the pile: "open" adds the σ′ᵥ/sᵤ overburden term, "closed" doubles the wedge factor. Omitted defaults to "open". |
soil.layers[].clayType | "soft" | "stiff" | no | Jeanjean (2017) normalized backbone family keyed on strength: "soft" (sᵤ up to about 100 kPa) or "stiff" (above). Used only when ocr is omitted; omitted defaults to "soft". |
soil.layers[].ocr | number | no | ≥ 1 — Over-consolidation ratio (≥ 1). Selects the ISO 19901-4:2025 default normalized p-y curve, tabulated for OCR ≤ 2, 4 and 10 (between them the softer, higher-OCR curve is used; above 10 the OCR = 10 curve). Replaces the clayType table; do not send both. |
soil.layers[].plasticityIndex | number | no | 0 – 200 — Plasticity index Ip in percent; selects the ISO 19901-4:2025 Ip > 30 % or Ip ≤ 30 % curve group. Requires ocr. Omitted with ocr uses the softer Ip > 30 % group. |
soil.layers[].suTeDssRatio | number | no | 0 – 1.5 — Average triaxial-extension to DSS strength ratio sᵤTE/sᵤDSS within the wedge depth. With an open gap, applies the ISO 19901-4:2025 strength-anisotropy correction to the wedge bearing factor (ISO recommends 0.9 for very soft and soft Gulf-of-Mexico-type clays). Omitted with an open gap: the ISO default 0.9 is applied (declare 1 for isotropic strength). Not used with gap "closed". |
soil.cycles | number | no | integer, > 0 — Cycle count N for Welch–Reese stiff clay above water only; omitted defaults to 100. Matlock, RCK and sand cyclic branches do not depend on N. |
head | object | yes | Pile-head boundary condition: `kind` selects which two quantities are prescribed at the head. |
head.kind = "shear-moment" | variant | yes | Prescribed head shear and moment (a free head when moment is 0). |
head.shear | number | yes | Lateral shear (horizontal load) applied at the pile head (kN for si, kip for us). |
head.moment | number | yes | Bending moment applied at the pile head (kN·m for si, kip·ft for us); 0 for a free, concentrically loaded head. |
head.kind = "shear-slope" | variant | yes | Prescribed head shear and slope (a fixed head when slope is 0). |
head.shear | number | yes | Lateral shear (horizontal load) applied at the pile head (kN for si, kip for us). |
head.slope | number | yes | Prescribed pile-head rotation (slope dy/dx) in radians; 0 fixes the head against rotation. |
head.kind = "shear-rotational" | variant | yes | Prescribed head shear with a rotational spring restraint (a partially fixed head). |
head.shear | number | yes | Lateral shear (horizontal load) applied at the pile head (kN for si, kip for us). |
head.rotationalStiffness | number | yes | ≥ 0 — Rotational spring stiffness at the head, moment per radian (kN·m/rad for si, kip·ft/rad for us); 0 is a free head and large values approach a fixed head. |
head.kind = "deflection-moment" | variant | yes | Prescribed head deflection and moment. |
head.deflection | number | yes | Prescribed lateral pile-head deflection (m for si, ft for us). |
head.moment | number | yes | Bending moment applied at the pile head (kN·m for si, kip·ft for us); 0 for a free, concentrically loaded head. |
head.kind = "deflection-slope" | variant | yes | Prescribed head deflection and slope (slope 0 for a fixed head). |
head.deflection | number | yes | Prescribed lateral pile-head deflection (m for si, ft for us). |
head.slope | number | yes | Prescribed pile-head rotation (slope dy/dx) in radians; 0 fixes the head against rotation. |
tip | object | no | Pile-tip boundary condition. Omitted means a free tip with zero shear and moment. |
tip.shear | number | no | Prescribed shear at the pile tip (kN for si, kip for us). Omitted defaults to 0. |
tip.moment | number | no | Prescribed moment at the pile tip (kN·m for si, kip·ft for us). Omitted defaults to 0. |
axialLoad | number | no | Axial load carried down the pile, compression positive (kN for si, kip for us), included as a P-Δ second-order term. Omitted defaults to 0. |
loadType | "static" | "cyclic" | no | Build static (monotonic) or cyclic p-y curves. Omitted defaults to "static". weak-rock, piedmont-residual and iso-clay layers support static loading only. |
increments | number | no | integer, 10 – 800 — Number of finite-difference segments the pile is divided into (10–800). Omitted defaults to 100. |
layering | "direct" | "georgiadis" | no | Layered-soil treatment: "direct" builds each layer's p-y curves at their actual depth (original COM624P); "georgiadis" uses Georgiadis (1983) equivalent depths for lower layers and does not accept elastic, user, liquefied-sand or piedmont-residual layers. Omitted defaults to "direct". |
groundSlopeDeg | number | no | 0 – 45 — Ground-surface slope in degrees (0–45), sloping down and away in the direction of loading; upslope loading is not supported. A nonzero slope is supported only for soft-clay, stiff-clay-above-water, stiff-clay-below-water, sand-reese and silt-cphi layers; with clay or silt-cphi layers it requires static loading, and it must not exceed the minimum friction angle of any sand-reese or silt-cphi layer. Omitted defaults to 0 (level ground). |
pMultiplier | number | no | 0 – 1 — Constant p-multiplier (0–1] scaling the soil resistance of every p-y curve, e.g. for pile-group shadowing. Omitted defaults to 1 (single pile); ignored when pMultiplierProfile is given. |
pMultiplierProfile[] | object[] | no | min 2 items — Depth-varying p-multiplier, linearly interpolated between points and held constant beyond the first and last depths. Takes precedence over pMultiplier. |
pMultiplierProfile[].depth | number | yes | ≥ 0 — Depth below the ground surface (m for si, ft for us); strictly increasing. |
pMultiplierProfile[].factor | number | yes | 0 – 1 — p-multiplier at this depth (0–1]. |
tipShearCurve[] | object[] | no | min 2 items — Base shear versus tip deflection, applied as a restoring spring at the pile tip (e.g. an enlarged or belled base). Starts at (0, 0) and is linearly interpolated. |
tipShearCurve[].deflection | number | yes | ≥ 0 — Tip deflection magnitude (m for si, ft for us); strictly increasing from 0. |
tipShearCurve[].shear | number | yes | ≥ 0 — Mobilized base shear magnitude at that deflection (kN for si, kip for us); nondecreasing from 0. |
distributedLoad | object | no | Uniform distributed lateral load over a depth band of the pile, added to the head loads. Omit for none. |
distributedLoad.intensity | number | yes | Lateral load per unit pile length (kN/m for si, kip/ft for us). |
distributedLoad.top | number | no | ≥ 0 — Depth below the pile head where the load starts (m for si, ft for us). Omitted means the pile head. |
distributedLoad.bottom | number | no | ≥ 0 — Depth below the pile head where the load ends (m for si, ft for us); must exceed top. Omitted means the pile tip. |
soilMovement | object | no | Free-field soil movement (passive loading): the soil displaces by a constant amount from the ground surface down to a sliding depth and is stationary below. Omit for none. |
soilMovement.magnitude | number | yes | Free-field lateral soil displacement, constant from the ground surface to the sliding depth (m for si, ft for us). |
soilMovement.slidingDepth | number | yes | > 0 — Depth of the sliding surface below the ground surface (m for si, ft for us); soil below it does not move. |
sweep | object | no | Pushover sweep: also solve at proportionally scaled head loads and return the load–response curve. Requires a shear-moment, shear-slope or shear-rotational head. |
sweep.steps | number | yes | integer, 2 – 50 — Number of load levels (2–50); step i is solved at i/steps of the target loads. |
sweep.maxShear | number | no | Target head shear reached at the last step (kN for si, kip for us). Omitted defaults to the head condition's shear. |
sweep.maxMoment | number | no | Target head moment reached at the last step (kN·m for si, kip·ft for us), used only with a shear-moment head. Omitted defaults to the head condition's moment. |
section | object | no | Structural cross-section for a cracked-section (nonlinear EI) analysis. Supply together with material; not combinable with eiCurve. |
section.kind = "solid-circular" | variant | yes | Solid circular section; pair it with a steel material. |
section.diameter | number | yes | > 0 — Outside diameter of the solid section (m for si, ft for us). |
section.kind = "pipe" | variant | yes | Circular hollow pipe section; pair it with a steel material. |
section.outerDiameter | number | yes | > 0 — Outside diameter of the pipe (m for si, ft for us). |
section.wallThickness | number | yes | > 0 — Pipe wall thickness (m for si, ft for us); less than half the outside diameter. |
section.kind = "rectangular" | variant | yes | Solid rectangular section; pair it with a steel material. |
section.width | number | yes | > 0 — Section width b perpendicular to the bending plane (m for si, ft for us). |
section.height | number | yes | > 0 — Section height h in the bending plane (m for si, ft for us). |
section.kind = "round-concrete" | variant | yes | Round reinforced or prestressed concrete section (drilled shaft or round pile), optionally composite with a steel casing and/or core; pair it with a concrete material. |
section.diameter | number | yes | > 0 — Concrete diameter (m for si, ft for us). With a casing it must equal the casing inside diameter (casing outerDiameter − 2 × wallThickness). |
section.cage | object | no | Circular ring of longitudinal bars or strands; omit for plain concrete. |
section.cage.count | number | yes | integer, 1 – 200 — Number of identical longitudinal bars or strands, equally spaced on the bar circle. |
section.cage.area | number | yes | > 0 — Cross-sectional area of one bar or strand (m² for si, ft² for us). |
section.cage.barDiameter | number | yes | > 0 — Physical outside diameter of one bar or strand (m for si, ft for us), used to check that bars lie inside the concrete, do not overlap, and clear any steel core. |
section.cage.barCircleRadius | number | yes | > 0 — Radius of the circle through the bar centres (m for si, ft for us), i.e. D/2 − cover − bar radius. |
section.cage.yieldStress | number | yes | > 0 — Yield stress fy of the reinforcement, or fpy for a strand (kPa for si, ksf for us). |
section.cage.elasticModulus | number | yes | > 0 — Elastic modulus Es of the reinforcement (kPa for si, ksf for us). |
section.cage.effectivePrestrain | number | no | ≥ 0 — Effective prestrain of prestressing strands after ALL losses, ε_pe = f_pe/Es (dimensionless tensile strain): f_pe is the strand stress in the finished member at zero external load, so the engine places the strand reference at the decompression strain and the strands carry exactly f_pe at zero thrust. Omit or use 0 for ordinary reinforcing bars. |
section.cage.hardeningRatio | number | no | 0 – 1 — Post-yield hardening ratio E_tangent/Es (0–1); omitted means 0 (elastic–perfectly-plastic). |
section.cage.tensionRuptureStrain | number | no | > 0 — Tensile strain magnitude at which the reinforcement ruptures (dimensionless); must exceed the yield strain fy/Es and effectivePrestrain. Omit when rupture is not modelled. |
section.cage.strandGrade | 250 | 270 | no | Prestressing-strand grade fpu in ksi (250 or 270). When set, strand stress follows the PCI stress–strain relation (PCI MNL-116, 2nd ed., Fig. 2.2.5.1, p. 2-8) instead of an elastic–perfectly-plastic branch at yieldStress; elasticModulus must then equal 28,500 ksi (196,500 MPa) within 1 % and hardeningRatio must be omitted. Omit for ordinary reinforcing bars. |
section.rebarConcreteDisplacement | "subtract" | "overlap" | no | Required when a cage is present. subtract: bars replace their area of concrete (physical net section). overlap: concrete is not reduced, reproducing OpenSees patch-plus-layer sections. |
section.casing | object | no | Permanent steel casing wrapping the concrete; its steel annulus lies outside the concrete diameter. |
section.casing.outerDiameter | number | yes | > 0 — Outside diameter of the steel tube (m for si, ft for us). A casing's inside diameter (outerDiameter − 2 × wallThickness) must equal the concrete diameter; a core must be smaller than the concrete diameter. |
section.casing.wallThickness | number | yes | > 0 — Radial wall thickness of the tube (m for si, ft for us); less than half the outside diameter. |
section.casing.yieldStress | number | yes | > 0 — Yield stress Fy of the tube steel (kPa for si, ksf for us). |
section.casing.elasticModulus | number | yes | > 0 — Elastic modulus Es of the tube steel (kPa for si, ksf for us). |
section.casing.hardeningRatio | number | no | 0 – 1 — Post-yield hardening ratio E_tangent/Es (0–1); omitted means 0 (elastic–perfectly-plastic). |
section.casing.tensionRuptureStrain | number | no | > 0 — Tensile strain magnitude at which the tube steel ruptures (dimensionless); must exceed the yield strain Fy/Es. Omit when rupture is not modelled. |
section.core | object | no | Concentric steel tube at the centre; the concrete inside its outside diameter is treated as void. It must clear the bar cage. |
section.core.outerDiameter | number | yes | > 0 — Outside diameter of the steel tube (m for si, ft for us). A casing's inside diameter (outerDiameter − 2 × wallThickness) must equal the concrete diameter; a core must be smaller than the concrete diameter. |
section.core.wallThickness | number | yes | > 0 — Radial wall thickness of the tube (m for si, ft for us); less than half the outside diameter. |
section.core.yieldStress | number | yes | > 0 — Yield stress Fy of the tube steel (kPa for si, ksf for us). |
section.core.elasticModulus | number | yes | > 0 — Elastic modulus Es of the tube steel (kPa for si, ksf for us). |
section.core.hardeningRatio | number | no | 0 – 1 — Post-yield hardening ratio E_tangent/Es (0–1); omitted means 0 (elastic–perfectly-plastic). |
section.core.tensionRuptureStrain | number | no | > 0 — Tensile strain magnitude at which the tube steel ruptures (dimensionless); must exceed the yield strain Fy/Es. Omit when rupture is not modelled. |
section.kind = "rectangular-concrete" | variant | yes | Rectangular or square reinforced or prestressed concrete section; pair it with a concrete material. |
section.width | number | yes | > 0 — Section width b perpendicular to the bending plane (m for si, ft for us). |
section.height | number | yes | > 0 — Section height h in the bending plane (m for si, ft for us). |
section.reinforcement | object | no | Symmetric perimeter bars or strands; omit for plain concrete. |
section.reinforcement.layout | "perimeter" | yes | Symmetric straight-sided perimeter layout (the only layout). |
section.reinforcement.barsPerFace | number | yes | integer, 2 – 100 — Identical bars on each of the top and bottom faces (the faces spanning the width, at the extremes of the bending direction), including the two corner bars. |
section.reinforcement.barsPerSide | number | yes | integer, 0 – 99 — Additional identical bars on each of the two side faces, excluding the corner bars already counted in barsPerFace. |
section.reinforcement.area | number | yes | > 0 — Cross-sectional area of one bar or strand (m² for si, ft² for us). |
section.reinforcement.barDiameter | number | yes | > 0 — Physical outside diameter of one bar or strand (m for si, ft for us), used for cover, containment and overlap checks. |
section.reinforcement.clearCover | number | yes | > 0 — Clear distance from the concrete face to the outside of the bar (m for si, ft for us); bar centres sit at clearCover + barDiameter/2 from each face. |
section.reinforcement.yieldStress | number | yes | > 0 — Yield stress fy shared by every bar, or fpy for strands (kPa for si, ksf for us). |
section.reinforcement.elasticModulus | number | yes | > 0 — Elastic modulus Es shared by every bar (kPa for si, ksf for us). |
section.reinforcement.effectivePrestrain | number | no | ≥ 0 — Effective prestrain of prestressing strands after losses, ε_pe = f_pe/Es (dimensionless tensile strain). Omit or use 0 for ordinary reinforcing bars. |
section.reinforcement.hardeningRatio | number | no | 0 – 1 — Post-yield hardening ratio E_tangent/Es (0–1); omitted means 0 (elastic–perfectly-plastic). |
section.reinforcement.tensionRuptureStrain | number | no | > 0 — Tensile strain magnitude at which the reinforcement ruptures (dimensionless); must exceed the yield strain fy/Es and effectivePrestrain. Omit when rupture is not modelled. |
section.reinforcement.strandGrade | 250 | 270 | no | Prestressing-strand grade fpu in ksi (250 or 270). When set, strand stress follows the PCI stress–strain relation (PCI MNL-116, 2nd ed., Fig. 2.2.5.1, p. 2-8) instead of an elastic–perfectly-plastic branch at yieldStress; elasticModulus must then equal 28,500 ksi (196,500 MPa) within 1 % and hardeningRatio must be omitted. Omit for ordinary reinforcing bars. |
section.rebarConcreteDisplacement | "subtract" | "overlap" | no | Required when reinforcement is present. subtract: bars replace their area of concrete (physical net section). overlap: concrete is not reduced, reproducing OpenSees patch-plus-layer sections. |
section.confinedCore | object | no | Optional rectangular confined core, bounded by coverDepth on all four faces, with its own concrete material. |
section.confinedCore.coverDepth | number | yes | > 0 — Distance from every concrete face to the confined-core boundary (m for si, ft for us); perimeter bar centres must lie in this cover or on the core boundary. |
section.confinedCore.material | object | yes | Concrete material for the confined core; the cover concrete outside the core uses the main concrete material. |
section.confinedCore.material.kind | "concrete" | yes | Concrete fiber material; pair it with a round-concrete or rectangular-concrete section. |
section.confinedCore.material.compressiveStrength | number | yes | > 0 — Concrete cylinder compressive strength f′c as a positive magnitude (kPa for si, ksf for us). |
section.confinedCore.material.elasticModulus | number | no | > 0 — Concrete elastic modulus Ec (kPa for si, ksf for us). Omitted for hognestad/todeschini: the ACI value 4700·√f′c (f′c in MPa), converted to the request's units. For concrete01 Ec is 2·f′c/peakStrain, and a supplied value must equal that. |
section.confinedCore.material.peakStrain | number | no | > 0 — Compressive strain ε0 at peak stress f′c (dimensionless). Omitted for hognestad/todeschini: 1.7·f′c/Ec. Required for concrete01. |
section.confinedCore.material.ultimateStrain | number | no | > 0 — Extreme-fiber compressive strain limit εcu (dimensionless), greater than peakStrain. Hognestad/todeschini: the ACI crushing strain at which the nominal moment Mn is read; omitted means 0.003. Concrete01 (required): the strain at which the stress has descended to residualStrength. |
section.confinedCore.material.descendingStrain | number | no | > 0 — Hognestad only: strain at which the linear post-peak branch reaches 0.85·f′c (dimensionless), greater than peakStrain; omitted means 0.0038. Not accepted by todeschini or concrete01. |
section.confinedCore.material.tensileStrength | number | no | ≥ 0 — Modulus of rupture fr, the tensile stress at which the concrete cracks, as a positive magnitude (kPa for si, ksf for us). Omitted for hognestad/todeschini: the ACI value 0.62·√f′c (MPa), converted to the request's units. Concrete01 carries no tension: omit it or use 0. |
section.confinedCore.material.model | "todeschini" | "hognestad" | "concrete01" | no | Compression stress–strain envelope. hognestad (default, LPILE-compatible): parabola to f′c, then a linear descending branch. todeschini: smooth Todeschini curve. concrete01: zero-tension Kent-Scott-Park envelope as in the OpenSees benchmark; requires peakStrain, ultimateStrain and residualStrength. |
section.confinedCore.material.residualStrength | number | no | ≥ 0 — Concrete01 only (required there): residual compressive stress reached at ultimateStrain, between 0 and compressiveStrength (kPa for si, ksf for us). |
material | object | no | Material model for `section`: concrete sections need a concrete material, steel/elastic sections a steel material. Supply together with section. |
material.kind = "concrete" | variant | yes | Concrete fiber material; pair it with a round-concrete or rectangular-concrete section. |
material.compressiveStrength | number | yes | > 0 — Concrete cylinder compressive strength f′c as a positive magnitude (kPa for si, ksf for us). |
material.elasticModulus | number | no | > 0 — Concrete elastic modulus Ec (kPa for si, ksf for us). Omitted for hognestad/todeschini: the ACI value 4700·√f′c (f′c in MPa), converted to the request's units. For concrete01 Ec is 2·f′c/peakStrain, and a supplied value must equal that. |
material.peakStrain | number | no | > 0 — Compressive strain ε0 at peak stress f′c (dimensionless). Omitted for hognestad/todeschini: 1.7·f′c/Ec. Required for concrete01. |
material.ultimateStrain | number | no | > 0 — Extreme-fiber compressive strain limit εcu (dimensionless), greater than peakStrain. Hognestad/todeschini: the ACI crushing strain at which the nominal moment Mn is read; omitted means 0.003. Concrete01 (required): the strain at which the stress has descended to residualStrength. |
material.descendingStrain | number | no | > 0 — Hognestad only: strain at which the linear post-peak branch reaches 0.85·f′c (dimensionless), greater than peakStrain; omitted means 0.0038. Not accepted by todeschini or concrete01. |
material.tensileStrength | number | no | ≥ 0 — Modulus of rupture fr, the tensile stress at which the concrete cracks, as a positive magnitude (kPa for si, ksf for us). Omitted for hognestad/todeschini: the ACI value 0.62·√f′c (MPa), converted to the request's units. Concrete01 carries no tension: omit it or use 0. |
material.model | "todeschini" | "hognestad" | "concrete01" | no | Compression stress–strain envelope. hognestad (default, LPILE-compatible): parabola to f′c, then a linear descending branch. todeschini: smooth Todeschini curve. concrete01: zero-tension Kent-Scott-Park envelope as in the OpenSees benchmark; requires peakStrain, ultimateStrain and residualStrength. |
material.residualStrength | number | no | ≥ 0 — Concrete01 only (required there): residual compressive stress reached at ultimateStrain, between 0 and compressiveStrength (kPa for si, ksf for us). |
material.kind = "steel" | variant | no | Elastic–(bilinear-)plastic steel material; may be omitted. Pair it with a solid-circular, pipe or rectangular section. |
material.elasticModulus | number | yes | > 0 — Young's modulus E of the section material (kPa for si, ksf for us). |
material.yieldStress | number | yes | > 0 — Yield stress Fy of the section material (kPa for si, ksf for us). |
material.hardeningRatio | number | no | 0 – 1 — Post-yield hardening ratio E_tangent/E (0–1); omitted means 0 (elastic–perfectly-plastic). |
material.ultimateStrain | number | no | > 0 — Symmetric extreme-fiber strain magnitude that ends the moment–curvature response (dimensionless); must exceed the yield strain Fy/E. Hardening steel (hardeningRatio > 0) needs this or, in a moment-curvature request, maxCurvature. |
eiCurve[] | object[] | no | min 2 items — User-defined moment–curvature table; the pile EI at each node is M/κ interpolated from it at the local moment. Above the last point PileCalc uses 0.05 × the last secant EI, a numerical continuation with no published basis, and the response carries a warning. An alternative to section + material. |
eiCurve[].moment | number | yes | > 0 — Bending moment (kN·m for si, kip·ft for us); strictly increasing. |
eiCurve[].curvature | number | yes | > 0 — Curvature at that moment (1/m for si, 1/ft for us); strictly increasing. |
momentCapacity | number | object[] | no | Plastic moment capacity Mcap (kN·m for si, kip·ft for us), either one constant value or a capacity-versus-depth table interpolated linearly. Where the moment reaches it a plastic hinge forms. Omit for an elastic pile. |
lrfd | object | no | LRFD load-combination check: each case factors the unfactored loads, runs the analysis with a shear-moment head at the factored loads, and checks the maximum moment and shear against φ_b·Mn and φ_v·Vn. |
lrfd.loads[] | object[] | yes | min 1 item — Unfactored pile-head loads, each tagged by load type. |
lrfd.loads[].type | "dead" | "live" | "earthquake" | "impact" | "wind" | "water" | "ice" | "soil-pressure" | "live-roof" | "rain" | "snow" | "temperature" | "special" | yes | Load type; each case's factors are keyed by these types. |
lrfd.loads[].shear | number | yes | Unfactored lateral shear at the pile head (kN for si, kip for us). |
lrfd.loads[].axial | number | no | Unfactored axial load, compression positive (kN for si, kip for us). Omitted defaults to 0. |
lrfd.loads[].moment | number | no | Unfactored bending moment at the pile head (kN·m for si, kip·ft for us). Omitted defaults to 0. |
lrfd.loads[].distributed | number | no | Unfactored uniform distributed lateral load along the whole pile (force/length: kN/m for si, kip/ft for us). Omitted defaults to 0. |
lrfd.cases[] | object[] | no | min 1 item — Load-and-resistance combinations. Omitted uses the preset 1.4D; 1.2D + 1.6L + 0.5Lr; 1.2D + 1.6Lr + 1.0L, in which case every nonzero load must be dead, live or live-roof. |
lrfd.cases[].name | string | yes | Label for the combination, e.g. "1.2D + 1.6L". |
lrfd.cases[].factors | object | yes | Load factor per load type; types not listed get a factor of 0. |
lrfd.cases[].phiFlexure | number | yes | 0 – 1 — Flexural resistance factor φ_b applied to the nominal moment Mn. |
lrfd.cases[].phiShear | number | no | 0 – 1 — Shear resistance factor φ_v applied to the shear capacity Vn. Required when lrfd.shearCapacity is supplied. |
lrfd.phiFlexure | number | no | 0 – 1 — Flexural resistance factor φ_b for the preset combinations (used only when cases is omitted). Omitted defaults to 0.9. |
lrfd.phiShear | number | no | 0 – 1 — Shear resistance factor φ_v for the preset combinations (used only when cases is omitted). Omitted defaults to 0.75. |
lrfd.nominalMoment | number | no | > 0 — Nominal moment capacity Mn (kN·m for si, kip·ft for us). Required unless section + material is supplied, in which case the section's nominal moment (concrete) or plastic moment is used. |
lrfd.shearCapacity | number | no | > 0 — Nominal shear capacity Vn (kN for si, kip for us). Omit to skip the shear check. |
Response fields
| Field | Type | Description |
|---|---|---|
converged | boolean | Whether the nonlinear p-y iteration converged. Treat a non-converged result as unusable. |
iterations | number | Iterations the solver needed. |
head.deflection | number | Pile-head lateral deflection (m for si, ft for us). |
head.slope | number | Pile-head slope (rad). |
head.moment | number | Moment at the head (kN·m for si, kip·ft for us). |
head.shear | number | Shear at the head (kN for si, kip for us). |
maxMoment.value | number | Largest-magnitude bending moment along the pile (kN·m for si, kip·ft for us). |
maxMoment.depth | number | Depth of the maximum moment, from the pile head (m for si, ft for us). |
maxDeflection.value / .depth | number | Largest-magnitude deflection and its depth (both m for si, ft for us). |
maxShear.value / .depth | number | Largest-magnitude shear (kN for si, kip for us) and its depth (m for si, ft for us). |
equilibrium.residual | number | Unbalanced force after convergence (kN for si, kip for us) — a solution-quality check against equilibrium.applied. |
equilibrium.applied | number | Total applied lateral load (kN for si, kip for us). |
nodes[] | object[] | The full solution, one entry per finite-difference node from head to tip. |
nodes[].depth | number | Depth from the pile head (m for si, ft for us). |
nodes[].soilDepth | number | Depth below the ground surface (m for si, ft for us) — differs from depth when the head is above grade. |
nodes[].deflection | number | Lateral deflection y (m for si, ft for us). |
nodes[].slope | number | Slope dy/dz (rad). |
nodes[].moment | number | Bending moment (kN·m for si, kip·ft for us). |
nodes[].shear | number | Shear force (kN for si, kip for us). |
nodes[].soilReaction | number | Mobilized soil reaction p (kN/m for si, kip/ft for us); opposes the deflection. |
warnings[] | string[] | Present only when the result rests on a modelling choice that no published source determines (for example the up-slope sand wedge where it is undefined, an ISO-clay strength profile with no positive mudline intercept, or Georgiadis layering with an ISO-clay strength gradient). Each entry names the conservative choice that was made. |
sweep[] | object[] | Present when the request set sweep — one entry per pushover step, each an independent solution at the proportionally scaled head load: shear, moment, headDeflection, headSlope, maxMoment, maxMomentDepth, maxDeflection, converged. |
sectionProperties | object | Present when the request set section + material (cracked-section nonlinear EI): the fiber-integrated section's elasticEI (kN·m² for si, kip·ft² for us), yieldMoment, and plasticMoment (kN·m for si, kip·ft for us). |
Code examples
A complete, runnable request. Replace YOUR_API_KEY (or set PILECALC_API_KEY in your environment).
curl https://api.pilecalc.com/v1/lateral \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"unitSystem": "si",
"pile": {
"kind": "uniform",
"length": 15,
"diameter": 0.61,
"ei": 143000,
"groundSurfaceDepth": 0
},
"soil": {
"layers": [
{
"model": "soft-clay",
"top": 0,
"bottom": 4,
"gamma": 8.5,
"c": 24,
"e50": 0.02
},
{
"model": "sand-reese",
"top": 4,
"bottom": 15,
"gamma": 9.5,
"phi": 34,
"k": 16300
}
]
},
"head": {
"kind": "shear-moment",
"shear": 312,
"moment": 0
},
"axialLoad": 1200,
"loadType": "cyclic",
"layering": "direct",
"increments": 120
}'The GET variant returns head.deflection,maxMoment.value as a plain-text CSV line — made for Excel's WEBSERVICE() and Sheets' IMPORTDATA() (see Use PileCalc in Excel). Omit fields to get the full JSON response.
Interpreting results
- Check
convergedfirst. If false, the pile is likely failing (soil fully mobilized) or too short — the numbers are not an equilibrium solution. - Deflections and moments follow the sign of the applied load; see Units & sign conventions.
nodeshasincrements + 1entries (default 101: omittedincrementsmeans 100). For plots, usenodes[].depthvs.deflection/moment/shear.equilibrium.residualshould be small relative toequilibrium.applied; a large residual withconverged: trueis a red flag worth reporting.
Sizing runs
sweep (e.g. { "steps": 20 }) instead of sweeping head.shear across calls — the whole pushover curve comes back in sweep[] and costs a single request of your monthly quota.