API: downdrag

POST /v1/downdrag — request and response fields for the neutral-plane downdrag analysis, with runnable examples.


Analyses downdrag (negative skin friction) by the neutral-plane (unified) method — Fellenius, as adopted by FHWA GEC-12 §7.3: a t-z load-transfer solve driven by an imposed free-field settlement profile. The method and inputs are explained in Downdrag; the same analysis runs interactively at the downdrag tool.

Endpoint

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

The request takes the same pile and soil objects as /v1/axial, explicit permanent service and strength-factor objects, and either a measured prescribed-linear settlement profile or explicit one-dimensional-consolidation layers. The transfer model, fine mesh, iteration limit, and refinement tolerance are all required.

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-gec12-neutral-plane"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.frictionFactornumberno> 0
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.frictionFactornumberno> 0
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
loadsobjectyes
loads.servicePermanentnumberyes≥ 0
loads.strengthFactorsobjectyes
loads.strengthFactors.permanentHeadnumberyes> 0
loads.strengthFactors.negativeSkinFrictionnumberyes> 0
loads.strengthFactors.pileSelfWeightnumberyes> 0
settlementobjectyes
settlement.kind = "prescribed-linear"variantyes
settlement.surfacenumberyes≥ 0
settlement.zeroDepthnumberyes> 0
settlement.kind = "one-dimensional-consolidation"variantyes
settlement.layers[]object[]yesmin 1 item
settlement.layers[].topnumberyes≥ 0
settlement.layers[].bottomnumberyes> 0
settlement.layers[].compressionIndexnumberyes> 0
settlement.layers[].recompressionIndexnumberyes≥ 0
settlement.layers[].initialVoidRationumberyes≥ 0
settlement.layers[].preconsolidationStressnumberyes> 0
settlement.layers[].stressIncreasenumberyes≥ 0
settlement.layers[].degreeOfConsolidationnumberyes0 – 1
transferModel"reese-oneill-layer-specific-t-z-q-z"yes
numericsobjectyes
numerics.segmentsnumberyesinteger, 40 – 800
numerics.maxIterationsnumberyesinteger, 50 – 5000
numerics.convergenceTolerancenumberyes0 – 0.1

Response fields

FieldTypeDescription
neutralPlaneDepthnumberDepth of the neutral plane — maximum axial force / zero relative pile-soil movement (m).
dragloadnumberAccumulated negative skin friction above the neutral plane (kN).
maxAxialForcenumberPeak internal axial force at the neutral plane: permanent head load + negative skin friction + effective pile self-weight (kN).
headLoadnumberThe sustained head load the dragload adds to (kN).
pileSelfWeightAbovenumberEffective pile self-weight above the neutral plane, buoyant below groundwater (kN).
loadCombinations.service.demandnumberUnfactored permanent structural demand at the neutral plane (kN).
loadCombinations.strength.demandnumberUser-factorized permanent structural demand at the neutral plane (kN).
headSettlementnumberPile-head settlement under the imposed profile (m).
toeSettlementnumberPile-toe settlement (m).
shaftResistanceBelownumberShaft resistance available below the neutral plane (kN).
convergenceobjectFine/coarse convergence evidence, refinement drift, iterations, and equilibrium residual.
methodobjectNamed method, edition, layer-specific transfer basis, and tip-interface convention.
profile[]object[]Node-by-node profile from head to toe.
profile[].depthnumberNode depth below the head (m).
profile[].axialForcenumberInternal axial force at the node, compression + (kN).
profile[].pileSettlement / .soilSettlementnumberPile settlement and imposed free-field soil settlement at the node, downward + (m).

Code examples

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

POST /v1/downdrag
curl https://api.pilecalc.com/v1/downdrag \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "unitSystem": "si",
  "method": "fhwa-gec12-neutral-plane",
  "pile": {
    "kind": "uniform",
    "length": 20,
    "diameter": 0.5,
    "elasticModulus": 30000000,
    "unitWeight": 24,
    "displacement": true
  },
  "soil": {
    "layers": [
      {
        "type": "cohesive",
        "top": 0,
        "bottom": 10,
        "gamma": 17,
        "cohesion": 30,
        "ka": 0.9
      },
      {
        "type": "cohesionless",
        "top": 10,
        "bottom": 22,
        "gamma": 19.5,
        "phi": 36
      }
    ],
    "waterTableDepth": 2,
    "waterUnitWeight": 9.81
  },
  "loads": {
    "servicePermanent": 400,
    "strengthFactors": {
      "permanentHead": 1.25,
      "negativeSkinFriction": 1.5,
      "pileSelfWeight": 1.25
    }
  },
  "settlement": {
    "kind": "prescribed-linear",
    "surface": 0.05,
    "zeroDepth": 10
  },
  "transferModel": "reese-oneill-layer-specific-t-z-q-z",
  "numerics": {
    "segments": 240,
    "maxIterations": 1500,
    "convergenceTolerance": 0.04
  }
}'

The GET variant returns neutralPlaneDepth,dragload,maxAxialForce 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

  • maxAxialForce includes permanent head load, negative skin friction, and effective pile self-weight above neutralPlaneDepth. Use the explicit service or strength combination for the corresponding structural check.
  • Do not add transient live load to the dragload — live load momentarily reverses the relative movement at the neutral plane.
  • headSettlement is the serviceability answer; profile[] lets you plot the force and the pile-vs-soil settlement curves (they cross at the neutral plane).
  • The endpoint fails closed unless both fine and coarse meshes converge within the requested tolerance; inspect convergence for the actual drift and equilibrium residual.

The water-unit-weight trap

With a water table, effective stresses depend on soil.waterUnitWeight — pass 9.81 when working in kN/m³ (see Units & conventions).