API Reference

Machine-readable spec at /openapi.yaml (OpenAPI 3.0.3 — import directly into RapidAPI, Postman, or any LLM tool).

GET /api/v1/zone

Returns the hardiness zone — and localized country zone where available — for any GPS coordinate.

Parameters

Name In Type Required Description
lat query number required Latitude, −90 to 90
lng query number required Longitude, −180 to 180

Authentication

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"

Response 200

{
  "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

Error responses

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"}

GET /api/v1/country

Returns the country and its available hardiness zones for any GPS coordinate.

Parameters

Name In Type Required Description
lat query number required Latitude, −90 to 90
lng query number required Longitude, −180 to 180

Authentication

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"

Response 200

{
  "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

Error responses

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"}

GET /api/v1/climate

Returns the raw climate inputs behind the zone classification, for any GPS coordinate.

Parameters

Name In Type Required Description
lat query number required Latitude, −90 to 90
lng query number required Longitude, −180 to 180

Authentication

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"

Response 200

{
  "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

Error responses

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"}

Rate limits & plans

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.

Local zone systems

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.

coords.zone