Skip to content
Ask the docs

Find answers across the QairoPay docs.

Type a question and we'll synthesize an answer from the docs with citations back to the source pages.

Rate limits

Rate limits exist so one tenant’s traffic spike can’t take down another’s. Limits are per-tenant, not per-key.

Reading the headers

Every API response includes:

X-RateLimit-Limit: 500
X-RateLimit-Remaining: 327
X-RateLimit-Reset: 1716115200
X-RateLimit-Resource: passes_write
  • X-RateLimit-Limit — requests allowed in the current window.
  • X-RateLimit-Remaining — how many are left.
  • X-RateLimit-Reset — Unix timestamp when the window resets.
  • X-RateLimit-Resource — which bucket this limit applies to.

When you hit a limit, the response is 429 rate_limited:

HTTP/1.1 429 Too Many Requests
Retry-After: 4
{
"error": {
"type": "rate_limited",
"code": "tenant_limit",
"message": "Tenant rate limit exceeded for `passes_write`. Retry in 4 seconds.",
"retry_after_ms": 4000
}
}

Honor Retry-After. The TS SDK does this automatically.

Default limits

These are the production defaults. Sandbox uses the same envelope but can be temporarily lifted for load tests — see below.

BucketDefault limitWindow
read (any GET)1000 req1 minute, per tenant
passes_write500 req1 minute
cards_write200 req1 minute
settlements_write100 req1 minute
templates_write60 req1 minute
webhooks_outbound100 events/secn/a (delivered fairly)
Concurrent connections64n/a

Bursts up to 2× the per-minute limit are allowed using a token-bucket algorithm; sustained traffic averages out to the stated limit.

Bulk endpoints

If you find yourself bumping into the per-endpoint limit, look at the bulk variant first:

SingleBulk
POST /v1/passesPOST /v1/passes/batch (up to 100 per call)
PATCH /v1/passes/{id}POST /v1/passes/batch_update (up to 100 per call)
POST /v1/passes/{id}/revokePOST /v1/passes/batch_revoke (up to 1000 per call)

Each bulk endpoint counts as one request against the bucket.

Requesting a higher limit

If your steady-state traffic exceeds the defaults, email [email protected] with:

  1. The bucket you need lifted.
  2. The peak rate you’ll send.
  3. The duration (steady state, or a one-time burst window).

We approve most reasonable requests within one business day. For sandbox load tests, we lift sandbox-only limits same-day.

Webhook retries and your endpoint

If your webhook endpoint can’t keep up, QairoPay won’t slow down delivery — it’ll mark failed deliveries for retry. See Retries and delivery for how that works and how to scale your endpoint.