🚀 Jetzt neu: FlowAI! Ein revolutionärer Chat mit personalisierten AI-Agenten. 🌟

FlowSend API - für E-Mail-Marketing

Eine umfassende REST API zur Verwaltung von Subscribern, Listen, Tags, Kampagnen, Vorlagen und der Absenderdomäne. Perfekt für Newsletter-Integrationen, Marketing-Automationen und Daten-Synchronisation.

🔐 Schnellstart

Basis-URL: https://creativeskyline.de/api/flowsend/subscribers https://creativeskyline.de/api/flowsend/lists https://creativeskyline.de/api/flowsend/tags https://creativeskyline.de/api/flowsend/campaigns https://creativeskyline.de/api/flowsend/templates

1. API-Zugangsdaten abrufen

Bevor Sie die API nutzen können, benötigen Sie Ihre persönlichen Zugangsdaten: Melden Sie sich an, navigieren Sie zu Profil → API-Zugang und kopieren Sie Ihren persönlichen API-Key (pk_...).

2. Authentifizierung

Alle API-Anfragen benötigen diesen HTTP-Header:

Authorization: Bearer pk_dein_api_key
Accept: application/json

👥 Subscriber

Subscriber auflisten

GET /api/flowsend/subscribers

Ruft eine paginierte Liste aller Subscriber ab.

Query-Parameter:

status string Filter: subscribed, unsubscribed, bounced, complained, pending
source string Filter: manual, import, api, form, crm_sync
email string Exakter Filter nach normalisierter E-Mail-Adresse
search string Suchbegriff (E-Mail, Name, Telefon)
lists[] array Array von Listen-UUIDs
tags[] array Array von Tag-UUIDs
per_page integer Anzahl pro Seite (1-200, Standard: 50)

CRM-Kundenempfänger prüfen

GET /api/flowsend/subscribers/by-client/{client_uuid}

Benötigt FlowSend- und FlowCRM-Zugriff. Prüft dieselbe Kundenzuordnung wie PUT, ohne Änderungen zu speichern. Liefert bestehende UUID, Tags und Listen auch bei einem zulässigen Adresswechsel. Bei einer geplanten Neuanlage ist uuid null. Geschützte Adresswechsel und Zuordnungskonflikte liefern 409; fehlende, gelöschte oder anonymisierte Kunden 404.

CRM-Kundenempfänger abgleichen

PUT /api/flowsend/subscribers/by-client/{client_uuid}

Benötigt FlowSend- und FlowCRM-Zugriff. Löst die aktuelle Hauptadresse eines CRM-Kunden desselben Teams auf. Wiederholungen liefern denselben Empfänger: 201 bei Anlage, 200 bei Wiederverwendung. Unklare Zuordnungen oder geschützte Adresswechsel liefern 409; fehlende, gelöschte oder anonymisierte Kunden 404. Listen, Tags und bestehende Newsletter-Status werden nicht zurückgesetzt. Der Request benötigt keinen Body.

Subscriber abrufen

GET /api/flowsend/subscribers/{uuid}

Ruft Details eines einzelnen Subscribers ab.

Subscriber erstellen

POST /api/flowsend/subscribers

Erstellt einen neuen Subscriber.

Request Body:

email string * E-Mail-Adresse des Subscribers
prefix string Anrede (z.B. Herr, Frau)
firstname string Vorname
lastname string Nachname
phone string Telefonnummer
status string Status (Standard: subscribed)
lists array Liste von Listen-UUIDs
tags array Liste von Tag-UUIDs
meta array Meta-Daten als Array von {key, value}-Objekten

Subscriber aktualisieren

PUT /api/flowsend/subscribers/{uuid}

Aktualisiert einen bestehenden Subscriber.

Request Body:

email string E-Mail-Adresse
firstname string Vorname
lastname string Nachname
status string Status (subscribed, unsubscribed)

Subscriber löschen

DELETE /api/flowsend/subscribers/{uuid}

Löscht einen Subscriber unwiderruflich.

Subscriber-Listen synchronisieren

PUT /api/flowsend/subscribers/{uuid}/lists

Ersetzt alle Listen-Zuordnungen des Subscribers (vollständige Synchronisation).

Request Body:

list_uuids array * Liste von Listen-UUIDs (ersetzt bestehende Zuordnungen)

Double-Opt-in erneut senden

POST /api/flowsend/subscribers/{uuid}/resend-double-opt-in

Schickt die Bestätigungsmail des Double-Opt-in-Verfahrens erneut und erzeugt dabei einen frischen Bestätigungslink. Nur für Empfänger sinnvoll, die noch nicht bestätigt haben; ein bereits bestätigter Empfänger führt zu 422. Ob ein Empfänger auf seine Bestätigung wartet, steht im Feld double_opt_in.awaiting_confirmation der Empfängerantwort. Der Request benötigt keinen Body.

Subscriber-Tags synchronisieren

PUT /api/flowsend/subscribers/{uuid}/tags

Ersetzt alle Tag-Zuordnungen des Subscribers (vollständige Synchronisation).

Request Body:

tag_uuids array * Liste von Tag-UUIDs (ersetzt bestehende Zuordnungen)

📦 Bulk-Operationen

Bulk-Löschen ist unwiderruflich
Die Aktion bulk/delete löscht alle angegebenen Subscriber permanent ohne Rückfrage.

Subscriber zu Listen hinzufügen

POST /api/flowsend/subscribers/bulk/add-to-lists

Fügt mehrere Subscriber gleichzeitig zu mehreren Listen hinzu.

Request Body:

subscriber_uuids array * UUIDs der Subscriber
list_uuids array * UUIDs der Ziel-Listen

Tags zu Subscribern hinzufügen

POST /api/flowsend/subscribers/bulk/add-tags

Weist mehreren Subscribern gleichzeitig mehrere Tags zu.

Request Body:

subscriber_uuids array * UUIDs der Subscriber
tag_uuids array * UUIDs der Ziel-Tags

Subscriber aus Listen entfernen

POST /api/flowsend/subscribers/bulk/remove-from-lists

Entfernt mehrere Subscriber gleichzeitig aus mehreren Listen.

Request Body:

subscriber_uuids array * UUIDs der Subscriber
list_uuids array * UUIDs der Listen

Tags von Subscribern entfernen

POST /api/flowsend/subscribers/bulk/remove-tags

Entfernt mehrere Tags gleichzeitig von mehreren Subscribern.

Request Body:

subscriber_uuids array * UUIDs der Subscriber
tag_uuids array * UUIDs der Tags

Subscriber bulk-löschen

POST /api/flowsend/subscribers/bulk/delete

Löscht mehrere Subscriber gleichzeitig. Diese Aktion ist unwiderruflich.

Request Body:

subscriber_uuids array * UUIDs der zu löschenden Subscriber

Status mehrerer Subscriber ändern

POST /api/flowsend/subscribers/bulk/status

Setzt den Status mehrerer Subscriber auf einmal. Zulässig sind nur subscribed und pending. Subscriber, die bereits unsubscribed, bounced oder complained sind, bleiben unverändert: diese Zustände entstehen durch die Entscheidung der Empfängerin oder durch den Versanddienst und werden nie überschrieben. Die Antwort nennt selected_count, affected_count und skipped_count.

Request Body:

subscriber_uuids array * UUIDs der zu ändernden Subscriber (1 bis 500)
status string * Neuer Status: subscribed oder pending

📜 Listen

Listen abrufen

GET /api/flowsend/lists

Ruft alle Listen ab, inklusive Subscriber-Anzahl.

Query-Parameter:

per_page integer Einträge pro Seite (1 bis 500, Standard 500). Die Antwort enthält zusätzlich einen <code>meta</code>-Block mit <code>current_page</code>, <code>per_page</code>, <code>total</code> und <code>last_page</code>.
page integer Seitennummer, beginnend bei 1

Liste erstellen

POST /api/flowsend/lists

Erstellt eine neue Liste.

Request Body:

title string * Name der Liste
slug string URL-Slug (optional, wird automatisch generiert)
description string Beschreibung der Liste

Listen-Details abrufen

GET /api/flowsend/lists/{uuid}

Ruft Details einer bestimmten Liste ab.

Liste aktualisieren

PUT /api/flowsend/lists/{uuid}

Aktualisiert eine bestehende Liste.

Request Body:

title string Name der Liste
description string Beschreibung

Liste löschen

DELETE /api/flowsend/lists/{uuid}

Löscht eine Liste. Subscriber in dieser Liste werden nicht gelöscht.

Abonnenten einer Liste

GET /api/flowsend/lists/{uuid}/subscribers

Listet die Abonnenten der Liste seitenweise auf. Die Antwort enthält einen meta-Block mit den Seitenangaben.

Query-Parameter:

per_page integer Einträge pro Seite (1 bis 200, Standard 50)
page integer Seitennummer, beginnend bei 1

Abonnenten zur Liste hinzufügen

POST /api/flowsend/lists/{uuid}/subscribers

Fügt vorhandene Abonnenten der Liste hinzu. Bereits enthaltene Abonnenten bleiben unverändert, unbekannte oder teamfremde UUIDs werden übergangen.

Request Body:

subscriber_uuids array * UUIDs der hinzuzufügenden Abonnenten

Abonnenten aus der Liste entfernen

DELETE /api/flowsend/lists/{uuid}/subscribers

Löst die Zugehörigkeit der angegebenen Abonnenten zu dieser Liste. Die Abonnenten selbst, ihr Status und ihre übrigen Listen und Tags bleiben unverändert: aus einer Liste entfernt zu werden ist nicht dasselbe wie eine Abmeldung. Unbekannte oder teamfremde UUIDs werden übergangen, removed_count nennt die tatsächlich gelösten Zuordnungen.

Request Body:

subscriber_uuids array * UUIDs der zu entfernenden Abonnenten (1 bis 500)

🏷️ Tags

Tags abrufen

GET /api/flowsend/tags

Ruft alle Tags ab, inklusive Subscriber-Anzahl.

Query-Parameter:

per_page integer Einträge pro Seite (1 bis 500, Standard 500). Die Antwort enthält zusätzlich einen <code>meta</code>-Block mit <code>current_page</code>, <code>per_page</code>, <code>total</code> und <code>last_page</code>.
page integer Seitennummer, beginnend bei 1

Tag erstellen

POST /api/flowsend/tags

Erstellt einen neuen Tag.

Request Body:

title string * Name des Tags
slug string URL-Slug (optional, wird automatisch generiert)
description string Beschreibung des Tags

Tag-Details abrufen

GET /api/flowsend/tags/{uuid}

Ruft Details eines bestimmten Tags ab.

Tag aktualisieren

PUT /api/flowsend/tags/{uuid}

Aktualisiert einen bestehenden Tag.

Request Body:

title string Name des Tags
description string Beschreibung

Tag löschen

DELETE /api/flowsend/tags/{uuid}

Löscht einen Tag. Subscriber mit diesem Tag verlieren die Zuordnung.

Abonnenten eines Tags

GET /api/flowsend/tags/{uuid}/subscribers

Listet die Abonnenten mit diesem Tag seitenweise auf. Die Antwort enthält einen meta-Block mit den Seitenangaben.

Query-Parameter:

per_page integer Einträge pro Seite (1 bis 200, Standard 50)
page integer Seitennummer, beginnend bei 1

✉️ Kampagnen

Versand geschieht sofort
Es gibt keine Freigabestufe. POST /campaigns/{uuid}/send stellt die Kampagne unmittelbar in den Versand. Prüfe vorher GET /campaigns/{uuid}: das Feld blockers nennt jeden Grund, der dem Versand im Weg steht, und ist leer, sobald die Kampagne versandbereit ist.

Kampagnen abrufen

GET /api/flowsend/campaigns

Ruft die Kampagnen des Teams seitenweise ab, neueste zuerst. Die Antwort enthält einen meta-Block mit den Seitenangaben.

Query-Parameter:

status string Filter: draft, scheduled, sending, sent, cancelled, failed
search string Suchbegriff in Name und Betreff
per_page integer Einträge pro Seite (1 bis 200, Standard 25)
page integer Seitennummer, beginnend bei 1

Kampagne anlegen

POST /api/flowsend/campaigns

Legt eine Kampagne als Entwurf an. Der Inhalt wird so übernommen, wie ihn die Editoren ablegen: der visuelle Editor speichert ein JSON-Dokument in content_json, der RichText-Editor Markup in content_html, der HTML-Import das gekaufte Dokument ebenfalls in content_html, und editor_type sagt, welches gilt. Mit template_uuid startet der Entwurf aus einer sichtbaren Vorlage; ausdrücklich mitgeschickter Inhalt hat dabei Vorrang.

Request Body:

name string * Interner Name der Kampagne
subject string Betreffzeile
preview_text string Vorschautext im Posteingang
from_name string Absendername
from_email string Absenderadresse; muss zur verifizierten Absenderdomäne passen
editor_type string visual, richtext oder html
content_json string Dokument des visuellen Editors als JSON-Zeichenkette
content_html string HTML-Inhalt der RichText-Fassung oder des HTML-Imports
template_uuid string UUID einer eigenen oder System-Vorlage, aus der der Inhalt übernommen wird
list_uuids array UUIDs der Empfängerlisten
include_tag_uuids array UUIDs der Tags, die eingeschlossen werden
exclude_tag_uuids array UUIDs der Tags, die ausgeschlossen werden

Kampagne abrufen

GET /api/flowsend/campaigns/{uuid}

Liefert die Kampagne samt Inhalt, Empfängerauswahl, Statistik und der Liste blockers. Ein leeres blockers bedeutet, dass die Kampagne versandbereit ist; current_recipients nennt die aktuelle Reichweite.

Kampagne ändern

PUT /api/flowsend/campaigns/{uuid}

Ändert einen Entwurf. Nur Kampagnen in den Zuständen draft, scheduled und failed sind änderbar; alles andere ist Versandgeschichte und liefert 422. Ausgelassene Felder behalten ihren Wert, ein leeres list_uuids löscht die Listenauswahl.

Request Body:

name string Interner Name
subject string Betreffzeile
preview_text string Vorschautext
from_name string Absendername
from_email string Absenderadresse
editor_type string visual, richtext oder html
content_json string Dokument des visuellen Editors als JSON-Zeichenkette
content_html string HTML-Inhalt der RichText-Fassung oder des HTML-Imports
list_uuids array Ersetzt die Listenauswahl
include_tag_uuids array Ersetzt die eingeschlossenen Tags
exclude_tag_uuids array Ersetzt die ausgeschlossenen Tags

Kampagne löschen

DELETE /api/flowsend/campaigns/{uuid}

Löscht eine Kampagne. Nur Entwürfe und abgebrochene Kampagnen dürfen gelöscht werden; eine versendete Kampagne ist Versandgeschichte und liefert 422.

Kampagne duplizieren

POST /api/flowsend/campaigns/{uuid}/duplicate

Legt eine Kopie mit Inhalt und Empfängerauswahl als neuen Entwurf an. Versandzeitpunkt, Zählerstände und Versandhistorie werden nicht kopiert. Der Request benötigt keinen Body.

Testmail versenden

POST /api/flowsend/campaigns/{uuid}/send-test

Versendet die Kampagne an bis zu fünf Testadressen. Die Empfängerauswahl wird dabei übergangen und die Zählerstände der Kampagne bleiben unberührt. Die Antwort nennt je Adresse ein eigenes Ergebnis, weil der Versanddienst eine annehmen und eine andere ablehnen kann; scheitert mindestens eine, ist die Antwort 422.

Request Body:

emails array * Ein bis fünf Testadressen
subscriber_uuid string UUID eines echten Empfängers, mit dessen Daten die Platzhalter gefüllt werden

Kampagne sofort versenden

POST /api/flowsend/campaigns/{uuid}/send

Stellt die Kampagne sofort in den Versand. Ist sie nicht versandbereit, antwortet der Endpunkt mit 422 und einer Liste blockers, die jeden Grund einzeln benennt, etwa fehlender Betreff, fehlender Inhalt, fehlende Liste oder ein überschrittenes Monatslimit. Der Request benötigt keinen Body.

Kampagne planen

POST /api/flowsend/campaigns/{uuid}/schedule

Plant den Versand auf einen Zeitpunkt in der Zukunft. Dieselbe Versandbereitschaft wie beim sofortigen Versand wird geprüft und bei einem Hindernis mit 422 und blockers beantwortet.

Request Body:

scheduled_at string * Versandzeitpunkt als Datum mit Uhrzeit, muss in der Zukunft liegen

Versand abbrechen

POST /api/flowsend/campaigns/{uuid}/cancel

Bricht eine geplante oder laufende Kampagne ab. Eine Kampagne, die weder geplant noch im Versand ist, liefert 422. Bereits zugestellte Mails lassen sich nicht zurückholen. Der Request benötigt keinen Body.

Empfänger der Kampagne

GET /api/flowsend/campaigns/{uuid}/recipients

Liefert die Empfänger, die die Kampagne mit der aktuellen Auswahl erreichen würde, seitenweise. Es ist dieselbe Abfrage, die auch der Versand benutzt, deshalb können Vorschau und Versand nicht auseinanderlaufen. Die Gesamtzahl steht im meta-Block als recipient_count.

Query-Parameter:

per_page integer Einträge pro Seite (1 bis 200, Standard 50)
page integer Seitennummer, beginnend bei 1

Statistik der Kampagne

GET /api/flowsend/campaigns/{uuid}/stats

Liefert Zustellzahlen, Öffnungen, Klicks, Abmeldungen und Bounces sowie die aktuelle Reichweite und die Liste blockers.

Versandereignisse der Kampagne

GET /api/flowsend/campaigns/{uuid}/events

Listet die einzelnen Zustellereignisse seitenweise auf, neueste zuerst. Jedes Ereignis nennt seinen Typ, den Zeitpunkt und die UUID des betroffenen Empfängers.

Query-Parameter:

type string Filter: delivered, opened, clicked, unsubscribed, bounced, complained, rejected, processed
per_page integer Einträge pro Seite (1 bis 200, Standard 50)
page integer Seitennummer, beginnend bei 1

🧩 Vorlagen

Systemvorlagen sind geteilt
Vorlagen mit is_system: true gehören allen Teams gemeinsam und lassen sich nicht ändern oder löschen. Der Weg zur eigenen Fassung ist POST /templates/{uuid}/duplicate. Das Vorschaubild entsteht im Hintergrund, thumbnail_url ist direkt nach dem Anlegen oder Duplizieren deshalb noch null.

Vorlagen abrufen

GET /api/flowsend/templates

Listet die eigenen Vorlagen und die geteilten Systemvorlagen seitenweise auf.

Query-Parameter:

scope string all (Standard), own oder system
category string Filter: newsletter, welcome, announcement, promo, custom
editor_type string Filter: visual, richtext oder html
is_active boolean Filter nach aktiven oder deaktivierten Vorlagen
search string Suchbegriff in Name und Beschreibung
per_page integer Einträge pro Seite (1 bis 200, Standard 25)
page integer Seitennummer, beginnend bei 1

Vorlage anlegen

POST /api/flowsend/templates

Legt eine eigene Vorlage an. Der visuelle Editor speichert ein JSON-Dokument in content_json. RichText und HTML-Import speichern Markup in content_html. Ein HTML-Import wird bereinigt und sein content_json geleert. Der Aufbau des JSON-Dokuments gehört dem Editor und wird von der API bewusst nicht geprüft.

Request Body:

name string * Name der Vorlage
category string newsletter, welcome, announcement, promo oder custom (Standard)
description string Beschreibung
editor_type string visual (Standard), richtext oder html
content_json string Dokument des visuellen Editors als JSON-Zeichenkette
content_html string HTML-Inhalt der RichText-Fassung oder des HTML-Imports
is_active boolean Ob die Vorlage in der Auswahl erscheint (Standard: true)

Vorlage abrufen

GET /api/flowsend/templates/{uuid}

Liefert eine eigene oder geteilte Systemvorlage samt ihrem gespeicherten Inhalt. Das Feld editable sagt, ob die Vorlage geändert werden darf.

Vorlage ändern

PUT /api/flowsend/templates/{uuid}

Ändert eine eigene Vorlage. Eine Systemvorlage gehört allen Teams und liefert 422; dupliziere sie zuerst. Vor einer Inhaltsänderung wird der bisherige Stand als Version gesichert.

Request Body:

name string Name der Vorlage
category string newsletter, welcome, announcement, promo oder custom
description string Beschreibung
editor_type string visual, richtext oder html
content_json string Dokument des visuellen Editors als JSON-Zeichenkette
content_html string HTML-Inhalt der RichText-Fassung oder des HTML-Imports
is_active boolean Ob die Vorlage in der Auswahl erscheint

Vorlage löschen

DELETE /api/flowsend/templates/{uuid}

Löscht eine eigene Vorlage. Systemvorlagen sind über diesen Weg nicht erreichbar und liefern 404.

Vorlage duplizieren

POST /api/flowsend/templates/{uuid}/duplicate

Erzeugt aus einer eigenen oder geteilten Systemvorlage eine eigene Kopie, die sich frei ändern lässt. Das Vorschaubild der Kopie entsteht im Hintergrund. Der Request benötigt keinen Body.

🌐 Absenderdomäne

Genau eine Domäne je Team
FlowSend führt eine einzige Absenderdomäne pro Team. Sie ist deshalb kein eigener Datensatz und hat keine UUID: Detailansicht, Prüfung und Entfernen sprechen sie als current an. Nach dem Hinzufügen müssen die gelieferten DNS-Einträge veröffentlicht werden, danach bestätigt die Prüfung die Domäne.

Absenderdomäne auflisten

GET /api/flowsend/sender-domains

Liefert die konfigurierte Absenderdomäne als Liste mit null oder einem Eintrag, ohne den Versanddienst abzufragen.

Absenderdomäne hinzufügen

POST /api/flowsend/sender-domains

Meldet eine Absenderdomäne beim Versanddienst an und liefert die zu veröffentlichenden DNS-Einträge zurück. Ist bereits eine Domäne konfiguriert, antwortet der Endpunkt mit 422.

Request Body:

domain string * Die Domäne, etwa beispiel.de

Absenderdomäne abrufen

GET /api/flowsend/sender-domains/current

Liefert die Domäne samt DNS-Einträgen und fragt dabei den Versanddienst nach dem aktuellen Prüfstand. Ist der Dienst nicht erreichbar, kommt der gespeicherte Stand mit reachable: false zurück.

Absenderdomäne prüfen

POST /api/flowsend/sender-domains/current/verify

Fordert den Versanddienst auf, die veröffentlichten DNS-Einträge erneut zu prüfen. Der Request benötigt keinen Body.

Absenderdomäne entfernen

DELETE /api/flowsend/sender-domains/current

Entfernt die Absenderdomäne. Der lokale Stand wird in jedem Fall gelöscht; ob der Versanddienst die Domäne ebenfalls freigegeben hat, steht im Feld provider_removed. Ist es false, muss die Domäne beim Dienst von Hand entfernt werden, bevor sie erneut hinzugefügt werden kann.

📊 Kontext und Berichte

Kontext abrufen

GET /api/flowsend/context

Liefert in einem Aufruf alles, was vor einem Schreibzugriff bekannt sein muss: die Feldverträge je Datensatztyp, die zulässigen Empfänger- und Kampagnenstatus, die geschützten Einwilligungszustände, die Vorlagenkategorien, den Double-Opt-in-Zustand, die Absenderdomäne und das Monatslimit.

Monatslimit abrufen

GET /api/flowsend/limit

Liefert das monatliche Versandkontingent: limit, bereits verbrauchte sent, verbleibende remaining, das Kennzeichen reached und die Auslastung in Prozent.

Übersicht

GET /api/flowsend/reports/overview

Zählt Empfänger je Status, Listen, Tags und Kampagnen je Zustand und nennt das Monatslimit.

Reichweite schätzen

GET /api/flowsend/reports/audience

Zählt, wie viele Empfänger eine Auswahl aus Listen und Tags tatsächlich erreicht. Es ist dieselbe Abfrage, die auch der Versand benutzt: abgemeldete, unzustellbare und noch nicht bestätigte Empfänger zählen nicht mit. Ohne Auswahl ergibt sich die Zahl aller angemeldeten Empfänger.

Query-Parameter:

list_uuids[] array UUIDs der Empfängerlisten
include_tag_uuids[] array UUIDs der einzuschließenden Tags
exclude_tag_uuids[] array UUIDs der auszuschließenden Tags