Getting started
Access tiers & limits
Free access covers threat lookups and feeds. Company plans add cases, Brand Shield, automation and much higher limits.
| Capability | No key | Free key | Starter | Pro | Enterprise |
|---|---|---|---|---|---|
| Price | Free | Free account | $99/mo | $269/mo | Custom |
| Threat API lookups | 20 / hour per IP | 1,000 / day · 60 / min | – / day | – / day | – / day |
| Threat feeds & change sync | 24 feed downloads / day | ||||
| Company API: read cases, findings, takedowns | – requests / day | – requests / day | – requests / day | ||
| Submit reports & manage watchlist via API | – | – | – | ||
| Brand Shield findings | – | – | – | ||
| Webhooks for case updates | – | – | – | ||
| SIEM export (CSV, CEF, JSON) | – | – | – | ||
| Key type | none | fp_live_… | fp_co_… | fp_co_… | fp_co_… |
Company plans add a burst limit of 60 requests per minute per key. Not sure yet? Request a 14-day demo with Pro features, or compare plans on the pricing page.
How limits are counted
- Daily limits reset at 00:00 UTC.
- Each domain in a
POST /v1/checkbatch counts as one lookup. - A page of change synchronization counts as one lookup; feed downloads have their own allowance.
- Company keys share one daily allowance per company for each API and allow 60 requests per minute per key.
GET /v1/statusshows today's usage.
Errors
Errors are JSON: {"error": "rate_limit", "message": "Quota exceeded"}. Branch on the HTTP status and the error code, not on the message.
| 400 | invalid_input, invalid_json | Fix the request; do not retry unchanged. |
| 401 | key_required, invalid_key | Send a valid key in X-API-Key. |
| 403 | insufficient_scope, forbidden | The key lacks the scope or your plan lacks the feature. |
| 404 | not_found | Unknown route or a resource that is not yours. |
| 409 | watchlist_limit, key_limit | A plan limit is reached. |
| 429 | rate_limit | Back off and retry after the window resets. |
| 5xx | internal_error | Retry with exponential backoff. |
