Documentation API

Accès programmatique à vos données de visibilité IA.

Une API REST en lecture seule et un serveur MCP, tous deux authentifiés avec la même clé. Intégrez les marques, requêtes, exécutions, mentions, scores de visibilité quotidiens et recommandations dans vos propres tableaux de bord, entrepôts de données ou agents IA.

Authentification

Jetons Bearer

Générez une clé API depuis Paramètres → Clés API dans l'application. Le texte en clair est affiché une seule fois à la création – stockez-le dans votre gestionnaire de mots de passe. Passez-le comme jeton Bearer à chaque requête.

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

Les clés peuvent être révoquées à tout moment depuis le même panneau de Paramètres. Chaque clé est limitée à votre compte et hérite des autorisations de marque de votre compte – pas de portées par clé pour l'instant.

URL de base

Où vont les requêtes

Tous les points de terminaison REST se trouvent sous une URL de base unique :

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

Ajoutez le chemin de n'importe quel point de terminaison ci-dessous. GET est la seule méthode prise en charge – l'API est en lecture seule.

Obtenir votre ID de marque

D'où vient {id}

La plupart des points de terminaison prennent un {id} paramètre de chemin – c'est l'UUID de votre marque. Deux façons de l'obtenir :

  1. Depuis l'API elle-même– appelez d'abord GET /brands. Chaque élément de la réponse a un idchamp. Utilisez cette valeur dans les appels suivants.
  2. Depuis l'URL du tableau de bord– lorsque vous ouvrez une marque sur https://app.intendity.com/brands/<id> , l'UUID après /brands/ est l'ID de marque que vous utiliseriez dans l'API.
Points de terminaison

Référence

Sept points de terminaison, tous GET, tous retournent du JSON, tous limités au propriétaire de la clé API.

GET /brands

Lister les marques – découvrir vos IDs

Renvoie chaque marque que vous possédez. Appelez ceci en premier pour obtenir l'`id` que vous utiliserez dans les autres points de terminaison. C'est le seul point de terminaison qui ne prend pas d'ID de marque comme paramètre de chemin.

Requête
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands \
  -H "Authorization: Bearer ik_…"
Réponse (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}

Obtenir une marque

Marque unique par ID. Même forme que les éléments dans `/brands`.

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

Lister les requêtes d'une marque

Chaque prompt que vous avez ajouté pour cette marque. Trié du plus récent.

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

Lister les exécutions d'une marque

Une ligne par exécution (requête × modèle). Inclut le blob brut `response` du modèle.

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

Lister les mentions d'une marque

Analyse par exécution : si la marque a été mentionnée, où elle s'est classée, le sentiment, quels concurrents ont été nommés, et les URLs sources citées par le modèle.

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

Scores de visibilité quotidiens

Une ligne par jour. `score` est un pourcentage 0-100 du taux de mention sur toutes les requêtes × modèles ayant été exécutés ce jour-là.

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

Lister les recommandations d'une marque

Prochaines étapes générées par l'IA pour améliorer la visibilité, avec statut de flux de travail (pending → in_progress → done / dismissed).

Requête
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/recommendations \
  -H "Authorization: Bearer ik_…"
Réponse (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

Prompts suggérés

Prompts que le système pense que vous devriez suivre mais que vous n'avez pas encore ajoutés. `added: true` signifie que l'utilisateur a accepté la suggestion (et que le prompt se trouve maintenant dans `/brands/{id}/queries`).

Requête
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/suggested-prompts \
  -H "Authorization: Bearer ik_…"
Réponse (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

Part de voix des concurrents

Comptages de mentions quotidiens par (concurrent, modèle). La marque elle-même est rapportée sous le sentinel `__brand__`, donc la part de voix est `brand_count / SUM(count)` dans (modèle, jour). Filtrez la plage de temps avec `?since=YYYY-MM-DD` (par défaut : 90 derniers jours).

Requête
curl "https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/competitor-sov?since=2026-04-01" \
  -H "Authorization: Bearer ik_…"
Réponse (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

Audits de pages – liste

Audits de préparation IA exécutés sur les pages de la marque. Chaque ligne inclut le score (0-100), la liste des problèmes et les signaux analysés (types schema.org, présence llms.txt, règles robots pour les bots IA, etc.).

Requête
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/page-audits \
  -H "Authorization: Bearer ik_…"
Réponse (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}

Audit de page – unique

Audit unique par ID. Même forme que les éléments dans `/brands/{id}/page-audits`.

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

Pagination

Passez ?limit=N sur les points de terminaison de collection. La valeur par défaut est 100, max. 500. La pagination par curseur est sur la feuille de route pour les collections qui dépassent une seule page.

Erreurs

Codes de statut

Statut Quand
200 Succès.
401 Jeton Bearer manquant ou invalide.
404 La marque ou le chemin n'existe pas (ou ne vous appartient pas).
405 Méthode autre que GET utilisée.
500 Erreur serveur inattendue – réessayez avec un backoff.

Les corps d'erreur incluent une error chaîne et parfois un hint.

Serveur MCP

Utilisez Intendity depuis Claude / Cursor / tout client MCP

La même clé API s'authentifie contre un point de terminaison compatible MCP. Pointez n'importe quel client Model Context Protocol sur ce point et vos données de visibilité de marque sont disponibles comme outils dans l'assistant.

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

Auth : Authorization: Bearer ik_… sur le transport SSE / HTTP. Consultez la documentation de votre client MCP pour savoir comment enregistrer un serveur personnalisé avec un en-tête.

Besoin d'un point de terminaison que nous n'avons pas ?

Fonctionnalités d'écriture, webhooks, pagination par curseur – tous sur la feuille de route. Dites-nous ce que vous construiriez et nous prioriserons en conséquence.

[email protected]