SoilPoint · API reference soilpoint.dev
← SoilPoint

API reference

Base URL: https://soilpoint.dev · Free · US coverage only · No key required to start

Endpoint

GET /v1/soil

ParameterTypeRequiredDescription
latnumberyesLatitude in WGS84 decimal degrees (−90 to 90)
lonnumberyesLongitude in WGS84 decimal degrees (−180 to 180)

Keyless example:

curl "https://soilpoint.dev/v1/soil?lat=37.368402&lon=-121.771"

API keys & rate limits

Keys are optional. Without one you share an IP-based bucket; with one you get a dedicated, higher-limit bucket. Keys never expire.

How to get a key: use the homepage — try a coordinate, then hit "Get my key" in the panel that appears.

Send your key in the x-api-key request header:

curl -H "x-api-key: sp_live_..." "https://soilpoint.dev/v1/soil?lat=42.024&lon=-93.648"
TierPer minutePer day
Keyless (per IP)60 req1,000 req
Keyed (per key)300 req20,000 req

Over the limit → 429 with {"error":{"code":"RATE_LIMITED",...}} and a Retry-After header indicating seconds to wait.

Response fields

All fields are present in every 200 response. Fields marked nullable return null for Miscellaneous land areas (urban land, water bodies, pits) where soil properties are undefined by design.

FieldTypeNullableDescription
latnumberEchoed latitude from your request
lonnumberEchoed longitude from your request
mukeystringSSURGO map unit key for this point
mapUnitNamestringHuman-readable map unit name (e.g. "Diablo clay, 9 to 15 percent slopes")
soilSeriesstringyesSoil series name of the dominant component
componentKindstringComponent kind — "Series" for named soils; "Miscellaneous area" for urban/water/etc.
componentPctnumberPercentage of the map unit this dominant component occupies (0–100)
texturestringyesUSDA textural class of the dominant surface horizon (e.g. "clay", "sandy loam")
drainageClassstringyesUSDA drainage class (e.g. "well drained", "somewhat poorly drained")
hydrologicGroupstringyesNRCS hydrologic soil group — A, B, C, D, or dual (e.g. "B/D")
awcnumberyesAvailable water capacity (cm/cm fraction), depth-weighted over 0–30 cm
phnumberyespH (1:1 water method), depth-weighted over 0–30 cm
organicMatternumberyesOrganic matter (% by weight), depth-weighted over 0–30 cm
nccpinumberyesNational Commodity Crop Productivity Index (0–1). Best-effort; often null for non-cropland.
nccpiClassstringyesQualitative NCCPI class (e.g. "High", "Medium") derived from the index value
depthWindowCmarrayDepth range used for weighted averages, as [min, max]. Default [0, 30].
dataVintagestringyesSSURGO survey version date for this area (ISO 8601 date string)
stalebooleantrue when the response was served from cache during an upstream outage
cachedAtstringyesISO 8601 timestamp of when this result was last fetched from upstream
dataSourcestringData source identifier — currently "SSURGO/SDA"
surveyDisclaimerstringShort disclaimer string from the survey authority

Errors

All errors return a JSON envelope: {"error":{"code":"...","message":"..."}}

CodeHTTPMeaning
INVALID400Missing or out-of-range lat or lon parameter
NO_SOIL_DATA404Point is in the ocean, outside US coverage, or in a gap in the survey
RATE_LIMITED429Rate limit exceeded — see Retry-After response header
SDA_UPSTREAM_ERROR502USDA Soil Data Access returned malformed or unexpected data
SDA_UNAVAILABLE503Upstream is down and no cached result is available for this point

Notes & honest limits

← Back to SoilPoint  ·  Blog