API: uplift plates & anchors
POST /v1/uplift — request and response fields for plate breakout and anchor bond capacity, with runnable examples.
Runs either the strict Meyerhof–Adams/Das plate-breakout branch or the FHWA GEC 4 straight-shaft ground-anchor branch. The complete scientific scope and applicability limits are documented at Uplift plates & ground anchors.
Endpoint
https://api.pilecalc.com/v1/uplift/v1/uplift?key=…&req=…&fields=…(for header-less callers)The request is a union on kind. Both branches requireunitSystem, an exact method ID, and an explicitdesign basis.
platerequires an explicit circular or rectangularshape, ordered uniform-strengthlayers, explicitgroundwaterstate, effective plate weight (net of buoyancy where applicable), and uplift coefficient.anchorrequires complete unbonded/bond geometry, traceable per-length bond transfer, efficiency and reference, tendon SMTS/EA, independent tendon-grout capacity, design and lock-off loads, and a production-test record or explicitnot-testedstate.
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 |
|---|---|---|---|
kind = "plate" | variant | yes | Selects the horizontal plate-breakout analysis. |
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. |
method | "method.uplift.meyerhof-adams-plate" | yes | Method identifier for the Meyerhof–Adams/Das plate method; the only accepted value. |
shape | object | yes | Plan shape of the horizontal plate: circular or rectangular. |
shape.kind = "circular" | variant | yes | Circular plate. |
shape.diameter | number | yes | > 0 — Plate diameter (m for si, ft for us). |
shape.kind = "rectangular" | variant | yes | Rectangular plate; aspect ratio (long side / short side) must not exceed 10. |
shape.width | number | yes | > 0 — One physical plan side of the plate (m for si, ft for us). |
shape.length | number | yes | > 0 — The other physical plan side of the plate (m for si, ft for us). |
embedment | number | yes | > 0 — Depth of the plate below the ground surface, H (m for si, ft for us). |
layers[] | object[] | yes | min 1 item — Soil layers from the ground surface down, ordered and contiguous, covering the full embedment. All layers must be the same type with uniform strength above the plate. |
layers[].type = "cohesionless" | variant | yes | Drained sand layer; every layer in the profile must be the same type. |
layers[].top | number | yes | ≥ 0 — Layer top depth below the ground surface (m for si, ft for us); the first layer starts at 0. |
layers[].bottom | number | yes | > 0 — Layer bottom depth below the ground surface (m for si, ft for us); layers are contiguous and must cover the plate embedment. |
layers[].gamma | number | yes | > 0 — Total unit weight of the soil (kN/m³ for si, kip/ft³ for us); the water unit weight is subtracted below the water table. Must be uniform across the failure depth in sand. |
layers[].phi | number | yes | 20 – 45 — Friction angle φ in degrees (20–45); must be the same in every layer above the plate. |
layers[].type = "cohesive" | variant | yes | Undrained clay layer; every layer in the profile must be the same type. |
layers[].top | number | yes | ≥ 0 — Layer top depth below the ground surface (m for si, ft for us); the first layer starts at 0. |
layers[].bottom | number | yes | > 0 — Layer bottom depth below the ground surface (m for si, ft for us); layers are contiguous and must cover the plate embedment. |
layers[].gamma | number | yes | > 0 — Total unit weight of the soil (kN/m³ for si, kip/ft³ for us); the water unit weight is subtracted below the water table. |
layers[].cohesion | number | yes | > 0 — Undrained shear strength c_u (kPa for si, ksf for us); must be the same in every layer above the plate. |
groundwater | object | yes | Groundwater state: dry or hydrostatic. |
groundwater.mode = "dry" | variant | yes | No groundwater within the analysis. |
groundwater.mode = "hydrostatic" | variant | yes | Hydrostatic groundwater below a water table. |
groundwater.waterTableDepth | number | yes | ≥ 0 — Depth of the water table below the ground surface (m for si, ft for us). For sand it must be 0 (fully submerged) or at/below the plate. |
groundwater.waterUnitWeight | number | yes | > 0 — Unit weight of water γw: 9.81 kN/m³ for si or 0.0624 kip/ft³ for us. There is no default. |
plateWeight | number | yes | ≥ 0 — Resisting weight of the plate assembly, net of buoyancy where applicable (kN for si, kip for us). |
upliftCoefficient | number | yes | > 0 — Meyerhof–Adams nominal uplift coefficient K_u (dimensionless), used in the cohesionless breakout factor. There is no default. |
design | object | yes | Design basis applied to the nominal resistance: ASD factor of safety or LRFD resistance factor. |
design.basis = "asd" | variant | yes | Allowable stress design: design resistance = nominal resistance / factorOfSafety. |
design.factorOfSafety | number | yes | > 1 — ASD factor of safety (dimensionless, greater than 1). Ground anchors require at least 2 in soil or intermediate geomaterial and 3 in competent rock. |
design.basis = "lrfd" | variant | yes | Load and resistance factor design: design resistance = resistanceFactor × nominal resistance. |
design.resistanceFactor | number | yes | 0 – 1 — Resistance factor φ (dimensionless, greater than 0 and at most 1) from a project or code source. |
design.factorReference | string | yes | Citation for the resistance factor (code, table, or project document). |
kind = "anchor" | variant | yes | Selects the FHWA GEC 4 straight-shaft grouted ground-anchor analysis. |
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. |
method | "method.uplift.fhwa-gec4-ground-anchor" | yes | Method identifier for the FHWA GEC 4 ground-anchor method; the only accepted value. |
groutDiameter | number | yes | > 0 — Diameter of the grouted bond zone (m for si, ft for us). |
unbondedLength | number | yes | > 0 — Unbonded (free) tendon length (m for si, ft for us); at least 3 m for bar or 4.5 m for strand tendons. |
bondedLength | number | yes | > 0 — Bonded length (m for si, ft for us); 4.5–12 m in soil, 3–10 m in intermediate geomaterial or competent rock (FHWA GEC 4 pp. 71, 74). |
bondZoneCenterDepth | number | yes | > 0 — Vertical cover to the center of the bond zone (m for si, ft for us); at least 4.5 m. |
inclination | number | yes | 10 – 45 — Anchor inclination in degrees below horizontal (10–45). |
bondLayers[] | object[] | yes | min 1 item — Bond-zone segments measured along the anchor from the top of the bond zone, ordered and contiguous, covering exactly the bonded length. |
bondLayers[].top | number | yes | ≥ 0 — Start of this bond segment, measured along the anchor from the top of the bond zone (m for si, ft for us); the first segment starts at 0. |
bondLayers[].bottom | number | yes | > 0 — End of this bond segment, measured along the anchor from the top of the bond zone (m for si, ft for us); the last segment must end at bondedLength. |
bondLayers[].groundType | "soil" | "intermediate-geomaterial" | "competent-rock" | yes | Ground type in the bond zone; all segments must share one type. Sets the allowed bond-length range and minimum ASD factor of safety. |
bondLayers[].ultimateTransferLoad | number | yes | > 0 — Ultimate load transfer per unit bond length (kN/m for si, kip/ft for us), from a GEC 4 table, qualified product evidence, or a project load test. |
bondLayers[].transferReference | string | yes | Citation for ultimateTransferLoad (GEC 4 table, product evidence, or load test). |
bondEfficiency | object | yes | Bond efficiency factor with its source; there is no default. |
bondEfficiency.factor | number | yes | 0 – 1 — Bond efficiency factor η_b applied to the summed ground-grout transfer (dimensionless, greater than 0 and at most 1). |
bondEfficiency.reference | string | yes | Citation for the bond efficiency factor. |
tendon | object | yes | Tendon type, strength, and axial rigidity. |
tendon.type | "bar" | "strand" | yes | Tendon type; sets the minimum unbonded length (3 m for bar, 4.5 m for strand). |
tendon.smts | number | yes | > 0 — Specified minimum tensile strength of the complete tendon, as a force (kN for si, kip for us). |
tendon.axialRigidity | number | yes | > 0 — Axial rigidity EA of the complete tendon, as a force (kN for si, kip for us); used to compute apparent free length from test movements. |
tendonGroutBondCapacity | number | yes | > 0 — Ultimate tendon-to-grout bond capacity (kN for si, kip for us), from qualified product or test evidence (for example ASTM A981 data). |
tendonGroutBondReference | string | yes | Citation for tendonGroutBondCapacity. |
groutCompressiveStrength | number | yes | > 0 — Grout compressive strength (kPa for si, ksf for us); recorded for material traceability only and never used as a bond capacity. |
designLoad | number | yes | > 0 — Anchor design load (kN for si, kip for us); checked against 60% of SMTS and the governing design resistance. |
lockOffLoad | number | yes | ≥ 0 — Lock-off load (kN for si, kip for us); checked against 70% of SMTS. |
application | "temporary" | "permanent" | "creep-susceptible-permanent" | yes | Anchor service category; sets the minimum maximum-test-load multiplier on designLoad (1.20 temporary, 1.33 permanent and creep-susceptible permanent, per FHWA GEC 4 specification 6.01 and Table 23). Test loads up to 1.50 × designLoad are accepted (GEC 4 §7.4.2.2); creep-susceptible anchors tested below 1.50 receive a warning recommending 1.50. |
design | object | yes | Design basis applied to the nominal resistance: ASD factor of safety or LRFD resistance factor. |
design.basis = "asd" | variant | yes | Allowable stress design: design resistance = nominal resistance / factorOfSafety. |
design.factorOfSafety | number | yes | > 1 — ASD factor of safety (dimensionless, greater than 1). Ground anchors require at least 2 in soil or intermediate geomaterial and 3 in competent rock. |
design.basis = "lrfd" | variant | yes | Load and resistance factor design: design resistance = resistanceFactor × nominal resistance. |
design.resistanceFactor | number | yes | 0 – 1 — Resistance factor φ (dimensionless, greater than 0 and at most 1) from a project or code source. |
design.factorReference | string | yes | Citation for the resistance factor (code, table, or project document). |
testing | object | yes | Production load-test record, or kind "not-tested" for a design-only result. |
testing.kind = "not-tested" | variant | yes | No production test record; the result is reported as design-only-not-tested and is not accepted for service. |
testing.kind = undefined | variant | yes | Type of production load test recorded. |
testing.alignmentLoad | number | yes | ≥ 0 — Alignment load at the start of the test (kN for si, kip for us). |
testing.maximumTestLoad | number | yes | > 0 — Maximum test load applied (kN for si, kip for us); must exceed alignmentLoad. |
testing.movementAt1Minute | number | yes | ≥ 0 — Anchor movement 1 minute after the maximum test load is reached (m for si, ft for us). |
testing.movementAt10Minutes | number | yes | ≥ 0 — Anchor movement 10 minutes after the maximum test load is reached (m for si, ft for us). |
testing.movementAt6Minutes | number | no | ≥ 0 — Anchor movement at 6 minutes (m for si, ft for us), for an extended hold. Supply together with movementAt60Minutes. |
testing.movementAt60Minutes | number | no | ≥ 0 — Anchor movement at 60 minutes (m for si, ft for us), for an extended hold. Supply together with movementAt6Minutes. |
testing.elasticMovement | number | yes | > 0 — Recoverable (elastic) movement at the maximum test load (m for si, ft for us); used to compute apparent free length. |
testing.jackLength | number | yes | ≥ 0 — Jack length (m for si, ft for us); apparent free length must be at least jack length plus 80% of the unbonded length. |
testing.extendedCreepCycles[] | object[] | no | max 6 items — Load-hold records for permanent-anchor extended-creep testing: six ordered holds. Only valid with kind "extended-creep". |
testing.extendedCreepCycles[].load | number | yes | > 0 — Hold load for this cycle (kN for si, kip for us). |
testing.extendedCreepCycles[].targetPressure | number | yes | > 0 — Target test pressure for this hold (kPa for si, ksf for us). |
testing.extendedCreepCycles[].readings[] | object[] | yes | max 200 items — Time, movement, and pressure observations for this hold; the GEC 4 Table 23 observation times must be complete. |
testing.extendedCreepCycles[].readings[].timeMinutes | number | yes | > 0 — Observation time in minutes. |
testing.extendedCreepCycles[].readings[].movement | number | yes | ≥ 0 — Measured anchor movement at this time (m for si, ft for us). |
testing.extendedCreepCycles[].readings[].pressure | number | yes | > 0 — Measured test pressure at this time (kPa for si, ksf for us). |
Response fields
| Field | Type | Description |
|---|---|---|
testing.creep.extendedCycles[] | object[]? | Per-hold final-log-cycle movement, observed pressure deviation, load and acceptance reasons for permanent extended-creep records. |
kind | "plate" | "anchor" | The analyzed mechanism. |
nominalResistance | number | Minimum declared nominal resistance in request force units. |
designResistance | number | Resistance after the explicit ASD or LRFD basis. |
method.id | string | Exact method ID returned by the executed branch. |
method.edition | string | Published method edition/source designation. |
method.status | "validated" | Validation status of the executed method. |
ultimateUplift | number? | Plate-only migration alias exactly equal to nominalResistance. |
geometry | object? | Plate-only explicit area, perimeter, physical short-side width (diameter for a circle), and aspect ratio. |
groundwater | object? | Plate-only hydrostatic state and integrated effective overburden. |
layeredEnvelope | object? | Plate-only governing layer, strength, and layer count. |
failureSurface | object? | Plate-only shallow/deep mechanism and mobilized geometry. |
warnings | string[]? | Plain-language warnings where the published method leaves a modelling choice open (for example the clay soil weight below groundwater); empty when none apply. |
capacity | object? | Anchor-only ground-grout, tendon rupture, and tendon-grout capacities. |
governingFailureMode | string? | Anchor-only governing named design mode. |
demandCapacityRatio | number? | Anchor design load divided by governing design resistance. |
tendonLimits | object? | Anchor-only FHWA 60/70/80% SMTS checks. |
testing | object? | Anchor-only test multiplier, creep, apparent free length, and acceptance-screen details. |
limitations | object? | Anchor-only mandatory production-test and group-interaction limitations. |
scientificMetadata | object | Immutable engine, schema, manifest, unit, analysis, and primary-method provenance. |
Code examples
A complete, runnable request. Replace YOUR_API_KEY (or set PILECALC_API_KEY in your environment).
curl https://api.pilecalc.com/v1/uplift \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"unitSystem": "si",
"kind": "plate",
"method": "method.uplift.meyerhof-adams-plate",
"shape": {
"kind": "rectangular",
"width": 1.2,
"length": 2.4
},
"embedment": 3,
"layers": [
{
"type": "cohesionless",
"top": 0,
"bottom": 1.5,
"gamma": 18,
"phi": 31
},
{
"type": "cohesionless",
"top": 1.5,
"bottom": 3,
"gamma": 18,
"phi": 31
}
],
"groundwater": {
"mode": "dry"
},
"plateWeight": 4.5,
"upliftCoefficient": 0.9,
"design": {
"basis": "asd",
"factorOfSafety": 2
}
}'The GET variant returns nominalResistance,designResistance,method.id 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.
For extended-creep, supply testing.extendedCreepCycles: six ordered objects containing load, targetPressure, andreadings of timeMinutes, movement and pressure. Use coherent request units: metres and kPa, or feet and ksf; time is always minutes. GEC 4 Table 23 observation times must be complete. The existing scalar one/ten-minute fields remain required for compatibility but do not qualify an extended-creep record. The declared maximum must equal the highest recorded load. The maximum test load must be at least 1.33 times the design load for permanent anchors (1.20 for temporary ones) and at most 1.50 times (FHWA GEC 4 specification 6.01 and §7.4.2.2); the sixth hold is checked at the applied test load. In creep-susceptible ground GEC 4 says 150 percent may be used, so a lower test load returns a warnings entry recommending 1.50. These are supplied-record checks, not verification of instrument calibration, the unloading sequence or project sampling.
Safety and migration
- The former
width + area + soilTypeplate payload andgroutDiameter + bondedLength + adhesionanchor payload are rejected. They cannot identify plan geometry, units, groundwater, structural failure modes, or test status. - Plate strength must be uniform. Sand additionally requires uniform unit weight and dry, fully submerged, or water-table-at/below-plate conditions. Clay permits variable unit weight and an internal water table in the integrated soil-weight term. Below the water table the clay soil weight uses the buoyant unit weight: Das (1980) Eq. 1 does not say whether γ is total or buoyant, so the lower-resistance reading is used, no base suction is credited, and
warningsstates the difference. There are no hidden water-unit-weight, plate-weight, bond-efficiency, or design-factor defaults. nominalResistanceanddesignResistanceare distinct. Do not apply a second factor to the design result.- An anchor with
testing.kind = "not-tested"returnsdesign-only-not-tested; it is not accepted for service. - GET/Excel requests carry the identical JSON payload in
req; response projection always retains mandatory scientific provenance fields.