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

POST
https://api.pilecalc.com/v1/footing
GET
/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.

FieldTypeRequiredConstraints
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
widthnumberyes> 0
lengthnumberyes> 0
depthnumberyes≥ 0
cohesionnumberyes≥ 0
phinumberyes0 – 45
gammanumberyes> 0
waterTableDepthnumberno≥ 0
gammaSatnumberno> 0
waterUnitWeightnumberno> 0
verticalLoadnumberyes> 0
shearLoadnumberyes≥ 0
momentXnumberyes
momentYnumberyes
bearingFactorOfSafetynumberyes> 1
settlementLayers[]object[]yesmin 1 item, max 20 items
settlementLayers[].topnumberyes≥ 0
settlementLayers[].bottomnumberyes> 0
settlementLayers[].unitWeightnumberyes> 0
settlementLayers[].saturatedUnitWeightnumberno> 0
settlementLayers[].elasticModulusnumberyes> 0
settlementLayers[].poissonnumberyes0 – 0.49
settlementLayers[].consolidationobjectno
settlementLayers[].consolidation.compressionIndexnumberyes> 0
settlementLayers[].consolidation.recompressionIndexnumberyes≥ 0
settlementLayers[].consolidation.initialVoidRationumberyes≥ 0
settlementLayers[].consolidation.preconsolidationStressnumberyes> 0
slidingobjectno
sliding.interfaceMode = "drained-friction"variantyes
sliding.direction"along-width" | "along-length"yes
sliding.passiveReductionFactornumberyes0 – 1
sliding.baseFrictionCoefficientnumberyes≥ 0
sliding.interfaceMode = "undrained-adhesion"variantyes
sliding.direction"along-width" | "along-length"yes
sliding.passiveReductionFactornumberyes0 – 1
sliding.baseAdhesionnumberyes≥ 0

Response fields

FieldTypeDescription
methodobjectExact method ID, designation, edition, component models, and validation status.
bearing.grossUltimatePressurenumberGross ultimate bearing pressure in the declared unit system.
bearing.surchargePressurenumberEffective overburden pressure removed to form the net basis.
bearing.netUltimatePressurenumberNet ultimate pressure = gross ultimate pressure − surcharge.
bearing.grossDesignLoad / .netDesignLoadnumberDesign loads on the effective area, retained on separate gross and net bases.
bearing.appliedGrossPressureOnEffectiveAreanumberDeclared gross-at-base vertical load divided by B′L′.
bearing.appliedNetPressureOnEffectiveAreanumberApplied gross pressure less effective surcharge.
bearing.actualFactorOfSafetynumberNet ultimate pressure divided by applied net pressure.
bearing.effectiveWidth / .effectiveLength / .effectiveAreanumberBiaxial Meyerhof effective dimensions and area.
bearing.kernUtilizationnumber6(|eₓ|/B + |eᵧ|/L); requests at or above 1 fail closed.
contactobjectAverage, minimum, and maximum gross linear-contact pressure; fullCompression is always true.
settlement.immediatenumberLayered constrained-elastic settlement from the integrated 2:1 stress distribution.
settlement.consolidationnumberPrimary one-dimensional e-log consolidation; zero for layers without explicit parameters.
settlement.totalnumberImmediate plus primary consolidation settlement.
settlement.layers[]arrayPer-layer stress increment, initial/final effective stress, immediate strain, and consolidation.
rotationobjectSigned rotations about x and y, resultant rotation, and four edge settlements.
sliding.interfaceModestring | nulldrained-friction, undrained-adhesion, or null when no sliding model is supplied.
sliding.baseFriction / .baseAdhesionnumberAlternative base-interface components; the API never adds both.
sliding.passive / .totalResistance / .factorOfSafetynumber | nullExplicitly reduced passive component, total resistance, and resistance/demand ratio.
applicabilityobjectDeclared in-domain status and limitations that remain attached to the result.
scientificMetadataobjectEngine, 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).

POST /v1/footing
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

The method reproduces the public FHWA GEC 6 worked values and equation identities, and the frozen public benchmark manifest exercises this endpoint in CI. See Validation.