Rankwise logoRankwise
Free audit
PricingCompareResources
Sign inContinue with GoogleStart free trial

Footer

Rankwise

Articles that get you found on Google and named by AI tools, checked every week.

One article a day, written for you

Product

  • Pricing
  • Templates
  • Developers
  • WordPress guide

Solutions

  • For agencies
  • For in-house SEO
  • For founders
  • Use Cases
  • Integrations
  • Compare
  • Alternatives

Resources

  • Resources
  • Articles
  • Guides
  • Learn
  • Glossary
  • Topics
  • Free tools

Company

  • About
  • Contact
ImpressumTermsPrivacy

© 2026 Rankwise. All rights reserved. Built by Founder Ventures.

Tracking ChatGPT · Perplexity · Claude · Google AI Overviews
REST API · v1 · read-only by default

Pull your AI-visibility data into your own stack

A REST API over the data Rankwise already computes: citations, Share of Voice, planner keywords, articles and Search Console numbers. Wire it into Looker Studio, your BI, or agency reporting. A key you create with changes allowed can also pause automatic articles, add keywords, move planner cards and replace article text, all free. A key with fresh audits allowed can re-audit a domain within a daily cap you set.

Get your API keyBrowse endpoints
Base path
/api/v1
Auth
Bearer rw_live_…
Plan
Growth and above
Quick start

Three steps to your first response

  1. 1

    Create a key

    In the dashboard, go to Settings → API and create a key. The secret is shown once, so store it in a secret manager.

  2. 2

    Make a request

    Send the key as a bearer token against any endpoint, passing ?domain= for a domain you track.

    Request
    curl "https://tryrankwise.com/api/v1/citations?domain=example.com" \
      -H "Authorization: Bearer rw_live_your_key_here"
  3. 3

    Get JSON back

    Every endpoint returns application/json with an X-Rankwise-Version header. Responses are freshly workspace-scoped per request (no-store).

Authentication

Bearer keys, hashed at rest

Every request except the discovery index sends a workspace API key as a bearer token.

Authorization: Bearer rw_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

A key is rw_live_ + 32 random bytes, shown to you exactly once, at creation. Only its SHA-256 hash is stored: the raw secret is never persisted and can't be recovered. Lose it, mint a new one.

Verification hashes the presented key and compares in constant time. Revoked keys authenticate nothing but are retained for audit. Keys are created by workspace admins only.

Plan gate
  • Free✕ 402 · upgrade required
  • Starter✕ 402 · upgrade required
  • Free trial (3-day)✓ Full access (evaluate it)
  • Growth✓ Full access
  • Scale✓ Full access

A key minted on a paid plan that later downgrades stops working (returns 402), by design: the key isn't deleted, the plan just no longer permits it.

Endpoints

Read everything, change what you allow

All endpoints return JSON. ?domain= accepts a bare hostname; schemes, www., and paths are normalized off.

GET/api/v1public

Discovery index

A self-describing catalog of every endpoint plus the MCP pointer. No key required, just the quickest “is this live?” check.

Response
{
  "object": "api_index",
  "version": "1",
  "endpoints": [
    { "path": "/api/v1/citations", "method": "GET" },
    { "path": "/api/v1/share-of-voice", "method": "GET" },
    { "path": "/api/v1/dimensions", "method": "GET" },
    { "path": "/api/v1/events", "method": "GET" },
    { "path": "/api/v1/key", "method": "GET" },
    { "path": "/api/v1/audits", "method": "POST" }
  ],
  "agents": { "mcp": "/api/mcp" }
}
GET/api/v1/citations key required

Citations

Latest citation status per query × engine, with the URLs each engine cited and a rolled-up citation rate.

domain
required (a domain you track)
Response
{
  "object": "citations",
  "domain": "example.com",
  "generatedAt": "2026-07-07T12:00:00.000Z",
  "summary": {
    "queriesTotal": 20,
    "queriesCited": 8,
    "citationRate": 40
  },
  "surfaces": [
    { "surface": "perplexity", "label": "Perplexity",
      "cited": 5, "probed": 12, "rate": 42 }
  ],
  "queries": [
    {
      "query": "best crm for startups",
      "cited": true,
      "position": 2,
      "surfaces": [
        { "surface": "perplexity", "status": "cited",
          "citedUrls": ["https://example.com/crm-guide"] }
      ]
    }
  ]
}
GET/api/v1/share-of-voice key required

Share of Voice

The latest measured AI Share-of-Voice snapshot, you vs. competitors. Returns measured: false (with a note) until a snapshot exists.

domain
required (a domain you track)
Response
{
  "object": "share_of_voice",
  "domain": "example.com",
  "measured": true,
  "shareOfVoice": 34,
  "leaderboard": [
    { "domain": "example.com", "isOwn": true,
      "citations": 12, "mentions": 5 },
    { "domain": "competitor.com", "isOwn": false,
      "citations": 20, "mentions": 8 }
  ]
}
GET/api/v1/dimensions key required

Dimensions

Latest per-dimension AI-visibility scores with confidence bands and the top recommendations behind each.

domain
required (a domain you track)
Response
{
  "object": "dimensions",
  "domain": "example.com",
  "dimensions": [
    {
      "dimension": "crawler_access",
      "label": "Crawler access",
      "score": 90,
      "confidence": "high",
      "recommendations": ["Allow GPTBot in robots.txt"]
    }
  ]
}
GET/api/v1/events key required

Visibility events

Workspace events, newest first: citations won/lost, fixes proposed, goals reached. Poll with ?since set to the newest createdAt you've seen.

since
optional (ISO-8601 lower bound)
limit
optional (default 50, max 100)
Response
{
  "object": "events",
  "count": 2,
  "events": [
    {
      "type": "citation_won",
      "domain": "example.com",
      "createdAt": "2026-07-06T00:00:00.000Z",
      "payload": {
        "queryText": "best crm for startups",
        "surface": "perplexity"
      }
    }
  ]
}
GET/api/v1/key key required

Your key

Which scopes the key carries. For a key with fresh audits allowed, also the credit cost per audit, the daily cap and how much of it is left today.

Response
{
  "object": "api_key",
  "scopes": ["read", "audit:run"],
  "audits": {
    "enabled": true,
    "credits_per_audit": 1,
    "daily_cap": 50,
    "remaining_today": 47,
    "credits_remaining": 212
  }
}
POST/api/v1/audits key required

Start a fresh audit (opt-in, spends credits)

Re-crawls and re-scores one domain you track, for 1 plan credit. Only a key created with "Allow fresh audits" ticked (scope audit:run) can call it; every other key gets 403. Send a unique Idempotency-Key header and reuse it on a retry, so a retry never charges twice. Each key has a daily cap you set when you create it.

Idempotency-Key
required header, unique per audit
domain
required, in the JSON body
Response
{
  "object": "audit",
  "domain": "example.com",
  "status": "queued",
  "credits_charged": 1,
  "credits_remaining": 211,
  "audits_today": 4,
  "daily_cap": 50,
  "replayed": false
}
GET/api/v1/sites key required

Your site

The site the key reaches: its id, tracked domains, and whether automatic articles are on and paused. Pause or resume with POST /api/v1/sites/{site_id}/pause and /resume (a key with changes allowed).

Response
{
  "sites": [
    {
      "id": "8f1c…",
      "name": "Acme",
      "domains": [{ "id": "d41a…", "domain": "acme.com" }],
      "automatic_articles": {
        "mode": "full_auto",
        "articles_per_week": 7,
        "paused": false
      }
    }
  ]
}
GET/api/v1/keywords key required

Keywords

The keywords in your Content Planner, one per card, with day, state, volume and difficulty. Add ?format=csv for a CSV file. POST up to 50 keywords to add them as cards (free; keywords already planned are skipped).

state
optional (planned, writing, review, published, failed)
format
optional (csv)
Response
{
  "keywords": [
    {
      "id": "c2d9…",
      "day": "2026-11-02",
      "title": "SEO Content Audit",
      "keyword": "seo content audit",
      "state": "planned",
      "volume": 170,
      "difficulty": 35
    }
  ],
  "total": 1
}
GET/api/v1/articles key required

Articles

Your articles, newest first. GET /api/v1/articles/{article_id} reads one (add ?include_html=true for the full body). PUT /api/v1/articles/{article_id} replaces the title, meta description, slug or body, and POST /api/v1/articles/bulk-replace does up to 50 at once (a key with changes allowed).

status
optional (ready, generating, published, failed)
page, page_size
optional (page size up to 50)
Response
{
  "articles": [
    {
      "id": "a7e2…",
      "title": "SEO Content Audit: A Step by Step Guide",
      "status": "published",
      "published_url": "https://acme.com/blog/seo-content-audit"
    }
  ],
  "total": 1,
  "page": 1,
  "page_size": 20
}
GET/api/v1/planner key required

Content Planner

Your planner cards by day. Pass from and to (YYYY-MM-DD, up to 120 days). PATCH /api/v1/planner/cards/{card_id} with a day moves a card that is not written yet (a key with changes allowed).

from, to
optional (YYYY-MM-DD)
Response
{
  "from": "2026-10-01",
  "to": "2026-12-31",
  "cards": [
    { "id": "c2d9…", "day": "2026-11-02",
      "title": "SEO Content Audit", "state": "planned" }
  ],
  "unscheduled": []
}
GET/api/v1/gsc/summary key required

Search Console summary

Clicks, impressions and your best articles over the last 28 days, from your synced Search Console data.

Response
{
  "connected": true,
  "days": 28,
  "clicks": 1240,
  "impressions": 48100,
  "best_articles": [
    { "title": "SEO Content Audit", "url": "https://acme.com/blog/seo-content-audit",
      "clicks": 310, "impressions": 9200 }
  ]
}
GET/api/v1/usage key required

Usage

Your plan, credits and limits, plus this key's scopes, its rate-limit windows and which tool groups it may use.

Response
{
  "plan": "growth",
  "credits": 212,
  "api": {
    "scopes": ["read"],
    "rate_limits": {
      "minute": { "limit": 120, "remaining": 119 },
      "day": { "limit": 10000, "remaining": 9870 }
    }
  }
}
Errors

One envelope, documented statuses

{
  "error": {
    "code": "invalid_key",
    "message": "That API key is invalid or has been revoked."
  }
}
  • 401missing_keyNo Authorization: Bearer header
  • 401invalid_keyUnknown, malformed, or revoked key
  • 402upgrade_requiredValid key, but the workspace plan isn't API-tier
  • 404domain_not_found?domain= isn't a domain this workspace tracks
  • 400missing_domainA domain-scoped endpoint called without ?domain=
  • 429rate_limitedPer-key rate limit tripped, back off and retry
  • 403insufficient_scopePOST /audits with a key created without fresh audits
  • 402out_of_creditsPOST /audits with no plan credits left; carries upgrade_url
  • 429daily_cap_reachedThe key's daily audit cap is used up; resets at 00:00 UTC

Rate limiting

Each key may make 120 requests a minute and 10,000 a day (UTC). Every response carries RateLimit and RateLimit-Policy headers. A 429 adds Retry-After: wait that many seconds, then retry.

Scoping & privacy

A key reads only its own workspace: domain resolution never falls through to another tenant. Responses go through explicit serializers that whitelist every field; internal ids and raw payloads are never echoed.

Building for an AI agent?

Don't script this REST API. Connect the MCP endpoint at /api/mcp directly to an MCP-capable model. MCP is the agent-ready surface (tool discovery, structured tool calls); this REST API is for dashboards, BI, and glue scripts.

Without sign-in, the public tools check a site's AI crawler access and readiness and search our guides. Sign in with OAuth (Claude and ChatGPT do this for you) and the agent works in one workspace you pick on the consent screen, with your role in it. You grant up to three scopes: read (domains, scores, citations, briefs, articles), write (free changes, and publishing an article you name) and spend (anything that uses credits or the monthly AI check allowance). Spend and publish tools take an idempotency_key, so a retry never charges twice. A read-only rw_live_ key works too. Billing, API keys, members and CMS connections stay in the app. Disconnect an app any time in workspace settings.

Example prompts

  • “Can AI crawlers like GPTBot read example.com?”
  • “Score example.com for AI search readiness.”
  • “Is this page easy for AI to cite: https://example.com/blog/post”
  • “Which of my tracked questions do AI engines cite us for?”
  • “Add 'best crm for startups' as a tracked question.”
  • “Draft a brief for my biggest citation gap, but ask before approving it.”
Open the MCP endpoint

Ready to pull your data?

Create a key in seconds. The API is available on the Growth plan and above, and in the 3-day free trial, so you can evaluate it end to end.

Get your API key