SEO

Get rankings

Each tracked keyword's Google position on every day it was checked over the range.

GEThttps://api.vidrys.com/v1/projects/{project_id}/seo/rankings
Plan
Track and above
Key
read
Rate cost
2 units

Positions are checked at the plan's cadence — weekly on Track, every four days on Grow, daily on Scale and Custom — within the top 20. A day with no check has no point.

Authorization

Sent as a header on every request.

Authorizationstringrequired

A Vidrys API key, sent as Bearer vidrys_sk_…. A read key is enough. See Authentication.

Path parameters

project_idstringrequired

The project's id, from List projects.

Query parameters

rangeenum<string>default 30d

How far back to measure, counted from the newest run.

Values:7d30d90d

Response · 200

application/json

rangestring

The range read.

Values:7d30d90d

keywordsobject[]

One series per keyword with a check in the range.

+Show child attributes
keyword_idstring

Keyword id.

keywordstring

The search term.

pointsobject[]

One per day the position was checked, oldest first.

+Show child attributes
datestring

Day, as YYYY-MM-DD.

positionintegernullable

Position within the top 20; null when not in it.

ai_overviewbooleannullable

Whether the latest check saw an AI Overview. Null: never checked.

Errors

403 plan_feature_unavailableThe feature is on a higher plan. Bulk exports and webhooks are Custom-only.
404 not_foundThe project or item doesn't exist in this workspace. A project from another workspace also returns 404, never 403.
422 invalid_requestA parameter or body field is missing or has the wrong type or value. The message names the field. Also returned when a write would pass the plan's prompt limit.
401 unauthorizedNo key was sent, or the key is unknown, revoked or expired, or the member who created it has left the workspace or been deactivated.
402 plan_requiredThe workspace's plan doesn't include API access. It's included on every plan from Track up — Solo is the one without it.
403 workspace_not_approvedThe workspace is still waiting for approval, or wasn't approved.
429 rate_limitedToo many requests this minute. Wait for the number of seconds in the `Retry-After` header, then retry.

Every code, and what to retry, is in Errors.