Endpoint
Gli endpoint REST che una chiave API dello spazio di lavoro può chiamare, raggruppati per ciò su cui lavorano, con i parametri principali di ciascuno.
Convenzioni
Tutti i percorsi sono relativi a https://teddit.io/api. Invia la chiave come descritto sotto Autenticazione.
- Accesso è il ruolo minimo della chiave che può chiamare l’endpoint:
viewer(una chiave Lettura),member(Lettura + modifica) oadmin(Lettura + scansione). Un ruolo superiore può sempre chiamarlo a sua volta. :orgIdè l’id dello spazio di lavoro daGET /whoami.:idè l’id di un sito daGET /orgs/:orgId/projects.- Parametri di periodo. Gli endpoint dei report accettano
period(day,week,monthoquarter; predefinitoweek) estart(una data qualsiasi dentro il periodo che vuoi,YYYY-MM-DD; predefinito l’ultimo periodo). Le loro risposte ripetonoperiodestarted elencano inperiodsogni periodo che ha dati. - Nelle risposte, “citato” è
mentioned, “linkato” èownCited, la tua posizione èbrandRank,visibilityè il punteggio di visibilità, e un assistente è unprovidercon la chiaveopenai,anthropic,perplexity,gemini,google_aioogoogle_ai_mode.
Gli strumenti MCP restituiscono gli stessi dati, quindi la descrizione di uno strumento descrive anche l’endpoint corrispondente.
Spazio di lavoro
| Metodo | Percorso | Accesso | Scopo |
|---|---|---|---|
| GET | /whoami | viewer | Lo spazio di lavoro, il ruolo e il nome della chiave. |
| GET | /orgs/:orgId | viewer | Lo spazio di lavoro: il suo nome e il ruolo di chi chiama. |
| GET | /orgs/:orgId/dashboard | viewer | Ogni sito con i suoi numeri attuali, gli assistenti collegati, e i limiti dello spazio di lavoro con le scansioni usate questo mese. |
| GET | /orgs/:orgId/projects | viewer | I siti dello spazio di lavoro. |
| GET | /orgs/:orgId/usage | viewer | Il credito, le ricariche, e quanto sono costate le scansioni: questo mese in totale e per sito con il tetto di ciascun sito, gli ultimi sei mesi, e il prezzo per risposta del modello predefinito di ogni assistente. |
| POST | /orgs/:orgId/projects | admin | Aggiunge un sito. |
| GET | /orgs/:orgId/providers | viewer | Gli assistenti, il modello con cui risponde ciascuno, e se ciascuno è collegato. |
| GET | /orgs/:orgId/members | viewer | Membri, inviti in sospeso e il limite di membri dello spazio di lavoro. |
| POST | /orgs/:orgId/invitations | admin | Invita una persona per email. |
| DELETE | /orgs/:orgId/invitations/:invitationId | admin | Annulla un invito in sospeso. |
| PATCH | /orgs/:orgId/members/:userId | admin | Cambia il ruolo di un membro. |
| DELETE | /orgs/:orgId/members/:userId | admin | Rimuove un membro. |
Aggiungere un sito accetta name e url (entrambi obbligatori), e facoltativamente industry, brandTerms (altri nomi, fino a 50), competitors (oggetti con name e domain, fino a 50), language (predefinito English) e location (predefinito United States).
Invitare accetta email e role (viewer, member o admin; predefinito member). Cambiare un ruolo accetta role. Cosa un admin può e non può fare agli altri membri è nella pagina Ruoli.
Non disponibile alle chiavi: tutto ciò che sta sotto /auth e /account, creare, eliminare e lasciare spazi di lavoro, rinominare uno spazio di lavoro (PATCH /orgs/:orgId, solo Owner), ricariche e fatture (solo Owner) e la gestione delle chiavi (/orgs/:orgId/tokens).
Siti
| Metodo | Percorso | Accesso | Scopo |
|---|---|---|---|
| GET | /projects/:id | viewer | Il sito, il ruolo di chi chiama e il numero di risposte conservate. |
| PATCH | /projects/:id | member | Cambia le impostazioni del sito. Il tetto, le impostazioni di scansione e allowedProviders (gli assistenti che il sito può interrogare, null per tutti) richiedono un admin. |
| PATCH | /projects/:id/schedule | admin | Attiva o disattiva le scansioni programmate. |
| POST | /projects/:id/reanalyse | member | Rilegge ogni risposta conservata con i nomi e i concorrenti attuali. Non chiama alcun assistente. |
Cambiare le impostazioni accetta uno qualsiasi di questi campi:
name,brandTerms: il nome del brand e i suoi altri nomi. Cambiare l’uno o l’altro rilegge tutte le risposte conservate; la risposta porta allora un riepilogoreanalysis.industry,language,location(il paese).scanFrequencyDays(da 1 a 365): l’intervallo tra le scansioni programmate.monthlyCapUsd: il tetto mensile del sito in dollari USA.nullo0lo rimuove.scanSettings: le impostazioni di scansione salvate, sostituite per intero. Un oggetto conproviders(chiavi degli assistenti; omesso significa tutti quelli collegati),models(da chiave dell’assistente a modello),category,budgetUsd(il massimo che una scansione può costare; 0 significa il doppio della sua stima) eskipAtCap(falselascia partire le scansioni anche quando il tetto mensile è esaurito).
Calendario accetta enabled (true o false). Attivare il calendario fissa la prima scansione per la notte successiva (UTC); le risposte di una scansione programmata arrivano entro qualche ora.
Eliminare un sito, con i suoi prompt, scansioni e risposte, spetta a un Owner autenticato e non è disponibile alle chiavi.
Buyer persona
GET /projects/:id/personas elenca le persona di un sito con quanti prompt chiedono nei panni di ciascuna; POST (member) ne aggiunge una con name (fino a 80 caratteri) e context (fino a 600): chi chiede, con le sue parole. PATCH /projects/:id/personas/:personaId cambia l’uno o l’altro; DELETE ne rimuove una, e i suoi prompt vengono posti senza persona dalla scansione successiva. I prompt accettano personaId in creazione, modifica e modifica in blocco (null lo azzera). Ogni risposta conserva le parole con cui è stata posta come context.
Report
Sono tutti GET, richiedono viewer, e accettano i parametri di periodo.
| Percorso | Restituisce |
|---|---|
/projects/:id/report | La Dashboard: report con i conteggi di ora e di prima, la share of voice, la classifica dei brand, le righe per assistente, cosa è cambiato, le fonti più citate, le serie dei grafici e scope: su cosa sono stati misurati i numeri (assistenti, risposte per domanda, luogo, lingua, da dove sono state lette le risposte di ogni assistente). report è null prima della prima scansione. |
/projects/:id/shares | I link di condivisione del report del sito (admin). POST con un label facoltativo ne crea uno e restituisce il suo url; DELETE /projects/:id/shares/:shareId lo revoca per sempre. Un link apre /share/:token senza accesso, per qualsiasi periodo, firmato con il nome e il logo dei report dello spazio di lavoro (PATCH /orgs/:id con reportName e reportLogo, Owner). |
/projects/:id/trends | Dieci periodi: le quote del sito per periodo, ogni prompt attivo con i suoi verdetti per periodo, prompt vinti e persi, quote per categoria, e gli elenchi held, volatile e lost. |
/projects/:id/sentiment | Il tono per assistente tra le risposte che ti citano. Aggiungi answers=1 per ottenere quelle risposte una per una, ciascuna con il suo tono e la frase citata. |
/projects/:id/sources | Ogni dominio citato dagli assistenti, che tipo di sito è e se le risposte che lo citano ti citano; e le tue pagine con i prompt e gli assistenti che linkano ciascuna. |
/projects/:id/competitors | I concorrenti tracciati, quanto spesso ogni brand è citato in totale e per assistente, i conteggi dei confronti diretti, e i suggerimenti di nomi non tracciati. |
/projects/:id/competitors/:competitorId | Un concorrente contro di te: numeri appaiati, per assistente, per categoria, i prompt divisi in tre, e le sue pagine citate. |
curl "https://teddit.io/api/projects/12/report?period=month&start=2026-09-15" \ -H "Authorization: Bearer tdt_…"
Come vengono calcolati i numeri in queste risposte: Metriche e stati.
Prompt e categorie
| Metodo | Percorso | Accesso | Scopo |
|---|---|---|---|
| GET | /projects/:id/prompts | viewer | L’elenco dei prompt con l’ultimo verdetto di ogni assistente e i quadratini dello storico. |
| GET | /projects/:id/prompts/export.csv | viewer | Lo stesso elenco come file CSV. |
| POST | /projects/:id/prompts | member | Aggiunge un prompt. |
| PATCH | /projects/:id/prompts/:promptId | member | Modifica un prompt. |
| POST | /projects/:id/prompts/bulk | member | Imposta uno stato o una categoria su molti prompt, o li elimina. |
| POST | /projects/:id/prompts/import | member | Importa prompt da testo CSV. |
| POST | /projects/:id/prompts/rewrite | admin | Riscrive le query di ricerca importate come domande complete. Non addebitato; richiede un credito superiore a zero. Fino a 10 chiamate all’ora. |
| GET | /projects/:id/prompts/rewrite/pending | viewer | Quanti prompt importati sono ancora query grezze. |
| GET | /projects/:id/prompts/:promptId | viewer | Un prompt: l’ultimo verdetto per assistente, ogni risposta nel tempo, lo storico settimana per settimana. |
| GET | /projects/:id/prompts/:promptId/answer | viewer | Una risposta parola per parola, con i brand citati, le fonti e le ricerche web. |
| GET | /projects/:id/categories | viewer | Le categorie con i loro conteggi di prompt. |
| POST | /projects/:id/categories | member | Aggiunge una categoria vuota. |
| POST | /projects/:id/categories/merge | member | Rinomina, unisce o rimuove categorie. |
L’elenco e l’esportazione accettano gli stessi parametri di query: q (ricerca testuale), category, status (draft, active, paused), intent, verdict (named, lost, cited, missing, failed), competitor (il nome di un concorrente tracciato), stability (held, volatile, lost) e scanned (yes, never). L’elenco accetta anche sort (created, text, category, rank, scanned), dir (asc, desc), page, perPage (da 5 a 200, predefinito 20) e i parametri di periodo, che stabiliscono cosa rappresenta un quadratino dello storico.
Aggiungere accetta text (da 3 a 500 caratteri, obbligatorio), category o categories (un elenco di fino a 8), intent (predefinito informational), funnel (predefinito awareness) e status (predefinito active). Un testo già tracciato risponde 409. Modificare accetta gli stessi campi, tutti facoltativi; categories sostituisce l’intero elenco.
In blocco accetta ids (da 1 a 5000) e status, category o delete: true. Eliminare un prompt elimina le sue risposte.
Importare accetta contents (il testo del file, fino a 2.000.000 di caratteri), status (predefinito draft) e dryRun. Restituisce rows, created, updated, skipped e categories. Il formato del file è nella pagina Importare i prompt.
Una risposta accetta engine (la chiave di un assistente; predefinito il primo assistente che ha risposto) o r (l’id di una risposta passata, preso dai results del prompt).
Unire categorie accetta names (le categorie da accorpare) e into (il nome che assumono). Un nome è una rinomina, più nomi sono un’unione, e un into vuoto rimuove le categorie dai loro prompt.
Concorrenti e pagine
| Metodo | Percorso | Accesso | Scopo |
|---|---|---|---|
| POST | /projects/:id/competitors | member | Traccia un concorrente. |
| PATCH | /projects/:id/competitors/:competitorId | member | Modifica un concorrente. Cambiano solo i campi inviati. |
| DELETE | /projects/:id/competitors/:competitorId | member | Smette di tracciare un concorrente. Le risposte conservate restano. |
| GET | /projects/:id/pages | viewer | Le tue pagine dalla sitemap con i loro titoli, e se una risposta attuale linka ciascuna. |
| GET | /projects/:id/crawlers | viewer | Cosa il robots.txt lascia leggere a ogni crawler IA, la riga decisiva, llms.txt, e lo storico delle verifiche. |
| POST | /projects/:id/crawlers/check | member | Rilegge adesso robots.txt e llms.txt; restituisce lo stesso della GET. |
| GET | /projects/:id/searches | viewer | Le ricerche web eseguite dagli assistenti per i prompt attivi, le più comuni per prime. |
| GET | /projects/:id/pages/:pageId/prompts | viewer | I prompt le cui risposte attuali linkano una pagina. |
| POST | /projects/:id/pages/import-sitemap | member | Rilegge adesso la sitemap del sito e aggiunge le pagine non ancora elencate. Fino a 10 chiamate all’ora. |
Tracciare accetta name (obbligatorio), domain, aliases (altri nomi, fino a 30), color e logo. Modificare accetta gli stessi campi, tutti facoltativi: cambia solo ciò che invii, aliases sostituisce l’intero elenco, e domain: null rimuove il dominio. Tutti e tre gli endpoint dei concorrenti rileggono le risposte conservate quando i nomi cambiano e restituiscono il risultato come reanalysis.
Pagine accetta q, section (la prima parte del percorso), shown (yes o no), page e perPage (da 5 a 200, predefinito 50).
Scansioni
| Metodo | Percorso | Accesso | Scopo |
|---|---|---|---|
| GET | /projects/:id/scan-options | viewer | Gli assistenti collegati, i loro modelli con un costo per risposta, i prompt attivi per categoria, le scansioni usate questo mese e la spesa del sito questo mese. |
| POST | /projects/:id/scans/estimate | viewer | Il costo previsto di una scansione così come configurata. |
| POST | /projects/:id/scans | admin | Avvia una scansione. |
| GET | /projects/:id/scans/live | viewer | La scansione in corso, se c’è, con ritmo e tempo rimanente. |
| POST | /projects/:id/scans/:scanId/cancel | admin | Ferma una scansione in corso. |
| GET | /projects/:id/scans | viewer | Le ultime 30 scansioni. |
| GET | /projects/:id/scans/:scanId | viewer | Una scansione e le risposte che ha raccolto, 25 per pagina. |
Stima e avvio accettano lo stesso body. Ogni campo è facoltativo:
providers: chiavi degli assistenti. Vuoto significa ogni assistente collegato.promptIds: un insieme scelto di prompt. Vuoto significa ogni prompt attivo. I prompt non attivi vengono saltati.category: scansiona una categoria.sample: scansiona questo numero di prompt, estratti a caso.models: da chiave dell’assistente a modello, tra le opzioni inscan-options.chatgpt-appegemini-app(veloci: risposta subito) echatgpt-app-queueegemini-app-queue(lenti e più economici: qualche minuto) prendono la risposta come la mostra l’app.saved:trueprende gli assistenti, i modelli e la categoria dalle impostazioni di scansione salvate del sito invece che da questa richiesta. All’avvio prende anche il limite per scansione salvato.- Solo all’avvio:
budgetUsd(fermati quando la scansione ha raggiunto questo costo; omesso, il doppio della sua stima) elabel.
La stima restituisce prompts, answers, cost e formatted. L’avvio restituisce la scansione, risponde 402 quando il credito non copre la scansione, e 400 con il motivo per qualsiasi altra cosa le impedisca di partire. I motivi, e come viene contato il costo, sono nella pagina Credito e limiti di spesa.
Una scansione accetta tab (all, notNamed, competitorsOnly, errors), engine (la chiave di un assistente) e page. Gli stati di una scansione sono queued, running, cancelling, cancelled, done e failed.
Un esempio completo
Trova il sito, aggiungi un prompt, stima una scansione di una categoria, avviala e leggi il risultato. Avviare la scansione richiede una chiave Lettura + scansione.
KEY="tdt_…"
API="https://teddit.io/api"
# 1. Which workspace is this key for?
curl "$API/whoami" -H "Authorization: Bearer $KEY"
# → "org": { "id": 3, … }
# 2. The sites of the workspace
curl "$API/orgs/3/projects" -H "Authorization: Bearer $KEY"
# → "projects": [{ "id": 12, "domain": "brightloop.example", … }]
# 3. Add a prompt
curl -X POST "$API/projects/12/prompts" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"text": "What does email automation cost for 10,000 contacts?", "category": "pricing", "intent": "commercial"}'
# 4. What would a scan of that category cost?
curl -X POST "$API/projects/12/scans/estimate" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"category": "pricing"}'
# → { "prompts": …, "answers": …, "cost": …, "formatted": "$…" }
# 5. Run it, and stop at 2 dollars
curl -X POST "$API/projects/12/scans" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"category": "pricing", "budgetUsd": 2}'
# 6. Follow it until "run" is null
curl "$API/projects/12/scans/live" -H "Authorization: Bearer $KEY"
# 7. Read this week's report
curl "$API/projects/12/report" -H "Authorization: Bearer $KEY"