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

POST
https://api.pilecalc.com/v1/group-vertical
GET
/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.

FieldTypeRequiredConstraints
unitSystem"si" | "us"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
layoutobjectyes
layout.nxnumberyesinteger, 1 – 40
layout.nynumberyesinteger, 1 – 40
layout.spacingXnumberyes> 0
layout.spacingYnumberyes> 0
serviceLoadnumberyes> 0
factorOfSafetynumberyes> 1
settlementMethod"usace-sand-group-factor"yes
resistanceFactornumberno0 – 1
segmentsnumbernointeger, 10 – 500

Response fields

FieldTypeDescription
nPilesnumberPiles in the group (nx × ny).
singlePileUltimatenumberUltimate resistance of one isolated pile (kN).
individualUltimatenumberSum of individual-pile ultimate resistances (kN).
blockUltimatenumberEquivalent-block ultimate resistance (kN).
governingUltimatenumberLesser of individual and block ultimate resistances (kN).
allowableResistancenumberGoverning ultimate resistance divided by factorOfSafety (kN).
factoredResistancenumber?Governing ultimate resistance multiplied by resistanceFactor, when requested (kN).
efficiencynumberGoverning ultimate / individual ultimate; never greater than 1.
blockDimensions.bx / .bynumberPlan dimensions of the equivalent block (m).
serviceLoadnumberDeclared group service load used for settlement (kN).
serviceSettlementSinglePilenumberSingle-pile settlement at serviceLoad / nPiles (m).
serviceSettlementGroupnumberUSACE sand-group service settlement (m).
convergenceobjectLoad-bracketing and axial-solver convergence evidence.
methodobjectNamed 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).

POST /v1/group-vertical
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

  • governingUltimate is not an allowable load. Use allowableResistance for the declared ASD basis or factoredResistance for the requested LRFD resistance factor.
  • Compare serviceSettlementGroup against the serviceability limit and verify that serviceLoad matches 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.