Docs / Core concepts
Rate limits
Request limits during the beta, the headers that report them, and how to back off.
Beta. The Trimline API is available to private beta customers. Endpoints may change before general availability in June 2027, and every breaking change is announced in the changelog. Request access.
Rate limits keep the API fast for everyone. Limits apply to each API key, separately for the sandbox and production, and are counted over a rolling 10-second window.
Limits during beta
| Bucket | Production | Sandbox |
|---|---|---|
All read requests (GET) | 100 / 10 s | 25 / 10 s |
Write requests (POST, PATCH, DELETE) | 30 / 10 s | 10 / 10 s |
| Draft approvals | 10 / minute | 10 / minute |
| Test helpers | n/a | 5 / minute |
The draft approval limit is deliberately low. Every approval can send a real email to a vendor, and a runaway loop shouldn’t be able to flood a sales rep’s inbox. If you have a genuine need for higher limits, talk to us.
Headers
Every response includes your current status:
RateLimit-Limit: 100
RateLimit-Remaining: 87
RateLimit-Reset: 6
RateLimit-Limit | Requests allowed in the current window for this bucket. |
RateLimit-Remaining | Requests left in the current window. |
RateLimit-Reset | Seconds until the window resets. |
When you’re limited
Requests over the limit get a 429 response with a rate_limit_error and a Retry-After header in seconds. Wait at least that long before retrying.
async function withRetry(fn, attempts = 5) {
for (let i = 0; i < attempts; i++) {
const res = await fn();
if (res.status !== 429 && res.status < 500) return res;
const wait = Number(res.headers.get("Retry-After")) * 1000 || 2 ** i * 500;
await new Promise(r => setTimeout(r, wait + Math.random() * 250));
}
throw new Error("Trimline API: retries exhausted");
}
Staying under the limit
- Subscribe to webhooks instead of polling for changes.
- Use
limit=100when you page through large lists. - Cache vendor and contract data, which change rarely, and refresh it when a
contract.updatedevent arrives.
Something unclear or missing? Email developers@trimline.tech.