Rate limits
Limits exist to keep the Grove fast and fair for everyone. They are generous for interactive and production use, and every limited response tells you exactly how long to wait.
The limits
| Limit | Value | What happens when you hit it |
|---|---|---|
| Requests per minute | 600 per account | 429 with a Retry-After header |
| Concurrent requests | 10 in-flight per account | 429 with Retry-After: 2 |
| Output tokens | 32,768 per request | Your max_tokens is capped, the request still succeeds |
Notes on how these behave:
- The request limit is a continuously refilling budget, not a fixed window. You can burst up to 600 requests at once; capacity then refills at about ten requests per second. Steady traffic at or below 10 requests/second never hits it.
- Streaming responses count toward concurrency for their full duration. Ten long-running streams will occupy all ten slots until they finish.
- Limits apply per account, across all of your API keys. Multiple keys are encouraged for organization and safe rotation, but they share one budget: creating more keys does not add throughput.
- Limits may be adjusted over time (see the Terms of Use, Section 1). This page always shows the current values.
Coding plan concurrency
Coding plan keys have their own concurrency model: the parallel agent count on your tier card is how many requests can run at the same time on your plan key. It scales with tier: 3 agents on Basic, 5 on Pro, 6 on Elite, 7 on Ultra, 8 on Canopy. The per-account request budget above applies to plan keys as well.
Coding plan limits and the Flash floor
Plan usage has four parts, and every request runs at full speed:
- The 5-hour window. A window starts with your first request and lasts 5 hours. One window can use up to a fifth of your weekly allowance.
- The week. Your weekly allowance resets at the same day and time every week.
- The bank. Whatever you leave unused in a week moves into your bank at the weekly reset, up to ten days of it. Once a week's allowance is used, the bank keeps you going, and it also keeps a window open after the window's own share is spent.
- The month. Your plan's total for each billing period, renewing with your plan.
When a limit is reached, requests return a standard 429 with a Retry-After
header and a message that names the limit (window, week or month) and exactly
when it lifts, in UTC and as a relative time. SDKs and coding agents honor
Retry-After automatically, so a session resumes on its own. A 429 with
Retry-After: 5 and the words "concurrency wait" means requests already running
on your account are holding the rest of your allowance; one frees within
seconds. Nothing is ever cut off mid-response, and pacing never rewrites what
you send (plan keys do carry a short safety message ahead of your messages; see
Request parameters).
Every plan response carries the same four readouts as headers, so an agent can
plan around them: X-PGS-Window-Left, X-PGS-Window-Resets,
X-PGS-Week-Left, X-PGS-Week-Resets, X-PGS-Bank-Days,
X-PGS-Month-Left, X-PGS-Month-Renews and X-PGS-Limit (the limit
stopping you, or none). Percent and days only; times are ISO 8601 in UTC.
GET /v1/usage returns the same numbers as JSON.
Even with your allowance fully drawn down, Flash models keep answering on a
separate reserved lane, at a steady pace, a few requests at a time. Use
deepseek-v4.1-flash for this (the first one every 429 suggests) or the
new, lightning-fast deepseek-v4.1-flash-1017; glm-5.3-flash, mimo-v2.6-flash,
deepseek-v4-flash-0731 and deepseek-v4-flash ride the same lane. To have
walled requests served on a Flash model automatically, send the header
X-PGS-Floor-Fallback: auto (it works on every protocol: OpenAI, Anthropic,
Responses and Ollama). This is what makes messages near-endless: the Flash
floor keeps answering from its own allotment when a window fills up. Higher tiers get
bigger windows, deeper banks, and a faster Flash lane.
Taster keys are different. The $3.99 Taster plan (first month free)
includes an API key scoped to five Flash models, deepseek-v4.1-flash-1017,
deepseek-v4.1-flash, mimo-v2.6-flash, deepseek-v4-flash-0731
and glm-5.3-flash, drawing the tier's fixed allowance (about 18M+ Flash
tokens a month, shared with your app usage). Taster is a fixed allowance, not a windowed plan: when the
allowance is used up, requests return a quota error until it refills, and
the near-endless-messages behavior above applies to plans above $3.99. Requests
for any other model on a Taster key are declined with a tier error.
Two kinds of 429
Not every 429 means you sent too much. Check the message:
- "Rate limit reached for your account": you hit your account's request
or concurrency limit. These return instantly. Back off for
Retry-Afterseconds and continue. - A busy model: when a model is congested, we first ride it out for you
with an internal retry ladder (up to ~20 seconds). Only if the model stays
busy do you see a
429(with a longerRetry-After) or a503. These are not about your usage; honor the header and retry.
Full status-code reference and backoff recipes: Errors & retries.
Best practices
- Honor
Retry-After. It is present on every429and is the fastest safe retry time. The OpenAI SDKs do this automatically (max_retries). - Add jitter to retries in high-concurrency workers so they don't retry in lockstep.
- Keep a client-side concurrency cap (≤10) in batch jobs: a semaphore in
your worker pool is simpler than handling
429s. The concurrency limit, not the per-minute limit, is what a large fan-out hits first: a small stagger (even ~100ms between launches) keeps you comfortably under it. - For sustained batch workloads, pace to ~10 requests/second and the request limit disappears entirely.
Requesting higher limits
To request higher rate limits, please email support@pgsgroveinternal.com with your use case and expected volume. Higher rate limits are not guaranteed to be granted.