TrekMail-REST-API-Übersicht für Entwickler
Erfahren Sie, wie die TrekMail-REST-API funktioniert: Bearer-Token-Authentifizierung, tarifabhängiger Zugriff, Ratenlimits und Antwortformate.
Artikeldetails
Typ, Schwierigkeit, Tarife und Info zur letzten Aktualisierung.
▼
Artikeldetails
Typ, Schwierigkeit, Tarife und Info zur letzten Aktualisierung.
- Typ
- Referenz
- Schwierigkeit
- Mittel
- Tarife
- Nano · Starter · Pro · Agency
- Zuletzt aktualisiert
- 23. Aug 2026
Mit der TrekMail-API können Sie Domains, Postfächer, Weiterleitungen, DNS, E-Mail-Migrationen und Webmail-Vorgänge über einen HTTP-Client oder KI-Agenten verwalten. Dazu gehören das Lesen und Senden von Nachrichten, Entwürfe, Zeitplanung, Ordner, Kontakte, Kalender, Identitäten, Vorlagen und blockierte Absender. Authentifizierte Anfragen verwenden ein Bearer-Token, Antworten werden als JSON zurückgegeben und API-Aktivitäten werden protokolliert.
Ihre Möglichkeiten
- REST API v1 mit einem JSON-Anfrage- und Antwortformat.
- Bearer-Token-Authentifizierung: keine Cookies oder Sitzungen für authentifizierte API-Aufrufe.
- Idempotenzschlüssel bei Schreibvorgängen, die sie benötigen, um doppelte Arbeit bei Wiederholungen zu verhindern.
- Ratenbegrenzung pro Token mit
Retry-After-Headern. - Auditprotokoll, das in Ihrem Dashboard unter AI Agents & API → Audit Log sichtbar ist.
- MCP-Server mit einem Katalog, der nach den Anmeldedaten, dem Transport und den Sicherheitseinstellungen der aktuellen Verbindung gefiltert wird. Eine eng begrenzte Projektverbindung sieht daher nur die Werkzeuge, die sie verwenden kann.
- Domain-Aliasse: Verbinden Sie reine Empfangsadressen einer sekundären Domain mit denselben lokalen Teilen einer primären Domain, einschließlich gespeicherter und aktiver Zustellungszustände sowie sicherer Entfernung. Siehe Domain-Aliasse über API und MCP.
- Dual-Token-Architektur: separate Ops-Token für die Infrastruktur und Nachrichten-Token für vollständige E-Mail-Vorgänge wie Lesen, Senden, Entwürfe, Zeitplanung, Kontakte, Kalender, Identitäten, Vorlagen und Ordner.
- Einblicke in ausgehende Zustellbarkeit und Bounces: Rufen Sie im Dashboard die Summen für gesendet, zugestellt, Hard-Bounce und Soft-Bounce sowie SMTP-Codes und Antworten pro Empfänger ab. Siehe Zustellbarkeit und Bounces.
- Postfach-Speichernutzung:
list_mailboxesundget_mailboxgebenused_mb,quota_mb,allocation_mbundis_pooledzurück. So kann ein Agent ohne Dashboard-Zugriff Postfächer erkennen, die sich ihrem Limit nähern. - White-Label-Verwaltung: Prüfen Sie die Einrichtung, verwalten Sie Branding pro Domain, laden Sie Kunden ein, steuern Sie Rollen und Domains, sperren oder reaktivieren Sie Zugriffe und überprüfen Sie Aktivitäten über API oder MCP. Siehe Branding-Leitfaden und Leitfaden zur Teamverwaltung.
Drive-API und Dateiautomatisierung
Drive gehört zur öffentlichen API. Es umfasst Account-Drive und Drive-Bereiche von Postfächern, Nutzung, Ordnernavigation, Uploads, Datei- und Ordnerverwaltung, Papierkorb, Massenaktionen, öffentliche Freigabelinks, Verwaltung von Passwörtern für Synchronisierungsgeräte und den schreibgeschützten Status des Drive-Storage-Add-ons.
Drive verwendet elf Ops-Token-Bereiche: drive:account:read, drive:account:write, drive:account:share, drive:account:purge, drive:mailbox:read, drive:mailbox:write, drive:mailbox:share, drive:mailbox:purge, drive:addon:read, drive:devices:read und drive:devices:write. Abrechnungsaktionen für das Drive-Add-on wie Kauf, Größenänderung und Kündigung bleiben dem Dashboard vorbehalten und werden nicht als API- oder MCP-Schreibvorgänge angeboten.
Beginnen Sie mit der Drive-API-Übersicht oder dem Drive-API-Schnellstart.
Dual-Token-Architektur
Die API verwendet zwei unabhängige Token-Typen. Sie können je nach Bedarf einen oder beide verwenden:
| Token-Typ | Präfix | Freigeschaltete Funktionen |
|---|---|---|
| Ops-Token | tm_live_ |
Konto- und Infrastrukturwerkzeuge: White Label, Domains, DNS, Postfächer, Einladungen, Drive, Migrationen, SMTP, Tickets, Abrechnung und Cloudflare |
| Nachrichten-Token | tm_msg_ |
Webmail-Vorgänge: Nachrichten, Ordner, Anhänge, Entwürfe, geplanter Versand, Spam-/Ham-Meldung, Massenaktionen, Kontakte, Kontaktgruppen, Kalender, Schreibhilfen, Identitäten, Vorlagen und blockierte Absender |
Ops-Token und Nachrichten-Token besitzen separate Bereiche und Ratenlimits. Ein einzelner Agent kann beide Token gleichzeitig verwenden, indem sie in der MCP-Serverumgebung konfiguriert werden.
Nachrichten-Token sind in den Tarifen Pro und Agency verfügbar.
Bevor Sie beginnen
- Alle Tarife haben API-Zugriff:
- Nano: Email Verifier. Fügen Sie ein Drive-Storage-Add-on hinzu, um vollständigen Drive-API- und MCP-Zugriff zu erhalten.
- Starter: Vollständiger Zugriff auf Drive und Email Verifier sowie schreibgeschützter Zugriff auf die übrigen Infrastrukturbereiche. Verwenden Sie das Dashboard für deren Schreibaktionen.
- Pro / Agency: Vollständiger Zugriff auf die Basis-API einschließlich Nachrichten-Token. White-Label-Bereiche werden hinzugefügt, solange die Testversion oder das kostenpflichtige Add-on aktiv ist.
- Möchten Sie einen KI-Agenten verbinden? Fügen Sie
https://trekmail.net/mcpin einem kompatiblen Client als Remote-MCP-Server hinzu. Wenn er Browserautorisierung unterstützt, ist kein manuelles Token erforderlich. Unter KI-Agenten verbinden (MCP) finden Sie Remote-, CLI-/Desktop-, Bridge- und selbst gehostete Optionen. - Entwickeln Sie eine eigene Integration? Erstellen Sie unter AI Agents & API → Tokens → Create token ein
tm_live_-Token und senden Sie es alsAuthorization: Bearer …. Siehe API-Token erstellen und verwalten. - Ist die API neu für Sie? Klicken Sie oben auf der Seite AI Agents & API auf Start tour, um eine kurze Einführung in Verbindungsmethoden, Token-Verwaltung, verbundene Apps und das Auditprotokoll zu erhalten.
Funktionsweise der Authentifizierung
Jede Anfrage muss Ihr Token im Authorization-Header enthalten:
Authorization: Bearer tm_live_abc123...
Ops-Token beginnen mit tm_live_, Nachrichten-Token mit tm_msg_. Beide werden bei der Erstellung einmal angezeigt und können danach nicht erneut eingeblendet werden.
Wenn das Token fehlt, widerrufen wurde oder abgelaufen ist, gibt die API 401 mit dem Fehlercode unauthenticated zurück.
Basis-URL und Versionierung
Alle Endpoints befinden sich unter:
https://trekmail.net/api/v1
Die Basis-URL wird in Ihrem Dashboard AI Agents & API unter Quick Reference angezeigt. Die Version steht im URL-Pfad. Sollte jemals v2 eingeführt werden, funktioniert v1 weiterhin.
Antwortformat
Erfolgreiche Antworten geben JSON mit einem data-Schlüssel für einzelne Ressourcen oder eine paginierte Liste zurück:
{
"data": [
{ "id": 1, "domain": "example.com", "status": "active" }
],
"links": { "next": "...", "prev": null },
"meta": { "current_page": 1, "last_page": 1, "total": 1 }
}
Fehlerantworten folgen einer einheitlichen Struktur:
{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired API token",
"hint": "Check that your token is correct and has not been revoked.",
"request_id": "req_abc123",
"retryable": false
}
}
Anfrage-IDs
Jede Antwort enthält einen X-Request-Id-Header. Sie können mit X-Request-Id in der Anfrage auch eine eigene ID übergeben. Sie wird unverändert zurückgegeben und im Auditprotokoll erfasst.
Ratenlimits
Für jedes Token gilt ein Limit pro Minute. Wenn Sie das Limit erreichen, gibt die API 429 mit einem Retry-After-Header zurück, der angibt, wann Sie es erneut versuchen können.
Destruktive Vorgänge (Löschabsichten) haben ein zusätzliches tägliches Limit pro Token und eine Wartezeit zwischen aufeinanderfolgenden Löschungen.
Für Schreibvorgänge bei Migrationen (Start, Abbruch, Wiederholung) gilt ein eigenes Ratenlimit von 10 Anfragen pro Minute und Token sowie eine serverweite Parallelitätsgrenze, die 503 zurückgibt, wenn global zu viele Migrationen ausgeführt werden.
Nachrichten-Token verwenden separate Limits. Standardmäßig gelten 30 Leseanfragen pro Minute und Token, 60 Sendeanfragen pro Minute und Token, 5,000 erfolgreiche Lesevorgänge pro Tag und Token sowie 100 API-Sendungen pro Tag über ein Postfach. Ein zweiter Sicherheitszähler für Sendungen beträgt standardmäßig 500 pro Token und Tag; normalerweise greift zuerst die niedrigere Postfachgrenze. Diese API-Schutzmaßnahmen ersetzen weder die verwalteten SMTP-Limits Ihres Tarifs noch die eigenen Limits eines externen Anbieters.
Idempotenz
Als idempotent markierte Endpoints, die den Zustand ändern, erfordern einen Idempotency-Key-Header. Dies gilt für Erstellungen, Aktualisierungen, Sendungen und Löschungen, bei denen eine automatische Wiederholung sonst Arbeit duplizieren könnte. Leseähnliche POST-Aktionen wie die Erkennung eines Anbieters oder ein Verbindungstest benötigen keinen; prüfen Sie die Endpoint-Tabelle oder die OpenAPI-Spezifikation. Wenn Sie denselben Schlüssel mit demselben Body senden, gibt die API die ursprüngliche Antwort wieder, ohne Duplikate zu erstellen.
Idempotency-Key: create-mailbox-alice-2024
Wenn Sie denselben Schlüssel mit einem anderen Body senden, gibt die API 409 Conflict zurück.
Postfach-Speicherzuweisung
Jeder Endpoint, der ein Postfach oder eine Einladung erstellt, POST /api/v1/mailboxes, /api/v1/mailboxes:bulk, /api/v1/mailboxes/invites, /api/v1/mailboxes/invites:bulk, akzeptiert optional die Ganzzahl storage_allocation_mb.
| Wert | Bedeutung |
|---|---|
Ausgelassen (oder null) |
Das Postfach verwendet den gemeinsamen Kontospeicher (Standard). |
| Positive Ganzzahl (MB) | Das Postfach ist dediziert. Genau diese Menge wird ausschließlich für dieses Postfach aus dem Kontospeicher reserviert. |
Zuweisungen werden gegen den aktuellen Speicher abzüglich vorhandener dedizierter Postfächer und ausstehender dedizierter Einladungen geprüft. Massen-Endpoints prüfen zusätzlich die Summe der Zuweisungen im Stapel und lehnen den gesamten Stapel mit 422 storage_pool_exceeded ab, wenn er die Kapazität überschreiten würde. Der Speicher wird aktualisiert, wenn ein dediziertes Postfach gelöscht, eine Einladung eingelöst (die Zuweisung geht auf das neue Postfach über) oder eine ausstehende Einladung abläuft.
Bei Einladungen wird die Zuweisung im Zugangscode gespeichert und beim Einlösen auf das neue Postfach übertragen. Wenn der Speicher zu diesem Zeitpunkt nicht mehr für die angeforderte Zuweisung ausreicht (z. B. weil ein anderer Administrator seine dedizierte Zuweisung zwischenzeitlich vergrößert hat), wird das neue Postfach beim Einlösen problemlos auf gemeinsamen Speicher herabgestuft, statt dass der Vorgang fehlschlägt. Der Empfänger sieht auf der Erfolgsseite einen Hinweis.
Drive-Zugriff für Postfächer
Jedes Postfach besitzt eine drive_access-Stufe, die bestimmt, auf wie viel von Drive die Person in Webmail zugreifen kann. Sie wird in der Postfachressource zurückgegeben und kann mit PATCH /api/v1/mailboxes/{id} oder für mehrere Postfächer gleichzeitig mit POST /api/v1/mailboxes:drive-access festgelegt werden.
| Wert | Bedeutung |
|---|---|
full |
Alles: Drive-Tab, Upload und Freigabe, Dateisuche und Synchronisierung mit einem Computer. Der Standard. |
attachments_only |
Kein Drive in Webmail und keine Synchronisierung. Das Senden funktioniert weiterhin; eine Datei über der Anhangsschwelle wird als Downloadlink versendet und diese Kopie nach dem Aufbewahrungszeitraum gelöscht. |
disabled |
Kein Drive, und eine Datei über der Schwelle kann überhaupt nicht angehängt werden. |
Der Speicher wird im gesamten Konto gemeinsam genutzt. Diese Einstellung steuert daher, wie viel davon eine einzelne Person mit Dateien belegen kann.
Sperren der Postfachanmeldung
Die Anmeldung eines Postfachs kann gesperrt werden, während es weiterhin E-Mails empfängt: Webmail, IMAP, SMTP und Gerätepasswörter werden abgewiesen und offene Sitzungen beendet, die Zustellung bleibt jedoch unberührt. Nichts wird zurückgewiesen und alles wartet, wenn die Anmeldung wiederhergestellt wird. Legen Sie dies mit POST /api/v1/mailboxes/{id}:suspend-login (und :resume-login) oder für mehrere Postfächer mit POST /api/v1/mailboxes:login-access fest.
Die Postfachressource meldet dies als login_suspended, login_suspended_at und login_suspended_reason. Lesen Sie login_suspended, um festzustellen, ob sich die Person anmelden kann, und status, um zu prüfen, ob das Postfach selbst läuft. Ein gesperrtes Postfach bleibt active, weil es weiterhin E-Mails annimmt. :pause ist etwas anderes: Es setzt status auf disabled und stoppt auch die Zustellung.
Siehe Postfachanmeldung über API sperren.
Der Massen-Endpoint akzeptiert genau einen Selektor, mailbox_ids, domain_id oder all, und gibt das Ergebnis zurück:
{ "data": { "drive_access": "attachments_only", "matched": 24, "updated": 21, "skipped_shared": 3 } }
domain_id ist der geeignete Selektor, wenn eine Domain einem Kunden entspricht. Postfächer, die bereits die angeforderte Stufe verwenden, zählen als matched, aber nicht als updated. Der Aufruf kann daher sicher wiederholt werden.
Gemeinsame Postfächer werden beim Einzel-Endpoint mit 422 drive_access_not_applicable abgewiesen und vom Massen-Endpoint übersprungen und gezählt: Sie haben keinen eigenen Webmail-Benutzer, ihre Mitglieder öffnen sie daher mit ihrer eigenen Stufe, und ein in der gemeinsamen Zeile gespeicherter Wert würde nichts ändern.
Die Einschränkung gilt sowohl für die API als auch für die Oberfläche. Der Drive-Bereich eines eingeschränkten Postfachs fehlt in GET /api/v1/drive/spaces, seine Dateien antworten bei Abfrage per id mit 404, und ein Synchronisierungsgerät kann nicht dafür erstellt werden.
Weiterleitungsadressen
GET /api/v1/domains/{id}/forwarding-addresses gibt mehr als nur die Liste zurück, da zwei Eigenschaften einer Weiterleitungsadresse nicht in der Adresse selbst sichtbar sind:
{
"data": [ { "id": 8, "address": "sales@acme.com", "local_part": "sales",
"domain_id": 4, "recipients": ["team@example.net"], "is_active": true } ],
"limits": { "used": 1, "max": 100, "recipients_per_address": 15 },
"delivery": { "active": true, "requires_plan": "pro",
"paused_until": null, "paused_reason": null }
}
limits.maxgilt pro Domain und hängt vom Tarif ab: 100 bei Pro, 300 bei Agency und 25 gespeichert, aber inaktiv, bei Nano oder Starter.delivery.activezeigt an, ob diese Regeln gerade jetzt E-Mails weiterleiten. Es istfalsebei einem Tarif unterrequires_planundfalse, solangepaused_untilgesetzt ist (das Konto hat seine stündliche Senderate überschritten; siehe Sendelimits pro Tarif). Eine Regel kannis_active: truesein und trotzdem nicht zustellen. Lesen Sie daherdeliveryund nicht nuris_active, bevor Sie melden, dass die Weiterleitung funktioniert.
Das Erstellen ist in einem Tarif ohne Zustellung erlaubt und gibt 201 zurück: Die Regel wird gespeichert und beginnt nach einem Upgrade zu funktionieren. Dies entspricht dem Dashboard, das solche Regeln als gespeichert und inaktiv anzeigt.
Ablehnungen werden als 422 zurückgegeben, wobei error.code auf validation_error oder limit_exceeded gesetzt ist: eine bereits in der Domain verwendete Adresse, ein Empfänger in derselben Domain (was eine Schleife verursachen würde), eine Empfängerdomain ohne funktionierenden MX oder ein ausgeschöpftes Domainbudget.
POST und DELETE für diese Endpoints erfordern einen Idempotency-Key; PATCH nicht.
Zustellungsverlauf
GET /api/v1/domains/{id}/forwarding-addresses/{addressId}/log gibt zurück, was tatsächlich mit den neuesten E-Mails geschehen ist, beginnend mit der neuesten:
{
"data": [
{ "id": 91, "occurred_at": "2026-07-27T09:12:04+00:00", "outcome": "delivered",
"from": "rfq@northgatesupply.com", "to": "sales@example.net",
"smtp_code": "2.0.0", "smtp_response": "250 2.0.0 OK" }
],
"address": "sales@acme.com",
"window": { "retention_days": 30, "max_events": 200 }
}
outcome ist delivered, deferred (vorübergehender Fehler, Wiederholung läuft), failed (der Server des Empfängers hat die Nachricht abgelehnt) oder blocked. Letzteres bedeutet, dass unser Spamfilter die Nachricht vor der Weiterleitung gestoppt hat und sie den Empfänger nie erreicht hat. blocked als Bounce zu behandeln würde jemanden dazu bringen, den empfangenden Server wegen eines Problems auf unserer Seite zu untersuchen.
limit (1-200, Standard 100) ist der einzige Parameter. Das Fenster entspricht der Aufbewahrung des Tarifs: 30 Tage bei Agency, andernorts 7. Ältere Ereignisse können nicht abgefragt werden, da weitergeleitete Ereignisse bereinigt werden.
Gemeinsame Team-Postfächer
Ein gemeinsames Postfach ist ein Team-Posteingang wie support@ oder sales@, den Mitglieder über ihr eigenes reguläres Postfachkonto in Webmail und bei aktiviertem nativen Zugriff als delegierten IMAP-Ordner öffnen. Es gibt kein gemeinsames Passwort oder separates Login. Der Zugriff ist einheitlich: Jedes Mitglied kann lesen, und ein einzelnes can_send-Flag legt fest, ob es als diese Adresse antworten kann (true) oder nur Lesezugriff hat (false). Es gibt keine Mitgliederrollen.
GET /api/v1/mailboxes und GET /api/v1/mailboxes/{id} geben jetzt mailbox_type ("user" oder "shared") und den booleschen Wert is_shared zurück; gemeinsame Postfächer enthalten außerdem shared_member_count. Verwenden Sie diese Felder, um einen Team-Posteingang von einem normalen zu unterscheiden, bevor Sie die Mitglieder-Endpoints aufrufen.
| Endpoint | Methode | Erforderlicher Bereich | Funktion |
|---|---|---|---|
/api/v1/mailboxes/{id}/members |
GET | mailboxes:read |
Listet Mitglieder eines gemeinsamen Postfachs auf (jeweils: member_mailbox_id, email, can_read, can_send) |
/api/v1/mailboxes/{id}/members |
POST | mailboxes:write |
Fügt ein Mitglied hinzu, Body {member_mailbox_id, can_send?} (can_send ist standardmäßig true) |
/api/v1/mailboxes/{id}/members/{member} |
PATCH | mailboxes:write |
Schaltet den Antwortzugriff eines Mitglieds um, Body {can_send} |
/api/v1/mailboxes/{id}/members/{member} |
DELETE | mailboxes:write |
Entfernt ein Mitglied (ein gemeinsames Postfach behält immer mindestens eines) |
/api/v1/shared-mailboxes |
POST | mailboxes:create |
Erstellt ein gemeinsames Postfach, Body {domain_id, local_part, display_name, member_mailbox_ids[], storage_shared?, storage_mb?} |
/api/v1/mailboxes/{id}/convert-to-shared |
POST | mailboxes:write |
Wandelt ein vorhandenes Postfach in ein gemeinsames um, Body {member_mailbox_ids[]} (ändert das alte Passwort, sodass keine Anmeldung mehr möglich ist; gibt 202 conversion_pending mit automatischer Wiederholung zurück, wenn die Backend-Synchronisierung noch nicht bestätigt wurde) |
/api/v1/mailboxes/{id}/convert-to-regular |
POST | mailboxes:write |
Wandelt ein gemeinsames Postfach wieder in ein reguläres um, Body {password} (entfernt Mitglieder und legt ein neues Anmeldepasswort fest) |
Die Mitglieder-Endpoints verwenden Ihre vorhandenen Bereiche mailboxes:read / mailboxes:write. Es gibt keinen separaten Bereich für gemeinsame Postfächer.
Um nativen Zugriff aus Mail-Apps zu ermitteln, rufen Sie GET /api/v1/mailboxes/{member_mailbox_id}/client-setup für das reguläre Postfach eines Mitglieds auf. Das Objekt shared_mailboxes meldet dauerhafte native Bereitschaft, effektive Send-As-Bereitschaft und Begründung, genaue Inbox-/Sent-/Archive-/Junk-Pfade sowie erlaubte Vorgänge. can_send ist die zugewiesene Berechtigung Can reply, kein Beleg dafür, dass SMTP derzeit bereit ist. Der Endpoint gibt nie ein Passwort zurück. Ein Aufruf mit der id des gemeinsamen Postfachs gibt 422 direct_login_unavailable zurück, da sich die gemeinsame Adresse nicht direkt authentifizieren kann.
Das Entfernen eines Mitglieds, die Änderung von can_send oder die Umwandlung eines gemeinsamen in ein reguläres Postfach synchronisiert die Mailserverberechtigungen, wenn nativer Zugriff aktiviert ist. Eine Antwort 503 native_access_sync_failed kann wiederholt werden und garantiert, dass Mitgliedschaft, Berechtigung oder Postfachtyp unverändert geblieben sind, statt den Vorgang teilweise anzuwenden.
Verfügbare Endpoints
Drive besitzt eine eigene Referenz und wird hier nicht wiederholt. Siehe Drive-API-Übersicht. Die für Abwärtskompatibilität beibehaltenen SMTP-Endpoints auf Kontoebene werden unter SMTP-Routing pro Domain beschrieben, statt als aktuell aufgeführt zu werden.
| Endpoint | Methode | Erforderlicher Bereich |
|---|---|---|
/api/v1/domains |
GET | domains:read |
/api/v1/domains/{id} |
GET | domains:read |
/api/v1/domains/{id}/matching-addresses |
GET | domains:read |
/api/v1/domains/{id}/matching-addresses |
PUT | domains:write |
/api/v1/domains/{id}/matching-addresses |
DELETE | domains:write |
/api/v1/domains/{id}/dns-requirements |
GET | domains:dns:read |
/api/v1/domains/{id}/dns-recheck |
POST | domains:dns:recheck |
/api/v1/domains/{id}/spam-metrics |
GET | domains:read |
/api/v1/domains/{id}/spam-metrics/summary |
GET | domains:read |
/api/v1/domains/{id}/deliverability |
GET | domains:read |
/api/v1/domains/{id}/bounces |
GET | domains:read |
/api/v1/domains/{id}/signature |
GET | domains:read |
/api/v1/domains/{id}/forwarding-addresses |
GET | domains:read |
/api/v1/domains/{id}/forwarding-addresses/{addressId}/log |
GET | domains:read |
/api/v1/dns-checks/{id} |
GET | domains:dns:read |
/api/v1/mailboxes |
GET | mailboxes:read |
/api/v1/mailboxes |
POST | mailboxes:create |
/api/v1/mailboxes/{id} |
PATCH | mailboxes:write |
/api/v1/mailboxes/invites |
POST | mailboxes:invites:create |
/api/v1/mailboxes/invites:bulk |
POST | mailboxes:invites:create |
/api/v1/mailboxes:bulk |
POST | mailboxes:create |
/api/v1/mailboxes/{id}/forwarding |
GET | mailboxes:forwarding:read |
/api/v1/mailboxes/{id}/forwarding |
PUT | mailboxes:forwarding:write |
/api/v1/mailboxes/{id}/rules |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/rules |
POST | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/{ruleId} |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/rules/{ruleId} |
PUT | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/{ruleId} |
DELETE | mailboxes:rules:write |
/api/v1/mailboxes/{id}/rules/reorder |
PATCH | mailboxes:rules:write |
/api/v1/mailboxes/{id}/auto-reply |
GET | mailboxes:auto-reply:read |
/api/v1/mailboxes/{id}/auto-reply |
PUT | mailboxes:auto-reply:write |
/api/v1/mailboxes/{id}/sieve |
GET | mailboxes:rules:read |
/api/v1/mailboxes/{id}/sieve |
PUT | mailboxes:rules:write |
/api/v1/mailboxes/{id}:delete-intent |
POST | mailboxes:delete |
/api/v1/delete-intents/{id}:confirm |
POST | mailboxes:delete |
/api/v1/me |
GET | (beliebiges gültiges Ops-Token) |
/api/v1/mailboxes/{id}/message-tokens |
POST | mailboxes:message-tokens:manage |
/api/v1/mailboxes/{id}/message-tokens |
GET | mailboxes:message-tokens:manage |
/api/v1/message-tokens/{id} |
DELETE | mailboxes:message-tokens:manage |
/api/v1/messages |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/{uid} |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/{uid} |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/send |
POST | messages:send (Nachrichten-Token) |
/api/v1/messages/_ping |
GET | messages:read (Nachrichten-Token, Diagnose) |
/api/v1/messages/{uid}/attachments/{index} |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/{uid}/attachments |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/{uid}/raw |
GET | messages:read (Nachrichten-Token; gibt raw_base64, encoding, content_type, size_bytes zurück) |
/api/v1/messages/folders |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/folders/{path} |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/folders/{path} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/{uid}:spam |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/{uid}:ham |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/bulk |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/folders:empty |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/drafts |
POST | messages:write (Nachrichten-Token); gibt uid + uidvalidity zurück |
/api/v1/messages/drafts/{uid} |
PUT | messages:write (Nachrichten-Token); erfordert die uidvalidity des Entwurfs |
/api/v1/messages/scheduled |
POST | messages:send (Nachrichten-Token) |
/api/v1/messages/scheduled |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/scheduled/{id} |
PATCH | messages:send (Nachrichten-Token) |
/api/v1/messages/scheduled/{id} |
DELETE | messages:send (Nachrichten-Token) |
/api/v1/messages/contacts |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/contacts |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/contacts/{id} |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/contacts/{id} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/contacts/import |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/contacts/export |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/contact-groups |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/contact-groups/{id}/members |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/external-accounts |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/external-accounts |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/external-accounts/{id} |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/external-accounts/{id} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/external-accounts/detect |
POST | messages:read (Nachrichten-Token) |
/api/v1/messages/external-accounts/test |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/external-accounts/{id}/test |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/_me |
GET | beliebiges Nachrichten-Token (Introspektion) |
/api/v1/messages/calendar/events |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/calendar/events |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/calendar/events/{id} |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/calendar/events/{id} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/{uid}/reply |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/{uid}/reply-all |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/{uid}/forward |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/contact-groups |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/contact-groups/{id} |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/contact-groups/{id} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/contact-groups/{id}/members |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/contact-groups/{id}/members |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/identities |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/identities |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/identities/reply-policy |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/identities/{id} |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/identities/{id} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/templates |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/templates |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/templates/{id} |
PATCH | messages:write (Nachrichten-Token) |
/api/v1/messages/templates/{id} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/blocked-senders |
GET | messages:read (Nachrichten-Token) |
/api/v1/messages/blocked-senders |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/blocked-senders/{id} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/mailboxes/{id}/enable-imap |
POST | mailboxes:write (Ops-Token) |
/api/v1/migrations/test-connection |
POST | migrations:write |
/api/v1/migrations |
GET | migrations:read |
/api/v1/migrations/{id} |
GET | migrations:read |
/api/v1/migrations |
POST | migrations:write |
/api/v1/migrations/{id}:cancel |
POST | migrations:write |
/api/v1/migrations/{id}:retry |
POST | migrations:write |
/api/v1/migrations/{id} |
DELETE | migrations:write |
/api/v1/migrations/bulk/preview |
POST | migrations:write |
/api/v1/migrations/bulk |
POST | migrations:write |
/api/v1/migrations/bulk |
GET | migrations:read |
/api/v1/migrations/bulk/{batch} |
GET | migrations:read |
/api/v1/migrations/bulk/{batch}:cancel |
POST | migrations:write |
/api/v1/migrations/bulk/{batch}:retry |
POST | migrations:write |
/api/v1/migrations/bulk/{batch}:resume |
POST | migrations:write |
/api/v1/migrations/bulk/{batch} |
DELETE | migrations:write |
/api/v1/migrations/bulk/{batch}/jobs/{job}/password |
PATCH | migrations:write |
/api/v1/account |
GET | account:read |
/api/v1/billing/status |
GET | billing:read |
/api/v1/billing/invoices |
GET | billing:read |
/api/v1/domains |
POST | domains:create |
/api/v1/domains/{id} |
DELETE | domains:delete |
/api/v1/domains/{id}/catch-all |
PATCH | domains:write |
/api/v1/domains/{id}/mail-hosting |
PATCH | domains:write |
/api/v1/domains/{id}/forwarding-addresses |
POST | domains:write |
/api/v1/domains/{id}/forwarding-addresses/{addressId} |
PATCH | domains:write |
/api/v1/domains/{id}/forwarding-addresses/{addressId} |
DELETE | domains:write |
/api/v1/domains/{id}/dkim:retry |
POST | domains:write |
/api/v1/domains/{id}/note |
PATCH | domains:write |
/api/v1/domains/{id}/signature |
PATCH | domains:write |
/api/v1/domains/{id}/branding |
GET | domains:read |
/api/v1/domains/{id}/branding |
PATCH | domains:write |
/api/v1/domains/{id}/branding/logo/{slot} |
PUT | domains:write |
/api/v1/domains/{id}/branding/logo/{slot} |
DELETE | domains:write |
/api/v1/domains/{id}/branding/verify-dns |
POST | domains:write |
/api/v1/domains/{id}/branding/preview |
POST | domains:write |
/api/v1/domains/{id}/branding |
DELETE | domains:write |
/api/v1/domains:bulk-add |
POST | domains:create |
/api/v1/mailboxes/{id} |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/client-setup |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/apple-mail-profile |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/bounces |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/password |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/note |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}:pause |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:restore |
POST | mailboxes:delete |
/api/v1/mailboxes/{id}:resume |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:suspend-login |
POST | mailboxes:write |
/api/v1/mailboxes/{id}:resume-login |
POST | mailboxes:write |
/api/v1/mailboxes:login-access |
POST | mailboxes:write |
/api/v1/mailboxes:drive-access |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/members |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/members |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/members/{member} |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}/members/{member} |
DELETE | mailboxes:write |
/api/v1/shared-mailboxes |
POST | mailboxes:create |
/api/v1/mailboxes/{id}/convert-to-shared |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/convert-to-regular |
POST | mailboxes:write |
/api/v1/tickets |
GET | tickets:read |
/api/v1/tickets/{id} |
GET | tickets:read |
/api/v1/tickets/{id}/messages |
GET | tickets:read |
/api/v1/tickets |
POST | tickets:write |
/api/v1/tickets/{id}:mark-seen |
POST | tickets:write |
/api/v1/tickets/{id}/reply |
POST | tickets:write |
/api/v1/tickets/{id}:close |
POST | tickets:write |
/api/v1/domains/{id}/smtp |
GET | smtp:read |
/api/v1/domains/{id}/smtp |
PUT | smtp:write |
/api/v1/domains/{id}/smtp/profiles |
GET | smtp:read |
/api/v1/domains/{id}/smtp/profiles |
POST | smtp:write |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
PUT | smtp:write |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
DELETE | smtp:write |
/api/v1/domains/{id}/smtp:test |
POST | smtp:write |
/api/v1/domains/{id}/smtp:test-status/{jobId} |
GET | smtp:read |
/api/v1/smtp/default |
GET | smtp:read |
/api/v1/smtp/default |
PUT | smtp:write |
/api/v1/smtp (veraltet, abwärtskompatibel) |
GET | smtp:read |
/api/v1/smtp (veraltet, abwärtskompatibel) |
PUT | smtp:write |
/api/v1/smtp/{id} (veraltet, abwärtskompatibel) |
DELETE | smtp:write |
/api/v1/smtp:test (veraltet, abwärtskompatibel) |
POST | smtp:write |
/api/v1/smtp:test-status/{jobId} (veraltet, abwärtskompatibel) |
GET | smtp:read |
/api/v1/messages/{uid} |
DELETE | messages:write (Nachrichten-Token) |
/api/v1/messages/{uid}:move |
POST | messages:write (Nachrichten-Token) |
/api/v1/messages/folders |
GET | messages:read (Nachrichten-Token) |
/api/v1/mailboxes/{id}/aliases |
GET | mailboxes:read |
/api/v1/mailboxes/{id}/aliases |
POST | mailboxes:write |
/api/v1/mailboxes/{id}/aliases/{aliasId} |
PATCH | mailboxes:write |
/api/v1/mailboxes/{id}/aliases/{aliasId} |
DELETE | mailboxes:write |
/api/v1/verify |
POST | verify:write |
/api/v1/verify/bulk |
POST | verify:write |
/api/v1/verify/bulk/{jobId} |
GET | verify:read |
/api/v1/verify/bulk/{jobId}/download |
GET | verify:read |
/api/v1/verify/credits |
GET | verify:read |
/api/v1/verify/bulk |
GET | verify:read |
/api/v1/verify/bulk/{jobId}/cancel |
POST | verify:write |
/api/v1/verify/bulk/{jobId} |
DELETE | verify:write |
/api/v1/cloudflare/validate-token |
POST | cloudflare:read |
/api/v1/cloudflare/zones |
POST | cloudflare:read |
/api/v1/cloudflare/connect |
POST | cloudflare:write |
/api/v1/cloudflare/preview |
POST | cloudflare:read |
/api/v1/cloudflare/apply |
POST | cloudflare:write |
/api/v1/cloudflare/tokens |
GET | cloudflare:read |
/api/v1/cloudflare/tokens/{id} |
DELETE | cloudflare:delete |
Die Cloudflare-Endpoints folgen demselben Ablauf wie das Dashboard: Token validieren, Zonen auflisten, Domains verbinden, DNS-Änderungen in der Vorschau anzeigen und anschließend anwenden. Sowohl /cloudflare/preview als auch /cloudflare/apply akzeptieren zwei optionale Steuerungen pro Domain:
included_records, eine nach Domain-ID gegliederte Zulassungsliste der zu ändernden Einträge:{ "123": ["mx_primary", "spf_record"] }. Ausgelassene Einträge werden übersprungen. So können Sie nur MX und SPF anwenden und später zu DKIM zurückkehren. Lassen Sie das Feld aus, um alle Einträge anzuwenden.confirmed_conflicts: Wenn die Vorschau einen vorhandenen Eintrag mit einem anderen Wert meldet, führen Sie dessen Eintrags-ID hier auf (gleiche Form{ domain_id: [record_ids] }), um die Ersetzung zu genehmigen.
Die Eintrags-IDs (mx_primary, spf_record, dkim_primary, dmarc_main, …) stammen direkt aus der Vorschauantwort. Ein typischer Agent ruft daher zuerst die Vorschau auf und übergibt die gewünschten IDs anschließend an die Anwendung:
POST /api/v1/cloudflare/apply
{
"domain_ids": [123],
"included_records": { "123": ["mx_primary", "spf_record"] },
"confirmed_conflicts": { "123": ["dmarc_main"] }
}
SMTP-Routing pro Domain und Kontostandard
SMTP wird pro Domain konfiguriert. Jede Domain wählt eine von drei Routen: verwalteter Plattformversand, ein gespeichertes SMTP-Profil (Ihr eigener Anbieter, für mehrere Domains wiederverwendbar) oder „nicht konfiguriert“. Ein einziger kontoweiter Standard legt fest, mit welcher Route neue Domains beginnen.
Endpoints pro Domain (smtp:read / smtp:write):
| Endpoint | Methode | Funktion |
|---|---|---|
/api/v1/domains/{id}/smtp |
GET | Aktuelle Route: smtp_mode, effective_smtp_mode, profile, effective_profile |
/api/v1/domains/{id}/smtp |
PUT | Legt die Route fest, Body {smtp_mode: platform|profile|not_configured|inherit, smtp_connection_id?, set_account_default?, apply_to_all?} |
/api/v1/domains/{id}/smtp/profiles |
GET | Listet die gespeicherten SMTP-Profile des Kontos auf |
/api/v1/domains/{id}/smtp/profiles/{connectionId}/usage |
GET | Listet die genauen Domains und Send-As-Adressen auf, die ein Profil verwenden (keine Anmeldedaten) |
/api/v1/domains/{id}/smtp/profiles |
POST | Erstellt ein Profil und verwendet es für diese Domain |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
PUT | Aktualisiert ein Profil (betrifft jede Domain, die es verwendet) |
/api/v1/domains/{id}/smtp/profiles/{connectionId} |
DELETE | Löscht ein Profil (verwendende Domains werden dem Kontostandard zugewiesen) |
/api/v1/domains/{id}/smtp:test |
POST | Testet eine Route, gibt {job_id, poll_url} zurück |
/api/v1/domains/{id}/smtp:test-status/{jobId} |
GET | Fragt einen Testauftrag ab |
Hinweise zum Route-Body:
smtp_mode=platformwählt verwalteten Versand;smtp_mode=profileerfordertsmtp_connection_id;not_configuredlöscht die Route.- Mit
smtp_mode=inheritfolgt die Domain laufend dem Kontostandard: Ändert sich der Standard, ändert sich diese Domain ebenfalls. Die Weboberfläche schreibt immer konkrete Routen, das Backend unterstützt jedoch weiterhininherit. Deshalb gibtGETden Werteffective_smtp_modezurück, der zeigt, welchen Wertinheritderzeit ergibt. set_account_default: trueentspricht dem Schalter Make this the account default im Dashboard (neue Domains beginnen auf dieser Route).apply_to_all: trueentspricht der Schaltfläche Apply to all domains (einmaliges Umschalten aller Domains auf diese Route).
Endpoints für den kontoweiten Standard (smtp:read / smtp:write):
| Endpoint | Methode | Funktion |
|---|---|---|
/api/v1/smtp/default |
GET | Gibt default_smtp_mode (null, bis ein Wert festgelegt wird), effective_default_smtp_mode (der bei fehlender Einstellung verwendete Tarifbasiswert), default_smtp_connection_id und profile zurück |
/api/v1/smtp/default |
PUT | Legt den Standard fest, Body {smtp_mode: platform|profile|not_configured, smtp_connection_id?, apply_to_all?} |
Wird ein Profil gelöscht, das als Kontostandard diente, wird der Standard auf den Tarifbasiswert zurückgesetzt.
Veraltete Endpoints. Die GET-/PUT /api/v1/smtp-Endpoints auf Kontoebene (sowie DELETE /api/v1/smtp/{id}, POST /api/v1/smtp:test, GET /api/v1/smtp:test-status/{jobId}) bleiben aus Gründen der Abwärtskompatibilität erhalten, steuern aber nicht mehr das Routing pro Domain. Verwenden Sie die oben genannten Domain-Endpoints und /smtp/default. Die veralteten MCP-Werkzeuge get_smtp_config / update_smtp_config sind aus demselben Grund nicht mehr empfohlen.
White-Label-Branding, Kunden und Teamzugriff
Branding wird mit branding:read / branding:write pro Domain konfiguriert. Eine Domain verwendet eine eigene Marke (mode=custom), erbt den Kontostandard (mode=inherit) oder ist deaktiviert. Eine aktive White-Label-Testversion oder ein kostenpflichtiges Add-on ist erforderlich. Nach der Kündigung behält der Eigentümer während des angezeigten Kulanzzeitraums schreibgeschützten Wiederherstellungszugriff. Lesen Sie die dns_records der Domain und veröffentlichen Sie genau diese zurückgegebenen Einträge. Leiten Sie keine Hostnamen oder CNAME-Ziele aus einem Beispiel ab.
| Endpoint | Methode | Funktion |
|---|---|---|
/api/v1/domains/{id}/branding |
GET | Liest Branding: mode, white_label_addon_active, brand, hosts, die zu erstellenden dns_records, cname_target und mail_zone |
/api/v1/domains/{id}/branding |
PATCH | Aktualisierung durch teilweises Zusammenführen: mode, name, primary_color/accent_color, dashboard_enabled/dashboard_label, webmail_enabled/webmail_label, mail_zone_enabled, support_email, support_url, sender_email, scope |
/api/v1/domains/{id}/branding/logo/{slot} |
PUT | Lädt ein base64-Logo hoch (slot = light|dark|favicon; PNG/JPG, ICO für favicon, ≤1 MB, kein SVG). Der Standard scope=domain erfordert den Modus custom; ein expliziter scope=account_default für eine inherit-Domain erfordert ein uneingeschränktes Token. |
/api/v1/domains/{id}/branding/logo/{slot} |
DELETE | Entfernt einen Logo-Slot. Verwendet dieselben Domain-/Kontostandard-Bereichsregeln; DELETE akzeptiert scope als Abfrageparameter. |
/api/v1/domains/{id}/branding/verify-dns |
POST | Stellt die DNS-Prüfung für Markenhosts und die Mailzone der Marke in die Warteschlange |
/api/v1/domains/{id}/branding/preview |
POST | Erstellt eine kurzlebige Vorschau-URL (422 no_brand, wenn Branding noch nicht eingerichtet wurde) |
/api/v1/domains/{id}/branding?scope=domain|all |
DELETE | Löscht Branding für diese Domain oder das gesamte Konto |
PATCH führt teilweise zusammen, ausgelassene Felder bleiben also erhalten. Wenn Branding derzeit deaktiviert ist, übergeben Sie mode, um es wieder einzuschalten. Eine benutzerdefinierte sender_email muss zu einer Domain mit geprüftem DKIM-Schlüssel gehören. mail_zone_enabled stellt Mail-Apps und DAV-Synchronisierung unter der eigenen Domain der Marke bereit. Die Zone gehört zur Marke und nicht zu einer einzelnen Domain und benötigt daher mode=custom oder scope=account_default; eine inherit-Domain gibt 422 inherited_brand zurück. Lesen Sie mail_zone.dns_status, mail_zone.client_hosts_status, mail_zone.records, mail_zone.dav_url und mail_zone.dav_ready, um die Bereitstellung zu verfolgen und nur eine bereite DAV-Adresse zu verwenden. Den vollständigen Agentenablauf finden Sie im API- und MCP-Leitfaden für White-Label-Branding.
Die White-Label-Oberfläche auf Kontoebene ergänzt 13 Routen unter /api/v1/white-label: Status und Einrichtungsfortschritt, einen aktuellen Zugriffskatalog, Mitgliederliste und Lebenszyklusaktionen, Kontoaktivität sowie den Aktions- und Anmeldeverlauf pro Mitglied. Sie verwendet members:read, members:write und activity:read. Der Zugriff ist immer die Schnittmenge aus Kontoberechtigung, aktueller Mitgliedschaft der Person, Anmeldedatenfreigabe und einer möglichen Domainbeschränkung. Die Routentabelle und Zustandsübergänge finden Sie unter White-Label-Teams mit API und MCP verwalten.
Die OpenAPI-Spezifikation steht unter /api/openapi.json zum Import in Postman, Insomnia oder Codegeneratoren bereit.
Schnelle Lösungen
- 401 „unauthenticated“: Prüfen Sie, ob der Header
Authorization: Bearer <token>vorhanden ist und das Token nicht widerrufen oder abgelaufen ist. - 403 „plan_api_disabled“: Der angeforderte Bereich ist in Ihrem Tarif nicht enthalten. Nano umfasst Email Verifier (und Drive, wenn Sie das Drive-Storage-Add-on erworben haben). Wechseln Sie für den Rest der API zu Starter oder höher.
- 403 „token_scope_blocked_by_plan“: Ihr Token enthält Bereiche, die in Ihrem aktuellen Tarif nicht verfügbar sind. Widerrufen Sie es und erstellen Sie ein neues mit zulässigen Bereichen.
- 403 „scope_blocked_by_entitlement“: Eine gespeicherte White-Label-Freigabe ist nicht verfügbar, weil das Add-on inaktiv ist oder während der Kulanzzeit geschrieben werden soll. Reaktivieren Sie White Label und stellen oder autorisieren Sie die Anmeldedaten anschließend neu.
- 403 „scope_blocked_by_membership“: Die aktuelle Mitgliederrolle ist enger als die angeforderte Aktion. Bitten Sie den Eigentümer, sie zu ändern; eine erneute Autorisierung allein kann die Mitgliedschaft nicht erweitern.
- 422 „missing_idempotency_key“: Fügen Sie dem in der Endpoint-Referenz genannten Schreibvorgang einen
Idempotency-Key-Header hinzu. - 403 „mailbox_sending_paused“: Das Senden aus diesem Postfach wurde gestoppt, weil ausgehende E-Mails nicht mehr nach ihrem Eigentümer aussahen, meist weil ein Passwort in falsche Hände geraten ist. Lesen, Auflisten und alle anderen Endpoints funktionieren weiterhin; nur das Senden wird abgewiesen, und Wiederholungen beheben die Sperre nicht. Das Postfachpasswort muss geändert werden, danach schaltet der Support das Senden wieder ein. Siehe Warum kann ich keine E-Mails senden?.
- 429 Ratenlimit erreicht: Warten Sie die im
Retry-After-Header angegebene Dauer ab, bevor Sie es erneut versuchen.
E-Mails senden: Body, Header und Zustellbarkeit
POST /api/v1/messages/send akzeptiert die Anfrageform {to, subject, body: {text, html}, attachments, reply_to_message_id, headers}.
body.textundbody.htmlsind beide optional, aber mindestens eines ist erforderlich. Wenn Sie nurbody.textangeben, erzeugen wir automatisch eine HTML-Alternative mit<p>-Absätzen (Leerzeilen trennen Absätze, einzelne Zeilenumbrüche werden zu<br>), damit die Nachricht in jedem modernen Client als normale E-Mail dargestellt wird. Für Festbreitenschrift senden Sie das Literal<pre>...</pre>inbody.html.headersist ein optionales Objekt mit benutzerdefinierten ausgehenden Headern. Zulässig sindList-Unsubscribe,List-Unsubscribe-Post,Reply-Tound beliebige benutzerdefinierte Tracking-HeaderX-*. Andere Namen (From,Subject,Message-Id,Authentication-Resultsusw.) werden von der Plattform verwaltet und mit422abgelehnt. Werte mit CR/LF werden ebenfalls abgelehnt, um Header-Injektion zu verhindern. Werte sind gemäß RFC 2822 auf 998 Zeichen begrenzt.- Informationen für Massenversand und Automatisierung finden Sie im Abschnitt Zustellbarkeitsheader für Massenversender, einschließlich der Einrichtung von
List-Unsubscribeund des kontoweiten Schaltersauto_list_unsubscribe.
Verwandte Artikel
Springen Sie zu nahegelegenen Anleitungen, die den Workflow fortsetzen.