KURE

Limits & errors

Rate limits

LimitDefaultWith input storage consent
Requests per minute (RPM)60120 (×2)
Tokens per minute (TPM)200,000400,000 (×2)
Tokens per day4,000,00040,000,000 (×10)

All limits apply per account. Creating more keys does not raise them; all your keys share the same limits. The embeddings, sparse embeddings, and rerank APIs share them too.

  • One request can batch up to 8 texts (100 documents for rerank) and still counts as a single request. When you batch long documents, you will reach TPM before RPM.
  • Per-minute limits refill continuously rather than resetting each minute. At 60 RPM, for example, one request comes back every second.
  • Tokens are deducted after each request by the actual usage (the response's usage). Rerank counts the query once per document. A request larger than your remaining tokens still goes through, but your balance goes negative and later requests get 429 until it refills.
  • The daily limit resets at midnight Korea time (KST).
  • If you allow input storage under the Data policy, per-minute limits double and the daily token limit goes up 10×; you can change this at any time in Dashboard → Settings. Your current limits and usage are shown in Dashboard → Usage.

Higher limits

If your research or product needs more, request higher limits. Your account's recent usage is attached, and we raise limits per account after review. For organization-wide use or dedicated capacity, contact us about enterprise use.

Response headers

Successful responses and rate-limit errors carry these headers.

HeaderDescription
x-ratelimit-limit-requestsRequests-per-minute limit
x-ratelimit-remaining-requestsRequests remaining right now
x-ratelimit-limit-tokensTokens-per-minute limit
x-ratelimit-remaining-tokensTokens remaining right now
retry-afterOn rate-limit errors, seconds to wait before retrying

Error format

Errors use the OpenAI format.

{
  "error": {
    "message": "Rate limit reached for requests per minute (60 RPM). Retry after 1s.",
    "type": "rate_limit_error",
    "param": null,
    "code": "rate_limit_exceeded"
  }
}
StatuscodeMeaningWhat to do
400nullInvalid parameter; param names the fieldFix the request
400context_length_exceededA text to embed is longer than 8,192 tokens (sparse embeddings and rerank truncate instead)Split the text and retry
401missing_api_keyNo Authorization headerAdd your key
401invalid_api_keyWrong or revoked keyCheck your keys in the dashboard
404model_not_foundUnknown model ID, or a model for another endpoint (the message names the right one)Check GET /models
410model_retiredThe model has been retiredMove to the replacement in the message (model lifecycle)
429rate_limit_exceededYou exceeded your limitsWait for retry-after, then retry
429overloadedThe server is temporarily busyRetry shortly
502worker_errorInternal error in the inference serverRetry shortly; if it persists, email kure.nlpai@gmail.com
503no_worker_available, worker_failed, api_unavailableInference servers are restarting or under maintenanceWait for retry-after, then retry
504timeoutInference timed outRetry with smaller input

Retries

429 and 5xx errors usually succeed on retry. Wait for retry-after when present; otherwise use exponential backoff. The OpenAI SDKs do this by default (max_retries, 2 by default).

client = OpenAI(
    base_url="https://kure.kullm.ai/api/v1",
    api_key=os.environ["KURE_API_KEY"],
    max_retries=5,
)

400, 401, and 404 will fail the same way again, so fix the request instead.