POST /v1/creatives/generate startet den Job (CreativeWorker).
Status und Vorschau über GET /v1/creatives/get — enthält bei
status: completed ein frisches image_url (signierte Storage-URL, 1 h gültig).
queued
image_url wird bei jedem Abruf von GET /creatives/get neu erzeugt (1 h).
Creatives aus GET /v1/creatives/list (optional
include_insights=true&campaign_id=); Kennzahlen gebündelt via
GET /v1/creatives/insights?campaign_id= oder einzeln
creative_id= (Tabelle
creative_insights, nur DB). Testdaten:
POST /v1/dev/mock-creative-insights.
Keine Insights in der DB für dieses Creative (noch kein Meta-Sync).
Datum
Impressions
Clicks
Spend
Reach
CTR
CPM
CPC
Leads
PATCH /v1/campaigns/edit?campaign_id=… — Meta-Konto, Page, Job-Link und weitere Kampagnenfelder.
POST /v1/campaigns/publish?campaign_id=… — Lineup (includeCreativeIds /
excludeCreativeIds) und Stub-Worker enqueue (202). Creatives zuerst auswählen.
Keine Creatives für diese Kampagne — „Creatives laden“ klicken.
Creative-ID
IA
Status
Deploy
Lineup
Publish?
Meta Ad
POST /v1/dev/meta/import-campaign — Import in bestehenden Client (synchron). POST /v1/dev/meta/import-bootstrap — Neuer Client aus Meta-Kampagnenname + OB + Kampagne + Meta-Import (async Worker, keine IA1–IA4-Generierung).
GET /v1/dev/meta/campaign-raw?campaign_id=… — ungefilterte Meta-Antwort (Ad Sets, Ads, Creatives).
Creative-ID
Meta Ad
Storage
Bild
Meta Ad
Grund
POST /v1/dev/optimizer/run — Optimizer-Worker starten; Fortschritt über
GET /v1/stream (Status + Milestones). Review nur Status in DB.
—
Noch keine Vorschläge — nach abgeschlossenem Lauf erscheinen sie hier.
POST /v1/dev/notifications — erscheint im Client-Dashboard unter „Updates“ und wird live über
GET /v1/stream (type: notification) ausgeliefert.
Letzte Benachrichtigungen (Client)
GET /v1/clients/get?client_id= — Feld notifications; Client aus Ziel abgeleitet.
—
LeadTable External API v3 — Leads aus einem Zeitraum nach THOS importieren
(GET /lead/campaign/{campaignID}). Meta-IDs werden wie bei Webhooks extrahiert.
Erfordert LEADTABLE_API_KEY und LEADTABLE_API_EMAIL in der API-.env.
Worker: LeadTableSyncWorker (leadtableSyncWorkQueue).
— Zuerst Kunde wählen —
Bei aktiviertem Zufalls-Creative: THOS-Kampagne wählen (Fallback), damit Leads einem Creative der Kampagne zugeordnet werden.
POST /v1/dev/mock-campaign-leads — legt synthetische Leads in
public.leads an (origin=dev_mock). Pro Lead wird zufällig ein
Creative der gewählten THOS-Kampagne gewählt (image_generations).
public.accounts.id = auth.users.id (1:1).
E-Mail kommt aus Supabase Auth; optionaler Anzeigename in accounts.display_name.
Auth-User verknüpfen
Accounts
—
Manager zuweisen
Löscht einen Client über DELETE /v1/clients/delete.
Demo-Modus setzt feste KPI-Werte auf dem Haupt-Dashboard in der App
(181 Kunden, 420 Kampagnen, 100.178 € Werbebudget, 156 Einstellungen).
„Time to Hire“ bleibt unverändert (37 Tage in der App). Diagramme und Listen bleiben real.
—
Steuerung nur per Umgebungsvariable THOS_DEMO_MODE=1 (API neu starten).
Mock-Kunden
Namen aus Meta-Kampagnen laden, durchsuchen, auswählen und bearbeiten — dann
ausgewählte Mock-Clients anlegen (ohne Onboarding-Job).
0 ausgewählt
„Meta-Kampagnen laden“ oder „Zeile hinzufügen“.
Live von GET /v1/stream (globale Job-Status) und optional
GET /v1/stream/{id} (Kanal-Ausgabe).