Rate limits & plans
Rate limits & plans
Two independent limits apply to every request: a short-term rate limit (requests per minute) and a monthly (or lifetime, on Free) query quota. See Errors → 429 for what happens when either is hit.
Plans
| Plan | Price | Queries | Requests/min | Concurrent requests | Overage |
|---|---|---|---|---|---|
Free | $0 | 50 lifetime (not monthly) | 10 | 2 | Hard cap — no overage, upgrade to continue |
Starter | $49/mo | 500/mo | 60 | 10 | $0.08 / query |
Growth | $99/mo | 1,200/mo | 300 | 30 | $0.07 / query |
Enterprise | $499/mo | 7,000/mo | 1,000 | 100 | $0.06 / query |
Custom Enterprise | Custom | Negotiated | 10,000 | 500 | Negotiated per contract |
Free plan: lifetime, not monthly
Every other plan's quota resets at the start of each billing period. The Free plan is different: its 50 queries are a one-time allowance for the life of the account — once used, the account can't make further calls until it upgrades. There's no monthly reset.
How rate limiting works
Requests-per-minute is enforced per API key over a rolling one-minute window. When exceeded, you get a 429 with error.code = "RATE_LIMIT_EXCEEDED" and a Retry-After header telling you how many seconds to wait.
This is separate from your monthly/lifetime query quota: you can be well under quota and still get rate-limited if you burst too many requests in a short window, and vice versa — slow, steady traffic can exhaust your monthly quota without ever hitting the per-minute cap.
How concurrent-lookup limiting works
Separate from both limits above: the Concurrent requests column caps how many POST /v1/profiles/lookup calls your account can have actively resolving at the same time. Submitting past your plan's cap doesn't queue the extra lookup — it's rejected immediately with error.code = "CONCURRENT_LIMIT_EXCEEDED", and there's no Retry-After (unlike the per-minute limit, a slot frees up whenever any of your in-flight lookups finishes, not on a fixed schedule):
{
"error": {
"code": "CONCURRENT_LIMIT_EXCEEDED",
"message": "Too many lookups already in progress for this account (limit: 2). Wait for one to finish, or upgrade your plan for a higher concurrency cap.",
"request_id": "req_...",
"documentation_url": "https://docs.lumen.com/errors#concurrent_limit_exceeded"
}
}This is the mechanism behind Lumen Sieve's batch capability: instead of a separate batch submission endpoint, submit as many individual POST /v1/profiles/lookup calls as you want — your plan's concurrent-lookup cap governs how many actually run at once, and each returns its own businessId to poll independently.
429) attempt is free — it never counts against your monthly/ lifetime query quota. Retry once one of your in-flight lookups finishes.Checking your own usage
Call GET /v1/usage/summary to see your account's used/limit/remaining counts for the current period without waiting to hit a 429.
