Endpunkte
Die REST-Endpunkte, die ein Workspace-API-Schlüssel aufrufen kann, gruppiert nach dem, womit sie arbeiten, mit den wichtigsten Parametern jedes einzelnen.
Konventionen
Alle Pfade sind relativ zu https://teddit.io/api. Senden Sie den Schlüssel wie unter Authentifizierung beschrieben.
- Zugang ist die niedrigste Schlüsselrolle, die den Endpunkt aufrufen darf:
viewer(ein Schlüssel Lesen),member(Lesen + Bearbeiten) oderadmin(Lesen + Scannen). Eine höhere Rolle darf ihn immer ebenfalls aufrufen. :orgIdist die Workspace-ID ausGET /whoami.:idist eine Site-ID ausGET /orgs/:orgId/projects.- Zeitraum-Parameter. Die Bericht-Endpunkte nehmen
period(day,week,monthoderquarter; Voreinstellungweek) undstart(ein beliebiges Datum innerhalb des gewünschten Zeitraums,YYYY-MM-DD; Voreinstellung der letzte Zeitraum). Ihre Antworten wiederholenperiodundstartund führen jeden Zeitraum mit Daten inperiodsauf. - In Antworten ist „genannt“
mentioned, „verlinkt“ istownCited, Ihr Platz istbrandRank,visibilityist der Sichtbarkeitswert, und ein Assistent ist einprovidermit dem Schlüsselopenai,anthropic,perplexity,gemini,google_aioodergoogle_ai_mode.
Die MCP-Werkzeuge geben dieselben Daten zurück, die Beschreibung eines Werkzeugs beschreibt also auch den passenden Endpunkt.
Workspace
| Methode | Pfad | Zugang | Zweck |
|---|---|---|---|
| GET | /whoami | viewer | Der Workspace, die Rolle und der Name des Schlüssels. |
| GET | /orgs/:orgId | viewer | Der Workspace: sein Name und die Rolle des Aufrufers. |
| GET | /orgs/:orgId/dashboard | viewer | Jede Site mit ihren aktuellen Zahlen, die verbundenen Assistenten und die Workspace-Limits mit den diesen Monat genutzten Scans. |
| GET | /orgs/:orgId/projects | viewer | Die Sites des Workspace. |
| GET | /orgs/:orgId/usage | viewer | Das Guthaben, Aufladungen und was die Scans gekostet haben: diesen Monat insgesamt und pro Site mit der Grenze jeder Site, die letzten sechs Monate und der Preis pro Antwort des Standardmodells jedes Assistenten. |
| POST | /orgs/:orgId/projects | admin | Eine Site anlegen. |
| GET | /orgs/:orgId/providers | viewer | Die Assistenten, das Modell, mit dem jeder antwortet, und ob jeder verbunden ist. |
| GET | /orgs/:orgId/members | viewer | Mitglieder, offene Einladungen und das Mitgliederlimit des Workspace. |
| POST | /orgs/:orgId/invitations | admin | Eine Person per E-Mail einladen. |
| DELETE | /orgs/:orgId/invitations/:invitationId | admin | Eine offene Einladung zurückziehen. |
| PATCH | /orgs/:orgId/members/:userId | admin | Die Rolle eines Mitglieds ändern. |
| DELETE | /orgs/:orgId/members/:userId | admin | Ein Mitglied entfernen. |
Eine Site anlegen nimmt name und url (beide Pflicht) und optional industry, brandTerms (weitere Namen, bis zu 50), competitors (Objekte mit name und domain, bis zu 50), language (Voreinstellung English) und location (Voreinstellung United States).
Einladen nimmt email und role (viewer, member oder admin; Voreinstellung member). Eine Rolle ändern nimmt role. Was ein Admin mit anderen Mitgliedern tun darf und was nicht, steht auf der Seite Rollen.
Für Schlüssel nicht verfügbar: alles unter /auth und /account, Workspaces anlegen, löschen und verlassen, einen Workspace umbenennen (PATCH /orgs/:orgId, nur Owner), Aufladen und Rechnungen (nur Owner) und Schlüssel verwalten (/orgs/:orgId/tokens).
Sites
| Methode | Pfad | Zugang | Zweck |
|---|---|---|---|
| GET | /projects/:id | viewer | Die Site, die Rolle des Aufrufers und die Zahl der gespeicherten Antworten. |
| PATCH | /projects/:id | member | Die Einstellungen der Site ändern. Die Grenze, die Scan-Einstellungen und allowedProviders (die Assistenten, die die Site fragen darf, null für alle) brauchen einen Admin. |
| PATCH | /projects/:id/schedule | admin | Geplante Scans ein- oder ausschalten. |
| POST | /projects/:id/reanalyse | member | Jede gespeicherte Antwort mit den aktuellen Namen und Wettbewerbern erneut lesen. Ruft keinen Assistenten auf. |
Einstellungen ändern nimmt beliebige dieser Felder:
name,brandTerms: der Markenname und seine weiteren Namen. Eine Änderung von einem der beiden liest alle gespeicherten Antworten erneut; die Antwort trägt dann einereanalysis-Zusammenfassung.industry,language,location(das Land).scanFrequencyDays(1 bis 365): der Abstand zwischen geplanten Scans.monthlyCapUsd: die Monatsgrenze der Site in US-Dollar.nulloder0entfernt sie.scanSettings: die gespeicherten Scan-Einstellungen, als Ganzes ersetzt. Ein Objekt mitproviders(Assistenten-Schlüssel; weggelassen bedeutet alle verbundenen),models(Assistenten-Schlüssel zu Modell),category,budgetUsd(das Meiste, was ein Scan kosten darf; 0 bedeutet das Doppelte seiner Schätzung) undskipAtCap(falselässt Scans starten, auch wenn die Monatsgrenze ausgeschöpft ist).
Zeitplan nimmt enabled (true oder false). Das Einschalten des Zeitplans setzt den ersten Scan auf die nächste Nacht (UTC); die Antworten eines geplanten Scans kommen innerhalb weniger Stunden an.
Eine Site zu löschen, mit ihren Prompts, Scans und Antworten, ist einem angemeldeten Owner vorbehalten und für Schlüssel nicht verfügbar.
Käufer-Personas
GET /projects/:id/personas listet die Personas einer Site mit der Zahl der Prompts, die jede als Fragende nutzen; POST (member) fügt eine hinzu mit name (bis zu 80 Zeichen) und context (bis zu 600): wer fragt, in dessen Worten. PATCH /projects/:id/personas/:personaId ändert eines von beiden; DELETE entfernt eine, und ihre Prompts werden ab dem nächsten Scan ohne Persona gestellt. Prompts nehmen personaId beim Anlegen, Bearbeiten und Stapelbearbeiten (null löscht sie). Jede Antwort behält den Wortlaut, mit dem sie gestellt wurde, als context.
Berichte
Alle diese sind GET, brauchen viewer und nehmen die Zeitraum-Parameter.
| Pfad | Gibt zurück |
|---|---|
/projects/:id/report | Das Dashboard: report mit den Zahlen jetzt und davor, Share of Voice, der Markenrangliste, Zeilen pro Assistent, was sich geändert hat, den meistzitierten Quellen, den Diagrammreihen und scope: worauf die Zahlen gemessen wurden (Assistenten, Antworten pro Frage, Ort, Sprache, woher die Antworten jedes Assistenten gelesen wurden). report ist vor dem ersten Scan null. |
/projects/:id/shares | Berichtslinks für den Bericht der Site (admin). POST mit optionalem label erstellt einen und gibt seine url zurück; DELETE /projects/:id/shares/:shareId widerruft ihn endgültig. Ein Link öffnet /share/:token ohne Anmeldung, für jeden Zeitraum, mit Berichtsname und Logo des Workspace (PATCH /orgs/:id mit reportName und reportLogo, Owner). |
/projects/:id/trends | Zehn Zeiträume: die Anteile der Site pro Zeitraum, jeder aktive Prompt mit seinen Urteilen pro Zeitraum, gewonnene und verlorene Prompts, Anteile pro Kategorie und die Listen gehalten, schwankend und verloren. |
/projects/:id/sentiment | Tonalität pro Assistent unter den Antworten, die Sie nennen. Fügen Sie answers=1 hinzu, um diese Antworten einzeln zu bekommen, jede mit ihrer Tonalität und dem zitierten Satz. |
/projects/:id/sources | Jede Domain, die die Assistenten zitiert haben, welche Art von Site sie ist und ob die Antworten, die sie zitieren, Sie nennen; und Ihre eigenen Seiten mit den Prompts und Assistenten, die auf jede verlinken. |
/projects/:id/competitors | Die verfolgten Wettbewerber, wie oft jede Marke insgesamt und pro Assistent genannt wird, Zahlen im direkten Vergleich und Vorschläge nicht verfolgter Namen. |
/projects/:id/competitors/:competitorId | Ein Wettbewerber gegen Sie: gepaarte Zahlen, pro Assistent, pro Kategorie, die Prompts dreifach aufgeteilt und seine zitierten Seiten. |
curl "https://teddit.io/api/projects/12/report?period=month&start=2026-09-15" \ -H "Authorization: Bearer tdt_…"
Wie die Zahlen in diesen Antworten berechnet werden: Kennzahlen und Status.
Prompts und Kategorien
| Methode | Pfad | Zugang | Zweck |
|---|---|---|---|
| GET | /projects/:id/prompts | viewer | Die Prompt-Liste mit dem letzten Urteil jedes Assistenten und den Verlaufskästchen. |
| GET | /projects/:id/prompts/export.csv | viewer | Dieselbe Liste als CSV-Datei. |
| POST | /projects/:id/prompts | member | Einen Prompt hinzufügen. |
| PATCH | /projects/:id/prompts/:promptId | member | Einen Prompt bearbeiten. |
| POST | /projects/:id/prompts/bulk | member | Einen Status oder eine Kategorie für viele Prompts setzen, oder sie löschen. |
| POST | /projects/:id/prompts/import | member | Prompts aus CSV-Text importieren. |
| POST | /projects/:id/prompts/rewrite | admin | Importierte Suchanfragen zu vollständigen Fragen umschreiben. Nicht berechnet; braucht ein Guthaben über null. Bis zu 10 Aufrufe pro Stunde. |
| GET | /projects/:id/prompts/rewrite/pending | viewer | Wie viele importierte Prompts noch rohe Anfragen sind. |
| GET | /projects/:id/prompts/:promptId | viewer | Ein Prompt: das letzte Urteil pro Assistent, jede Antwort im Zeitverlauf, die Historie Woche für Woche. |
| GET | /projects/:id/prompts/:promptId/answer | viewer | Eine Antwort Wort für Wort, mit genannten Marken, Quellen und Websuchen. |
| GET | /projects/:id/categories | viewer | Die Kategorien mit ihren Prompt-Zahlen. |
| POST | /projects/:id/categories | member | Eine leere Kategorie anlegen. |
| POST | /projects/:id/categories/merge | member | Kategorien umbenennen, zusammenführen oder entfernen. |
Die Liste und der Export nehmen dieselben Query-Parameter: q (Textsuche), category, status (draft, active, paused), intent, verdict (named, lost, cited, missing, failed), competitor (der Name eines verfolgten Wettbewerbers), stability (held, volatile, lost) und scanned (yes, never). Die Liste nimmt außerdem sort (created, text, category, rank, scanned), dir (asc, desc), page, perPage (5 bis 200, Voreinstellung 20) und die Zeitraum-Parameter, die festlegen, wofür ein Verlaufskästchen steht.
Hinzufügen nimmt text (3 bis 500 Zeichen, Pflicht), category oder categories (eine Liste von bis zu 8), intent (Voreinstellung informational), funnel (Voreinstellung awareness) und status (Voreinstellung active). Ein bereits verfolgter Text antwortet 409. Bearbeiten nimmt dieselben Felder, alle optional; categories ersetzt die ganze Liste.
Stapel nimmt ids (1 bis 5000) und status, category oder delete: true. Das Löschen eines Prompts löscht seine Antworten.
Import nimmt contents (der Text der Datei, bis zu 2.000.000 Zeichen), status (Voreinstellung draft) und dryRun. Er gibt rows, created, updated, skipped und categories zurück. Das Dateiformat steht auf der Seite Prompts importieren.
Eine Antwort nimmt engine (ein Assistenten-Schlüssel; Voreinstellung der erste Assistent, der geantwortet hat) oder r (die ID einer früheren Antwort, aus den results des Prompts).
Kategorien zusammenführen nimmt names (die zusammenzulegenden Kategorien) und into (der Name, den sie bekommen). Ein Name ist eine Umbenennung, mehrere sind eine Zusammenführung, und ein leeres into entfernt die Kategorien von ihren Prompts.
Wettbewerber und Seiten
| Methode | Pfad | Zugang | Zweck |
|---|---|---|---|
| POST | /projects/:id/competitors | member | Einen Wettbewerber verfolgen. |
| PATCH | /projects/:id/competitors/:competitorId | member | Einen Wettbewerber ändern. Nur die gesendeten Felder ändern sich. |
| DELETE | /projects/:id/competitors/:competitorId | member | Einen Wettbewerber nicht mehr verfolgen. Gespeicherte Antworten bleiben erhalten. |
| GET | /projects/:id/pages | viewer | Ihre Seiten aus der Sitemap mit ihren Titeln, und ob eine aktuelle Antwort auf jede verlinkt. |
| GET | /projects/:id/crawlers | viewer | Was robots.txt jeden KI-Crawler lesen lässt, die entscheidende Zeile, llms.txt und die Historie der Prüfungen. |
| POST | /projects/:id/crawlers/check | member | robots.txt und llms.txt jetzt erneut lesen; gibt dasselbe zurück wie das GET. |
| GET | /projects/:id/searches | viewer | Die Websuchen, die die Assistenten für die aktiven Prompts ausgeführt haben, die häufigsten zuerst. |
| GET | /projects/:id/pages/:pageId/prompts | viewer | Die Prompts, deren aktuelle Antworten auf eine Seite verlinken. |
| POST | /projects/:id/pages/import-sitemap | member | Die Sitemap der Site jetzt erneut lesen und die noch nicht aufgeführten Seiten hinzufügen. Bis zu 10 Aufrufe pro Stunde. |
Verfolgen nimmt name (Pflicht), domain, aliases (weitere Namen, bis zu 30), color und logo. Ändern nimmt dieselben Felder, alle optional: Nur was Sie senden, ändert sich, aliases ersetzt die ganze Liste, und domain: null entfernt die Domain. Alle drei Wettbewerber-Endpunkte lesen die gespeicherten Antworten erneut, wenn sich die Namen ändern, und geben das Ergebnis als reanalysis zurück.
Seiten nimmt q, section (der erste Teil des Pfads), shown (yes oder no), page und perPage (5 bis 200, Voreinstellung 50).
Scans
| Methode | Pfad | Zugang | Zweck |
|---|---|---|---|
| GET | /projects/:id/scan-options | viewer | Die verbundenen Assistenten, ihre Modelle mit Kosten pro Antwort, aktive Prompts pro Kategorie, diesen Monat genutzte Scans und die Ausgaben der Site in diesem Monat. |
| POST | /projects/:id/scans/estimate | viewer | Die erwarteten Kosten eines Scans, wie konfiguriert. |
| POST | /projects/:id/scans | admin | Einen Scan starten. |
| GET | /projects/:id/scans/live | viewer | Der laufende Scan, falls vorhanden, mit Tempo und verbleibender Zeit. |
| POST | /projects/:id/scans/:scanId/cancel | admin | Einen laufenden Scan stoppen. |
| GET | /projects/:id/scans | viewer | Die letzten 30 Scans. |
| GET | /projects/:id/scans/:scanId | viewer | Ein Scan und die Antworten, die er gesammelt hat, 25 pro Seite. |
Schätzung und Start nehmen denselben Body. Jedes Feld ist optional:
providers: Assistenten-Schlüssel. Leer bedeutet jeder verbundene Assistent.promptIds: eine gewählte Auswahl von Prompts. Leer bedeutet jeder aktive Prompt. Prompts, die nicht aktiv sind, werden übersprungen.category: eine Kategorie scannen.sample: so viele Prompts scannen, zufällig gezogen.models: Assistenten-Schlüssel zu Modell, aus den Optionen inscan-options.chatgpt-appundgemini-app(schnell: sofort beantwortet) sowiechatgpt-app-queueundgemini-app-queue(langsam und günstiger: einige Minuten) nehmen die Antwort, wie die App sie zeigt.saved:truenimmt die Assistenten, Modelle und Kategorie aus den gespeicherten Scan-Einstellungen der Site statt aus dieser Anfrage. Beim Start nimmt es auch das gespeicherte Limit pro Scan.- Nur beim Start:
budgetUsd(stoppen, sobald der Scan so viel gekostet hat; weggelassen, das Doppelte seiner Schätzung) undlabel.
Die Schätzung gibt prompts, answers, cost und formatted zurück. Der Start gibt den Scan zurück, antwortet 402, wenn das Guthaben den Scan nicht deckt, und 400 mit dem Grund für alles andere, was ihn am Starten hindert. Die Gründe, und wie Kosten gezählt werden, stehen auf der Seite Guthaben und Ausgabengrenzen.
Ein Scan nimmt tab (all, notNamed, competitorsOnly, errors), engine (ein Assistenten-Schlüssel) und page. Scan-Status sind queued, running, cancelling, cancelled, done und failed.
Ein vollständiges Beispiel
Die Site finden, einen Prompt hinzufügen, einen Scan einer Kategorie bepreisen, ihn starten und das Ergebnis lesen. Den Scan zu starten braucht einen Schlüssel Lesen + Scannen.
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"