Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.
Every action returns normalized output. The Provider’s native output is not repeated there; it stays on the Run and is readable with Get Run. List actions expose output.items[] with fixed fields per row; overview actions expose fixed top-level fields. A value the selected Provider does not report is null; Glasser does not convert or fill in values. Money is always USD (cpc_usd, organic_traffic_value_usd).volume, traffic and cpc_usd are the answering Provider’s own estimates. Compare them only within one Provider (runs[].provider), not across Providers.Read result_status separately from status: success, no_result, error or pending. An empty but valid answer is no_result and keeps the action’s shape: items is [], or every top-level field is null. error with error.code means the Provider output could not be delivered.charge_usd totals this response’s runs, including charged empty results, and is null until all Runs settle. With provider: auto, fallback can create multiple Runs, each listed in runs[] with its own charge. For a pending crawl (site_audit, HTTP 202), follow the authenticated result_url. Get Run remains native and reports an individual charge. See Provider selection and charges.
Every field is present on every row; a value the Provider does not report is null. Fields follow the field conventions: money ends in _usd, timestamps end in _at (ISO 8601 UTC), and domain is a bare hostname without www. or a port.Authority scores keep each Provider’s own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100, may have decimals), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000) and serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way: semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty and ahrefs_keyword_difficulty are each 0–100 on the Provider’s own model, so the same keyword can score very differently between them. dataforseo_onpage_score is DataForSEO’s own page score. Only the field of the Provider that answered is filled; the others are null.position is the organic position: 1 is the first organic result, and SERP features such as ads or answer boxes are not counted.
items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at. One row per link from every Provider.
items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: position} (null = not in the top 100), keyed by the domains you sent
keyword_gap rows differ by Provider: Semrush returns keywords any of the domains ranks for (a union), while DataForSEO returns keywords the competitor ranks for and you do not. ai_visibility reports two different metrics: Ahrefs counts citations of the domain’s pages in AI answers, DataForSEO counts LLM mentions of the domain. Each Provider fills only its own fields, and there is no cross-Provider total. Semrush first_seen_at carries no time zone (Semrush does not state one), so it has no Z suffix.
Generate a unique value for each intended execution (a UUID is recommended). Retry with the same key and execution parameters to retrieve the original Run without a second charge. Changing execution parameters with the same key returns 409; changing task_id or metadata does not update the original Run.
keyword_ideas or serp: supply exactly one keyword in keywords.
site_audit: supply domain; limit is the number of pages to crawl (default 20, at most 100). The crawl runs asynchronously.
keyword_gap and backlink_gap: supply domain and one to four competitors.
page_audit: supply url (one page).
visibility_history: supply domain; limit is the number of months (default 12, at most 24).
All other actions: supply domain. organic_competitors finds domains ranking for the same keywords; ai_visibility: AI-answer visibility in the answering Provider's own metric (Ahrefs: citations of the domain's pages; DataForSEO: LLM mentions of the domain); ai_citations: pages most cited in AI answers that mention the domain, from any site.
keyword_gap rows differ by Provider: Semrush returns keywords any of the domains ranks for (union); DataForSEO returns keywords the competitor ranks for and you do not.
Default auto: select the first eligible Provider in Glasser's preference order. A named Provider must support the request and be allowed by your Key; it does not fall back to another Provider. Available values are listed below.
QUEUED or RUNNING: still in progress. COMPLETED: a Provider response is available, including non-2xx responses. FAILED: read failure. STOPPED: stopped before dispatch. Read charge_usd separately from status.
Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.
ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic
organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)
backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider
referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)
keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not
ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)
ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total
Business delivery status, independent of the final Run lifecycle in status. no_result is an empty but valid answer; error means the Provider output could not be delivered.
Authenticated, read-only URL path for polling this normalized result and total charge. Use with the API origin. Does not create Runs or resume fallback. GET /v1/runs/:id still returns the native, individual Run.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Glasser","description":"Give your AI access to company, people, web, places, and market data with one Glasser account.","colors":{"primary":"#111111","light":"#e5e5e5","dark":"#171717"},"favicon":"https://mintcdn.com/glasser/UmKPaCGGjUt13e9p/favicon.svg?fit=max\u0026auto=format\u0026n=UmKPaCGGjUt13e9p\u0026q=85\u0026s=4ef0ba1a35f36c7b2499a657f13f068f","api":{"playground":{"display":"interactive"}},"navbar":{"primary":{"type":"button","label":"Get started","href":"https://app.glasser.ai/get-started?utm_source=docs\u0026utm_medium=navbar"}},"footer":{"socials":{"x":"https://x.com/Glasserai","discord":"https://discord.gg/akfMzXuwkw"}},"contextual":{"options":[{"title":"Ask in ChatGPT","description":"Ask questions about this page","icon":"/images/clients/chatgpt.svg","href":{"base":"https://chatgpt.com/","query":[{"key":"hints","value":"search"},{"key":"q","value":"Read this Glasser documentation page and help me understand how to use it: https://glasser.ai/docs$path"}]}},{"title":"Ask in Claude","description":"Ask questions about this page","icon":"/images/clients/claude.svg","href":{"base":"https://claude.ai/new","query":[{"key":"q","value":"Read this Glasser documentation page and help me understand how to use it: https://glasser.ai/docs$path"}]}},"copy","view"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"glasser","hasAudioNarration":false,"actualSubdomain":"glasser","customDomains":["glasser.ai"],"gitSource":{"type":"github","owner":"surething-io","repo":"glasser-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae1f22b8ead5bbc3c1cc3e5","collectionId":"f8ea516d-ff83-407d-b2e0-af2f4d1da829","liveDeploymentHistoryId":"6ae1f22b8ead5bbc3c1cc3e5","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae1f22b8ead5bbc3c1cc3e5","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":24},{"language":"default","tag":"Documentation","count":22},{"language":"default","tag":"For AI agents","count":19},{"language":"default","tag":"CLI Reference","count":15},{"language":"default","tag":"Solutions","count":13},{"language":"default","tag":"Set up with MCP","count":10},{"language":"default","tag":"Set up with Skill","count":9},{"language":"default","tag":"Runs","count":8},{"language":"default","tag":"Get started","count":6},{"language":"default","tag":"Data Sources","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:\"Inter\";font-weight:100 900;font-display:swap;src:url(/docs/fonts/inter-latin.woff2) format(\"woff2\"),url(/fonts/inter-latin.woff2) format(\"woff2\");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:\"Inter\";font-weight:100 900;font-display:swap;src:url(/docs/fonts/inter-latin-ext.woff2) format(\"woff2\"),url(/fonts/inter-latin-ext.woff2) format(\"woff2\");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}body{font-family:\"Inter\",ui-sans-serif,system-ui,sans-serif}.dark .client-card-monochrome img[aria-hidden=true],.dark .glasser-page-actions-menu img[src$=\"/chatgpt.svg\"]{filter:invert(1)}h1{letter-spacing:-.02em}.glasser-page-actions>[id=page-context-menu-button]{display:none}.glasser-page-actions>button[aria-haspopup=menu]{width:auto;aspect-ratio:auto;gap:8px;padding:0 12px;border-radius:10px;font-size:14px;font-weight:500}.glasser-page-actions-menu [data-glasser-page-action=copy]{margin-top:6px}.glasser-page-actions-menu [data-glasser-page-action=copy]::before{content:\"\";position:absolute;top:-4px;left:6px;right:6px;border-top:1px solid currentColor;opacity:.15}.font-mono,[class*=font-mono],[class*=paperMono],code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.rounded-2xl{border-radius:16px}.rounded-xl{border-radius:14px}.rounded-lg{border-radius:10px}.rounded-md{border-radius:8px}[class*=\"rounded-[10px]\"],[class*=\"rounded-[14px]\"]{border-radius:10px}.tryit-button.tryit-button{background-color:oklch(.1684 0 0);height:32px;padding:0 12px;font-size:14px;line-height:20px;border-radius:8px}.tryit-button.tryit-button:hover{background-color:#262626}.bg-primary-dark{border-radius:9999px!important;background-color:oklch(.1684 0 0)!important}.bg-primary-dark~*,a:has(>.bg-primary-dark){font-size:14px}a:has(>.bg-primary-dark),button:has(>.bg-primary-dark){height:32px;padding:0 12px}[class*=\"bg-green-400/20\"]{background-color:#f5f5f5!important}[class*=text-green-700]{color:oklch(.53 0 0)!important}[class*=\"bg-blue-400/20\"]{background-color:#f5f5f5!important}[class*=text-blue-700]{color:oklch(.1684 0 0)!important}[class*=\"bg-orange-400/20\"],[class*=\"bg-yellow-400/20\"]{background-color:#f5f5f5!important}[class*=text-orange-700],[class*=text-yellow-700]{color:oklch(.1684 0 0)!important}[class*=\"bg-red-400/20\"]{background-color:hsl(357 90.5% 95.9%)!important}[class*=text-red-700]{color:hsl(358 64.8% 49%)!important}.dark [class*=\"bg-green-400/20\"]{background-color:oklch(.269 0 0)!important}.dark [class*=text-green-400]{color:oklch(.708 0 0)!important}.dark [class*=\"bg-blue-400/20\"]{background-color:oklch(.269 0 0)!important}.dark [class*=text-blue-400]{color:#e5e5e5!important}.dark [class*=\"bg-red-400/20\"]{background-color:hsl(350 53.2% 15.1%)!important}.dark [class*=text-red-400]{color:hsl(2 100% 78.6%)!important}[class*=page-header] .prose.text-lg{font-size:16px;line-height:26px;color:oklch(.53 0 0)}.dark [class*=page-header] .prose.text-lg{color:oklch(.708 0 0)}[class*=\"bg-[#3064E3]\"]:not(.tryit-button){background-color:#f5f5f5!important;color:oklch(.1684 0 0)!important}.dark [class*=\"bg-[#3064E3]\"]:not(.tryit-button){background-color:oklch(.269 0 0)!important;color:#e5e5e5!important}.integration-flow{max-width:640px;margin:24px auto}.integration-flow img{display:block;width:100%;height:auto;border-radius:12px}.dark .integration-flow-light,.integration-flow-dark{display:none}.dark .integration-flow-dark{display:block}.integration-map{--map-surface:#fafafa;--map-card:#ffffff;--map-border:#e5e5e5;--map-muted:#737373;--map-accent:#ba5639;--map-accent-surface:#fff7f3;--map-accent-border:#ebc3b7;display:grid;grid-template-columns:minmax(0,1.8fr) minmax(0,1fr);align-items:center;gap:12px;margin:24px 0 32px;padding:24px;border:1px solid var(--map-border);border-radius:16px;background:var(--map-surface);font-size:14px;line-height:1.4}.dark .integration-map{--map-surface:#141414;--map-card:#1c1c1c;--map-border:#303030;--map-muted:#a3a3a3;--map-accent:#e5a18a;--map-accent-surface:#2b1e19;--map-accent-border:#674437}.integration-map-product{min-width:0;padding:16px;border:1px dashed var(--map-border);border-radius:12px}.integration-map-label{display:block;margin-bottom:12px;color:var(--map-muted);font-size:11px;font-weight:500;letter-spacing:.06em;text-transform:uppercase}.integration-map-row{display:grid;grid-template-columns:minmax(0,1fr) 24px minmax(0,1.4fr);align-items:center}.integration-map-node{display:flex;min-width:0;min-height:72px;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:12px 8px;border:1px solid var(--map-border);border-radius:10px;background:var(--map-card);text-align:center;font-weight:500}.integration-map-node strong{font-weight:600}.integration-map-node>span{color:var(--map-muted);font-size:11px;font-weight:400}.integration-map-glasser{border-color:var(--map-accent-border);background:var(--map-accent-surface)}.integration-map-arrow{color:var(--map-accent);font-size:22px;text-align:center}.integration-map-destinations{display:grid;gap:12px}.integration-map-route{display:grid;grid-template-columns:24px minmax(0,1fr);align-items:center;gap:8px}.integration-map-direct{grid-template-columns:minmax(0,1fr) 24px minmax(0,1fr) 24px minmax(0,1fr)}@media (max-width:540px){.integration-map{grid-template-columns:minmax(0,1fr);gap:12px;padding:16px}.integration-map-destinations{grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}.integration-map-route{grid-template-columns:minmax(0,1fr);gap:8px}.integration-map-direct>.integration-map-arrow,.integration-map-route>.integration-map-arrow{transform:rotate(90deg)}.integration-map-direct .integration-map-node{min-height:60px}}.setup-screenshots{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:16px;margin:24px 0}.setup-screenshots>div{min-width:0}.setup-screenshots .frame{margin:0}.setup-screenshots .zoom-image-trigger img{width:auto;height:auto;max-width:100%;max-height:280px}.setup-screenshots figcaption{font-size:12px;line-height:1.5}.setup-screenshots-single{grid-template-columns:minmax(0,1fr);max-width:400px}.setup-screenshots-create>div:last-child{grid-column:2;grid-row:1/span 2}.setup-screenshots-create>div:first-child .zoom-image-trigger img{max-height:180px}.setup-screenshots-create>div:last-child .zoom-image-trigger img{max-height:360px}@media (max-width:640px){.setup-screenshots{grid-template-columns:minmax(0,1fr)}.setup-screenshots-create>div:last-child{grid-column:auto;grid-row:auto}}"}],"page":{"pagePath":"api-reference/solutions/gtm/seo_research","slug":"/api-reference/solutions/gtm/seo_research","pageMetadata":{"title":"SEO research","description":"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.","deprecated":null,"version":null,"sidebarTitle":"Seo research","openapi":"/openapi.json post /v1/solutions/gtm/seo_research","href":"/api-reference/solutions/gtm/seo_research","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Every action returns normalized `,_jsx(_components.code,{children:`output`}),`. The Provider’s native output is not repeated there; it stays on the Run and is readable with `,_jsx(_components.a,{href:`/api-reference/runs/get`,children:`Get Run`}),`. List actions expose `,_jsx(_components.code,{children:`output.items[]`}),` with fixed fields per row; overview actions expose fixed top-level fields. A value the selected Provider does not report is `,_jsx(_components.code,{children:`null`}),`; Glasser does not convert or fill in values. Money is always USD (`,_jsx(_components.code,{children:`cpc_usd`}),`, `,_jsx(_components.code,{children:`organic_traffic_value_usd`}),`).`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`volume`}),`, `,_jsx(_components.code,{children:`traffic`}),` and `,_jsx(_components.code,{children:`cpc_usd`}),` are the answering Provider’s own estimates. Compare them only within one Provider (`,_jsx(_components.code,{children:`runs[].provider`}),`), not across Providers.`]}),`\n`,_jsxs(_components.p,{children:[`Read `,_jsx(_components.code,{children:`result_status`}),` separately from `,_jsx(_components.code,{children:`status`}),`: `,_jsx(_components.code,{children:`success`}),`, `,_jsx(_components.code,{children:`no_result`}),`, `,_jsx(_components.code,{children:`error`}),` or `,_jsx(_components.code,{children:`pending`}),`. An empty but valid answer is `,_jsx(_components.code,{children:`no_result`}),` and keeps the action’s shape: `,_jsx(_components.code,{children:`items`}),` is `,_jsx(_components.code,{children:`[]`}),`, or every top-level field is `,_jsx(_components.code,{children:`null`}),`. `,_jsx(_components.code,{children:`error`}),` with `,_jsx(_components.code,{children:`error.code`}),` means the Provider output could not be delivered.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`charge_usd`}),` totals this response’s `,_jsx(_components.code,{children:`runs`}),`, including charged empty results, and is null until all Runs settle. With `,_jsx(_components.code,{children:`provider: auto`}),`, fallback can create multiple Runs, each listed in `,_jsx(_components.code,{children:`runs[]`}),` with its own charge. For a pending crawl (`,_jsx(_components.code,{children:`site_audit`}),`, HTTP 202), follow the authenticated `,_jsx(_components.a,{href:`/api-reference/solutions/gtm/seo_research/result`,children:`result_url`}),`. `,_jsx(_components.a,{href:`/api-reference/runs/get`,children:`Get Run`}),` remains native and reports an individual charge. See `,_jsx(_components.a,{href:`/api-reference/solutions/overview#how-provider-selection-works`,children:`Provider selection and charges`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`output-by-action`,children:`Output by action`}),`\n`,_jsxs(_components.p,{children:[`Every field is present on every row; a value the Provider does not report is `,_jsx(_components.code,{children:`null`}),`. Fields follow the `,_jsx(_components.a,{href:`/api-reference/solutions/overview#field-conventions`,children:`field conventions`}),`: money ends in `,_jsx(_components.code,{children:`_usd`}),`, timestamps end in `,_jsx(_components.code,{children:`_at`}),` (ISO 8601 UTC), and `,_jsx(_components.code,{children:`domain`}),` is a bare hostname without `,_jsx(_components.code,{children:`www.`}),` or a port.`]}),`\n`,_jsxs(_components.p,{children:[`Authority scores keep each Provider’s own metric and name and are never converted: `,_jsx(_components.code,{children:`ahrefs_domain_rating`}),` (Ahrefs Domain Rating, 0–100, may have decimals), `,_jsx(_components.code,{children:`semrush_authority_score`}),` (Semrush Authority Score, 0–100), `,_jsx(_components.code,{children:`dataforseo_rank`}),` (DataForSEO rank, 0–1000) and `,_jsx(_components.code,{children:`serpstat_domain_rank`}),` (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way: `,_jsx(_components.code,{children:`semrush_keyword_difficulty`}),`, `,_jsx(_components.code,{children:`serpstat_keyword_difficulty`}),`, `,_jsx(_components.code,{children:`dataforseo_keyword_difficulty`}),` and `,_jsx(_components.code,{children:`ahrefs_keyword_difficulty`}),` are each 0–100 on the Provider’s own model, so the same keyword can score very differently between them. `,_jsx(_components.code,{children:`dataforseo_onpage_score`}),` is DataForSEO’s own page score. Only the field of the Provider that answered is filled; the others are `,_jsx(_components.code,{children:`null`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`position`}),` is the organic position: 1 is the first organic result, and SERP features such as ads or answer boxes are not counted.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`action`}),_jsx(_components.th,{children:_jsx(_components.code,{children:`output`})})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`keyword_overview`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent (one row per keyword)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`keyword_ideas`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: same row as `,_jsx(_components.code,{children:`keyword_overview`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`serp`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: position, url, domain, title, snippet (organic results only)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`domain_overview`})}),_jsx(_components.td,{children:`organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ranked_keywords`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: keyword, position, url, volume, cpc_usd, traffic`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`organic_competitors`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: domain, common_keywords, organic_keywords (the competitor’s total), organic_traffic. The target domain and its subdomains are left out.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`backlinks_overview`})}),_jsx(_components.td,{children:`backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`backlinks`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at. One row per link from every Provider.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`referring_domains`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`domain_rating`})}),_jsx(_components.td,{children:`ahrefs_domain_rating`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`site_audit`})}),_jsx(_components.td,{children:`dataforseo_task_id (input to DataForSEO’s OnPage report Endpoints), crawl_progress, crawl_stop_reason (DataForSEO’s vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`keyword_gap`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions `,_jsx(_components.code,{children:`{domain: position}`}),` (`,_jsx(_components.code,{children:`null`}),` = not in the top 100), keyed by the domains you sent`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`backlink_gap`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: domain, dataforseo_rank, backlinks_per_target `,_jsx(_components.code,{children:`{competitor domain: count}`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`page_audit`})}),_jsx(_components.td,{children:`url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`visibility_history`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ai_citations`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`items[]`}),`: url, platform, mentions, ai_search_volume, is_target_domain. Pages most cited in AI answers that mention the domain, from any site.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ai_visibility`})}),_jsxs(_components.td,{children:[`ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform `,_jsx(_components.code,{children:`{platform: citations}`}),`, dataforseo_ai_mentions_by_platform `,_jsx(_components.code,{children:`{platform: mentions}`}),`, dataforseo_ai_search_volume_by_platform `,_jsx(_components.code,{children:`{platform: AI search volume}`})]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`keyword_gap`}),` rows differ by Provider: Semrush returns keywords any of the domains ranks for (a union), while DataForSEO returns keywords the competitor ranks for and you do not. `,_jsx(_components.code,{children:`ai_visibility`}),` reports two different metrics: Ahrefs counts citations of the domain’s pages in AI answers, DataForSEO counts LLM mentions of the domain. Each Provider fills only its own fields, and there is no cross-Provider total. Semrush `,_jsx(_components.code,{children:`first_seen_at`}),` carries no time zone (Semrush does not state one), so it has no `,_jsx(_components.code,{children:`Z`}),` suffix.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"action\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ranked_keywords\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"provider\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"dataforseo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"COMPLETED\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"result_status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"output\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"items\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"keyword\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"zero interest business loan\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"position\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://stripe.com/resources/more/zero-interest-business-loans\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"volume\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1600`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"cpc_usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`14.54`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"traffic\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`486.4`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"charge_usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0.01236\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"runs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"provider\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"dataforseo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"COMPLETED\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"charge_usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"0.01236\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"result_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"/v1/solutions/gtm/seo_research/result?token=…\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"SEO research","description":"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.","deprecated":null,"version":null,"sidebarTitle":"Seo research","openapi":"/openapi.json post /v1/solutions/gtm/seo_research","href":"/api-reference/solutions/gtm/seo_research","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Output by action","slug":"output-by-action","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/glasser/edf4f5bdc385b1eb/glasser-analytics.js","/docs/_mintlify/custom/glasser/277549e7f7982383/glasser-page-actions.js"],"openApiReferenceData":{"operation":{"tags":["Solutions"],"operationId":"gtm-seo-research","parameters":["fed67c4a-797d-4ea9-9c6a-9863151324b0"],"security":["2814ffc2-c587-4027-932b-207796b4bbc0"],"responses":{"200":"fc0b3cd6-7dcb-4dcc-bca0-f6f559a94dad","202":"935dc49d-cb67-421a-8320-e11ae41b4f03","400":"702d60b1-15ee-42d6-ad4b-e551921faabe","401":"82d8589c-14fa-44bc-aac1-5fb85a281356","402":"af240353-1106-416f-ac56-c208c9c50519","403":"98cdea13-17b9-4328-be42-9a556b26e0df","409":"128b12ee-b24b-4175-83f7-814d3a0c3794","429":"a4f4b014-fcc9-4aac-b041-3130c72fa7b2","503":"751ab63b-12ad-4b35-97ae-e07b6d17588f"},"description":"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.","summary":"SEO research","requestBody":"4b8ac96f-9ad1-4b53-b730-0ff560efbbba","x-mint":{"metadata":{"title":"SEO research","description":"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain."},"content":"Every action returns normalized `output`. The Provider's native output is not repeated there; it stays on the Run and is readable with [Get Run](/api-reference/runs/get). List actions expose `output.items[]` with fixed fields per row; overview actions expose fixed top-level fields. A value the selected Provider does not report is `null`; Glasser does not convert or fill in values. Money is always USD (`cpc_usd`, `organic_traffic_value_usd`).\n\n`volume`, `traffic` and `cpc_usd` are the answering Provider's own estimates. Compare them only within one Provider (`runs[].provider`), not across Providers.\n\nRead `result_status` separately from `status`: `success`, `no_result`, `error` or `pending`. An empty but valid answer is `no_result` and keeps the action's shape: `items` is `[]`, or every top-level field is `null`. `error` with `error.code` means the Provider output could not be delivered.\n\n`charge_usd` totals this response's `runs`, including charged empty results, and is null until all Runs settle. With `provider: auto`, fallback can create multiple Runs, each listed in `runs[]` with its own charge. For a pending crawl (`site_audit`, HTTP 202), follow the authenticated [result_url](/api-reference/solutions/gtm/seo_research/result). [Get Run](/api-reference/runs/get) remains native and reports an individual charge. See [Provider selection and charges](/api-reference/solutions/overview#how-provider-selection-works).\n\n## Output by action\n\nEvery field is present on every row; a value the Provider does not report is `null`. Fields follow the [field conventions](/api-reference/solutions/overview#field-conventions): money ends in `_usd`, timestamps end in `_at` (ISO 8601 UTC), and `domain` is a bare hostname without `www.` or a port.\n\nAuthority scores keep each Provider's own metric and name and are never converted: `ahrefs_domain_rating` (Ahrefs Domain Rating, 0–100, may have decimals), `semrush_authority_score` (Semrush Authority Score, 0–100), `dataforseo_rank` (DataForSEO rank, 0–1000) and `serpstat_domain_rank` (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way: `semrush_keyword_difficulty`, `serpstat_keyword_difficulty`, `dataforseo_keyword_difficulty` and `ahrefs_keyword_difficulty` are each 0–100 on the Provider's own model, so the same keyword can score very differently between them. `dataforseo_onpage_score` is DataForSEO's own page score. Only the field of the Provider that answered is filled; the others are `null`.\n\n`position` is the organic position: 1 is the first organic result, and SERP features such as ads or answer boxes are not counted.\n\n| action | `output` |\n| --- | --- |\n| `keyword_overview` | `items[]`: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent (one row per keyword) |\n| `keyword_ideas` | `items[]`: same row as `keyword_overview` |\n| `serp` | `items[]`: position, url, domain, title, snippet (organic results only) |\n| `domain_overview` | organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic |\n| `ranked_keywords` | `items[]`: keyword, position, url, volume, cpc_usd, traffic |\n| `organic_competitors` | `items[]`: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic. The target domain and its subdomains are left out. |\n| `backlinks_overview` | backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks |\n| `backlinks` | `items[]`: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at. One row per link from every Provider. |\n| `referring_domains` | `items[]`: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at |\n| `domain_rating` | ahrefs_domain_rating |\n| `site_audit` | dataforseo_task_id (input to DataForSEO's OnPage report Endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content |\n| `keyword_gap` | `items[]`: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions `{domain: position}` (`null` = not in the top 100), keyed by the domains you sent |\n| `backlink_gap` | `items[]`: domain, dataforseo_rank, backlinks_per_target `{competitor domain: count}` |\n| `page_audit` | url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links |\n| `visibility_history` | `items[]`: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic |\n| `ai_citations` | `items[]`: url, platform, mentions, ai_search_volume, is_target_domain. Pages most cited in AI answers that mention the domain, from any site. |\n| `ai_visibility` | ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform `{platform: citations}`, dataforseo_ai_mentions_by_platform `{platform: mentions}`, dataforseo_ai_search_volume_by_platform `{platform: AI search volume}` |\n\n`keyword_gap` rows differ by Provider: Semrush returns keywords any of the domains ranks for (a union), while DataForSEO returns keywords the competitor ranks for and you do not. `ai_visibility` reports two different metrics: Ahrefs counts citations of the domain's pages in AI answers, DataForSEO counts LLM mentions of the domain. Each Provider fills only its own fields, and there is no cross-Provider total. Semrush `first_seen_at` carries no time zone (Semrush does not state one), so it has no `Z` suffix.\n\n```json\n{\n \"action\": \"ranked_keywords\",\n \"provider\": \"dataforseo\",\n \"status\": \"COMPLETED\",\n \"result_status\": \"success\",\n \"output\": {\n \"items\": [\n { \"keyword\": \"zero interest business loan\", \"position\": 1, \"url\": \"https://stripe.com/resources/more/zero-interest-business-loans\", \"volume\": 1600, \"cpc_usd\": 14.54, \"traffic\": 486.4 }\n ]\n },\n \"charge_usd\": \"0.01236\",\n \"runs\": [{ \"provider\": \"dataforseo\", \"status\": \"COMPLETED\", \"charge_usd\": \"0.01236\" }],\n \"result_url\": \"/v1/solutions/gtm/seo_research/result?token=…\"\n}\n```","href":"/api-reference/solutions/gtm/seo_research"},"method":"post","type":"path","servers":["91b097c0-3c09-48c2-be99-4696b9a326fc"],"path":"/v1/solutions/gtm/seo_research","baseUrlOptions":["https://api.glasser.ai"],"title":"SEO research","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"fed67c4a-797d-4ea9-9c6a-9863151324b0":{"name":"idempotency-key","in":"header","schema":{"type":"string","minLength":1,"description":"Generate a unique value for each intended execution (a UUID is recommended). Retry with the same key and execution parameters to retrieve the original Run without a second charge. Changing execution parameters with the same key returns 409; changing task_id or metadata does not update the original Run.","isRequired":true,"uniqueKey":"","typeLabel":"string"},"required":true}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"oneOf":[{"type":"string","description":"Default: keyword_overview.\n\n- keyword_overview: supply one or more keywords.\n- keyword_ideas or serp: supply exactly one keyword in keywords.\n- site_audit: supply domain; limit is the number of pages to crawl (default 20, at most 100). The crawl runs asynchronously.\n- keyword_gap and backlink_gap: supply domain and one to four competitors.\n- page_audit: supply url (one page).\n- visibility_history: supply domain; limit is the number of months (default 12, at most 24).\n- All other actions: supply domain. organic_competitors finds domains ranking for the same keywords; ai_visibility: AI-answer visibility in the answering Provider's own metric (Ahrefs: citations of the domain's pages; DataForSEO: LLM mentions of the domain); ai_citations: pages most cited in AI answers that mention the domain, from any site.\n- keyword_gap rows differ by Provider: Semrush returns keywords any of the domains ranks for (union); DataForSEO returns keywords the competitor ranks for and you do not.","enum":["keyword_overview","keyword_ideas","serp","domain_overview","ranked_keywords","organic_competitors","backlinks_overview","backlinks","referring_domains","domain_rating","site_audit","ai_visibility","keyword_gap","backlink_gap","page_audit","visibility_history","ai_citations"],"uniqueKey":"action.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"action.oneOf.1","typeLabel":"null"}],"uniqueKey":"action","typeLabel":"enum\u003cstring> | null"},"provider":{"oneOf":[{"type":"string","description":"Default auto: select the first eligible Provider in Glasser's preference order. A named Provider must support the request and be allowed by your Key; it does not fall back to another Provider. Available values are listed below.","enum":["auto","semrush","serpstat","dataforseo","ahrefs","serper"],"uniqueKey":"provider.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","uniqueKey":"provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"provider","typeLabel":"enum\u003cstring> | null"},"keywords":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"uniqueKey":"keywords.oneOf.0.items.[INDEX]","typeLabel":"string"},"maxItems":20,"minItems":1,"uniqueKey":"keywords.oneOf.0","typeLabel":"string[]"},{"type":"null","uniqueKey":"keywords.oneOf.1","typeLabel":"null"}],"uniqueKey":"keywords","typeLabel":"string[] | null"},"domain":{"oneOf":[{"type":"string","description":"A website domain such as stripe.com. A full URL is accepted and reduced to its host.","maxLength":253,"minLength":3,"uniqueKey":"domain.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"domain.oneOf.1","typeLabel":"null"}],"uniqueKey":"domain","typeLabel":"string | null"},"competitors":{"oneOf":[{"type":"array","items":{"type":"string","minLength":3,"maxLength":253,"description":"A website domain such as stripe.com. A full URL is accepted and reduced to its host.","uniqueKey":"competitors.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Competitor domains for keyword_gap and backlink_gap, one to four. Full URLs are reduced to their host.","maxItems":4,"minItems":1,"uniqueKey":"competitors.oneOf.0","typeLabel":"string[]"},{"type":"null","uniqueKey":"competitors.oneOf.1","typeLabel":"null"}],"uniqueKey":"competitors","typeLabel":"string[] | null"},"url":{"oneOf":[{"type":"string","description":"One page URL for page_audit, such as https://stripe.com/pricing.","maxLength":2048,"minLength":1,"uniqueKey":"url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"url.oneOf.1","typeLabel":"null"}],"uniqueKey":"url","typeLabel":"string | null"},"country":{"oneOf":[{"type":"string","description":"Country as a two-letter ISO code or a country name, e.g. us, gb, de, Germany. Default us. An unsupported country is refused with the supported list.","maxLength":60,"minLength":2,"uniqueKey":"country.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"country.oneOf.1","typeLabel":"null"}],"uniqueKey":"country","typeLabel":"string | null"},"limit":{"oneOf":[{"type":"integer","description":"Rows to return. Keep it small: the routed Endpoint's charge rule may read it. Each capability caps it further.","maximum":100,"minimum":1,"uniqueKey":"limit.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"limit.oneOf.1","typeLabel":"null"}],"uniqueKey":"limit","typeLabel":"integer | null"},"task_id":{"oneOf":[{"type":"string","description":"Group related Runs, including automatic fallback, under one Task. Reuse a stable string and filter the Runs list by task to retrieve them.","uniqueKey":"task_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"task_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"task_id","typeLabel":"string | null"},"metadata":{"oneOf":[{"type":"object","description":"Optional tracking fields, returned on the Run and available as filters. They never go to the Provider or affect routing, Price, or idempotency.\n\n- Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.\n- Values: strings of 1–500 characters.\n- user_id: your End user's opaque ID, never their email address or name.\n\nInvalid entries are dropped whole, not truncated. The request continues, and the Run returns the fields that were stored.","maxProperties":20,"additionalProperties":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"metadata.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"metadata.oneOf.0","typeLabel":"object"},{"description":"Optional tracking fields, returned on the Run and available as filters. They never go to the Provider or affect routing, Price, or idempotency.\n\n- Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.\n- Values: strings of 1–500 characters.\n- user_id: your End user's opaque ID, never their email address or name.\n\nInvalid entries are dropped whole, not truncated. The request continues, and the Run returns the fields that were stored.","uniqueKey":"metadata.oneOf.1","typeLabel":"any"},{"type":"null","uniqueKey":"metadata.oneOf.2","typeLabel":"null"}],"uniqueKey":"metadata","typeLabel":"object | any | null"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"keywords":["\u003cstring>"],"domain":"\u003cstring>","competitors":["\u003cstring>"],"url":"\u003cstring>","country":"\u003cstring>","limit":50,"task_id":"\u003cstring>","metadata":{}}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"fc0b3cd6-7dcb-4dcc-bca0-f6f559a94dad":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["id","run_url","provider","endpoint","endpoint_version","status","failure","input","output","provider_response","charge_usd","charge_basis","stoppable","stop_requested_at","created_at","started_at","completed_at","task_id","metadata","action","result_status","error","runs","result_url"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"run_url":{"type":"string","description":"Open this Run in the console. Requires Workspace membership.","isRequired":true,"uniqueKey":"run_url","typeLabel":"string"},"provider":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]*$","isRequired":true,"uniqueKey":"provider","typeLabel":"string"},"endpoint":{"type":"string","pattern":"^\\/.+$","isRequired":true,"uniqueKey":"endpoint","typeLabel":"string"},"endpoint_version":{"type":"integer","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"endpoint_version","typeLabel":"integer"},"status":{"type":"string","enum":["QUEUED","RUNNING","COMPLETED","FAILED","STOPPED"],"description":"QUEUED or RUNNING: still in progress. COMPLETED: a Provider response is available, including non-2xx responses. FAILED: read failure. STOPPED: stopped before dispatch. Read charge_usd separately from status.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"failure":{"oneOf":[{"type":"object","description":"Why the Run failed. Non-null only when status is FAILED.","required":["kind","message"],"properties":{"kind":{"type":"string","enum":["TIMED_OUT","INTERNAL"],"isRequired":true,"uniqueKey":"failure.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"failure.oneOf.0.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"failure.oneOf.0","typeLabel":"object"},{"type":"null","description":"Why the Run failed. Non-null only when status is FAILED.","isRequired":true,"uniqueKey":"failure.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"failure","typeLabel":"object | null"},"input":{"type":"object","isRequired":true,"uniqueKey":"input","typeLabel":"object"},"output":{"oneOf":[{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"keyword":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].keyword.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].keyword.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].keyword","typeLabel":"string | null"},"volume":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].volume.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].volume","typeLabel":"integer | null"},"cpc_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].cpc_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].cpc_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].cpc_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].cpc_usd","typeLabel":"number | enum\u003cstring> | null"},"semrush_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].semrush_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].semrush_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].semrush_keyword_difficulty","typeLabel":"integer | null"},"serpstat_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].serpstat_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].serpstat_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].serpstat_keyword_difficulty","typeLabel":"integer | null"},"dataforseo_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].dataforseo_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].dataforseo_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].dataforseo_keyword_difficulty","typeLabel":"integer | null"},"ahrefs_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].ahrefs_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].ahrefs_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].ahrefs_keyword_difficulty","typeLabel":"integer | null"},"intent":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].intent.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].intent.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].intent","typeLabel":"string | null"}},"required":["keyword","volume","cpc_usd","semrush_keyword_difficulty","serpstat_keyword_difficulty","dataforseo_keyword_difficulty","ahrefs_keyword_difficulty","intent"],"additionalProperties":false,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.0.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.0","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"position":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].position.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].position","typeLabel":"integer | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].url","typeLabel":"string | null"},"domain":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].domain.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].domain","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].title","typeLabel":"string | null"},"snippet":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].snippet.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].snippet.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].snippet","typeLabel":"string | null"}},"required":["position","url","domain","title","snippet"],"additionalProperties":false,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.1.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.1","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["organic_keywords","organic_traffic","organic_traffic_value_usd","paid_keywords","paid_traffic"],"properties":{"organic_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.2.organic_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.organic_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_keywords","typeLabel":"integer | null"},"organic_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic","typeLabel":"number | enum\u003cstring> | null"},"organic_traffic_value_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic_value_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic_value_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic_value_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic_value_usd","typeLabel":"number | enum\u003cstring> | null"},"paid_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.2.paid_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.paid_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.paid_keywords","typeLabel":"integer | null"},"paid_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.2.paid_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.2.paid_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.paid_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.paid_traffic","typeLabel":"number | enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.2","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"keyword":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].keyword.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].keyword.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].keyword","typeLabel":"string | null"},"position":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].position.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].position","typeLabel":"integer | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].url","typeLabel":"string | null"},"volume":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].volume.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].volume","typeLabel":"integer | null"},"cpc_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].cpc_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].cpc_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].cpc_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].cpc_usd","typeLabel":"number | enum\u003cstring> | null"},"traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].traffic","typeLabel":"number | enum\u003cstring> | null"}},"required":["keyword","position","url","volume","cpc_usd","traffic"],"additionalProperties":false,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.3.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.3","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"domain":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].domain.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].domain","typeLabel":"string | null"},"common_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].common_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].common_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].common_keywords","typeLabel":"integer | null"},"organic_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_keywords","typeLabel":"integer | null"},"organic_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_traffic","typeLabel":"number | enum\u003cstring> | null"}},"required":["domain","common_keywords","organic_keywords","organic_traffic"],"additionalProperties":false,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.4.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.4","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["backlinks","referring_domains","semrush_authority_score","dataforseo_rank","serpstat_domain_rank","dofollow_backlinks","nofollow_backlinks"],"properties":{"backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.backlinks","typeLabel":"integer | null"},"referring_domains":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.referring_domains.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.referring_domains.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.referring_domains","typeLabel":"integer | null"},"semrush_authority_score":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.semrush_authority_score.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.semrush_authority_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.semrush_authority_score","typeLabel":"integer | null"},"dataforseo_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.dataforseo_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.dataforseo_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.dataforseo_rank","typeLabel":"integer | null"},"serpstat_domain_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.serpstat_domain_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.serpstat_domain_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.serpstat_domain_rank","typeLabel":"integer | null"},"dofollow_backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.dofollow_backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.dofollow_backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.dofollow_backlinks","typeLabel":"integer | null"},"nofollow_backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.nofollow_backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.nofollow_backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.nofollow_backlinks","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.5","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"source_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_url","typeLabel":"string | null"},"target_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].target_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].target_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].target_url","typeLabel":"string | null"},"anchor":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].anchor.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].anchor.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].anchor","typeLabel":"string | null"},"source_ahrefs_domain_rating":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_ahrefs_domain_rating.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_ahrefs_domain_rating.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_ahrefs_domain_rating.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_ahrefs_domain_rating","typeLabel":"number | enum\u003cstring> | null"},"source_semrush_authority_score":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_semrush_authority_score.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_semrush_authority_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_semrush_authority_score","typeLabel":"integer | null"},"source_dataforseo_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_dataforseo_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_dataforseo_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_dataforseo_rank","typeLabel":"integer | null"},"dofollow":{"oneOf":[{"type":"boolean","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].dofollow.oneOf.0","typeLabel":"boolean"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].dofollow.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].dofollow","typeLabel":"boolean | null"},"first_seen_at":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].first_seen_at.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].first_seen_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].first_seen_at","typeLabel":"string | null"}},"required":["source_url","target_url","anchor","source_ahrefs_domain_rating","source_semrush_authority_score","source_dataforseo_rank","dofollow","first_seen_at"],"additionalProperties":false,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.6.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.6","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"domain":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].domain.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].domain","typeLabel":"string | null"},"ahrefs_domain_rating":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].ahrefs_domain_rating.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].ahrefs_domain_rating.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].ahrefs_domain_rating.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].ahrefs_domain_rating","typeLabel":"number | enum\u003cstring> | null"},"semrush_authority_score":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].semrush_authority_score.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].semrush_authority_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].semrush_authority_score","typeLabel":"integer | null"},"dataforseo_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dataforseo_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dataforseo_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dataforseo_rank","typeLabel":"integer | null"},"backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].backlinks","typeLabel":"integer | null"},"dofollow_backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dofollow_backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dofollow_backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dofollow_backlinks","typeLabel":"integer | null"},"first_seen_at":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].first_seen_at.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].first_seen_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].first_seen_at","typeLabel":"string | null"}},"required":["domain","ahrefs_domain_rating","semrush_authority_score","dataforseo_rank","backlinks","dofollow_backlinks","first_seen_at"],"additionalProperties":false,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.7.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.7","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["ahrefs_domain_rating"],"properties":{"ahrefs_domain_rating":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.8.ahrefs_domain_rating.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.8.ahrefs_domain_rating.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.8.ahrefs_domain_rating.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.8.ahrefs_domain_rating","typeLabel":"number | enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.8","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["dataforseo_task_id","crawl_progress","crawl_stop_reason","pages_crawled","dataforseo_onpage_score","broken_links","non_indexable","duplicate_title","duplicate_description","duplicate_content"],"properties":{"dataforseo_task_id":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_task_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_task_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_task_id","typeLabel":"string | null"},"crawl_progress":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.9.crawl_progress.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.crawl_progress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.crawl_progress","typeLabel":"string | null"},"crawl_stop_reason":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.9.crawl_stop_reason.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.crawl_stop_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.crawl_stop_reason","typeLabel":"string | null"},"pages_crawled":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.pages_crawled.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.pages_crawled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.pages_crawled","typeLabel":"integer | null"},"dataforseo_onpage_score":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_onpage_score.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_onpage_score.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_onpage_score.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_onpage_score","typeLabel":"number | enum\u003cstring> | null"},"broken_links":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.broken_links.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.broken_links.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.broken_links","typeLabel":"integer | null"},"non_indexable":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.non_indexable.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.non_indexable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.non_indexable","typeLabel":"integer | null"},"duplicate_title":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_title.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_title","typeLabel":"integer | null"},"duplicate_description":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_description.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_description","typeLabel":"integer | null"},"duplicate_content":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_content.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_content.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_content","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.9","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"keyword":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].keyword.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].keyword.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].keyword","typeLabel":"string | null"},"volume":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].volume.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].volume","typeLabel":"integer | null"},"cpc_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].cpc_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].cpc_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].cpc_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].cpc_usd","typeLabel":"number | enum\u003cstring> | null"},"semrush_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].semrush_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].semrush_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].semrush_keyword_difficulty","typeLabel":"integer | null"},"dataforseo_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].dataforseo_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].dataforseo_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].dataforseo_keyword_difficulty","typeLabel":"integer | null"},"positions":{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.10.\\items.items.[INDEX].positions.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.10.\\items.items.[INDEX].positions.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].positions.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].positions","typeLabel":"object"}},"required":["keyword","volume","cpc_usd","semrush_keyword_difficulty","dataforseo_keyword_difficulty","positions"],"additionalProperties":false,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.10.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.10","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"domain":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].domain.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].domain","typeLabel":"string | null"},"dataforseo_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].dataforseo_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].dataforseo_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].dataforseo_rank","typeLabel":"integer | null"},"backlinks_per_target":{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.11.\\items.items.[INDEX].backlinks_per_target.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.11.\\items.items.[INDEX].backlinks_per_target.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].backlinks_per_target.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].backlinks_per_target","typeLabel":"object"}},"required":["domain","dataforseo_rank","backlinks_per_target"],"additionalProperties":false,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.11.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.11","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["url","status_code","title","description","canonical","dataforseo_onpage_score","internal_links","external_links"],"properties":{"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.12.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.url","typeLabel":"string | null"},"status_code":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.12.status_code.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.status_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.status_code","typeLabel":"integer | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.12.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.title","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.12.description.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.description","typeLabel":"string | null"},"canonical":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.12.canonical.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.canonical.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.canonical","typeLabel":"string | null"},"dataforseo_onpage_score":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.12.dataforseo_onpage_score.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.12.dataforseo_onpage_score.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.dataforseo_onpage_score.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.dataforseo_onpage_score","typeLabel":"number | enum\u003cstring> | null"},"internal_links":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.12.internal_links.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.internal_links.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.internal_links","typeLabel":"integer | null"},"external_links":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.12.external_links.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.external_links.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.external_links","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.12","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"month":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].month.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].month.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].month","typeLabel":"string | null"},"organic_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_keywords","typeLabel":"integer | null"},"organic_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic","typeLabel":"number | enum\u003cstring> | null"},"organic_traffic_value_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic_value_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic_value_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic_value_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic_value_usd","typeLabel":"number | enum\u003cstring> | null"},"paid_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_keywords","typeLabel":"integer | null"},"paid_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_traffic","typeLabel":"number | enum\u003cstring> | null"}},"required":["month","organic_keywords","organic_traffic","organic_traffic_value_usd","paid_keywords","paid_traffic"],"additionalProperties":false,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.13.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.13","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].url","typeLabel":"string | null"},"platform":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].platform.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].platform.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].platform","typeLabel":"string | null"},"mentions":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].mentions.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].mentions.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].mentions","typeLabel":"integer | null"},"ai_search_volume":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].ai_search_volume.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].ai_search_volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].ai_search_volume","typeLabel":"integer | null"},"is_target_domain":{"oneOf":[{"type":"boolean","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].is_target_domain.oneOf.0","typeLabel":"boolean"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].is_target_domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].is_target_domain","typeLabel":"boolean | null"}},"required":["url","platform","mentions","ai_search_volume","is_target_domain"],"additionalProperties":false,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.14.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.14","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["ahrefs_ai_citations","ahrefs_ai_cited_pages","ahrefs_ai_citations_by_platform","dataforseo_ai_mentions_by_platform","dataforseo_ai_search_volume_by_platform"],"properties":{"ahrefs_ai_citations":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations","typeLabel":"integer | null"},"ahrefs_ai_cited_pages":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_cited_pages.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_cited_pages.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_cited_pages","typeLabel":"integer | null"},"ahrefs_ai_citations_by_platform":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.0.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.0.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.0.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform","typeLabel":"object | null"},"dataforseo_ai_mentions_by_platform":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.0.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.0.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.0.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform","typeLabel":"object | null"},"dataforseo_ai_search_volume_by_platform":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.0.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.0.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.0.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.15","typeLabel":"object"},{"type":"null","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","isRequired":true,"uniqueKey":"output.oneOf.16","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output","typeLabel":"object · object · object · object · object · object · object · object · object · object · object · object · object · object · object · object · null"},"provider_response":{"oneOf":[{"type":"object","description":"Non-null only when status is COMPLETED.\n\n- For 2xx responses, output contains Provider-native JSON (any shape), or null for an empty body.\n- For non-2xx responses, error contains the Provider's error body and output is null.\n\nSensitive fields are removed from both bodies.","required":["http_status"],"properties":{"http_status":{"type":"integer","minimum":100,"maximum":599,"description":"HTTP status returned by the Provider. Check this even when the Run is COMPLETED.","isRequired":true,"uniqueKey":"provider_response.oneOf.0.http_status","typeLabel":"integer"},"error":{"oneOf":[{},{"type":"null","uniqueKey":"provider_response.oneOf.0.error.oneOf.1","typeLabel":"null"}],"uniqueKey":"provider_response.oneOf.0.error","typeLabel":"null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"provider_response.oneOf.0","typeLabel":"object"},{"type":"null","description":"Non-null only when status is COMPLETED.\n\n- For 2xx responses, output contains Provider-native JSON (any shape), or null for an empty body.\n- For non-2xx responses, error contains the Provider's error body and output is null.\n\nSensitive fields are removed from both bodies.","isRequired":true,"uniqueKey":"provider_response.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"provider_response","typeLabel":"object | null"},"charge_usd":{"oneOf":[{"type":"string","description":"Total charge of runs in this Solution response. Null until all listed Runs settle. Each Run retains its own charge; failures can also be charged.","pattern":"^(0|[1-9]\\d*)\\.(\\d{2}|\\d{2}\\d{0,3}[1-9])$","isRequired":true,"uniqueKey":"charge_usd.oneOf.0","typeLabel":"string"},{"type":"null","description":"Total charge of runs in this Solution response. Null until all listed Runs settle. Each Run retains its own charge; failures can also be charged.","isRequired":true,"uniqueKey":"charge_usd.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"charge_usd","typeLabel":"string | null"},"charge_basis":{"oneOf":[{"type":"object","description":"Single-Run charge basis, or null for a multi-Run total. Read runs[].charge_basis for each charge.","required":["clause","quantity"],"properties":{"clause":{"type":"string","enum":["rule","NO_RESULT","PROVIDER_ERROR","TIMED_OUT","INTERNAL"],"isRequired":true,"uniqueKey":"charge_basis.oneOf.0.clause","typeLabel":"enum\u003cstring>"},"quantity":{"oneOf":[{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"charge_basis.oneOf.0.quantity.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"charge_basis.oneOf.0.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"charge_basis.oneOf.0.quantity","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"charge_basis.oneOf.0","typeLabel":"object"},{"type":"null","description":"Single-Run charge basis, or null for a multi-Run total. Read runs[].charge_basis for each charge.","isRequired":true,"uniqueKey":"charge_basis.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"charge_basis","typeLabel":"object | null"},"stoppable":{"type":"boolean","description":"Whether a stop request can currently be accepted. This does not guarantee that the Run can stop before dispatch.","isRequired":true,"uniqueKey":"stoppable","typeLabel":"boolean"},"stop_requested_at":{"oneOf":[{"type":"string","description":"When a stop was requested. The Run can still continue if dispatch had already started.","format":"date-time","isRequired":true,"uniqueKey":"stop_requested_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When a stop was requested. The Run can still continue if dispatch had already started.","isRequired":true,"uniqueKey":"stop_requested_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"stop_requested_at","typeLabel":"string\u003cdate-time> | null"},"created_at":{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"started_at":{"oneOf":[{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"started_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"started_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"started_at","typeLabel":"string\u003cdate-time> | null"},"completed_at":{"oneOf":[{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"completed_at","typeLabel":"string\u003cdate-time> | null"},"task_id":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"task_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"task_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"task_id","typeLabel":"string | null"},"metadata":{"type":"object","additionalProperties":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"maxProperties":20,"propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"description":"Your stored tracking fields. Use them to filter Runs. They never go to the Provider or affect routing, Price, or idempotency.\n\n- Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.\n- Values: strings of 1–500 characters.\n- user_id: your End user's opaque ID, never their email address or name.","isRequired":true,"uniqueKey":"metadata","typeLabel":"object"},"action":{"type":"string","enum":["keyword_overview","keyword_ideas","serp","domain_overview","ranked_keywords","organic_competitors","backlinks_overview","backlinks","referring_domains","domain_rating","site_audit","ai_visibility","keyword_gap","backlink_gap","page_audit","visibility_history","ai_citations"],"isRequired":true,"uniqueKey":"action","typeLabel":"enum\u003cstring>"},"result_status":{"type":"string","enum":["success","no_result","error","pending"],"description":"Business delivery status, independent of the final Run lifecycle in status. no_result is an empty but valid answer; error means the Provider output could not be delivered.","isRequired":true,"uniqueKey":"result_status","typeLabel":"enum\u003cstring>"},"error":{"oneOf":[{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.oneOf.0.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.oneOf.0.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error","typeLabel":"object | null"},"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"runs.items.[INDEX].id","typeLabel":"string"},"run_url":{"type":"string","description":"Open this Run in the console. Requires Workspace membership.","isRequired":true,"uniqueKey":"runs.items.[INDEX].run_url","typeLabel":"string"},"provider":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]*$","isRequired":true,"uniqueKey":"runs.items.[INDEX].provider","typeLabel":"string"},"endpoint":{"type":"string","pattern":"^\\/.+$","isRequired":true,"uniqueKey":"runs.items.[INDEX].endpoint","typeLabel":"string"},"endpoint_version":{"type":"integer","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"runs.items.[INDEX].endpoint_version","typeLabel":"integer"},"status":{"type":"string","enum":["QUEUED","RUNNING","COMPLETED","FAILED","STOPPED"],"description":"QUEUED or RUNNING: still in progress. COMPLETED: a Provider response is available, including non-2xx responses. FAILED: read failure. STOPPED: stopped before dispatch. Read charge_usd separately from status.","isRequired":true,"uniqueKey":"runs.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"failure":{"oneOf":[{"type":"object","description":"Why the Run failed. Non-null only when status is FAILED.","required":["kind","message"],"properties":{"kind":{"type":"string","enum":["TIMED_OUT","INTERNAL"],"isRequired":true,"uniqueKey":"runs.items.[INDEX].failure.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"runs.items.[INDEX].failure.oneOf.0.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].failure.oneOf.0","typeLabel":"object"},{"type":"null","description":"Why the Run failed. Non-null only when status is FAILED.","isRequired":true,"uniqueKey":"runs.items.[INDEX].failure.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].failure","typeLabel":"object | null"},"input":{"type":"object","properties":{"omitted":{"type":"boolean","enum":[true],"isRequired":true,"uniqueKey":"runs.items.[INDEX].input.omitted","typeLabel":"enum\u003cboolean>"}},"required":["omitted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].input","typeLabel":"object"},"output":{"type":"object","properties":{"omitted":{"type":"boolean","enum":[true],"isRequired":true,"uniqueKey":"runs.items.[INDEX].output.omitted","typeLabel":"enum\u003cboolean>"}},"required":["omitted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].output","typeLabel":"object"},"provider_response":{"oneOf":[{"type":"object","required":["http_status"],"properties":{"http_status":{"type":"integer","minimum":100,"maximum":599,"description":"HTTP status returned by the Provider. Check this even when the Run is COMPLETED.","isRequired":true,"uniqueKey":"runs.items.[INDEX].provider_response.oneOf.0.http_status","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].provider_response.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].provider_response.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].provider_response","typeLabel":"object | null"},"charge_usd":{"oneOf":[{"type":"string","description":"Final charge as an exact USD decimal string. Null while QUEUED or RUNNING. A FAILED Run can have a non-zero charge under the Endpoint's Price.","pattern":"^(0|[1-9]\\d*)\\.(\\d{2}|\\d{2}\\d{0,3}[1-9])$","isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_usd.oneOf.0","typeLabel":"string"},{"type":"null","description":"Final charge as an exact USD decimal string. Null while QUEUED or RUNNING. A FAILED Run can have a non-zero charge under the Endpoint's Price.","isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_usd.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_usd","typeLabel":"string | null"},"charge_basis":{"oneOf":[{"type":"object","description":"Price clause used to calculate the charge. Null before settlement or when no Provider attempt was made.","required":["clause","quantity"],"properties":{"clause":{"type":"string","enum":["rule","NO_RESULT","PROVIDER_ERROR","TIMED_OUT","INTERNAL"],"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0.clause","typeLabel":"enum\u003cstring>"},"quantity":{"oneOf":[{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0.quantity.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0.quantity","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0","typeLabel":"object"},{"type":"null","description":"Price clause used to calculate the charge. Null before settlement or when no Provider attempt was made.","isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis","typeLabel":"object | null"},"stoppable":{"type":"boolean","description":"Whether a stop request can currently be accepted. This does not guarantee that the Run can stop before dispatch.","isRequired":true,"uniqueKey":"runs.items.[INDEX].stoppable","typeLabel":"boolean"},"stop_requested_at":{"oneOf":[{"type":"string","description":"When a stop was requested. The Run can still continue if dispatch had already started.","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].stop_requested_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When a stop was requested. The Run can still continue if dispatch had already started.","isRequired":true,"uniqueKey":"runs.items.[INDEX].stop_requested_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].stop_requested_at","typeLabel":"string\u003cdate-time> | null"},"created_at":{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"started_at":{"oneOf":[{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].started_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].started_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].started_at","typeLabel":"string\u003cdate-time> | null"},"completed_at":{"oneOf":[{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].completed_at","typeLabel":"string\u003cdate-time> | null"},"task_id":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"runs.items.[INDEX].task_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].task_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].task_id","typeLabel":"string | null"},"metadata":{"type":"object","additionalProperties":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"runs.items.[INDEX].metadata.additionalProperties","typeLabel":"string"},"maxProperties":20,"propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"description":"Your stored tracking fields. Use them to filter Runs. They never go to the Provider or affect routing, Price, or idempotency.\n\n- Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.\n- Values: strings of 1–500 characters.\n- user_id: your End user's opaque ID, never their email address or name.","isRequired":true,"uniqueKey":"runs.items.[INDEX].metadata","typeLabel":"object"}},"required":["id","run_url","provider","endpoint","endpoint_version","status","failure","input","output","provider_response","charge_usd","charge_basis","stoppable","stop_requested_at","created_at","started_at","completed_at","task_id","metadata"],"additionalProperties":false,"uniqueKey":"runs.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"runs","typeLabel":"object[]"},"result_url":{"type":"string","description":"Authenticated, read-only URL path for polling this normalized result and total charge. Use with the API origin. Does not create Runs or resume fallback. GET /v1/runs/:id still returns the native, individual Run.","isRequired":true,"uniqueKey":"result_url","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"\u003cstring>","run_url":"\u003cstring>","provider":"\u003cstring>","endpoint":"\u003cstring>","endpoint_version":123,"status":"QUEUED","failure":{"kind":"TIMED_OUT","message":"\u003cstring>"},"input":{},"output":{"items":[{"keyword":"\u003cstring>","volume":123,"cpc_usd":123,"semrush_keyword_difficulty":123,"serpstat_keyword_difficulty":123,"dataforseo_keyword_difficulty":123,"ahrefs_keyword_difficulty":123,"intent":"\u003cstring>"}]},"provider_response":{"http_status":349,"error":"\u003cunknown>"},"charge_usd":"\u003cstring>","charge_basis":{"clause":"rule","quantity":1},"stoppable":true,"stop_requested_at":"2023-11-07T05:31:56Z","created_at":"2023-11-07T05:31:56Z","started_at":"2023-11-07T05:31:56Z","completed_at":"2023-11-07T05:31:56Z","task_id":"\u003cstring>","metadata":{},"action":"keyword_overview","result_status":"success","error":{"code":"\u003cstring>","message":"\u003cstring>"},"runs":[{"id":"\u003cstring>","run_url":"\u003cstring>","provider":"\u003cstring>","endpoint":"\u003cstring>","endpoint_version":123,"status":"QUEUED","failure":{"kind":"TIMED_OUT","message":"\u003cstring>"},"input":{"omitted":true},"output":{"omitted":true},"provider_response":{"http_status":349},"charge_usd":"\u003cstring>","charge_basis":{"clause":"rule","quantity":1},"stoppable":true,"stop_requested_at":"2023-11-07T05:31:56Z","created_at":"2023-11-07T05:31:56Z","started_at":"2023-11-07T05:31:56Z","completed_at":"2023-11-07T05:31:56Z","task_id":"\u003cstring>","metadata":{}}],"result_url":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"935dc49d-cb67-421a-8320-e11ae41b4f03":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["id","run_url","provider","endpoint","endpoint_version","status","failure","input","output","provider_response","charge_usd","charge_basis","stoppable","stop_requested_at","created_at","started_at","completed_at","task_id","metadata","action","result_status","error","runs","result_url"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"run_url":{"type":"string","description":"Open this Run in the console. Requires Workspace membership.","isRequired":true,"uniqueKey":"run_url","typeLabel":"string"},"provider":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]*$","isRequired":true,"uniqueKey":"provider","typeLabel":"string"},"endpoint":{"type":"string","pattern":"^\\/.+$","isRequired":true,"uniqueKey":"endpoint","typeLabel":"string"},"endpoint_version":{"type":"integer","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"endpoint_version","typeLabel":"integer"},"status":{"type":"string","enum":["QUEUED","RUNNING","COMPLETED","FAILED","STOPPED"],"description":"QUEUED or RUNNING: still in progress. COMPLETED: a Provider response is available, including non-2xx responses. FAILED: read failure. STOPPED: stopped before dispatch. Read charge_usd separately from status.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"failure":{"oneOf":[{"type":"object","description":"Why the Run failed. Non-null only when status is FAILED.","required":["kind","message"],"properties":{"kind":{"type":"string","enum":["TIMED_OUT","INTERNAL"],"isRequired":true,"uniqueKey":"failure.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"failure.oneOf.0.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"failure.oneOf.0","typeLabel":"object"},{"type":"null","description":"Why the Run failed. Non-null only when status is FAILED.","isRequired":true,"uniqueKey":"failure.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"failure","typeLabel":"object | null"},"input":{"type":"object","isRequired":true,"uniqueKey":"input","typeLabel":"object"},"output":{"oneOf":[{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"keyword":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].keyword.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].keyword.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].keyword","typeLabel":"string | null"},"volume":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].volume.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].volume","typeLabel":"integer | null"},"cpc_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].cpc_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].cpc_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].cpc_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].cpc_usd","typeLabel":"number | enum\u003cstring> | null"},"semrush_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].semrush_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].semrush_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].semrush_keyword_difficulty","typeLabel":"integer | null"},"serpstat_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].serpstat_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].serpstat_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].serpstat_keyword_difficulty","typeLabel":"integer | null"},"dataforseo_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].dataforseo_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].dataforseo_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].dataforseo_keyword_difficulty","typeLabel":"integer | null"},"ahrefs_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].ahrefs_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].ahrefs_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].ahrefs_keyword_difficulty","typeLabel":"integer | null"},"intent":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].intent.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].intent.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX].intent","typeLabel":"string | null"}},"required":["keyword","volume","cpc_usd","semrush_keyword_difficulty","serpstat_keyword_difficulty","dataforseo_keyword_difficulty","ahrefs_keyword_difficulty","intent"],"additionalProperties":false,"uniqueKey":"output.oneOf.0.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.0.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.0","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"position":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].position.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].position","typeLabel":"integer | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].url","typeLabel":"string | null"},"domain":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].domain.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].domain","typeLabel":"string | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].title","typeLabel":"string | null"},"snippet":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].snippet.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].snippet.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX].snippet","typeLabel":"string | null"}},"required":["position","url","domain","title","snippet"],"additionalProperties":false,"uniqueKey":"output.oneOf.1.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.1.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.1","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["organic_keywords","organic_traffic","organic_traffic_value_usd","paid_keywords","paid_traffic"],"properties":{"organic_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.2.organic_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.organic_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_keywords","typeLabel":"integer | null"},"organic_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic","typeLabel":"number | enum\u003cstring> | null"},"organic_traffic_value_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic_value_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic_value_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic_value_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.organic_traffic_value_usd","typeLabel":"number | enum\u003cstring> | null"},"paid_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.2.paid_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.paid_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.paid_keywords","typeLabel":"integer | null"},"paid_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.2.paid_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.2.paid_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.2.paid_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.2.paid_traffic","typeLabel":"number | enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.2","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"keyword":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].keyword.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].keyword.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].keyword","typeLabel":"string | null"},"position":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].position.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].position","typeLabel":"integer | null"},"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].url","typeLabel":"string | null"},"volume":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].volume.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].volume","typeLabel":"integer | null"},"cpc_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].cpc_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].cpc_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].cpc_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].cpc_usd","typeLabel":"number | enum\u003cstring> | null"},"traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX].traffic","typeLabel":"number | enum\u003cstring> | null"}},"required":["keyword","position","url","volume","cpc_usd","traffic"],"additionalProperties":false,"uniqueKey":"output.oneOf.3.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.3.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.3","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"domain":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].domain.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].domain","typeLabel":"string | null"},"common_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].common_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].common_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].common_keywords","typeLabel":"integer | null"},"organic_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_keywords","typeLabel":"integer | null"},"organic_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX].organic_traffic","typeLabel":"number | enum\u003cstring> | null"}},"required":["domain","common_keywords","organic_keywords","organic_traffic"],"additionalProperties":false,"uniqueKey":"output.oneOf.4.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.4.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.4","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["backlinks","referring_domains","semrush_authority_score","dataforseo_rank","serpstat_domain_rank","dofollow_backlinks","nofollow_backlinks"],"properties":{"backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.backlinks","typeLabel":"integer | null"},"referring_domains":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.referring_domains.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.referring_domains.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.referring_domains","typeLabel":"integer | null"},"semrush_authority_score":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.semrush_authority_score.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.semrush_authority_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.semrush_authority_score","typeLabel":"integer | null"},"dataforseo_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.dataforseo_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.dataforseo_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.dataforseo_rank","typeLabel":"integer | null"},"serpstat_domain_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.serpstat_domain_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.serpstat_domain_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.serpstat_domain_rank","typeLabel":"integer | null"},"dofollow_backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.dofollow_backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.dofollow_backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.dofollow_backlinks","typeLabel":"integer | null"},"nofollow_backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.5.nofollow_backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.5.nofollow_backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.5.nofollow_backlinks","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.5","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"source_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_url","typeLabel":"string | null"},"target_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].target_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].target_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].target_url","typeLabel":"string | null"},"anchor":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].anchor.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].anchor.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].anchor","typeLabel":"string | null"},"source_ahrefs_domain_rating":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_ahrefs_domain_rating.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_ahrefs_domain_rating.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_ahrefs_domain_rating.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_ahrefs_domain_rating","typeLabel":"number | enum\u003cstring> | null"},"source_semrush_authority_score":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_semrush_authority_score.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_semrush_authority_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_semrush_authority_score","typeLabel":"integer | null"},"source_dataforseo_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_dataforseo_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_dataforseo_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].source_dataforseo_rank","typeLabel":"integer | null"},"dofollow":{"oneOf":[{"type":"boolean","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].dofollow.oneOf.0","typeLabel":"boolean"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].dofollow.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].dofollow","typeLabel":"boolean | null"},"first_seen_at":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].first_seen_at.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].first_seen_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX].first_seen_at","typeLabel":"string | null"}},"required":["source_url","target_url","anchor","source_ahrefs_domain_rating","source_semrush_authority_score","source_dataforseo_rank","dofollow","first_seen_at"],"additionalProperties":false,"uniqueKey":"output.oneOf.6.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.6.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.6","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"domain":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].domain.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].domain","typeLabel":"string | null"},"ahrefs_domain_rating":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].ahrefs_domain_rating.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].ahrefs_domain_rating.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].ahrefs_domain_rating.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].ahrefs_domain_rating","typeLabel":"number | enum\u003cstring> | null"},"semrush_authority_score":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].semrush_authority_score.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].semrush_authority_score.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].semrush_authority_score","typeLabel":"integer | null"},"dataforseo_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dataforseo_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dataforseo_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dataforseo_rank","typeLabel":"integer | null"},"backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].backlinks","typeLabel":"integer | null"},"dofollow_backlinks":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dofollow_backlinks.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dofollow_backlinks.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].dofollow_backlinks","typeLabel":"integer | null"},"first_seen_at":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].first_seen_at.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].first_seen_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX].first_seen_at","typeLabel":"string | null"}},"required":["domain","ahrefs_domain_rating","semrush_authority_score","dataforseo_rank","backlinks","dofollow_backlinks","first_seen_at"],"additionalProperties":false,"uniqueKey":"output.oneOf.7.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.7.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.7","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["ahrefs_domain_rating"],"properties":{"ahrefs_domain_rating":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.8.ahrefs_domain_rating.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.8.ahrefs_domain_rating.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.8.ahrefs_domain_rating.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.8.ahrefs_domain_rating","typeLabel":"number | enum\u003cstring> | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.8","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["dataforseo_task_id","crawl_progress","crawl_stop_reason","pages_crawled","dataforseo_onpage_score","broken_links","non_indexable","duplicate_title","duplicate_description","duplicate_content"],"properties":{"dataforseo_task_id":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_task_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_task_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_task_id","typeLabel":"string | null"},"crawl_progress":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.9.crawl_progress.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.crawl_progress.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.crawl_progress","typeLabel":"string | null"},"crawl_stop_reason":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.9.crawl_stop_reason.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.crawl_stop_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.crawl_stop_reason","typeLabel":"string | null"},"pages_crawled":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.pages_crawled.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.pages_crawled.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.pages_crawled","typeLabel":"integer | null"},"dataforseo_onpage_score":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_onpage_score.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_onpage_score.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_onpage_score.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.dataforseo_onpage_score","typeLabel":"number | enum\u003cstring> | null"},"broken_links":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.broken_links.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.broken_links.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.broken_links","typeLabel":"integer | null"},"non_indexable":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.non_indexable.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.non_indexable.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.non_indexable","typeLabel":"integer | null"},"duplicate_title":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_title.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_title","typeLabel":"integer | null"},"duplicate_description":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_description.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_description","typeLabel":"integer | null"},"duplicate_content":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_content.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_content.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.9.duplicate_content","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.9","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"keyword":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].keyword.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].keyword.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].keyword","typeLabel":"string | null"},"volume":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].volume.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].volume","typeLabel":"integer | null"},"cpc_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].cpc_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].cpc_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].cpc_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].cpc_usd","typeLabel":"number | enum\u003cstring> | null"},"semrush_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].semrush_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].semrush_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].semrush_keyword_difficulty","typeLabel":"integer | null"},"dataforseo_keyword_difficulty":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].dataforseo_keyword_difficulty.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].dataforseo_keyword_difficulty.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].dataforseo_keyword_difficulty","typeLabel":"integer | null"},"positions":{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.10.\\items.items.[INDEX].positions.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.10.\\items.items.[INDEX].positions.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].positions.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX].positions","typeLabel":"object"}},"required":["keyword","volume","cpc_usd","semrush_keyword_difficulty","dataforseo_keyword_difficulty","positions"],"additionalProperties":false,"uniqueKey":"output.oneOf.10.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.10.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.10","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"domain":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].domain.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].domain","typeLabel":"string | null"},"dataforseo_rank":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].dataforseo_rank.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].dataforseo_rank.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].dataforseo_rank","typeLabel":"integer | null"},"backlinks_per_target":{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.11.\\items.items.[INDEX].backlinks_per_target.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.11.\\items.items.[INDEX].backlinks_per_target.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].backlinks_per_target.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX].backlinks_per_target","typeLabel":"object"}},"required":["domain","dataforseo_rank","backlinks_per_target"],"additionalProperties":false,"uniqueKey":"output.oneOf.11.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.11.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.11","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["url","status_code","title","description","canonical","dataforseo_onpage_score","internal_links","external_links"],"properties":{"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.12.url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.url","typeLabel":"string | null"},"status_code":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.12.status_code.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.status_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.status_code","typeLabel":"integer | null"},"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.12.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.title","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.12.description.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.description","typeLabel":"string | null"},"canonical":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.12.canonical.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.canonical.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.canonical","typeLabel":"string | null"},"dataforseo_onpage_score":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.12.dataforseo_onpage_score.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.12.dataforseo_onpage_score.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.dataforseo_onpage_score.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.dataforseo_onpage_score","typeLabel":"number | enum\u003cstring> | null"},"internal_links":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.12.internal_links.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.internal_links.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.internal_links","typeLabel":"integer | null"},"external_links":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.12.external_links.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.12.external_links.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.12.external_links","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.12","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"month":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].month.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].month.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].month","typeLabel":"string | null"},"organic_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_keywords","typeLabel":"integer | null"},"organic_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic","typeLabel":"number | enum\u003cstring> | null"},"organic_traffic_value_usd":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic_value_usd.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic_value_usd.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic_value_usd.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].organic_traffic_value_usd","typeLabel":"number | enum\u003cstring> | null"},"paid_keywords":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_keywords.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_keywords.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_keywords","typeLabel":"integer | null"},"paid_traffic":{"oneOf":[{"type":"number","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_traffic.oneOf.0","typeLabel":"number"},{"type":"string","enum":["Infinity","-Infinity","NaN"],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_traffic.oneOf.1","typeLabel":"enum\u003cstring>"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_traffic.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX].paid_traffic","typeLabel":"number | enum\u003cstring> | null"}},"required":["month","organic_keywords","organic_traffic","organic_traffic_value_usd","paid_keywords","paid_traffic"],"additionalProperties":false,"uniqueKey":"output.oneOf.13.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.13.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.13","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","properties":{"url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].url","typeLabel":"string | null"},"platform":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].platform.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].platform.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].platform","typeLabel":"string | null"},"mentions":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].mentions.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].mentions.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].mentions","typeLabel":"integer | null"},"ai_search_volume":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].ai_search_volume.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].ai_search_volume.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].ai_search_volume","typeLabel":"integer | null"},"is_target_domain":{"oneOf":[{"type":"boolean","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].is_target_domain.oneOf.0","typeLabel":"boolean"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].is_target_domain.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX].is_target_domain","typeLabel":"boolean | null"}},"required":["url","platform","mentions","ai_search_volume","is_target_domain"],"additionalProperties":false,"uniqueKey":"output.oneOf.14.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"output.oneOf.14.\\items","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.14","typeLabel":"object"},{"type":"object","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","required":["ahrefs_ai_citations","ahrefs_ai_cited_pages","ahrefs_ai_citations_by_platform","dataforseo_ai_mentions_by_platform","dataforseo_ai_search_volume_by_platform"],"properties":{"ahrefs_ai_citations":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations","typeLabel":"integer | null"},"ahrefs_ai_cited_pages":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_cited_pages.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_cited_pages.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_cited_pages","typeLabel":"integer | null"},"ahrefs_ai_citations_by_platform":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.0.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.0.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.0.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.ahrefs_ai_citations_by_platform","typeLabel":"object | null"},"dataforseo_ai_mentions_by_platform":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.0.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.0.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.0.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_mentions_by_platform","typeLabel":"object | null"},"dataforseo_ai_search_volume_by_platform":{"oneOf":[{"type":"object","additionalProperties":{"oneOf":[{"type":"integer","uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.0.additionalProperties.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.0.additionalProperties.oneOf.1","typeLabel":"null"}],"uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.0.additionalProperties","typeLabel":"integer | null"},"isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output.oneOf.15.dataforseo_ai_search_volume_by_platform","typeLabel":"object | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"output.oneOf.15","typeLabel":"object"},{"type":"null","description":"Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null. Money is USD. Authority scores keep the answering Provider's own metric and name and are never converted: ahrefs_domain_rating (Ahrefs Domain Rating, 0–100), semrush_authority_score (Semrush Authority Score, 0–100), dataforseo_rank (DataForSEO rank, 0–1000), serpstat_domain_rank (Serpstat Domain Rank, 0–100). Keyword difficulty is split the same way (semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, each 0–100 on its own model). Only the field of the Provider that answered is filled; the others are null. volume, traffic and cpc are the answering Provider's estimates; compare them only within one Provider (runs[].provider). An empty answer (result_status no_result) keeps the action's shape: items is [], or every field is null.\n\n- keyword_overview: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, serpstat_keyword_difficulty, dataforseo_keyword_difficulty, ahrefs_keyword_difficulty, intent\n- keyword_ideas: items[]: same row as keyword_overview\n- serp: items[]: position (organic position: 1 = first organic result; SERP features not counted), url, domain, title, snippet (organic results only)\n- domain_overview: organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ranked_keywords: items[]: keyword, position (organic position: 1 = first organic result; SERP features not counted), url, volume, cpc_usd, traffic\n- organic_competitors: items[]: domain, common_keywords, organic_keywords (the competitor's total), organic_traffic (the target domain and its subdomains are left out)\n- backlinks_overview: backlinks, referring_domains, semrush_authority_score, dataforseo_rank, serpstat_domain_rank, dofollow_backlinks, nofollow_backlinks\n- backlinks: items[]: source_url, target_url, anchor, source_ahrefs_domain_rating, source_semrush_authority_score, source_dataforseo_rank, dofollow, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix). One row per link from every Provider\n- referring_domains: items[]: domain, ahrefs_domain_rating, semrush_authority_score, dataforseo_rank, backlinks, dofollow_backlinks, first_seen_at (ISO 8601 UTC; Semrush: zone not stated, no Z suffix)\n- domain_rating: ahrefs_domain_rating\n- site_audit: dataforseo_task_id (input to DataForSEO's OnPage report endpoints), crawl_progress, crawl_stop_reason (DataForSEO's vocabulary), pages_crawled, dataforseo_onpage_score, broken_links, non_indexable, duplicate_title, duplicate_description, duplicate_content\n- keyword_gap: items[]: keyword, volume, cpc_usd, semrush_keyword_difficulty, dataforseo_keyword_difficulty, positions {domain: organic position; null = not in the top 100}, keyed by the domains sent. Semrush rows are keywords any of the domains ranks for (union); DataForSEO rows are keywords the competitor ranks for and you do not\n- backlink_gap: items[]: domain, dataforseo_rank, backlinks_per_target {competitor domain: count}\n- page_audit: url, status_code, title, description, canonical, dataforseo_onpage_score, internal_links, external_links\n- visibility_history: items[]: month, organic_keywords, organic_traffic, organic_traffic_value_usd, paid_keywords, paid_traffic\n- ai_citations: items[]: url, platform, mentions, ai_search_volume, is_target_domain (pages most cited in AI answers that mention the domain, from any site)\n- ai_visibility: ahrefs_ai_citations, ahrefs_ai_cited_pages, ahrefs_ai_citations_by_platform {platform: citations}, dataforseo_ai_mentions_by_platform {platform: mentions}, dataforseo_ai_search_volume_by_platform {platform: AI search volume}. Each Provider fills only its own fields; no cross-Provider total","isRequired":true,"uniqueKey":"output.oneOf.16","typeLabel":"null"}],"isRequired":true,"uniqueKey":"output","typeLabel":"object · object · object · object · object · object · object · object · object · object · object · object · object · object · object · object · null"},"provider_response":{"oneOf":[{"type":"object","description":"Non-null only when status is COMPLETED.\n\n- For 2xx responses, output contains Provider-native JSON (any shape), or null for an empty body.\n- For non-2xx responses, error contains the Provider's error body and output is null.\n\nSensitive fields are removed from both bodies.","required":["http_status"],"properties":{"http_status":{"type":"integer","minimum":100,"maximum":599,"description":"HTTP status returned by the Provider. Check this even when the Run is COMPLETED.","isRequired":true,"uniqueKey":"provider_response.oneOf.0.http_status","typeLabel":"integer"},"error":{"oneOf":[{},{"type":"null","uniqueKey":"provider_response.oneOf.0.error.oneOf.1","typeLabel":"null"}],"uniqueKey":"provider_response.oneOf.0.error","typeLabel":"null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"provider_response.oneOf.0","typeLabel":"object"},{"type":"null","description":"Non-null only when status is COMPLETED.\n\n- For 2xx responses, output contains Provider-native JSON (any shape), or null for an empty body.\n- For non-2xx responses, error contains the Provider's error body and output is null.\n\nSensitive fields are removed from both bodies.","isRequired":true,"uniqueKey":"provider_response.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"provider_response","typeLabel":"object | null"},"charge_usd":{"oneOf":[{"type":"string","description":"Total charge of runs in this Solution response. Null until all listed Runs settle. Each Run retains its own charge; failures can also be charged.","pattern":"^(0|[1-9]\\d*)\\.(\\d{2}|\\d{2}\\d{0,3}[1-9])$","isRequired":true,"uniqueKey":"charge_usd.oneOf.0","typeLabel":"string"},{"type":"null","description":"Total charge of runs in this Solution response. Null until all listed Runs settle. Each Run retains its own charge; failures can also be charged.","isRequired":true,"uniqueKey":"charge_usd.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"charge_usd","typeLabel":"string | null"},"charge_basis":{"oneOf":[{"type":"object","description":"Single-Run charge basis, or null for a multi-Run total. Read runs[].charge_basis for each charge.","required":["clause","quantity"],"properties":{"clause":{"type":"string","enum":["rule","NO_RESULT","PROVIDER_ERROR","TIMED_OUT","INTERNAL"],"isRequired":true,"uniqueKey":"charge_basis.oneOf.0.clause","typeLabel":"enum\u003cstring>"},"quantity":{"oneOf":[{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"charge_basis.oneOf.0.quantity.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"charge_basis.oneOf.0.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"charge_basis.oneOf.0.quantity","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"charge_basis.oneOf.0","typeLabel":"object"},{"type":"null","description":"Single-Run charge basis, or null for a multi-Run total. Read runs[].charge_basis for each charge.","isRequired":true,"uniqueKey":"charge_basis.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"charge_basis","typeLabel":"object | null"},"stoppable":{"type":"boolean","description":"Whether a stop request can currently be accepted. This does not guarantee that the Run can stop before dispatch.","isRequired":true,"uniqueKey":"stoppable","typeLabel":"boolean"},"stop_requested_at":{"oneOf":[{"type":"string","description":"When a stop was requested. The Run can still continue if dispatch had already started.","format":"date-time","isRequired":true,"uniqueKey":"stop_requested_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When a stop was requested. The Run can still continue if dispatch had already started.","isRequired":true,"uniqueKey":"stop_requested_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"stop_requested_at","typeLabel":"string\u003cdate-time> | null"},"created_at":{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"started_at":{"oneOf":[{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"started_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"started_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"started_at","typeLabel":"string\u003cdate-time> | null"},"completed_at":{"oneOf":[{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"completed_at","typeLabel":"string\u003cdate-time> | null"},"task_id":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"task_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"task_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"task_id","typeLabel":"string | null"},"metadata":{"type":"object","additionalProperties":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"maxProperties":20,"propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"description":"Your stored tracking fields. Use them to filter Runs. They never go to the Provider or affect routing, Price, or idempotency.\n\n- Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.\n- Values: strings of 1–500 characters.\n- user_id: your End user's opaque ID, never their email address or name.","isRequired":true,"uniqueKey":"metadata","typeLabel":"object"},"action":{"type":"string","enum":["keyword_overview","keyword_ideas","serp","domain_overview","ranked_keywords","organic_competitors","backlinks_overview","backlinks","referring_domains","domain_rating","site_audit","ai_visibility","keyword_gap","backlink_gap","page_audit","visibility_history","ai_citations"],"isRequired":true,"uniqueKey":"action","typeLabel":"enum\u003cstring>"},"result_status":{"type":"string","enum":["success","no_result","error","pending"],"description":"Business delivery status, independent of the final Run lifecycle in status. no_result is an empty but valid answer; error means the Provider output could not be delivered.","isRequired":true,"uniqueKey":"result_status","typeLabel":"enum\u003cstring>"},"error":{"oneOf":[{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.oneOf.0.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.oneOf.0.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error","typeLabel":"object | null"},"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"runs.items.[INDEX].id","typeLabel":"string"},"run_url":{"type":"string","description":"Open this Run in the console. Requires Workspace membership.","isRequired":true,"uniqueKey":"runs.items.[INDEX].run_url","typeLabel":"string"},"provider":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]*$","isRequired":true,"uniqueKey":"runs.items.[INDEX].provider","typeLabel":"string"},"endpoint":{"type":"string","pattern":"^\\/.+$","isRequired":true,"uniqueKey":"runs.items.[INDEX].endpoint","typeLabel":"string"},"endpoint_version":{"type":"integer","exclusiveMinimum":0,"isRequired":true,"uniqueKey":"runs.items.[INDEX].endpoint_version","typeLabel":"integer"},"status":{"type":"string","enum":["QUEUED","RUNNING","COMPLETED","FAILED","STOPPED"],"description":"QUEUED or RUNNING: still in progress. COMPLETED: a Provider response is available, including non-2xx responses. FAILED: read failure. STOPPED: stopped before dispatch. Read charge_usd separately from status.","isRequired":true,"uniqueKey":"runs.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"failure":{"oneOf":[{"type":"object","description":"Why the Run failed. Non-null only when status is FAILED.","required":["kind","message"],"properties":{"kind":{"type":"string","enum":["TIMED_OUT","INTERNAL"],"isRequired":true,"uniqueKey":"runs.items.[INDEX].failure.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"runs.items.[INDEX].failure.oneOf.0.message","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].failure.oneOf.0","typeLabel":"object"},{"type":"null","description":"Why the Run failed. Non-null only when status is FAILED.","isRequired":true,"uniqueKey":"runs.items.[INDEX].failure.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].failure","typeLabel":"object | null"},"input":{"type":"object","properties":{"omitted":{"type":"boolean","enum":[true],"isRequired":true,"uniqueKey":"runs.items.[INDEX].input.omitted","typeLabel":"enum\u003cboolean>"}},"required":["omitted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].input","typeLabel":"object"},"output":{"type":"object","properties":{"omitted":{"type":"boolean","enum":[true],"isRequired":true,"uniqueKey":"runs.items.[INDEX].output.omitted","typeLabel":"enum\u003cboolean>"}},"required":["omitted"],"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].output","typeLabel":"object"},"provider_response":{"oneOf":[{"type":"object","required":["http_status"],"properties":{"http_status":{"type":"integer","minimum":100,"maximum":599,"description":"HTTP status returned by the Provider. Check this even when the Run is COMPLETED.","isRequired":true,"uniqueKey":"runs.items.[INDEX].provider_response.oneOf.0.http_status","typeLabel":"integer"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].provider_response.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].provider_response.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].provider_response","typeLabel":"object | null"},"charge_usd":{"oneOf":[{"type":"string","description":"Final charge as an exact USD decimal string. Null while QUEUED or RUNNING. A FAILED Run can have a non-zero charge under the Endpoint's Price.","pattern":"^(0|[1-9]\\d*)\\.(\\d{2}|\\d{2}\\d{0,3}[1-9])$","isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_usd.oneOf.0","typeLabel":"string"},{"type":"null","description":"Final charge as an exact USD decimal string. Null while QUEUED or RUNNING. A FAILED Run can have a non-zero charge under the Endpoint's Price.","isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_usd.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_usd","typeLabel":"string | null"},"charge_basis":{"oneOf":[{"type":"object","description":"Price clause used to calculate the charge. Null before settlement or when no Provider attempt was made.","required":["clause","quantity"],"properties":{"clause":{"type":"string","enum":["rule","NO_RESULT","PROVIDER_ERROR","TIMED_OUT","INTERNAL"],"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0.clause","typeLabel":"enum\u003cstring>"},"quantity":{"oneOf":[{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0.quantity.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0.quantity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0.quantity","typeLabel":"integer | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.0","typeLabel":"object"},{"type":"null","description":"Price clause used to calculate the charge. Null before settlement or when no Provider attempt was made.","isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].charge_basis","typeLabel":"object | null"},"stoppable":{"type":"boolean","description":"Whether a stop request can currently be accepted. This does not guarantee that the Run can stop before dispatch.","isRequired":true,"uniqueKey":"runs.items.[INDEX].stoppable","typeLabel":"boolean"},"stop_requested_at":{"oneOf":[{"type":"string","description":"When a stop was requested. The Run can still continue if dispatch had already started.","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].stop_requested_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When a stop was requested. The Run can still continue if dispatch had already started.","isRequired":true,"uniqueKey":"runs.items.[INDEX].stop_requested_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].stop_requested_at","typeLabel":"string\u003cdate-time> | null"},"created_at":{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"started_at":{"oneOf":[{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].started_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].started_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].started_at","typeLabel":"string\u003cdate-time> | null"},"completed_at":{"oneOf":[{"type":"string","description":"ISO-8601 UTC timestamp","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].completed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].completed_at","typeLabel":"string\u003cdate-time> | null"},"task_id":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"runs.items.[INDEX].task_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"runs.items.[INDEX].task_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].task_id","typeLabel":"string | null"},"metadata":{"type":"object","additionalProperties":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"runs.items.[INDEX].metadata.additionalProperties","typeLabel":"string"},"maxProperties":20,"propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"description":"Your stored tracking fields. Use them to filter Runs. They never go to the Provider or affect routing, Price, or idempotency.\n\n- Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.\n- Values: strings of 1–500 characters.\n- user_id: your End user's opaque ID, never their email address or name.","isRequired":true,"uniqueKey":"runs.items.[INDEX].metadata","typeLabel":"object"}},"required":["id","run_url","provider","endpoint","endpoint_version","status","failure","input","output","provider_response","charge_usd","charge_basis","stoppable","stop_requested_at","created_at","started_at","completed_at","task_id","metadata"],"additionalProperties":false,"uniqueKey":"runs.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"runs","typeLabel":"object[]"},"result_url":{"type":"string","description":"Authenticated, read-only URL path for polling this normalized result and total charge. Use with the API origin. Does not create Runs or resume fallback. GET /v1/runs/:id still returns the native, individual Run.","isRequired":true,"uniqueKey":"result_url","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"\u003cstring>","run_url":"\u003cstring>","provider":"\u003cstring>","endpoint":"\u003cstring>","endpoint_version":123,"status":"QUEUED","failure":{"kind":"TIMED_OUT","message":"\u003cstring>"},"input":{},"output":{"items":[{"keyword":"\u003cstring>","volume":123,"cpc_usd":123,"semrush_keyword_difficulty":123,"serpstat_keyword_difficulty":123,"dataforseo_keyword_difficulty":123,"ahrefs_keyword_difficulty":123,"intent":"\u003cstring>"}]},"provider_response":{"http_status":349,"error":"\u003cunknown>"},"charge_usd":"\u003cstring>","charge_basis":{"clause":"rule","quantity":1},"stoppable":true,"stop_requested_at":"2023-11-07T05:31:56Z","created_at":"2023-11-07T05:31:56Z","started_at":"2023-11-07T05:31:56Z","completed_at":"2023-11-07T05:31:56Z","task_id":"\u003cstring>","metadata":{},"action":"keyword_overview","result_status":"success","error":{"code":"\u003cstring>","message":"\u003cstring>"},"runs":[{"id":"\u003cstring>","run_url":"\u003cstring>","provider":"\u003cstring>","endpoint":"\u003cstring>","endpoint_version":123,"status":"QUEUED","failure":{"kind":"TIMED_OUT","message":"\u003cstring>"},"input":{"omitted":true},"output":{"omitted":true},"provider_response":{"http_status":349},"charge_usd":"\u003cstring>","charge_basis":{"clause":"rule","quantity":1},"stoppable":true,"stop_requested_at":"2023-11-07T05:31:56Z","created_at":"2023-11-07T05:31:56Z","started_at":"2023-11-07T05:31:56Z","completed_at":"2023-11-07T05:31:56Z","task_id":"\u003cstring>","metadata":{}}],"result_url":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"702d60b1-15ee-42d6-ad4b-e551921faabe":{"description":"ValidationFailed | IdempotencyKeyRequired","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error","request_id"],"properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["validation_failed"],"isRequired":true,"uniqueKey":"oneOf.0.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"oneOf.0.error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"oneOf.0.error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"oneOf.0.error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"oneOf.0.error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"oneOf.0.error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.request_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["error","request_id"],"properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_key_required"],"isRequired":true,"uniqueKey":"oneOf.1.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.1.error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.1.error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"oneOf.1.error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"oneOf.1.error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"oneOf.1.error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"oneOf.1.error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"oneOf.1.error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.request_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","required":["error","request_id"],"properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["validation_failed"],"isRequired":true,"uniqueKey":"oneOf.2.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"oneOf.2.error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.2.error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"oneOf.2.error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.2.error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"oneOf.2.error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"oneOf.2.error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"oneOf.2.error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"oneOf.2.error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"oneOf.2.error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.2.error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.request_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"validation_failed","message":"\u003cstring>","reason":"\u003cstring>","control":"\u003cstring>","retry_after_ms":123,"details":{}},"request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"82d8589c-14fa-44bc-aac1-5fb85a281356":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["unauthorized"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"}},"required":["error","request_id"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"\u003cstring>","reason":"\u003cstring>","control":"\u003cstring>","retry_after_ms":123,"details":{}},"request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"af240353-1106-416f-ac56-c208c9c50519":{"description":"InsufficientBalance","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["insufficient_balance"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"}},"required":["error","request_id"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"insufficient_balance","message":"\u003cstring>","reason":"\u003cstring>","control":"\u003cstring>","retry_after_ms":123,"details":{}},"request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"98cdea13-17b9-4328-be42-9a556b26e0df":{"description":"EndpointNotPermitted | Forbidden","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error","request_id"],"properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["endpoint_not_permitted"],"isRequired":true,"uniqueKey":"oneOf.0.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"oneOf.0.error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"oneOf.0.error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"oneOf.0.error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"oneOf.0.error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"oneOf.0.error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.request_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["error","request_id"],"properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["forbidden"],"isRequired":true,"uniqueKey":"oneOf.1.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.1.error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.1.error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"oneOf.1.error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"oneOf.1.error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"oneOf.1.error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"oneOf.1.error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"oneOf.1.error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.request_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"endpoint_not_permitted","message":"\u003cstring>","reason":"\u003cstring>","control":"\u003cstring>","retry_after_ms":123,"details":{}},"request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"128b12ee-b24b-4175-83f7-814d3a0c3794":{"description":"IdempotencyConflict","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["idempotency_conflict"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"}},"required":["error","request_id"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"idempotency_conflict","message":"\u003cstring>","reason":"\u003cstring>","control":"\u003cstring>","retry_after_ms":123,"details":{}},"request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"a4f4b014-fcc9-4aac-b041-3130c72fa7b2":{"description":"RateLimited","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["rate_limited"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"}},"required":["error","request_id"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"\u003cstring>","reason":"\u003cstring>","control":"\u003cstring>","retry_after_ms":123,"details":{}},"request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"751ab63b-12ad-4b35-97ae-e07b6d17588f":{"description":"ServiceUnavailable","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["service_unavailable"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"reason":{"oneOf":[{"type":"string","uniqueKey":"error.reason.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.reason","typeLabel":"string | null"},"control":{"oneOf":[{"type":"string","uniqueKey":"error.control.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.control.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.control","typeLabel":"string | null"},"retry_after_ms":{"oneOf":[{"type":"integer","uniqueKey":"error.retry_after_ms.oneOf.0","typeLabel":"integer"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.1","typeLabel":"null"},{"type":"null","uniqueKey":"error.retry_after_ms.oneOf.2","typeLabel":"null"}],"uniqueKey":"error.retry_after_ms","typeLabel":"integer · null · null"},"details":{"oneOf":[{"type":"object","uniqueKey":"error.details.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"error.details.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details","typeLabel":"object | null"}},"required":["code","message"],"additionalProperties":false,"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"}},"required":["error","request_id"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"service_unavailable","message":"\u003cstring>","reason":"\u003cstring>","control":"\u003cstring>","retry_after_ms":123,"details":{}},"request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"2814ffc2-c587-4027-932b-207796b4bbc0":{"bearer":{"type":"http","scheme":"Bearer","scopes":[],"schemeName":"bearer"}}},"servers":{"91b097c0-3c09-48c2-be99-4696b9a326fc":{"url":"https://api.glasser.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"Bearer","scopes":[],"schemeName":"bearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearer","name":"Authorization"}],"title":"bearer"}]},"originalFileLocation":"openapi.json"},"subdomain":"glasser","siteName":"Glasser","title":"SEO research - Glasser","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T13:02:24.406Z","originalFileLocation":"api-reference/solutions/gtm/seo_research.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Glasser\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"SEO research - Glasser\">\u003cmeta data-mint-head property=\"og:description\" content=\"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Glasser\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://glasser.mintlify.app/_mintlify/api/og/v2?division=Solutions\u0026amp;title=SEO+research\u0026amp;description=Research+keyword+volume+and+difficulty%2C+search+rankings%2C+backlinks%2C+site+audits+and+AI-answer+visibility+across+several+Providers+with+one+normalized+output.+Ch\u0026amp;theme=6f084cf64b727740a57b3687\u0026amp;signature=2c6b5b002a677befa00443c09e87deadae19019f32cb4b38d89be5075edb1ec1\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"SEO research - Glasser\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://glasser.mintlify.app/_mintlify/api/og/v2?division=Solutions\u0026amp;title=SEO+research\u0026amp;description=Research+keyword+volume+and+difficulty%2C+search+rankings%2C+backlinks%2C+site+audits+and+AI-answer+visibility+across+several+Providers+with+one+normalized+output.+Ch\u0026amp;theme=6f084cf64b727740a57b3687\u0026amp;signature=2c6b5b002a677befa00443c09e87deadae19019f32cb4b38d89be5075edb1ec1\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/glasser/BkuzOUT55q1vTY9q/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Glasser\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#111111\">\u003clink data-mint-head rel=\"canonical\" href=\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/solutions/gtm/seo_research.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://glasser.ai/#organization\",\"name\":\"Glasser\",\"url\":\"https://glasser.ai\"},{\"@type\":\"WebSite\",\"@id\":\"https://glasser.ai/docs#website\",\"name\":\"Glasser\",\"url\":\"https://glasser.ai/docs\",\"publisher\":{\"@id\":\"https://glasser.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research#webpage\",\"url\":\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research\",\"name\":\"SEO research\",\"description\":\"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.\",\"dateModified\":\"2026-10-28T13:02:24.406Z\",\"isPartOf\":{\"@id\":\"https://glasser.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Solutions\",\"item\":\"https://glasser.ai/docs/api-reference/solutions/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SEO research\",\"item\":\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research#apireference\",\"headline\":\"SEO research\",\"name\":\"SEO research\",\"description\":\"Research keyword volume and difficulty, search rankings, backlinks, site audits and AI-answer visibility across several Providers with one normalized output. Choose an action and supply keywords or a domain.\",\"url\":\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research\",\"mainEntityOfPage\":{\"@id\":\"https://glasser.ai/docs/api-reference/solutions/gtm/seo_research#webpage\"},\"dateModified\":\"2026-10-28T13:02:24.406Z\",\"publisher\":{\"@id\":\"https://glasser.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://glasser.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Glasser\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Glasser","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","groups":[{"group":"Get started","pages":[{"title":"API overview","sidebarTitle":"Overview","href":"/api-reference/overview"}]},{"group":"Endpoints","pages":[{"title":"List Providers and Endpoints","api":"GET https://api.glasser.ai/public/catalog","href":"/api-reference/endpoints/list"},{"title":"Search runnable endpoints","deprecated":null,"version":null,"sidebarTitle":"Search","openapi":"/openapi.json post /v1/endpoints/search","href":"/api-reference/endpoints/search"},{"title":"Inspect an Endpoint","deprecated":null,"version":null,"sidebarTitle":"Inspect","openapi":"/openapi.json post /v1/endpoints/inspect","href":"/api-reference/endpoints/inspect"}]},{"group":"Runs","pages":[{"title":"Create a Run","deprecated":null,"version":null,"sidebarTitle":"Create","openapi":"/openapi.json post /v1/runs","href":"/api-reference/runs/create"},{"title":"List Runs","deprecated":null,"version":null,"sidebarTitle":"List","openapi":"/openapi.json get /v1/runs","href":"/api-reference/runs/list"},{"title":"Get a Run","deprecated":null,"version":null,"sidebarTitle":"Get","openapi":"/openapi.json get /v1/runs/{runId}","href":"/api-reference/runs/get"},{"title":"Stop a Run","deprecated":null,"version":null,"sidebarTitle":"Stop","openapi":"/openapi.json post /v1/runs/{runId}/stop","href":"/api-reference/runs/stop"}]},{"group":"Balance","pages":[{"title":"Get balance","deprecated":null,"version":null,"sidebarTitle":"Get","openapi":"/openapi.json get /v1/balance","href":"/api-reference/balance/get"},{"title":"List balance history","deprecated":null,"version":null,"sidebarTitle":"History","openapi":"/openapi.json get /v1/balance/history","href":"/api-reference/balance/history"}]},{"group":"Data Sources","pages":[{"title":"Jev API","sidebarTitle":"Jev","href":"/api-reference/data-sources/jev"}]},{"group":"Solutions","pages":[{"title":"Solutions overview","sidebarTitle":"Overview","href":"/api-reference/solutions/overview"},{"title":"Web research","deprecated":null,"version":null,"sidebarTitle":"Web research","openapi":"/openapi.json post /v1/solutions/gtm/web_research","href":"/api-reference/solutions/gtm/web_research"},{"title":"Read a web research result","deprecated":null,"version":null,"sidebarTitle":"Result","openapi":"/openapi.json get /v1/solutions/gtm/web_research/result","href":"/api-reference/solutions/gtm/web_research/result"},{"title":"Company intelligence","deprecated":null,"version":null,"sidebarTitle":"Company intelligence","openapi":"/openapi.json post /v1/solutions/gtm/company_intelligence","href":"/api-reference/solutions/gtm/company_intelligence"},{"title":"Read a company intelligence result","deprecated":null,"version":null,"sidebarTitle":"Result","openapi":"/openapi.json get /v1/solutions/gtm/company_intelligence/result","href":"/api-reference/solutions/gtm/company_intelligence/result"},{"title":"People search","deprecated":null,"version":null,"sidebarTitle":"People search","openapi":"/openapi.json post /v1/solutions/gtm/people_search","href":"/api-reference/solutions/gtm/people_search"},{"title":"Read a people search result","description":"Read normalized output, delivery status, and total charges for an existing people search request. Follow the result_url returned by the call.","deprecated":null,"version":null,"sidebarTitle":"Result","openapi":"/openapi.json get /v1/solutions/gtm/people_search/result","href":"/api-reference/solutions/gtm/people_search/result"},{"title":"SEO research","deprecated":null,"version":null,"sidebarTitle":"Seo research","openapi":"/openapi.json post /v1/solutions/gtm/seo_research","href":"/api-reference/solutions/gtm/seo_research"},{"title":"Read an SEO research result","description":"Read normalized output, delivery status, and total charges for an existing SEO research request. Follow the result_url returned by the call.","deprecated":null,"version":null,"sidebarTitle":"Result","openapi":"/openapi.json get /v1/solutions/gtm/seo_research/result","href":"/api-reference/solutions/gtm/seo_research/result"},{"title":"Social research","deprecated":null,"version":null,"sidebarTitle":"Social research","openapi":"/openapi.json post /v1/solutions/gtm/social_research","href":"/api-reference/solutions/gtm/social_research"},{"title":"Read a social research result","deprecated":null,"version":null,"sidebarTitle":"Result","openapi":"/openapi.json get /v1/solutions/gtm/social_research/result","href":"/api-reference/solutions/gtm/social_research/result"},{"title":"Market data","deprecated":null,"version":null,"sidebarTitle":"Market data","openapi":"/openapi.json post /v1/solutions/gtm/market_data","href":"/api-reference/solutions/gtm/market_data"},{"title":"Read a market data result","deprecated":null,"version":null,"sidebarTitle":"Result","openapi":"/openapi.json get /v1/solutions/gtm/market_data/result","href":"/api-reference/solutions/gtm/market_data/result"}]}]},{"tab":"CLI Reference","pages":[{"title":"CLI Reference","href":"/cli"}]},{"tab":"Integrations","pages":[{"title":"Integrations","href":"/integrations/overview"}]}]},"basePath":"","title":"SEO research - Glasser","buildId":"dpl_6cCEiK8XNNvaLBBkWzcBhdE9QfLC","deploymentId":"dpl_6cCEiK8XNNvaLBBkWzcBhdE9QfLC","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CLz2_Z5D.js","utils-7A5jZhOT.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BVWmkKuv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-4SOfrh0F.js","snippetPresets-CMc8KicP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ba9tX7z3.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Be8krXvv.js","shallow-CBC3K1uB.js","getApiPlaygroundDisplay-4tKcUAYo.js","CodeSnippet-C1Xa06ft.js","CodeSnippets-vqiz27A_.js","Page-DeQN5MDd.js","getPastedJson-NUwRfM32.js","icon-DkIVqWh9.js","MethodPill-qmhT7_wz.js","DuplicateIcon-_gWp1vhn.js","createIcon-NA1p_TVA.js","DynamicMarkdown-Bas9A7wq.js","SectionHeading-a1cS-24U.js","axios-vUo_bRtp.js","Markdown-D3ZTwq_a.js","clsx-BcghKhHb.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-B66mVNPp.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DmooSyTN.js"]}