BotSeen/ API ReferenceGet your API key

BotSeen API

The BotSeen API gives you read-only access to your AEO data — projects, AI visibility scores, and the latest answers from ChatGPT, Perplexity, Gemini, Google AI, and Claude. Use it to pull visibility into your own dashboards, BI tools, spreadsheets, or automations (Zapier, Make, n8n).

Base URL

https://www.botseen.com/api/v1
  • • All responses are JSON, wrapped in a data field.
  • • All REST endpoints are GET — the REST API never modifies your data.
  • • Reading the API costs no credits.
  • • Want your AI assistant to use BotSeen directly? See the MCP server — same key, works in Claude and Cursor.

Get an API key

  1. 1. Go to Settings → Developer API in your workspace.
  2. 2. Click New API key, give it a name (e.g. Zapier or Internal dashboard), and hit Create.
  3. 3. Copy the key immediately — it starts with bs_live_ and is shown only once. We store a hash, not the key itself.
Lost a key? You can't recover it — revoke it in Settings and create a new one. Only workspace owners and admins can create or revoke keys. A key grants access to its whole workspace.

Authentication

Pass your key in the Authorization header as a Bearer token on every request:

shell
curl https://www.botseen.com/api/v1/projects \
  -H "Authorization: Bearer bs_live_your_key_here"

A missing or invalid key returns 401 with { "error": "Invalid or missing API key" }.

MCP — use BotSeen from Claude & Cursor

BotSeen ships a remote MCP server (Model Context Protocol), so AI assistants can read your visibility data and act on it in plain English — “how visible is my brand in AI answers?”, “which sources should I get cited on?”, “run a scan”. Claude.ai and Claude Desktop connect over OAuth (sign in, approve a workspace — no key to paste). Claude Code and Cursor use your bs_live_ API key as a header.

MCP server URL

https://www.botseen.com/api/mcp

Streamable HTTP transport · header auth: Authorization: Bearer bs_live_…

Claude Code (CLI)

shell
claude mcp add --transport http botseen https://www.botseen.com/api/mcp \
  --header "Authorization: Bearer bs_live_your_key_here"

Claude.ai & Claude Desktop

Go to Settings → Connectors → Add custom connector and paste https://www.botseen.com/api/mcp. Claude signs you in through BotSeen (Google) and asks you to approve the connection — no API key or header to paste. You approve which workspace it can access, and can revoke it anytime in Settings.

Cursor

Add this to ~/.cursor/mcp.json (or the project's .cursor/mcp.json):

shell
{
  "mcpServers": {
    "botseen": {
      "url": "https://www.botseen.com/api/mcp",
      "headers": { "Authorization": "Bearer bs_live_your_key_here" }
    }
  }
}

Available tools — explore all 33

33 of 33 tools

list_projectsRead

Every project with its headline AI-visibility metrics.

Free
get_project_visibilityRead

Share of voice — you vs each competitor, with deltas since last scan.

Free
get_project_setupRead

A project's tracked prompts (with ids), competitors, and engines.

Free
get_scan_resultsRead

Latest answer per prompt × engine, with citations and wrong claims.

Free
list_hallucinationsRead

False claims AI engines made about your brands.

Free
get_citation_mapRead

Domains AI cites — where to get mentioned to improve visibility.

Free
get_credit_balanceRead

Plan, credit balance, and monthly allowance.

Free
estimate_scan_costRead

Credits a scan would cost before you run it.

Free
get_scan_statusRead

Live progress of a running scan.

Free
list_schedulesRead

All automated scan schedules.

Free
list_experimentsRead

Tracked experiment baselines.

Free
get_diagnosisRead

Read a completed Answer DNA diagnosis.

Free
get_llms_txtRead

Read the latest generated llms.txt.

Free
create_projectProjects

Create a project with prompts, competitors, and engines.

Free
delete_projectProjects

Permanently delete a project and its data.

Free
generate_buyer_promptsProjects

Draft buyer-intent questions for a site.

5 · 1st free
add_promptPrompts

Add a tracked buyer prompt.

Free
update_promptPrompts

Edit a tracked prompt.

Free
delete_promptPrompts

Remove a tracked prompt.

Free
add_competitorCompetitors

Add a competitor to track against.

Free
delete_competitorCompetitors

Remove a competitor.

Free
set_project_enginesEngines

Choose which AI engines a project scans.

Free
create_scheduleSchedules

Create a recurring automated scan (paid plans).

Free
update_scheduleSchedules

Change a schedule's cadence, time, or engines.

Free
set_schedule_enabledSchedules

Turn a schedule on or off.

Free
delete_scheduleSchedules

Delete a schedule.

Free
run_scanScans

Start a full AI-visibility scan.

Scan cost
cancel_scanScans

Cancel an in-flight scan; refunds undelivered credits.

Free
run_diagnosisAnswer DNA

Diagnose exactly why you're losing a prompt, with a fix plan.

20 credits
run_simulationSimulator

Preview whether a content fix would win the citation.

8 credits
track_experimentExperiments

Snapshot a prompt's visibility as a baseline.

Free
delete_experimentExperiments

Delete a tracked experiment.

Free
generate_llms_txtllms.txt

Crawl the site and write its llms.txt.

10 credits
run_scan and generate_llms_txt spend workspace credits, exactly as if triggered from the dashboard. Assistants are instructed to estimate the cost and confirm with you first — but the key holder is responsible for what an agent runs.

List projects

GET/api/v1/projects

Every project in the workspace with its headline metrics: current AI visibility (0–100, or null if never scanned), prompt and engine counts, hallucination count, and when it was last scanned.

shell
curl https://www.botseen.com/api/v1/projects \
  -H "Authorization: Bearer bs_live_…"

Response · 200

shell
{
  "data": [
    {
      "id": "3f6a1c2e-…",
      "name": "Acme",
      "brand_url": "https://acme.com",
      "category": "Project management software",
      "visibility": 62,
      "prompt_count": 20,
      "engine_count": 5,
      "hallucinations": 1,
      "last_scanned_at": "2026-07-08T09:00:12.000Z"
    }
  ]
}

Get a project

GET/api/v1/projects/:id

One project in full: its setup (engines, competitors, tracked buyer prompts) plus the latest scan summary.

ParameterInDescription
idpathThe project id (a UUID, from List projects).
shell
curl https://www.botseen.com/api/v1/projects/3f6a1c2e-… \
  -H "Authorization: Bearer bs_live_…"

Response · 200

shell
{
  "data": {
    "id": "3f6a1c2e-…",
    "name": "Acme",
    "brand_url": "https://acme.com",
    "category": "Project management software",
    "icp": "startup founders",
    "engines": ["chatgpt", "perplexity", "gemini", "google_ai", "claude"],
    "competitors": [
      { "name": "Jira", "url": "https://atlassian.com/jira" }
    ],
    "prompts": [
      {
        "id": "9b2d4e88-…",
        "text": "best project management tool for startups",
        "intent": "buying",
        "topic": "Project Management"
      }
    ],
    "latest_scan": {
      "visibility": 62,
      "hallucinations": 1,
      "scanned_at": "2026-07-08T09:00:12.000Z"
    }
  }
}

Get answer results

GET/api/v1/projects/:id/results

The freshest answer for every prompt × engine pair: whether your brand was mentioned (and at what position), which competitors the engine named, the sources it cited, any wrong claims it made, and the full raw answer text.

ParameterInDescription
idpathThe project id.
shell
curl https://www.botseen.com/api/v1/projects/3f6a1c2e-…/results \
  -H "Authorization: Bearer bs_live_…"

Response · 200

shell
{
  "data": [
    {
      "prompt_id": "9b2d4e88-…",
      "engine": "perplexity",
      "brand_mentioned": true,
      "position": 2,
      "competitors": ["Jira", "ClickUp"],
      "citations": [
        { "url": "https://reddit.com/r/startups/…", "title": "What PM tool…" }
      ],
      "wrong_claims": [],
      "answer": "For startups, the top picks are…",
      "model": "sonar-pro"
    }
  ]
}

Engine values: chatgpt, perplexity, gemini, google_ai, claude. position is your brand's rank in the answer (1 = first mention), or null.

Errors

StatusBodyMeaning
401{ "error": "Invalid or missing API key" }No Bearer header, malformed key, or the key was revoked.
404{ "error": "Project not found" }The project id doesn't exist or belongs to another workspace.

Please keep polling reasonable — a few requests per minute is plenty; scan data changes at most once per scheduled run.

Code examples

JavaScript / Node

shell
const res = await fetch("https://www.botseen.com/api/v1/projects", {
  headers: { Authorization: `Bearer ${process.env.BOTSEEN_API_KEY}` }
});
const { data } = await res.json();

for (const project of data) {
  console.log(`${project.name}: ${project.visibility ?? "not scanned"}% visible`);
}

Python

shell
import os, requests

headers = {"Authorization": f"Bearer {os.environ['BOTSEEN_API_KEY']}"}
projects = requests.get("https://www.botseen.com/api/v1/projects", headers=headers).json()["data"]

for p in projects:
    results = requests.get(
        f"https://www.botseen.com/api/v1/projects/{p['id']}/results", headers=headers
    ).json()["data"]
    missing = [r for r in results if not r["brand_mentioned"]]
    print(f"{p['name']}: missing from {len(missing)} of {len(results)} answers")

Google Sheets (Apps Script)

shell
function pullVisibility() {
  const res = UrlFetchApp.fetch("https://www.botseen.com/api/v1/projects", {
    headers: { Authorization: "Bearer " + PropertiesService
      .getScriptProperties().getProperty("BOTSEEN_API_KEY") }
  });
  const rows = JSON.parse(res.getContentText()).data
    .map(p => [p.name, p.visibility, p.hallucinations, p.last_scanned_at]);
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(2, 1, rows.length, 4).setValues(rows);
}

Security best practices

  • Keep keys server-side. Never ship an bs_live_ key in browser code, a mobile app, or a public repo — anyone with the key can read your whole workspace.
  • Use environment variables, not hardcoded strings.
  • One key per integration (Zapier, BI, internal dashboard). The Settings page shows each key's last use, so you can spot and revoke unused ones.
  • Revoke immediately if leaked — revocation is instant, then create a fresh key.

Need something the API doesn't cover?

Triggering scans and generating llms.txt are available today through the MCP server. REST write endpoints and webhooks are on the roadmap — tell us what you need, it shapes what ships next.

API Reference | BotSeen