Trimline is in private beta. Public launch: June 2027.Join the waitlist →
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

BucketProductionSandbox
All read requests (GET)100 / 10 s25 / 10 s
Write requests (POST, PATCH, DELETE)30 / 10 s10 / 10 s
Draft approvals10 / minute10 / minute
Test helpersn/a5 / 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-LimitRequests allowed in the current window for this bucket.
RateLimit-RemainingRequests left in the current window.
RateLimit-ResetSeconds 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=100 when you page through large lists.
  • Cache vendor and contract data, which change rarely, and refresh it when a contract.updated event arrives.

Something unclear or missing? Email developers@trimline.tech.