ZeeMaps API Docs v1

Rate limits

The API throttles in two ways, both enforced per API key: a per-minute rate limit on every request, and daily quotas on three write operations.

The per-minute rate limit

Response headers

Every response includes the current limit state:

Header Meaning
X-RateLimit-Limit Requests allowed per minute for this key.
X-RateLimit-Remaining Requests left in the current window.
X-RateLimit-Reset Unix timestamp (seconds) when the window resets.
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1782403260

When you exceed the limit

The API returns 429 RATE_LIMITED with a Retry-After header (seconds until the window resets):

HTTP/1.1 429 Too Many Requests
Retry-After: 24
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1782403260

{ "error": { "code": "RATE_LIMITED", "message": "Rate limit exceeded. Retry after 24s." } }

Daily quotas

Separately from the per-minute limit, three write operations are capped per key, per UTC day:

Operation Endpoint Default per day
Map creates POST /v1/maps 10
Single marker adds POST /v1/maps/{map_id}/markers 1,000
Bulk imports POST /v1/maps/{map_id}/markers/bulk 10

Read your current standing at any time from GET /v1/me, which returns a quotas object with each operation’s effective limit and today’s (UTC) usage:

"quotas": {
  "maps":    { "limit": 10,   "used": 2 },
  "markers": { "limit": 1000, "used": 148 },
  "bulk":    { "limit": 10,   "used": 0 }
}

When you exceed a quota

The API returns 429 with error.code = QUOTA_EXCEEDEDdistinct from RATE_LIMITED, so a client can tell “pause a few seconds” from “done with this write until tomorrow”. Retry-After is the number of seconds until the next UTC midnight, which can be many hours — don’t spin-retry a quota 429:

HTTP/1.1 429 Too Many Requests
Retry-After: 20516

{ "error": { "code": "QUOTA_EXCEEDED", "message": "Daily quota exceeded for bulk imports (10 per key per day). The quota resets at UTC midnight." } }

Backoff guidance