Kampagnen
Kampagnen erstellen, ihre Kontaktlisten und Segmente 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 und Segmente 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, mit Ersatzwerten und {{#if}}-Blöcken. Legen Sie den Inhalt beim Erstellen der Kampagne fest.textstringhtml.preview_textstring<mj-preview> in MJML).contentstringhtml noch text übergeben und content_type html oder text ist, sendet Emailit content als HTML- bzw. Nur-Text-Inhalt.content_typestringStandardwert: htmlcontent: html, text oder mjml. Für das Emailit-Team kompiliert Emailit Inhalte vom Typ mjml zu html (Alpha). Für alle anderen ist mjml nur eine Bezeichnung: Senden Sie das kompilierte HTML in html.utm_trackingbooleanStandardwert: falsetrue, damit Emailit beim Versand der Kampagne UTM-Parameter an jeden http- und https-Link anhängt und Ihre Webanalyse die Besuche der Kampagne zuordnet. Parameter, die ein Link bereits hat, bleiben erhalten, und Abmeldelinks und Links zur Webversion werden nicht verändert. Siehe Versandoptionen.utm_paramsobject | nullUTM-Werte, die verwendet werden, wenn utm_tracking aktiviert ist. Jeder Schlüssel setzt einen utm_-Parameter:
source(Standardwertemailit),medium(Standardwertemail) undcampaign(Standardwert{campaign_name}).content,termundid, die standardmäßig nicht hinzugefügt werden.
Werte sind Text mit bis zu 191 Zeichen und können die Tokens {campaign_name} (der Kampagnenname in Kleinbuchstaben, mit Bindestrichen), {campaign_id}, {subject}, {variant} (der Name der A/B-Test-Version) und {send_date} (YYYY-MM-DD) enthalten. Unbekannte Schlüssel und Tokens geben 422 zurück. Schlüssel, die Sie nicht setzen, behalten ihre Standardwerte; null oder {} setzt alle zurück.
smart_sending_hoursinteger | nullnull (Standardwert) deaktiviert Smart Sending. Wird geprüft, wenn der Versand der Kampagne beginnt. E-Mails aus Automatisierungen und der E-Mail-API zählen nicht.exclude_unengagedbooleanStandardwert: falsetrue, um Kontakte zu überspringen, denen in den letzten 90 Tagen 3 oder mehr Kampagnen-E-Mails gesendet wurden und die keine davon geöffnet oder geklickt haben.tagsstring[]tags senden, wird die Liste ersetzt.send_strategystringStandardwert: immediateimmediate, throttled, local_time oder smart_time. Wird mit der Kampagne gespeichert und verwendet, wenn Sie sie ohne Strategie senden.send_optionsobject | nullsend_strategy, unverändert gespeichert und beim Versand der Kampagne vollständig geprüft. Siehe Kampagne senden oder planen.ab_testobject | nullEin A/B-Test mit 2 bis 5 Versionen. Ein zufälliger Anteil der Empfänger wird gleichmäßig auf die Versionen aufgeteilt. Nach duration_hours erhalten die übrigen Empfänger die Version mit dem besten Ergebnis. Während der Test läuft, hat die Kampagne den Status testing. A/B-Tests senden mit der Strategie immediate, sofort oder zu einem geplanten Zeitpunkt.
enabled(boolean, Standardwerttrue):falsedeaktiviert den Test.winner_metric(string, Standardwertopened):opened,clicked,orders(zugeordnete Bestellungen pro gesendeter E-Mail) oderrevenue(zugeordneter Umsatz pro gesendeter E-Mail).ordersundrevenuegehören zu Commerce, das in der Alpha ist: Andere Anfragen geben403miterror: "commerce_alpha"zurück.test_size_percent(integer, Standardwert20): Anteil der Empfänger im Test, von 10 bis 100. Bei 100 sind alle im Test, und es wird keine Gewinnerversion gesendet.duration_hours(integer, Standardwert4): wie lange der Test läuft, bevor die Gewinnerversion gesendet wird, von 1 bis 168.variants(object[], erforderlich): 2 bis 5 Versionen. Jede kannname(bis zu 100 Zeichen, StandardwerteA,B,Cund so weiter),subject,preview_text,from_name,from_email,reply_to,htmlundtextfestlegen. Felder, die eine Version weglässt, stammen aus der Kampagne. Mindestens eine Version muss einen Betreff, einen Vorschautext, einen Absendernamen, eine Absenderadresse oder einen Inhalt festlegen.
Rückgabe
Gibt 201 Created mit dem Kampagnen-Objekt zurück. status ist draft. Die Antwort gibt html, text und content nicht zurück. Sie enthält die oben genannten Einstellungen, send_completes_at und send_summary (beide null, bis die Kampagne gesendet wird) sowie ab_test mit den Versionen und ihren IDs (cvr_…). Siehe Kampagne abrufen.
Gibt 400 zurück, wenn name fehlt, 403, wenn der API-Schlüssel den Scope full nicht hat, und 422, wenn eine Einstellung oder der A/B-Test ungültig ist.
{
"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",
"utm_tracking": false,
"utm_params": null,
"smart_sending_hours": null,
"exclude_unengaged": false,
"tags": [],
"send_strategy": "immediate",
"send_options": null,
"send_completes_at": null,
"send_summary": null,
"ab_test": {
"enabled": false,
"variants": []
}
}{
"error": "Bad Request"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Permission denied: campaigns:create"
}{
"message": "Validation failed. ab_test.variants: Send 2 to 5 variants.",
"errors": {
"ab_test.variants": ["Send 2 to 5 variants."]
}
}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, testing, sent, canceled oder archived. queued bedeutet, dass eine geplante Kampagne ihren Sendezeitpunkt erreicht hat und auf einen Worker wartet. testing bedeutet, dass ein A/B-Test läuft und die Gewinnerversion noch nicht gesendet wurde. Ein zeitlich verteilter Versand bleibt sending, bis sein letzter Batch fällig ist.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. Kampagnen, deren MJML Emailit kompiliert hat (Alpha), geben außerdem ein Objekt mjml mit den Versionen des Dokuments zurück.scheduled_atstring | nullsent_atstring | nullutm_trackingbooleanutm_paramsobject | nullnull. Siehe Kampagne erstellen.smart_sending_hoursinteger | nullnull, wenn Smart Sending deaktiviert ist.exclude_unengagedbooleantagsstring[]send_strategystringimmediate, throttled, local_time oder smart_time.send_optionsobject | nullsend_completes_atstring | nullsent.send_summaryobject | nullWas der letzte Versand bewirkt hat, oder null, bevor die Kampagne gesendet wird:
recipients: Kontakte in den Kontaktlisten und Segmenten, einmal pro Adresse.suppressed: übersprungen, weil die Adresse gesperrt ist.smart_sending_skipped: durchsmart_sending_hoursübersprungen.unengaged_skipped: durchexclude_unengagedübersprungen.sent: Kontakte, denen die Kampagne gesendet wurde. Bei einem A/B-Test nur die Testgruppe.batches: Anzahl der Versand-Batches.completes_at: wiesend_completes_at.
ab_testobjectDer A/B-Test. Ohne Test: { "enabled": false, "variants": [] }. Mit Test: enabled, winner_metric, test_size_percent, duration_hours und variants. Jede Version hat id (cvr_…), name, subject, preview_text, from_name, from_email, reply_to, html, text (null, wenn die Version den Wert der Kampagne verwendet) und is_winner. Siehe Kampagne erstellen.
recipientsobject[]audience_id (aud_…) oder segment_id (seg_…) sowie exclude (true für einen Ausschluss).Der Inhalt (html, text und content) ist nicht in der Antwort enthalten. Für Engagement und Umsatz verwenden Sie Kampagnenstatistiken abrufen oder den Bericht 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",
"utm_tracking": true,
"utm_params": {
"campaign": "{campaign_name}-{send_date}"
},
"smart_sending_hours": 16,
"exclude_unengaged": true,
"tags": ["newsletter", "q4"],
"send_strategy": "throttled",
"send_options": {
"per_hour": 5000
},
"send_completes_at": null,
"send_summary": null,
"ab_test": {
"enabled": false,
"variants": []
},
"recipients": [
{ "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "exclude": false },
{ "segment_id": "seg_3Kq8VbN2xYt5Lm9Pw1Rc7Hd4Zf0", "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 und Segmente 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 oder content_type ändern und das Format html oder text ist, sendet Emailit content als neuen HTML- bzw. Nur-Text-Inhalt.content_typestringcontent: html, text oder mjml. Für das Emailit-Team kompiliert Emailit Inhalte vom Typ mjml zu html (Alpha). Für alle anderen ist mjml nur eine Bezeichnung.utm_trackingbooleanutm_paramsobject | nullsource, medium, campaign, content, term und id. Ersetzt das gespeicherte Objekt; null stellt die Standardwerte wieder her. Siehe Kampagne erstellen.smart_sending_hoursinteger | nullnull deaktiviert die Option.exclude_unengagedbooleantagsstring[]send_strategystringimmediate, throttled, local_time oder smart_time. Wird verwendet, wenn Sie die Kampagne senden, ohne eine Strategie anzugeben.send_optionsobject | nullsend_strategy, beim Versand der Kampagne vollständig geprüft. Siehe Kampagne senden oder planen.ab_testobject | nullDer A/B-Test mit den Feldern, die unter Kampagne erstellen beschrieben sind. Wenn Sie ab_test senden, werden der Test und seine Versionen ersetzt. Um die ID einer Version und damit ihre Ergebnisse zu behalten, geben Sie ihre id (cvr_…) in der Version an. null oder "enabled": false deaktiviert den Test und löscht die Versionen.
recipientsobject[]Die Kontaktlisten und Segmente, an die sich die Kampagne richtet, bis zu 100 Einträge. Ersetzt die aktuelle Liste. Geben Sie mindestens einen Eintrag mit exclude auf false an. Jeder Eintrag hat entweder audience_id oder segment_id, nicht beides:
audience_id(String): eine Kontaktlisten-ID (aud_…) in diesem Workspace.segment_id(String): eine Segment-ID (seg_…) in diesem Workspace. Segmente sind in der Alpha: Nur das Emailit-Team kann ein Segment hinzufügen, andere Anfragen geben403miterror: "segments_alpha"zurück. Segmente, die die Kampagne bereits hat, können bleiben.exclude(Boolean, Standardwertfalse):truelässt die Abonnenten der Kontaktliste oder die Kontakte des Segments aus, auch wenn sie zugleich in einem eingeschlossenen Eintrag sind.
Doppelte Einträge werden ignoriert. Beim Versand sendet Emailit jedem Kontakt genau eine E-Mail, wenn er bei einer eingeschlossenen Kontaktliste angemeldet ist oder einem eingeschlossenen Segment entspricht, in keinem ausgeschlossenen Eintrag ist, nicht global abgemeldet ist, bei mindestens einer Kontaktliste angemeldet ist und nicht gesperrt ist. Segmente werden beim Versand ausgewertet. Existiert eine ausgeschlossene Kontaktliste oder ein ausgeschlossenes Segment bis dahin nicht mehr, wird die Kampagne nicht gesendet.
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 und ab_test zurück. Siehe Kampagne abrufen.
Gibt 422 zurück, wenn recipients keine eingeschlossene Kontaktliste und kein eingeschlossenes Segment enthält, mehr als 100 Einträge hat, einen Eintrag mit beiden IDs enthält oder auf eine Kontaktliste oder ein Segment außerhalb des Workspaces verweist. Gibt außerdem 422 zurück, wenn eine Einstellung oder der A/B-Test ungültig ist oder wenn Sie ab_test für eine Kampagne senden, die weder ein Entwurf noch geplant ist, 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",
"utm_tracking": false,
"utm_params": null,
"smart_sending_hours": null,
"exclude_unengaged": false,
"tags": [],
"send_strategy": "immediate",
"send_options": null,
"send_completes_at": null,
"send_summary": null,
"ab_test": {
"enabled": false,
"variants": []
},
"recipients": [
{ "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "exclude": false },
{ "segment_id": "seg_3Kq8VbN2xYt5Lm9Pw1Rc7Hd4Zf0", "exclude": true }
]
}{
"message": "Validation failed.",
"errors": {
"recipients": ["One or more segments 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, und von den Versandoptionen nur mit tags, send_strategy und send_completes_at. Die übrigen 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",
"tags": ["newsletter"],
"send_strategy": "immediate",
"send_completes_at": null
}
],
"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. Nur Entwürfe und geplante Kampagnen können gesendet werden: Eine Kampagne, die gerade gesendet wird oder gesendet wurde, gibt 422 zurück, sodass eine wiederholte Anfrage nicht noch einmal E-Mails an alle sendet.
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 oder ein eingeschlossenes Segment 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.
send_strategystringWie der Versand zeitlich verteilt wird. Standardmäßig gilt die in der Kampagne gespeicherte Strategie, sonst immediate. Die Strategie und ihre Optionen werden in der Kampagne gespeichert. Siehe Versandoptionen.
immediate: alle auf einmal, sofort oder zuscheduled_at.throttled: gleichmäßig mitper_hourE-Mails pro Stunde, ab sofort oder abscheduled_at.local_time: eine Uhrzeit in der Zeitzone jedes Kontakts.scheduled_atwird ignoriert.smart_time: jeder Kontakt zu der Stunde, in der er üblicherweise öffnet oder klickt, innerhalb eines Zeitfensters ab dem Start.
Kampagnen mit einem A/B-Test senden nur mit immediate.
send_optionsobjectOptionen der Strategie. Standardmäßig gelten die in der Kampagne gespeicherten Optionen.
throttled:per_hour(integer, erforderlich), von 100 bis 1.000.000 E-Mails pro Stunde.local_time:local_time(string, erforderlich), die Uhrzeit im FormatYYYY-MM-DDTHH:mm, zum Beispiel2026-10-08T09:00, undtimezone(string, StandardwertUTC), die IANA-Zeitzone für Kontakte, deren Zeitzone nicht bekannt ist. Die Zeitzonen der Kontakte stammen aus dem Tracking-Skript. Der Versand beginnt, wenn die früheste Zeitzone (UTC+14) die Uhrzeit erreicht; Kontakte in Zeitzonen, in denen sie bereits vorbei ist, erhalten die E-Mail sofort. Bis dahin ist die Kampagnescheduled, sie muss daher ein Entwurf sein. Gibt422zurück, wenn die Uhrzeit in allen Zeitzonen vorbei ist.smart_time:window_hours(integer, Standardwert24), von 1 bis 48. Jeder Kontakt erhält die E-Mail zu der Tagesstunde (UTC), in der er in den letzten 90 Tagen am häufigsten geöffnet oder geklickt hat, wobei ein Klick dreimal so viel zählt wie eine Öffnung, sofern diese Stunde in das Zeitfenster fällt. Kontakte ohne diese Historie erhalten sie zu der Stunde, die unter den übrigen Empfängern am häufigsten ist. Kontakte ohne beides oder deren Stunde außerhalb des Zeitfensters liegt, erhalten sie zum Start.
timezone wird bei jeder Strategie akzeptiert und muss eine gültige IANA-Zeitzone sein, verwendet wird es aber nur von local_time.
Rückgabe
Sofort senden: Der Status wechselt zu sending und Emailit löst campaign.sending aus. Anschließend ermittelt Emailit die Empfänger: jeden angemeldeten Kontakt der eingeschlossenen Kontaktlisten und jeden Kontakt, der den eingeschlossenen Segmenten entspricht, einmal pro Adresse, ohne Kontakte in ausgeschlossenen Kontaktlisten oder Segmenten, ohne Kontakte, die global abgemeldet oder auf keiner Kontaktliste sind, und ohne gesperrte Adressen. Segmente werden in diesem Moment ausgewertet. Außerdem überspringt Emailit Kontakte, die durch smart_sending_hours und exclude_unengaged ausgelassen werden. Die E-Mails werden zu den Zeitpunkten erstellt, die die Versandstrategie festlegt. Sobald alle Empfänger an die Versand-Pipeline übergeben sind, wechselt der Status zu sent und Emailit löst campaign.sent aus. Ein zeitlich verteilter Versand bleibt sending, bis sein letzter Batch fällig ist (send_completes_at). Das Feld send_summary der Kampagne zeigt, wie vielen Kontakten die Kampagne gesendet wurde und wie viele übersprungen wurden. Verfolgen Sie die Zustellung in der Weboberfläche, mit Kampagnenstatistiken abrufen oder mit E-Mail-Events.
A/B-Test: Die Testgruppe erhält die Versionen und der Status wechselt zu testing. Nach duration_hours erhalten die übrigen Empfänger die Gewinnerversion und der Status wechselt zu sent.
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. Wurde eine ausgeschlossene Kontaktliste oder ein ausgeschlossenes Segment in der Zwischenzeit gelöscht, wechselt die Kampagne stattdessen zurück zu draft, ohne gesendet zu werden.
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 |
Die Kampagne ist weder ein Entwurf noch geplant (zum Beispiel wird sie gerade gesendet oder wurde gesendet), scheduled_at lässt sich nicht parsen oder liegt nicht in der Zukunft, Sie haben versucht, eine Kampagne zu planen, die kein Entwurf ist, die Kampagne hat keinen html- oder text-Inhalt, sie hat keine Empfänger (legen Sie sie mit Kampagne aktualisieren fest), sie schließt eine Kontaktliste oder ein Segment aus, die bzw. das nicht mehr existiert, oder send_strategy und send_options sind ungültig. Der Fehler zur Strategie nennt das Feld in message. |
{
"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 sent",
"message": "Campaign status is 'sent'. Only draft or scheduled campaigns can be sent."
}{
"error": "Campaign excludes a deleted audience or segment",
"message": "This campaign excludes an audience or segment that no longer exists. Update its recipients before sending."
}{
"error": "Invalid send strategy",
"message": "send_options.per_hour: Send between 100 and 1,000,000 emails per hour."
}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"
}Kampagnenstatistiken abrufen
Ruft den Bericht einer Kampagne ab: wie viele E-Mails gesendet, zugestellt, geöffnet und geklickt wurden, die Ergebnisse pro Postfachanbieter, den Umsatz der Bestellungen, die der Kampagne zugeordnet sind (Commerce, Alpha), und bei A/B-Tests die Ergebnisse pro Version. Der Bericht in der Weboberfläche unter Email MarketingCampaigns zeigt dieselben Zahlen. Erfordert einen API-Schlüssel mit dem Scope full.
Jede Zahl ist eine Anzahl von E-Mails: Eine E-Mail, die dreimal geöffnet wurde, zählt in opened einmal. Prozentwerte beziehen sich auf sent, sofern nicht anders angegeben, und haben zwei Nachkommastellen.
/campaigns/{id}/statsPfadparameter
idstringErforderlichDie Kampagnen-ID (cmp_...) oder der Name der Kampagne. Namen mit Leerzeichen oder Sonderzeichen müssen Sie URL-kodieren.
Query-Parameter
fromstringNur E-Mails zählen, die zu diesem Zeitpunkt oder danach erstellt wurden, als Datum oder Datum mit Uhrzeit im Format ISO 8601.
tostringNur E-Mails zählen, die zu diesem Zeitpunkt oder davor erstellt wurden.
statusstringNur E-Mails zählen, die aktuell diesen Status haben: accepted, scheduled, delivered, loaded, clicked, attempted, bounced, failed, rejected, suppressed oder complained. Andere Werte werden ignoriert.
Die Filter gelten für die E-Mail-Zahlen, die Anbieter und die Zahlen des A/B-Tests, from und to außerdem für unsubscribed. Umsatz, Bestellungen und Käufer umfassen immer alle Bestellungen, die der Kampagne zugeordnet sind, und ihre Quoten beziehen sich auf alle zugestellten E-Mails der Kampagne.
Rückgabe
objectstringImmer campaign_stats.
campaign_idstringDie Kampagnen-ID (cmp_...).
sentintegerFür die Kampagne erstellte E-Mails. sent_percent ist 100 oder 0, solange noch nichts gesendet wurde.
delivered, delivered_percentinteger, numberDie E-Mails mit dem Status delivered, loaded oder clicked.
opened, opened_percentinteger, numberDie E-Mails, die mindestens einmal geöffnet wurden.
clicked, clicked_percentinteger, numberDie E-Mails mit mindestens einem erfassten Klick.
click_through_percentnumberclicked als Prozentsatz von opened.
bounced, suppressed, complained, attemptedintegerDie E-Mails mit dem Status bounced, suppressed, complained oder attempted (wartet auf eine Wiederholung). Zu jedem gibt es auch ein Feld _percent.
not_processed, not_processed_percentinteger, numberDie E-Mails, die noch accepted oder scheduled sind.
unsubscribed, unsubscribed_percentinteger, numberAbmeldungen über die E-Mails der Kampagne.
providersobject[]Ergebnisse pro Postfachanbieter der Empfänger, für Anbieter mit mindestens einer E-Mail. key ist gmail, outlook.com, live.com, hotmail.com, yahoo, icloud oder other, und label ist der Anzeigename des Anbieters. Jeder Eintrag hat sent, delivered, opened, clicked und bounced mit den zugehörigen Feldern _percent. sent_percent ist der Anteil des Anbieters an allen E-Mails; die übrigen Prozentwerte beziehen sich auf sent des Anbieters.
commerceobjectNur für das Emailit-Team, solange Commerce in der Alpha ist: Andere Anfragen erhalten dieses Feld nicht, und in den variants ihrer A/B-Tests fehlen orders, revenue und revenue_per_recipient. Bestellungen, die der Kampagne zugeordnet sind. Der Umsatz ist die Bestellsumme abzüglich Rückerstattungen, und stornierte Bestellungen zählen nicht. Beträge in verschiedenen Währungen werden nicht addiert: Die Hauptwährung ist die Währung mit dem meisten Umsatz.
-
currency(string oder null): die Hauptwährung. -
revenue(number): Umsatz in der Hauptwährung. -
orders(integer): zugeordnete Bestellungen in allen Währungen. -
buyers(integer): verschiedene Käufer in allen Währungen. Ein Käufer, der in zwei Währungen bezahlt hat, zählt einmal. -
average_order_value(number): in der Hauptwährung. -
conversion_percent(number):buyersals Prozentsatz der zugestellten E-Mails der Kampagne. -
revenue_per_recipient(number):revenuegeteilt durch die zugestellten E-Mails der Kampagne. -
by_currency(object[]):currency,orders,revenue,buyersundaverage_order_valuefür jede Währung, die mit dem höchsten Umsatz zuerst.
ab_testobjectNur bei Kampagnen mit einem A/B-Test.
-
winner_metric(string):opened,clicked,ordersoderrevenue. -
leader_variant_id(string oder null): die Version mit der bisher besten Quote, also Öffnungen, Klicks oder Bestellungen pro gesendeter E-Mail oder Umsatz pro gesendeter E-Mail. -
win_probability(number oder null): die Wahrscheinlichkeit in Prozent, dass die führende Version die zweitplatzierte tatsächlich schlägt. -
significance(string):significant(90 % oder mehr, mit mindestens 50 E-Mails pro Version),promising(75 % oder mehr, gleiches Minimum),not_significant(unter 75 % bei mindestens 1.800 E-Mails pro Version) oderinconclusive. Beirevenuebasiert die Wahrscheinlichkeit auf Bestellungen. -
variants(object[]): pro Versionvariant_id,name,subject,is_winner,sent,delivered,opened,opened_percent,clicked,clicked_percent,orders,revenueundrevenue_per_recipient. Sobald die Gewinnerversion an die übrigen Empfänger gesendet ist, enthalten die Zahlen der Gewinnerversion auch diese E-Mails.
Gibt 404 zurück, wenn keine Kampagne zu id passt, und 503, wenn der Analysespeicher nicht verfügbar ist.
{
"object": "campaign_stats",
"campaign_id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"sent": 12480,
"sent_percent": 100,
"delivered": 12302,
"delivered_percent": 98.57,
"opened": 5021,
"opened_percent": 40.23,
"clicked": 1187,
"clicked_percent": 9.51,
"click_through_percent": 23.64,
"bounced": 98,
"bounced_percent": 0.79,
"suppressed": 42,
"suppressed_percent": 0.34,
"complained": 3,
"complained_percent": 0.02,
"attempted": 0,
"attempted_percent": 0,
"not_processed": 38,
"not_processed_percent": 0.3,
"unsubscribed": 27,
"unsubscribed_percent": 0.22,
"providers": [
{
"key": "gmail",
"label": "Gmail",
"sent": 7310,
"sent_percent": 58.57,
"delivered": 7236,
"delivered_percent": 98.99,
"opened": 3102,
"opened_percent": 42.44,
"clicked": 741,
"clicked_percent": 10.14,
"bounced": 41,
"bounced_percent": 0.56
},
{
"key": "other",
"label": "Other",
"sent": 5170,
"sent_percent": 41.43,
"delivered": 5066,
"delivered_percent": 97.99,
"opened": 1919,
"opened_percent": 37.12,
"clicked": 446,
"clicked_percent": 8.63,
"bounced": 57,
"bounced_percent": 1.1
}
],
"commerce": {
"currency": "USD",
"revenue": 17311.9,
"orders": 214,
"buyers": 198,
"average_order_value": 86.13,
"conversion_percent": 1.61,
"revenue_per_recipient": 1.41,
"by_currency": [
{
"currency": "USD",
"orders": 201,
"revenue": 17311.9,
"buyers": 186,
"average_order_value": 86.13
},
{
"currency": "EUR",
"orders": 13,
"revenue": 1052.4,
"buyers": 12,
"average_order_value": 80.95
}
]
}
}{
"object": "campaign_stats",
"campaign_id": "cmp_37WtKnTZIi4ZbdQ8057IgW0Pbjk",
"sent": 2496,
"sent_percent": 100,
"delivered": 2461,
"delivered_percent": 98.6,
"opened": 1004,
"opened_percent": 40.22,
"clicked": 231,
"clicked_percent": 9.25,
"click_through_percent": 23.01,
"bounced": 21,
"bounced_percent": 0.84,
"suppressed": 9,
"suppressed_percent": 0.36,
"complained": 1,
"complained_percent": 0.04,
"attempted": 0,
"attempted_percent": 0,
"not_processed": 5,
"not_processed_percent": 0.2,
"unsubscribed": 6,
"unsubscribed_percent": 0.24,
"providers": [
{
"key": "gmail",
"label": "Gmail",
"sent": 1460,
"sent_percent": 58.49,
"delivered": 1447,
"delivered_percent": 99.11,
"opened": 612,
"opened_percent": 41.92,
"clicked": 139,
"clicked_percent": 9.52,
"bounced": 9,
"bounced_percent": 0.62
},
{
"key": "other",
"label": "Other",
"sent": 1036,
"sent_percent": 41.51,
"delivered": 1014,
"delivered_percent": 97.88,
"opened": 392,
"opened_percent": 37.84,
"clicked": 92,
"clicked_percent": 8.88,
"bounced": 12,
"bounced_percent": 1.16
}
],
"commerce": {
"currency": "USD",
"revenue": 3297.4,
"orders": 38,
"buyers": 36,
"average_order_value": 86.77,
"conversion_percent": 1.46,
"revenue_per_recipient": 1.34,
"by_currency": [
{
"currency": "USD",
"orders": 38,
"revenue": 3297.4,
"buyers": 36,
"average_order_value": 86.77
}
]
},
"ab_test": {
"winner_metric": "clicked",
"leader_variant_id": "cvr_3uzJsNMbJopoPIZCgLl7zcXxALw",
"win_probability": 99.5,
"significance": "significant",
"variants": [
{
"variant_id": "cvr_3qM7nyKvTUlnBLzE9vtnG03baRV",
"name": "A",
"subject": "New trail shoes are here",
"is_winner": false,
"sent": 1248,
"delivered": 1231,
"opened": 468,
"opened_percent": 37.5,
"clicked": 97,
"clicked_percent": 7.77,
"orders": 14,
"revenue": 1188.6,
"revenue_per_recipient": 0.97
},
{
"variant_id": "cvr_3uzJsNMbJopoPIZCgLl7zcXxALw",
"name": "B",
"subject": "Your next trail shoe is 25% off",
"is_winner": false,
"sent": 1248,
"delivered": 1230,
"opened": 536,
"opened_percent": 42.95,
"clicked": 134,
"clicked_percent": 10.74,
"orders": 24,
"revenue": 2108.8,
"revenue_per_recipient": 1.71
}
]
}
}{
"error": "Campaign not found"
}{
"error": "analytics unavailable"
}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"
}