Errors
Errors share one shape. The code is stable; the message is for people.
{
"error": {
"code": "quota_exceeded",
"message": "…"
}
}| Status | Code | Meaning | What to do |
|---|---|---|---|
| 400 | invalid_coordinates | lat must be −90 to 90 and lng −180 to 180. | Fix the request. Don’t retry as is. |
| 401 | invalid_key | The key is malformed, unknown, or from the other environment. | Check the Authorization header and the key prefix. |
| 401 | key_revoked | The key was revoked. | Use another active key. |
| 402 | no_api_plan | Your organization has no active API plan. | An owner or admin chooses a plan on the Plan page. |
| 429 | rate_limited | Too many requests per second for your plan, or too many bad keys from your IP. | Back off and retry with jitter. |
| 429 | concurrency_limited | Too many requests in flight at once. | Wait for running requests to finish, then retry. |
| 429 | quota_exceeded | This period’s billable lookups are used up. The body includes reset_at and upgrade_url. | Wait for reset_at or upgrade. |
| 503 | unavailable | The service couldn’t check your plan or reach its data. | Retry with exponential backoff. |
A lookup that finds no parcel or falls outside covered places isn’t an error: it returns 200 with zoning.status set to no_parcel or not_covered, and doesn’t count toward your quota.