API: drilled shaft

POST /v1/drilled-shaft — request and response fields for FHWA-IF-99-025 shaft capacity, with runnable examples.


Computes the axial capacity of a drilled shaft (bored pile / caisson) with the FHWA method of O'Neill & Reese (FHWA-IF-99-025, 1999): α-method side resistance in clay, β-method (SPT-based) in sand, rock-socket resistance in rock, base bearing, belled-base uplift, and optional service-load settlement. The method and every input are explained in Drilled shafts; the same analysis runs interactively at the drilled-shaft tool.

Endpoint

POST
https://api.pilecalc.com/v1/drilled-shaft
GET
/v1/drilled-shaft?key=…&req=…&fields=…(for header-less callers)

The request mirrors the axial endpoint — a pile and a layered soil profile — and requires an explicitmethod, constructionMethod, and analysisMode. The released slice is fhwa-if-99-025 for a dry-stable-open-hole shaft. Cohesionless layers require sptN (the SPT blow count that drives the β correlation), not phi. Cohesive layers need cohesion (or qu); rock needs qu. Add bellDiameter and bellHeight together for a belled base. Rock layers require an explicit rockJointCondition; jointed layers also requirerqd from 20 through 100, and jointed rock at the base is rejected. Service mode also requires an explicit service load and numerical controls for soil t-z/q-z. For a complete homogeneous massive-intact rock socket, supply rockSocketService with method: "kulhawy-carter-1992", shaft/side-rock/base-rock Poisson ratios, side/base rock moduli, and interface cohesion, friction and dilation angles. Omit loadSettlementPoints and maxTipSettlementfor this closed-form model. Moduli and cohesion use kPa in SI or ksf in US; angles use degrees.

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-if-99-025"yes
constructionMethod"dry-stable-open-hole"yes
analysisMode"capacity-only" | "capacity-and-service"yes
pileobjectyes
pile.kind = "uniform"variantno
pile.lengthnumberyes> 0
pile.diameternumberyes> 0
pile.tipAreanumberno> 0
pile.batterDegnumberno0 – 45
pile.elasticModulusnumberyes> 0
pile.unitWeightnumberyes≥ 0
pile.displacementbooleanno
pile.deltaDegnumberno0 – 60
pile.frictionFactornumberno0 – 1
pile.kind = "sectioned"variantyes
pile.sections[]object[]yesmin 1 item
pile.sections[].topnumberyes≥ 0
pile.sections[].bottomnumberyes> 0
pile.sections[].diameternumberyes> 0
pile.sections[].perimeternumberno> 0
pile.sections[].areanumberno> 0
pile.tipAreanumberno> 0
pile.batterDegnumberno0 – 45
pile.elasticModulusnumberyes> 0
pile.unitWeightnumberyes≥ 0
pile.displacementbooleanno
pile.deltaDegnumberno0 – 60
pile.frictionFactornumberno0 – 1
soilobjectyes
soil.layers[]object[]yesmin 1 item
soil.layers[].topnumberyes≥ 0
soil.layers[].bottomnumberyes> 0
soil.layers[].gammanumberyes> 0
soil.layers[].type"cohesive" | "cohesionless" | "rock"yes
soil.layers[].cohesionnumberno≥ 0
soil.layers[].phinumberno0 – 60
soil.layers[].sptNnumberno≥ 0
soil.layers[].qunumberno≥ 0
soil.layers[].rockJointCondition"massive-intact" | "closed" | "open-or-gouge-filled"no
soil.layers[].rqdnumberno0 – 100
soil.layers[].kDownnumberno> 0
soil.layers[].kUpnumberno> 0
soil.layers[].kcnumberno> 0
soil.layers[].kanumberno> 0
soil.waterTableDepthnumberno≥ 0
soil.waterUnitWeightnumberno> 0
segmentsnumberyesinteger, 20 – 500
bellDiameternumberno> 0
bellHeightnumberno> 0
fsTipnumberyes> 1
fsSidenumberyes> 1
fsWeightnumberyes> 1
fsUpliftnumberyes> 1
serviceLoadnumberno> 0
rockSocketServiceobjectno
rockSocketService.method"kulhawy-carter-1992"yes
rockSocketService.shaftPoissonRationumberyes0 – 0.5
rockSocketService.sideRockModulusnumberyes> 0
rockSocketService.sideRockPoissonRationumberyes0 – 0.5
rockSocketService.baseRockModulusnumberyes> 0
rockSocketService.baseRockPoissonRationumberyes0 – 0.5
rockSocketService.interfaceCohesionnumberyes> 0
rockSocketService.interfaceFrictionDegnumberyes0 – 90
rockSocketService.interfaceDilationDegnumberyes0 – 90
loadSettlementPointsnumbernointeger, 20 – 500
maxTipSettlementnumberno> 0
convergenceTolerancenumberyes0 – 0.1

Response fields

FieldTypeDescription
tipnumberUltimate base (end-bearing) resistance (kN); on the bell area when bellDiameter is given.
sidenumberUltimate side resistance in compression (kN) — α method in clay, β/SPT in sand, rock-socket in rock.
ultimateDownnumberUltimate downward capacity: tip + side (kN).
allowableDownnumberAllowable downward capacity after fsTip / fsSide (kN).
weightnumberShaft self-weight (kN); credited to uplift.
sideUpliftnumberUltimate side resistance in uplift (kN).
bellUpliftnumberBell (belled-base) bearing contribution to uplift (kN); 0 without a bell.
ultimateUpliftnumberUltimate uplift capacity: side uplift + bell + weight (kN).
allowableUpliftnumberAllowable uplift capacity after fsUplift (kN).
tipPressurenumberUltimate unit base pressure (kPa).
segments[]object[]Layer-integrated side-transfer trace used to reproduce the capacity totals.
serviceobject | undefinedSettlement at the explicit serviceLoad, including head/tip movement, load residual, and convergence state.
rockSocketServiceobject | undefinedNamed Kulhawy–Carter complete rock socket service response: branch, head/base settlement, side/base load partition, elastic stiffness, transition load and nominal resistance limit. Returned instead of soil service diagnostics.
convergenceobjectMandatory fine/coarse mesh comparison; the request fails if a released scalar exceeds convergenceTolerance.
methodobjectStable method ID, source edition, supported construction method, and tip-interface convention.

Code examples

A complete, runnable request. Replace YOUR_API_KEY (or set PILECALC_API_KEY in your environment).

POST /v1/drilled-shaft
curl https://api.pilecalc.com/v1/drilled-shaft \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "unitSystem": "si",
  "method": "fhwa-if-99-025",
  "constructionMethod": "dry-stable-open-hole",
  "analysisMode": "capacity-and-service",
  "pile": {
    "kind": "uniform",
    "length": 22,
    "diameter": 0.9,
    "elasticModulus": 28000000,
    "unitWeight": 24
  },
  "soil": {
    "layers": [
      {
        "type": "cohesive",
        "top": 0,
        "bottom": 8,
        "gamma": 18,
        "cohesion": 60
      },
      {
        "type": "cohesionless",
        "top": 8,
        "bottom": 16,
        "gamma": 19.5,
        "sptN": 28
      },
      {
        "type": "cohesive",
        "top": 16,
        "bottom": 24,
        "gamma": 19,
        "cohesion": 120
      }
    ],
    "waterTableDepth": 4,
    "waterUnitWeight": 9.81
  },
  "serviceLoad": 1000,
  "segments": 240,
  "loadSettlementPoints": 160,
  "maxTipSettlement": 0.12,
  "bellDiameter": 1.8,
  "bellHeight": 0.45,
  "fsTip": 2.5,
  "fsSide": 2,
  "fsWeight": 1.5,
  "fsUplift": 2.5,
  "convergenceTolerance": 0.05
}'

The GET variant returns allowableDown,allowableUplift,service.settlement 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

  • allowableDown applies fsTip and fsSide separately (side resistance mobilizes at much smaller displacement than base bearing).
  • With a bell, tip and tipPressure are computed on the bell base area, and bellUplift adds the inverted-bearing uplift contribution.
  • The FHWA five-foot top exclusion is applied only for surface clay; the bottom one-diameter (plus bell-height) exclusion is applied only for cohesive base soil.
  • service is a t-z/q-z load-transfer result at serviceLoad, not an ultimate-capacity settlement estimate. The separate rockSocketService response uses FHWA-NHI-18-024 Appendix C.3.1: an elastic/full-slip bilinear approximation for a uniform circular non-displacement shaft beginning at the rock surface, with full base contact. The request must contain exactly one massive-intact rock layer, no bell or tip-area override. Service load above nominal resistance or a side/base service load exceeding its static nominal component resistance is rejected. The result describes applied head-load response only; construction/self-weight settlement and preload are excluded. Head displacement is continuous at the branch intersection, but the separate asymptotic load partitions can have a small jump. Layered/jointed rock and partial base contact remain unsupported.
  • The bearing stratum is the layer immediately below a tip interface. The response records that convention and the fine/coarse convergence check. Jointed-rock side resistance uses the declared Table 11.4 column, but jointed-rock base resistance fails closed.

unitSystem

The FHWA correlations for sand are dimensional. Use "si" for metres, kN, kPa, and kN/m³ or "us" for feet, kip, ksf, and kip/ft³. When a water table is supplied, waterUnitWeight is also required; hidden groundwater defaults are not accepted.