Code | Name | Plain-English cause | Fix |
400 | Bad Request | Syntax error in your JSON (missing comma, wrong bracket) | Validate your request payload |
401 | Unauthorized | Missing or wrong API key, or wrong header name | Use |
403 | Forbidden | Valid key, but your plan doesn't include this feature | Check your plan on the pricing page |
404 | Not Found | Wrong base URL, or the resource ID doesn't exist/belong to your account | Double-check the URL and ID |
406 | Not Acceptable | Unsupported response format requested (V2 only) | Omit the |
409 | Conflict | Idempotency key conflict (V2 only) | Use a unique idempotency key per request |
413 | Content Too Large | Request body exceeds size limit | Trim input (AI Detector max: 100,000 chars) |
415 | Unsupported Media Type | Wrong | Set |
422 | Quota Exceeded | You've used up your plan's credits for this tool | Wait for billing reset or upgrade |
422 | Unprocessable Entity | Missing required parameter or wrong data type | Check the endpoint's required fields in the API docs |
429 | Rate Limit Exceeded | Too many requests per second/minute | Check |
500 | Internal Server Error | Server-side issue, or empty CE query that was never opened | Retry after a few minutes; if persistent, contact Support |
The URL you specified in the request is invalid and does not correspond to an API endpoint.
The specified API key is incorrect, missing, or your plan doesn't support making API requests.
Please remember that the header "Key" has to be explicitly named "API-KEY".
Your current plan doesn’t support API. Please check your current subscription plan in the app settings and compare it to available plans with API on our pricing page.
Audit and Content Editor:
This means you have reached the usage limit for that particular tool in your current billing period.
SERP Analyzer:
You exceeded your daily quota (100 queries/day by default). You can either wait or reach out to our Sales team to extend the limits with a custom Enterprise plan.
Your request contains a syntax error, for example, a missing comma.
Your request most likely doesn't contain the required parameters (such as missing keywords), or the query is malformed (a string was provided instead of an Array).
This means the query has no content stored. Most likely, it is an empty query that has never been visited via the app.
The ID you specified in the URL of your request is incorrect, or this ID does not belong to the account associated with that API key.
This means that the query did not complete all necessary calculations.
You can reference the 3rd column, "state," to see the state of each competitor crawl.
Similarly to regular queries:
"completed" - crawl went through successfully, present data is based on content we were served with (doesn't contain empty values, default value is "0")
"scheduled" - crawl is still processing (contains empty Strings)
"failed" - crawl finished unsuccessfully - most likely we were either blocked, or we timed out while trying to access that URL (contains empty Strings)
The ID you specified in the URL of your request is incorrect, or this ID does not belong to the account associated with that API key.
If you are sure that the ID is correct, then either:
This query is still processing (listed as "scheduled" by exports/csv/serp_analyzer endpoint)
or
We were not able to find any prominent phrases for that particular query, most likely due to a lack of sufficient written content within SERP competitors.
This simply means you’ve exceeded the rate limit. All endpoints have a default limit of 10 requests/sec, except for SERP batch: 10 requests/min. Wait and retry. If you’re consistently calling this, review your request frequency or contact Support.
Note that this is for v2 only. The response format you requested isn’t available. This usually means an Accept header was included with an unsupported value. Remove it or set it to application/json.
Mind that this is different from the SERP-specific 404 above. If you’re getting a 404 on a non-SERP endpoint, your base URL is likely wrong. Make sure you’re hitting:
v1: https://app.surferseo.com/api/v1/
v2: https://app.surferseo.com/api/v2/
Not api.surferseo.com or surferseo.com/api/… or any other variation.
Your request body exceeds the size limit. Most common on the AI Detector (max 100k characters) and Humanizer (minimum 128 characters, but very large inpts may be rejected). Trim your input and try again.
Your request is using an unsupported Content-Type header. All requests must use Content-Type: application/json.