API: axial capacity & settlement
POST /v1/axial — request and response fields for NAVFAC capacity and the load–settlement curve, with runnable examples.
Computes single-pile axial capacity and settlement: side friction and end bearing by the NAVFAC DM-7.02 static method, elastic + Vesić settlement, and the full load–settlement curve so capacity can also be read off at a settlement limit. Compression, uplift, and downdrag are all reported. The method and every input are explained in Axial capacity & settlement; the same analysis runs interactively at the axial tool.
Endpoint
https://api.pilecalc.com/v1/axial/v1/axial?key=…&req=…&fields=…(for header-less callers)The request takes a pile (uniform or sectioned, with elasticModulus and unitWeight; displacement: true for driven displacement piles) and a soil profile of layers typed cohesive / cohesionless / rock. Each layer must carry the strength parameter its type uses — cohesion (or qu) for cohesive, phi for cohesionless, qu plus an explicit rockJointCondition for rock. Jointed rock also requires rqd from 20 through 100 and is rejected at the pile tip until a compatible base method is released. Factors of safety, transfer discretization, method, and an unfactored serviceLoad are explicit. If a water table is present,waterUnitWeight is required; there are no hidden water or numerical defaults.
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 | |
method | "navfac-dm7-reese-oneill" | yes | |
pile | object | yes | |
pile.kind = "uniform" | variant | no | |
pile.length | number | yes | > 0 |
pile.diameter | number | yes | > 0 |
pile.tipArea | number | no | > 0 |
pile.batterDeg | number | no | 0 – 45 |
pile.elasticModulus | number | yes | > 0 |
pile.unitWeight | number | yes | ≥ 0 |
pile.displacement | boolean | no | |
pile.deltaDeg | number | no | 0 – 60 |
pile.frictionFactor | number | no | > 0 |
pile.kind = "sectioned" | variant | yes | |
pile.sections[] | object[] | yes | min 1 item |
pile.sections[].top | number | yes | ≥ 0 |
pile.sections[].bottom | number | yes | > 0 |
pile.sections[].diameter | number | yes | > 0 |
pile.sections[].perimeter | number | no | > 0 |
pile.sections[].area | number | no | > 0 |
pile.tipArea | number | no | > 0 |
pile.batterDeg | number | no | 0 – 45 |
pile.elasticModulus | number | yes | > 0 |
pile.unitWeight | number | yes | ≥ 0 |
pile.displacement | boolean | no | |
pile.deltaDeg | number | no | 0 – 60 |
pile.frictionFactor | number | no | > 0 |
soil | object | yes | |
soil.layers[] | object[] | yes | min 1 item |
soil.layers[].top | number | yes | ≥ 0 |
soil.layers[].bottom | number | yes | > 0 |
soil.layers[].gamma | number | yes | > 0 |
soil.layers[].type | "cohesive" | "cohesionless" | "rock" | yes | |
soil.layers[].cohesion | number | no | ≥ 0 |
soil.layers[].phi | number | no | 0 – 60 |
soil.layers[].sptN | number | no | ≥ 0 |
soil.layers[].qu | number | no | ≥ 0 |
soil.layers[].rockJointCondition | "massive-intact" | "closed" | "open-or-gouge-filled" | no | |
soil.layers[].rqd | number | no | 0 – 100 |
soil.layers[].kDown | number | no | > 0 |
soil.layers[].kUp | number | no | > 0 |
soil.layers[].kc | number | no | > 0 |
soil.layers[].ka | number | no | > 0 |
soil.waterTableDepth | number | no | ≥ 0 |
soil.waterUnitWeight | number | no | > 0 |
serviceLoad | number | yes | > 0 |
segments | number | yes | integer, 20 – 500 |
penetrationRatioSide | number | yes | > 0 |
penetrationRatioTip | number | yes | > 0 |
kDown | number | yes | > 0 |
kUp | number | yes | > 0 |
fsTip | number | yes | > 0 |
fsSide | number | yes | > 0 |
fsWeight | number | yes | > 0 |
fsUplift | number | yes | > 0 |
allowableSettlement | number | no | > 0 |
loadSettlementPoints | number | yes | integer, 20 – 500 |
maxTipSettlement | number | yes | > 0 |
convergenceTolerance | number | yes | 0 – 0.1 |
Response fields
| Field | Type | Description |
|---|---|---|
capacity.tip | number | Ultimate end-bearing capacity (kN). |
capacity.side | number | Ultimate side (skin) friction in compression (kN). |
capacity.ultimateDown | number | Ultimate downward capacity: tip + side (kN). |
capacity.allowableDown | number | Allowable downward capacity after fsTip / fsSide (kN). |
capacity.weight | number | Pile self-weight (kN); credited to uplift. |
capacity.sideUplift | number | Ultimate side friction in uplift (kN). |
capacity.ultimateUplift | number | Ultimate uplift capacity: side uplift + weight (kN). |
capacity.allowableUplift | number | Allowable uplift capacity after fsUplift / fsWeight (kN). |
capacity.downdrag | number | Negative skin friction (downdrag) from settling layers (kN). |
capacity.tipPressure | number | Ultimate unit tip bearing pressure (kPa). |
capacity.segments[] | object[] | Depth-wise breakdown of side resistance, one entry per pile segment. |
capacity.segments[].depth / .length | number | Segment top depth and length (m). |
capacity.segments[].sideDown / .sideUp | number | Segment side resistance in compression / uplift (kN). |
capacity.segments[].negative | number | Segment downdrag contribution (kN). |
settlement.shaft | number | Elastic shortening of the pile shaft (m). |
settlement.point | number | Tip settlement from load at the point (Vesić) (m). |
settlement.shaftTransmitted | number | Tip settlement from load transmitted along the shaft (m). |
settlement.total | number | Vesić estimate at fully mobilized resistance (m); the service-load settlement is service.settlement. |
loadSettlement[] | object[] | The load–settlement curve (t-z style mobilization). |
loadSettlement[].settlement | number | Head settlement (m). |
loadSettlement[].load / .sideLoad / .tipLoad | number | Total, side, and tip load mobilized at that settlement (kN). |
capacityAtSettlement | number? | Load at the requested allowableSettlement (kN). Present only when allowableSettlement was supplied. |
service.load / .settlement | number | Declared unfactored service load and solved head settlement. |
service.sideLoad / .tipLoad | number | Side and tip load carried at the service state. |
service.relativeLoadResidual | number | Relative service-load residual from the converged bisection. |
convergence | object | Fine-versus-half-mesh resistance and service-settlement check; responses fail closed if it exceeds the request tolerance. |
method | object | Exact method ID, editions, transfer basis, and tip-interface convention. |
Code examples
A complete, runnable request. Replace YOUR_API_KEY (or set PILECALC_API_KEY in your environment).
curl https://api.pilecalc.com/v1/axial \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"unitSystem": "si",
"method": "navfac-dm7-reese-oneill",
"pile": {
"kind": "uniform",
"length": 18,
"diameter": 0.61,
"elasticModulus": 30000000,
"unitWeight": 24,
"displacement": true
},
"soil": {
"layers": [
{
"type": "cohesive",
"top": 0,
"bottom": 6,
"gamma": 17.5,
"cohesion": 45
},
{
"type": "cohesionless",
"top": 6,
"bottom": 13,
"gamma": 19,
"phi": 34
},
{
"type": "rock",
"top": 13,
"bottom": 18,
"gamma": 22,
"qu": 4500,
"rockJointCondition": "massive-intact"
}
],
"waterTableDepth": 3,
"waterUnitWeight": 9.81
},
"serviceLoad": 1000,
"segments": 240,
"penetrationRatioSide": 20,
"penetrationRatioTip": 20,
"kDown": 1,
"kUp": 1,
"fsTip": 3,
"fsSide": 2,
"fsWeight": 1.5,
"fsUplift": 3,
"allowableSettlement": 0.012,
"loadSettlementPoints": 160,
"maxTipSettlement": 0.08,
"convergenceTolerance": 0.05
}'The GET variant returns capacity.allowableDown,service.settlement,method.id 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
allowableDownis the design number for compression;allowableUpliftfor tension. Thesegmentsarray shows where the side resistance comes from, layer by layer.service.settlementis the serviceability result at the exactserviceLoadyou supply.settlement.totalis the Vesić estimate at fully mobilized resistance, andloadSettlementis the plotted transfer curve.- Downdrag (
capacity.downdrag) is reported separately — subtract it from capacity per your code's load-combination rules rather than assuming the API did.
The water-unit-weight trap
soil.waterUnitWeight — pass 9.81 for the SI bundle or 0.0624 for the US kip–foot bundle (see Units & conventions).