GET/api/subscription/plans
The live plan, price and per-metric limit table behind /pricing. Prices are in GBP. Owner-only rows are excluded. Served from a one-hour cache.
curl 'https://quarrion.ai/api/subscription/plans'Quarrion publishes a small read-only API. It serves the same public data the website shows — plans and prices, the published FAQ, the advertised-salary medians behind the /salary pages, and the modelled estimates behind the salary globe — so an agent or a script can read it without scraping HTML. No key, no account, no signup.
This API is EXPERIMENTAL. It exists because publishing the data we already show is cheaper than being scraped, not because we are running an API product. Endpoints may change shape, move or disappear without notice. There is no versioning commitment and no uptime commitment. If you build something on it, email support@quarrion.ai so we know you are there — that is the only thing that will make us think twice before changing a field name.
Every response uses the envelope { "success": boolean, "data": …, "error": string | null }. Field casing follows whatever produces the payload: the plan and FAQ endpoints return database column names in snake_case, while the salary endpoints return camelCase values built by the aggregation service.
The live plan, price and per-metric limit table behind /pricing. Prices are in GBP. Owner-only rows are excluded. Served from a one-hour cache.
curl 'https://quarrion.ai/api/subscription/plans'Every published entry, ordered by `sort_order` then newest first. Both filters are optional and combine; `search` is a case-insensitive substring match across the question and the answer.
curl 'https://quarrion.ai/api/faq?category=product'The p25 / median / p75 of the annual pay employers STATED in public job advertisements, per sector or job title per market, over a rolling 90-day window. Every cell carries its own sample size, its date range, the nightly recompute run that produced it and the URL of its human-readable page. Advertised pay, not paid pay; an advertisement quoting no salary is excluded rather than estimated, and a cell is withdrawn rather than frozen when it falls below 30 advertisements. Covers every sector, not only technology. Both filters are optional and combine; `location` is an alias of `city` and `role` of `sector`, and either spelling — URL slug or raw value — resolves. Call /api/salary/advertised/locations first to learn the valid values.
curl 'https://quarrion.ai/api/salary/advertised?city=london'One entry per market, with how many cells it publishes, how many advertisements sit behind them, and the exact `city` / `sector` slugs to pass back to /api/salary/advertised. London leads because the corpus does; the rest follow by weight of evidence.
curl 'https://quarrion.ai/api/salary/advertised/locations'Country-level MODELLED ESTIMATES for a role, normalised to USD and inflation-adjusted. These are curated estimates calibrated against BLS / ONS / Eurostat reference data — not survey data, not observed pay, and not sourced from those agencies; every row carries a confidence score and its citations, and in production today every row resolves to `provenance.kind = "estimate"`. For advertised medians computed from real job postings, use /api/salary/advertised. Passing `country` switches the response to that country’s cities — the same payload as /api/salary/globe/cities. Anonymous callers read cross-tenant research data only; no user data is ever returned.
curl 'https://quarrion.ai/api/salary/globe?role=Software%20Engineer'City-level drill-down of the same modelled estimates as /api/salary/globe — not observed pay. `median`, `p25` and `p75` are null for a city that is plotted but has no salary data for this role.
curl 'https://quarrion.ai/api/salary/globe/cities?role=Software%20Engineer&country=GB'Distinct role titles with researched salary data, so a client can suggest roles that will actually return results. Low-confidence free-text titles are filtered out.
curl 'https://quarrion.ai/api/salary/globe/roles'Liveness of the web tier and its database connection. Always answers 200 — a degraded database is reported in the body, not as a status code. This is the one public endpoint that does not send RateLimit headers.
curl 'https://quarrion.ai/api/health'The full machine-readable description is at https://quarrion.ai/openapi.json, indexed from /.well-known/api-catalog.
| Tier | Requests | Window |
|---|---|---|
| free | 30 | 60s |
| pro | 120 | 60s |
| enterprise | 300 | 60s |
Limits are per caller per 60 seconds. An anonymous caller is keyed by IP and gets the free-tier quota. Every response except /api/health carries RFC 9331 RateLimit and RateLimit-Policy headers. Those headers declare the policy in force rather than a live remaining count — a fabricated countdown would be worse than none, because you would pace against a number that means nothing.
The same data is available over the Model Context Protocol, so an MCP client can call it as tools rather than as HTTP. The server is read-only: it exposes five tools, all of them wrappers over the endpoints above, and nothing that writes, authenticates or costs money.
https://quarrion.ai/api/v1/mcp
https://quarrion.ai/.well-known/mcp/server-card.jsonGET /api/salary/advertised.GET /api/salary/globe.GET /api/salary/globe/roles.GET /api/faq.GET /api/subscription/plans.The server speaks Streamable HTTP at one URL, so any MCP client that can add a remote server by URL can use it. These four recipes are copy-paste ready and were each checked against the client vendor’s own documentation on 12 August 2026 — the link under each one is what to re-read if a step has moved.
All 5 tools are public and read-only. There is no account, no API key and no sign-in step: leave every credential field in your client blank. The endpoint does accept an optional Quarrion access token, but no tool requires one today and none returns more data with one — and a token that is present and not valid is rejected with a 401, so send none rather than a stale one. Authenticated, tier-gated tools are planned; the authorization server behind them is not switched on yet, which is why there is no OAuth flow documented here to complete.
Remote MCP server URL
https://quarrion.ai/api/v1/mcpCustom connectors are available on the Free, Pro, Max, Team and Enterprise plans; a Free account can hold one at a time.
Verified against Anthropic — About custom connectors (remote MCP servers).
Terminal
claude mcp add --transport http quarrion https://quarrion.ai/api/v1/mcp.mcp.json
{
"mcpServers": {
"quarrion": {
"type": "http",
"url": "https://quarrion.ai/api/v1/mcp"
}
}
}In a JSON config the "type" field is required. Claude Code reads an entry that has a "url" but no "type" as a local stdio server and skips it.
Verified against Anthropic — Connect Claude Code to tools via MCP.
.cursor/mcp.json
{
"mcpServers": {
"quarrion": {
"url": "https://quarrion.ai/api/v1/mcp"
}
}
}Unlike Claude Code, Cursor does not want a "type" on a remote entry — a "url" is enough. The optional "headers" object is for servers that need a key; this one does not.
Verified against Cursor — Model Context Protocol.
Remote MCP server URL
https://quarrion.ai/api/v1/mcpDeveloper mode is the only route for a server OpenAI has not packaged as an app, and it is documented for people testing servers they are building rather than as a one-click add — expect the panel names to have moved. It is available to Pro, Plus, Business, Enterprise and Education accounts on the web, and it does accept an unauthenticated Streamable HTTP server, which is what this is.
Verified against OpenAI — ChatGPT Developer mode.
Any client that can add a remote Streamable HTTP server by URL will work — point it at https://quarrion.ai/api/v1/mcp. If a config does not seem to take, run this first: it separates “my client is misconfigured” from “their server is down” without installing anything.
Terminal
curl -sS https://quarrion.ai/api/v1/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'