Submit a SERP task
const url = 'https://api.seo-checker.com.ua/v1/serp/tasks';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"keyword":"best running shoes","region":"us","device":"desktop","depth":1}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.seo-checker.com.ua/v1/serp/tasks \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "keyword": "best running shoes", "region": "us", "device": "desktop", "depth": 1 }'Queue a full organic SERP crawl for a keyword in a region on a device.
Returns 202 with a task_id and status: "queued". Poll
GET /serp/tasks/{id} until status is done or error.
Billing: the task cost (1 credit per keyword) is charged on create,
including cache hits (a fresh identical crawl is reused but still
billed). A terminal error is automatically refunded. Insufficient
balance returns 402 and no task is created.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Task type. Only serp_full (full organic SERP) is available today.
The search query.
Region code from GET /regions.
Number of result pages to crawl (10 results per page).
Examples
{ "keyword": "best running shoes", "region": "us", "device": "desktop", "depth": 1}Responses
Section titled “Responses”Task accepted and queued (or served immediately from cache as done).
object
Lifecycle: queued → running → done | error.
A cache hit is created directly as done.
Examples
{ "task_id": "58e6ea50-492b-494c-9767-f6f1396e9298", "status": "queued"}Headers
Section titled “Headers”Requests allowed per minute for this key.
Requests remaining in the current window.
Unix epoch second when the window resets.
Missing or invalid API key.
object
object
Stable machine-readable code
Examples
{ "error": { "code": "apikeys.missing", "message": "API key required" }}{ "error": { "code": "apikeys.invalid", "message": "API key is invalid or revoked" }}Not enough credits to run the task. No task is created.
object
object
Stable machine-readable code
Examples
{ "error": { "code": "payments.insufficient_balance", "message": "Insufficient credit balance" }}The request failed validation.
object
object
Stable machine-readable code
Examples
{ "error": { "code": "serpapi.region_unknown", "message": "Unknown region code" }}{ "error": { "code": "serpapi.device_invalid", "message": "device must be desktop", "mobile or tablet": null }}Per-key rate limit exceeded.
object
object
Stable machine-readable code
Examples
{ "error": { "code": "serpapi.rate_limited", "message": "Rate limit exceeded" }}Headers
Section titled “Headers”Seconds to wait before retrying (on 429).
Requests allowed per minute for this key.
Requests remaining in the current window.
Unix epoch second when the window resets.