We can't find the internet
Attempting to reconnect
Something went wrong!
Attempting to reconnect
Machine-readable spec at /openapi.yaml (OpenAPI 3.0.3 — import directly into RapidAPI, Postman, or any LLM tool).
/api/v1/zone
Returns the hardiness zone — and localized country zone where available — for any GPS coordinate.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| lat | query | number | required | Latitude, −90 to 90 |
| lng | query | number | required | Longitude, −180 to 180 |
Pass your API key as a Bearer token in the
Authorization
header.
Get a key at Dashboard.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://coords.zone/api/v1/zone?lat=48.14&lng=11.58"
{
"usda_zone": "8a",
"local_zone": "Z8a",
"lat": 48.14,
"lng": 11.58
}
| Field | Type | Description |
|---|---|---|
| usda_zone | string | null | USDA zone 1a–13b. Null over international waters or other areas outside coverage. |
| local_zone | string | null | Country-specific zone. Null when no local data for that country. |
| lat | number | Echo of input latitude |
| lng | number | Echo of input longitude |
| Status | Cause | Body |
|---|---|---|
| 401 | Invalid API key | {"error": "Invalid API key"} |
| 402 | Free tier (1 000 req/month) exceeded — unsubscribed or canceled account | {"error": "..."} |
| 429 | Rate limit exceeded (10 req/sec, per IP unauthenticated or per key authenticated) | {"error": "Too many requests"} |
/api/v1/country
Returns the country and its available hardiness zones for any GPS coordinate.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| lat | query | number | required | Latitude, −90 to 90 |
| lng | query | number | required | Longitude, −180 to 180 |
Pass your API key as a Bearer token in the
Authorization
header.
Get a key at Dashboard.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://coords.zone/api/v1/country?lat=48.14&lng=11.58"
{
"name": "Germany",
"iso_code": "DE",
"zones": ["Z1a", "Z1b", "Z2a", "Z2b", "Z3a", "Z3b", "Z4a", "Z4b", "Z5a", "Z5b", "Z6a", "Z6b", "Z7a", "Z7b", "Z8a", "Z8b", "Z9a", "Z9b", "Z10a", "Z10b", "Z11a", "Z11b", "Z12a", "Z12b", "Z13a", "Z13b"],
"lat": 48.14,
"lng": 11.58
}
| Field | Type | Description |
|---|---|---|
| name | string | null | Country name for the coordinate. Null outside all known countries. |
| iso_code | string | null | ISO country code (alpha-2, alpha-3 fallback). Null outside all known countries. |
| zones | array<string> | Country's local zones if it has its own system (currently: Australia, the UK, South Africa, Germany, Sweden, Norway); otherwise the full USDA range (1a–13b). |
| lat | number | Echo of input latitude |
| lng | number | Echo of input longitude |
| Status | Cause | Body |
|---|---|---|
| 401 | Invalid API key | {"error": "Invalid API key"} |
| 402 | Free tier (1 000 req/month) exceeded — unsubscribed or canceled account | {"error": "..."} |
| 429 | Rate limit exceeded (10 req/sec, per IP unauthenticated or per key authenticated) | {"error": "Too many requests"} |
/api/v1/climate
Returns the raw climate inputs behind the zone classification, for any GPS coordinate.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| lat | query | number | required | Latitude, −90 to 90 |
| lng | query | number | required | Longitude, −180 to 180 |
Pass your API key as a Bearer token in the
Authorization
header.
Get a key at Dashboard.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://coords.zone/api/v1/climate?lat=48.14&lng=11.58"
{
"min_temp": -14.5,
"max_temp": 19.5,
"frost_last_doy": 96,
"frost_last_date": "Apr 6",
"frost_first_doy": 310,
"frost_first_date": "Nov 6",
"lat": 48.14,
"lng": 11.58
}
| Field | Type | Description |
|---|---|---|
| min_temp | number | null | Average annual extreme minimum temperature (°C), the statistic USDA zones are derived from. Null over international waters or other areas outside coverage. |
| max_temp | number | null | Average warmest-month mean temperature (°C). Null outside coverage. |
| frost_last_doy | integer | null | Average day-of-year of the last spring frost. Null outside coverage. |
| frost_last_date | string | null |
frost_last_doy as a "Mon D" date string.
|
| frost_first_doy | integer | null | Average day-of-year of the first autumn frost. Null outside coverage. |
| frost_first_date | string | null |
frost_first_doy as a "Mon D" date string.
|
| lat | number | Echo of input latitude |
| lng | number | Echo of input longitude |
| Status | Cause | Body |
|---|---|---|
| 401 | Invalid API key | {"error": "Invalid API key"} |
| 402 | Free tier (1 000 req/month) exceeded — unsubscribed or canceled account | {"error": "..."} |
| 429 | Rate limit exceeded (10 req/sec, per IP unauthenticated or per key authenticated) | {"error": "Too many requests"} |
| Tier | Rate limit | Monthly quota | Cost |
|---|---|---|---|
| No key | 10 req / sec | 100 req / month | Free |
| Free (API key) | 10 req / sec | 1 000 req / month | Free |
| Paid (API key) | 10 req / sec | Unlimited | 1 000 req / month included, then $0.003 per request (~$3 per 1 000 requests) |
Pay-per-usage, billed monthly via Stripe. No commitment — cancel anytime from the dashboard.
Countries with their own hardiness zone system (see
local_zone
above). These are the complete value lists — the same array
/api/v1/country
returns in zones.
| Country | ISO | System | Values |
|---|---|---|---|
| Australia | AU | ANBG (7-band) | 1–7 |
| Germany | DE | Z-prefixed USDA | Z1a–Z13b |
| Norway | NO | Scandinavia (8-band) | 1–8 |
| South Africa | ZA | 5-band | 1–5 |
| Sweden | SE | Scandinavia (8-band) | 1–8 |
| United Kingdom | GB | UK hardiness (9-tier) | H7, H6, H5, H4, H3, H2, H1c, H1b, H1a |
| All other countries | — | USDA | 1a–13b |
The Scandinavian scale runs 1 (mildest) to 8 (harshest) — the opposite
direction from USDA, where higher is warmer. Germany's system is a
straight relabel of USDA, so Z7b
means exactly what USDA 7b
means; the
rest are approximations derived from the same climate data, not
licensed reproductions of each country's official system.