# authorship: generated by API Evangelist tooling. Stamped 2026-08-18
# on the file's own generator header (roadmap#64). An unmarked file is
# NOT assumed to be ours -- absence of evidence was never stamped.
x-method: generated
overlay: 1.0.0
info:
title: API Evangelist enhancements for DataForSEO AiOptimization KeywordsData API
version: 1.0.0
extends: openapi/dataforseo-keywordsdata-api-openapi.yml
x-generated: '2026-08-13'
x-method: generated
x-source: >-
Derived from openapi/dataforseo-keywordsdata-api-openapi.yml plus the artifacts in this repo
(conventions/, errors/, authentication/, lifecycle/, sandbox/, mcp/).
Never mutates the harvested specification.
actions:
- target: $.info
update:
x-apievangelist-provider: dataforseo
x-apievangelist-artifacts:
authentication: authentication/dataforseo-authentication.yml
conventions: conventions/dataforseo-conventions.yml
errors: errors/dataforseo-problem-types.yml
lifecycle: lifecycle/dataforseo-lifecycle.yml
rate_limits: rate-limits/dataforseo-rate-limits.yml
sandbox: sandbox/dataforseo-sandbox.yml
data_model: data-model/dataforseo-data-model.yml
mcp: mcp/dataforseo-mcp.yml
x-apievangelist-operation-count: 70
x-apievangelist-contact: https://dataforseo.com/contact
x-apievangelist-terms: https://dataforseo.com/terms-of-service/
- target: $.servers
update:
- url: https://api.dataforseo.com
description: Production. Charged per task against the prepaid balance.
- url: https://sandbox.dataforseo.com
description: >-
Free sandbox. Identical paths and payloads, dummy data, same
credentials. See sandbox/dataforseo-sandbox.yml.
- target: $.components.securitySchemes.basicAuth
update:
description: >-
HTTP Basic with the API login and password from
https://app.dataforseo.com/api-access. The API password is generated by
DataForSEO and differs from the account password. Credentials cannot be
passed as URL parameters.
x-credentials-url: https://app.dataforseo.com/api-access
x-docs: https://docs.dataforseo.com/v3/auth/
- target: $.info
update:
x-error-semantics:
note: >-
This API returns HTTP 200 for nearly every outcome. The authoritative
result is the numeric status_code / status_message pair, present both
at the top level of the response envelope and inside each element of
tasks[]. Branch on status_code, not on HTTP status.
http_codes_used: [200, 401, 402, 404, 500]
code_range: 10000-60000
catalog: errors/dataforseo-problem-types.yml
x-rate-limit-semantics:
limit: 2000 requests per minute per account
exhaustion_status_code: 40202
concurrency_status_code: 40209
headers: none
x-idempotency:
supported: false
note: >-
No idempotency key is documented. Record the task id before POSTing and
poll tasks_ready / id_list before retrying — retries are billable.
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.