Sapa Moto

Rate limits

20 requests per second per key, rate-limit headers on every response, 429 with Retry-After.

Each API key may make 20 requests per second (a fixed one-second window shared by all our servers). Your account manager can raise the limit for your organization.

Every response carries the state of the window:

HTTP
HTTP/1.1 200 OK
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 17
X-Request-Id: 0192f1c3-9e8d-7f6a-b5c4-d3e2f1a0b9c8

Above the limit the request is refused before it does anything:

HTTP
HTTP/1.1 429 Too Many Requests
Retry-After: 1
Content-Type: application/problem+json

{"status": 429, "code": "rate_limited", "message": "Слишком много запросов, повторите позже", "details": [], "request_id": "…"}

Tracking is limited per order

GET /v1/orders/{id}/track may be called once per 10 seconds per order; more often is 429 with Retry-After. The courier position does not change faster than that — and for the recipient there is the tracking page (tracking links).

Good practice

  • Wait Retry-After seconds before retrying a 429; add jitter when many workers retry at once.
  • Prefer webhooks to polling: one event instead of dozens of GET /orders/{id}.
  • Use POST /v1/orders/batch (up to 100 orders) for bulk uploads.
  • Keep separate keys for separate systems — limits are per key.

These docs are built from the platform's OpenAPI specification. Download OpenAPI