SEO Keyword Metrics
SEO API documentation for REST and MCP, generated from the implemented API contract.
API selector
SEO API documentation for REST and MCP, generated from the implemented API contract.
Keyword metrics with explicit coverage for every input. Calls are idempotent by user, slug and UUID key. Free owner-only result retrieval: GET /api/skill-api/v1/skills/seo-keyword-metrics/calls/{callId} or nexscope_seo_call_result. Successful completed results remain available in owner call history. Seven-day source-freshness rules apply only to dependent requests. Missing values are not zero. Examples describe structure only and are not measured results.
/api/skill-api/v1/skills/seo-keyword-metrics/runnexscope_seo_keyword_metricsAll run endpoints require a user API key. Send it as a bearer token in the Authorization header.
Authorization: Bearer nk-xxxxxxxxxxxxxxxxx/api/skill-api/v1/skills/seo-keyword-metrics/runSend a JSON request body using the parameters described below.
| Slug | seo-keyword-metrics |
| Headers | Authorization: Bearer nk-...Content-Type: application/json |
| Request body | API-specific JSON object. |
| Response body | Complete HTTP envelope, including code and data. |
| Code | Description |
|---|---|
| 200 | HTTP request completed. Check JSON code; only 0 indicates business success or acceptance. |
| 400 | Request JSON or required API parameters are invalid. |
| 401 | API key is missing, invalid, or cannot be matched to a user. |
| 5xx | API execution or upstream service failed. |
/api/skill-api/v1/skills/seo-keyword-metrics/runSend a JSON request to execute this API and receive the documented response payload.
| Method | POST |
| Path | /api/skill-api/v1/skills/seo-keyword-metrics/run |
| Auth | Bearer API key |
| Content-Type | application/json |
Connect remote agents through the standard MCP 2025-11-25 Streamable HTTP endpoint. Use OAuth 2.1 Authorization Code with PKCE, or an API key for compatibility.
POST https://api.nexscope.ai/api/skill-api/v2/mcp
MCP-Protocol-Version: 2025-11-25
Content-Type: application/jsonOAuth clients request the mcp:tools scope. The endpoint's 401 response advertises protected-resource metadata for authorization discovery.
{
"jsonrpc": "2.0",
"id": "tool-call-1",
"method": "tools/call",
"params": {
"name": "nexscope_seo_keyword_metrics",
"arguments": {
"keywords": [
"nexscope"
],
"language": "en",
"market": "US"
}
}
}Existing API-key clients can continue using the compatibility endpoint. New integrations should use MCP v2.
GET / POST /api/skill-api/v1/mcpExecute the current API with your API key and JSON payload.
Send a real request with the same contract shown in the reference.
/api/skill-api/v1/skills/seo-keyword-metrics/runhttps://api.nexscope.ai/api/skill-api/v1/skills/seo-keyword-metrics/calls/{resultId}nexscope_seo_keyword_metricscurl -X POST \
https://api.nexscope.ai/api/skill-api/v1/skills/seo-keyword-metrics/run \
-H "Authorization: Bearer nk-..." \
-H "Content-Type: application/json" \
-d '{ "keywords": [ "nexscope" ], "language": "en", "market": "US" }'No response yet. Run the request to see the response here.
Use the identifier returned by Run API. The tester selects the correct result query automatically, and result queries do not spend credits.
No task result yet. Query the task to see the generated output here.
Replace YOUR_API_KEY, then run this command in your terminal.
curl -X POST 'https://api.nexscope.ai/api/skill-api/v1/skills/seo-keyword-metrics/run' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keywords": [
"nexscope"
],
"language": "en",
"market": "US"
}'| Name | Type | Required | Description |
|---|---|---|---|
keywords | array | required | Keywords value used by this API operation. Minimum items: 1 Maximum items: 20 |
keywords[] | string | required | Trimmed, at most ten whitespace-separated words. Minimum length: 1 Maximum length: 80 |
language | string | required | Language value used by this API operation. Allowed: en |
market | string | required | Market value used by this API operation. Allowed: US |
{
"keywords": [
"nexscope"
],
"language": "en",
"market": "US"
}Example response envelope from the documented SEO API contract.
{
"code": 0,
"cost": "-1",
"data": {
"callId": "synthetic-call",
"completedAt": null,
"coverage": {
"missing": [
{
"field": "synthetic",
"reason": "UPSTREAM_FIELD_MISSING"
}
],
"status": "PARTIAL"
},
"requestedAt": "123",
"result": {
"items": [
{
"competition": 9007199254740992,
"competitionLevel": "synthetic",
"cpcUsd": "synthetic",
"dataUpdatedAt": 9007199254740992,
"inputIndex": 1,
"inputKeyword": "synthetic",
"keywordDifficulty": 9007199254740992,
"missing": [
{
"field": "synthetic",
"reason": "synthetic"
}
],
"monthlySearches": [
{
"month": 1,
"searchVolume": 9007199254740992,
"year": 1
}
],
"normalizedKeyword": "synthetic",
"searchVolume": 9007199254740992,
"status": "synthetic"
}
],
"language": "synthetic",
"market": "synthetic"
},
"schemaVersion": "synthetic",
"source": "synthetic",
"status": "PARTIAL",
"usage": {
"billingStatus": "UNAPPROVED",
"chargedCredits": "0"
}
},
"msg": null,
"time": "2026-01-01 00:00:00",
"traceId": "synthetic-trace",
"ts": "9007199254740993"
}| Name | Type | Required | Description |
|---|---|---|---|
code | integer | required | 0 is a successful envelope; inspect data.status separately. Allowed: 0, 42008, 42009 |
cost | string | required | Elapsed processing milliseconds; not price. -1 for non-web context. |
data | object | required | Data value used by this API operation. |
data.callId | string | optional | Call id value used by this API operation. Format: uuid |
data.completedAt | string | integer | null | optional | UTC epoch milliseconds. |
data.coverage | object | optional | Coverage value used by this API operation. |
data.coverage.missing | array | optional | Missing value used by this API operation. |
data.coverage.missing[] | object | required | Item in data coverage missing. |
data.coverage.missing[].field | string | optional | Field value used by this API operation. |
data.coverage.missing[].reason | string | optional | Reason value used by this API operation. |
data.coverage.status | string | optional | Status value used by this API operation. |
data.reason | string | optional | Stable reason on errors 42001 through 42011; accepted errors retain callId. |
data.requestedAt | string | integer | null | optional | UTC epoch milliseconds. |
data.result | object | null | required | Result value used by this API operation. |
data.result.items | array | optional | Items value used by this API operation. |
data.result.items[] | object | required | Item in data result items. |
data.result.items[].competition | number | null | optional | Competition value used by this API operation. |
data.result.items[].competitionLevel | string | null | optional | Competition level value used by this API operation. |
data.result.items[].cpcUsd | string | null | optional | Cpc usd value used by this API operation. |
data.result.items[].dataUpdatedAt | integer | null | optional | Data updated at value used by this API operation. |
data.result.items[].inputIndex | integer | null | optional | Input index value used by this API operation. |
data.result.items[].inputKeyword | string | null | optional | Input keyword value used by this API operation. |
data.result.items[].keywordDifficulty | number | null | optional | Keyword difficulty value used by this API operation. |
data.result.items[].missing | array | optional | Missing value used by this API operation. |
data.result.items[].missing[] | object | required | Item in data result items[] missing. |
data.result.items[].missing[].field | string | null | optional | Field value used by this API operation. |
data.result.items[].missing[].reason | string | null | optional | Reason value used by this API operation. |
data.result.items[].monthlySearches | array | optional | Monthly searches value used by this API operation. |
data.result.items[].monthlySearches[] | object | required | Item in data result items[] monthlySearches. |
data.result.items[].monthlySearches[].month | integer | null | optional | Month value used by this API operation. |
data.result.items[].monthlySearches[].searchVolume | integer | null | optional | Search volume value used by this API operation. |
data.result.items[].monthlySearches[].year | integer | null | optional | Year value used by this API operation. |
data.result.items[].normalizedKeyword | string | null | optional | Normalized keyword value used by this API operation. |
data.result.items[].searchVolume | integer | null | optional | Search volume value used by this API operation. |
data.result.items[].status | string | optional | Status value used by this API operation. Allowed: AVAILABLE, NO_COVERAGE |
data.result.language | string | null | optional | Language value used by this API operation. |
data.result.market | string | null | optional | Market value used by this API operation. |
data.retryable | boolean | optional | Retryable value used by this API operation. Constant: false |
data.schemaVersion | string | optional | Schema version value used by this API operation. Constant: 1.0 |
data.source | string | optional | Source value used by this API operation. Constant: dataforseo |
data.status | string | optional | Status value used by this API operation. Allowed: SUCCESS, PARTIAL, EMPTY, PROCESSING, UNKNOWN, FAILED |
data.usage | object | null | optional | Usage value used by this API operation. |
data.usage.billingStatus | string | null | optional | Billing status value used by this API operation. |
data.usage.chargedCredits | string | integer | null | optional | Charged credits value used by this API operation. |
msg | string | null | required | Available upstream msg/errmsg/message is preferred for success and failure; Chinese is translated to English. Missing successful message is null. Platform-only errors and task states use platform English. Message text never determines success or retry. |
time | string | required | yyyy-MM-dd HH:mm:ss |
traceId | string | null | required | Trace id value used by this API operation. |
ts | string | required | Epoch milliseconds; global long serializer. |
code 0 confirms acceptance. Use data.callId to query the same request; processing is not completion.
| Name | Type | Required | Description |
|---|---|---|---|
code | integer | required | 0 is a successful envelope; inspect data.status separately. Constant: 0 |
cost | string | required | Elapsed processing milliseconds; not price. -1 for non-web context. |
data | object | required | Data value used by this API operation. |
data.callId | string | null | required | Call id value used by this API operation. |
data.reason | string | required | Reason value used by this API operation. Constant: IN_PROGRESS |
data.retryable | boolean | optional | Retryable value used by this API operation. |
data.status | string | required | Status value used by this API operation. Constant: PROCESSING |
data.taskId | string | null | optional | Task id value used by this API operation. |
msg | string | null | required | Available upstream msg/errmsg/message is preferred for success and failure; Chinese is translated to English. Missing successful message is null. Platform-only errors and task states use platform English. Message text never determines success or retry. |
time | string | required | yyyy-MM-dd HH:mm:ss |
traceId | string | null | required | Trace id value used by this API operation. |
ts | string | required | Epoch milliseconds; global long serializer. |
| Name | Type | Required | Description |
|---|---|---|---|
code | integer | required | 0 is a successful envelope; inspect data.status separately. |
cost | string | required | Elapsed processing milliseconds; not price. -1 for non-web context. |
data | object | required | Data value used by this API operation. |
data.callId | string | null | required | Call id value used by this API operation. |
data.reason | string | null | required | Reason value used by this API operation. |
data.retryable | boolean | optional | Retryable value used by this API operation. |
data.status | string | null | required | Status value used by this API operation. |
data.taskId | string | null | optional | Task id value used by this API operation. |
msg | string | null | required | Available upstream msg/errmsg/message is preferred for success and failure; Chinese is translated to English. Missing successful message is null. Platform-only errors and task states use platform English. Message text never determines success or retry. |
time | string | required | yyyy-MM-dd HH:mm:ss |
traceId | string | null | required | Trace id value used by this API operation. |
ts | string | required | Epoch milliseconds; global long serializer. |
A response with PROCESSING and a callId means the result is still being prepared. Use the result query below with the returned identifier. This lookup reads the stored result and does not spend credits.
curl -X GET https://api.nexscope.ai/api/skill-api/v1/skills/seo-keyword-metrics/calls/{callId} \
-H "Authorization: Bearer nk-xxxxxxxxxxxxxxxxx"| Code | Description |
|---|---|
| 200 | HTTP request completed. Check JSON code; only 0 indicates business success or acceptance. |
| 400 | Request JSON or required API parameters are invalid. |
| 401 | API key is missing, invalid, or cannot be matched to a user. |
| 5xx | API execution or upstream service failed. |
Source, freshness, coverage, rate limits, and estimation notes are not specified in this API definition unless they appear in the request or response field documentation above. Do not assume official marketplace data or real-time freshness when it is not explicitly documented.