API: vertical pile group
POST /v1/group-vertical — request and response fields for group capacity, efficiency, and settlement, with runnable examples.
Computes separately named ultimate, ASD allowable, optional LRFD factored, and service-load quantities. Ultimate group resistance is the lesser of the summed single-pile and equivalent-block modes. The currently released settlement method is the USACE sand-group factor and therefore rejects clay, rock, and mixed profiles. The method and every input are explained in Pile groups; the same analysis runs interactively at the groups tool.
Endpoint
https://api.pilecalc.com/v1/group-vertical/v1/group-vertical?key=…&req=…&fields=…(for header-less callers)The request is an axial request (same pile and typed soil layers) plus a rectangular layout: nx × ny piles at center-to-center spacingX / spacingY. It also requires an explicit serviceLoad, factorOfSafety, and named settlementMethod.
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 | |
pile | object | yes | |
pile.kind = "uniform" | variant | no | |
pile.length | number | yes | > 0 |
pile.diameter | number | yes | > 0 |
pile.tipArea | number | no | > 0 |
pile.batterDeg | number | no | 0 – 45 |
pile.elasticModulus | number | yes | > 0 |
pile.unitWeight | number | yes | ≥ 0 |
pile.displacement | boolean | no | |
pile.deltaDeg | number | no | 0 – 60 |
pile.frictionFactor | number | no | > 0 |
pile.kind = "sectioned" | variant | yes | |
pile.sections[] | object[] | yes | min 1 item |
pile.sections[].top | number | yes | ≥ 0 |
pile.sections[].bottom | number | yes | > 0 |
pile.sections[].diameter | number | yes | > 0 |
pile.sections[].perimeter | number | no | > 0 |
pile.sections[].area | number | no | > 0 |
pile.tipArea | number | no | > 0 |
pile.batterDeg | number | no | 0 – 45 |
pile.elasticModulus | number | yes | > 0 |
pile.unitWeight | number | yes | ≥ 0 |
pile.displacement | boolean | no | |
pile.deltaDeg | number | no | 0 – 60 |
pile.frictionFactor | number | no | > 0 |
soil | object | yes | |
soil.layers[] | object[] | yes | min 1 item |
soil.layers[].top | number | yes | ≥ 0 |
soil.layers[].bottom | number | yes | > 0 |
soil.layers[].gamma | number | yes | > 0 |
soil.layers[].type | "cohesive" | "cohesionless" | "rock" | yes | |
soil.layers[].cohesion | number | no | ≥ 0 |
soil.layers[].phi | number | no | 0 – 60 |
soil.layers[].sptN | number | no | ≥ 0 |
soil.layers[].qu | number | no | ≥ 0 |
soil.layers[].rockJointCondition | "massive-intact" | "closed" | "open-or-gouge-filled" | no | |
soil.layers[].rqd | number | no | 0 – 100 |
soil.layers[].kDown | number | no | > 0 |
soil.layers[].kUp | number | no | > 0 |
soil.layers[].kc | number | no | > 0 |
soil.layers[].ka | number | no | > 0 |
soil.waterTableDepth | number | no | ≥ 0 |
soil.waterUnitWeight | number | no | > 0 |
layout | object | yes | |
layout.nx | number | yes | integer, 1 – 40 |
layout.ny | number | yes | integer, 1 – 40 |
layout.spacingX | number | yes | > 0 |
layout.spacingY | number | yes | > 0 |
serviceLoad | number | yes | > 0 |
factorOfSafety | number | yes | > 1 |
settlementMethod | "usace-sand-group-factor" | yes | |
resistanceFactor | number | no | 0 – 1 |
segments | number | no | integer, 10 – 500 |
Response fields
| Field | Type | Description |
|---|---|---|
nPiles | number | Piles in the group (nx × ny). |
singlePileUltimate | number | Ultimate resistance of one isolated pile (kN). |
individualUltimate | number | Sum of individual-pile ultimate resistances (kN). |
blockUltimate | number | Equivalent-block ultimate resistance (kN). |
governingUltimate | number | Lesser of individual and block ultimate resistances (kN). |
allowableResistance | number | Governing ultimate resistance divided by factorOfSafety (kN). |
factoredResistance | number? | Governing ultimate resistance multiplied by resistanceFactor, when requested (kN). |
efficiency | number | Governing ultimate / individual ultimate; never greater than 1. |
blockDimensions.bx / .by | number | Plan dimensions of the equivalent block (m). |
serviceLoad | number | Declared group service load used for settlement (kN). |
serviceSettlementSinglePile | number | Single-pile settlement at serviceLoad / nPiles (m). |
serviceSettlementGroup | number | USACE sand-group service settlement (m). |
convergence | object | Load-bracketing and axial-solver convergence evidence. |
method | object | Named method IDs, designations, editions, and resistance/settlement bases. |
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-vertical \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"unitSystem": "si",
"pile": {
"kind": "uniform",
"length": 18,
"diameter": 0.61,
"elasticModulus": 30000000,
"unitWeight": 24,
"displacement": true
},
"soil": {
"layers": [
{
"type": "cohesionless",
"top": 0,
"bottom": 8,
"gamma": 18,
"phi": 31
},
{
"type": "cohesionless",
"top": 8,
"bottom": 18,
"gamma": 19.5,
"phi": 35
}
],
"waterTableDepth": 3,
"waterUnitWeight": 9.81
},
"layout": {
"nx": 3,
"ny": 3,
"spacingX": 1.83,
"spacingY": 1.83
},
"serviceLoad": 2500,
"factorOfSafety": 3,
"settlementMethod": "usace-sand-group-factor",
"resistanceFactor": 0.65
}'The GET variant returns governingUltimate,allowableResistance,serviceSettlementGroup 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
governingUltimateis not an allowable load. UseallowableResistancefor the declared ASD basis orfactoredResistancefor the requested LRFD resistance factor.- Compare
serviceSettlementGroupagainst the serviceability limit and verify thatserviceLoadmatches the intended working combination. The response includes convergence evidence; settlement is never evaluated at an implicit capacity. - Pile-cap contribution is not included; the result is the piles alone.
- Cohesive, rock, and mixed profiles are rejected until a named consolidation/equivalent-pier method is implemented and independently benchmarked.