Skip to main content
The VMArea Public API uses two stacked buckets, both backed by Redis so the limits are shared across every API instance.

Current limits

The per-token bucket means heavy customers and clients behind shared NAT IPs aren’t penalised for each other’s traffic. Pair this with the Idempotency-Key header so safe retries don’t burn extra requests — see Idempotency.

429 response

When you exceed either limit, the API returns HTTP 429 Too Many Requests:
The error string identifies which bucket you tripped (per-token vs per-IP global fallback).

Response headers

Every response includes the standard rate-limit headers; Retry-After is added on 429 responses.

Handling 429 in your client

Read Retry-After for the minimum wait, then back off exponentially with jitter starting at 1 second:

Best practices

  • Use Idempotency-Key for writes. Safe retries won’t double-spend your quota or create duplicate resources.
  • Batch reads where possible. Paginated list endpoints are cheaper than fan-out GETs.
  • Cache catalog data. Plans, regions, and OS templates change infrequently — cache them locally rather than re-fetching.
  • Use webhooks for state changes. Subscribing to vm.started, vm.stopped, etc. avoids polling GET /vms/:id in a tight loop.
  • Need higher limits? Contact support — sustained 10 RPS covers virtually every integration, but we can raise per-token ceilings on request.