Brault Developers

Plans and limits

Rate limit buckets, response headers, quotas, and the plan table.

Request volume is bounded per brandspace: every API key that brandspace has issued shares the same limits (there is no separate per-key sub-limit).

Buckets

BucketWindowCounts against it
burstper secondEvery request.
sustainedper minuteEvery request.
searchper minuteGET /v1/search, GET /v1/files when called with q, GET /v1/files/:id/similar, POST /v1/boards/:id/query when called with q.
uploadsper dayUpload initiations (POST /v1/uploads), file imports (POST /v1/files/import).
downloadsper dayPOST /v1/downloads, GET /v1/files/:id/download.
monthly quotacalendar monthEvery request.

Response headers

Every /v1 response carries:

  • X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset — the sustained (per-minute) window, in epoch seconds.
  • X-Quota-Limit, X-Quota-Remaining, X-Quota-Reset — the monthly quota.

A rejection still carries all six headers, whichever specific bucket was actually denied, plus Retry-After and one of:

  • 429 rate_limiteddetails.bucket names the bucket that was hit.
  • 429 quota_exceeded — the monthly request quota is used up.

Plan table

API access starts at Lite; Free has no API access at all and answers 403 plan_without_api with details.upgrade_url. These limits are data, not code — they change without a deploy, so treat the table below as a guide and GET /v1/me (see Getting Started) as the source of truth for your own brandspace.

LiteProGrowthCustom
Burst (req/s)21025contract
Sustained (req/min)303001,000contract
Monthly requests1,000100,0001,000,000contract
Upload initiations / day202,00020,000contract
Download URL issuances / day10010,000100,000contract
Search (NL) / min230120contract
Active keys1520contract
Webhook endpoints1310contract
Request-log retention (days)73090contract

When the limiter is unavailable

If the counter store is unreachable, requests are allowed through rather than blocked — a counter outage should never take the whole API down. The one exception is authentication itself: a database outage while a key is being resolved always answers 500 internal_error, it never fails open.

Failed-authentication throttling

Independent of the buckets above: every request whose key fails to authenticate (any 401 api_key_* outcome) counts against a per-IP counter in a rolling 5-minute window. At 20 failures, that IP gets 429 rate_limited (details.bucket: "auth") without the key even being looked up, until the window resets. Only failures count — a valid key from the same IP is never throttled by this counter.

On this page