SERP Opportunity Keywords
const url = 'https://sitechecker.pro/api/v1/serp_opportunity_keywords?project_id=12345&opportunity_id=opp_aHR0cHM6Ly93d3cuc2VvcHRpbWVyLmNvbS8&limit=100&offset=0';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://sitechecker.pro/api/v1/serp_opportunity_keywords?project_id=12345&opportunity_id=opp_aHR0cHM6Ly93d3cuc2VvcHRpbWVyLmNvbS8&limit=100&offset=0' \ --header 'Authorization: Bearer <token>'Returns the keywords for which one selected SERP opportunity URL ranks.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Example
12345Project ID.
Example
opp_aHR0cHM6Ly93d3cuc2VvcHRpbWVyLmNvbS8Stable SERP opportunity id returned by serp_opportunities (opp_… value). May expire after the monthly snapshot regeneration (404).
Sort as “
Page size (max 100).
Pagination offset.
Responses
Section titled “Responses”Paginated keywords for the opportunity URL
object
Keyword for which the selected opportunity URL ranks in the monthly snapshot. tracked_keyword_id is null in V1.
object
Tracked keyword id, when the keyword is tracked for this project.
Keyword text.
Search engine the keyword is tracked on.
Device the keyword is tracked on.
Id of the tracked location.
Display name of the tracked location.
Country the keyword is tracked for, as ISO-3166-1 alpha-2.
Language the keyword is tracked for, as ISO-639-1.
Position the opportunity URL holds for this keyword.
Monthly search volume.
Keyword Golden Ratio for the keyword — lower means less competition for the volume.
Pagination meta plus monthly snapshot dates.
object
Rows matching the request, before pagination.
Page size that was applied.
Pagination offset that was applied.
Date of the monthly snapshot these rows come from.
Date the next snapshot is due.
Example
{ "data": [ { "tracked_keyword_id": null, "keyword": "seo audit", "search_engine": "google", "device": "desktop", "location_id": "loc_TmV3IFlvcmssVW5pdGVkIFN0YXRlcw", "location_name": "New York,United States", "country_code": "US", "language_code": "en", "position": 1, "volume": 6600, "kgr": 8.5 } ], "meta": { "total": 131, "limit": 50, "offset": 0, "snapshot_date": "2026-04-25", "next_snapshot_date": "2026-05-25" }}Missing or invalid API key
Returned as INVALID_API_KEY when the key is missing or unknown, and as REVOKED_API_KEY when the key exists but was revoked — the latter needs a new key.
object
object
Example
{ "error": { "code": "INVALID_API_KEY", "message": "Invalid or missing API key." }}No active API entitlement for the account, or the project belongs to another account
Returned as MISSING_PUBLIC_API_ACCESS when the account has no active API entitlement, and as ACCESS_DENIED when the requested project belongs to another account.
object
object
Example
{ "error": { "code": "MISSING_PUBLIC_API_ACCESS", "message": "API access is not available: the account has no active API entitlement." }}Project or opportunity not found
The exact missing resource is in error.code: PROJECT_NOT_FOUND, SEGMENT_NOT_FOUND, CRAWL_NOT_FOUND, KEYWORD_NOT_FOUND, OPPORTUNITY_NOT_FOUND, SNAPSHOT_UNAVAILABLE or NOT_FOUND.
object
object
Example
{ "error": { "code": "PROJECT_NOT_FOUND", "message": "Project not found." }}Validation error
Rejected query parameters. error.code is VALIDATION_ERROR for parameter validation (including a query parameter the endpoint does not accept), or INVALID_DATE_RANGE / INVALID_FILTER / INVALID_EVENT_TYPE / UNSUPPORTED_FILTER / UNSUPPORTED_DIMENSION / UNSUPPORTED_METRIC / UNSUPPORTED_SCOPE / SEGMENT_FILTER_UNSUPPORTED for module-specific rules.
object
object
Example
{ "error": { "code": "VALIDATION_ERROR", "message": "project_id is required." }}Rate limit exceeded — retry after the interval in the Retry-After header
object
object
Example
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded. Try again later." }}Internal server error
object
object
Example
{ "error": { "code": "INTERNAL_ERROR", "message": "Internal server error." }}