Errors
HTTP status codes returned by the Mangools API and how to handle them.
Mangools API uses conventional HTTP response codes to indicate the success or failure of an API request.
- Codes in the
2xxrange indicate success. - Codes in the
4xxrange indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, etc.). - Codes in the
5xxrange indicate an error with Mangools's servers (these are rare).
| Error code | Description |
|---|---|
| 200 — OK | Everything worked as expected. |
| 400 — Bad Request | The request was unacceptable, often due to missing a required parameter. |
| 401 — Unauthorized | No valid API key provided. |
| 402 — Request Failed | The parameters were valid but the request failed. |
| 403 — Forbidden | The API key doesn't have permissions to perform the request. |
| 404 — Not Found | The requested resource doesn't exist. |
| 409 — Conflict | The request conflicts with another request (perhaps due to using the same idempotent key). |
| 429 — Too Many Requests | Either the burst limit or a quota pool was hit. Burst limit ("type": "RateLimit"): API-key clients get 3 requests per 30-second sliding window per account and per resource pool, so leave at least 11 seconds between requests to the same pool (the window is inclusive at its edge). The response carries retry_after (seconds, the length of the burst window) in the JSON body and a Retry-After header: wait that long, then retry once. Quota spent ("type": "CreditLimit"): no retry_after, waiting does not help, check GET /kwfinder/limits. See Rate limits. |
| 500, 502, 503, 504 — Server Errors | Something went wrong on Mangools's end. (These are rare.) |
Kinds of 429
A 429 can come from three places, and the bodies do not match. Rate limits has the numbers and a retry example.
- Burst limit — returned by the API, JSON
Errorbody with"type": "RateLimit", aretry_afterfield in seconds and aRetry-Afterheader. Waitretry_afterseconds before retrying. - Quota spent — returned by the API, JSON
Errorbody with"type": "CreditLimit"and noretry_after. Retrying does not help until the pool refills; checkGET /kwfinder/limits. - Gateway rate limit — 4 requests per second per client IP, applied by nginx before the request
reaches the application. The body is nginx's own HTML error page, so it is
text/htmlrather than JSON. A client that callsresponse.json()on every response will throw on it; branch on theContent-Typeheader, or on the status code, before parsing.