| 400 | Bad Request / validation message | Request body failed schema validation (missing or invalid fields). | Fix the request payload using the endpoint reference. Check details for fields. | No |
| 400 | Invalid URL | The url field is missing, malformed, or uses an unsupported scheme. | Pass an absolute http(s):// URL. | No |
| 400 | THIRD_PARTY_DATA_UNSUPPORTED_URL | The URL belongs to a site that a third-party data provider serves, but the provider only serves a record’s own page (such as a profile page), not the sub-pages under it. The response has this value in code. | Scrape the record’s own page instead of a sub-page or listing under it. | No |
| 400 | THIRD_PARTY_DATA_UNSUPPORTED_OPTION | Only a third-party data provider may serve this URL (such as a LinkedIn profile), and the request sets an option the provider can’t honor: actions, profile, minAge, zeroDataRetention, lockdown, redactPII, or an unsupported format such as screenshot or branding. error names the option. The response has this value in code. | Send the request without that option. If your team’s policy enforces zero data retention, these URLs can’t be served. See Provider-routed URLs. | No |
| 401 | Unauthorized: Invalid token | API key is missing, malformed, or revoked. | Send Authorization: Bearer fc-... with a valid key from the dashboard. | No |
| 402 | Payment Required: Insufficient credits | Plan credits are exhausted or billing is not configured. | Turn on pay-as-you-go, or upgrade your plan. | No |
| 403 | Forbidden | Key lacks permission for this endpoint or feature. | Use a key with the required scope, or upgrade the plan that gates this feature. | No |
| 403 | SCRAPE_PROMPT_INJECTION_DETECTED | JSON mode with checkPromptInjection: true detected a prompt injection attempt in the scraped page content, so extraction was aborted. | Inspect the page content manually. If it is a false positive, retry without checkPromptInjection. See Prompt injection detection. | No |
| 403 | THIRD_PARTY_DATA_NOT_ENABLED | The third-party data provider for this URL is not enabled for your organization, for example because an org admin turned it off. The response has this value in code. | Ask an org admin to turn the provider on from its Alexandria page, or remove it from your enrichment providers. | After it is enabled |
| 403 | THIRD_PARTY_DATA_ENRICHMENT_NOT_ENABLED | The URL is a LinkedIn profile or company page, but enrichment is off for that kind of profile, or none of your saved enrichment providers can serve it. The response has this value in code, and error links to the enrichment settings. | Ask an org admin to turn on enrichment and choose providers in the enrichment settings. See Provider-routed URLs. | After setup |
| 403 | We apologize for the inconvenience but we do not support this site... / UNSUPPORTED_SITE | Firecrawl does not scrape this site, and no third-party data provider serves the URL. Some responses also have UNSUPPORTED_SITE in code. | Use a different source for this data. Enterprise customers can contact sales about the site. | No |
| 403 | THIRD_PARTY_DATA_TERMS_REQUIRED | An Alexandria provider needs your organization to accept its terms before the request can run. The provider did not run. The response has this value in code, and includes requiresAction.url. | Send requiresAction.url to an org admin, who reviews and accepts the terms there. Agents must not accept terms on their own. After acceptance, send the same request again. | After acceptance |
| 404 | Not Found | The job ID, resource, or endpoint path does not exist. | Verify the resource ID and endpoint URL. | No |
| 404 | THIRD_PARTY_DATA_NOT_FOUND | The URL is served by third-party data providers, and none of them has a record for it. With several enrichment providers, every one was tried. A provider with no record charges nothing. The response has this value in code. | Check the URL points to an existing profile or company page. Adding more enrichment providers can raise coverage. | No |
| 408 | Request Timeout | The page took longer than the request timeout to load. | Increase timeout, simplify actions, or use fastMode. | Yes, with backoff |
| 409 | Conflict | Resource is in a state that prevents the operation (e.g. already deleted). | Re-fetch state and reconcile before retrying. | No |
| 413 | Payload Too Large | Request body exceeded the maximum allowed size. | Reduce the payload (e.g. shorter schema, fewer URLs per batch). | No |
| 422 | Unprocessable Entity / extraction schema error | Schema is invalid JSON Schema, or the model could not produce a conforming result. | Validate the schema; loosen required fields; try a different model. | Sometimes |
| 429 | Rate limit exceeded | Too many requests for your plan’s per-minute limit. | Back off and retry after Retry-After seconds. See Rate Limits. | Yes, with backoff |
| 429 | Concurrency limit reached | Concurrent browser limit for your plan reached. | Wait for in-flight jobs to finish, lower concurrency, or upgrade your plan. | Yes, with backoff |
| 500 | Internal Server Error | Unhandled server-side failure. | Retry with exponential backoff. If it persists, contact support with the request ID. | Yes, with backoff |
| 502 | Bad Gateway | Upstream proxy or worker returned an invalid response. | Retry with backoff. | Yes, with backoff |
| 503 | Service Unavailable | Service temporarily unable to handle the request. | Retry with backoff. | Yes, with backoff |
| 504 | Gateway Timeout | Request exceeded the gateway’s timeout (typically long crawls). | Use the async crawl/batch endpoints and poll status instead. | Yes, with backoff |