Rate Limits
Free to try, more with a key, governed by your plan.
Reads are open. The primitives that spend money are gated so a public endpoint cannot be abused. How they are gated depends on whether you send a key.
#The two paths
| Caller | How metered calls are gated |
|---|---|
| Anonymous (by IP) | A small hourly trial: 8 requests per hour per IP |
| With an API key | Your plan's included quantity per event type, per billing period |
Anonymous callers share one IP bucket across all metered primitives. When the bucket is
empty you get 429. Keyed callers do not hit the hourly IP limit; instead each metered call
runs a billing entitlement check against your plan. When the included quantity is used up and
overage is off, you get 402. See Billing & metering and
Errors.
#Which calls are metered
Metered (need a key or fall under the trial):
/v1/audit(audit_run)/v1/company,/v1/pricing,/v1/competitors,/v1/compare-companies,/v1/research(workflow_execution)/v1/find-tools(agent_discovery_check)
Open and never rate limited:
/v1/registry,/v1/profile/{slug},/v1/categories,/v1/categories/{slug}/v1/search,/v1/compare/health,/llms.txt,/openapi.json,/badge/{slug}.svg
#Sending your key
Shell
curl "https://api.stackresolve.dev/v1/company?domain=stripe.com" \
-H "x-api-key: $STACKRESOLVE_API_KEY"For MCP and CLI, set STACKRESOLVE_API_KEY in the environment (MCP clients send it as the
x-api-key header). See Authentication.
#Handling limits
- On
429(anonymous), get a free key to move off the IP trial, or back off and retry after the hour rolls over. - On
402(keyed), read theentitlementobject to seeusedversusincluded, then enable metered billing or wait for the next period. - Pass an
idempotency-keyheader on metered requests so a retry is not double-counted.
Note
Free reads (the registry, profiles, categories, search, compare, badges) are never
rate limited. Only the money-spending primitives are.