Kampagnen
Kampagnen erstellen, ihre Kontaktlisten wählen und sie senden oder planen.
Kampagne erstellen
Erstellt eine Kampagne mit dem Status draft. Erfordert einen API-Schlüssel mit dem Scope full. Löst das Event campaign.created aus.
Eine neue Kampagne hat keine Empfänger. Wählen Sie ihre Kontaktlisten mit Kampagne aktualisieren aus und senden oder planen Sie sie anschließend. Credits werden beim Versand der Kampagne berechnet: 2 Credits pro E-Mail.
/campaignsBody-Parameter
namestringerforderlichsubjectstring{{first_name}}.from_emailstringnews@acme.com.from_namestringAcme. Die Nachricht wird dann von Acme <news@acme.com> gesendet.reply_tostringfrom_email.htmlstring{{first_name}}, {{last_name}}, {{email}}, {{unsubscribe_url}} und {{cf.<key>}} für eigene Felder. Legen Sie den Inhalt beim Erstellen der Kampagne fest.textstringhtml.preview_textstringhtml.contentstringhtml und text, nicht content.content_typestringStandardwert: htmlcontent: html, text oder mjml. Emailit kompiliert kein MJML; senden Sie das kompilierte HTML in html.Rückgabe
Gibt 201 Created mit dem Kampagnen-Objekt zurück. status ist draft. Die Antwort gibt html, text und content nicht zurück.
Gibt 400 zurück, wenn name fehlt, und 403, wenn der API-Schlüssel den Scope full nicht hat.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "draft",
"subject": "October news for {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"created_at": "2026-10-01T09:30:12.482193Z",
"updated_at": "2026-10-01T09:30:12.482193Z"
}{
"error": "Bad Request"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Permission denied: campaigns:create"
}Kampagne abrufen
Ruft eine Kampagne anhand ihrer ID oder ihres Namens ab. Erfordert einen API-Schlüssel mit dem Scope full.
/campaigns/{id}Pfadparameter
idstringerforderlichcmp_…) oder der Name der Kampagne. Namen mit Leerzeichen oder Sonderzeichen müssen Sie URL-kodieren.Rückgabe
Gibt das Kampagnen-Objekt zurück.
objectstringcampaign.idstringcmp_.statusstringdraft, scheduled, queued, sending, sent, canceled oder archived. queued bedeutet, dass eine geplante Kampagne ihren Sendezeitpunkt erreicht hat und auf einen Worker wartet.namestringsubjectstringfrom_emailstring"", solange sie nicht festgelegt ist.from_namestring"", solange er nicht festgelegt ist.reply_tostring"" bedeutet, dass Antworten an from_email gehen.preview_textstring | nullcontent_typestringhtml, text oder mjml bei Kampagnen, die per API erstellt wurden.scheduled_atstring | nullsent_atstring | nullrecipientsobject[]audience_id (aud_…) und exclude (true für eine ausgeschlossene Kontaktliste).Der Inhalt (html, text und content) ist nicht in der Antwort enthalten. Engagement-Statistiken finden Sie in der Weboberfläche unter Email MarketingCampaigns.
Gibt 404 zurück, wenn keine Kampagne im Workspace zu id passt.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "scheduled",
"subject": "October news for {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"sent_at": null,
"scheduled_at": "2026-10-08 09:00:00+00",
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-01 10:02:47.118204+00",
"recipients": [
{ "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "exclude": false },
{ "audience_id": "aud_3hRmYTSQ4ca6y9tbPI0IQPjVTL9", "exclude": true }
]
}{
"error": "Campaign not found"
}Kampagne aktualisieren
Aktualisiert die übergebenen Felder und lässt die übrigen unverändert. Damit wählen Sie die Kontaktlisten der Kampagne aus, bevor Sie sie senden. Erfordert einen API-Schlüssel mit dem Scope full. Löst das Event campaign.updated aus.
Eine geplante Kampagne sendet den Stand, der zu ihrem Sendezeitpunkt gespeichert ist; Sie können sie also auch nach dem Planen noch bearbeiten.
/campaigns/{id}Pfadparameter
idstringerforderlichcmp_…) oder der Name der Kampagne.Body-Parameter
namestringsubjectstringfrom_emailstringfrom_namestringreply_tostringfrom_email gehen.preview_textstringcontentstringcontent_typestringcontent: html, text oder mjml.recipientsobject[]Die Kontaktlisten, an die sich die Kampagne richtet. Ersetzt die aktuelle Liste. Geben Sie mindestens eine Kontaktliste mit exclude auf false an.
audience_id(String, erforderlich): eine Kontaktlisten-ID (aud_…) in diesem Workspace.exclude(Boolean, Standardwertfalse):truespeichert die Kontaktliste als Ausschluss. Die Weboberfläche zieht ausgeschlossene Kontaktlisten von ihrer Empfängerschätzung ab, der Versand selbst wendet Ausschlüsse derzeit aber nicht an. Entfernen Sie diese Kontakte deshalb auch aus den eingeschlossenen Kontaktlisten.
Doppelte Kontaktlisten-IDs werden ignoriert. Beim Versand sendet Emailit jedem angemeldeten Kontakt der eingeschlossenen Kontaktlisten genau eine E-Mail und überspringt abgemeldete Kontakte und gesperrte Adressen.
Den HTML- und Textinhalt legen Sie beim Erstellen der Kampagne fest. Unbekannte Felder im Body werden ignoriert.
Rückgabe
Gibt das aktualisierte Kampagnen-Objekt einschließlich recipients zurück.
Gibt 422 zurück, wenn recipients keine eingeschlossene Kontaktliste enthält oder auf eine Kontaktliste außerhalb des Workspaces verweist, und 404, wenn die Kampagne nicht existiert.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "draft",
"subject": "Your October update, {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"scheduled_at": null,
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-01 10:02:47.118204+00",
"recipients": [
{ "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "exclude": false },
{ "audience_id": "aud_3hRmYTSQ4ca6y9tbPI0IQPjVTL9", "exclude": true }
]
}{
"message": "Validation failed.",
"errors": {
"recipients": ["One or more audiences are invalid."]
}
}{
"error": "Campaign not found"
}Kampagnen auflisten
Gibt die Kampagnen des Workspaces zurück, neueste zuerst. Erfordert einen API-Schlüssel mit dem Scope full.
/campaignsQuery-Parameter
pageintegerStandardwert: 1limitintegerStandardwert: 10searchstringstatusstringdraft, scheduled, sending (erfasst auch queued), sent, canceled, archived oder all.matchstringall (Standardwert) verlangt, dass alle Filter zutreffen. or trifft zu, wenn ein beliebiger Filter passt. Siehe Filtern und Sortieren.
orderstringSortierschlüssel für diese Liste. Siehe die Sortierschlüssel unten.
directionstringasc oder desc.
Filterschlüssel
Filter verwenden Query-Parameter der Form key.condition=value, zum Beispiel status.exact=sent oder created_at.after=2026-09-01. Die Bedingungen pro Typ finden Sie unter Filtern.
| Schlüssel | Typ | Hinweise |
|---|---|---|
name |
string | |
subject |
string | |
status |
enum | draft, scheduled, queued, sending, sent, archived |
created_at |
date | |
sent_at |
date |
Sortierschlüssel für order: name, subject, status, created_at, sent_at.
Rückgabe
Gibt eine Seite mit Kampagnen-Objekten ohne reply_to, preview_text, content_type und recipients zurück. Diese Felder liefert Kampagne abrufen.
dataobject[]total_recordsintegernext_page_urlstring | nullnull auf der letzten Seite. Er enthält nur page und limit; fügen Sie Ihre Suche und Filter also erneut hinzu, wenn Sie ihm folgen.previous_page_urlstring | nullnull auf der ersten Seite.{
"data": [
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "sent",
"subject": "Your October update, {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"sent_at": "2026-10-08 09:00:04+00",
"scheduled_at": "2026-10-08 09:00:00+00",
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-08 09:00:31+00"
}
],
"total_records": 34,
"next_page_url": "/v2/campaigns?page=2&limit=20",
"previous_page_url": null
}Kampagne senden oder planen
Sendet die Kampagne sofort oder plant sie, wenn Sie ein zukünftiges scheduled_at übergeben. Erfordert einen API-Schlüssel mit dem Scope full und einen verifizierten Workspace: Nicht verifizierte Workspaces können keine Kampagnen senden und erhalten 403.
Stellen Sie vor dem Versand sicher, dass die Kampagne eine from_email auf einer verifizierten Domain, einen Betreff, einen html- oder text-Inhalt und mindestens eine eingeschlossene Kontaktliste hat (festgelegt mit Kampagne aktualisieren). Jede E-Mail kostet 2 Credits.
/campaigns/{id}/sendPfadparameter
idstringerforderlichcmp_…) oder der Name der Kampagne.Body-Parameter
scheduled_atstringSendezeitpunkt. Akzeptiert ISO 8601 (2026-10-08T09:00:00Z), einen Unix-Zeitstempel in Sekunden oder natürliche Sprache wie tomorrow at 9am (in UTC interpretiert). Der Zeitpunkt muss in der Zukunft liegen und die Kampagne muss ein Entwurf (draft) sein.
Lassen Sie den Parameter weg, um sofort zu senden. Um eine geplante Kampagne früher zu senden, rufen Sie diesen Endpunkt ohne scheduled_at auf.
Rückgabe
Sofort senden: Der Status wechselt zu sending und Emailit löst campaign.sending aus. Anschließend erstellt Emailit eine E-Mail pro Empfänger: für jeden angemeldeten Kontakt der eingeschlossenen Kontaktlisten, nach Adresse dedupliziert, ohne abgemeldete Kontakte und gesperrte Adressen. Sobald alle Empfänger an die Versand-Pipeline übergeben sind, wechselt der Status zu sent und Emailit löst campaign.sent aus. Verfolgen Sie die Zustellung in der Weboberfläche oder mit E-Mail-Events.
Planen: Der Status wechselt zu scheduled und Emailit löst campaign.scheduled aus. Zum geplanten Zeitpunkt wechselt die Kampagne zu queued (campaign.queued) und wird dann wie oben beschrieben gesendet.
Die Antwort enthält object, id, name und den neuen status, beim Planen zusätzlich scheduled_at.
| Status | Wann |
|---|---|
403 |
Der Workspace ist nicht verifiziert oder der API-Schlüssel hat nicht den Scope full. |
404 |
Keine Kampagne passt zu id. |
422 |
scheduled_at lässt sich nicht parsen oder liegt nicht in der Zukunft, oder Sie haben versucht, eine Kampagne zu planen, die kein Entwurf ist. |
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "scheduled",
"scheduled_at": "2026-10-08T09:00:00.000000Z"
}{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "sending"
}{
"code": "unverified_workspace_recipient",
"error": "Workspace not verified",
"message": "Unverified workspaces cannot send campaigns. You can send individual emails only to workspace members' account emails."
}{
"error": "Campaign cannot be scheduled",
"message": "Campaign status is 'sent'. Only draft campaigns can be scheduled."
}Kampagne stornieren
Setzt den Status der Kampagne auf canceled und löst das Event campaign.canceled aus. Erfordert einen API-Schlüssel mit dem Scope full.
Nur Kampagnen mit dem Status draft oder sending lassen sich stornieren; jeder andere Status gibt 422 zurück. Wenn Sie eine Kampagne im laufenden Versand stornieren, werden E-Mails, die bereits zur Zustellung in der Warteschlange stehen, nicht zurückgeholt.
/campaigns/{id}/cancelPfadparameter
idstringerforderlichcmp_…) oder der Name der Kampagne.Rückgabe
Gibt object, id, name und status (canceled) zurück.
Gibt 422 zurück, wenn der Status der Kampagne nicht draft oder sending ist, und 404, wenn die Kampagne nicht existiert.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "canceled"
}{
"error": "Campaign cannot be canceled",
"message": "Campaign status is 'scheduled'. Only 'draft' or 'sending' campaigns can be canceled."
}{
"error": "Campaign not found"
}Kampagne löschen
Löscht eine Kampagne endgültig. Erfordert einen API-Schlüssel mit dem Scope full. Löst das Event campaign.deleted aus.
Das Löschen einer Kampagne wirkt sich nicht auf E-Mails aus, die bereits gesendet oder in die Warteschlange gestellt wurden. Um eine Kampagne im laufenden Versand anzuhalten, stornieren Sie sie zuerst.
/campaigns/{id}Pfadparameter
idstringerforderlichcmp_…) oder der Name der Kampagne.Rückgabe
Gibt object, id, name und deleted: true zurück. Gibt 404 zurück, wenn die Kampagne nicht existiert.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"deleted": true
}{
"error": "Campaign not found"
}