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.
| Plan | Limit |
|---|---|
| Free | 60 req / min |
| Micro | 120 req / min |
| Growth | 600 req / min |
| Professional | 2,000 req / min |
| Enterprise | 10,000 req / min |
Rate limit response headers
| Header | Description |
|---|---|
| X-RateLimit-Limit | Your plan's requests-per-minute ceiling |
| X-RateLimit-Remaining | Requests remaining in the current window |
| X-RateLimit-Reset | Unix 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');
}