[{"data":1,"prerenderedAt":252},["ShallowReactive",2],{"docs-nav-titles":3,"page-docs_en-\u002Fguides\u002Frate-limits":52},{"en":4,"id":39},{"\u002Fauthentication":5,"\u002Fchangelog":6,"\u002Fguides\u002Fbilling":7,"\u002Fguides\u002Ferrors":8,"\u002Fguides\u002Fjson-output":9,"\u002Fguides\u002Frate-limits":10,"\u002Fguides\u002Freasoning":11,"\u002Fguides\u002Fstreaming":12,"\u002Fguides\u002Ftool-calling":13,"\u002Fguides\u002Ftop-up":14,"\u002F":15,"\u002Fintegrations\u002Faider":16,"\u002Fintegrations\u002Fclaude-code":17,"\u002Fintegrations\u002Fcline":18,"\u002Fintegrations\u002Fcontinue":19,"\u002Fintegrations\u002Fgoose":20,"\u002Fintegrations\u002Fhermes":21,"\u002Fintegrations":22,"\u002Fintegrations\u002Fkilo-code":23,"\u002Fintegrations\u002Flangchain":24,"\u002Fintegrations\u002Foh-my-pi":25,"\u002Fintegrations\u002Fopenai-sdk":26,"\u002Fintegrations\u002Fopenclaw":27,"\u002Fintegrations\u002Fopencode":28,"\u002Fintegrations\u002Fpi":29,"\u002Fintegrations\u002Fvercel-ai-sdk":30,"\u002Fintegrations\u002Fzed":31,"\u002Fmodels":32,"\u002Fquickstart":33,"\u002Freference\u002Fchat-completions":34,"\u002Freference":22,"\u002Freference\u002Fmessages":35,"\u002Freference\u002Fmodels":36,"\u002Freference\u002Fmodels-retrieve":37,"\u002Fsupport":38},"Authentication","Changelog","Billing","Errors & retries","JSON output","Rate limits","Reasoning content","Streaming","Tool calling","Topping up with QRIS","Introduction","Aider","Claude Code","Cline","Continue","Goose","Hermes Agent","Overview","Kilo Code","LangChain (Python)","Oh My Pi","OpenAI SDKs","OpenClaw","OpenCode","Pi","Vercel AI SDK","Zed","Models","Quickstart","Chat completions","Messages","List models","Retrieve a model","Support",{"\u002Fauthentication":40,"\u002Fchangelog":6,"\u002Fguides\u002Fbilling":7,"\u002Fguides\u002Ferrors":41,"\u002Fguides\u002Fjson-output":42,"\u002Fguides\u002Frate-limits":43,"\u002Fguides\u002Freasoning":44,"\u002Fguides\u002Fstreaming":12,"\u002Fguides\u002Ftool-calling":13,"\u002Fguides\u002Ftop-up":45,"\u002F":46,"\u002Fintegrations\u002Faider":16,"\u002Fintegrations\u002Fclaude-code":17,"\u002Fintegrations\u002Fcline":18,"\u002Fintegrations\u002Fcontinue":19,"\u002Fintegrations\u002Fgoose":20,"\u002Fintegrations\u002Fhermes":21,"\u002Fintegrations":47,"\u002Fintegrations\u002Fkilo-code":23,"\u002Fintegrations\u002Flangchain":24,"\u002Fintegrations\u002Foh-my-pi":25,"\u002Fintegrations\u002Fopenai-sdk":48,"\u002Fintegrations\u002Fopenclaw":27,"\u002Fintegrations\u002Fopencode":28,"\u002Fintegrations\u002Fpi":29,"\u002Fintegrations\u002Fvercel-ai-sdk":30,"\u002Fintegrations\u002Fzed":31,"\u002Fmodels":49,"\u002Fquickstart":33,"\u002Freference\u002Fchat-completions":34,"\u002Freference":47,"\u002Freference\u002Fmessages":35,"\u002Freference\u002Fmodels":50,"\u002Freference\u002Fmodels-retrieve":51,"\u002Fsupport":38},"Autentikasi","Error & retry","Output JSON","Rate limit","Konten reasoning","Isi saldo dengan QRIS","Pengantar","Ringkasan","OpenAI SDK","Model","Daftar model","Ambil satu model",{"id":53,"title":10,"body":54,"description":243,"extension":244,"eyebrow":245,"meta":246,"navTitle":245,"navigation":247,"path":248,"seo":249,"stem":250,"__hash__":251},"docs_en\u002Fguides\u002Frate-limits.md",{"type":55,"value":56,"toc":235},"minimark",[57,61,66,116,123,134,138,166,177,181,192,196,227],[58,59,60],"p",{},"Limits apply per API key. Two keys in the same organization have independent limits, so a busy batch job on one key does not slow down your production key.",[62,63,65],"h2",{"id":64},"default-limits","Default limits",[67,68,69,85],"table",{},[70,71,72],"thead",{},[73,74,75,79,82],"tr",{},[76,77,78],"th",{},"Limit",[76,80,81],{},"Default per key",[76,83,84],{},"Error when exceeded",[86,87,88,103],"tbody",{},[73,89,90,94,97],{},[91,92,93],"td",{},"Requests per minute",[91,95,96],{},"300",[91,98,99],{},[100,101,102],"code",{},"429 rate_limit_exceeded",[73,104,105,108,111],{},[91,106,107],{},"Concurrent requests (in flight at once)",[91,109,110],{},"16",[91,112,113],{},[100,114,115],{},"429 concurrency_limit_exceeded",[58,117,118,119,122],{},"Both responses carry a ",[100,120,121],{},"Retry-After"," header with the number of seconds to wait. A rejected request is not charged.",[124,125,132],"pre",{"className":126,"code":128,"filename":129,"language":130,"meta":131},[127],"language-text","HTTP\u002F1.1 429 Too Many Requests\nRetry-After: 3\nContent-Type: application\u002Fjson\n\n{\"error\":{\"message\":\"…\",\"type\":\"rate_limit_exceeded\",\"code\":\"concurrency_limit_exceeded\",\"param\":null}}\n","429 response","text","",[100,133,128],{"__ignoreMap":131},[62,135,137],{"id":136},"other-things-that-can-return-429","Other things that can return 429",[139,140,141,153],"ul",{},[142,143,144,148,149,152],"li",{},[145,146,147],"strong",{},"IP-level protection."," Very high request rates from a single IP address are rejected with ",[100,150,151],{},"429 ip_rate_limited",", independent of the key.",[142,154,155,158,159,162,163,165],{},[145,156,157],{},"The model provider."," If the provider rate-limits a request, its ",[100,160,161],{},"429"," and ",[100,164,121],{}," are forwarded to you unchanged.",[58,167,168,169,171,172,176],{},"In every case: wait for ",[100,170,121],{},", then retry. See ",[173,174,8],"a",{"href":175},"\u002Fguides\u002Ferrors#when-to-retry",".",[62,178,180],{"id":179},"your-balance-is-a-limit-too","Your balance is a limit too",[58,182,183,184,187,188,191],{},"Every request in flight holds part of your wallet balance until it finishes (see ",[173,185,7],{"href":186},"\u002Fguides\u002Fbilling#holds","). With a small balance, holds for running requests can use it up before you reach 16 concurrent requests; new requests then fail with ",[100,189,190],{},"402 insufficient_credit"," until earlier ones settle or you top up.",[62,193,195],{"id":194},"staying-under-the-limits","Staying under the limits",[139,197,198,204,210,221],{},[142,199,200,203],{},[145,201,202],{},"Bound your concurrency."," Use a worker pool or semaphore of at most 16 per key.",[142,205,206,209],{},[145,207,208],{},"Spread batch work over time"," rather than firing everything at once.",[142,211,212,215,216,220],{},[145,213,214],{},"Use one key per environment or workload",", so limits and ",[173,217,219],{"href":218},"\u002Fguides\u002Fbilling#key-budgets","budgets"," are isolated.",[142,222,223,226],{},[145,224,225],{},"Stream long answers."," Streaming does not change the limits, but it lets you show progress while a request holds its concurrency slot.",[58,228,229,230,234],{},"If the defaults don't fit your workload, email ",[173,231,233],{"href":232},"mailto:support@larasrouter.com","support@larasrouter.com"," with your expected traffic.",{"title":131,"searchDepth":236,"depth":236,"links":237},3,[238,240,241,242],{"id":64,"depth":239,"text":65},2,{"id":136,"depth":239,"text":137},{"id":179,"depth":239,"text":180},{"id":194,"depth":239,"text":195},"Each API key allows 300 requests per minute and 16 concurrent requests by default. Over either limit, you get a 429 with Retry-After.","md",null,{},true,"\u002Fguides\u002Frate-limits",{"title":10,"description":243},"guides\u002Frate-limits","XAQwNoS7alyQnEG8genshKVXFTm0nc6MguyIN7TY1zI",1793333617469]