API: pile buckling
POST /v1/buckling — finite-pile generalized eigenvalue request, convergence metadata, and signed eigenmode.
Solves the smallest positive generalized eigenvalue of a finite Euler–Bernoulli pile on explicitly linear Winkler support. The method and limitations are explained in Pile buckling; the same analysis runs interactively at the buckling tool.
Endpoint
https://api.pilecalc.com/v1/buckling/v1/buckling?key=…&req=…&fields=…(for header-less callers)The request reuses the lateral pile geometry, but the soil profile is restricted toelastic layers or a user layer declaring only a constant linear es. Declare headFixity and tipFixity as free, fixed-rotation, pinned, or fixed. Optional controls set mesh size and convergence tolerances.
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 in the /v1/lateral pile format (uniform or sectioned); unrecognized fields are rejected. |
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 | object | yes | Lateral soil profile covering the embedded pile length. Without nonlinearPath, only elastic layers or user layers with a constant linear es (no curves) are accepted. With nonlinearPath, layers may be elastic, sand-reese, sand-api or soft-clay (static). |
nonlinearPath | object | no | Selects the nonlinear load-path method: holds the head shear and moment constant, raises axial compression on static p-y springs, and fits an LPILE-style hyperbola to estimate the buckling load. Requires a free tip, a free or fixed-rotation head, and no eigen controls. Omit for the linear eigenvalue method. |
nonlinearPath.shear | number | yes | Constant lateral head shear applied throughout the compression path (kN for si, kip for us); nonzero. |
nonlinearPath.moment | number | yes | Constant head moment (kN·m for si, kip·ft for us), in the same direction as shear; 0 for a fixed-rotation head. |
nonlinearPath.maximumAxialLoad | number | yes | > 0 — Final axial compression of the path (kN for si, kip for us), reached in loadSteps equal increments from zero; must be below axialCapacity. |
nonlinearPath.loadSteps | number | yes | integer, 10 – 100 — Number of equal compression increments from zero to maximumAxialLoad; the result is also checked against a run with twice as many. |
nonlinearPath.axialCapacity | number | yes | > 0 — User-declared axial material limit of the pile (kN for si, kip for us); an applicability bound, not a computed capacity. |
nonlinearPath.momentCapacity | number | yes | > 0 — User-declared elastic moment limit of the pile (kN·m for si, kip·ft for us); the path is rejected if the maximum pile moment reaches it. |
headFixity | "free" | "fixed-rotation" | "pinned" | "fixed" | no | default "free" — Restraint at the pile head: free, fixed-rotation (rotation restrained, translation free), pinned (translation restrained, rotation free) or fixed (both restrained). Defaults to free. |
tipFixity | "free" | "fixed-rotation" | "pinned" | "fixed" | no | default "free" — Restraint at the physical pile tip: free, fixed-rotation (rotation restrained, translation free), pinned (translation restrained, rotation free) or fixed (both restrained). Defaults to free. |
increments | number | no | integer, 20 – 800 — Nominal number of mesh elements along the pile; section, ground and layer interfaces are inserted exactly. Omitted means 120 for the linear method and 200 with nonlinearPath, which accepts 40–400. |
eigenTolerance | number | no | 0 – 0.0001 — Linear method only: relative residual tolerance for the eigenpair; omitted means 1e-8. |
maxEigenIterations | number | no | integer, 20 – 5000 — Linear method only: maximum symmetric-Lanczos iterations used to extract the first eigenpair; omitted means 5000. |
meshConvergenceTolerance | number | no | 0 – 0.1 — Linear method only: maximum relative difference between the full- and half-resolution critical loads; omitted means 0.01. |
Response fields
| Field | Type | Description |
|---|---|---|
convergence.relativeLoadStepDifference | number (nonlinear mode) | Relative change in the fitted estimate between requested N and refined 2N compression increments, at fixed fine spatial mesh; maximum 0.01. |
convergence.refinedLoadSteps | number (nonlinear mode) | Actual returned compression increments, exactly twice requested loadSteps; points contains this count plus one. |
convergence.loadStepPathRelativeDifference | number (nonlinear mode) | Maximum head-deflection change at shared load points under compression-step refinement; maximum 0.01. |
fit.estimatedBucklingLoad | number (nonlinear mode) | Hyperbolic load-path asymptote estimate; not an exact failure load or material capacity. |
points[] | object[] (nonlinear mode) | Every converged compression step: axialLoad, headDeflection, maximumMoment, maximumSlope, iterations and relativeForceResidual. |
limits | object (nonlinear mode) | Supplied material limits, maximum observed moment, and whether the extrapolated estimate exceeds the axial limit. |
criticalLoad | number | Smallest positive elastic buckling eigenvalue, compression positive. |
method | object | Stable method ID, designation, and generalized eigenproblem. |
method.edition | string | Versioned PileCalc formulation used by this result. |
method.axialForceDistribution | string | Declares that the eigenproblem uses constant compression over the full pile length. |
method.foundationBasis | string | Declares the explicitly linear Winkler support basis. |
convergence | object | Eigen residual/change and independent fine/coarse mesh evidence. |
convergence.residual | number | Normalized residual of the transformed symmetric eigenpair. |
convergence.meshRelativeDifference | number | Relative critical-load difference between full and half-resolution meshes. |
modeShape[] | object[] | Signed first eigenmode, normalized to max |y| = 1. |
modeShape[].depth | number | Node depth below the pile head. |
modeShape[].y | number | Normalized signed lateral displacement. |
modeShape[].rotation | number | Signed mode rotation per unit normalized displacement. |
Code examples
A complete, runnable request. Replace YOUR_API_KEY (or set PILECALC_API_KEY in your environment).
curl https://api.pilecalc.com/v1/buckling \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"unitSystem": "si",
"pile": {
"kind": "uniform",
"length": 20,
"diameter": 0.61,
"ei": 143000,
"groundSurfaceDepth": 4
},
"soil": {
"layers": [
{
"model": "elastic",
"top": 0,
"bottom": 16,
"gamma": 9,
"esTop": 0,
"esBottom": 12000
}
]
},
"headFixity": "fixed-rotation",
"tipFixity": "fixed",
"increments": 80
}'The GET variant returns criticalLoad,method,convergence 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.
To use the nonlinear method, add nonlinearPath containing shear, moment, maximumAxialLoad, loadSteps (10–100 increments), axialCapacity, and momentCapacity. Supply a free physical tip and a free or fixed-rotation head; use zero applied moment with fixed rotation. Use 40–400 mesh increments. Omit eigen controls. Supported static soil models are sand-reese, sand-api, soft-clay and elastic. The response contains fit, points, limits and path convergence; it does not contain criticalLoad or modeShape.
Interpreting results
criticalLoadis an elastic stability limit, not allowable or factored resistance.- The mode sign and amplitude are arbitrary; the API fixes sign deterministically and normalizes max
|y|to one. - The response is returned only after both the eigen residual and the fine/coarse mesh difference satisfy their limits.
- Nonlinear p-y curves require the explicit nonlinearPath request. Failed equilibrium or material-limit crossings reject the result; they are never returned as buckling loads.
- The geometric-stiffness matrix assumes constant compression over the full pile length; variable axial-force distributions from shaft transfer or self-weight are outside this method.
- A zero-stiffness foundation is accepted only when the declared end restraints remove both rigid-body modes.
Deterministic runtime