API documentation

Programmatic access to your AI visibility data.

A read-only REST API and an MCP server, both authenticated with the same key. Pull brands, queries, runs, mentions, daily visibility scores and recommendations into your own dashboards, warehouses, or AI agents.

Authentication

Bearer tokens

Generate an API key from Settings → API keys inside the app. The plaintext is shown once at creation — store it in your password manager. Pass it as a Bearer token on every request.

curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/v1/brands \
  -H "Authorization: Bearer ik_…"

Keys can be revoked any time from the same Settings panel. Each key is scoped to your account and inherits your account's brand permissions — no per-key scopes today.

Base URL

Where requests go

All REST endpoints live under a single base URL:

https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1

Append the path of any endpoint below. GET is the only method supported — the API is read-only.

Getting your brand ID

Where {id} comes from

Most endpoints take a {id} path parameter — that's your brand's UUID. Two ways to get it:

  1. From the API itself — call GET /v1/brands first. Each item in the response has an id field. Use that value in subsequent calls.
  2. From the dashboard URL — when you open a brand at https://app.intendity.com/brands/<this-is-the-id>, the UUID after /brands/ is the brand id you'd use in the API.
Endpoints

Reference

Seven endpoints, all GET, all return JSON, all scoped to the API key's owner.

GET /v1/brands

List brands — discover your IDs

Returns every brand you own. Call this first to get the `id` you'll plug into the other endpoints. This is the only endpoint that doesn't take a brand id as a path parameter.

Request
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/v1/brands \
  -H "Authorization: Bearer ik_…"
Response (200 OK)
{
  "brands": [
    {
      "id": "0ae98f45-446c-4482-886f-9ce2fd6ba4ea",
      "name": "Acme",
      "industry": "B2B SaaS",
      "competitors": ["Beta", "Gamma"],
      "country": "US",
      "enabled_models": ["openai/gpt-5.2", "anthropic/claude-sonnet-4"],
      "run_frequency": "daily",
      "created_at": "2026-04-01T12:00:00Z"
    }
  ]
}
GET /v1/brands/{id}

Get a brand

Single brand by id. Same shape as the items in `/v1/brands`.

Request
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/v1/brands/0ae98f45-446c-4482-886f-9ce2fd6ba4ea \
  -H "Authorization: Bearer ik_…"
Response (200 OK)
{
  "brand": {
    "id": "0ae98f45-446c-4482-886f-9ce2fd6ba4ea",
    "name": "Acme",
    ...
  }
}
GET /v1/brands/{id}/queries

List queries for a brand

Every prompt you've added against this brand. Sorted newest first.

Request
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/v1/brands/{id}/queries?limit=100 \
  -H "Authorization: Bearer ik_…"
Response (200 OK)
{
  "queries": [
    {
      "id": "…",
      "text": "best CRM for small B2B teams",
      "tags": ["evaluation"],
      "country": "US",
      "enabled": true,
      "last_run_at": "2026-04-30T04:00:00Z",
      "created_at": "2026-04-01T12:00:00Z"
    }
  ]
}
GET /v1/brands/{id}/runs

List runs for a brand

One row per (query × model) execution. Includes the raw `response` blob from the model.

Request
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/v1/brands/{id}/runs?limit=100 \
  -H "Authorization: Bearer ik_…"
Response (200 OK)
{
  "runs": [
    {
      "id": "…",
      "query_id": "…",
      "model": "openai/gpt-5.2",
      "status": "completed",
      "response": "Acme is one of the leading…",
      "error": null,
      "created_at": "2026-04-30T04:01:23Z"
    }
  ]
}
GET /v1/brands/{id}/mentions

List mentions for a brand

Per-run analysis: whether the brand was mentioned, where it ranked, sentiment, what competitors were named, and the source URLs the model cited.

Request
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/v1/brands/{id}/mentions?limit=100 \
  -H "Authorization: Bearer ik_…"
Response (200 OK)
{
  "mentions": [
    {
      "id": "…",
      "run_id": "…",
      "mentioned": true,
      "position": 3,
      "sentiment": "positive",
      "sentiment_score": 78,
      "context": "Acme stands out for its…",
      "competitors_found": ["Beta"],
      "sources": ["https://en.wikipedia.org/wiki/…"],
      "confidence": 0.92,
      "created_at": "2026-04-30T04:01:24Z"
    }
  ]
}
GET /v1/brands/{id}/visibility

Daily visibility scores

One row per day. `score` is a 0-100 percentage of mention rate across all queries × models that ran that day.

Request
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/v1/brands/{id}/visibility \
  -H "Authorization: Bearer ik_…"
Response (200 OK)
{
  "visibility": [
    {
      "day": "2026-04-30",
      "score": 64,
      "total_runs": 48,
      "total_mentions": 31
    }
  ]
}
GET /v1/brands/{id}/recommendations

List recommendations for a brand

AI-generated next steps to improve visibility, with workflow status (pending → in_progress → done / dismissed).

Request
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/v1/brands/{id}/recommendations \
  -H "Authorization: Bearer ik_…"
Response (200 OK)
{
  "recommendations": [
    {
      "id": "…",
      "category": "wikipedia",
      "title": "Edit the 'CRM software' Wikipedia article",
      "body": "Three of four models cited Wikipedia…",
      "related_queries": ["…"],
      "status": "pending",
      "due_date": null,
      "completed_at": null,
      "created_at": "2026-04-30T04:05:00Z"
    }
  ]
}

Pagination

Pass ?limit=N on collection endpoints. Default is 100, max 500. Cursor pagination is on the roadmap for collections that grow past a single page.

Errors

Status codes

Status When
200 Success.
401 Missing or invalid Bearer token.
404 Brand or path doesn't exist (or isn't owned by you).
405 Used a method other than GET.
500 Unexpected server error — retry with backoff.

Error bodies include an error string and sometimes a hint.

MCP server

Use Intendity from Claude / Cursor / any MCP client

The same API key authenticates against an MCP-compatible endpoint. Point any Model Context Protocol client at it and your brand visibility data is available as tools inside the assistant.

https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/mcp

Auth: Authorization: Bearer ik_… on the SSE / HTTP transport. See your MCP client's docs for how to register a custom server with a header.

Need an endpoint we don't have?

Write capabilities, webhooks, cursor pagination — all on the roadmap. Tell us what you'd build and we'll prioritize accordingly.

[email protected]