API: global slope stability

POST/GET /v1/global-slope — terrain, water, circular search and complete numerical diagnostics.


Compute global, unreinforced slope factor of safety with the Bishop simplified method for static, two-dimensional circular surfaces. Terrain must descend left to right; strata are horizontal and contiguous. Total soil unit weights, base strength parameters, a prescribed piezometric line and vertical strip surcharges define the slice forces.

Endpoint

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

Use explicit candidate circles or a bounded center/radius grid of at most 1,000 circles. Refine and widen the search and compare slice meshes. Piezometric pressure is water unit weight times head above the slice base; suction is not credited. Ponded surface water and water-filled cracks are rejected. An optional dryCrackDepth introduces an empty vertical entry crack of that depth for every circle. Without it, crestTension sets how tensile base forces near a cohesive crest are handled: "minimum-fs-dry-crack" (default) re-analyses each circle with an empty crack at the depth giving the minimum FS, and "permit" leaves the tension in the solution, as Rocscience Slide2 does by default, with a warning.

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
method"bishop-simplified-circular"yesBishop simplified method for static, two-dimensional circular slip surfaces.
unitSystem"si" | "us"yesUnit 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.
terrain[]object[]yesmin 2 items, max 100 items — Ground-surface profile points with strictly increasing x; elevation must not rise from left to right (the slope descends to the right).
terrain[].xnumberyesHorizontal coordinate, increasing to the right (m in SI, ft in US).
terrain[].elevationnumberyesElevation at x (m in SI, ft in US).
layers[]object[]yesmin 1 item, max 50 items — Horizontal strata ordered top to bottom and contiguous (each top equals the previous bottom).
layers[].topElevationnumberyesElevation of the top of the stratum (m in SI, ft in US).
layers[].bottomElevationnumberyesElevation of the bottom of the stratum; must be below topElevation (m in SI, ft in US).
layers[].unitWeightnumberyes> 0 — Total unit weight of the stratum (kN/m³ in SI, kip/ft³ in US).
layers[].cohesionnumberyes≥ 0 — Cohesion c (kPa in SI, ksf in US). Use c′ for an effective-stress analysis, or undrained strength su with frictionAngleDeg 0 and dry water mode for a total-stress analysis.
layers[].frictionAngleDegnumberyes0 – 60 — Friction angle φ in degrees (φ′ for an effective-stress analysis, 0 for undrained total stress).
waterobjectyesPore-water condition: "dry" or "piezometric".
water.mode = "dry"variantyesNo pore pressure.
water.mode = "piezometric"variantyesPore pressure from a prescribed piezometric line.
water.line[]object[]yesmin 2 items, max 100 items — Piezometric line points with strictly increasing x; pore pressure at a slice base is water unit weight times the head of this line above the base (no suction).
water.line[].xnumberyesHorizontal coordinate, increasing to the right (m in SI, ft in US).
water.line[].elevationnumberyesElevation at x (m in SI, ft in US).
water.unitWeightnumberyes> 0 — Unit weight of water, e.g. 9.81 kN/m³ in SI or 0.0624 kip/ft³ in US (never pcf).
surcharges[]object[]yesmax 50 items — Vertical strip surcharges added to slice weights; may be empty.
surcharges[].startXnumberyesLeft x-coordinate of the loaded strip (m in SI, ft in US).
surcharges[].endXnumberyesRight x-coordinate of the loaded strip; must exceed startX (m in SI, ft in US).
surcharges[].pressurenumberyes≥ 0 — Uniform vertical surcharge pressure on the strip (kPa in SI, ksf in US).
searchobjectyesTrial-circle search: explicit "candidates" or a bounded "grid".
search.mode = "candidates"variantyesEvaluate the listed trial circles.
search.circles[]object[]yesmin 1 item, max 1000 items — Explicit trial circles, with unique IDs.
search.circles[].idstringyesUnique, stable lowercase identifier for this trial circle (e.g. "trial-1").
search.circles[].centerXnumberyesHorizontal coordinate of the circle center (m in SI, ft in US).
search.circles[].centerElevationnumberyesElevation of the circle center (m in SI, ft in US).
search.circles[].radiusnumberyes> 0 — Circle radius (m in SI, ft in US).
search.mode = "grid"variantyesEvaluate every combination of center x, center elevation and radius; at most 1000 circles in total.
search.centerXobjectyesRange of circle-center x-coordinates.
search.centerX.minnumberyesLower bound of the range (m in SI, ft in US).
search.centerX.maxnumberyesUpper bound of the range; must exceed min (m in SI, ft in US).
search.centerX.countnumberyesinteger, 2 – 20 — Number of evenly spaced values from min to max, both ends included.
search.centerElevationobjectyesRange of circle-center elevations.
search.centerElevation.minnumberyesLower bound of the range (m in SI, ft in US).
search.centerElevation.maxnumberyesUpper bound of the range; must exceed min (m in SI, ft in US).
search.centerElevation.countnumberyesinteger, 2 – 20 — Number of evenly spaced values from min to max, both ends included.
search.radiusobjectyesRange of circle radii; min must be positive.
search.radius.minnumberyesLower bound of the range (m in SI, ft in US).
search.radius.maxnumberyesUpper bound of the range; must exceed min (m in SI, ft in US).
search.radius.countnumberyesinteger, 2 – 20 — Number of evenly spaced values from min to max, both ends included.
slicesnumberyesinteger, 20 – 500 — Nominal number of equal-width slices across the slip extent; extra slice boundaries are added at terrain, surcharge, piezometric-line and stratum-boundary points.
dryCrackDepthnumberno≥ 0 — Depth of a prescribed empty vertical tension crack at the uphill end of the slip surface (m in SI, ft in US), used as given for every circle. Omit or use 0 to let crestTension decide. The crack bottom must not lie below the piezometric line (water-filled cracks are unsupported).
crestTension"minimum-fs-dry-crack" | "permit"noTreatment of tensile base normal forces near the crest (from the cohesion intercept) when no crack depth is prescribed. "minimum-fs-dry-crack" (default): USACE EM 1110-2-1902 App. C-10.c(1), each circle is re-analysed with an empty vertical crack at the depth giving the minimum FS. "permit": tension is left in the solution, as in Rocscience Slide2's default, which reproduces published Slide verification FS values; a warning is returned.

Response fields

FieldTypeDescription
critical.factorOfSafetynumberMinimum FS among valid evaluated circles; not a certified global minimum.
candidatesarrayEvery evaluated circle, with converged slice data or a rejection reason.
search.coverageCompletebooleanFalse whenever any submitted circle was rejected; the search is then incomplete.

Code examples

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

POST /v1/global-slope
curl https://api.pilecalc.com/v1/global-slope \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "method": "bishop-simplified-circular",
  "unitSystem": "si",
  "terrain": [
    {
      "x": -20,
      "elevation": 10
    },
    {
      "x": 0,
      "elevation": 10
    },
    {
      "x": 20,
      "elevation": 0
    },
    {
      "x": 40,
      "elevation": 0
    }
  ],
  "layers": [
    {
      "topElevation": 10,
      "bottomElevation": -30,
      "unitWeight": 20,
      "cohesion": 0,
      "frictionAngleDeg": 25
    }
  ],
  "water": {
    "mode": "dry"
  },
  "surcharges": [],
  "search": {
    "mode": "candidates",
    "circles": [
      {
        "id": "trial-1",
        "centerX": 8,
        "centerElevation": 18,
        "radius": 22
      }
    ]
  },
  "slices": 100
}'

The GET variant returns critical.factorOfSafety,search.coverageComplete 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.

The method satisfies vertical force and overall moment equilibrium, not horizontal force equilibrium. Base normal forces are checked on the continuous slip surface, so the result does not depend on the slice count: tension from pore pressure above the total overburden rejects the circle, and tension from the cohesion intercept is treated as set by crestTension. Warnings for crest tension and m_alpha below 0.2 are appended to limitations. Interslice tension and water in the crack require independent review. No pile contribution, seismic force, noncircular slip or Spencer verification is included. No design acceptance is reported.

Source: USACE EM 1110-2-1902 (2003), Appendix F Eqs F-4/F-5, Appendix C-3, para 2-2.f and Appendix C-10.c (tension cracks). The implemented pore-pressure projection follows F-4 (u times horizontal width), independently checked by vertical and tangential equilibrium.