Skip to content
BoringKit

Rate limits

Build clients that retry politely and avoid duplicate work.

BoringKit uses bounded request, job, and file-processing limits to keep utility work predictable. Treat rate-limit responses as backpressure and retry with the same idempotency key for the same mutation.

Client rules

Discover first

Read /tools before creating jobs so your client knows accepted types, size limits, batch limits, and whether /jobs is supported.

Use idempotency

Send Idempotency-Key on POST /jobs, cancellation retries, and other mutating requests that may be repeated by your network stack.

Back off

On 429 or temporary 5xx responses, wait before retrying and apply exponential backoff with jitter.

Limit concurrency

Keep concurrent uploads and running jobs bounded per account. Poll existing jobs instead of creating duplicates.

Respect file windows

Upload intents and download intents expire quickly. Request a new intent only when the previous one expired before use.

Retry response pattern

Example
HTTP/1.1 429 Too Many Requests
Retry-After: 30
Content-Type: application/json

{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Retry after the indicated delay."
  }
}

What not to retry unchanged

  • Validation failures such as unsupported content type, oversized input, or malformed JSON.
  • Safety rejections such as private network URLs, unsupported protocols, unsafe redirects, or empty files.
  • Plan or authorization errors such as missing scopes, revoked keys, or plan upgrade requirements.
  • Expired output responses. Re-run the job if retention has ended.