API Reference

Last updated

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

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"

Try it

Runs against the live API — the request above without the key, which this endpoint answers all the same.

Response 200

{
  "usda_zone": "7b",
  "local_zone": "Z7b",
  "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"}
429 Rate limit exceeded (10 req/sec, per IP unauthenticated or per key authenticated) or free tier (1 000 req/month) exceeded — unsubscribed or canceled account {"error": "..."}

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"

Try it

Runs against the live API — the request above without the key, which this endpoint answers all the same.

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"}
429 Rate limit exceeded (10 req/sec, per IP unauthenticated or per key authenticated) or free tier (1 000 req/month) exceeded — unsubscribed or canceled account {"error": "..."}

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"

Try it

Runs against the live API — the request above without the key, which this endpoint answers all the same.

Response 200

{
  "min_temp": -14.5,
  "min_temp_f": 5.9,
  "max_temp": 19.5,
  "max_temp_f": 67.1,
  "frost_last_doy": 96,
  "frost_first_doy": 310,
  "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.
min_temp_f number | null min_temp in °F.
max_temp number | null Average warmest-month mean temperature (°C). Null outside coverage.
max_temp_f number | null max_temp in °F.
frost_last_doy integer | null Average day-of-year of the last spring frost, 1–365 on a non-leap numbering: 1 is Jan 1, 60 is Mar 1, 365 is Dec 31. Resolve it against a non-leap year. The value is a 30-year average, so it names no year of its own. Null outside coverage.
frost_first_doy integer | null Average day-of-year of the first autumn frost, on the same numbering. Null outside coverage.
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"}
429 Rate limit exceeded (10 req/sec, per IP unauthenticated or per key authenticated) or free tier (1 000 req/month) exceeded — unsubscribed or canceled account {"error": "..."}

POST /mcp

The same three lookups as MCP tools, so an agent can call them directly. Setup instructions for Claude Code, Claude Desktop, Cursor, and other clients are on the MCP server page.

What are the rate limits?

Tier Rate limit Monthly quota
No key 10 req / sec 100 req / month
Free (API key) 10 req / sec 1 000 req / month
Paid (API key) 10 req / sec Unlimited

Exceeding the rate limit or the monthly free tier quota both return 429. See pricing for what the paid tier costs and how it is billed.

Successful responses report where you stand in the monthly quota: X-RateLimit-Limit (the quota that applies, 100 without a key or 1 000 on the free tier), X-RateLimit-Remaining (what is left after this request), and X-RateLimit-Reset (a Unix timestamp for when the quota resets). Paid accounts have no ceiling, so they get none of the three. A 429 carries only X-RateLimit-Reset, the time to retry after. The MCP endpoint does not send these headers.

Which countries have their own zone system?

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

© 2026 coords.zone