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

PlanPriceQueriesRequests/minConcurrent requestsOverage
Free$050 lifetime (not monthly)102Hard cap — no overage, upgrade to continue
Starter$49/mo500/mo6010$0.08 / query
Growth$99/mo1,200/mo30030$0.07 / query
Enterprise$499/mo7,000/mo1,000100$0.06 / query
Custom EnterpriseCustomNegotiated10,000500Negotiated per contract
Note: "Queries" covers both profile lookups and Ask Lumen Sieve questions against a single shared quota per plan — they aren't metered separately.

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):

429 response
json
{
  "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.

Tip: A rejected (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.