For developers

A read-only API + MCP server for your AI-visibility data

Pull your visibility score and per-engine mention data into your own dashboards, scripts, or an AI agent (Claude Desktop, Cursor, a custom LangChain agent) — scoped to only the brands your account tracks. Available on every paid plan, no extra add-on.

Quickstart

Three steps

  1. 1Mint a key on your account page — shown once, copy it immediately.
  2. 2Send it as Authorization: Bearer <key> on every request — REST or MCP.
  3. 3Call an endpoint below, or point an MCP client at `/api/mcp`.

REST API

GET /api/v1/visibility

One brand's current score + per-engine breakdown. `domain` must be a brand your account tracks with at least one completed scan.

Request

curl "https://pingmybrand.com/api/v1/visibility?domain=acme.com" \
  -H "Authorization: Bearer pmb_live_xxxxxxxxxxxxxxxx"

200 response

{
  "domain": "acme.com",
  "visibilityScore": 62,
  "updatedAt": "2026-07-14T09:02:11.000Z",
  "engines": [
    {
      "engine": "openai",
      "status": "measured",
      "score": 71,
      "mentionRate": 0.68,
      "avgPosition": 1.4,
      "citationRate": 0.32
    },
    {
      "engine": "anthropic",
      "status": "measured",
      "score": 58,
      "mentionRate": 0.52,
      "avgPosition": 2.1,
      "citationRate": 0.2
    }
    // … one entry per engine (openai, anthropic, google, perplexity, grok)
  ]
}

REST API

GET /api/v1/brands

Every brand your account tracks, with each one's latest score (null — never a fabricated number — for a brand with no completed scan yet).

Request

curl "https://pingmybrand.com/api/v1/brands" \
  -H "Authorization: Bearer pmb_live_xxxxxxxxxxxxxxxx"

200 response

{
  "brands": [
    { "domain": "acme.com", "visibilityScore": 62, "updatedAt": "2026-07-14T09:02:11.000Z" },
    { "domain": "acme-labs.io", "visibilityScore": null, "updatedAt": null }
  ]
}

REST API

Errors & rate limits

Every failure is a real HTTP status with an { error } body — never a fabricated 200 with placeholder data.

StatusWhen
401the bearer key is missing, malformed, or doesn't match any account
403the key's account has no active paid plan (the API is a paid-tier feature)
404the domain isn't tracked by this account, or is tracked but has never completed a scan
429you've exceeded 120 requests/hour on this key for this endpoint (Retry-After header included)

120 requests/hour per key, tracked separately for each endpoint — exhausting `/api/v1/visibility` doesn't affect `/api/v1/brands` or the MCP server.

MCP server

POST /api/mcp

A lightweight Model Context Protocol server (JSON-RPC 2.0 over plain HTTP POST) so an AI agent can ask “what's my AI visibility score” directly. Point any remote-MCP-capable client (Claude Desktop, Cursor, ChatGPT connectors, a custom agent) at this URL with a static Authorization: Bearer header — `initialize` and `tools/list` work unauthenticated (pure capability discovery); `tools/call` requires a valid key.

ToolDoesArguments
list_tracked_brandsEvery brand your account tracks, with each one's latest AI-visibility score.none
get_brand_visibilityThe latest AI-visibility score and per-engine (ChatGPT/Claude/Gemini/Perplexity/Grok) mention detail for one tracked brand.{ "domain": "acme.com" }

initialize

POST /api/mcp
{ "jsonrpc": "2.0", "id": 1, "method": "initialize" }

initialize response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-03-26",
    "capabilities": { "tools": {} },
    "serverInfo": { "name": "pingmybrand-mcp", "version": "1.0.0" }
  }
}

tools/call — get_brand_visibility

POST /api/mcp
Authorization: Bearer pmb_live_xxxxxxxxxxxxxxxx

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_brand_visibility",
    "arguments": { "domain": "acme.com" }
  }
}

Every call is scoped to your own account

A key can only ever read the brands its own account tracks — there is no way to request another account's data. Mint a key from your account page to start.