Documentation menu
Errors
What a refusal looks like, what each status code means here, and every code you can branch on.
Branch on code. Every refusal returns the same envelope, whatever the status.
The error body
Log detail. Show message and message_title to a person: they are written to be safe to display. field names the parameter at fault when one is. Quote request_id if you get in touch about it.
{
"detail": {
"error": {
"code": "location_ambiguous",
"field": "address",
"detail": "3 candidates within 40m; none is a parcel centroid.",
"message": "That address matches more than one parcel.",
"message_title": "Which one did you mean?",
"request_id": "req_01h455vb4pex5vsknk084sn02q"
}
}
}Status codes
One is worth committing to memory: 404 means no such id, and nothing else. A location Placestack cannot answer for is not a 404.
- 401
- No usable credential.
- 402
quota_exhausted: out of credit. Credit is prepaid and the balance cannot go below zero, so add credit rather than retrying.- 403
entitlement_missing: the plan does not cover this operation.- 404
- No such id. The only meaning of 404.
- 422
- The request cannot be answered as asked. The code says why.
- 429
rate_limited, withRetry-After.- 501
not_available: this operation does not answer yet.
Error codes
Branch on code, never on the message. This list is read from the contract, and GET /vocabulary/error_code serves the authoritative one with the text that goes with each. The groupings below are editorial, to make 28 codes readable.
Location
- location_unresolved
- location_ambiguous
- authority_unresolved
- geometry_too_large
- precision_below_floor
Time
- as_of_before_retention
- as_of_in_future
- as_of_interval_too_long
- as_of_unsupported
Ids and resources
- no_such_resource
- id_malformed
- no_coverage
Filters, sorting and cursors
- filter_conflict
- field_unknown
- operator_unsupported
- vocabulary_value_unknown
- sort_requires_query
- cursor_expired
- cursor_snapshot_gone
- cursor_sort_mismatch
Account and writes
- entitlement_missing
- quota_exhausted
- rate_limited
- version_conflict
- provenance_not_representable
Research
- no_such_interrupt
- inquiry_run_in_flight
Not answering yet
- not_available
Responses that look like failures
Three of these return 200, so do not treat them as errors. A location too coarse for the grain you asked for carries resolution.state: insufficient_precision unless you pass strict=true, which makes it a 422. A row a filter cannot evaluate comes back marked indeterminate rather than dropped. And a jurisdiction with nothing behind it carries a coverage block saying so.