API: rigid and structural pile cap

POST /v1/group-cap — explicit load combinations, CPGA pile reactions, and AASHTO-2002 structural cap checks.


Runs explicit pile-cap load combinations through the Saul/USACE CPGA rigid distribution and, when requested, the AASHTO LRFD 2nd edition with 2002 interims structural cap method. See the scientific method page for equations, public benchmark results, and limits.

Endpoint

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

Set analysisMode to distribution-only for the full six-DOF CPGA solve, or distribution-and-structural to require cap geometry, a column/pedestal loaded area, pile-head footprints, materials, and four reinforcement mats.combinations[] are already factored; each has an explicit cap-self-weight factor. Base units are SI (kN, m, kPa, kN/m³) or US (kip, ft, ksf, kip/ft³).

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
analysisMode"distribution-only" | "distribution-and-structural"yes
piles[]object[]yesmin 2 items, max 64 items
piles[].xnumberyes
piles[].ynumberyes
piles[].footprintXnumberno> 0
piles[].footprintYnumberno> 0
stiffnessobjectyes
stiffness.verticalnumberyes> 0
stiffness.lateralnumberyes> 0
stiffness.rotationalnumberno≥ 0
combinations[]object[]yesmin 1 item, max 24 items
combinations[].idstringyes
combinations[].limitStatestringno
combinations[].loadsobjectyes
combinations[].loads.fxnumberno
combinations[].loads.fynumberno
combinations[].loads.fznumberno
combinations[].loads.mxnumberno
combinations[].loads.mynumberno
combinations[].loads.mznumberno
combinations[].capSelfWeightFactornumberyes≥ 0
structuralobjectno
structural.method"aashto-lrfd-2nd-2002-interims"yes
structural.capobjectyes
structural.cap.lengthXnumberyes> 0
structural.cap.lengthYnumberyes> 0
structural.cap.thicknessnumberyes> 0
structural.loadedAreaobjectyes
structural.loadedArea.kind"column" | "pedestal"yes
structural.loadedArea.xnumberyes
structural.loadedArea.ynumberyes
structural.loadedArea.lengthXnumberyes> 0
structural.loadedArea.lengthYnumberyes> 0
structural.materialsobjectyes
structural.materials.concreteStrengthnumberyes> 0
structural.materials.reinforcementYieldStrengthnumberyes> 0
structural.materials.concreteUnitWeightnumberyes> 0
structural.reinforcementobjectyes
structural.reinforcement.bottomXobjectyes
structural.reinforcement.bottomX.barAreanumberyes> 0
structural.reinforcement.bottomX.barDiameternumberyes> 0
structural.reinforcement.bottomX.spacingnumberyes> 0
structural.reinforcement.bottomX.clearCovernumberyes> 0
structural.reinforcement.bottomX.layer1 | 2yes
structural.reinforcement.bottomYobjectyes
structural.reinforcement.bottomY.barAreanumberyes> 0
structural.reinforcement.bottomY.barDiameternumberyes> 0
structural.reinforcement.bottomY.spacingnumberyes> 0
structural.reinforcement.bottomY.clearCovernumberyes> 0
structural.reinforcement.bottomY.layer1 | 2yes
structural.reinforcement.topXobjectyes
structural.reinforcement.topX.barAreanumberyes> 0
structural.reinforcement.topX.barDiameternumberyes> 0
structural.reinforcement.topX.spacingnumberyes> 0
structural.reinforcement.topX.clearCovernumberyes> 0
structural.reinforcement.topX.layer1 | 2yes
structural.reinforcement.topYobjectyes
structural.reinforcement.topY.barAreanumberyes> 0
structural.reinforcement.topY.barDiameternumberyes> 0
structural.reinforcement.topY.spacingnumberyes> 0
structural.reinforcement.topY.clearCovernumberyes> 0
structural.reinforcement.topY.layer1 | 2yes

Response fields

FieldTypeDescription
methodobjectImmutable distribution + structural method ID, edition, clauses, and resistance factors.
combinations[]object[]One result for every explicit input combination, in input order.
combinations[].distributionobjectRigid-body displacements, per-pile head reactions, and combination maxima.
combinations[].distribution.piles[]object[]Per-pile x/y, compression-positive axial force, lateral components/resultant, and head moments.
combinations[].structuralobject | omittedFlexure, one-way shear, loaded-area punching, pile punching, effective depths, and governing check. Omitted in distribution-only mode.
combinations[].structural.flexure[]object[4]±X/±Y demand, minimum design demand, resistance, required/provided reinforcement, tension face, DCR, and pass/fail.
combinations[].structural.oneWayShear[]object[4]Critical cut, demand, resistance, dv, DCR, and pass/fail.
combinations[].structural.loadedAreaPunchingobjectColumn/pedestal punching demand, resistance, bo, dv, DCR, and pass/fail.
combinations[].structural.pilePunching[]object[]Applicable individual-pile punching checks.
envelopeobjectCross-combination pile maxima and, in structural mode, governing cap utilization, combination ID, and pass/fail.
applicabilityobjectWithin-domain stamp and explicit limitations for the executed mode.

Code examples

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

POST /v1/group-cap
curl https://api.pilecalc.com/v1/group-cap \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "unitSystem": "si",
  "analysisMode": "distribution-and-structural",
  "piles": [
    {
      "x": -1.5,
      "y": -1.5,
      "footprintX": 0.45,
      "footprintY": 0.45
    },
    {
      "x": 0,
      "y": -1.5,
      "footprintX": 0.45,
      "footprintY": 0.45
    },
    {
      "x": 1.5,
      "y": -1.5,
      "footprintX": 0.45,
      "footprintY": 0.45
    },
    {
      "x": -1.5,
      "y": 0,
      "footprintX": 0.45,
      "footprintY": 0.45
    },
    {
      "x": 0,
      "y": 0,
      "footprintX": 0.45,
      "footprintY": 0.45
    },
    {
      "x": 1.5,
      "y": 0,
      "footprintX": 0.45,
      "footprintY": 0.45
    },
    {
      "x": -1.5,
      "y": 1.5,
      "footprintX": 0.45,
      "footprintY": 0.45
    },
    {
      "x": 0,
      "y": 1.5,
      "footprintX": 0.45,
      "footprintY": 0.45
    },
    {
      "x": 1.5,
      "y": 1.5,
      "footprintX": 0.45,
      "footprintY": 0.45
    }
  ],
  "stiffness": {
    "vertical": 350000,
    "lateral": 25000
  },
  "combinations": [
    {
      "id": "Strength I",
      "limitState": "AASHTO Strength I (already factored)",
      "loads": {
        "fz": 3600,
        "mx": 200,
        "my": -300
      },
      "capSelfWeightFactor": 1.25
    }
  ],
  "structural": {
    "method": "aashto-lrfd-2nd-2002-interims",
    "cap": {
      "lengthX": 5,
      "lengthY": 5,
      "thickness": 1.2
    },
    "loadedArea": {
      "kind": "column",
      "x": 0,
      "y": 0,
      "lengthX": 0.8,
      "lengthY": 0.8
    },
    "materials": {
      "concreteStrength": 27579,
      "reinforcementYieldStrength": 413685,
      "concreteUnitWeight": 23.56
    },
    "reinforcement": {
      "bottomX": {
        "barArea": 0.00064516,
        "barDiameter": 0.0286512,
        "spacing": 0.15,
        "clearCover": 0.075,
        "layer": 1
      },
      "bottomY": {
        "barArea": 0.00064516,
        "barDiameter": 0.0286512,
        "spacing": 0.15,
        "clearCover": 0.075,
        "layer": 2
      },
      "topX": {
        "barArea": 0.00064516,
        "barDiameter": 0.0286512,
        "spacing": 0.15,
        "clearCover": 0.075,
        "layer": 1
      },
      "topY": {
        "barArea": 0.00064516,
        "barDiameter": 0.0286512,
        "spacing": 0.15,
        "clearCover": 0.075,
        "layer": 2
      }
    }
  }
}'

The GET variant returns envelope.maxCompression,envelope.maxTension,envelope.governingStructuralUtilization,envelope.governingCombinationId 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.

Strict method semantics

  • structural.method must be aashto-lrfd-2nd-2002-interims; newer editions are not aliases.
  • Structural mode rejects nonzero fx, fy, or mz, upward loaded-area force, and any resulting pile tension.
  • Every rectangular bearing footprint must lie inside the cap and may not overlap another pile head.
  • Top and bottom X/Y mats must declare distinct physical layers and fit inside the cap after cover and bar diameter.
  • Distribution-only mode rejects a nonzero cap-self-weight factor because it has no declared geometry or concrete unit weight.
  • All response values remain in the request unit bundle; method and scientific metadata are mandatory in REST/Excel projections.

Benchmarked against the public FHWA example

Automated tests reproduce the FHWA NHI-04-041 pile-footing worked example. The structural method is pinned to the AASHTO LRFD 2nd edition with 2002 interims; a newer AASHTO edition would be a separate method ID.