Product API & MCP
Your visibility data, where you already work.
A read-only HTTP API over everything the dashboard shows, and an MCP server over the same payloads — so the question “where do we stand this week?” can be answered by a script, a warehouse job, or the assistant you had open anyway.
Start here
One call tells you the key works.
GET /api/v1 is a discovery document. It costs no computation, and it names the workspace the key resolved to — the one thing worth confirming before you trust any figure that follows it.
# create a key in Settings › API keys curl https://rankyourbrand.ai/api/v1 \ -H "Authorization: Bearer ryb_…" { "version": "v1", "workspace": { "brand": "Northwind Running", "configured": true }, "scopes": ["read"], "endpoints": [ … ] }
A key for a workspace nobody has set up yet is still a working key: every endpoint answers, and says not_configured.
The surface
Five endpoints, read-only.
Nothing here writes. The same figures the screens show, computed the same way, so a report you build cannot quietly disagree with the dashboard it came from.
/api/v1/visibilityVisibility, share of voice, per-engine figures and the daily series.range · from · to · engine/api/v1/promptsEach tracked prompt, every engine’s latest answer, and why it counted.range · from · to/api/v1/citationsCited domains, owned share, and the owned-vs-earned basis.range · from · to/api/v1/actionsSaved actions with status, category and the page each one changes.—/api/v1/demandSearch demand by topic and term, with coverage.—
range is 7d, 30d, 90d or all; or pass from and to as YYYY-MM-DD.
MCP
Ask your assistant instead.
A dashboard answers the questions you went there to ask. Most questions come up while you are doing something else — writing the brief, reviewing the quarter, arguing about a page. Point an MCP client at the endpoint and the answer arrives in the conversation you were already having.
get_visibilityWhere the brand stands, by engine and over time.get_promptsEvery tracked question and the latest answer to it.get_citationsThe domains behind those answers, owned against earned.get_actionsWhat is open, and which page each one changes.get_demandThe search demand underneath each topic.
How it behaves
- Same payloads as the API
- Not a second shape over the same data. An assistant and a script asking the same question get the same answer, because two mappings would drift apart.
- Stateless
- No session is issued and none is honoured; every request carries its key and is answered on its own. Nothing to resume, and nothing to leak between them.
- Streamable HTTP
- The standard transport, so clients that speak MCP need no adapter.
What every response carries
Built so you can tell “nothing yet” from “nothing”.
stateEvery response says which of three it is: not_configured, collecting, or ready. A dashboard can show an empty chart; an API has to say why it is empty.
nullA figure computed over no answers is null, never 0. Zero is a measurement. Nothing to measure is not, and a chart that cannot tell them apart will draw a cliff that never happened.
120/minPer key, as an abuse guard rather than a plan limit. Over it you get a 429 that says so. An invalid key gets a 401 that names the scheme, so a generic client reports “needs a bearer token” rather than a bare failure.
Issue a key and try it.
Keys are created and revoked in Settings, and the first call you make can be the one above.