Keyword API

Measure the DR demanded by a live Google top 10, find DR-constrained opportunities, and manage stored keyword targets.

Research

GET/keywords?keyword=:keyword&domain=:domain

Research keyword difficulty by DR

Returns the live US Google top 10, each ranking domain's DR, median DR needed, and lowest-DR entry point. domain is optional and adds your DR, gap, and verdict.

Same call in the CLIvdr keywords:research "best crm" --domain example.com
Request
curl "https://verifieddr.com/api/v1/keywords?keyword=best+crm&domain=example.com" \
  -H "Authorization: Bearer vdr_your_api_key"
Response
{
  "report": {
    "keyword": "best crm", "cached": true,
    "results": [{ "position": 1, "domain": "leader.example", "dr": 78 }],
    "medianDr": 64, "minDr": 48,
    "user": { "domain": "example.com", "dr": 41, "gap": 23, "tier": "ultra" }
  }
}
  • Needs a running growth program. A program gate returns 402 with upgradeUrl, requiredPlan, and blockedFeature.
  • The tier values boost, advanced, and ultra are historical verdict labels, not current program names.
GET/keywords/suggestions/:domain

Find winnable keywords

Returns non-brand keywords the domain already ranks 4–30 for, ordered by estimated traffic value. It works for any domain, including competitors.

Same call in the CLIvdr keywords:suggest example.com
Request
curl https://verifieddr.com/api/v1/keywords/suggestions/example.com \
  -H "Authorization: Bearer vdr_your_api_key"
Response
{
  "domain": "example.com",
  "suggestions": [{ "keyword": "crm for solo founders", "position": 12, "searchVolume": 720 }]
}

Tracked keywords

All tracked-keyword operations are owner-scoped. Reads use stored snapshots and never trigger a SERP fetch.

GET/sites/:slug/keywords

List tracked keywords

Returns saved targets with stored difficulty snapshots, limits, quota, and 28-day GSC impressions when Search Console is connected.

Same call in the CLIvdr keywords:tracked example.com
Request
curl https://verifieddr.com/api/v1/sites/example.com/keywords \
  -H "Authorization: Bearer vdr_your_api_key"
Response
{
  "website": { "slug": "example-com" },
  "keywords": [{ "id": "target-id", "keyword": "best crm", "snapshot": { "medianDr": 64, "gap": 23 } }],
  "limit": 25,
  "quota": { "used": 1 }
}
POST/sites/:slug/keywords

Add or refresh a tracked keyword

Send {"keyword":"..."} to add a target, or {"action":"refresh","id":"..."} to re-snapshot one. A cache miss uses the stricter live-SERP limiter.

Same call in the CLIvdr keywords:tracked example.com --add "best crm"
Request
curl https://verifieddr.com/api/v1/sites/example.com/keywords \
  -X POST \
  -H "Authorization: Bearer vdr_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"best crm"}'
Response
{ "ok": true, "target": { "id": "target-id", "keyword": "best crm" } }
DELETE/sites/:slug/keywords?id=:id

Remove a tracked keyword

Removes one saved target by the ID returned by the list endpoint.

Same call in the CLIvdr keywords:tracked example.com --remove target-id
Request
curl "https://verifieddr.com/api/v1/sites/example.com/keywords?id=target-id" \
  -X DELETE \
  -H "Authorization: Bearer vdr_your_api_key"
Response
{ "ok": true, "removed": "target-id" }

Build your next trusted connection

Find websites that share your topic and serve your readers. Check the evidence, choose a partner and track what changes.

Start my DR growth planTrack DR and TrueDR each week for free. No credit card required.Already have an account? Sign in