Skip to content

Rate limits

Limit Default
Requests per client 600 a minute
Requests for the whole organization (all clients) 3,000 a minute
AI operations per caller (POST /v1/ask, Process, regenerate) 30 a minute
Uploads for the organization (questionnaires, documents, versions) 120 an hour
Token requests per client (/oauth/token) 60 a minute

The limits are fixed windows, shared by all of Tradecraft’s servers. Admins can lower them for their organization in Admin → API → Settings → Rate limits; to raise them, contact us. GET /v1/me returns the limits that apply to your token.

Every response carries the headers of the tightest limit that applied:

Header Meaning
RateLimit-Limit Requests allowed in the window
RateLimit-Remaining Requests left
RateLimit-Reset Seconds until the window resets

Over a limit, the answer is 429 RATE_LIMITED with Retry-After in seconds. Wait that long before you retry.

async function call(url: string, init: RequestInit, tries = 3): Promise<Response> {
const res = await fetch(url, init)
if (res.status !== 429 || tries <= 1) return res
const wait = Number(res.headers.get("Retry-After") ?? "1")
await new Promise((r) => setTimeout(r, wait * 1000))
return call(url, init, tries - 1)
}
Terminal window
curl -s -D - -o /dev/null -H "Authorization: Bearer $TOKEN" https://api.tradecrafthub.ai/v1/me | grep -i '^ratelimit-'

AI operations also stop with 402 when your organization’s AI budget is used up. That is a budget, not a rate limit: retrying does not help until the budget is raised or the month ends.

Privacy preference center

When you visit tradecrafthub.ai, we store or read a small number of cookies in your browser. Strictly necessary cookies make the website and the Tradecraft app work. Analytics cookies are used only if you allow them. Open a category to learn more, and see our privacy policy for how we handle the information you enter on this site.

Manage consent preferences

  • Always active