Documentazione API

Accesso programmatico ai tuoi dati di visibilità AI.

Un'API REST in sola lettura e un server MCP, entrambi autenticati con la stessa chiave. Porta brand, query, esecuzioni, menzioni, punteggi di visibilità giornalieri e raccomandazioni nei tuoi dashboard, warehouse o agenti AI.

Autenticazione

Token Bearer

Genera una chiave API da Impostazioni → Chiavi API nell'app. Il testo in chiaro viene mostrato una sola volta alla creazione - salvalo nel tuo gestore di password. Passalo come token Bearer in ogni richiesta.

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

Le chiavi possono essere revocate in qualsiasi momento dallo stesso pannello Impostazioni. Ogni chiave è associata al tuo account ed eredita i permessi del brand del tuo account - nessun ambito per chiave al momento.

URL base

Dove vanno le richieste

Tutti gli endpoint REST vivono sotto un unico URL base:

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

Aggiungi il percorso di qualsiasi endpoint qui sotto. GET è l'unico metodo supportato - l'API è in sola lettura.

Ottenere il tuo ID brand

Da dove viene {id}

La maggior parte degli endpoint accetta un parametro di percorso {id} che è l'UUID del tuo brand. Due modi per ottenerlo:

  1. Dall'API stessa- chiama prima GET /brands. Ogni elemento nella risposta ha un campo id. Usa quel valore nelle chiamate successive.
  2. Dall'URL del dashboard- quando apri un brand su https://app.intendity.com/brands/<id> , l'UUID dopo /brands/ è l'ID brand da usare nell'API.
Endpoint

Riferimento

Sette endpoint, tutti GET, tutti restituiscono JSON, tutti con scope limitato al proprietario della chiave API.

GET /brands

Elenca brand - scopri i tuoi ID

Restituisce ogni brand che possiedi. Chiama questo prima per ottenere l'`id` da usare negli altri endpoint. Questo è l'unico endpoint che non prende un ID brand come parametro di percorso.

Richiesta
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands \
  -H "Authorization: Bearer ik_…"
Risposta (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}

Ottieni un brand

Brand singolo per ID. Stessa forma degli elementi in `/brands`.

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

Elenca le query per un brand

Ogni prompt che hai aggiunto per questo brand. Ordinati dal più recente.

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

Elenca le esecuzioni per un brand

Una riga per esecuzione (query × modello). Include il blob grezzo `response` dal modello.

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

Elenca le menzioni per un brand

Analisi per esecuzione: se il brand è stato menzionato, dove si è classificato, il sentiment, quali competitor sono stati nominati e gli URL delle fonti citate dal modello.

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

Punteggi di visibilità giornalieri

Una riga per giorno. `score` è una percentuale 0-100 del tasso di menzione su tutte le query × modelli eseguiti quel giorno.

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

Elenca le raccomandazioni per un brand

Prossime mosse generate dall'AI per migliorare la visibilità, con stato del flusso di lavoro (pending → in_progress → done / dismissed).

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

Prompt suggeriti

Prompt che il sistema pensa dovresti monitorare ma che non hai ancora aggiunto. `added: true` significa che l'utente ha accettato il suggerimento (e il prompt ora si trova in `/brands/{id}/queries`).

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

Share of voice dei competitor

Conteggi giornalieri delle menzioni per (competitor, modello). Il brand stesso è riportato sotto il sentinel `__brand__` quindi lo share of voice è `brand_count / SUM(count)` all'interno di (modello, giorno). Filtra l'intervallo di tempo con `?since=YYYY-MM-DD` (default: ultimi 90 giorni).

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

Audit delle pagine - lista

Audit di prontezza AI eseguiti sulle pagine del brand. Ogni riga include il punteggio (0-100), la lista dei problemi e i segnali analizzati (tipi schema.org, presenza di llms.txt, regole robots per bot AI, ecc.).

Richiesta
curl https://ipxntaczzxemkezuofzl.supabase.co/functions/v1/api-v1/brands/{id}/page-audits \
  -H "Authorization: Bearer ik_…"
Risposta (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 di pagina - singolo

Audit singolo per ID. Stessa forma degli elementi in `/brands/{id}/page-audits`.

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

Paginazione

Passa ?limit=N sugli endpoint di collection. Il default è 100, max 500. La paginazione con cursore è nella roadmap per le collection che crescono oltre una singola pagina.

Errori

Codici di stato

Stato Quando
200 Successo.
401 Token Bearer mancante o non valido.
404 Il brand o il percorso non esiste (o non ti appartiene).
405 Usato un metodo diverso da GET.
500 Errore del server imprevisto - riprova con backoff.

I body degli errori includono una stringa error e a volte un hint.

Server MCP

Usa Intendity da Claude / Cursor / qualsiasi client MCP

La stessa chiave API si autentica su un endpoint compatibile con MCP. Punta qualsiasi client Model Context Protocol su di esso e i dati di visibilità del tuo brand saranno disponibili come strumenti all'interno dell'assistente.

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

Auth: Authorization: Bearer ik_… sul trasporto SSE / HTTP. Consulta la documentazione del tuo client MCP per sapere come registrare un server personalizzato con un header.

Hai bisogno di un endpoint che non abbiamo?

Capacità di scrittura, webhook, paginazione con cursore - tutto nella roadmap. Dicci cosa costruiresti e daremo la priorità di conseguenza.

[email protected]