API-Dokumentation

Programmatischer Zugriff auf deine KI-Sichtbarkeitsdaten.

Eine schreibgeschützte REST-API und ein MCP-Server, beide mit demselben Schlüssel authentifiziert. Ziehe Marken, Abfragen, Läufe, Erwähnungen, tägliche Sichtbarkeitswerte und Empfehlungen in deine eigenen Dashboards, Data Warehouses oder KI-Agenten.

Authentifizierung

Bearer-Token

Generiere einen API-Schlüssel unter Einstellungen → API-Schlüssel in der App. Der Klartext wird nur bei der Erstellung angezeigt – speichere ihn in deinem Passwort-Manager. Übergebe ihn als Bearer-Token bei jeder Anfrage.

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

Schlüssel können jederzeit über dasselbe Einstellungspanel widerrufen werden. Jeder Schlüssel ist auf dein Konto beschränkt und erbt die Markenberechtigungen deines Kontos – derzeit keine schlüsselspezifischen Scopes.

Basis-URL

Wohin die Anfragen gehen

Alle REST-Endpunkte leben unter einer einzigen Basis-URL:

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

Hänge den Pfad eines der folgenden Endpunkte an. GET ist die einzige unterstützte Methode – die API ist schreibgeschützt.

Deine Marken-ID ermitteln

Woher kommt {id}

Die meisten Endpunkte nehmen einen {id} Pfadparameter – das ist die UUID deiner Marke. Zwei Wege, sie zu erhalten:

  1. Aus der API selbst– ruf zuerst GET /brandsauf. Jedes Element in der Antwort hat ein idFeld. Verwende diesen Wert in nachfolgenden Aufrufen.
  2. Aus der Dashboard-URL– wenn du eine Marke unter https://app.intendity.com/brands/<id> öffnest, ist die UUID nach /brands/ die Marken-ID, die du in der API verwenden würdest.
Endpunkte

Referenz

Sieben Endpunkte, alle GET, alle geben JSON zurück, alle auf den Besitzer des API-Schlüssels beschränkt.

GET /brands

Marken auflisten – IDs ermitteln

Gibt jede Marke zurück, die dir gehört. Ruf das zuerst auf, um die `id` zu erhalten, die du in andere Endpunkte einsetzen wirst. Das ist der einzige Endpunkt, der keine Marken-ID als Pfadparameter nimmt.

Anfrage
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands \
  -H "Authorization: Bearer ik_…"
Antwort (200 OK)
{
  "brands": [
    {
      "id": "0ae98f45-446c-4482-886f-9ce2fd6ba4ea",
      "name": "Acme",
      "industry": "B2B SaaS",
      "aliases": ["Acme Corp", "ACME"],
      "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 /brands/{id}

Eine Marke abrufen

Einzelne Marke nach ID. Gleiche Form wie die Elemente in `/brands`.

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

Abfragen einer Marke auflisten

Jeder Prompt, den du dieser Marke hinzugefügt hast. Neueste zuerst sortiert.

Anfrage
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/queries?limit=100 \
  -H "Authorization: Bearer ik_…"
Antwort (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 /brands/{id}/runs

Läufe einer Marke auflisten

Eine Zeile pro (Abfrage × Modell)-Ausführung. Enthält das rohe `response`-Blob vom Modell.

Anfrage
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/runs?limit=100 \
  -H "Authorization: Bearer ik_…"
Antwort (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 /brands/{id}/mentions

Erwähnungen einer Marke auflisten

Analyse pro Lauf: ob die Marke erwähnt wurde, wo sie eingestuft war, Sentiment, welche Wettbewerber genannt wurden und die Quell-URLs, die das Modell zitiert hat.

Anfrage
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/mentions?limit=100 \
  -H "Authorization: Bearer ik_…"
Antwort (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 /brands/{id}/visibility

Tägliche Sichtbarkeitswerte

Eine Zeile pro Tag. `score` ist ein 0-100%-Anteil der Erwähnungsrate über alle Abfragen × Modelle, die an diesem Tag liefen.

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

Empfehlungen einer Marke auflisten

KI-generierte nächste Schritte zur Verbesserung der Sichtbarkeit, mit Workflow-Status (pending → in_progress → done / dismissed).

Anfrage
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/recommendations \
  -H "Authorization: Bearer ik_…"
Antwort (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"
    }
  ]
}
GET /brands/{id}/suggested-prompts

Vorgeschlagene Prompts

Prompts, die das System glaubt, dass du sie verfolgen solltest, aber noch nicht hinzugefügt hast. `added: true` bedeutet, der Benutzer hat den Vorschlag akzeptiert (und der Prompt ist jetzt in `/brands/{id}/queries`).

Anfrage
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/suggested-prompts \
  -H "Authorization: Bearer ik_…"
Antwort (200 OK)
{
  "suggested_prompts": [
    {
      "id": "…",
      "text": "best CRM for small SaaS teams",
      "rationale": "competitor-comparison gap - competitors win 4/5 runs",
      "added": false,
      "created_at": "2026-05-01T04:00:00Z"
    }
  ]
}
GET /brands/{id}/competitor-sov

Wettbewerber-Share-of-Voice

Tägliche Erwähnungsanzahlen pro (Wettbewerber, Modell). Die Marke selbst wird unter dem `__brand__`-Sentinel gemeldet, sodass Share of Voice `brand_count / SUM(count)` innerhalb von (Modell, Tag) ist. Filtere den Zeitraum mit `?since=YYYY-MM-DD` (Standard: letzte 90 Tage).

Anfrage
curl "https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/competitor-sov?since=2026-04-01" \
  -H "Authorization: Bearer ik_…"
Antwort (200 OK)
{
  "sov": [
    { "competitor": "__brand__", "model": "openai/gpt-5.2", "day": "2026-05-04", "mention_count": 4, "avg_position": 2.5 },
    { "competitor": "Beta",      "model": "openai/gpt-5.2", "day": "2026-05-04", "mention_count": 7, "avg_position": null }
  ]
}
GET /brands/{id}/page-audits

Seitenaudits – Liste

KI-Bereitschaftsaudits für die Seiten der Marke. Jede Zeile enthält den Wert (0-100), die Problemliste und die geparsten Signale (schema.org-Typen, llms.txt-Präsenz, KI-Bot-Robots-Regeln usw.).

Anfrage
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/page-audits \
  -H "Authorization: Bearer ik_…"
Antwort (200 OK)
{
  "page_audits": [
    {
      "id": "…",
      "url": "https://acme.com/pricing",
      "fetched_at": "2026-05-04T10:12:00Z",
      "status_code": 200,
      "score": 72,
      "issues": [
        { "id": "no-faq-schema", "severity": "warning", "title": "No FAQPage schema", "fix": "Add JSON-LD FAQPage with the top buyer questions.", "score_impact": 8 }
      ],
      "signals": {
        "word_count": 824,
        "h1_count": 1,
        "has_canonical": true,
        "has_meta_description": true,
        "has_faq_schema": false,
        "schema_types": ["Organization", "WebSite"],
        "llms_txt_present": false,
        "robots_blocks_ai": [],
        "ai_bots_allowed": ["GPTBot", "ClaudeBot"]
      },
      "error": null
    }
  ]
}
GET /brands/{id}/page-audits/{auditId}

Seitenaudit – einzeln

Ein einziger Audit nach ID. Gleiche Form wie die Elemente in `/brands/{id}/page-audits`.

Anfrage
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/page-audits/{auditId} \
  -H "Authorization: Bearer ik_…"
Antwort (200 OK)
{
  "page_audit": {
    "id": "…",
    "url": "https://acme.com/pricing",
    "score": 72,
    ...
  }
}

Paginierung

Übergebe ?limit=N an Collection-Endpunkten. Standard ist 100, max. 500. Cursor-Paginierung ist für Collections auf dem Roadmap, die über eine einzige Seite hinauswachsen.

Fehler

Statuscodes

Status Wann
200 Erfolg.
401 Fehlender oder ungültiger Bearer-Token.
404 Marke oder Pfad existiert nicht (oder gehört dir nicht).
405 Eine andere Methode als GET verwendet.
500 Unerwarteter Serverfehler – mit Backoff erneut versuchen.

Fehlertexte enthalten einen error String und manchmal ein hint.

MCP-Server

Intendity aus Claude / Cursor / jedem MCP-Client verwenden

Derselbe API-Schlüssel authentifiziert sich gegen einen MCP-kompatiblen Endpunkt. Richte jeden Model Context Protocol-Client darauf aus, und deine Markensichtbarkeitsdaten sind als Tools im Assistenten verfügbar.

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

Auth: Authorization: Bearer ik_… am SSE / HTTP-Transport. Siehe die Dokumentation deines MCP-Clients, wie man einen benutzerdefinierten Server mit einem Header registriert.

Du brauchst einen Endpunkt, den wir nicht haben?

Schreibfähigkeiten, Webhooks, Cursor-Paginierung – alles auf dem Roadmap. Sag uns, was du bauen würdest, und wir priorisieren entsprechend.

[email protected]