API: shallow footing
POST /v1/footing — request and response fields for bearing, settlement, sliding, and eccentric tilt, with runnable examples.
Runs the strict shallow-footing path used by the interactive tool, Convex action, REST endpoint, Excel integration, saved reruns, and reports. The method combines FHWA GEC 6 effective-area and serviceability procedures with explicit gross/net semantics, layered strain, primary consolidation, and a fail-closed contact model. See Shallow footings for equations and limits.
Endpoint
https://api.pilecalc.com/v1/footing/v1/footing?key=…&req=…&fields=…(for header-less callers)Every dimensional request declares unitSystem. The vertical load uses the single gross-at-base-including-foundation-weight basis. Settlement layers are ordered from zero below the base and extend through at least four maximum plan dimensions. Groundwater requires its depth, saturated unit weights for affected layers, and waterUnitWeight; no SI or US default is inferred.
A nonzero shear load requires an explicit sliding model. Select either drained-friction with baseFrictionCoefficient or undrained-adhesion with baseAdhesion. These are alternative FHWA interface checks and cannot be combined. Undrained adhesion also requires phi: 0.
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 | "fhwa-gec6-effective-area-layered" | yes | |
verticalLoadBasis | "gross-at-base-including-foundation-weight" | yes | |
groundSurface | "level" | yes | |
baseOrientation | "horizontal" | yes | |
width | number | yes | > 0 |
length | number | yes | > 0 |
depth | number | yes | ≥ 0 |
cohesion | number | yes | ≥ 0 |
phi | number | yes | 0 – 45 |
gamma | number | yes | > 0 |
waterTableDepth | number | no | ≥ 0 |
gammaSat | number | no | > 0 |
waterUnitWeight | number | no | > 0 |
verticalLoad | number | yes | > 0 |
shearLoad | number | yes | ≥ 0 |
momentX | number | yes | |
momentY | number | yes | |
bearingFactorOfSafety | number | yes | > 1 |
settlementLayers[] | object[] | yes | min 1 item, max 20 items |
settlementLayers[].top | number | yes | ≥ 0 |
settlementLayers[].bottom | number | yes | > 0 |
settlementLayers[].unitWeight | number | yes | > 0 |
settlementLayers[].saturatedUnitWeight | number | no | > 0 |
settlementLayers[].elasticModulus | number | yes | > 0 |
settlementLayers[].poisson | number | yes | 0 – 0.49 |
settlementLayers[].consolidation | object | no | |
settlementLayers[].consolidation.compressionIndex | number | yes | > 0 |
settlementLayers[].consolidation.recompressionIndex | number | yes | ≥ 0 |
settlementLayers[].consolidation.initialVoidRatio | number | yes | ≥ 0 |
settlementLayers[].consolidation.preconsolidationStress | number | yes | > 0 |
sliding | object | no | |
sliding.interfaceMode = "drained-friction" | variant | yes | |
sliding.direction | "along-width" | "along-length" | yes | |
sliding.passiveReductionFactor | number | yes | 0 – 1 |
sliding.baseFrictionCoefficient | number | yes | ≥ 0 |
sliding.interfaceMode = "undrained-adhesion" | variant | yes | |
sliding.direction | "along-width" | "along-length" | yes | |
sliding.passiveReductionFactor | number | yes | 0 – 1 |
sliding.baseAdhesion | number | yes | ≥ 0 |
Response fields
| Field | Type | Description |
|---|---|---|
method | object | Exact method ID, designation, edition, component models, and validation status. |
bearing.grossUltimatePressure | number | Gross ultimate bearing pressure in the declared unit system. |
bearing.surchargePressure | number | Effective overburden pressure removed to form the net basis. |
bearing.netUltimatePressure | number | Net ultimate pressure = gross ultimate pressure − surcharge. |
bearing.grossDesignLoad / .netDesignLoad | number | Design loads on the effective area, retained on separate gross and net bases. |
bearing.appliedGrossPressureOnEffectiveArea | number | Declared gross-at-base vertical load divided by B′L′. |
bearing.appliedNetPressureOnEffectiveArea | number | Applied gross pressure less effective surcharge. |
bearing.actualFactorOfSafety | number | Net ultimate pressure divided by applied net pressure. |
bearing.effectiveWidth / .effectiveLength / .effectiveArea | number | Biaxial Meyerhof effective dimensions and area. |
bearing.kernUtilization | number | 6(|eₓ|/B + |eᵧ|/L); requests at or above 1 fail closed. |
contact | object | Average, minimum, and maximum gross linear-contact pressure; fullCompression is always true. |
settlement.immediate | number | Layered constrained-elastic settlement from the integrated 2:1 stress distribution. |
settlement.consolidation | number | Primary one-dimensional e-log consolidation; zero for layers without explicit parameters. |
settlement.total | number | Immediate plus primary consolidation settlement. |
settlement.layers[] | array | Per-layer stress increment, initial/final effective stress, immediate strain, and consolidation. |
rotation | object | Signed rotations about x and y, resultant rotation, and four edge settlements. |
sliding.interfaceMode | string | null | drained-friction, undrained-adhesion, or null when no sliding model is supplied. |
sliding.baseFriction / .baseAdhesion | number | Alternative base-interface components; the API never adds both. |
sliding.passive / .totalResistance / .factorOfSafety | number | null | Explicitly reduced passive component, total resistance, and resistance/demand ratio. |
applicability | object | Declared in-domain status and limitations that remain attached to the result. |
scientificMetadata | object | Engine, schema, manifest, unit-system, primary-method, and applicability stamp added by the API boundary. |
Code examples
A complete, runnable request. Replace YOUR_API_KEY (or set PILECALC_API_KEY in your environment).
curl https://api.pilecalc.com/v1/footing \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"unitSystem": "si",
"method": "fhwa-gec6-effective-area-layered",
"verticalLoadBasis": "gross-at-base-including-foundation-weight",
"groundSurface": "level",
"baseOrientation": "horizontal",
"width": 2.5,
"length": 3,
"depth": 1.5,
"cohesion": 20,
"phi": 30,
"gamma": 18.5,
"verticalLoad": 1800,
"shearLoad": 150,
"momentX": 0,
"momentY": 220,
"bearingFactorOfSafety": 3,
"settlementLayers": [
{
"top": 0,
"bottom": 4,
"unitWeight": 18.5,
"elasticModulus": 25000,
"poisson": 0.3
},
{
"top": 4,
"bottom": 12,
"unitWeight": 19,
"elasticModulus": 12000,
"poisson": 0.35,
"consolidation": {
"compressionIndex": 0.24,
"recompressionIndex": 0.04,
"initialVoidRatio": 0.8,
"preconsolidationStress": 150
}
}
],
"sliding": {
"direction": "along-width",
"interfaceMode": "drained-friction",
"baseFrictionCoefficient": 0.4,
"passiveReductionFactor": 0.5
}
}'The GET variant returns bearing.grossDesignLoad,settlement.total,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.
Scientific contract
- The request is rejected if width exceeds length, layers are discontinuous or too shallow, groundwater data are incomplete, the load reaches the kern boundary, or any corner would unload below the removed overburden.
- Gross, net, ultimate, design, and applied quantities remain separate. Do not compare a gross demand to a net resistance without making the basis conversion explicit.
- Consolidation is primary one-dimensional e-log compression only. Secondary compression, creep, cyclic rocking, contact loss, sloping ground, and battered bases are outside the released domain.
Validated against published examples