M
DevelopersRate limits

Rate limits

Per-plan ceilings, response headers, and backoff strategy.

Limits are enforced per-tenant per-plan on a rolling 60-second window. Headers on every response tell you exactly where you stand.

PlanLimit
Free60 req / min
Micro120 req / min
Growth600 req / min
Professional2,000 req / min
Enterprise10,000 req / min

Rate limit response headers

HeaderDescription
X-RateLimit-LimitYour plan's requests-per-minute ceiling
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets (UTC)

Node.js — Exponential backoff on 429

NODE.JS
async function verifyWithRetry(payload: object, maxRetries = 3) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const res = await fetch('https://api.trustverify.co.uk/api/v1/kyc/verify', {
      method:  'POST',
      headers: {
        'Authorization': `Bearer ${process.env.TV_API_KEY}`,
        'Content-Type':  'application/json',
      },
      body: JSON.stringify(payload),
    });
    if (res.status !== 429) return res;
    const reset = Number(res.headers.get('X-RateLimit-Reset')) * 1000;
    const waitMs = Math.max(reset - Date.now(), 1000 * 2 ** attempt);
    await new Promise(r => setTimeout(r, waitMs));
  }
  throw new Error('Rate limit retries exhausted');
}