Getting started

ESO Developer API

ESO's SEO, accessibility, performance and AI-search reports as a JSON API, paid with prepaid credits.

Base URL: http://developer.elitesiteoptimizer.com/api/v1/. Requests and responses are JSON; send Content-Type: application/json with a body. The trailing slash is optional on the Page and Crawl API paths; the account endpoints end with /.

  • Page API: one URL, one check: POST /page/<check>, or several at once with POST /page/audit. Fast checks answer in the request; slow ones return a job.
  • Crawl API: a whole website: POST /crawls crawls it and runs reports on every page, then you read pages, issues, broken links, reports, exports and diffs.
  • Account: balance, plan limits, usage, the credit statement and current prices.

Your first call

  1. Create an account and copy your API keys: a live key (eso_live_…) and a sandbox key (eso_test_…, free sample data).
  2. Pick a plan or buy credits on the pricing page.
  3. Send the request on the right with your key. Try it with the sandbox key first: nothing is charged.

Authentication

Send your key in the Authorization header as Bearer eso_live_YOUR_KEY (X-API-Key also works). A missing, invalid or revoked key, or a suspended account, answers 401 unauthorized.

KeyPrefixWhat it does
Liveeso_live_Runs the real reports and uses credits.
Sandboxeso_test_Realistic sample results for free; never runs an engine. Validation still runs. See Sandbox.

Scopes

A key can be limited to page (Page API and jobs), crawl (Crawl API) and account (account, usage, credit statement). A key with no scopes listed has all of them; a call outside the key's scopes answers 403 scope_denied.

Keep keys on your server, never in a browser or mobile app. Use one key per integration so you can revoke one without stopping the others.

Credits & pricing

Every paid call is priced in credits. Credits are reserved when a request starts and settled when it ends:

  • A check that succeeds is charged its price; one that fails is refunded in full. An audit is charged the checks that succeed.
  • A crawl reserves max_pages × (page price + each report's price) and is charged for the pages actually crawled; the rest is released.
  • Requests refused before they start (validation, blocked or unreachable site) cost nothing. Reading jobs, crawl results and account data is free.

Not enough credits answers 402 insufficient_credits with required and balance. Every response carries X-Credits-Remaining. Current prices are below, on the pricing page and at GET /pricing/.

CheckCredits / URLMode
seo2sync
site-audit3sync
schema2sync
source-code3sync
accessibility5async
accessibility-report5async
links3async
performance10async
ai-readiness8async
readability2sync
content-optimizer25async
ai-citation15async
rank5async
backlinks10async
topic-research10async
CrawlCredits / crawled page
Crawling the page1
site_audit report1
broken_links report1
page_index report1
schema report1
source_code report1
readability report1
accessibility report3
performance report10

Errors

Errors use the HTTP status and always the same body: {"error": {"code", "message", "request_id", …details}}. Branch on code, not on message. Details depend on the error: param for a bad parameter, required / balance for credits, retry_after for limits, crawler_ips when a site blocks the crawler. Quote request_id (also the X-Request-Id header) to support.

StatusCodesMeaning
400invalid_request invalid_json invalid_bodyThe body is not valid JSON or has the wrong shape.
400missing_parameter unknown_parameter invalid_parameterFix the parameter named in param (see GET /checks).
400url_required invalid_url host_not_found invalid_webhook_urlThe url / webhook_url is missing or not a valid public URL.
400unknown_checkNo such check (also 404 on POST /page/<check>).
400max_pages_exceeded invalid_max_pages robots_required invalid_reportCrawl settings outside your plan or not valid.
400page_unreachable site_unreachable redirects_off_site auth_requiredThe page / site could not be loaded (crawl: send http_auth). Not charged.
400invalid_cursor invalid_date invalid_issue_type invalid_diffA query parameter is not valid.
401unauthorizedMissing, invalid or revoked key, or a suspended account.
402insufficient_creditsNot enough credits; required and balance are included.
403scope_deniedThe key lacks the scope of this endpoint.
403host_not_public domain_not_allowedPrivate address or blocked domain.
404not_found job_not_found crawl_not_found report_not_requested unknown_reportNo such object for this key's mode (live / test).
409crawl_blocked auth_requiredThe site blocks ESO's crawler or asks for HTTP authentication. Not charged.
409crawl_in_progressThe website is already being crawled: retry when it finishes.
409crawl_finished crawl_not_finishedThe crawl is not in a state allowing this (cancel / export / diff).
410crawl_expiredThe crawl's results were deleted (plan retention).
422check_failed empty_resultThe check produced no usable data. Refunded.
429rate_limited daily_limit_reached too_many_jobs too_many_crawls daily_crawl_limitA plan limit: wait Retry-After seconds.
500internal_errorA problem on ESO's side: retry, quote request_id.
502engine_errorThe report engine failed. Refunded.
503job_start_failed crawl_start_failedThe job / crawl could not be queued. Not charged.

Rate limits

Your plan sets the requests per minute and per rolling 24 hours, shared by all keys of the account. Past them the API answers 429 rate_limited (per minute) or 429 daily_limit_reached with a Retry-After header in seconds.

HeaderMeaning
X-RateLimit-LimitRequests allowed per minute.
X-RateLimit-RemainingRequests left in the current minute.
Retry-AfterOn 429: seconds to wait before retrying.
X-Request-IdId of the call.
X-Credits-RemainingCredit balance after the call.

Work running in the background has its own limits: async jobs queued or running at once (429 too_many_jobs), crawls running at once (429 too_many_crawls) and crawls started per 24 hours (429 daily_crawl_limit). One crawl of a website runs at a time across all partners (409 crawl_in_progress). GET /account/ returns your limits.

Idempotency

Send Idempotency-Key: <unique string> (up to 100 characters) on a POST to retry it safely after a timeout or a dropped connection. The same key on the same endpoint within 24 hours returns the first response again, with the header Idempotent-Replayed: true: nothing runs or is charged twice.

Use a value tied to your own operation (an order id, a UUID per task); don't reuse a key for a different request.

Pagination

Lists answer {"object": "list", "data": [...], "has_more", ...}, newest or first rows first. Ask for the next page until has_more is false:

EndpointsNext pagelimit
Crawls and crawl results (pages, issues, links, reports, diff)cursor=<next_cursor> (opaque)1–500
Jobsbefore=<next_before> (a job id)1–100, default 20
Credit transactionsbefore=<next_before> (a transaction id)1–200, default 50

Webhooks

Give a webhook_url with an async request (or set a default webhook URL in your account) and ESO POSTs the final object when the work ends, so you don't have to poll.

Eventdata
job.completed, job.failedThe job, with its result or error.
crawl.completed, crawl.failed, crawl.blockedThe crawl. A partial crawl sends crawl.completed.

The body is {"id", "event", "created", "data"}. Answer with a 2xx within 10 seconds; otherwise ESO retries after 30 s and 120 s. Redirects are not followed.

Verify the signature

Each delivery is signed with your webhook secret (shown in your account): ESO-Signature: t=<unix time>,v1=<hex>, where v1 is the HMAC-SHA256 of <t>.<raw body>. Compute it over the raw body before parsing the JSON, compare in constant time and reject old timestamps.

Sandbox

Sandbox keys (eso_test_…) return realistic sample data in the exact shape of live results, for free, so you can build and test an integration without credits:

  • No engine runs and the target site is never contacted; parameters and URLs are still validated and rate limits apply.
  • Async checks return a job that is already completed; crawls complete at once on a sample site, and two sandbox crawls of the same site differ a little, to try the diff.
  • Sandbox and live objects are separate: a sandbox key only sees sandbox jobs and crawls. Responses carry "mode": "test" and credits_charged: 0.
Page API

On-page SEO

POST /api/v1/page/seo

On-page SEO: title, meta, headings, canonical, images, links

Credits 2 credits per URL Sync Sync: 200 with the result ("wait": false returns a job)

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.page_urlstringThe page checked.
result.canonical_urlstringCanonical URL declared by the page.
result.meta_descriptionstringMeta description text.
result.h1_countintegerNumber of H1 headings.
result.h1_tagsarrayText of each H1.
result.imagesarrayImages of the page: img_url, alt.
result.missing_alt_countintegerImages without alt text.
result.missing_alt_imagesarrayURLs of the images without alt text.
result.paginationobjectrel=prev / rel=next URLs.
result.hreflangarrayhreflang alternates of the page.
result.checksobjecttrue / false of each on-page test: missing title, description, canonical, H1, duplicates, noindex …
result.issuesarrayThe failed checks, as a list.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error401unauthorized403scope_denied429rate_limited

Site audit

POST /api/v1/page/site-audit

Site audit issues of the page

Credits 3 credits per URL Sync Sync: 200 with the result ("wait": false returns a job)

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.health_scoreintegerSite audit health score, 0 to 100.
result.total_issuesintegerNumber of issues found.
result.by_priorityobjectIssues per priority: high, medium, low.
result.issuesarrayEach issue: issue, label, priority, count.
result.site_metricsobjectPage counters used by the audit.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error401unauthorized403scope_denied429rate_limited

Schema

POST /api/v1/page/schema

Structured data found, errors and missing properties

Credits 2 credits per URL Sync Sync: 200 with the result ("wait": false returns a job)

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.error_countintegerStructured data errors (missing required properties).
result.warning_countintegerWarnings (missing recommended properties).
result.itemsarrayEach structured data item: type, missing_required, missing_recommended, properties.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error401unauthorized403scope_denied429rate_limited

Source code

POST /api/v1/page/source-code

HTML validation errors and warnings

Credits 3 credits per URL Sync Sync: 200 with the result ("wait": false returns a job)

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.errorsintegerHTML validation errors.
result.warningsintegerValidation warnings.
result.fatal_errorsintegerFatal errors (the document could not be parsed).
result.infosintegerInformational messages.
result.issuesarrayEach message: type, message, location, snippet.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error401unauthorized403scope_denied429rate_limited

Accessibility score

POST /api/v1/page/accessibility

Accessibility score and WCAG issues (axe)

Credits 5 credits per URL Async Async: 202 with a job, result by webhook or GET /jobs/<id>

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
audit_typeoptional string Which axe rules to list: the failed ones or the passed ones.
Default: "failed"
Allowed: failed, passed
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Async checks answer with a job; this page_check object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.scoreintegerAccessibility score (axe), 0 to 100.
result.passed_rulesintegeraxe rules passed.
result.failed_rulesintegeraxe rules failed.
result.audit_typestringfailed or passed: which rules are listed.
result.rulesarrayEach rule: rule, impact, description, help, count, elements (html, message).

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error429too_many_jobs503job_start_failed401unauthorized403scope_denied429rate_limited

Accessibility report

POST /api/v1/page/accessibility-report

Accessibility report by section

Credits 5 credits per URL Async Async: 202 with a job, result by webhook or GET /jobs/<id>

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Async checks answer with a job; this page_check object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.scoreintegerAccessibility score, 0 to 100.
result.summaryobjectRules passed, failed, with warnings and not applicable.
result.sectionsarrayRules by section: title, requirement, status, element counts and failed examples.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error429too_many_jobs503job_start_failed401unauthorized403scope_denied429rate_limited

Performance

POST /api/v1/page/performance

Lighthouse performance and Core Web Vitals

Credits 10 credits per URL Async Async: 202 with a job, result by webhook or GET /jobs/<id>

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Async checks answer with a job; this page_check object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.scoreintegerLighthouse performance score, 0 to 100.
result.summaryobjectMetrics per status: good, needs_improvement, poor, info.
result.metricsarrayEach metric (LCP, FCP, TBT, CLS, TTFB …): metric, title, status, value, message.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error429too_many_jobs503job_start_failed401unauthorized403scope_denied429rate_limited

AI readiness

POST /api/v1/page/ai-readiness

AI readiness score by section

Credits 8 credits per URL Async Async: 202 with a job, result by webhook or GET /jobs/<id>

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Async checks answer with a job; this page_check object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.scoreintegerAI readiness score, 0 to 100.
result.sectionsobjectcrawlability, semantic_structure, content_quality, structured_data, user_experience, authority_context: status and checks.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error429too_many_jobs503job_start_failed401unauthorized403scope_denied429rate_limited

Readability

POST /api/v1/page/readability

Readability analysis

Credits 2 credits per URL Sync Sync: 200 with the result ("wait": false returns a job)

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.scoreintegerReadability score, 0 to 100.
result.summaryobjectNumber of audits passed, okay and failed.
result.auditsarrayEach audit: check, label, status, value, detail.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error401unauthorized403scope_denied429rate_limited

AI content optimizer

POST /api/v1/page/content-optimizer

AI Content Optimizer: readability, keywords, tone, AI rewrites

Credits 25 credits per URL Async Async: 202 with a job, result by webhook or GET /jobs/<id>

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
locationoptional string Country / region name for search data, e.g. "United States", "United Kingdom".
Default: "United States"
Max length: 100
ai_suggestionsoptional boolean Generate AI rewrites of low-readability elements.
Default: true
Max length: 200
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Async checks answer with a job; this page_check object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.overallobjectReadability, AI readability and tone scores with their status.
result.readabilityobjectReadability of each element, with an AI rewrite (ai_suggestion) of the hard ones.
result.keywordsobjectKeywords found and new keyword suggestions with search volume.
result.toneobjectTone of each element and the overall tone score.
result.quality_matrixarrayReadability and tone of each element side by side.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits409crawl_blocked400auth_required400page_unreachable422check_failed422empty_result502engine_error429too_many_jobs503job_start_failed401unauthorized403scope_denied429rate_limited

AI citation

POST /api/v1/page/ai-citation

AI citation check across AI assistants

Credits 15 credits per URL Async Async: 202 with a job, result by webhook or GET /jobs/<id>

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
queryrequired string The question asked to the AI assistants, e.g. "best project management tool".
Max length: 500
brand_nameoptional string Brand to look for in the answers (default: from the domain name).
Max length: 100
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Async checks answer with a job; this page_check object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.querystringThe question asked.
result.brand_namestringBrand looked for.
result.citation_rateintegerShare of the assistants citing the site, in %.
result.cited_byarrayAssistants that cite the site.
result.mentioned_byarrayAssistants that mention the brand.
result.answersarrayEach assistant's answer: cited, rank_position, cited_urls, mentions, sentiment, competitors.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits422check_failed422empty_result502engine_error429too_many_jobs503job_start_failed401unauthorized403scope_denied429rate_limited

Rank checker

POST /api/v1/page/rank

Google ranking of keywords for the URL

Credits 5 credits per URL Async Async: 202 with a job, result by webhook or GET /jobs/<id>

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
keywordrequired string Keyword to search.
Max length: 200
search_engineoptional string Search engine.
Default: "google"
Allowed: google, bing
locationoptional string Country / region name for search data, e.g. "United States", "United Kingdom".
Default: "United States"
Max length: 100
stateoptional string State / region inside the location (optional).
Max length: 100
cityoptional string City inside the location (optional).
Max length: 100
deviceoptional string Device of the search.
Default: "desktop"
Allowed: desktop, mobile, ios, android
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Async checks answer with a job; this page_check object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.keywordstringKeyword searched.
result.search_enginestringgoogle or bing.
result.locationstringCountry / region of the search.
result.statestring | nullState / region, when given.
result.citystring | nullCity, when given.
result.devicestringDevice of the search.
result.rankedbooleanThe URL is in the results checked.
result.positioninteger | nullPosition of the URL, null when not ranked.
result.ranking_urlstringThe URL looked for.
result.results_checkedintegerNumber of results checked.
result.search_volumeobjectAverage monthly searches and competition of the keyword.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits422check_failed422empty_result502engine_error429too_many_jobs503job_start_failed401unauthorized403scope_denied429rate_limited

Topic research

POST /api/v1/page/topic-research

Topic research for a keyword

Credits 10 credits per URL Async Async: 202 with a job, result by webhook or GET /jobs/<id>

Request body (JSON)

Field nameTypeDescription
urloptional string Page to check (http/https; the scheme defaults to https).
Max length: 2000
keywordrequired string Root keyword to research.
Max length: 200
locationoptional string Country / region name for search data, e.g. "United States", "United Kingdom".
Default: "United States"
Max length: 100
webhook_urloptional string URL notified when the job ends (job.completed / job.failed); default: the account's webhook URL.
Max length: 500
waitoptional boolean Sync checks: false returns a job at once instead of waiting for the result. Async checks always return a job.
Default: true
Max length: 200

Response fields

Async checks answer with a job; this page_check object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_check.
checkstringCheck slug.
urlstringURL the request was made for.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
resultobjectThe check's result; its fields are listed below.
result.keywordstringRoot keyword.
result.locationstringCountry / region of the search data.
result.serp_urlsarrayTop-ranking pages analyzed.
result.pages_analyzedintegerNumber of pages analyzed.
result.competitorsobjectKeywords, topics and questions found on the competing pages.
result.ai_strategyobjectAI content strategy: intent, opportunity keywords, topic clusters, content ideas, questions.

Errors

400invalid_request400missing_parameter400unknown_parameter400invalid_url402insufficient_credits422check_failed422empty_result502engine_error429too_many_jobs503job_start_failed401unauthorized403scope_denied429rate_limited

Audit: several checks

POST /api/v1/page/audit

Several checks of one URL in one call. Results come back together, keyed by check.

Credits Sum of the checks' credits; checks that fail are refunded Sync or async Sync when every check is sync; a job (202) when any check is async or "wait": false

Request body (JSON)

Field nameTypeDescription
urlrequired string Page to check (http/https; the scheme defaults to https).
Max length: 2000
checksrequired array Check slugs to run, each once.
Allowed: seo, site-audit, schema, source-code, accessibility, accessibility-report, links, performance, ai-readiness, readability, content-optimizer, ai-citation, rank, backlinks, topic-research
Max items: 15
optionsoptional object Parameters per check: {"<check>": {params}}, e.g. {"rank": {"keyword": "trail running shoes"}}. Only for checks listed in checks.
webhook_urloptional string URL notified when the job ends (job.completed / job.failed).
Max length: 500
waitoptional boolean false returns a job at once even when every check is sync.
Default: true

Response fields

As a job, the page_audit object is the job's result once it completes.

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways page_audit.
urlstringURL the request was made for.
checksarrayThe checks run, in order.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_chargedintegerSum of the credits of the checks that succeeded.
created_atstringWhen it was created (ISO 8601, UTC).
resultsobject{"<check>": result} of each check that succeeded.
errorsobject{"<check>": {code, message}} of each check that failed (refunded).

Errors

400invalid_request400unknown_check400unknown_parameter402insufficient_credits409crawl_blocked400page_unreachable422check_failed429too_many_jobs401unauthorized403scope_denied429rate_limited

Get a job

GET /api/v1/jobs/{job_id}

Status of an async check or audit, with its result once completed (until the plan's result retention ends). Poll every few seconds, or use a webhook.

Credits Free Sync answered in the request

Path parameters

Field nameTypeDescription
job_idrequired string Id of the job (job_…).

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways job.
checkstringCheck slug, or audit.
urlstringURL the request was made for.
paramsobjectThe check parameters, as validated, with their defaults.
statusstringqueued, running, completed or failed.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
credits_reservedintegerCredits held when it started; the unused part is released when it ends.
credits_chargedintegerCredits charged: 0 when it failed (refunded) and for sandbox keys.
created_atstringWhen it was created (ISO 8601, UTC).
started_atstring | nullWhen the work started.
completed_atstring | nullWhen it ended.
expires_atstring | nullWhen the result is deleted (plan's result retention).
resultobjectOnce completed: the page_check (or page_audit) object, until the result expires.
result_expiredbooleanOnce completed: true when the result was deleted after the retention period.

Errors

404job_not_found401unauthorized403scope_denied429rate_limited

List jobs

GET /api/v1/jobs

The jobs of the key's mode (live or sandbox), newest first.

Credits Free Sync answered in the request

Query parameters

Field nameTypeDescription
statusoptional string Only jobs in this status.
Allowed: queued, running, completed, failed
checkoptional string Only jobs of this check (or audit).
Allowed: seo, site-audit, schema, source-code, accessibility, accessibility-report, links, performance, ai-readiness, readability, content-optimizer, ai-citation, rank, backlinks, topic-research, audit
limitoptional integer Jobs per page.
Default: 20
Range: 1 to 100
beforeoptional string next_before of the previous page (a job id).

Response fields

Field nameTypeDescription
objectstringAlways list.
dataarrayJob objects, newest first.
has_morebooleantrue when another page follows.
next_beforestringPass it as before to get the next page; null on the last page.

Errors

400invalid_request400unknown_check400invalid_cursor401unauthorized403scope_denied429rate_limited

Checks catalog

GET /api/v1/checks

Every check with its description, current credits, sync / async mode and parameters, plus the audit entry. Build forms or validate requests from it. The sample shows two entries.

Credits Free Sync answered in the request

Request parameters

None.

Response fields

Field nameTypeDescription
objectstringAlways list.
dataarrayOne entry per check: check, description, credits, mode, endpoint, fetches_page, params (name, type, required, description, default, enum, limits); plus the audit entry.
data[].checkstringCheck slug.
data[].descriptionstring
data[].creditsintegerbalance: credits available now.
data[].modestringlive (real run, credits) or test (sandbox key, sample data, free).
data[].endpointstring
data[].fetches_pageboolean
data[].paramsarrayThe check parameters, as validated, with their defaults.

Errors

401unauthorized429rate_limited

Crawl API

Start a crawl

POST /api/v1/crawls

Crawls a whole website and runs the chosen reports on every page. Always asynchronous: poll GET /crawls/{crawl_id} or wait for the crawl.completed webhook. Only one crawl of a website runs at a time (across all partners).

Credits Reserves max_pages × (1 per page + each report's price per page: site_audit 1, broken_links 1, page_index 1, schema 1, source_code 1, readability 1, accessibility 3, performance 10); charged for the pages actually crawled, the rest released Async Async: 202 with the crawl (queued); sandbox crawls complete at once

Request body (JSON)

Field nameTypeDescription
urlrequired string Start page of the website (http/https).
Max length: 255
max_pagesrequired integer Pages to crawl at most; up to your plan's max_pages_per_crawl.
Minimum: 1
max_depthoptional integer Clicks from the start page (1 = its links). Default: no limit.
Range: 1 to 100
reportsoptional array Reports to run on the crawled pages.
Default: []
Allowed: site_audit, broken_links, page_index, schema, source_code, readability, accessibility, performance
respect_robotsoptional boolean Follow robots.txt. false only on plans allowing it (else robots_required).
Default: true
include_subdomainsoptional boolean Also crawl subdomains of the host.
Default: false
include_patternsoptional array Only crawl paths matching these patterns, e.g. ["/blog/*"].
Max items: 20
Max length: 200
exclude_patternsoptional array Skip paths matching these patterns, e.g. ["*?sort=*"].
Max items: 20
Max length: 200
js_renderingoptional boolean Render pages with a browser (JavaScript sites).
Default: false
http_authoptional object {"username", "password"} of a site behind HTTP authentication (staging). Dropped when the crawl ends.
webhook_urloptional string URL notified when the crawl ends (crawl.completed / crawl.failed / crawl.blocked); default: the account's webhook URL.

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways crawl.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
urlstringStart URL of the crawl (after redirects within the site).
hoststringWebsite crawled (without www.).
statusstringqueued, crawling, analyzing, then completed, partial, failed, blocked or cancelled.
settingsobjectThe crawl settings as validated (http_auth: true when credentials were given).
progressobjectpages_found, pages_crawled, max_pages and crawl_percent.
credits_reservedintegermax_pages × (page price + each report's price), held at the start.
credits_chargedintegerFinal charge: pages crawled × (page price + completed reports); set when it ends.
errorobject | null{code, message} when it failed, else null.
previous_crawl_idstring | nullThe previous crawl of the same site, to diff against.
webhook_urlstring | nullURL notified when the crawl ends.
created_atstringWhen it was created (ISO 8601, UTC).
started_atstring | nullWhen the work started.
completed_atstring | nullWhen it ended.
expires_atstring | nullWhen the result is deleted (plan's result retention).
data_expiredbooleantrue once the results were deleted (plan retention): result endpoints answer 410.
reportsarrayEach report: {name, status (queued, running, completed, failed, skipped), url}.
linksobjectURLs of the result endpoints of this crawl.

Errors

400invalid_request400invalid_max_pages400max_pages_exceeded400invalid_report400robots_required400invalid_url400site_unreachable400auth_required400redirects_off_site409crawl_blocked409crawl_in_progress402insufficient_credits429too_many_crawls429daily_crawl_limit503crawl_start_failed401unauthorized403scope_denied429rate_limited

List crawls

GET /api/v1/crawls

The crawls of the key's mode (live or sandbox), newest first.

Credits Free Sync answered in the request

Query parameters

Field nameTypeDescription
statusoptional string Only crawls in this status.
Allowed: queued, crawling, analyzing, completed, partial, failed, blocked, cancelled
hostoptional string Only crawls of this website (without www.).
limitoptional integer Crawls per page.
Default: 50
Range: 1 to 500
cursoroptional string next_cursor of the previous page.

Response fields

Field nameTypeDescription
objectstringAlways list.
dataarrayCrawl objects, newest first (reports as a list of names).
has_morebooleantrue when another page follows.
next_cursorstring | nullPass it as cursor to get the next page; null on the last page.

Errors

400invalid_request400invalid_cursor401unauthorized403scope_denied429rate_limited

Get a crawl

GET /api/v1/crawls/{crawl_id}

Status, progress and the status of each report, with links to the result endpoints.

Credits Free Sync answered in the request

Path parameters

Field nameTypeDescription
crawl_idrequired string Id of the crawl (crl_…).

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways crawl.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
urlstringStart URL of the crawl (after redirects within the site).
hoststringWebsite crawled (without www.).
statusstringqueued, crawling, analyzing, then completed, partial, failed, blocked or cancelled.
settingsobjectThe crawl settings as validated (http_auth: true when credentials were given).
progressobjectpages_found, pages_crawled, max_pages and crawl_percent.
credits_reservedintegermax_pages × (page price + each report's price), held at the start.
credits_chargedintegerFinal charge: pages crawled × (page price + completed reports); set when it ends.
errorobject | null{code, message} when it failed, else null.
previous_crawl_idstring | nullThe previous crawl of the same site, to diff against.
webhook_urlstring | nullURL notified when the crawl ends.
created_atstringWhen it was created (ISO 8601, UTC).
started_atstring | nullWhen the work started.
completed_atstring | nullWhen it ended.
expires_atstring | nullWhen the result is deleted (plan's result retention).
data_expiredbooleantrue once the results were deleted (plan retention): result endpoints answer 410.
reportsarrayEach report: {name, status (queued, running, completed, failed, skipped), url}.
linksobjectURLs of the result endpoints of this crawl.

Errors

404crawl_not_found401unauthorized403scope_denied429rate_limited

Cancel a crawl

DELETE /api/v1/crawls/{crawl_id}

Stops a running crawl. The pages crawled so far (and the reports that finished) are charged; the rest of the reservation is released. Sandbox crawls are already complete.

Credits Free; unused credits refunded Sync answered in the request

Path parameters

Field nameTypeDescription
crawl_idrequired string Id of the crawl (crl_…).

Response fields

Field nameTypeDescription
idstringUnique id of the object.
objectstringAlways crawl.
modestringlive (real run, credits) or test (sandbox key, sample data, free).
urlstringStart URL of the crawl (after redirects within the site).
hoststringWebsite crawled (without www.).
statusstringqueued, crawling, analyzing, then completed, partial, failed, blocked or cancelled.
settingsobjectThe crawl settings as validated (http_auth: true when credentials were given).
progressobjectpages_found, pages_crawled, max_pages and crawl_percent.
credits_reservedintegermax_pages × (page price + each report's price), held at the start.
credits_chargedintegerFinal charge: pages crawled × (page price + completed reports); set when it ends.
errorobject | null{code, message} when it failed, else null.
previous_crawl_idstring | nullThe previous crawl of the same site, to diff against.
webhook_urlstring | nullURL notified when the crawl ends.
created_atstringWhen it was created (ISO 8601, UTC).
started_atstring | nullWhen the work started.
completed_atstring | nullWhen it ended.
expires_atstring | nullWhen the result is deleted (plan's result retention).
data_expiredbooleantrue once the results were deleted (plan retention): result endpoints answer 410.
reportsarrayEach report: {name, status (queued, running, completed, failed, skipped), url}.
linksobjectURLs of the result endpoints of this crawl.

Errors

404crawl_not_found409crawl_finished401unauthorized403scope_denied429rate_limited

Crawled pages

GET /api/v1/crawls/{crawl_id}/pages

Every page crawled: status code, title, depth, load time and indexability.

Credits Free Sync answered in the request

Path parameters

Field nameTypeDescription
crawl_idrequired string Id of the crawl (crl_…).

Query parameters

Field nameTypeDescription
status_codeoptional string A status code (404) or class (4xx).
limitoptional integer Rows per page.
Default: 100
Range: 1 to 500
cursoroptional string next_cursor of the previous page.

Response fields

Field nameTypeDescription
objectstringAlways list.
dataarrayThe rows of this page of results.
data[].urlstringURL the request was made for.
data[].status_codeintegerHTTP status code (0: unreachable).
data[].titlestringPage title.
data[].depthintegerClicks from the start page.
data[].load_time_msintegerLoad time in milliseconds.
data[].content_typestringContent-Type of the response.
data[].indexablebooleanWhether search engines can index the page.
data[].indexability_reasonstring | nullWhy the page is not indexable.
data[].noindexbooleanThe page has a noindex robots directive.
data[].nofollowbooleanThe page has a nofollow robots directive.
data[].robots_blockedbooleanrobots.txt blocks the page.
data[].canonical_urlstring | nullCanonical URL of the page.
has_morebooleantrue when another page follows.
next_cursorstring | nullPass it as cursor to get the next page; null on the last page.

Errors

404crawl_not_found410crawl_expired400invalid_cursor401unauthorized403scope_denied429rate_limited

Site audit issues

GET /api/v1/crawls/{crawl_id}/issues

Site audit issue counts per page (pages with at least one issue). Needs the site_audit report.

Credits Free Sync answered in the request

Path parameters

Field nameTypeDescription
crawl_idrequired string Id of the crawl (crl_…).

Query parameters

Field nameTypeDescription
typeoptional string Only pages with this issue.
Allowed: missing_titles, duplicate_titles, missing_descriptions, duplicate_descriptions, missing_h1_tags, multiple_h1_tags, duplicate_h1_tags, missing_alt_tags, missing_canonical, mismatch_canonical, hreflang, broken_links_4xx_link, server_error_5xx_link, no_index_robot
limitoptional integer Rows per page.
Default: 100
Range: 1 to 500
cursoroptional string next_cursor of the previous page.

Response fields

Field nameTypeDescription
objectstringAlways list.
dataarrayThe rows of this page of results.
data[].urlstringURL the request was made for.
data[].issuesobjectCount of each site audit issue on the page: missing_titles, duplicate_titles, missing_descriptions, duplicate_descriptions, missing_h1_tags, multiple_h1_tags, duplicate_h1_tags, missing_alt_tags, missing_canonical, mismatch_canonical, hreflang, broken_links_4xx_link, server_error_5xx_link.
data[].no_index_robotbooleanThe page is blocked from indexing.
has_morebooleantrue when another page follows.
next_cursorstring | nullPass it as cursor to get the next page; null on the last page.

Errors

404report_not_requested400invalid_issue_type404crawl_not_found410crawl_expired400invalid_cursor401unauthorized403scope_denied429rate_limited

A report

GET /api/v1/crawls/{crawl_id}/reports/{report}

Summary and per-page rows of one report of the crawl. While the report runs: status queued / running, summary null and no rows. The sample is the site_audit report.

Credits Free Sync answered in the request

Path parameters

Field nameTypeDescription
crawl_idrequired string Id of the crawl (crl_…).
reportrequired string A report requested for the crawl.
Allowed: site_audit, broken_links, page_index, schema, source_code, readability, accessibility, performance

Query parameters

Field nameTypeDescription
limitoptional integer Rows per page.
Default: 100
Range: 1 to 500
cursoroptional string next_cursor of the previous page.
status / typeoptional string broken_links only: the filters of the links endpoint.

Response fields

Field nameTypeDescription
objectstringAlways crawl_report.
crawl_idstringThe crawl's id.
reportstringReport name.
statusstringStatus of the report: queued, running, completed, failed or skipped.
summaryobject | nullTotals of the report (null until it has run).
dataarrayPer-page rows of the report.
has_morebooleantrue when another page follows.
next_cursorstring | nullPass it as cursor to get the next page; null on the last page.

Errors

404unknown_report404report_not_requested404crawl_not_found410crawl_expired400invalid_cursor401unauthorized403scope_denied429rate_limited

Export

GET /api/v1/crawls/{crawl_id}/export

A file of the crawl's pages and results. The first call starts building it (202 with Retry-After); call again until it is ready, then download the signed URL (no API key needed).

Credits Free Sync answered in the request

Path parameters

Field nameTypeDescription
crawl_idrequired string Id of the crawl (crl_…).

Query parameters

Field nameTypeDescription
formatoptional string File format.
Default: "csv"
Allowed: csv, json

Response fields

Field nameTypeDescription
objectstringAlways crawl_export.
crawl_idstringThe crawl's id.
formatstringcsv or json.
statusstringprocessing while the file is built, then ready.
urlstringSigned download URL (no API key needed) once ready.
expires_inintegerSeconds the download URL stays valid.
size_bytesintegerSize of the file.
retry_afterintegerWhile processing: seconds to wait before asking again.

Errors

409crawl_not_finished410crawl_expired404crawl_not_found401unauthorized403scope_denied429rate_limited

Compare two crawls

GET /api/v1/crawls/{crawl_id}/diff/{previous_id}

Two finished crawls of the same website: pages added, removed, status code changes and the change of each site audit issue.

Credits Free Sync answered in the request

Path parameters

Field nameTypeDescription
crawl_idrequired string Id of the crawl (crl_…).
previous_idrequired string The earlier crawl (crl_…).

Query parameters

Field nameTypeDescription
sectionoptional string Pages listed in data.
Default: "added"
Allowed: added, removed, status_changed
limitoptional integer Rows per page.
Default: 100
Range: 1 to 500
cursoroptional string next_cursor of the previous page.

Response fields

Field nameTypeDescription
objectstringAlways crawl_diff.
crawl_idstringThe crawl's id.
previous_crawl_idstringThe earlier crawl compared with.
sectionstringadded, removed or status_changed.
summaryobjectpages_before, pages_after, pages_added, pages_removed, status_changes and issues (before / after / change of each site audit issue, null without site_audit).
dataarrayThe pages of the section: url, status_code (and previous_status_code).
has_morebooleantrue when another page follows.
next_cursorstring | nullPass it as cursor to get the next page; null on the last page.

Errors

400invalid_diff409crawl_not_finished404crawl_not_found410crawl_expired400invalid_cursor401unauthorized403scope_denied429rate_limited

Account

Account

GET /api/v1/account/

The partner, the calling key, the credit balance, the plan's limits and the jobs and crawls running now.

Credits Free Sync answered in the request

Request parameters

None.

Response fields

Field nameTypeDescription
partnerobjectThe partner account: id, name, company, email.
keyobjectThe API key of the call: prefix, name, mode (live / test), scopes.
creditsobjectbalance: credits available now.
planobjectThe plan and its limits.
plan.namestringPlan name.
plan.monthly_creditsintegerCredits added on each renewal.
plan.requests_per_minuteintegerRate limit per minute (all keys of the account).
plan.requests_per_dayintegerRate limit per rolling 24 hours.
plan.max_pages_per_crawlintegerLargest max_pages of a crawl.
plan.max_concurrent_crawlsintegerLive crawls running at once.
plan.max_crawls_per_dayintegerLive crawls started per rolling 24 hours.
plan.max_concurrent_jobsintegerLive async jobs queued or running at once.
plan.result_retention_daysintegerDays job results and crawl data are kept.
activeobjectJobs and crawls running now.

Errors

401unauthorized403scope_denied429rate_limited

Usage

GET /api/v1/usage/

Requests and credits of live keys per day and per check over a date range.

Credits Free Sync answered in the request

Query parameters

Field nameTypeDescription
fromoptional string First day, YYYY-MM-DD. Default: 29 days before to.
tooptional string Last day, YYYY-MM-DD (at most 366 days after from). Default: today.

Response fields

Field nameTypeDescription
fromstringFirst day of the range.
tostringLast day of the range.
totalsobjectRequests and credits of the whole range (live keys).
by_dayarray{date, requests, credits} per day with traffic.
by_checkarray{product, check, requests, credits} per check, most credits first.

Errors

400invalid_date401unauthorized403scope_denied429rate_limited

Credit transactions

GET /api/v1/credits/transactions/

The credit statement, newest first: top-ups, plan credits, reservations, releases and adjustments, each with the balance after it.

Credits Free Sync answered in the request

Query parameters

Field nameTypeDescription
limitoptional integer Rows per page.
Default: 50
Range: 1 to 200
beforeoptional integer next_before of the previous page (a transaction id).

Response fields

Field nameTypeDescription
dataarrayLedger rows, newest first: id, kind (topup, plan, reserve, release, charge, adjust), amount (negative: debit), balance_after, reference (job / crawl / check id), note, created_at.
has_morebooleantrue when another page follows.
next_beforeinteger | nullPass it as before to get the next page.

Errors

400invalid_request401unauthorized403scope_denied429rate_limited

Pricing

GET /api/v1/pricing/

The current credits of every check, of a crawled page and of every crawl report.

Credits Free Sync answered in the request

Request parameters

None.

Response fields

Field nameTypeDescription
dataarray{code, credits, unit, description} of every price: page.<check>, crawl.page, crawl.report.<report>.

Errors

401unauthorized429rate_limited