API Status Codes
ScrapeRing processes scraping requests asynchronously. Creating a task returns its id right away; you then request the result with that id until the task is finished. Credits are charged only for successful tasks — if a task fails, its credits are returned to your balance.
HTTP status codes
Every API response has an HTTP status code. 200 means the request was accepted. Any other code means the request was not accepted: the task wasn't created or wasn't found.
| Code | Details | What to do |
|---|---|---|
| 200 | The request was accepted. Check the task status in the status field — see Task statuses | — |
| 400 | The request body or parameters are invalid | Fix the request and send it again |
| 401 | The API key is missing, invalid or disabled | Check the Authorization: Bearer YOUR_API_KEY header and the key in the dashboard |
| 402 | Not enough credits, or your credits have expired | Top up your balance or renew your plan |
| 403 | The API key has no access to this scraper | Allow the scraper for this key in the dashboard |
| 404 | The scraper or the task with this id was not found | Check the endpoint path and the task id |
| 409 | The task could not be created because of a conflicting request | Send the request again |
| 429 | Too many requests, or the key's daily or monthly limit is reached | Wait until the time in the X-RateLimit-Reset header and send the request again |
| 500 | An error on our side | Repeat the request later |
| 503 | The service is temporarily busy | Repeat the request after the number of seconds in the Retry-After header |
Error response body
If the request was not accepted, the response body contains an error field with a short description:
{
"error": "Insufficient credits"
}
For 400, the response also contains a details field that lists the rejected request fields:
{
"error": "Validation failed",
"details": {
"url": ["Invalid URL"]
}
}
Some errors also contain a code field. When the key has no access to the scraper, 403 returns API_KEY_SCOPE_DENIED and the missing scope:
{
"error": "this key has no access to scope \"url\"",
"code": "API_KEY_SCOPE_DENIED",
"scope": "url"
}
A busy service returns 503 with "code": "SERVICE_BUSY".
Task statuses
The result endpoint (GET /api/parsing/v1/result/{scraper}/{requestId}) returns the task status in the status field. The statuses are the same for every scraper.
| Status | Details |
|---|---|
queued | The task has been created and is waiting in the queue. The request that creates a task returns this status too |
parsing | The task is being processed |
ready | The task is finished. Whether it succeeded is shown in data — see below |
cancelled | The task was cancelled from the dashboard |
While the status is queued or parsing, repeat the request a few seconds later. ready and cancelled are final.
If a task gets no result within 3 hours, it is finished as failed: the status becomes ready, data.success is false and data.error is "Parsing request timed out after three hours". Its credits are returned to your balance.
Checking whether a task succeeded
ready means the task is finished, not that it succeeded. How a failed task looks depends on the scraper:
| Scraper | Task failed when | Results are in |
|---|---|---|
| URL Scraper | data.success is false, the reason is in data.error | data |
| Google SERP, Yandex SERP | data.error is present | data |
| Google News, Google Trends, MSN, Opera News, Galaxy Store Reviews | data.success is false, the reason is in data.error | data.data |
For the URL Scraper, data.error is a short error code such as SYSTEM_ERR or NOT_ENOUGH_HTML_ERR, and data.errorFull has the details when available. A failed task may still contain the page content that was loaded. For the other scrapers, a failed task has no data.data.
URL Scraper — failed task:
{
"status": "ready",
"requestId": "5cfce409-1a30-4181-88eb-75b995499cd0",
"data": {
"url": "https://nonexistent-domain.example",
"time": "0.77",
"content": "",
"success": false,
"error": "SYSTEM_ERR",
"errorFull": "unknown error: net::ERR_NAME_NOT_RESOLVED"
},
"respondedAt": "2026-01-01T00:00:03.240Z"
}
Google SERP, Yandex SERP — a task that timed out. Other failed SERP tasks have only data.error, without data.success:
{
"status": "ready",
"requestId": "abaf4ac3-d9e7-43f2-a414-e7d2ca9ff635",
"data": {
"success": false,
"error": "Parsing request timed out after three hours"
},
"respondedAt": "2026-01-01T00:00:03.240Z"
}
Google News, Google Trends, MSN, Opera News, Galaxy Store Reviews — failed task:
{
"status": "ready",
"requestId": "8f2d1c6e-4b7a-4e3f-9a51-2c0d7e6b9f14",
"data": {
"success": false,
"error": "[msn] HTTP 400"
},
"respondedAt": "2026-01-01T00:00:03.240Z"
}
If a request fails
- Repeat the request. A task can fail because of a temporary issue on the target site; a repeated request usually succeeds. Failed tasks are not charged.
- Check the parameters. If a request keeps failing, check the request body against the scraper's reference.
- Contact support. If nothing helps, write to support@scrapering.com and include the task
id.
Next steps
- Getting Started — make your first request
- Pricing — how credits are charged