Übersicht
Die FluidTalk-Handshake-API ermöglicht es einem externen Bot, eine Persona und Engine in Echtzeit zu steuern. Für jede eingehende Nachricht (oder jedes Ereignis) sendest du einen kleinen HTTP-Aufruf; FluidTalk gibt die nächste Antwort, das zu sendende Foto und den Gesprächsstatus zurück. Du behältst deine eigene Logik — wann du einen Chat öffnest, wann du nachfasst, wo du Nachrichten zustellst — und FluidTalk entscheidet, was die Persona als Nächstes sagt.
Alle Endpunkte befinden sich unter der Basis-URL https://api-talk.fluidvip.com und verwenden multipart/form-data damit du Text und ein Binärbild in einer einzigen Anfrage senden kannst. Wenn du die HTTP-, Auth- und Multipart-Ebene nicht selbst aufbauen möchtest, stehen ein TypeScript und ein Python SDK zur Verfügung, die diese Endpunkte kapseln.
Authentifizierung
Authentifiziere jede Anfrage mit deinem Secret-Key im X-API-Key Header. Ein Key ist an eine bestimmte Persona und eine bestimmte Engine gebunden — dieses Paar teilt FluidTalk mit, welchen Charakter es spielen und welche Gesprächslogik es ausführen soll. Keys werden im Dashboard (Wiring Lab) erstellt und verknüpft; API-Keys gewähren nur Gesprächszugang und können deine Strategie, Personas oder Abrechnung nicht ändern.
X-API-Key: ft_sk_live_YOUR_KEYEin Key muss einer Persona zugeordnet sein
Ist der Key mit keiner Persona verknüpft, geben die Handshake-Endpunkte 400 zurück ("This API key is not scoped to a specific persona"). Verknüpfe den Key im Wiring Lab mit einer Persona und Engine, bevor du live gehst — siehe Live gehen.
POST /api/v1/bot/chat
Nutze diesen Endpunkt, wenn ein Lead zuerst schreibt (eingehende DM) oder um ein laufendes Gespräch fortzusetzen. Die erste eingehende Nachricht für ein neues target startet in der Standard-Einstiegsphase deiner Engine; verwende dasselbe target für denselben Lead, und die Engine behält Phase und Status über alle Gesprächsrunden hinweg.
Formularfelder:
target(erforderlich) — der Handle des Leads. Wiederverwendung setzt das gleiche Gespräch fort.message(erforderlich) — der Nachrichtentext des Leads.own_username(optional) — dein sendender Account, für Tracking und Duplikat-Lead-Filterung.image_url(optional) — eine URL zu einem Bild, das die KI für visuellen Kontext „sehen" soll.file(optional) — ein Binärbild, als Alternative zuimage_url.
Die Antwort enthält:
reply— den vollständigen Antworttext.replies[]— die Antwort in Sprechblasen aufgeteilt; sende jede als eigene Nachricht.should_send_photo/photo_url— wennshould_send_phototrue ist, ladephoto_urlund sende es als Bild.session_id— die Gesprächs-ID.ignored/ignore_reason— wennignoredtrue ist, sende nichts (siehe Verhalten unten).
curl -X POST https://api-talk.fluidvip.com/api/v1/bot/chat \
-H "X-API-Key: ft_sk_live_YOUR_KEY" \
-F "target=@john_doe" \
-F "own_username=@my_bot_account" \
-F "message=wow you look great today!" \
-F "file=@/path/to/screenshot.jpg"{
"reply": "Thank you so much! I was really feeling the outfit",
"replies": ["Thank you so much!", "I was really feeling the outfit"],
"should_send_photo": false,
"photo_url": null,
"session_id": "550e8400-e29b-41d4-a716-446655440000",
"ignored": false,
"ignore_reason": null
}Eine abgeschlossene Session gibt 400 zurück — höre auf zu senden
Sobald ein Gespräch versiegelt ist (konvertiert oder Budget aufgebraucht), gibt der nächste Aufruf für dieses target einen 400 "This session is DONE". zurück. Schreibe diesem Lead nicht mehr, anstatt es erneut zu versuchen.
POST /api/v1/bot/action
Nutze diesen Endpunkt, um engine-gesteuerte Verhalten auszulösen, anstatt eine eingehende Nachricht weiterzuleiten. Das action Feld wählt das Verhalten aus:
OUTREACH— startet ein brandneues Kaltgespräch (ein KI-Eröffner). Das Anhängen eines Profil-Screenshots viafileermöglicht der Engine, visuelle Hinweise zu lesen.FOLLOW_UP— sendet einen kontextuellen Nachfass, wenn ein Lead schweigt. Erfordert ein bestehendes Gespräch für diesestarget(sonst404).ENTRY_POINT— feuert einen benutzerdefinierten, event-gesteuerten Einstieg. Übergibentry_type(muss in der Engine-Konfiguration vorhanden sein) und einen optionalenentry_contextJSON-String.
Formularfelder:
target(erforderlich) — der Handle des Leads.action(erforderlich) —OUTREACH | FOLLOW_UP | ENTRY_POINT.own_username(optional) — dein sendender Account.image_url(optional) — Bild-URL für visuellen Kontext.entry_type(ENTRY_POINT) — der konfigurierte Einstiegsbezeichner.entry_context(ENTRY_POINT, optional) — ein JSON-String mit Kontext für das Ereignis.file(optional) — ein Binärbild.
Die Antwort enthält:
session_id— die Gesprächs-ID.message— die zu sendende Nachricht (kann leer sein, wenn ein aktiver Chat für einen Eröffner fortgesetzt wurde).ignored/ignore_reason— wenn die Aktion verworfen wurde (siehe Verhalten unten).continued/continued_reason— wenn ein bestehendes Gespräch fortgesetzt statt neu geöffnet wurde.
curl -X POST https://api-talk.fluidvip.com/api/v1/bot/action \
-H "X-API-Key: ft_sk_live_YOUR_KEY" \
-F "target=@random_lead_99" \
-F "action=ENTRY_POINT" \
-F "own_username=@my_bot_account" \
-F "entry_type=story_reaction" \
-F "entry_context={\"reaction\": \"fire\"}"{
"session_id": "550e8400-e29b-41d4-a716-446655440000",
"message": "Hey! I saw your profile, looks interesting!",
"ignored": false,
"ignore_reason": null,
"continued": false,
"continued_reason": null
}POST /api/v1/bot/upload
Lade ein Bild hoch und erhalte eine gehostete URL zurück, die du als image_url in späteren chat oder action Aufrufen wiederverwenden kannst. Dieser Endpunkt ist nur für API-Key-Authentifizierung verfügbar (ein Dashboard-Session-Versuch gibt 403).
curl -X POST https://api-talk.fluidvip.com/api/v1/bot/upload \
-H "X-API-Key: ft_sk_live_YOUR_KEY" \
-F "file=@/path/to/screenshot.jpg"{
"url": "https://.../uploads/abc123.jpg",
"message": "Context media uploaded successfully."
}Verhalten
ignored— die Anfrage wurde absichtlich nicht bearbeitet. Der häufigste Grund istlead_claimed_by_other_account: derselbe Lead wird bereits von einem anderen sendenden Account verarbeitet, sodass FluidTalk das Duplikat verwirft. Wennignoredtrue ist, sende dem Lead nichts.continued— beiactionAufrufen wurde ein bestehendes Gespräch fortgesetzt, anstatt ein neues zu öffnen (zum Beispielcontinued_reason: "conversation_already_active"). Bei einem Eröffner kann die Nachricht leer sein — wechsle zumchatEndpunkt, um das Gespräch fortzuführen.
Fehlercodes
- 400 — der Key ist keiner Persona zugeordnet, oder die Session ist bereits DONE.
- 401 — fehlender oder ungültiger
X-API-Key. - 402 — kein aktiver bezahlter Plan oder zu wenig Credits für ein neues Gespräch.
- 403 —
uploadversuchter Zugriff ohne API-Key-Authentifizierung. - 404 — Persona nicht gefunden, oder ein Nachfass ohne bestehendes Gespräch.
- 429 — Rate-Limit überschritten. Respektiere den
Retry-AfterResponse-Header und warte entsprechend.
Rate-Limits
Die Handshake-Routen werden pro API-Key und pro IP in einem gleitenden Fenster pro Minute gedrosselt, damit eine außer Kontrolle geratene Schleife oder ein geleakter Key keine unbegrenzte Ausgabe verursachen kann. Das Überschreiten einer der Grenzen gibt 429 zurück, mit einem Retry-After Header (in Sekunden) — warte so lange, bevor du es erneut versuchst. Nachfass-Aufrufe haben zusätzlich ihre eigene Abkühlzeit/Limit. Baue Backoff in deine Integration ein, anstatt in einer engen Schleife auf 429.
SDKs
Offizielle Clients kapseln alle drei Endpunkte, den X-API-Key Header und Multipart-Uploads und stellen ignored / continued sowie typisierte Fehler bereit:
- TypeScript —
npm install @fluidtalk/sdk - Python —
pip install fluidtalk
import { FluidTalk } from "@fluidtalk/sdk";
const ft = new FluidTalk({ apiKey: process.env.FT_API_KEY!, ownUsername: "@my_account" });
const res = await ft.inboundChat({ target: "@john", message: "hey, saw your post!" });
for (const bubble of res.replies) await myChat.send("@john", bubble);
if (res.shouldSendPhoto && res.photoUrl) await myChat.sendImage("@john", res.photoUrl);Live gehen erfordert einen bezahlten Plan
Der Handshake bedient echten Traffic nur mit einem bezahlten Plan. Ohne aktiven Plan (oder bei leeren Credits) geben die Endpunkte 402zurück, sodass dein Bot ab dem Moment des Plan-Ablaufs nicht mehr bedient wird. Siehe Abrechnung für Pläne und Credits.
Nächste Schritte
Erstelle und ordne einen API-Key zu, dann richte deinen Bot auf den Handshake — siehe Live gehen. Wie Gespräche gemessen werden und was ein bezahlter Plan freischaltet, erfährst du unter Abrechnung.