API Trovavio

Analizza i tuoi siti dal tuo codice

Lanci l'analisi di un sito, rileggi i punteggi in JSON e fai scrivere a Trovavio titoli e descrizioni migliori. È quello che fai dalla dashboard, ma da uno script, da una pipeline di rilascio o dal tuo gestionale. Quattro endpoint REST, dal piano Pro. Base URL https://trovavio.com

Disponibile dal piano
Pro
Chiamate al mese, Pro
500
Chiamate al mese, Agenzia
2.000
Endpoint, in JSON
4

Salta a

Cosa puoi fare Esempi pronti Autenticazione Piani e limiti GET /sites GET /sites/:domain POST /audit POST /ai Errori

Cosa puoi fare con l'API

Sei usi che tornano, dai più semplici ai più completi. Su ogni scheda trovi gli endpoint che servono.

Cosa l'API non fa. Analizza e propone, non modifica il sito: per applicare le correzioni su WordPress c'è il plugin Trovavio. Non genera il report in PDF, che si scarica dalla dashboard, non gestisce team, etichette o marchio bianco e non manda webhook: i risultati si leggono quando servono.

Tre esempi pronti da copiare

Sono script completi. Cambia il dominio, metti la chiave nella variabile TROVAVIO_KEY e girano.

Bash Dopo il rilascio: blocca la build se il punteggio scende

Serve curl e jq. Analizza tutto il sito, stampa i problemi gravi e termina con errore se il punteggio è sotto la soglia. La scansione di un sito intero può durare qualche minuto: il timeout è di 300 secondi.

#!/usr/bin/env bash
set -euo pipefail
SOGLIA=70

RISPOSTA=$(curl -sS --max-time 300 -X POST https://trovavio.com/api/v1/audit \
  -H "Authorization: Bearer $TROVAVIO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"ilmiosito.it","mode":"site"}')

PUNTEGGIO=$(echo "$RISPOSTA" | jq -e '.score')
echo "Punteggio: $PUNTEGGIO"
echo "$RISPOSTA" | jq -r '.issues[] | select(.severity=="high") | "- \(.title)"'

[ "$PUNTEGGIO" -ge "$SOGLIA" ] || { echo "Sotto la soglia di $SOGLIA"; exit 1; }
Node.js Ogni mattina: scrivi su Slack se un sito ha perso punti

Da Node 18, senza dipendenze. prevScore è il punteggio dell'analisi precedente: resta vuoto alla prima analisi e quando cambia il metodo di calcolo, e in quei casi il confronto salta da solo.

const risposta = await fetch("https://trovavio.com/api/v1/sites", {
  headers: { Authorization: `Bearer ${process.env.TROVAVIO_KEY}` },
});
if (!risposta.ok) throw new Error(`Trovavio ha risposto ${risposta.status}`);

const { sites } = await risposta.json();
const calati = sites.filter((s) => s.prevScore != null && s.score < s.prevScore);

if (calati.length) {
  await fetch(process.env.SLACK_WEBHOOK, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      text: calati.map((s) => `${s.domain}: da ${s.prevScore} a ${s.score}`).join("\n"),
    }),
  });
}
Python Dopo l'analisi: porta i problemi gravi nel tuo tracker

Solo libreria standard. Al posto della print crei l'attività con le API del tuo tracker: ogni problema ha già il titolo e l'elenco delle pagine.

import json, os, urllib.request

richiesta = urllib.request.Request(
    "https://trovavio.com/api/v1/sites/ilmiosito.it",
    headers={"Authorization": "Bearer " + os.environ["TROVAVIO_KEY"]},
)
sito = json.load(urllib.request.urlopen(richiesta))

for problema in sito["issues"]:
    if problema["severity"] == "high":
        print(problema["title"], problema["pages"])  # qui crei l'attività

Autenticazione

Gli endpoint sono per chi ha il piano Pro o Agenzia, prova gratuita compresa. Genera la chiave da Account, sezione API Keys: ha il prefisso trv_ seguito da 32 caratteri esadecimali e viene mostrata una sola volta, quindi salvala in un posto sicuro, per esempio fra le variabili segrete della tua pipeline. Nel database Trovavio ne conserva solo l'hash, mai la chiave in chiaro.

Ogni richiesta deve includere l'header Authorization. Tutte le risposte sono in formato JSON. Puoi tenere fino a 20 chiavi attive, una per integrazione, e revocarne una senza toccare le altre. La chiave legge i siti dello spazio di lavoro del tuo account: se lavori in agenzia con più persone, tutti vedono gli stessi siti e le chiamate si sommano sulla stessa quota.

curl -H "Authorization: Bearer trv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  https://trovavio.com/api/v1/sites

Piani e limiti

L'API è inclusa nei piani Pro e Agenzia. Free e Solo non la includono: con la chiave di un account su uno di questi piani ogni endpoint risponde 401. Non ci sono limiti al minuto: contano il tetto mensile di chiamate e, per le analisi, il tetto giornaliero del piano.

Cosa cambiaProAgenzia
Chiamate API al mese5002.000
Siti nel tuo spazio315
Pagine per analisi, in modalità site50200
Analisi al giorno3060
Crediti AI al mese, solo per POST /api/v1/ai5002.000
Modello AISonnetSonnet

Le chiamate API si azzerano il primo di ogni mese. I crediti AI sono gli stessi della dashboard, un solo conteggio: durante la prova gratuita del Pro sono 60. Le analisi al giorno sono condivise con la dashboard: una analisi lanciata dall'API vale come una lanciata a mano.

Costo per endpoint

EndpointChiamate APIAltro
GET /api/v1/sites1Niente
GET /api/v1/sites/:domain1Niente
POST /api/v1/audit11 analisi del giorno. Se il dominio è nuovo, 1 sito del piano. Nessun credito AI.
POST /api/v1/ai11 credito AI per azione, restituito se la generazione fallisce.

Ogni risposta espone tre header: X-RateLimit-Limit (il tetto del mese), X-RateLimit-Remaining (le chiamate che restano) e X-RateLimit-Reset (quando il conteggio si azzera). Superato il tetto ricevi 429 fino a quella data.

Endpoint

GET /api/v1/sites

Elenca tutti i siti del tuo spazio con i punteggi dell'ultima analisi salvata. È la chiamata da usare per un cruscotto o per un controllo periodico: non richiede parametri e non lancia nessuna scansione.

Esempio
curl -H "Authorization: Bearer trv_xxx" \
  https://trovavio.com/api/v1/sites
Risposta 200
{
  "sites": [
    {
      "domain": "ilmiosito.it",
      "score": 74,
      "seoScore": 78,
      "geoScore": 70,
      "prevScore": 71,
      "metodoPunteggio": 2,
      "lastScanAt": "2026-07-01T08:00:00.000Z"
    }
  ],
  "total": 1
}
Errori
401INVALID_API_KEY: chiave mancante, non valida o account su un piano senza API.
429API_RATE_LIMIT_EXCEEDED: superato il tetto di chiamate del mese.
GET /api/v1/sites/:domain

Dettaglio dell'ultima analisi di un sito: punteggi SEO e GEO, variazione rispetto all'analisi precedente ed elenco dei problemi, ognuno con le pagine interessate.

Parametri (path)
NomeTipoDescrizione
domain obbligatoriostringDominio del sito, senza protocollo né www (es. ilmiosito.it).
Esempio
curl -H "Authorization: Bearer trv_xxx" \
  https://trovavio.com/api/v1/sites/ilmiosito.it
Risposta 200
{
  "domain": "ilmiosito.it",
  "score": 74,
  "seoScore": 78,
  "geoScore": 70,
  "prevScore": 71,
  "metodoPunteggio": 2,
  "lastScanAt": "2026-07-01T08:00:00.000Z",
  "issues": [
    {
      "title": "Title troppo corto",
      "simpleTitle": "Il titolo della pagina è troppo corto",
      "category": "seo",
      "severity": "high",
      "description": "Il tag title è sotto i 10 caratteri.",
      "pages": ["/servizi"]
    }
  ]
}
Campi della risposta
CampoTipoCosa contiene
score, seoScore, geoScorenumberPunteggio complessivo, SEO e GEO, da 0 a 100.
prevScorenumber | nullIl punteggio complessivo dell'analisi precedente. null alla prima analisi e quando il metodo di calcolo è cambiato.
metodoPunteggionumberLa versione del metodo con cui è calcolato il punteggio. Due punteggi di metodi diversi non si confrontano.
lastScanAtstringData e ora dell'analisi, in formato ISO 8601.
issues[].severitystringhigh, medium o low: quanto pesa il problema.
issues[].categorystringseo, geo o local (SEO locale, per le attività con una sede).
issues[].title, simpleTitle, descriptionstringIl problema in termini tecnici, in parole semplici e la spiegazione.
issues[].pagesstring[]I percorsi delle pagine interessate, come /servizi.
Errori
400BAD_REQUEST: dominio mancante o non valido.
401INVALID_API_KEY: chiave non valida o account su un piano senza API.
404NOT_FOUND: nessuna analisi salvata per quel dominio. Lanciala con POST /api/v1/audit.
429API_RATE_LIMIT_EXCEEDED: superato il tetto di chiamate del mese.
POST /api/v1/audit

Lancia l'analisi SEO e GEO di un dominio e restituisce il risultato nella stessa forma di GET /api/v1/sites/:domain. La risposta arriva a scansione finita e il risultato resta salvato: lo ritrovi nella dashboard e con GET /api/v1/sites. Costa 1 chiamata API e nessun credito AI.

La modalità single risponde in pochi secondi. La modalità site legge fino a 50 pagine sul Pro e 200 sull'Agenzia e può durare alcuni minuti: imposta un timeout di almeno 300 secondi.

Parametri (body JSON)
NomeTipoDescrizione
domain obbligatoriostringDominio da analizzare, senza protocollo né www (es. ilmiosito.it). Stesso formato di GET /api/v1/sites/:domain.
url alias deprecatostringAccettato per retrocompatibilità al posto di domain. Se usato, la risposta include deprecation_warning. Usa domain.
mode opzionalestringsingle (default) analizza una pagina; site legge il sito intero, fino al limite di pagine del piano.
Esempio
curl -X POST https://trovavio.com/api/v1/audit \
  -H "Authorization: Bearer trv_xxx" \
  -H "Content-Type: application/json" \
  -d '{"domain":"ilmiosito.it","mode":"single"}'
Risposta 200
{
  "domain": "ilmiosito.it",
  "score": 74,
  "seoScore": 78,
  "geoScore": 70,
  "prevScore": 71,
  "metodoPunteggio": 2,
  "lastScanAt": "2026-07-05T09:12:00.000Z",
  "issues": [ ... ]
}
Errori
400BAD_REQUEST: manca domain (o l'alias url). URL_INVALID: l'indirizzo non è valido.
401INVALID_API_KEY: chiave non valida o account su un piano senza API.
403PLAN_SITES_LIMIT_REACHED: il dominio è nuovo e hai già i siti previsti dal piano (3 sul Pro, 15 sull'Agenzia). La risposta include current e limit.
429API_RATE_LIMIT_EXCEEDED: superato il tetto di chiamate del mese. USER_AUDIT_DAILY_CAP: superate le analisi del giorno (30 sul Pro, 60 sull'Agenzia); la risposta include resetAt.
500INTERNAL_ERROR: il sito non è raggiungibile o l'analisi è fallita. L'analisi del giorno non viene scalata.
POST /api/v1/ai

Genera un contenuto ottimizzato con «Scrivi con l'AI» per un dominio già analizzato, partendo dal contenuto vero della pagina. Restituisce una proposta da rivedere: non la pubblica. Consuma 1 chiamata API e 1 credito AI per azione. Devi prima aver analizzato il dominio.

Parametri (body JSON)
NomeTipoDescrizione
domain obbligatoriostringDominio già presente in un'analisi (es. ilmiosito.it).
action obbligatoriostringCosa generare. title, description, h1 e alts restituiscono un elenco proposals. schema, schema_org e faq_schema restituiscono dati strutturati JSON-LD da incollare nell'head. llms_txt restituisce il file llms.txt. checklist restituisce da 5 a 8 azioni da fare in ordine di priorità, ognuna con il motivo e il tempo stimato.
vertical opzionalestringSettore per calibrare il tono (es. avvocato, medico). Default generico.
Esempio
curl -X POST https://trovavio.com/api/v1/ai \
  -H "Authorization: Bearer trv_xxx" \
  -H "Content-Type: application/json" \
  -d '{"domain":"ilmiosito.it","action":"title","vertical":"avvocato"}'
Risposta 200
{
  "result": {
    "proposals": [
      "Studio Legale Rossi, Avvocato Civilista a Milano"
    ]
  }
}
Errori
400BAD_REQUEST: domain o action mancante, oppure azione non valida (la risposta include allowedActions).
401INVALID_API_KEY: chiave non valida o account su un piano senza API.
402CREDITS_EXHAUSTED: crediti AI del mese esauriti (la risposta include aiCredits).
404NOT_FOUND: nessuna analisi per quel dominio, lancia prima POST /api/v1/audit.
429API_RATE_LIMIT_EXCEEDED: superato il tetto di chiamate del mese.
500, 502, 503INTERNAL_ERROR o AI_EMPTY: generazione fallita o senza un risultato utilizzabile. AI_BUSY (503): il modello è molto richiesto, riprova dopo il tempo indicato in Retry-After. In tutti questi casi il credito AI viene restituito.

Tutti gli errori in un posto

Gli errori hanno sempre un codice leggibile dalla macchina nel campo error; dove serve, message lo spiega in italiano.

StatoCodiceCosa fare
401INVALID_API_KEYControlla la chiave e il piano dell'account: Free e Solo non hanno l'API.
402CREDITS_EXHAUSTEDI crediti AI del mese sono finiti: tornano il primo del mese.
403PLAN_SITES_LIMIT_REACHEDHai già i siti del piano: rimuovine uno dall'archivio o passa al piano superiore.
404NOT_FOUNDIl dominio non è stato ancora analizzato.
429API_RATE_LIMIT_EXCEEDEDAspetta l'azzeramento indicato in X-RateLimit-Reset.
429USER_AUDIT_DAILY_CAPLe analisi del giorno sono finite: riprova dopo resetAt.
5xxINTERNAL_ERROR, AI_EMPTY, AI_BUSYRiprova. Se la richiesta non ha prodotto un risultato, il credito AI e l'analisi del giorno vengono restituiti; la chiamata API resta conteggiata.

Domande frequenti

Che piano serve per usare l'API?
Il piano Pro o il piano Agenzia, prova gratuita compresa. I piani Free e Solo non includono l'API: con la chiave di un account su questi piani ogni endpoint risponde 401.
Come ottengo una API key Trovavio?
La API key si genera dal pannello Account, sezione API Keys, con un piano Pro o Agenzia attivo. Ha il prefisso trv_ e viene mostrata una sola volta.
Quante richieste posso fare al mese?
Il piano Pro include 500 chiamate API al mese, il piano Agenzia 2.000. Il conteggio si azzera il primo di ogni mese. Non ci sono limiti al minuto; le analisi hanno in più il tetto giornaliero del piano, 30 al giorno sul Pro e 60 sull'Agenzia.
Chiamate API e crediti AI sono la stessa cosa?
No, sono due contatori separati. Ogni richiesta a un endpoint conta come una chiamata API; solo POST /api/v1/ai consuma anche un credito AI, lo stesso pool della dashboard: 500 al mese sul Pro, 2.000 sull'Agenzia.
Cosa succede se supero il limite?
Ricevi un errore 429 e le chiamate riprendono quando il conteggio si azzera, il primo del mese successivo. Se ti serve più spazio, passa dal Pro all'Agenzia: da 500 a 2.000 chiamate al mese.
L'API Trovavio supporta l'audit GEO?
Sì. L'API restituisce sia il punteggio SEO sia il punteggio GEO (visibilità su ChatGPT, Claude, Perplexity, Gemini) per ogni sito analizzato.
Posso applicare le correzioni sul sito dall'API?
No. L'API analizza e propone: POST /api/v1/ai restituisce testi e dati strutturati da rivedere, non li pubblica. Per applicare le correzioni su WordPress c'è il plugin Trovavio.

Prima di scrivere codice, guarda che dati escono

Il JSON che restituisce l'API è lo stesso report che vedi a schermo. Analizza un sito e leggilo, poi decidi se ti serve la chiave.

Lingua: Italiano · English · Español · Français