Interaktive Dokumentation · Entwicklerportal · OpenAPI-Spezifikation · EN · FR · DE · IT · PT · ES

Mailpro™ CRM API v3 : Referenz

Basis-URL : https://api.mailpro.com/v3

Die Mailpro™ CRM API v3 ermöglicht es Ihnen, Kontakte, Listen, Tags, benutzerdefinierte Felder, E-Mail-Vorlagen und Kampagnen programmatisch zu verwalten — und sowohl Massen-Marketing-E-Mails als auch einzelne transaktionale E-Mails sowie SMS zu versenden.

Authentifizierung

Alle Endpunkte (außer POST /token und den OAuth-Endpunkten) akzeptieren drei Authentifizierungsmethoden. Verwenden Sie diejenige, die zu Ihrem Stack passt.

> Legacy Bearer JWT und IdClient+ApiKey sind nicht scope-gesteuert — sie behalten > vollen Zugriff auf jeden Endpunkt, den sie bereits erreichen konnten. Nur OAuth 2.0 > Access Tokens unterliegen den endpunktspezifischen Scope-Prüfungen, die in jeder > nachstehenden Operation aufgeführt sind (ein Token, dem der Scope fehlt, erhält 403 insufficient_scope).

Methode 1 — OAuth 2.0 (empfohlen für Integrationen)

Mailpro betreibt einen OAuth 2.0 Authorization Server für sämtliche APIs, bereitgestellt über eine einzige versionsneutrale Oberfläche: https://api.mailpro.com/oauth/. Ein Server, ein Token — derselbe Access Token funktioniert über CRM v3, Email v2 und SMS hinweg. Welche Endpunkte ein Token aufrufen darf, wird durch die Scopes des Tokens gesteuert, nicht durch die API-Basis-URL, die Sie aufrufen. Es gibt keinen versionsspezifischen OAuth-Endpunkt (kein /v3/oauth, /v2/oauth oder /sms/oauth).

EndpunktURL
AuthorizeGET https://api.mailpro.com/oauth/authorize
Token / RefreshPOST https://api.mailpro.com/oauth/token
JWKS (Signaturen verifizieren)GET https://api.mailpro.com/oauth/.well-known/jwks
DiscoveryGET https://api.mailpro.com/oauth/.well-known/openid-configuration

Issuer (der iss-Claim in jedem Token): https://api.mailpro.com/oauth/.

Unterstützte Grants

Token-Lebensdauern

TokenTTL
Access Token (RS256 JWT)20 Minuten
Refresh Token (gleitend, Einmalverwendung)30 Tage
Authorization Code60 Sekunden

Authorization Code + PKCE — Schritt für Schritt

   GET https://api.mailpro.com/oauth/authorize
     ?response_type=code
     &client_id=YOUR_CLIENT_ID
     &redirect_uri=https://yourapp.example.com/callback
     &scope=contacts:read contacts:write
     &state=RANDOM_CSRF_TOKEN
     &code_challenge=CODE_CHALLENGE
     &code_challenge_method=S256
   POST https://api.mailpro.com/oauth/token
   Content-Type: application/x-www-form-urlencoded

   grant_type=authorization_code&code=AUTH_CODE
   &redirect_uri=https://yourapp.example.com/callback
   &client_id=YOUR_CLIENT_ID&code_verifier=CODE_VERIFIER
   { "access_token": "eyJ…", "token_type": "Bearer",
     "expires_in": 1200, "refresh_token": "…" }

client_credentials

POST https://api.mailpro.com/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET&scope=contacts:read email:send

Derselbe OAuth Access Token wird auch von den APIs Email v2 (api.mailpro.com/v2) und SMS (api.mailpro.com/sms) akzeptiert — einmal authentifizieren, jede beliebige API aufrufen. Vollständiger Scope-Katalog: siehe OAuth 2.0 Scopes unten.

OAuth 2.0 in wenigen Minuten testen — Schnellstart

Der schnellste Weg, OAuth auszuprobieren, ist der client_credentials-Grant (Server-zu-Server, kein Browser, kein Benutzer). Sie benötigen ein client_id / client_secret-Paar (fragen Sie Ihren Mailpro-Ansprechpartner oder erstellen Sie eines unter Einstellungen → API-Zugriff). Ersetzen Sie die Platzhalter unten — committen Sie niemals ein echtes Secret.

1. Einen Access Token abrufen

curl -X POST https://api.mailpro.com/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "scope=contacts:read"
{ "access_token": "eyJhbGciOiJSUzI1Ni…", "token_type": "Bearer",
  "expires_in": 1200 }

2. Einen Ressourcen-Endpunkt mit dem Token aufrufen

curl https://api.mailpro.com/v3/List \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1Ni…"

Derselbe Token funktioniert auch auf Email v2 (…/v2/…) und SMS (…/sms/…) — solange er den von jedem Endpunkt benötigten Scope enthält. Ein Token, dem der erforderliche Scope fehlt, wird mit 403 insufficient_scope abgewiesen.

Interaktives „Mailpro verbinden" (authorization_code + PKCE) — wenn Sie im Auftrag eines *Benutzers* handeln (Zapier/Make/n8n, Partner-Apps): leiten Sie den Benutzer weiter zu GET https://api.mailpro.com/oauth/authorize mit response_type=code, client_id, redirect_uri, scope, state, code_challenge und code_challenge_method=S256; der Benutzer stimmt zu; Sie tauschen den zurückgegebenen code an POST https://api.mailpro.com/oauth/token mit dem passenden code_verifier ein. Vollständige Anleitung oben; Scopes in OAuth 2.0 Scopes unten.

> Tokens sind RS256 JWTs — Access Tokens leben 20 Minuten, Refresh > Tokens 30 Tage (gleitend, Einmalverwendung: jede Erneuerung rotiert den Token). > Verifizieren Sie Signaturen gegen das JWKS unter > https://api.mailpro.com/oauth/.well-known/jwks und validieren Sie den Scope > jeder Anfrage gegen die nachstehende Scope-Matrix.

Methode 2 — Bearer JWT (Legacy)

Authorization: Bearer <access_token>

Holen Sie sich einen Token über POST /token (siehe unten). Standardmäßig 30 Tage gültig; verwenden Sie grant_type=refresh_token, um ohne erneute Authentifizierung zu erneuern. Einfacher einzurichten, aber an einen einzelnen Kontozugang gebunden und kann nicht scope-basiert oder an Dritte weitergegeben werden — bevorzugen Sie OAuth 2.0 für jede installierbare Integration.

Methode 3 — IdClient + ApiKey (einfacher)

Senden Sie Ihre Client-ID und Ihren API-Schlüssel als HTTP-Header (bevorzugt) oder als Query-Parameter:

IdClient: 12345
ApiKey:   a1b2c3d4-e5f6-7890-abcd-ef1234567890

Dieselben Zugangsdaten wie bei den v2- / SMS-APIs — per Copy-Paste aus Einstellungen → API-Zugriff. Kein Token-Austauschschritt. Die Header-Form wird empfohlen, da URLs von IIS / Cloudflare / Proxys protokolliert werden.

Token-Endpunkt (password grant)

POST /token
Content-Type: application/x-www-form-urlencoded

grant_type=password&username=YOUR_USERNAME&password=YOUR_API_KEY

Token-Endpunkt (client_credentials grant)

POST /token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=YOUR_CLIENT_ID

> Der von POST /v3/token ausgestellte Token ist auch auf der Email v2 API > (api.mailpro.com/v2) und der SMS API (api.mailpro.com/sms) gültig. Einmal authentifizieren, > jede beliebige API aufrufen.

OAuth 2.0 Scopes

Wenn Ihre App einen OAuth Access Token anfordert, deklariert sie eine Reihe von Scopes — Berechtigungen, die genau definieren, was der Token tun darf. Der Benutzer sieht eine allgemein verständliche Beschreibung jedes angeforderten Scopes auf dem Einwilligungsbildschirm. Scopes sind im scope-Parameter durch Leerzeichen getrennt (scope=contacts:read email:send). Fordern Sie nur an, was Sie benötigen.

Scopes folgen dem Muster <resource>:<action> und sind hierarchisch unabhängig — contacts:write impliziert nicht contacts:read; fordern Sie bei Bedarf beide an.

ScopeErlaubt
contacts:readAnzeigen Ihrer Kontakte, Listen, Tags, Segmente und benutzerdefinierten Felder.
contacts:writeErstellen, Bearbeiten und Löschen Ihrer Kontakte, Listen, Tags und benutzerdefinierten Felder.
email:sendVersenden transaktionaler und kampagnenbezogener E-Mails in Ihrem Auftrag.
email:readAnzeigen von Zustellstatistiken, Öffnungen, Klicks und Bounce-Historie.
email:templates:readAnzeigen Ihrer E-Mail-Vorlagen (Betreff, HTML-, Plain-Text-Body).
email:templates:writeErstellen, Bearbeiten und Löschen Ihrer E-Mail-Vorlagen.
sms:sendVersenden transaktionaler und kampagnenbezogener SMS-Nachrichten in Ihrem Auftrag.
sms:readAnzeigen des SMS-Guthabens und der Nachrichtenhistorie.
sms:contacts:readAnzeigen Ihres SMS-Telefonbuchs.
sms:contacts:writeErstellen, Bearbeiten und Löschen von Einträgen in Ihrem SMS-Telefonbuch.
webhooks:manageAbonnieren, Bearbeiten und Entfernen von Webhook-Endpunkten für Ihr Konto.
account:readAnzeigen Ihrer Konto-Credits, Limits und des Abonnementstatus.

Scope-Erzwingung pro Endpunkt

Scope-Prüfungen erfolgen live und werden für OAuth-ausgestellte Tokens pro Endpunkt erzwungen (Legacy-Authentifizierung ist ausgenommen). Jede Operation in dieser Referenz listet ihren erforderlichen Scope unter Authorization auf. Zusammenfassung für die CRM v3-Oberfläche:

EndpunkteErforderlicher Scope
GET /Contact/{id}, GET /List, GET /List/{id}, GET /List/{id}/Contact, GET /List/{listId}/Unsubscribers, GET /Tag, GET /Tag/{id}, GET /Tag/{id}/Contact, GET /Segment, Segment-Zugehörigkeitsprüfungcontacts:read
POST /Contact, POST /Contact/Multiple, PUT/DELETE /Contact/{id}, Tag oder Liste an einem Kontakt hinzufügen/entfernen, POST/PUT/DELETE /List, POST/PUT/DELETE /Tagcontacts:write

> Endpunkte in dieser Spezifikation, die nicht oben aufgeführt sind (z. B. GET /Field, > Kampagnen, transaktionaler Versand, SMS-Versand, Nachrichtenvorlagen, Kontoinformationen), > sind heute mit jedem gültigen Token erreichbar — sie sind auf der CRM v3-Oberfläche > noch nicht scope-gesteuert. Die Email v2- und SMS-APIs schützen zusätzlich ihre eigenen > Send- / Template- / Contacts- / Account-Endpunkte (siehe entsprechende Spezifikationen).

Eine Scope-Ablehnung liefert 403 mit { "error": "insufficient_scope", "required_scope": "…" } (RFC 6750 §3.1).

Datenformat

Paginierung

Gleiche Regel für die drei Mailpro-APIs (Email v2, CRM v3, SMS): 5.000 Einträge pro Seite, standardmäßig und maximal.

Unbekannte Parameter werden ignoriert, nie abgelehnt. Enthält eine Anfrage einen Parameter, den die API nicht kennt, enthält die Antwort X-Ignored-Parameters (die Namen) und X-Documentation (einen Link zu dieser Seite), damit ein Tippfehler nicht unbemerkt bleibt.

Geschäftsfehler-Codes

Verstöße gegen Geschäftsregeln liefern HTTP 406 mit einem JSON-Body:

{ "Message": "Contact cannot be created. Email cannot be empty." }

Häufige 406-Gründe:

Zurückgegebene Statuscodes

CodeBedeutung
400Fehlerhafte Anfrage (ungültiges JSON, Nachricht über dem SMS-Teil-Limit)
401Fehlende, ungültige oder abgelaufene Anmeldedaten
402Nicht genügend Guthaben für den Versand
403Durch Ihre Anmeldedaten erlaubt, aber abgelehnt — Konto für SMS-Versand gesperrt
404Das referenzierte Objekt existiert nicht (Kontakt, Liste, Tag, Feld, Kampagne)
406Verstoß gegen eine Kontakt-Geschäftsregel (siehe Liste oben)
422Eingabe durch Validierung abgelehnt oder Kontolimit erreicht

> Geändert: Einige dieser Fälle gaben früher 404 zurück. Unzureichendes > Guthaben gibt jetzt 402 zurück, Validierungsfehler und Kontolimits geben > 422 zurück, und ein für SMS gesperrtes Konto gibt 403 zurück. 404 > wird jetzt nur noch für „dieses Objekt existiert nicht" verwendet, konsistent > mit der SMS-API. Wenn Ihre Integration in diesen Fällen auf 404 verzweigt, > aktualisieren Sie sie auf die obigen Codes.

Format von Telefonnummern

Telefonnummern werden automatisch normalisiert. Sie können diese in vielen Formaten senden — Leerzeichen, Bindestriche, Punkte, Schrägstriche, Klammern, Unterstriche und geschützte Leerzeichen werden vor der Validierung entfernt. Jedes andere Zeichen (Buchstaben, Apostrophe, =, ; usw.) macht die Nummer ungültig.

GültigUngültig
+41794849980 — E.164 international0612345678 — nationales Format (führende 0)
0041 79 484 99 80 — 00-Präfix + Leerzeichen41'794'849'80 — Apostrophe (nicht entfernt)
+33 6-12-34-56-78 — + mit Bindestrichentel=0041794849980 — zusätzliche Zeichen
41794849980 — reine Ziffern1234567 — zu kurz (< 8 Ziffern)

Regeln:

v3 Contact-Besonderheiten: das Feld phone_number auf einem Contact ist derzeit nach Normalisierung auf 12 Ziffern begrenzt (gegenüber 15 für die eigenständigen SMS- Endpunkte). Nummern aus Ländern wie Deutschland (13), Brasilien (13) oder Italien mobil (12–13) können auf /v3/Contact mit Length exceeded for Phone Number (12) abgelehnt werden. Diese Legacy-Beschränkung kann in einer zukünftigen Version gelockert werden.

Limits

RessourceLimit
Tags pro Konto1.000
Listen pro Konto1.000
Benutzerdefinierte Felder pro Konto50
Monatliche API-Anfragen pro Konto50.000 (5× E-Mail-Credits des Abonnements)

Zustellverfolgung (transaktionale E-Mails)

Jede einzeln versendete E-Mail (POST /Send/Mail, die Email API v2, das SMTP-Relay oder eine Automatisierung) erhält eine Kennung. Sie kann verfolgt werden, bis der Server des Empfängers sie annimmt oder ablehnt. Kampagnen sind hier nicht abgedeckt: Nutzen Sie die Statistiken.

statusBedeutungEndgültig?
queuedAngenommen, wartet auf den Versand.nein
scheduledFür später geplant (date_planned).nein
sentVon unseren Servern übergeben, noch keine Antwort des Empfängerservers.nein
deliveredVom Empfängerserver angenommen (diag_code = seine SMTP-Antwort).ja
bouncedAbgelehnt. bounce_type: hard = ungültige Adresse oder endgültige Ablehnung; soft = Ablehnung nach erneuten Versuchen (Postfach voll, Server nicht erreichbar …).ja
not_foundUnbekannte Kennung oder Kennung, die nicht zu Ihrem Konto gehört.ja

Abfragen ohne Endlosschleife

Die Status werden 365 Tage aufbewahrt.

Webhooks

Mailpro™ kann Ihren Server in Echtzeit benachrichtigen, wenn bestimmte Ereignisse in Ihrem Konto auftreten (ein Kontakt wird erstellt, eine E-Mail wird zugestellt, eine Kampagne endet usw.). Stripe-Stil — Ihre URL erhält einen mit HMAC-SHA256 signierten POST, sobald das Ereignis ausgelöst wird.

Jedes an Ihren Webhook gesendete Ereignis zählt als 1 Anfrage in Ihrem Kontingent an API-Anfragen.

So funktioniert es

> ⏱ Aktivierungsverzögerung — nachdem Sie einen Webhook erstellt, aktualisiert oder gelöscht haben, dauert es > bis zu 10 Minuten, bis sich die Änderung über die Mailpro-API-Server verbreitet. > Während dieses Zeitfensters stimmen Ereignisse möglicherweise noch nicht mit Ihrem neuen Abonnement überein > (oder stimmen ggf. weiterhin mit einem gerade entfernten überein). Dies ist die Zeit, die erforderlich ist, um > den In-Memory-Abonnement-Cache auf jeder API-Instanz zu aktualisieren.

Payload-Envelope

Alle Ereignisse teilen sich einen gemeinsamen Envelope:

{
  "id":         "evt_8f3a9b2c4d1e5f6789abcdef01234567",
  "type":       "contact.created",
  "created":    1748194800,
  "apiVersion": "v3",
  "account":    { "id": 12345, "name": "ACME Corp" },
  "data":       { "id": "...", "email": "[email protected]", "...": "..." }
}
FeldFormatBeschreibung
idevt_ + 32 Hex-ZeichenEindeutige Ereignis-ID — verwenden Sie sie auf Ihrer Seite als Idempotenzschlüssel.
type<domain>.<verb>Kanonischer Ereignistyp (z. B. email.delivered, contact.created).
createdUnix-Sekunden UTCIn der HMAC-Signatur enthalten.
apiVersion"v3"Welche Mailpro-API das Ereignis veröffentlicht hat.
account.idintIhre Mailpro-Client-ID.
account.namestringIhr Kontoname (nützlich für clientseitiges Debugging).
dataobjectEreignis-Payload — die Form hängt vom type ab (siehe Katalog unten).

Ereigniskatalog

EreignisAuslöserdata-Form
pingTest über POST /Webhook/{id}/test{ message }
contact.createdPOST /Contact{ id, email, firstName, lastName, createdAt }
contact.updatedPUT /Contact/{id}{ id, email, firstName, lastName, updatedAt, changes }
contact.deletedDELETE /Contact/{id}{ id, email, deletedAt }
list.contact_addedKontakt zu Liste hinzugefügt{ listId, listName, contactId, contactEmail, addedAt }
list.contact_removedKontakt von Liste entfernt{ listId, listName, contactId, contactEmail, removedAt }
tag.appliedTag auf Kontakt angewendet{ tag, contactId, contactEmail, appliedAt }
tag.removedTag entfernt{ tag, contactId, contactEmail, removedAt }
segment.matchedKontakt tritt in ein Segment ein{ segmentId, segmentName, contactId, contactEmail, matchedAt }
email.processedVersand von der Pipeline akzeptiert{ messageId, email, campaignId, processedAt }
email.deliveredEine einzelne E-Mail wurde vom Empfängerserver angenommen — API v2/v3, SMTP oder Automation (nicht Kampagnen). Aus dem PowerMTA-Zustellstrom ausgelöst.{ messageId, email, idSending, sendingType, diagCode, deliveredAt }
email.openedTracking-Pixel aufgerufen{ messageId, email, campaignId, openedAt, ip, userAgent }
email.clickedKlick auf getrackten Link{ messageId, email, campaignId, clickedAt, url, ip, userAgent }
email.bouncedHard- oder Soft-Bounce{ messageId, email, campaignId, bouncedAt, bounceType, reason }
email.spam_reportFBL-Beschwerde{ messageId, email, campaignId, reportedAt }
email.unsubscribedOpt-out-Link geklickt{ messageId, email, campaignId, unsubscribedAt }
email.droppedVor dem Versand abgelehnt{ messageId, email, campaignId, droppedAt, reason }
campaign.startedVersand beginnt{ campaignId, name, totalRecipients, startedAt }
campaign.finishedAlle Empfänger verarbeitet{ campaignId, name, totalSent, totalFailed, finishedAt }
import.startedImport-Job gestartet{ importId, fileName, totalRows, startedAt }
import.progressBei 25/50/75 %{ importId, fileName, processedRows, totalRows, progressPct }
import.completedImport OK{ importId, fileName, totalRows, addedCount, updatedCount, errorCount, completedAt }
import.failedSchwerwiegender Fehler während des Imports{ importId, fileName, errorMessage, failedAt }

Abonnieren Sie alle Ereignisse dieser API, indem Sie ["*"] im Array events übergeben.

HMAC-Signatur

Jeder POST enthält einen X-Mailpro-Signature-Header:

X-Mailpro-Signature: t=1748194800,v1=7f9ac2b6e4d1c8a3...
X-Mailpro-Event-Id:  evt_8f3a9b2c4d1e5f6789abcdef01234567
X-Mailpro-Event-Type: contact.created
X-Mailpro-Attempt:   1

So verifizieren Sie:

Node.js
const crypto = require('crypto');

function verifyMailproSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(',').map(p => p.split('=')));
  if (Math.abs(Date.now() / 1000 - parseInt(parts.t)) > 300) return false;
  const expected = crypto
    .createHmac('sha256', secret)
    .update(parts.t + '.' + rawBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(parts.v1, 'hex'),
    Buffer.from(expected, 'hex'));
}
PHP
function verifyMailproSignature(string $rawBody, string $header, string $secret): bool {
    parse_str(str_replace(',', '&', $header), $p);
    if (abs(time() - (int)$p['t']) > 300) return false;
    $expected = hash_hmac('sha256', $p['t'] . '.' . $rawBody, $secret);
    return hash_equals($expected, $p['v1']);
}
Python
import hmac, hashlib, time

def verify_mailpro_signature(raw_body: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split('=') for p in header.split(','))
    t = int(parts['t'])
    if abs(time.time() - t) > 300:
        return False
    expected = hmac.new(
        secret.encode(),
        f"{t}.".encode() + raw_body,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, parts['v1'])
C#
using System.Security.Cryptography;
using System.Text;

static bool VerifyMailproSignature(string rawBody, string header, string secret) {
    var parts = header.Split(',')
        .Select(p => p.Split('='))
        .ToDictionary(a => a[0], a => a[1]);
    var t = long.Parse(parts["t"]);
    if (Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t) > 300) return false;
    using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
    var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes($"{t}.{rawBody}"));
    var expected = Convert.ToHexString(hash).ToLowerInvariant();
    return CryptographicOperations.FixedTimeEquals(
        Encoding.UTF8.GetBytes(expected),
        Encoding.UTF8.GetBytes(parts["v1"]));
}

Wiederholungsversuche und automatische Deaktivierung

VersuchVerzögerung vor dem nächsten Versuch
1 → 210 Sekunden
2 → 31 Minute
3 → 45 Minuten
4 → 530 Minuten
5 → 62 Stunden
6 → 76 Stunden
7abgebrochen (Zustellung als failed markiert)

Nach 10 aufeinanderfolgenden Fehlschlägen an demselben Webhook wird er automatisch deaktiviert (isActive: false) und Sie erhalten eine Benachrichtigungs-E-Mail. Aktivieren Sie ihn mit PUT /Webhook/{id} erneut, sobald Ihr Endpunkt repariert ist.

Erfolg = HTTP 2xx

Wir betrachten Ihren Webhook nur dann als erfolgreich, wenn Sie einen Status im Bereich 200–299 zurückgeben. Jeder 3xx/4xx/5xx oder ein Timeout (> 10 Sek.) zählt als Fehlschlag und löst Wiederholungsversuche aus. Falls Ihr Endpunkt dauerhaft tot ist, geben Sie explizit 410 Gone zurück — Wiederholungsversuche finden weiterhin statt, aber der Grund des Fehlschlags ist in Ihrem Zustellprotokoll klarer.

Limits

LimitWert
Webhooks pro Konto20
Abonnierte Ereignisse pro Webhook50
Maximale Payload-Größe256 KB
HTTP-Timeout pro Versuch10 Sekunden
Aufbewahrung der Zustellhistorie30 Tage

Inhalt

Authentication

Beziehen Sie ein Bearer-JWT-Token, um sich für alle anderen API-Aufrufe zu authentifizieren. Der Token-Endpunkt akzeptiert mehrere Grant-Typen: password, refresh_token, client_credentials und Drittanbieter-Integrationen (zapier, automateio, microsoft-flow).

POST /token

Access-Token abrufen

Bezieht ein Bearer-JWT-Token mithilfe von Client-Anmeldedaten. Übergeben Sie das zurückgegebene access_token als Authorization: Bearer <token> in allen nachfolgenden Anfragen.

Unterstützte Grant-Typen
Grant-TypAnwendungsfall
passwordStandardintegration — Benutzername + API-Schlüssel
refresh_tokenErneuern eines ablaufenden Access-Tokens ohne erneute Authentifizierung
client_credentialsServer-zu-Server nur mit Client-ID
zapier / automateio / microsoft-flowIntegrationen mit Drittanbieter-Plattformen
Token-Gültigkeitsdauer

Verwenden Sie grant_type=refresh_token, um ein frisches Access-Token ohne erneute Authentifizierung zu erhalten — Ihr SDK sollte dies automatisch tun, wenn das Access-Token kurz vor dem Ablauf steht (typische Strategie: Erneuerung, wenn weniger als 24 h verbleiben).

Tokens sicher speichern

Auch bei einer Gültigkeitsdauer von 30 Tagen kann jede Person, die in den Besitz eines access_token kommt, Ihr Konto bis zu dessen Ablauf imitieren. Speichern Sie Tokens in einem serverseitigen Secret-Store (Vault, AWS Secrets Manager, Azure Key Vault, Umgebungs- variablen auf einem gehärteten Host). Niemals ein Token einbetten in:

Wenn ein Token offengelegt wurde, widerrufen Sie es über die Einstellungen Ihres Mailpro-Kontos und fordern Sie ein neues an.

Anfragetext (application/x-www-form-urlencoded)

NameTypErforderlichBeschreibung
grant_typestring: password, refresh_token, client_credentials, zapier, automateio, microsoft-flowjaAuthentifizierungs-Grant-Typ
usernamestringIhr Mailpro-Benutzername (E-Mail). Erforderlich für den password-Grant.
passwordstringIhr Mailpro-API-Schlüssel (GUID-Format). Erforderlich für den password-Grant.
refresh_tokenstringVorheriges Refresh-Token. Erforderlich für den refresh_token-Grant.
client_idstringIhre Mailpro-Client-ID (Ganzzahl). Erforderlich für den client_credentials-Grant.

Antworten

CodeBeschreibung
200Token erfolgreich ausgestellt
400Ungültige Anmeldedaten oder nicht unterstützter Grant-Typ

Beispiel 200

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "bearer",
  "expires_in": 31535999,
  "userName": "12345",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "application": null
}

Beispiel 400

{
  "error": "invalid_grant",
  "error_description": "The username or password is incorrect."
}

Account

Rufen Sie das Kontoprofil, den Guthabenstand und Abonnementdetails ab.

GET /Account/Me

Kontodetails abrufen

Gibt die Profildetails und Einstellungen des authentifizierten Mailpro-Kontos zurück.

Antworten

CodeBeschreibung
200Kontodetails erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Account/Credits

Guthabenstand abrufen

Gibt das verbleibende E-Mail- und SMS-Guthaben des Kontos zurück.

Antworten

CodeBeschreibung
200Guthabenstand erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Beispiel 200

{
  "email_credits": 48500,
  "sms_credits": 1200
}

GET /Account/SubscriptionEndDate

Abonnement-Enddatum abrufen

Gibt das Ablaufdatum des aktuellen Mailpro-Abonnements zurück.

Antworten

CodeBeschreibung
200Abonnement-Enddatum erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Account/Limits

Monatliches API-Kontingent abrufen

Gibt das monatliche API-Anfragekontingent für den authentifizierten Client zurück.

Kontingentberechnung: Das Limit wird aus den E-Mail- Abonnementguthaben kalibriert (typischerweise subscription_credits × 5). Für einen Tarif mit 10.000 E-Mails/Monat ergibt dies ein monatliches Budget von 50.000 Anfragen. Die exakte Zuordnung wird vom Abrechnungsjob bei der Abonnementregistrierung festgelegt und am Jahrestag des Abonnements zurückgesetzt (nicht am

Was Guthaben verbraucht:

Was KOSTENLOS ist (verbraucht kein Guthaben):

Antworten

CodeBeschreibung
200Kontingent-Snapshot
401Ungültiges oder abgelaufenes Token
404Für dieses Konto wurde kein Kontingent-Datensatz gefunden (neu erstelltes Konto, das noch nie einen API-Aufruf getätigt hat; der Eintrag wird bei der ersten authentifizierten Anfrage angelegt).

Contact

Vollständiges CRUD für CRM-Kontakte. Kontakte speichern eine E-Mail-Adresse, optional eine Telefonnummer, Werte benutzerdefinierter Felder und gehören einer oder mehreren Listen an. Sie können auch mit Tags versehen werden. Kontakt-IDs sind UUIDs.

POST /Contact

Kontakt erstellen

Erstellt einen neuen CRM-Kontakt mit optionalen benutzerdefinierten Feldern, Listenzuweisungen und Tags.

Erforderlich:

Telefonnummern akzeptieren +41…, 0041… oder 41… mit oder ohne Trennzeichen (maximal 12 Ziffern für Kontakte — siehe Telefonnummernformat in der API-Beschreibung).

Benutzerdefinierte Felder werden über ihre id identifiziert (aus GET /Field). Die Werte werden gegen den Typ des Felds validiert.

OAuth-Scope : contacts:write

Anfragetext (application/json)

NameTypErforderlichBeschreibung
emailstringjaE-Mail-Adresse des Kontakts (erforderlich, muss eindeutig sein)
phone_numberstringTelefonnummer — akzeptiert +41…, 0041… oder 41… mit oder ohne Trennzeichen. Muss mit einem gültigen Ländercode beginnen. Maximal 12 Ziffern für Kontakte (siehe Telefonnummernformat in der API-Beschreibung für die vollständigen Regeln).
listsarray of ListRefjaListen, denen dieser Kontakt zugewiesen werden soll. Mindestens eine Liste ist erforderlich.
tagsarray of TagRefTags, die diesem Kontakt zugewiesen werden sollen (optional)
custom_fieldsarray of FieldValueWerte benutzerdefinierter Felder für diesen Kontakt (optional)

Beispiel

{
  "email": "[email protected]",
  "phone_number": "+41791234567",
  "lists": [
    {
      "id": 101
    }
  ],
  "tags": [
    {
      "id": 5
    }
  ],
  "custom_fields": [
    {
      "id": 1,
      "value": "Alice"
    },
    {
      "id": 2,
      "value": "Dupont"
    }
  ]
}

Antworten

CodeBeschreibung
200Kontakt erfolgreich erstellt
400Ungültiges E-Mail-Format
401Ungültiges oder abgelaufenes Token
406Verstoß gegen Geschäftsregel (siehe Beschreibung für die vollständige Liste)

Beispiel 406

{
  "Message": "Contact cannot be created. A contact already exist with the same Email"
}

POST /Contact/Multiple

Kontakte importieren (Massenvorgang)

Erstellt bis zu 1.000 Kontakte in einer einzigen Anfrage für einen effizienten Massenimport. Die Antwort enthält eine Liste der erfolgreich erstellten Kontakte sowie eine Fehlerliste für Kontakte, die nicht erstellt werden konnten (z. B. doppelte E-Mail-Adresse, ungültige Daten).

Hinweis: In Massenimporten verwendete Listen und Tags dürfen nicht mit aktiven Automatisierungs-Workflows verknüpft sein. Andernfalls wird der gesamte Import mit HTTP 406 abgelehnt.

OAuth-Scope : contacts:write

Anfragetext (application/json)

Beispiel

[
  {
    "email": "[email protected]",
    "lists": [
      {
        "id": 101
      }
    ],
    "custom_fields": [
      {
        "id": 1,
        "value": "Alice"
      }
    ]
  },
  {
    "email": "[email protected]",
    "lists": [
      {
        "id": 101
      }
    ],
    "custom_fields": [
      {
        "id": 1,
        "value": "Bob"
      }
    ]
  }
]

Antworten

CodeBeschreibung
200Massenimport abgeschlossen (prüfen Sie das errors-Array auf Teilfehler)
400Ungültige Eingabe
401Ungültiges oder abgelaufenes Token
406Verstoß gegen Geschäftsregel (z. B. Automatisierungskonflikt, Listenlimit erreicht)

Beispiel 200

{
  "Added": [
    {
      "Email": "[email protected]",
      "Id": "550e8400-e29b-41d4-a716-446655440000"
    },
    {
      "Email": "[email protected]",
      "Id": "660e8400-e29b-41d4-a716-446655440001"
    }
  ],
  "Errors": []
}

GET /Contact/{id}

Kontakt abrufen

Gibt die Details eines bestimmten Kontakts zurück. Verwenden Sie includeTags=true, um auch die dem Kontakt zugewiesenen Tags zurückzugeben. Verwenden Sie includeLists=true, um auch die Listen zurückzugeben, denen der Kontakt angehört.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathstring (uuid)jaKontakt-UUID (aus POST /Contact oder GET /List/{id}/Contact)
includeTagsquerybooleanAuf true setzen, um die Tag-Zuweisungen des Kontakts in die Antwort einzubeziehen
includeListsquerybooleanAuf true setzen, um die Listenzugehörigkeiten des Kontakts in die Antwort einzubeziehen

Antworten

CodeBeschreibung
200Kontakt erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Kontakt nicht gefunden

Beispiel 200

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "email": "[email protected]",
  "phone_number": "41791234567",
  "custom_fields": [
    {
      "id": 1,
      "value": "Alice"
    },
    {
      "id": 2,
      "value": "Dupont"
    }
  ],
  "tags": [
    {
      "id": 5
    }
  ],
  "lists": [
    {
      "id": 101
    }
  ]
}

PUT /Contact/{id}

Kontakt aktualisieren

Aktualisiert die E-Mail-Adresse, Telefonnummer, benutzerdefinierten Felder, Listenzuweisungen und Tags eines Kontakts. Der Anfrage-Body ersetzt die aktuellen Daten des Kontakts — geben Sie alle Listen und Tags an, denen der Kontakt weiterhin zugewiesen bleiben soll.

Im Body erforderlich: email und mindestens ein lists-Eintrag.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathstring (uuid)jaKontakt-UUID

Anfragetext (application/json)

NameTypErforderlichBeschreibung
emailstringjaE-Mail-Adresse des Kontakts (erforderlich, muss eindeutig sein)
phone_numberstringTelefonnummer — akzeptiert +41…, 0041… oder 41… mit oder ohne Trennzeichen. Muss mit einem gültigen Ländercode beginnen. Maximal 12 Ziffern für Kontakte (siehe Telefonnummernformat in der API-Beschreibung für die vollständigen Regeln).
listsarray of ListRefjaListen, denen dieser Kontakt zugewiesen werden soll. Mindestens eine Liste ist erforderlich.
tagsarray of TagRefTags, die diesem Kontakt zugewiesen werden sollen (optional)
custom_fieldsarray of FieldValueWerte benutzerdefinierter Felder für diesen Kontakt (optional)

Antworten

CodeBeschreibung
200Kontakt erfolgreich aktualisiert
401Ungültiges oder abgelaufenes Token
404Kontakt nicht gefunden
422Validierungsfehler (E-Mail-Format, Telefonnummer, Typdiskrepanz beim Feldwert)

Beispiel 200

{
  "Result": "Successful operation"
}

DELETE /Contact/{id}

Kontakt löschen

Löscht einen Kontakt dauerhaft aus dem CRM.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathstring (uuid)jaKontakt-UUID

Antworten

CodeBeschreibung
200Kontakt erfolgreich gelöscht
401Ungültiges oder abgelaufenes Token
404Kontakt nicht gefunden

GET /Contact/{id}/Activity

Aktivität eines Kontakts über 90 Tage

Empfangene, geöffnete und angeklickte E-Mails, bevorzugtes E-Mail-Programm und letzte Kampagnen des Kontakts.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathstring (uuid)jaGUID des Kontakts

Antworten

CodeBeschreibung
200Aktivität zurückgegeben
401Ungültiges oder abgelaufenes Token
404Der angeforderte Kontakt existiert nicht

Beispiel 200

{
  "period_days": 90,
  "email_received": 12,
  "email_opened": 7,
  "email_clicked": 2,
  "favorite_email_client": "Gmail",
  "last_campaigns": [
    {
      "id": 5001,
      "name": "Spring Sale 2026",
      "date": "2026-10-01T09:00:00"
    }
  ]
}

PUT /Contact/{id}/Tag/{tagid}

Tag zu Kontakt hinzufügen

Weist einem Kontakt ein Tag zu. Ist das Tag bereits zugewiesen, ist der Vorgang ein No-Op.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathstring (uuid)jaKontakt-UUID
tagidpathinteger (int64)jaTag-ID (aus GET /Tag)

Antworten

CodeBeschreibung
200Tag erfolgreich zugewiesen
401Ungültiges oder abgelaufenes Token
404Kontakt oder Tag nicht gefunden

DELETE /Contact/{id}/Tag/{tagid}

Tag von Kontakt entfernen

Entfernt eine Tag-Zuweisung von einem Kontakt.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathstring (uuid)jaKontakt-UUID
tagidpathinteger (int64)jaTag-ID

Antworten

CodeBeschreibung
200Tag erfolgreich entfernt
401Ungültiges oder abgelaufenes Token
404Kontakt oder Tag nicht gefunden

PUT /Contact/{id}/List/{listid}

Kontakt zu Liste hinzufügen

Fügt einen Kontakt einer bestimmten Liste hinzu. Gibt HTTP 404 zurück, wenn der Kontakt zuvor von dieser Liste abgemeldet wurde.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathstring (uuid)jaKontakt-UUID
listidpathinteger (int64)jaListen-ID (aus GET /List)

Antworten

CodeBeschreibung
200Kontakt erfolgreich zur Liste hinzugefügt
401Ungültiges oder abgelaufenes Token
404Kontakt, Liste nicht gefunden oder Kontakt wurde von dieser Liste abgemeldet

DELETE /Contact/{id}/List/{listid}

Kontakt aus Liste entfernen

Entfernt einen Kontakt aus einer bestimmten Liste. Der Kontakt selbst wird nicht gelöscht.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathstring (uuid)jaKontakt-UUID
listidpathinteger (int64)jaListen-ID

Antworten

CodeBeschreibung
200Kontakt erfolgreich aus Liste entfernt
401Ungültiges oder abgelaufenes Token
404Kontakt oder Liste nicht gefunden

List

Verwalten Sie Kontaktlisten. Listen gruppieren Kontakte für Kampagnen und Segmentierung. Maximal 1.000 Listen pro Konto (gleiche Grenze für die drei Mailpro-APIs und in der App). Maximal 1.000.000 Kontakte pro Liste.

GET /List

Kontaktlisten auflisten

Gibt alle Kontaktlisten des Kontos zurück. Filterung nach Name oder Erstellungsdatum. Alphabetische Sortierung mit sortByName=true. Mit includeTotalContacts=true wird die Gesamtzahl der Kontakte pro Liste mit einbezogen.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
namequerystringFilterung nach Listennamen (Teilübereinstimmung)
dateCreationFromquerystring (date-time)Filterung nach Erstellungsdatum (ab, ISO 8601)
dateCreationToquerystring (date-time)Filterung nach Erstellungsdatum (bis, ISO 8601)
numberOfRecordsqueryintegerEinträge pro Seite — standardmäßig und maximal 5.000
pageNumberqueryinteger1-basierte Seitennummer
sortByNamequerybooleanAuf true setzen, um alphabetisch nach Namen zu sortieren
includeTotalContactsquerybooleanAuf true setzen, um die Anzahl total_contacts in jedem Ergebnis einzubeziehen

Antworten

CodeBeschreibung
200Listen erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id": 101,
    "name": "Newsletter subscribers",
    "total_contacts": 4521,
    "date_creation": "2025-01-15T10:30:00"
  }
]

POST /List

Kontaktliste erstellen

Erstellt eine neue Kontaktliste. Maximal 1.000 Listen pro Konto.

OAuth-Scope : contacts:write

Anfragetext (application/json)

NameTypErforderlichBeschreibung
namestringjaAnzeigename für die Liste

Beispiel

{
  "name": "Spring Campaign 2026"
}

Antworten

CodeBeschreibung
200Liste erfolgreich erstellt
401Ungültiges oder abgelaufenes Token
406Listenlimit (1.000) erreicht

Beispiel 200

{
  "id": 102,
  "name": "Spring Campaign 2026",
  "date_creation": "2026-04-14T12:00:00"
}

GET /List/{id}

Kontaktliste abrufen

Gibt die Details einer bestimmten Kontaktliste zurück.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaListen-ID

Antworten

CodeBeschreibung
200Liste erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Liste nicht gefunden

PUT /List/{id}

Kontaktliste aktualisieren

Benennt eine bestehende Kontaktliste um.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaListen-ID

Anfragetext (application/json)

NameTypErforderlichBeschreibung
namestringjaAnzeigename für die Liste

Beispiel

{
  "name": "Newsletter subscribers — Europe"
}

Antworten

CodeBeschreibung
200Liste erfolgreich aktualisiert
401Ungültiges oder abgelaufenes Token
404Liste nicht gefunden

DELETE /List/{id}

Kontaktliste löschen

Löscht eine Kontaktliste dauerhaft. Die Kontakte selbst werden nicht gelöscht — nur ihre Zugehörigkeit zu dieser Liste wird entfernt. Listen, die von aktiven Automatisierungs-Workflows verwendet werden, können nicht gelöscht werden.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaListen-ID

Antworten

CodeBeschreibung
200Liste erfolgreich gelöscht
401Ungültiges oder abgelaufenes Token
404Liste nicht gefunden
406Liste wird von einem aktiven Automatisierungs-Workflow verwendet

GET /List/{id}/Contact

Kontakte in einer Liste auflisten

Gibt die Kontakte zurück, die einer bestimmten Liste angehören. Filterung nach E-Mail oder Hinzufügedatum. Tags und Listenzugehörigkeiten mit den entsprechenden Flags einbeziehen.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaListen-ID
emailquerystringFilterung nach E-Mail (Teilübereinstimmung)
numberOfRecordsqueryintegerEinträge pro Seite — standardmäßig und maximal 5.000
pageNumberqueryinteger
sortByEmailquerybooleanAlphabetische Sortierung nach E-Mail
includeTagsquerybooleanTag-Zuweisungen in die Ergebnisse einbeziehen
includeListsquerybooleanListenzugehörigkeiten in die Ergebnisse einbeziehen

Antworten

CodeBeschreibung
200Kontakte erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Liste nicht gefunden oder keine Kontakte entsprechen den Kriterien

GET /List/{listId}/Unsubscribers

Abgemeldete auflisten

Gibt die Kontakte zurück, die sich von einer bestimmten Liste abgemeldet haben.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
listIdpathinteger (int64)jaListen-ID

Antworten

CodeBeschreibung
200Abgemeldete erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Liste nicht gefunden

Tag

Verwalten Sie Tags zur Kennzeichnung und Segmentierung von Kontakten. Tags sind flache Labels (z. B. „VIP“, „Churned“, „B2B“). Maximal 1.000 Tags pro Konto.

GET /Tag

Tags auflisten

Gibt alle Tags des Kontos zurück.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
namequerystringFilterung nach Name (Teilübereinstimmung)
numberOfRecordsqueryinteger
pageNumberqueryinteger
sortByNamequeryboolean

Antworten

CodeBeschreibung
200Tags erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id": 5,
    "name": "VIP customers"
  },
  {
    "id": 6,
    "name": "Newsletter openers"
  }
]

POST /Tag

Tag erstellen

Erstellt ein neues Tag. Maximal 1.000 Tags pro Konto.

OAuth-Scope : contacts:write

Anfragetext (application/json)

NameTypErforderlichBeschreibung
namestringjaAnzeigename für das Tag

Beispiel

{
  "name": "VIP customers"
}

Antworten

CodeBeschreibung
200Tag erfolgreich erstellt
401Ungültiges oder abgelaufenes Token
406Tag-Limit (1.000) erreicht

GET /Tag/{id}

Tag abrufen

Gibt ein bestimmtes Tag anhand seiner ID zurück.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaTag-ID

Antworten

CodeBeschreibung
200Tag erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Tag nicht gefunden

PUT /Tag/{id}

Tag aktualisieren

Benennt ein bestehendes Tag um.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Anfragetext (application/json)

NameTypErforderlichBeschreibung
namestringjaAnzeigename für das Tag

Beispiel

{
  "name": "VIP customers — updated"
}

Antworten

CodeBeschreibung
200Tag erfolgreich aktualisiert
401Ungültiges oder abgelaufenes Token
404Tag nicht gefunden

DELETE /Tag/{id}

Tag löschen

Löscht ein Tag dauerhaft. Das Tag wird von allen Kontakten entfernt. Tags, die von aktiven Automatisierungs-Workflows verwendet werden, können nicht gelöscht werden.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Tag erfolgreich gelöscht
401Ungültiges oder abgelaufenes Token
404Tag nicht gefunden
406Tag wird von einem aktiven Automatisierungs-Workflow verwendet

GET /Tag/{id}/Contact

Kontakte mit einem Tag auflisten

Gibt die Kontakte zurück, denen ein bestimmtes Tag zugewiesen wurde.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaTag-ID
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Kontakte erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Tag nicht gefunden

Field

Verwalten Sie benutzerdefinierte Kontaktfelder. Mit Feldern können Sie zusätzliche Daten zu jedem Kontakt speichern (z. B. Vorname, Stadt, Treuestufe). Maximal 50 Felder pro Konto. Feldtypen: text, number, date.

GET /Field

Benutzerdefinierte Felder auflisten

Gibt alle für das Konto definierten benutzerdefinierten Kontaktfelder zurück. Verwenden Sie die zurückgegebenen id-Werte beim Erstellen oder Aktualisieren von Kontakten.

Parameter

NameOrtTypErforderlichBeschreibung
namequerystringFilterung nach Feldnamen
idFieldTypequeryintegerFilterung nach Feldtyp-ID
numberOfRecordsqueryinteger
pageNumberqueryinteger
sortByNamequeryboolean

Antworten

CodeBeschreibung
200Benutzerdefinierte Felder erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id": 1,
    "name": "first_name",
    "personalisation_key": "first_name",
    "field_type": "text"
  },
  {
    "id": 2,
    "name": "last_name",
    "personalisation_key": "last_name",
    "field_type": "text"
  }
]

POST /Field

Benutzerdefiniertes Feld erstellen

Erstellt ein neues benutzerdefiniertes Kontaktfeld. Maximal 50 Felder pro Konto. Verwenden Sie die zurückgegebene id, um Kontakten Werte zuzuweisen.

Anfragetext (application/json)

NameTypErforderlichBeschreibung
namestringjaAnzeigename des Feldes
id_field_typeintegerjaID des Feldtyps (verfügbare Typen über GET /Field/Types): - 1 = Text - 2 = Ganzzahl - 3 = Datum und Uhrzeit - 4 = Ja / Nein - 12 = Dezimalzahl
personalize_keystringjaVariablenschlüssel der Vorlage, um das Feld in eine Nachricht einzufügen
sortintegerAnzeigereihenfolge (0 bis 255). Pflicht beim Ändern eines Feldes (PUT /Field/{id}).

Beispiel

{
  "name": "First name",
  "id_field_type": 1,
  "personalize_key": "first_name"
}

Antworten

CodeBeschreibung
200Feld erfolgreich erstellt
401Ungültiges oder abgelaufenes Token
406Feldlimit (50) erreicht

GET /Field/Types

Feldtypen auflisten

Gibt die verfügbaren Feldtyp-Kennungen zurück, die beim Erstellen eines benutzerdefinierten Felds zu verwenden sind. Gängige Typen: 1 = Text, 2 = Zahl, 3 = Datum.

Antworten

CodeBeschreibung
200Feldtypen erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Field/{id}

Benutzerdefiniertes Feld abrufen

Gibt die Definition und Metadaten eines bestimmten benutzerdefinierten Felds zurück.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaFeld-ID

Antworten

CodeBeschreibung
200Feld erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Feld nicht gefunden

PUT /Field/{id}

Benutzerdefiniertes Feld aktualisieren

Aktualisiert den Namen oder den Personalisierungsschlüssel eines benutzerdefinierten Felds.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Anfragetext (application/json)

NameTypErforderlichBeschreibung
namestringjaAnzeigename des Feldes
id_field_typeintegerjaID des Feldtyps (verfügbare Typen über GET /Field/Types): - 1 = Text - 2 = Ganzzahl - 3 = Datum und Uhrzeit - 4 = Ja / Nein - 12 = Dezimalzahl
personalize_keystringjaVariablenschlüssel der Vorlage, um das Feld in eine Nachricht einzufügen
sortintegerAnzeigereihenfolge (0 bis 255). Pflicht beim Ändern eines Feldes (PUT /Field/{id}).

Antworten

CodeBeschreibung
200Feld erfolgreich aktualisiert
401Ungültiges oder abgelaufenes Token
404Feld nicht gefunden

DELETE /Field/{id}

Benutzerdefiniertes Feld löschen

Löscht ein benutzerdefiniertes Feld dauerhaft und entfernt dessen Wert aus allen Kontakten. Diese Aktion kann nicht rückgängig gemacht werden.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Feld erfolgreich gelöscht
401Ungültiges oder abgelaufenes Token
404Feld nicht gefunden

Campaign

Zeigen Sie Kampagnenstatistiken an und verwalten Sie geplante Kampagnen. Kampagnen können bis 5 Minuten vor dem geplanten Sendezeitpunkt bearbeitet oder gelöscht werden.

GET /Campaign

Kampagnen auflisten

Gibt eine paginierte Liste der E-Mail-Kampagnen des Kontos zurück.

Parameter

NameOrtTypErforderlichBeschreibung
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Kampagnen erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id": 8001,
    "title": "Spring Newsletter April 2026",
    "date_planned": "2026-04-20T09:00:01",
    "count_open": 1823,
    "count_sent": 4521,
    "count_click": 342,
    "count_badmail": 12,
    "count_unsubscription": 8,
    "count_clicking_users": 289,
    "count_complaints": 1,
    "spam_trap": 0,
    "deliverability_score": 98
  }
]

GET /Campaign/{id}

Kampagne abrufen

Gibt die Konfiguration und die Statistikzusammenfassung einer bestimmten Kampagne zurück.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Kampagne erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Kampagne nicht gefunden

PUT /Campaign/{id}

Kampagne aktualisieren

Aktualisiert den Titel oder das Sendedatum einer geplanten Kampagne. Kampagnen können nur bis 5 Minuten vor dem geplanten Sendezeitpunkt geändert werden.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Anfragetext (application/json)

NameTypErforderlichBeschreibung
campaign_titlestringAnzeigename für die Kampagne
date_plannedstring (date-time)Geplante Sendezeit (ISO 8601). Weglassen, um sofort zu senden.

Antworten

CodeBeschreibung
200Kampagne erfolgreich aktualisiert
401Ungültiges oder abgelaufenes Token
404Kampagne nicht gefunden

DELETE /Campaign/{id}

Kampagne löschen

Storniert und löscht eine Kampagne anhand ihrer Kennung dauerhaft.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Kampagne erfolgreich gelöscht
401Ungültiges oder abgelaufenes Token
404Kampagne nicht gefunden

GET /Campaign/Scheduled

Meine geplanten Kampagnen auflisten

Gibt Kampagnen mit zukünftigem date_planned zurück, die noch nicht versendet wurden. Sortiert nach date_planned in aufsteigender Reihenfolge.

Parameter

NameOrtTypErforderlichBeschreibung
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Liste der geplanten Kampagnen
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id": 5001,
    "id_client": 12345,
    "subject": "Spring Sale 2026",
    "date_planned": "2026-05-01T09:00:00",
    "title": "Spring Sale",
    "id_campaign": 7001,
    "id_list": 101,
    "id_segment": null,
    "number_email": 1250
  }
]

POST /Campaign/{id}/Cancel

Geplante Kampagne stornieren

Storniert eine zukünftig geplante Kampagne. Gibt 409 Conflict zurück, wenn die Kampagne bereits versendet wurde oder nicht existiert.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Kampagne storniert
401Ungültiges oder abgelaufenes Token
409Bereits versendet oder nicht gefunden

Beispiel 200

{
  "result": "ok",
  "cancelled": 5001
}

PATCH /Campaign/{id}/Reschedule

Geplante Kampagne neu planen

Aktualisiert das geplante Sendedatum einer geplanten Kampagne. Das neue Datum muss in der Zukunft und innerhalb von 90 Tagen liegen.

Name des Body-Felds: Die API akzeptiert date_planned (snake_case, primär) sowie die Legacy-Aliasse PlanDate und scheduled_time. Geben Sie einen beliebigen davon an — der erste nicht-null-Wert wird verwendet.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Anfragetext (application/json)

NameTypErforderlichBeschreibung
date_plannedstring (date-time)Primärer Feldname.
PlanDatestring (date-time)Aus Gründen der Abwärtskompatibilität akzeptierter Legacy-Alias.
scheduled_timestring (date-time)Aus Gründen der Abwärtskompatibilität akzeptierter Legacy-Alias.

Antworten

CodeBeschreibung
200Kampagne neu geplant
400Fehlendes Datum — geben Sie eines von date_planned / PlanDate / scheduled_time an
401Ungültiges oder abgelaufenes Token
409Bereits versendet

Beispiel 200

{
  "result": "ok",
  "id": 5001,
  "date_planned": "2026-12-31T14:30:00"
}

GET /Campaign/{id}/ByHour

Statistik nach Stunde

Gibt die stündliche Aufschlüsselung der Öffnungen und Klicks für die Kampagne zurück.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Stündliche Statistik erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Campaign/{id}/ByDay

Statistik nach Tag

Gibt die tägliche Aufschlüsselung der Öffnungen und Klicks für die Kampagne zurück.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Tägliche Statistik erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Campaign/{id}/Openings

E-Mail-Öffnungen auflisten

Gibt eine paginierte Liste der Kontakte zurück, die die Kampagnen-E-Mail geöffnet haben.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja
emailquerystringFilterung nach Empfänger-E-Mail
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Öffnungsliste erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Campaign/{id}/Clicks

Link-Klicks auflisten

Gibt eine paginierte Liste der Kontakte zurück, die in der Kampagne auf einen Link geklickt haben.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja
emailquerystring
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Klickliste erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Campaign/{id}/HardBounces

Hard Bounces auflisten

Gibt die E-Mail-Adressen zurück, bei denen während dieser Kampagne ein Hard Bounce aufgetreten ist.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja
emailquerystring
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Hard-Bounce-Liste erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Verfolgte Links auflisten

Gibt die Klick-Leistungsdaten für jeden in der Kampagne verfolgten Link zurück.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja
linkquerystringFilterung nach Link-URL (Teilübereinstimmung)
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Link-Statistik erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Campaign/{id}/OS

Statistik nach Betriebssystem / Gerät

Gibt die Aufschlüsselung der Öffnungen und Klicks nach Betriebssystem und Gerätetyp zurück.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200BS-Statistik erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Campaign/{id}/EmailClients

Statistik nach E-Mail-Client

Gibt die Aufschlüsselung der Öffnungen nach E-Mail-Client zurück (Gmail, Outlook, Apple Mail…).

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200E-Mail-Client-Statistik erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Campaign/{id}/Countries

Statistik nach Land

Gibt die geografische Verteilung der Öffnungen und Klicks zurück.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Länderstatistik erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Send

Versenden Sie E-Mail-Massenkampagnen (an Kontaktlisten) und einzelne transaktionale E-Mails. Kampagnen können geplant oder sofort versendet werden.

POST /Send/Mail

Transaktionale E-Mail senden

Sendet eine einmalige transaktionale E-Mail an einen einzelnen Empfänger.

Empfänger: Geben Sie email (inline angegebene Adresse) ODER id_contact (CRM-Kontakt) an — nicht beides. Die Verwendung von id_contact ermöglicht die automatische Personalisierung mit den Werten der benutzerdefinierten Felder des Kontakts.

Inhalt: Geben Sie body_html (inline angegebenes HTML) ODER id_message (gespeicherte Vorlage) an — nicht beides. Wenn beide angegeben werden, hat id_message Vorrang.

Erforderlich: id_sender_email, subject und eines von (email oder id_contact) sowie eines von (body_html oder id_message).

Anfragetext (application/json)

NameTypErforderlichBeschreibung
id_sender_emailintegerID der Absender-E-Mail-Adresse (aus GET /SenderEmail). Erforderlich.
emailstringE-Mail-Adresse des Empfängers (inline). Geben Sie dies ODER id_contact an. Wenn beide angegeben sind, hat id_contact Vorrang. Der lokale Teil (vor dem @) akzeptiert Buchstaben, Ziffern und . _ - + — einschließlich RFC-5322-Sub-Addressing (user+tag@domain, z. B. Gmail, Fastmail, Proton). Andere von RFC 5322 erlaubte Sonderzeichen (z. B. ! # $ % & ' * / = ? ^ { | } ~) sowie lokale Teile in Anführungszeichen werden nicht akzeptiert.
id_contactstring (uuid)ID des CRM-Empfängerkontakts. Geben Sie diese ODER email an. Die Verwendung von id_contact ermöglicht die Personalisierung mit den Werten der benutzerdefinierten Felder des Kontakts.
subjectstringBetreffzeile der E-Mail (maximal 255 Zeichen). Erforderlich.
body_htmlstringInline-HTML-Inhalt. Geben Sie diesen ODER id_message an. Wenn beide angegeben sind, hat id_message Vorrang.
id_messageintegerID einer gespeicherten Nachrichtenvorlage (aus GET /Message). Geben Sie diese ODER body_html an.
reply_tostringAntwortadresse (standardmäßig die Absenderadresse)
fieldsarray of FieldValueBenutzerdefinierte Personalisierungsfelder (nur in Verbindung mit inline angegebener email verwendet, nicht mit id_contact)
date_plannedstring (date-time)Planen Sie den Versand für einen späteren Zeitpunkt. Weglassen, um sofort zu senden.
attachmentsarray of EmailAttachmentOptionale Dateianhänge (max. 5). Jedes Element ist ein Objekt mit filename und Base64-kodiertem content. Grenzen: 10 MB pro Datei und 15 MB insgesamt, gemessen nach der Base64-Dekodierung. Zulässige Typen: PDF, Word, Excel, PowerPoint, Bilder (JPG, PNG, GIF, WebP), ZIP, CSV, TXT — ausführbare Dateien und Skripte werden abgelehnt. Abrechnung: der Versand behält sein übliches 1 Guthaben, plus 1 Guthaben pro 512 KB Anhänge über die ersten 512 KB hinaus (Anhänge ≤ 512 KB kosten nichts extra).
keep_in_my_filesbooleanfalse (Standard): Die Anhänge werden nur für diesen Versand verwendet — sie werden außerhalb Ihres Kontos gespeichert, zählen nicht zu Ihrem Speicherkontingent und werden nach 35 Tagen automatisch gelöscht. true: Die Anhänge werden zusätzlich in den Dateien Ihres Kontos gespeichert (Ordner Secure/Files/Sending/api) und zählen zu Ihrem Speicherkontingent.

Beispiel

{
  "id_sender_email": 201,
  "email": "[email protected]",
  "subject": "Your order #12345 has shipped",
  "body_html": "<p>Hello {{first_name}}, your order is on its way!</p>",
  "reply_to": "[email protected]",
  "fields": [
    {
      "id": 1,
      "value": "Alice"
    }
  ],
  "attachments": [
    {
      "filename": "invoice.pdf",
      "content": "JVBERi0xLjQKJVBERi0xLjQK..."
    }
  ]
}

Antworten

CodeBeschreibung
200E-Mail erfolgreich gesendet oder geplant
400Ungültiges E-Mail-Format oder fehlendes Pflichtfeld
401Ungültiges oder abgelaufenes Token
404Absender, Nachricht oder Kontakt nicht gefunden; oder Empfänger abgemeldet
422Validierungsfehler (Betreff zu lang, Body und Nachricht beide leer usw.)

Beispiel 200

{
  "message": "Successful operation",
  "id_single_send": 8001
}

Beispiel 404

{
  "Message": "Not enough credit available"
}

GET /Send/{id}/Status

Zustellstatus einer transaktionalen E-Mail abrufen

Gibt den aktuellen Zustellstatus einer transaktionalen E-Mail zurück, die über POST /Send/Mail gesendet wurde. Übergeben Sie die id_single_send, die dieser Aufruf zurückgegeben hat.

Mögliche Werte: delivered (vom Empfängerserver angenommen, siehe diag_code), bounced (abgelehnt — bounce_type: hard ungültige Adresse oder endgültige Ablehnung, soft Ablehnung nach erneuten Versuchen), sent (an den Mailserver übergeben, noch keine Antwort), scheduled (noch nicht gesendet, date_planned in der Zukunft) und queued (wartet auf den Versand). delivered und bounced sind endgültig: Beenden Sie die Abfragen. Jede E-Mail hat spätestens 48 Stunden nach dem Versand einen endgültigen Status; fragen Sie höchstens alle 15 Minuten ab (jeder Aufruf zählt für Ihr API-Kontingent) oder nutzen Sie die Webhooks email.delivered / email.bounced. Nur der Kunde, der die E-Mail gesendet hat, kann ihren Status lesen — jede andere ID liefert 404.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaDie von POST /Send/Mail zurückgegebene id_single_send.

Antworten

CodeBeschreibung
200Aktueller Zustellstatus
401Ungültiges oder abgelaufenes Token
404Kein transaktionaler Versand mit dieser ID für diesen Kunden gefunden

Beispiel 200

{
  "id_single_send": 8001,
  "email": "[email protected]",
  "status": "delivered",
  "date_planned": "2026-04-15T14:30:00",
  "status_date": "2026-04-15T14:30:07",
  "diag_code": "2.0.0 (success)",
  "bounce_type": null
}

POST /Send/Campaign

E-Mail-Kampagne senden

Sendet eine E-Mail-Massenkampagne an eine oder mehrere Kontaktlisten.

Erforderlich:

Segment: Optional können Empfänger nach einem gespeicherten Segment gefiltert werden (id_segment). Das Segment filtert die Kontakte innerhalb der angegebenen Listen.

Planung: Setzen Sie date_planned auf ein zukünftiges ISO-8601-Datum/-Uhrzeit. Kampagnen können bis 5 Minuten vor dem geplanten Zeitpunkt bearbeitet oder storniert werden.

Anfragetext (application/json)

NameTypErforderlichBeschreibung
id_messageintegerjaID der zu verwendenden Nachrichtenvorlage (aus GET /Message)
id_sender_emailintegerjaID der Absenderadresse (aus GET /SenderEmail)
id_email_reply_tointegerID der Antwort-Absenderadresse (aus GET /SenderEmail). Muss eine der Absenderadressen Ihres Kontos sein, andernfalls wird die Anfrage abgelehnt. Standard: id_sender_email.
listsarray of ListRefjaZiel-Kontaktlisten (mindestens eine erforderlich)
id_segmentintegerEmpfänger nach einem gespeicherten Segment filtern (optional)
campaign_titlestringjaAnzeigename für diese Kampagne (maximal 150 Zeichen)
date_plannedstring (date-time)Geplante Sendezeit (ISO 8601). Weglassen, um sofort zu senden.
id_automationintegerVerknüpft diesen Versand mit einem Automatisierungs-Workflow (optional)

Beispiel

{
  "id_message": 501,
  "id_sender_email": 201,
  "lists": [
    {
      "id": 101
    }
  ],
  "campaign_title": "Spring Newsletter April 2026",
  "date_planned": "2026-04-20T09:00:00"
}

Antworten

CodeBeschreibung
200Kampagne erfolgreich geplant oder gesendet
401Ungültiges oder abgelaufenes Token
402Unzureichendes Guthaben
404Nachricht, Absender, Liste oder Segment nicht gefunden; oder unzureichendes Guthaben
422Kampagnentitel leer oder zu lang (maximal 150 Zeichen)

Beispiel 200

{
  "Message": "Successful operation. Campaigns can be edited or deleted until 5 minutes prior to send.",
  "IdCampaign": 8001
}

GET /Send

Geplante Sendungen auflisten

Gibt die Liste der E-Mail-Kampagnen zurück, die auf ihren Versand warten (geplant, noch nicht verarbeitet).

Parameter

NameOrtTypErforderlichBeschreibung
subjectMessagequerystringFilterung nach Betreff (Teilübereinstimmung)
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Wartende Sendungen erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

DELETE /Send/{id}

Geplante Sendung stornieren

Storniert und löscht eine geplante E-Mail-Sendung, die noch nicht verarbeitet wurde. Sendungen, die gerade verarbeitet werden, können nicht storniert werden.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaSendungs-ID (aus GET /Send)

Antworten

CodeBeschreibung
200Geplante Sendung erfolgreich storniert
401Ungültiges oder abgelaufenes Token
404Geplante Sendung nicht gefunden

GET /Send/Mail/Scheduled

Geplante Einzel-E-Mails auflisten

Gibt die mit POST /Send/Mail und einem zukünftigen Datum gesendeten Einzel-E-Mails zurück, die noch nicht versendet wurden. Kampagnen werden von GET /Campaign/Scheduled aufgelistet.

OAuth-Scope : email:send

Antworten

CodeBeschreibung
200Geplante E-Mails zurückgegeben
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id_single_send": 880123,
    "email": "[email protected]",
    "subject": "Your invoice",
    "date_planned": "2026-12-01T09:00:00"
  }
]

POST /Send/Mail/{id}/Cancel

Geplante Einzel-E-Mail stornieren

Storniert die E-Mail, solange sie noch nicht versendet wurde.

OAuth-Scope : email:send

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaVon POST /Send/Mail zurückgegebene id_single_send

Antworten

CodeBeschreibung
200E-Mail storniert
401Ungültiges oder abgelaufenes Token
409Versand nicht gefunden oder bereits erfolgt

Beispiel 200

{
  "result": "ok",
  "cancelled": 880123
}

PATCH /Send/Mail/{id}/Reschedule

Geplante Einzel-E-Mail neu planen

Ändert das Versanddatum. Das neue Datum muss in der Zukunft und innerhalb von 90 Tagen liegen. POST wird ebenfalls akzeptiert.

OAuth-Scope : email:send

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaVon POST /Send/Mail zurückgegebene id_single_send

Anfragetext (application/json)

NameTypErforderlichBeschreibung
date_plannedstring (date-time)jaNeues Versanddatum (ISO 8601)

Antworten

CodeBeschreibung
200E-Mail neu geplant
400Datum fehlt
401Ungültiges oder abgelaufenes Token
409Versand nicht gefunden, bereits erfolgt oder Datum außerhalb des zulässigen Bereichs

Beispiel 200

{
  "result": "ok",
  "id": 880123,
  "date_planned": "2026-12-15T09:00:00"
}

Sender Addresses

Verwalten Sie validierte Absender-E-Mail-Adressen. Nur verifizierte Adressen können als From verwendet werden.

GET /SenderEmail

Absenderadressen auflisten

Gibt die für das Konto konfigurierten validierten Absender-E-Mail-Adressen zurück.

Parameter

NameOrtTypErforderlichBeschreibung
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Absenderadressen erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id": 201,
    "email": "[email protected]",
    "sender_name": "Your Company Newsletter",
    "is_validated": true
  }
]

POST /SenderEmail

Absenderadresse hinzufügen

Fügt die Adresse mit denselben Prüfungen wie in der Anwendung hinzu und sendet ihr eine Bestätigungs-E-Mail. Sie kann verwendet werden, sobald der Link in dieser E-Mail angeklickt wurde. Ein Konto kann bis zu 25 Absender haben, bestätigt oder ausstehend.

OAuth-Scope : email:templates:write

Anfragetext (application/json)

NameTypErforderlichBeschreibung
emailstringjaAbsenderadresse
sender_namestringjaDen Empfängern angezeigter Name

Antworten

CodeBeschreibung
200Adresse hinzugefügt. domain_has_mx ist false, wenn die Domain keinen MX-Eintrag hat.
400email oder sender_name fehlt
401Ungültiges oder abgelaufenes Token
422Adresse abgelehnt: ungültig, bereits unter den Absendern des Kontos, öffentliche E-Mail-Domain, unzulässiger Name oder Limit von 25 erreicht. Die Meldung nennt den Grund.
503Vorübergehend nicht verfügbar, bitte versuchen Sie es erneut

Beispiel 200

{
  "result": "ok",
  "confirmation_sent": true,
  "domain_has_mx": true
}

POST /SenderEmail/{id}/ResendValidation

Bestätigungs-E-Mail erneut senden

Für eine Adresse, die noch auf die Bestätigung wartet.

OAuth-Scope : email:templates:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathintegerjaid_sender_email aus GET /SenderEmail

Antworten

CodeBeschreibung
200E-Mail erneut gesendet
401Ungültiges oder abgelaufenes Token
404Absender nicht gefunden
409Dieser Absender ist bereits bestätigt
503Vorübergehend nicht verfügbar, bitte versuchen Sie es erneut

Beispiel 200

{
  "result": "ok",
  "confirmation_sent": true
}

GET /SenderEmail/{id}/Authentication

Domain eines Absenders prüfen (SPF, DKIM, DMARC, MX)

Prüft die Domain live im DNS und gibt die zu veröffentlichenden Einträge zurück. Nur Lesezugriff. DKIM wird in der Anwendung aktiviert: dkim_settings_url öffnet die richtige Seite.

OAuth-Scope : email:templates:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathintegerjaid_sender_email aus GET /SenderEmail

Antworten

CodeBeschreibung
200Status der Domain. spf.recommended_record basiert auf Ihrem aktuellen Eintrag: Veröffentlichen Sie ihn nur, wenn spf.change_needed true ist.
401Ungültiges oder abgelaufenes Token
404Absender nicht gefunden
503Vorübergehend nicht verfügbar, bitte versuchen Sie es erneut

Beispiel 200

{
  "domain": "example.com",
  "spf": {
    "valid": true,
    "record": "v=spf1 include:spf.mailpro.com -all",
    "recommended_record": "v=spf1 include:spf.mailpro.com -all",
    "change_needed": false
  },
  "dkim": {
    "valid": true,
    "records": [
      {
        "host": "key._domainkey.example.com",
        "value": "v=DKIM1;k=rsa;p=MIIBIjANBgkq...",
        "validated": true
      }
    ]
  },
  "dmarc": {
    "valid": true,
    "record": "v=DMARC1; p=quarantine"
  },
  "mx": {
    "valid": true,
    "record": "mail.example.com"
  },
  "dkim_settings_url": "https://app.mailpro.com/dkim/list?d=example.com"
}

History

Durchsuchen Sie das Protokoll vergangener E-Mail- und SMS-Versendungen.

GET /History/Email

Verlauf der E-Mail-Versendungen auflisten

Gibt das Protokoll vergangener E-Mail-Versendungen des Kontos zurück.

Parameter

NameOrtTypErforderlichBeschreibung
subjectMessagequerystringFilterung nach Betreff (Teilübereinstimmung)
idCampaignqueryintegerFilterung nach Kampagnen-ID
includeBodyHTMLquerybooleanVollständigen HTML-Body in die Antwort einbeziehen (langsamer)
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200E-Mail-Verlauf erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /History/SMS

Verlauf der SMS-Versendungen auflisten

Gibt das Protokoll vergangener SMS-Versendungen des Kontos zurück.

Parameter

NameOrtTypErforderlichBeschreibung
dateSendquerystring (date-time)Filterung ab diesem Datum (ISO 8601)
dateSendEndquerystring (date-time)Filterung bis zu diesem Datum (ISO 8601)
phoneNumberquerystringFilterung nach Telefonnummer des Empfängers (Teilübereinstimmung)
typequeryintegerFilter für SMS-Typ
statusCodequeryintegerFilter für DLR-Statuscode
sortByStatusqueryboolean
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200SMS-Verlauf erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Segment

Verwalten Sie dynamische Segmente — gespeicherte Filterregeln, die Kontakte automatisch auf Basis von Feldwerten, Verhalten oder Listenzugehörigkeit auswählen.

GET /Segment

Segmente auflisten

Gibt alle für das Konto gespeicherten dynamischen Segmente zurück.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Segmente erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /Segment/{id}/Contact

Kontakte eines Segments auflisten

Mit id_list werden nur die Kontakte dieser Liste im Segment zurückgegeben: diejenigen, die eine Kampagne Liste + Segment erreichen würde. Die Gesamtzahl steht im Header X-Total-Count.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaID des Segments
id_listqueryinteger (int64)Auf diese Liste beschränken (optional)
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Kontakte zurückgegeben
401Ungültiges oder abgelaufenes Token
404Segment oder Liste nicht gefunden

GET /Segment/{id}/Count

Kontakte eines Segments zählen

Nur die Anzahl, um die Größe eines Versands im Voraus zu kennen. Mit id_list werden nur die Kontakte dieser Liste im Segment gezählt.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaID des Segments
id_listqueryinteger (int64)Auf diese Liste beschränken (optional)

Antworten

CodeBeschreibung
200Anzahl der Kontakte
401Ungültiges oder abgelaufenes Token
404Segment oder Liste nicht gefunden

Beispiel 200

{
  "total": 1250
}

GET /Segment/{id}/contact/{contactId}/check

Prüfen, ob ein Kontakt einem Segment entspricht

Prüft, ob ein bestimmter Kontakt (per GUID) aktuell den Regeln eines bestimmten Segments entspricht. Nützlich, um Automatisierungslogik bei Bedarf auszulösen.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaSegment-ID
contactIdpathstring (uuid)jaKontakt-GUID

Antworten

CodeBeschreibung
200Gibt das Übereinstimmungsergebnis zurück
401Ungültiges oder abgelaufenes Token
404Segment oder Kontakt nicht gefunden

SMS

Senden Sie SMS-Nachrichten an einzelne Kontakte oder an ganze Kontaktlisten. Verwendet das Feld phone_number jedes Kontakts.

POST /Sms/SingleSMS

Einzel-SMS senden

Sendet eine einzelne SMS direkt an eine Telefonnummer. Verwenden Sie dies für transaktionale Nachrichten (OTPs, Bestellbestätigungen, Benachrichtigungen). Die Telefonnummer akzeptiert +41…, 0041… oder 41… mit oder ohne Trennzeichen — siehe Telefonnummernformat in der API-Beschreibung für akzeptierte / abgelehnte Eingaben.

Anfragetext (application/json)

NameTypErforderlichBeschreibung
phone_numberstringjaTelefonnummer des Empfängers — akzeptiert +41…, 0041… oder 41… mit oder ohne Trennzeichen. Siehe Telefonnummernformat in der API-Beschreibung.
messagestringjaSMS-Nachrichtentext (maximal 160 Zeichen für Standardkodierung)
date_plannedstring (date-time)Planen Sie den Versand. Weglassen, um sofort zu senden.

Beispiel

{
  "phone_number": "+41791234567",
  "message": "Your verification code is 9473. Valid for 10 minutes."
}

Antworten

CodeBeschreibung
200SMS erfolgreich gesendet oder geplant
401Ungültiges oder abgelaufenes Token
422Ungültiges Telefonnummernformat

POST /Sms/Campaign

SMS-Kampagne senden

Sendet eine SMS-Nachricht an das Feld phone_number aller Kontakte in einer oder mehreren Listen. Kontakte ohne Telefonnummer werden übersprungen.

Anfragetext (application/json)

NameTypErforderlichBeschreibung
listsarray of ListRefjaZiel-Kontaktlisten (verwendet das Feld phone_number jedes Kontakts)
messagestringjaSMS-Nachrichtentext
date_plannedstring (date-time)Planen Sie den Versand. Weglassen, um sofort zu senden.

Beispiel

{
  "lists": [
    {
      "id": 101
    }
  ],
  "message": "Flash sale today — 20% off. Shop at mailpro.com",
  "date_planned": "2026-04-20T10:00:00"
}

Antworten

CodeBeschreibung
200SMS-Kampagne erfolgreich gesendet oder geplant
401Ungültiges oder abgelaufenes Token

GET /Sms

SMS-Verlauf auflisten

Gibt das Protokoll der SMS-Versendungen (sowohl Einzel- als auch Kampagnen-SMS) des Kontos zurück.

Parameter

NameOrtTypErforderlichBeschreibung
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200SMS-Verlauf erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

DELETE /Sms/{id}

Geplante SMS stornieren

Storniert eine ausstehende geplante SMS-Sendung.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaID der SMS-Sendung

Antworten

CodeBeschreibung
200Geplante SMS erfolgreich storniert
401Ungültiges oder abgelaufenes Token
404SMS-Sendung nicht gefunden

GET /Sms/Scheduled

Geplante SMS-Sendungen auflisten

Gibt SMS-Sendungen mit zukünftigem date_planned (noch nicht versendet) zurück, aufsteigend nach Datum sortiert.

Parameter

NameOrtTypErforderlichBeschreibung
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Geplante SMS-Sendungen erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

POST /Sms/{id}/Cancel

Geplante SMS stornieren

Storniert eine geplante SMS-Sendung nur, wenn diese noch nicht versendet wurde.

Parameter

NameOrtTypErforderlichBeschreibung
idpathintegerjaID der SMS-Sendung

Antworten

CodeBeschreibung
200Geplante SMS erfolgreich storniert
401Ungültiges oder abgelaufenes Token
409SMS-Sendung nicht gefunden, gehört nicht zum Client oder bereits versendet

PATCH /Sms/{id}/Reschedule

Geplante SMS neu planen

Aktualisiert das geplante Sendedatum einer geplanten SMS. Das neue Datum muss in der Zukunft und innerhalb von 90 Tagen liegen. Schlägt fehl, wenn die SMS bereits versendet wurde.

Name des Body-Felds: Die API akzeptiert date_planned (snake_case, primär) sowie die Legacy-Aliasse PlanDate und scheduled_time. Geben Sie einen beliebigen davon an.

Parameter

NameOrtTypErforderlichBeschreibung
idpathintegerjaID der SMS-Sendung

Anfragetext (application/json)

NameTypErforderlichBeschreibung
date_plannedstring (date-time)Primärer Feldname.
PlanDatestring (date-time)Aus Gründen der Abwärtskompatibilität akzeptierter Legacy-Alias.
scheduled_timestring (date-time)Aus Gründen der Abwärtskompatibilität akzeptierter Legacy-Alias.

Antworten

CodeBeschreibung
200Geplante SMS erfolgreich neu geplant
400Fehlendes Datum — geben Sie eines von date_planned / PlanDate / scheduled_time an
401Ungültiges oder abgelaufenes Token
409Neuplanung fehlgeschlagen (nicht gefunden, bereits versendet oder Datum außerhalb des Bereichs)

Folders

Organisieren Sie Nachrichtenvorlagen in Ordnern.

GET /FolderList

Listenordner auflisten

Gibt die zur Organisation von Kontaktlisten verwendeten Ordner zurück.

Parameter

NameOrtTypErforderlichBeschreibung
namequerystringFilterung nach Ordnernamen (Teilübereinstimmung)
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Listenordner erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

GET /FolderList/{id}

Einzelnen Listenordner abrufen

Gibt die Details eines Listenordners anhand seiner ID zurück.

Parameter

NameOrtTypErforderlichBeschreibung
idpathintegerjaOrdner-ID

Antworten

CodeBeschreibung
200Ordner erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token
404Ordner nicht gefunden

GET /FolderMessage

Nachrichtenordner auflisten

Gibt die zur Organisation von E-Mail-Nachrichtenvorlagen verwendeten Ordner zurück.

Parameter

NameOrtTypErforderlichBeschreibung
namequerystringFilterung nach Ordnernamen
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Nachrichtenordner erfolgreich zurückgegeben
401Ungültiges oder abgelaufenes Token

Import

Laden Sie eine CSV- oder XLSX-Datei hoch, um Kontakte massenhaft in eine Liste zu importieren. Die Datei wird zur asynchronen Verarbeitung in die Warteschlange eingereiht — verfolgen Sie den Abschluss über die zurückgegebene import_job_id oder über den optionalen webhook_url-Callback.

POST /Import/Upload

Kontaktdatei (CSV / XLSX) für Massenimport hochladen

Laden Sie eine CSV- oder XLSX-Datei hoch, um Kontakte in eine Liste zu importieren. Die Datei wird gespeichert und zur asynchronen Verarbeitung in die Warteschlange eingereiht — der Endpunkt gibt sofort eine import_job_id zurück.

Anfragetyp: multipart/form-data

Erforderliche Formularfelder:

Optional:

Dateiformat:

Anfragetext (multipart/form-data)

NameTypErforderlichBeschreibung
id_listinteger (int64)jaID der Zielliste
filestring (binary)jaCSV- oder XLSX-Datei (UTF-8, max. 50 MB)
json_match_fieldsstringjaJSON-Zuordnung der Dateispalten zu den Kontaktfeldern
webhook_urlstring (uri)Callback-URL, die beim Abschluss der Verarbeitung aufgerufen wird

Antworten

CodeBeschreibung
200Datei akzeptiert und in Warteschlange eingereiht
400Keine Datei hochgeladen, id_list fehlt oder json_match_fields fehlt / ist ungültig
401Ungültiges oder abgelaufenes Token
500Server- oder Speicherfehler

Beispiel 200

{
  "result": "OK",
  "import_job_id": 14,
  "internal_name": "230575-20260420142615-contacts.csv"
}

Webhooks

Abonnieren Sie mit Ihrem Server Echtzeit-Ereignisbenachrichtigungen. Mailpro sendet einen HMAC-signierten JSON-Payload per POST an Ihre URL, sobald das abonnierte Ereignis eintritt. Im Abschnitt „Webhooks“ der Einführung finden Sie den vollständigen Ereigniskatalog, die Payload-Hülle, Codebeispiele zur Signaturprüfung und die Wiederholungsrichtlinie.

GET /Webhook

Webhooks auflisten

Gibt alle für das authentifizierte Konto konfigurierten Webhooks zurück.

Antworten

CodeBeschreibung
200Array von Webhooks
401Ungültiges oder abgelaufenes Token

POST /Webhook

Webhook erstellen

Erstellt ein neues Webhook-Abonnement. Die Antwort enthält ein secret, das nur einmal angezeigt wird — speichern Sie es sofort serverseitig. Verwenden Sie es zur Überprüfung der HMAC-Signatur jedes eingehenden Payloads.

Limits: maximal 20 Webhooks pro Konto, maximal 50 Ereignisse pro Webhook.

Anfragetext (application/json)

NameTypErforderlichBeschreibung
urlstring (uri)jaHTTPS-Endpunkt (HTTP wird in der Produktion abgelehnt)
eventsarray of stringjaListe der Ereignistypen, die abonniert werden sollen (siehe Katalog oben). Verwenden Sie ["*"], um alle Ereignisse dieser API zu abonnieren.
descriptionstringFrei wählbare Beschreibung für Ihre Referenz

Beispiel

{
  "url": "https://example.com/hooks/mailpro",
  "events": [
    "email.delivered",
    "email.bounced",
    "contact.created"
  ],
  "description": "Slack-Integration"
}

Antworten

CodeBeschreibung
201Webhook erstellt — secret wird ausschließlich hier zurückgegeben
400Ungültige URL, Ereignisliste oder Limit überschritten
401Ungültiges oder abgelaufenes Token

Beispiel 201

{
  "id": 42,
  "url": "https://example.com/hooks/mailpro",
  "events": [
    "email.delivered",
    "email.bounced",
    "contact.created"
  ],
  "description": "Slack-Integration",
  "isActive": true,
  "consecutiveFailures": 0,
  "autoDisabledAt": null,
  "autoDisabledReason": null,
  "createdAt": "2026-05-25T10:00:00Z",
  "updatedAt": "2026-05-25T10:00:00Z",
  "secret": "whsec_AbcD1234EfgH5678IjkL9012MnoP3456QrsT"
}

GET /Webhook/{id}

Webhook abrufen

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Der Webhook
404Webhook nicht gefunden

PUT /Webhook/{id}

Webhook aktualisieren

Teilaktualisierung — nur die gesendeten Felder werden geändert.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Anfragetext (application/json)

NameTypErforderlichBeschreibung
urlstring (uri)
eventsarray of string
descriptionstring
isActivebooleanSetzen Sie auf true, um einen automatisch deaktivierten Webhook wieder zu aktivieren, sobald Ihr Endpunkt repariert ist.

Antworten

CodeBeschreibung
200Aktualisierter Webhook
400Ungültiger Payload
404Webhook nicht gefunden

DELETE /Webhook/{id}

Webhook löschen

Löscht den Webhook und seine vollständige Zustellungshistorie dauerhaft.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
204Gelöscht
404Webhook nicht gefunden

POST /Webhook/{id}/test

Testereignis senden

Reiht sofort ein ping-Ereignis (oder einen beliebigen anderen Ereignistyp über das Body-Feld eventType) für Ihren Endpunkt in die Warteschlange ein. Nützlich, um die Erreichbarkeit und die Signaturprüfung zu verifizieren, bevor Sie sich auf reale Ereignisse verlassen.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Anfragetext (application/json)

NameTypErforderlichBeschreibung
eventTypestringÜberschreibt den Ereignistyp (muss von diesem Webhook abonniert sein). ping funktioniert immer.

Beispiel

{
  "eventType": "ping"
}

Antworten

CodeBeschreibung
202Ereignis zum Versand in die Warteschlange eingereiht
404Webhook nicht gefunden

Beispiel 202

{
  "deliveryId": 1234,
  "eventId": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
  "eventType": "ping"
}

POST /Webhook/{id}/rotate-secret

HMAC-Secret rotieren

Erstellt ein neues HMAC-Secret und macht das alte sofort ungültig. Das neue Secret wird einmalig in der Antwort zurückgegeben — speichern Sie es. Jede Zustellung ab diesem Zeitpunkt wird mit dem neuen Secret signiert.

Verwenden Sie diese Funktion, wenn Sie den Verdacht haben, dass Ihr Secret kompromittiert wurde.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja

Antworten

CodeBeschreibung
200Neues Secret (einmalig sichtbar)
404Webhook nicht gefunden

Beispiel 200

{
  "secret": "whsec_XyzA9876BcdE5432FghI1098JklM7654NopQ"
}

GET /Webhook/{id}/deliveries

Zustellversuche auflisten

Gibt die Historie der Zustellversuche für diesen Webhook zurück (30 Tage Aufbewahrung). Nützlich zur Fehlersuche — welche Ereignisse wurden gesendet, welche Statuscodes wurden empfangen, wie viele Wiederholungsversuche und welche Fehlermeldungen.

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja
limitqueryinteger
cursorqueryinteger (int64)Paginierungs-Cursor (= zuletzt gesehene Zustellungs-ID). Gibt Zustellungen mit id < cursor zurück.

Antworten

CodeBeschreibung
200Array von Zustellversuchen (neueste zuerst)
404Webhook nicht gefunden

POST /Webhook/{id}/deliveries/{deliveryId}/replay

Zustellung wiederholen

Reiht einen frischen Zustellversuch mit demselben Payload wie das Original in die Warteschlange ein. Nützlich, um eine fehlgeschlagene Zustellung nach Behebung Ihres Endpunkts erneut auszulösen. Eine NEUE Webhook_Delivery-Zeile wird angelegt (das Original bleibt zu Prüfzwecken erhalten). Die Wiederholung durchläuft die standardmäßige Wiederholungsrichtlinie (10s → 1min → 5min → 30min → 2h → 6h → 24h, dann aufgegeben).

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)ja
deliveryIdpathinteger (int64)ja

Antworten

CodeBeschreibung
202Wiederholung in Warteschlange eingereiht
404Webhook oder Zustellung nicht gefunden

Suppression

Bounces und Abmeldungen des Kontos: auflisten, hinzufügen, entfernen.

GET /Suppression/Bounces

Bounces des Kontos auflisten

Die neuesten zuerst. Die Gesamtzahl steht im Header X-Total-Count.

OAuth-Scope : email:read

Parameter

NameOrtTypErforderlichBeschreibung
typequerystring: hard, softhard oder soft
sourcequerystringHerkunft des Bounces: list, contact, api oder smtp
emailquerystringGenaue Adresse
dateFromquerystring (date-time)Ab diesem Datum
dateToquerystring (date-time)Bis zu diesem Datum
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Bounces zurückgegeben
400type muss hard oder soft sein
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id": 5521,
    "source": "contact",
    "type": "hard",
    "email": "[email protected]",
    "date": "2026-10-12T08:30:00",
    "diag_code": "550 5.1.1 User unknown",
    "id_list": 101
  }
]

DELETE /Suppression/Bounces/{id}

Bounce entfernen

source und type sind erforderlich, wie von GET /Suppression/Bounces zurückgegeben: Eine id allein ist nicht eindeutig.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaid des Bounces
sourcequerystringjalist, contact, api oder smtp
typequerystring: hard, softjahard oder soft

Antworten

CodeBeschreibung
200Bounce entfernt
400source oder type fehlt
401Ungültiges oder abgelaufenes Token
404Bounce nicht gefunden

Beispiel 200

{
  "result": "ok",
  "id": 5521,
  "restored": false
}

POST /Suppression/Bounces/{id}/Restore

Kontakt mit Hard Bounce wieder in seine Listen aufnehmen

Nur für einen Hard Bounce mit der Herkunft contact.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaid des Bounces

Antworten

CodeBeschreibung
200Kontakt wieder aufgenommen
401Ungültiges oder abgelaufenes Token
404Hard Bounce eines Kontakts nicht gefunden oder Adresse nicht mehr aktiv

Beispiel 200

{
  "result": "ok",
  "id": 5521,
  "restored": true
}

GET /Suppression/Unsubscribers

Abmeldungen des Kontos auflisten

Die neuesten zuerst. Die Gesamtzahl steht im Header X-Total-Count.

OAuth-Scope : contacts:read

Parameter

NameOrtTypErforderlichBeschreibung
sourcequerystringHerkunft der Abmeldung: contact, list, smtp, api oder api3
emailquerystringGenaue Adresse
dateFromquerystring (date-time)Ab diesem Datum
dateToquerystring (date-time)Bis zu diesem Datum
numberOfRecordsqueryinteger
pageNumberqueryinteger

Antworten

CodeBeschreibung
200Abmeldungen zurückgegeben
401Ungültiges oder abgelaufenes Token

Beispiel 200

[
  {
    "id": 9012,
    "source": "api3",
    "email": "[email protected]",
    "date": "2026-10-20T16:05:00",
    "list_name": null,
    "comment": "Asked by phone"
  }
]

POST /Suppression/Unsubscribers

Abmeldung hinzufügen

Ohne id_list wird die Adresse für das gesamte Konto abgemeldet. Mit id_list nur von dieser Abmeldeliste.

OAuth-Scope : contacts:write

Anfragetext (application/json)

NameTypErforderlichBeschreibung
emailstringjaAbzumeldende Adresse
commentstringFreier Kommentar
id_listinteger (int64)Abmeldeliste des Kontos (optional)

Antworten

CodeBeschreibung
200Erledigt. already_unsubscribed ist true, wenn die Adresse bereits abgemeldet war.
400Eine gültige Adresse ist erforderlich
401Ungültiges oder abgelaufenes Token
404id_list ist keine Abmeldeliste dieses Kontos

Beispiel 200

{
  "result": "ok",
  "already_unsubscribed": false
}

DELETE /Suppression/Unsubscribers/{id}

Abmeldung entfernen

source ist erforderlich, wie von GET /Suppression/Unsubscribers zurückgegeben: Eine id allein ist nicht eindeutig.

OAuth-Scope : contacts:write

Parameter

NameOrtTypErforderlichBeschreibung
idpathinteger (int64)jaid der Abmeldung
sourcequerystringjacontact, list, smtp, api oder api3

Antworten

CodeBeschreibung
200Abmeldung entfernt
400source ist erforderlich
401Ungültiges oder abgelaufenes Token
404Abmeldung nicht gefunden

Beispiel 200

{
  "result": "ok",
  "removed": 9012
}