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
https://api.pilecalc.com/v1/group-cap/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.
| Field | Type | Required | Constraints |
|---|---|---|---|
unitSystem | "si" | "us" | yes | Unit bundle for every dimensional input and output. "si": m, kN, kPa, kN/m³, kN·m, kN·m². "us": the kip–foot bundle — ft, kip, ksf, kip/ft³, kip·ft, kip·ft² (unit weights in kip/ft³, not pcf). Values are not converted, so every field must use the declared bundle. |
analysisMode | "distribution-only" | "distribution-and-structural" | yes | "distribution-only" runs the six-DOF rigid-cap pile-load distribution; "distribution-and-structural" also checks cap flexure, one-way shear and punching and requires structural inputs. |
piles[] | object[] | yes | min 2 items, max 64 items — Vertical piles under the rigid cap. |
piles[].x | number | yes | Pile-head plan x-coordinate (m in SI, ft in US). In structural mode the cap outline is always centered on the origin (0, 0), so measure pile coordinates from the cap center, not a corner; a pattern whose centroid is off the origin is analysed as an eccentric pattern and returns a warning. |
piles[].y | number | yes | Pile-head plan y-coordinate (m in SI, ft in US). In structural mode the cap outline is always centered on the origin (0, 0), so measure pile coordinates from the cap center, not a corner; a pattern whose centroid is off the origin is analysed as an eccentric pattern and returns a warning. |
piles[].footprintX | number | no | > 0 — Rectangular pile-head bearing footprint dimension in x (m in SI, ft in US). Required in distribution-and-structural mode; must lie inside the cap without overlapping other piles. |
piles[].footprintY | number | no | > 0 — Rectangular pile-head bearing footprint dimension in y (m in SI, ft in US). Required in distribution-and-structural mode; must lie inside the cap without overlapping other piles. |
stiffness | object | yes | Pile-head spring stiffnesses applied to every pile. |
stiffness.vertical | number | yes | > 0 — Vertical pile-head spring stiffness kz (kN/m in SI, kip/ft in US). |
stiffness.lateral | number | yes | > 0 — Horizontal pile-head spring stiffness kx = ky (kN/m in SI, kip/ft in US). |
stiffness.rotational | number | no | ≥ 0 — Rotational pile-head spring stiffness about both horizontal axes (kN·m/rad in SI, kip·ft/rad in US). Omit or use 0 for a pinned head. |
combinations[] | object[] | yes | min 1 item, max 24 items — Load combinations with unique IDs; each is analyzed separately. |
combinations[].id | string | yes | Unique identifier for this load combination (letters, digits, '.', '_', '-', spaces). |
combinations[].limitState | string | no | Optional user label such as "Strength I"; it does not apply any load factors. |
combinations[].loads | object | yes | Already-factored cap loads. In distribution-only mode they act at the pile-coordinate origin; in structural mode at the column/pedestal centroid. |
combinations[].loads.fx | number | no | Horizontal force in +x (kN in SI, kip in US). Omitted means 0; must be 0 in structural mode. |
combinations[].loads.fy | number | no | Horizontal force in +y (kN in SI, kip in US). Omitted means 0; must be 0 in structural mode. |
combinations[].loads.fz | number | no | Vertical force, downward positive (kN in SI, kip in US). Omitted means 0; cannot be negative in structural mode. |
combinations[].loads.mx | number | no | Moment about +x, right-hand rule with z downward (kN·m in SI, kip·ft in US); positive compresses piles at +y. Omitted means 0. |
combinations[].loads.my | number | no | Moment about +y, right-hand rule with z downward (kN·m in SI, kip·ft in US); positive unloads piles at +x. Omitted means 0. |
combinations[].loads.mz | number | no | Torsion about the vertical axis, right-hand rule about +z downward (kN·m in SI, kip·ft in US). Omitted means 0; must be 0 in structural mode. |
combinations[].capSelfWeightFactor | number | yes | ≥ 0 — Multiplier on cap self-weight (concrete unit weight × cap volume) added to the vertical load; 0 excludes it. Must be 0 in distribution-only mode. |
structural | object | no | Structural cap inputs; required in distribution-and-structural mode and rejected in distribution-only mode. |
structural.method | "aashto-lrfd-2nd-2002-interims" | yes | Structural method: AASHTO LRFD 2nd edition with 2002 interims. |
structural.cap | object | yes | Rigid rectangular cap. Its outline is always centered at the pile-coordinate origin (0, 0); it is not re-centered on the pile pattern. |
structural.cap.lengthX | number | yes | > 0 — Cap plan dimension in x (m in SI, ft in US). |
structural.cap.lengthY | number | yes | > 0 — Cap plan dimension in y (m in SI, ft in US). |
structural.cap.thickness | number | yes | > 0 — Total cap thickness (m in SI, ft in US). |
structural.loadedArea | object | yes | Rectangular column or pedestal where the loads are applied; must lie wholly inside the cap. |
structural.loadedArea.kind | "column" | "pedestal" | yes | Type of loaded area on the cap. |
structural.loadedArea.x | number | yes | Plan x-coordinate of the loaded-area center from the cap center (m in SI, ft in US). |
structural.loadedArea.y | number | yes | Plan y-coordinate of the loaded-area center from the cap center (m in SI, ft in US). |
structural.loadedArea.lengthX | number | yes | > 0 — Loaded-area dimension in x (m in SI, ft in US). |
structural.loadedArea.lengthY | number | yes | > 0 — Loaded-area dimension in y (m in SI, ft in US). |
structural.materials | object | yes | Normal-weight concrete and reinforcement properties. |
structural.materials.concreteStrength | number | yes | > 0 — Concrete compressive strength f′c (kPa in SI, ksf in US); limited to 2.4–10 ksi. |
structural.materials.reinforcementYieldStrength | number | yes | > 0 — Reinforcement yield strength fy (kPa in SI, ksf in US); limited to 40–75 ksi. Below 60 ksi the response warns that AASHTO 5.4.3.1 requires Owner approval. |
structural.materials.concreteUnitWeight | number | yes | > 0 — Normal-weight concrete unit weight (kN/m³ in SI, kip/ft³ in US); 135–160 pcf (21.21–25.13 kN/m³), the AASHTO 5.2 normal-weight range plus the C3.5.1 reinforcement allowance. |
structural.reinforcement | object | yes | Four reinforcement mats: top and bottom faces, x and y directions. |
structural.reinforcement.bottomX | object | yes | Bottom-face mat with bars running in x (x-direction flexure). |
structural.reinforcement.bottomX.barArea | number | yes | > 0 — Cross-sectional area of one bar (m² in SI, ft² in US). |
structural.reinforcement.bottomX.barDiameter | number | yes | > 0 — Bar diameter (m in SI, ft in US). |
structural.reinforcement.bottomX.spacing | number | yes | > 0 — Bar center-to-center spacing (m in SI, ft in US); not less than barDiameter. |
structural.reinforcement.bottomX.clearCover | number | yes | > 0 — Clear cover from the concrete face to the outside of the bar (m in SI, ft in US). |
structural.reinforcement.bottomX.layer | 1 | 2 | yes | Physical layer: 1 = nearest the concrete face, 2 = inside the orthogonal mat. The X and Y mats on the same face must use different layers. |
structural.reinforcement.bottomY | object | yes | Bottom-face mat with bars running in y (y-direction flexure). |
structural.reinforcement.bottomY.barArea | number | yes | > 0 — Cross-sectional area of one bar (m² in SI, ft² in US). |
structural.reinforcement.bottomY.barDiameter | number | yes | > 0 — Bar diameter (m in SI, ft in US). |
structural.reinforcement.bottomY.spacing | number | yes | > 0 — Bar center-to-center spacing (m in SI, ft in US); not less than barDiameter. |
structural.reinforcement.bottomY.clearCover | number | yes | > 0 — Clear cover from the concrete face to the outside of the bar (m in SI, ft in US). |
structural.reinforcement.bottomY.layer | 1 | 2 | yes | Physical layer: 1 = nearest the concrete face, 2 = inside the orthogonal mat. The X and Y mats on the same face must use different layers. |
structural.reinforcement.topX | object | yes | Top-face mat with bars running in x (x-direction flexure). |
structural.reinforcement.topX.barArea | number | yes | > 0 — Cross-sectional area of one bar (m² in SI, ft² in US). |
structural.reinforcement.topX.barDiameter | number | yes | > 0 — Bar diameter (m in SI, ft in US). |
structural.reinforcement.topX.spacing | number | yes | > 0 — Bar center-to-center spacing (m in SI, ft in US); not less than barDiameter. |
structural.reinforcement.topX.clearCover | number | yes | > 0 — Clear cover from the concrete face to the outside of the bar (m in SI, ft in US). |
structural.reinforcement.topX.layer | 1 | 2 | yes | Physical layer: 1 = nearest the concrete face, 2 = inside the orthogonal mat. The X and Y mats on the same face must use different layers. |
structural.reinforcement.topY | object | yes | Top-face mat with bars running in y (y-direction flexure). |
structural.reinforcement.topY.barArea | number | yes | > 0 — Cross-sectional area of one bar (m² in SI, ft² in US). |
structural.reinforcement.topY.barDiameter | number | yes | > 0 — Bar diameter (m in SI, ft in US). |
structural.reinforcement.topY.spacing | number | yes | > 0 — Bar center-to-center spacing (m in SI, ft in US); not less than barDiameter. |
structural.reinforcement.topY.clearCover | number | yes | > 0 — Clear cover from the concrete face to the outside of the bar (m in SI, ft in US). |
structural.reinforcement.topY.layer | 1 | 2 | yes | Physical layer: 1 = nearest the concrete face, 2 = inside the orthogonal mat. The X and Y mats on the same face must use different layers. |
Response fields
| Field | Type | Description |
|---|---|---|
method | object | Immutable distribution + structural method ID, edition, clauses, and resistance factors. |
combinations[] | object[] | One result for every explicit input combination, in input order. |
combinations[].distribution | object | Rigid-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[].structural | object | omitted | Flexure, 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.loadedAreaPunching | object | Column/pedestal punching demand, resistance, bo, dv, DCR, and pass/fail. |
combinations[].structural.pilePunching[] | object[] | Applicable individual-pile punching checks. |
envelope | object | Cross-combination pile maxima and, in structural mode, governing cap utilization, combination ID, and pass/fail. |
applicability | object | Within-domain stamp and explicit limitations for the executed mode. |
applicability.warnings[] | string[] | omitted | Input-specific warnings. In structural mode the cap outline is always centered on the pile-coordinate origin (0, 0); a pile pattern whose centroid is off that origin returns a warning so coordinates measured from a cap corner are caught. |
combinations[].structural.flexure[].demand | number | Face moment from the FHWA NHI-04-041 Step 8.11 outer-row estimate: the heavier transverse half of the piles beyond the cut, mirrored across the cap width. |
Code examples
A complete, runnable request. Replace YOUR_API_KEY (or set PILECALC_API_KEY in your environment).
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": 1.5,
"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": 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": 2000,
"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.methodmust beaashto-lrfd-2nd-2002-interims; newer editions are not aliases.- Structural mode rejects nonzero
fx,fy, ormz, 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