A read-only REST API over the data Rankwise already computes: citations, Share of Voice, dimension scores, and visibility events. Wire it into Looker Studio, your BI, or agency reporting without screen-scraping.
In the dashboard, go to Settings → API and create a key. The secret is shown once, so store it in a secret manager.
Send the key as a bearer token against any endpoint, passing ?domain= for a domain you track.
curl "https://tryrankwise.com/api/v1/citations?domain=example.com" \
-H "Authorization: Bearer rw_live_your_key_here"Every endpoint returns application/json with an X-Rankwise-Version header. Responses are freshly workspace-scoped per request (no-store).
Every request except the discovery index sends a workspace API key as a bearer token.
Authorization: Bearer rw_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXA 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.
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.
All endpoints return JSON. ?domain= accepts a bare hostname; schemes, www., and paths are normalized off.
/api/v1publicA self-describing catalog of every endpoint plus the MCP pointer. No key required, just the quickest “is this live?” check.
{
"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" }
],
"agents": { "mcp": "/api/mcp" }
}/api/v1/citations key requiredLatest citation status per query × engine, with the URLs each engine cited and a rolled-up citation rate.
{
"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"] }
]
}
]
}/api/v1/share-of-voice key requiredThe latest measured AI Share-of-Voice snapshot, you vs. competitors. Returns measured: false (with a note) until a snapshot exists.
{
"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 }
]
}/api/v1/dimensions key requiredLatest per-dimension AI-visibility scores with confidence bands and the top recommendations behind each.
{
"object": "dimensions",
"domain": "example.com",
"dimensions": [
{
"dimension": "crawler_access",
"label": "Crawler access",
"score": 90,
"confidence": "high",
"recommendations": ["Allow GPTBot in robots.txt"]
}
]
}/api/v1/events key requiredWorkspace events, newest first: citations won/lost, fixes proposed, goals reached. Poll with ?since set to the newest createdAt you've seen.
{
"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"
}
}
]
}{
"error": {
"code": "invalid_key",
"message": "That API key is invalid or has been revoked."
}
}missing_keyNo Authorization: Bearer headerinvalid_keyUnknown, malformed, or revoked keyupgrade_requiredValid key, but the workspace plan isn't API-tierdomain_not_found?domain= isn't a domain this workspace tracksmissing_domainA domain-scoped endpoint called without ?domain=rate_limitedPer-key rate limit tripped, back off and retryBest-effort per key: roughly 120 requests/minute sustained with a burst allowance. It's a courtesy limiter, not a hard SLA, so don't design around exact numbers, and back off on 429.
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.
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.
Create a key in seconds. The API is available on the Growth plan and above, trials included, so you can evaluate it end-to-end.
Get your API key