Zum Hauptinhalt springen
Mit der Flowella REST API senden Sie WhatsApp-Nachrichten, verwalten Kontakte und Opt-outs, arbeiten mit Vorlagen und Flows und lesen Analysedaten aus Ihrem eigenen Code. Diese Seite behandelt, was Sie wissen müssen, bevor Sie einen Endpunkt aufrufen. Der Abschnitt Endpoints dieser API-Referenz dokumentiert einzelne Anfragen. Die vollständige, aktuelle Liste finden Sie im Live-OpenAPI-Dokument oder in der interaktiven API-Dokumentation in der App.

Basis-URL

Jeder Endpunkt liegt unter dieser Basis, zum Beispiel https://api.flowella.io/v1/messages. Verwenden Sie sie auch dort, wo die App eine Adresse mit der Endung /api/v1 anzeigt, etwa unter API base URL im Developer Hub.
Anfragen an den App-Host, https://app.flowella.io/api/v1/..., werden dauerhaft (308) auf https://api.flowella.io/v1/... umgeleitet. Viele HTTP-Clients verwerfen den Header Authorization, wenn sie einer Umleitung auf einen anderen Host folgen, sodass die umgeleitete Anfrage mit 401 fehlschlagen kann. Rufen Sie https://api.flowella.io/v1 direkt auf.

Authentifizierung

Senden Sie bei jeder Anfrage ein Bearer-Token im Header Authorization:
Flowella akzeptiert zwei Arten von Token. Beide wirken nur auf eine Organisation. Verwenden Sie einen API-Schlüssel für Ihre eigenen Skripte und Integrationen. Verwenden Sie eine OAuth-App, wenn andere Flowella-Organisationen Ihre Integration installieren.
Behandeln Sie Schlüssel und Token wie Passwörter. Committen Sie sie nie in die Versionsverwaltung und fügen Sie sie nie in Chats oder geteilte Dokumente ein. Widerrufen Sie einen nicht mehr benötigten Schlüssel unter API-Schlüssel.

Zugangsdaten prüfen

Rufen Sie den Ping-Endpunkt auf, um zu bestätigen, dass ein Schlüssel oder Token funktioniert:
Eine Antwort 200 OK bedeutet, dass Sie authentifiziert sind. organizationId ist die numerische ID Ihrer Organisation:
Eine Antwort 401 hat den Code UNAUTHORIZED und eine dieser Meldungen: Missing bearer token, Invalid or expired API key, Invalid or expired access token oder Unsupported bearer token.

Scopes

Jeder Endpunkt benötigt einen Scope. In der App erstellte API-Schlüssel haben alle Scopes. OAuth-Zugriffstoken haben nur die bei der Autorisierung gewährten Scopes. GET /v1/ping und GET /v1/rate-limits benötigen keinen Scope. GET /v1/capabilities (Scope account:read) listet die Scopes Ihres Tokens auf. Eine Anfrage ohne den benötigten Scope gibt 403 mit dem Code INSUFFICIENT_SCOPE zurück. details.required listet die fehlenden Scopes auf:

Fehler

Fehler verwenden dieselbe Hülle. requestId identifiziert die Anfrage, wenn Sie sich an den Support wenden, und details enthält zusätzliche Informationen, etwa Validierungsprobleme, sofern vorhanden:
Der Wert error.code ist stabil, sodass sich Ihr Code darauf verlassen kann. Der Text error.message ist für Menschen gedacht und kann sich ändern.

Ratenlimits

Jeder API-Schlüssel und jedes OAuth-Zugriffstoken hat ein eigenes Limit für Anfragen pro Minute. Flowella zählt Anfragen in festen Ein-Minuten-Fenstern, die zur vollen Minute (UTC) beginnen. Antworten auf Anfragen, die die Authentifizierungs- und Scope-Prüfungen bestehen, enthalten diese Header: Wenn Sie das Limit überschreiten, gibt Flowella 429 mit dem Code RATE_LIMITED und einem Header Retry-After mit der Anzahl der zu wartenden Sekunden zurück. GET /v1/rate-limits gibt Ihre Werte limit, remaining und reset als JSON zurück. Für große Sendungen verwenden Sie POST /v1/templates/send, das bis zu 50.000 Empfänger in einer Anfrage annimmt. Die Anfrage akzeptiert auch ein optionales Feld throttlePerHour, eine ganze Zahl von 1 bis 100.000, die Sendungen derzeit aber nicht taktet. Verlassen Sie sich also nicht darauf. Um eine große Sendung zeitlich zu verteilen, teilen Sie die Empfängerliste in kleinere Batches auf und senden Sie jeden Batch separat.

Anfrage-IDs

Antworten enthalten einen Header X-Request-Id, und Fehlerantworten wiederholen ihn als error.requestId. POST /v1/templates/send ist die Ausnahme: Siehe Massenversand von Vorlagen. Um Ihre eigene ID zu verwenden, senden Sie einen Header X-Request-Id mit bis zu 128 Zeichen, und Flowella übernimmt ihn. Nennen Sie die Anfrage-ID, wenn Sie sich an den Support wenden. Um eine Anfrage selbst nachzuschlagen, rufen Sie GET /v1/requests/{requestId} auf (Scope account:read): Es gibt die protokollierte Anfrage mit den verknüpften Ereignissen, Jobs und Webhook-Zustellungen zurück. Der Developer Hub listet Ihre letzten Anfragen und deren IDs auf.

Idempotenz

Mit Idempotenzschlüsseln können Sie eine schreibende Anfrage nach einem Timeout oder Netzwerkfehler wiederholen, ohne die Arbeit doppelt auszuführen. POST /v1/templates/send folgt eigenen Regeln, die unten beschrieben sind.

Die meisten schreibenden Anfragen

Anfragen mit POST, PATCH, PUT und DELETE akzeptieren einen optionalen Header Idempotency-Key:
  • Der Schlüssel muss 8 bis 255 Zeichen lang sein. Andere Längen geben 400 zurück.
  • Flowella merkt sich jeden Schlüssel für Ihre Organisation 24 Stunden lang.
  • Eine Wiederholung mit demselben Schlüssel, derselben Methode, demselben Pfad und demselben Body gibt die gespeicherte Antwort zurück, ohne die Anfrage erneut auszuführen.
  • Eine Wiederholung mit demselben Schlüssel, aber anderer Methode, anderem Pfad oder anderem Body gibt 409 IDEMPOTENCY_KEY_CONFLICT zurück.
  • Eine Wiederholung, die gesendet wird, während die erste Anfrage noch läuft, gibt 409 IDEMPOTENCY_KEY_IN_FLIGHT zurück. Warten Sie und versuchen Sie es erneut.
  • Antworten geben den Schlüssel in einem Header Idempotency-Key zurück.
Anfragen ohne den Header werden normal ausgeführt, ohne Schutz vor Duplikaten.

Massenversand von Vorlagen

Der Massenversand von Vorlagen ist asynchron. POST /v1/templates/send validiert die Anfrage, stellt sie dauerhaft in die Warteschlange und gibt sofort 202 Accepted zurück:
Flowella stellt den Batch im Hintergrund zu und wiederholt vorübergehende WhatsApp-Fehler automatisch. Empfänger werden einzeln verarbeitet, sodass eine ungültige Nummer den Rest des Batches nicht blockiert. Den Zustellfortschritt verfolgen Sie im Tab Statistics der Vorlage in der App. Übergeben Sie einen Header Idempotency-Key, der jeden Batch identifiziert:
Dieser Endpunkt behandelt Schlüssel anders als andere schreibende Anfragen:
  • Der Schlüssel kann bis zu 200 Zeichen lang sein. Ein längerer Schlüssel gibt 400 zurück.
  • Eine Wiederholung mit demselben Schlüssel innerhalb von 7 Tagen gibt die ursprüngliche id zurück und sendet nichts, auch wenn sich der Body geändert hat.
  • Ohne den Header verwendet Flowella einen Hash des Anfrage-Bodys als Schlüssel. Wenn Sie innerhalb von 7 Tagen erneut einen byte-identischen Body senden, erhalten Sie die ursprüngliche id zurück, und es wird nichts gesendet. Verwenden Sie für jeden Batch, den Sie senden möchten, einen neuen Schlüssel.
Auch anderes Verhalten unterscheidet sich bei diesem Endpunkt:
  • Rufen Sie ihn mit einem API-Schlüssel auf. OAuth-Zugriffstoken werden mit 401 abgelehnt.
  • Seine Antworten enthalten nicht die Header X-Request-Id, API-Version oder X-RateLimit-*. Seine Anfragen zählen trotzdem zum Ratenlimit des Schlüssels.

Versionierung

Sie können die API-Version mit dem Header API-Version festlegen:
2026-08-11 ist die einzige unterstützte Version und der Standard, wenn Sie den Header weglassen. Jeder andere Wert oder ein Wert, der kein Datum im Format YYYY-MM-DD ist, gibt 400 mit der Meldung Unsupported API-Version zurück. Antworten geben die Version in den Headern API-Version und X-Flowella-Api-Version zurück.

Sandbox

Mit der Sandbox testen Sie eine Integration, ohne etwas an WhatsApp zu senden. Sie arbeitet mit Ihrer echten Organisation: Es gibt kein separates Testkonto. Sie können sie auf zwei Arten nutzen:
  • Mit einem Sandbox-Schlüssel, der nur Anfragen betrifft, die mit diesem Schlüssel gestellt werden. Siehe Sandbox-Schlüssel.
  • Mit der organisationsweiten API-Sandbox im Developer Hub, die ein Owner oder Admin einschalten kann. Siehe API-Sandbox.
Während die Sandbox gilt, speichert POST /v1/messages die Nachricht und gibt "sandbox": true zurück, ohne Meta zu kontaktieren, und das Einreichen von Vorlagen gibt sofort eine simulierte Entscheidung zurück. Die Sandbox-Testwerkzeuge unter /v1/test/ und /v1/sandbox benötigen den Scope sandbox:manage.

Paginierung

Listen-Endpunkte wie /v1/conversations, /v1/contacts und /v1/templates verwenden Cursor-Paginierung:
  • Übergeben Sie limit (1 bis 100, Standard 25) und optional einen cursor.
  • Die Antwort enthält items und, wenn es weitere Ergebnisse gibt, einen nextCursor.
  • Übergeben Sie nextCursor als Parameter cursor, um die nächste Seite abzurufen.
  • Wenn nextCursor fehlt oder null ist, haben Sie das Ende erreicht.

Datum und Uhrzeit

Alle Zeitstempel sind ISO-8601-Strings in UTC, zum Beispiel 2025-01-15T14:30:00.000Z. Wo die API Datumsangaben akzeptiert, funktionieren sowohl reine Datumswerte (2025-01-15) als auch vollständige ISO-8601-Werte.

Telefonnummern

Übergeben Sie Telefonnummern nach Möglichkeit im Format E.164 (+15551234567). Flowella normalisiert gängige Varianten, aber E.164 ist am sichersten.

Kanäle

Viele Endpunkte akzeptieren eine whatsappChannelId. Wenn Ihre Organisation einen einzigen Kanal hat und Sie sie weglassen, verwendet Flowella Ihren Standardkanal. Wenn Sie mehrere Kanäle haben, übergeben Sie die ID ausdrücklich, damit Sie nicht von der falschen Nummer senden. Das vollständige URL-Muster und den Kanalwechsel finden Sie unter Multi-Channel.

OpenAPI-Spezifikation

Die aktuelle, maschinenlesbare Spezifikation ist öffentlich:
Importieren Sie sie in Postman, Insomnia oder einen Code-Generator. Sie beschreibt sowohl die Authentifizierung per API-Schlüssel als auch per OAuth.

Ressourcen für Entwickler

Die App bietet weiteres Material für Entwickler. Diese Seiten sind öffentlich, Sie können sie also ohne Anmeldung öffnen: Der Developer Hub unter Settings bündelt diese Links mit Ihren letzten API-Anfragen und dem Schalter für die API-Sandbox.
Kombinieren Sie diese Seite mit der Webhooks-Referenz, um auf Ereignisse zu reagieren, statt Änderungen per Polling abzufragen.
Zuletzt geändert am 24. Oktober 2026