HTTP-API-Referenz
Sprachen und Fehlercodes
Englisch ist die Standardeinstellung. Die API, die Webkonsole und
die Benachrichtigungsrenderer nutzen die eingebetteten Kataloge in
internal/i18n/locales/ gemeinsam.
internal/i18n/languages.json definiert diese
kanonischen Codes und nativen Namen:
| Code | Sprache |
|---|---|
en |
English |
zh-CN |
简体中文 |
zh-Hant |
繁體中文 |
ja |
日本語 |
ko |
한국어 |
de |
Deutsch |
fr |
Français |
es |
Español |
pt-BR |
Português (Brasil) |
-
Beim ersten Besuch verwendet die Konsole den
Accept-Languagedes Browsers. Sein Selektor speichert den ausgewählten kanonischen Code lokal. Beim Wechseln der Konsolensprache bleiben gespeicherte Benachrichtigungseinstellungen unverändert. -
API-Anfragen, einschließlich App-Management-Anfragen, verhandeln
Accept-Languagenach Qualitätsgewichtungen. Zu den Antworten gehörenContent-LanguageundVary: Accept-Language. Nicht unterstützte Einstellungen werden übersprungen; Fehlende, ungültige oder völlig nicht unterstützte Einstellungen fallen aufenzurück. Eine Sprache mit Gewicht 0 ist von der Verhandlung ausgeschlossen. -
Regionale Varianten werden ihrer unterstützten Sprache zugeordnet:
fr-CA→fr,es-MX→es,pt/pt-PT→pt-BR. Chinesische Schrift wird respektiert:zh-Hans/zh-CN/zh-SG→zh-CN;zh-Hant/zh-TW/zh-HK/zh-MO→zh-Hant. Ein explizites Skript hat Vorrang vor der Region. plainzhverwendet vereinfachtes Chinesisch. -
GET /locales/default.jsonbedient den ausgehandelten Katalog;GET /locales/{canonical-code}.jsonbedient diesen Katalog explizit. Unbekannte Katalogpfade gebenlocale_not_supportedzurück. -
Zustellungseinstellungen
languagesteuert die vom Außenposten generierten Benachrichtigungen unabhängig von der Anfrage oder der Konsolensprache. Es akzeptiert die kanonischen Codes und unterstützten regionalen Varianten, behält den kanonischen Code bei und verwendet standardmäßigen, wenn es weggelassen oder leer ist. Ein nicht unterstützter expliziter Wert gibt 400config_language_invalidzurück. - Der Push-Zustelldienst generiert einen nativen Testbenachrichtigungstext in der Sprache des gekoppelten Geräts. Die Benachrichtigungssprache des Außenpostens überschreibt diese Sprache nicht. Der Push-Zustelldienst und die App unterstützen jeweils ihre eigenen Sprachen.
-
Standardordnerrollen und allgemeine Ordnernamen werden in der
Konsole lokalisiert. Rohe IMAP-Pfade, benutzerdefinierte Namen und
folder_rolesbleiben in APIs unverändert; Apps lokalisieren diese Rollen mit ihren eigenen Katalogen. Benachrichtigungstitel verwenden weiterhin den ursprünglichen Blattordnernamen. Vom Benutzer eingegebene Namen, E-Mail-Betreff, E-Mail-Inhalte und Bestätigungscodes bleiben wörtlich. -
Für Protokolle und CLI-Ausgaben wird Englisch verwendet.
Geschäftsfehler behalten stabile englische
snake_case-Codes und benannte Parameter bei; Der Speicher speichert Codes und Parameter und Anzeigeebenen übersetzen Nachrichten. Datumsangaben und Zahlen in API-Antworten behalten ihre bestehenden maschinenlesbaren Formate; Die Konsole formatiert Zeitstempel mit dem von ihr gewählten Gebietsschema.
{
"error": {
"code": "unauthorized",
"message": "Sign in with a valid session or API token."
}
}
last_error in Lieferdatensätzen und
notice im Ordnerstatus verwenden dieselbe
{code, message, params?}-Form, zum Beispiel
bark_http_error mit
{"status":"503"} . Zweig auf
code ; message anzeigen.
Jedes Postfach reserviert eine Verbindung für seine Ordnererkennung
und Verbindungstests. Die Beobachteranforderung beträgt
realtime Folder count + (1 if any scheduled Folders exist,
otherwise 0), höchstens connection_limit - 1-Verbindungen
(standardmäßig 9); Alle Vorgänge für dieses Postfach bleiben
zusammen innerhalb von connection_limit (2–100).
Gespeicherte Konfigurationen mit einem Limit von 1 Start im
Wiederherstellungsmodus mit configuration_invalid.
HTTP-API
GET / bedient die aktuelle Seite; Statische Assets und
/healthz sind öffentlich. Vor der Einrichtung gibt
jeder andere Verwaltungsendpunkt 403
setup_required zurück.
POST /api/v1/setup ist einmal verfügbar;
POST /api/v1/session ist nach der Einrichtung
öffentlich. Alle übrigen APIs erfordern das Sitzungscookie oder
Authorization: Bearer mwk_… .
Cookie-Sitzungen verwenden HttpOnly, SameSite=Strict, Path=/, Secure
auf einer TLS-Verbindung oder einem HTTPS-Ursprung, ein
Leerlauf-Timeout von sieben Tagen und ein absolutes Timeout von 30
Tagen. Jede Cookie-authentifizierte Mutation erfordert
X-CSRF-Token und einen HTTP(S) Origin,
dessen Host und optionaler Port genau mit dem Anforderungshost
übereinstimmen. Inhaberanfragen überspringen CSRF-Prüfungen. Ein
ungültiger Autorisierungsheader schlägt fehl, selbst wenn ein
gültiges Cookie vorhanden ist.
Anmelde- und Setup-Code-Fehler teilen sich ein Quell-Adress-Budget:
zehn Fehler pro 15 Minuten, gefolgt von 429
too_many_attempts mit Retry-After in
Sekunden. Die Quelle ist Gin ClientIP unter Verwendung der oben
genannten vertrauenswürdigen Proxy-Bereiche. Auch Passwortänderungen
verbrauchen dieses Budget. Explizite standortübergreifende Ursprünge
werden bei der Anmeldung und Einrichtung abgelehnt. Da jeder Peer im
privaten Netzwerk als Proxy vertrauenswürdig ist, kann ein Client in
Ihrem lokalen Netzwerk X-Forwarded-For festlegen und seine Versuche
auf viele Quelladressen verteilen. Setzen Sie den
Außenposten-Listener keinem nicht vertrauenswürdigen lokalen
Netzwerk aus; Veröffentlichen Sie es nur über Ihren Reverse-Proxy.
Alle JSON-Körper sind auf 64 KiB begrenzt; Unbekannte Felder oder
nachgestelltes JSON geben 400 zurück. Passwörter bestehen aus
mindestens 12 Zeichen und maximal 1024 UTF-8-Bytes. Benutzernamen
und Token-Namen sind 1–128 Byte lang. Alle Zeitstempel der
Verwaltungs-API sind RFC 3339-Zeichenfolgen in UTC, einschließlich
Lieferung created_at / accepted_at, Token
created_at / last_used_at,
Ordnerprüfungen, Protokollzeiten und Diagnosegenerierungszeit.
Sekundenbruchteile bewahren die gespeicherte Präzision. Das nicht
verwendete Token last_used_at ist null; Lieferungen
ohne Abnahme entfallen accepted_at. Anzahl, Dauer und
Revisionen bleiben Zahlen.
401 identifiziert eine ungültige Sitzung oder ein ungültiges
API-Token oder abgelehnte Anmeldeinformationen für
POST /api/v1/session. Ein falscher Setup-Code gibt 400
setup_code_invalid zurück; Der Assistent kehrt zum
Codeschritt zurück und behält den Benutzernamen bei. Ein falsches
aktuelles Passwort für PUT /api/v1/admin/password gibt
400 current_password_invalid zurück und zählt zur
Fehlergrenze; Die aktuelle Sitzung bleibt gültig. Anmeldefehler und
Fehler beim aktuellen Passwort werden im Formular angezeigt, wobei
die Eingaben erhalten bleiben.
| Verfahren | Weg | Anfrage/Antwort |
|---|---|---|
| POST | /api/v1/setup |
{ "code":"XXXX-XXXX-XXXX",
"username":"admin",
"password":"…" }
; 201, Cookie +
{ "csrf_token":"…" } ;
Setup wiederholen: 409
|
| POST | /api/v1/session |
{ "username":"admin",
"password":"…" }
; 200, Cookie + CSRF-Token
|
| GET | /api/v1/session |
{ "authenticated":true,
"csrf_token":"…" }
; Bearer gibt
method: "token" anstelle von CSRF
zurück
|
| DELETE | /api/v1/session |
204; widerruft die aktuelle Cookie-Sitzung; erfordert eine Sitzung |
| PUT | /api/v1/admin/password |
{ "current_password":"…",
"password":"…" }
; 204, widerruft andere Sitzungen; Der Inhaber widerruft
alle Sitzungen
|
| POST | /api/v1/tokens |
{ "name":"automation" } ;
201,
{ "id":"…",
"name":"…",
"created_at":"2026-09-29T01:02:03Z",
"last_used_at":null,
"token":"mwk_…" }
|
| GET | /api/v1/tokens |
{ "tokens":[…] } ; Nur Metadaten
|
| DELETE | /api/v1/tokens/:id |
204; widerruft einen Token; Wiederholtes Löschen gibt ebenfalls 204 zurück |
| GET | /api/v1/mailboxes |
{ "mailboxes":[…] } ; geschwärzte
Postfachansichten
|
| POST | /api/v1/mailboxes |
Erstellen Sie mit dem untenstehenden Postfachformular; 201,
redigierte Ansicht mit generiertem id und
Revision 1
|
| GET / PUT / DELETE | /api/v1/mailboxes/:id |
Lesen/Aktualisieren mit aktueller Revision/Löschen (204);
Fehlende ID gibt 404 mailbox_not_found zurück
|
| POST | /api/v1/mailboxes/test |
Testen Sie ein nicht gespeichertes Formular. gibt
{ "folders":[…] } zurück, behält die
Konfiguration unverändert bei
|
| POST | /api/v1/mailboxes/:id/test |
Testen Sie das Formular mit ausgelassenen Anmeldeinformationen, die aus diesem Postfach zusammengeführt wurden |
| GET | /api/v1/mailboxes/:id/folders |
Entdecken Sie auswählbare Ordner mit dem Budget dieses Postfachs |
| GET / PUT | /api/v1/mailboxes/:id/subscriptions |
Abonnements mit ihrer eigenen Revision lesen/speichern; Erfolgreiches Speichern gibt 202 zurück |
| GET / PUT | /api/v1/settings/delivery |
Globale Liefereinstellungen mit eigener Revision lesen/speichern |
| DELETE | /api/v1/settings/delivery |
Löschen Sie gespeicherte Kanäle und Anmeldeinformationen mit
{revision}. 204, veraltete Revision 409
|
| POST | /api/v1/settings/delivery/test |
Testen Sie das Lieferformular mit zusammengeführten gespeicherten Anmeldeinformationen. 204, Konfiguration unverändert |
| GET | /api/v1/status |
Ordnerstatus, Kanal, Zustellungsanzahl und Benachrichtigungen zum Gültigkeitsbereich |
| GET | /api/v1/diagnostics |
Laden Sie einen redigierten JSON-Bericht ohne Laufzeitprotokolle herunter |
| GET | /api/v1/logs |
Authentifizierte Betriebsprotokolle; Filter
after, level,
mailbox_id, limit (siehe unten)
|
| GET | /api/v1/deliveries |
Die letzten 50 Zustellungsdatensätze, einschließlich Betreff und Postfach-/Ordnerübersicht |
| POST | /api/v1/test-push |
Senden Sie einen Test mit gespeicherten Einstellungen. 204 bei Annahme, Konfiguration unverändert |
| POST | /api/v1/deliveries/:id/retry |
Eine dead-Aufgabe erneut in die Warteschlange
stellen; 202
|
Zustellungsdatensätze enthalten ein optionales
message-Objekt: mailbox_id,
mailbox_label, folder,
subject (Zeichenfolge oder Null) und
test (boolean). Namen sind Schnappschüsse aus der Zeit,
in der sie in die Warteschlange gestellt werden, und überdauern das
Umbenennen oder Löschen von Postfächern. Ein Nullsubjekt bedeutet,
dass es nicht beibehalten wurde; Eine leere Zeichenfolge bedeutet,
dass die E-Mail keinen Betreff hatte. Testbenachrichtigungen haben
test=true und keine Postfachquelle. Die API lässt
Absender und Text in dieser Zusammenfassung weg.
Beispiel für die Postfacherstellung:
{
"label": "Work mailbox",
"host": "imap.example.org",
"port": 993,
"username": "user@example.org",
"password": "…",
"connection_limit": 10
}
Der Außenposten erlaubt höchstens 20 gespeicherte Postfächer,
einschließlich ungültiger Konfigurationen, die auf eine Reparatur
warten; Die nächste Erstellung gibt 400
mailbox_limit_exceeded zurück. IDs werden als
mbx_ plus einer zufälligen Zeichenfolge generiert und
bleiben stabil. label verwendet standardmäßig den
Benutzernamen (E-Mail-Adresse), erlaubt höchstens 64 Unicode-Zeichen
und lehnt Zeilenumbrüche ab. Ein Benutzername mit mehr als 64
Zeichen benötigt eine explizite kürzere Bezeichnung. Ausgelassene
Beschriftungen bei der Aktualisierung behalten den gespeicherten
Wert; ein leeres Label verwendet den übermittelten Benutzernamen.
Das Postfach PUT verwendet das gleiche Formular plus
"revision":1 (den aus GET gelesenen Wert) und
erfordert Host, Port und Benutzernamen. Bei unverändertem Host, Port
und Benutzernamen bleibt ein weggelassenes Passwort erhalten; ein
explizit leeres Passwort wird abgelehnt. Weggelassen
connection_limit behält den aktuellen Wert; Neue
Postfächer sind standardmäßig 10, Bereich 2–100. Bei der Erstellung
von POST wird die Revision weggelassen oder 0 gesendet. Testrouten
akzeptieren dieselben Felder, ohne dass eine Revision erforderlich
ist, und behalten die Konfiguration unverändert bei. Für den nicht
gespeicherten Test sind Anmeldeinformationen erforderlich. Der Test
für gespeicherte Postfächer führt ausgelassene Anmeldeinformationen
nur von der angegebenen ID zusammen.
Eine Postfach-GET-Ansicht umfasst id,
label, revision, host,
port, username,
connection_limit, connections_in_use und
"password":{"configured":true}. Ein
wiederhergestelltes ungültiges Postfach meldet
configured:false und behält seine ID und Revision,
damit es repariert werden kann. Das Kennwortobjekt GET ist eine
Ansicht, kein gültiger Schreibwert.
Jedes Postfach verfügt über ein unabhängiges Verbindungsbudget.
Echtzeitordner belegen jeweils einen Steckplatz. Alle seine
geplanten Ordner verbrauchen zusammen einen. Ihr kombinierter Bedarf
muss in connection_limit - 1 passen und einen
Steckplatz für die Verwaltung reservieren. Das Abonnement PUT und
die Änderungen an der Postfachbegrenzung erzwingen diese Formel.
Erschöpfte Kapazität gibt
connection_budget_exceeded zurück. Das Testen eines
nicht gespeicherten Postfachs verbraucht ein temporäres Budget. Die
nicht gespeicherten Test-, gespeicherten Postfachtest- und
Ordnererkennungsendpunkte haben außerdem ein gemeinsames globales
Parallelitätslimit von 2; Überzählige Anfragen geben sofort 429
discovery_busy zurück. Bei Abschluss oder Absage
entfällt die Zulassung.
Auslieferungsbeispiel PUT für einen zunächst unkonfigurierten Kanal:
{
"revision": 0,
"channel": "bark",
"preview": "off",
"retry_count": 0,
"language": "en",
"bark": { "endpoint": "https://api.day.app", "key": "…" }
}
Lesen Sie /settings/delivery vor jedem Update und
senden Sie die Revision; Beim ersten Speichern geht es von 0 auf 1.
Pushover verwendet
"pushover":{"token":"…","user":"…"}; Webhook verwendet
"webhook":{"url":"https://hooks.example.org/mail","secret":"…"}
. Kanal, Vorschau und Überarbeitung sind erforderlich. Ausgelassene
Sprache und Wiederholungsanzahl verwenden Standardwerte. Bei
unverändertem Ziel bleiben ausgelassene Zugangsdaten einschließlich
der Webhook-URL erhalten; Ein explizit leerer aktiver
Berechtigungsnachweis wird abgelehnt. GET ersetzt alle
Anmeldeinformationen durch
{"configured":true|false}. Der separate
Testendpunkt erfordert keine Überarbeitung.
Beim Erstellen und Ändern von Postfächern wird die
Verbindung/Anmeldung vor dem Speichern getestet. Wenn Host, Port,
Benutzername und Verbindungslimit (connection_limit) mit den
gespeicherten Werten übereinstimmen und das Passwort weggelassen
wird, ändert PUT nur die Bezeichnung: Revisionsprüfung und
Persistenz gelten weiterhin, während Tests und Watcher-Ersetzung
übersprungen werden. Aufgaben in der Warteschlange behalten ihre
ursprüngliche Bezeichnung; Zukünftige Aufgaben verwenden das neue
Label. Das Erstellen oder Aktualisieren einer Identität, die bereits
von einem anderen Postfach verwendet wird, gibt 409
mailbox_duplicate zurück (Host- und Benutzername werden
ohne Berücksichtigung der Groß- und Kleinschreibung verglichen, Port
genau); Durch die gleichzeitige Erstellung kann diese Identität nur
einmal gespeichert werden. Die Lieferung PUT speichert alle Kanäle
nach Feld, Adresse, ausgewähltem Paarungsstatus und
Revisionsvalidierung, ohne einen Test zu senden oder einen Anbieter
zu kontaktieren. Bei expliziten Zustellungstests bleiben die
gespeicherten Einstellungen unverändert; Ihr Scheitern blockiert
nicht eine spätere Speicherung. Postfachtests werden außerhalb von
Konfigurationssperren ausgeführt und halten vorhandene Beobachter
aktiv; Bei einem fehlgeschlagenen Postfachtest bleibt die vorherige
Konfiguration erhalten. Veraltete Einstellungsrevisionen geben 409
settings_conflict zurück; Eine Abonnementänderung
während eines Postfachtests macht auch den Snapshot dieses Tests
ungültig. Laden Sie es erneut, bevor Sie es erneut versuchen. Jedes
Postfach und die globalen Zustellungseinstellungen verfügen über
unabhängige Revisionen, sodass Änderungen an verschiedenen
Postfächern oder an einem Postfach und der Zustellung nicht zu
Konflikten führen.
Ein erfolgreicher PUT gibt die redigierte Ansicht zurück und wird sofort angewendet. Eine Änderung der Postfachverbindung stoppt die eigenen Beobachter vor dem Speichern und dem optionalen Zurücksetzen des Cursors. ein fehlgeschlagener Speichervorgang stellt sie wieder her. Andere Postfächer laufen weiter. Bei Zustellungsänderungen bleibt die Momentaufnahme eines Flugversuchs erhalten; Nachfolgende Versuche verwenden das neue. Ausstehende Aufgaben warten, während die Zustellung nicht konfiguriert ist.
GET /api/v1/mailboxes/:id/subscriptions gibt
{"revision":1,"folders":[{"name":"INBOX","check":"realtime"},{"name":"Clients","check":"5m"}]}
zurück. PUT sendet die gelesene Revision und das komplette
folders-Array; Ein leeres Array meldet sich von allem
ab. Namen sind innerhalb jedes Postfachs eindeutig, INBOX ist
normalisiert und jeder Name umfasst höchstens 4096 UTF-8-Bytes. Für
jeden Ordner sind name und
check erforderlich. Die Prüfung lautet
realtime, 5m oder 15m.
Fehlende/ungültige Prüfungen und das vorherige String-Array-Format
geben 400 zurück. Die obige Formel für den Verbindungsbedarf ersetzt
die Begrenzung der Ordneranzahl. Wenn Sie nur die Prüfung ändern,
bleibt der Fortschritt erhalten, neue E-Mails werden abgerufen und
vorhandene Ereignis-IDs bleiben erhalten. Durch das Kündigen und
spätere erneute Abonnieren entsteht eine neue Grundlinie. Alle
Felder sind Pflichtfelder. Beim Speichern wird bei der nächsten
Revision 202 zurückgegeben; Veraltete Revisionen geben 409
subscriptions_conflict zurück. Das Vorhandensein des
Ordners wird vom Watcher bestätigt, sodass Abonnements entfernt
werden können, während das Postfach offline ist. Speicherfehler
geben 503 zurück und behalten aktuelle Abonnements bei.
Zu jedem /status.folders[]-Artikel gehören
mailbox_id, mailbox_label und
check. mode ist idle,
poll oder scheduled; Zu den geplanten
Ordnern gehört auch next_check (RFC 3339-Zeit,
einschließlich Wiederholungszeiten). Echtzeitordner lassen
next_check weg. Gespeicherte Konfigurationen, die die
JSON- oder Modellvalidierung nicht bestehen, werden dekonfiguriert,
mit configuration_invalid in
/status.notices unter
mailbox:<id> oder delivery; PUT
repariert diesen Artikel. Überschüssige Abonnements pausieren nur
dieses Postfach und melden
connection_budget_exceeded unter
subscriptions:<id>. Durch die Reduzierung der
Abonnements oder die Erhöhung des Limits wird die Überwachung wieder
aufgenommen. Entschlüsselungsfehler stoppen den Start.
Die Diagnose-Zulassungsliste enthält Generierungszeit,
Build-/Go-/Plattforminformationen, Warteschlangenanzahl sowie
anonyme Postfach- und Watcher-Status, einschließlich
check und mode.
mailboxes[].index und
watches[].mailbox_index identifizieren „Mailbox 1“,
„Mailbox 2“ usw. in diesem Bericht; Die Beobachter jedes Postfachs
haben ihren eigenen index . Postfacheinträge enthalten
Konfigurations-/Abonnementbenachrichtigungscodes. Nur
imap_folder_rejected kann
watches[].response_code enthalten. Der Bericht lässt
Postfach-IDs, Anzeigenamen, Adressen, Servernamen, Ordnernamen,
Nachrichtendaten, Aufgaben-IDs, Anmeldeinformationen und alle
anderen Fehlerparameter weg.
Aufgabenstatus: pending wartet auf eine Anfrage,
accepted bedeutet, dass der Kanal die Anfrage
akzeptiert hat, dead bedeutet, dass der Versuch mit
einem aufgezeichneten Fehler endete.
Laufzeitprotokolle
Verwenden Sie docker compose logs -f core (oder
docker logs <container>) für die
JSON-Stdderr-Ausgabe. Authentifizierte Clients können dieselben
Betriebsereignisse über
GET
/api/v1/logs?after=0&level=info&mailbox_id=mbx_example&limit=200
abfragen. Es ist ein Sitzungscookie oder API-Token erforderlich.
Der In-Memory-Ring speichert die neuesten
2000 Info-/Warn-/Fehlereinträge und löscht sie beim
Neustart. after ist eine exklusive nichtnegative
Sequenz; level wählt diese Stufe und höher aus
(info-Standardeinstellung); weggelassen
mailbox_id umfasst alle Postfächer und globalen
Vorgänge. limit ist standardmäßig 200, Bereich 1–500.
Ungültige Parameter geben 400
logs_request_invalid zurück.
{
"entries": [
{
"seq": 42,
"time": "2026-09-29T00:00:00Z",
"level": "info",
"message": "Folder connection established",
"attrs": {
"mailbox_id": "mbx_example",
"folder": "INBOX",
"mode": "idle",
"check": "realtime"
}
}
],
"next": 42,
"cleared_through": 0
}
Verwenden Sie next als after der nächsten
Anfrage. Am Seitenlimit ist es die letzte zurückgegebene Sequenz;
Nach dem Scannen des Snapshots geht es zum Snapshot-Ende über, auch
wenn die Filter keine Übereinstimmung ergeben. Bereinigte Einträge
werden übersprungen. Wenn der Neustart
next < after zurückgibt, setzen Sie den Cursor auf 0
zurück. Die Einträge werden nach Reihenfolge sortiert.
Die Protokolle umfassen Postfach- und Ordner-Lebenszyklen,
Basis-/Warteschlangenanzahl, Zustellungsversuche,
Konfigurationsänderungen und Administratoraktionen. Globale
Ereignisse verwenden ein leeres mailbox_id . Nur diese
Skalarattribute werden angezeigt: mailbox_id,
folder, mode, check,
code, event_id, channel,
attempt, duration_ms.
http_status, next_attempt,
backoff_seconds, count,
revision, token_id, version,
listen, request_id, method,
route, stage, outcome,
cause_code, response_code.
http_status=0 bedeutet, dass keine HTTP-Antwort
empfangen wurde; token_id ist eine öffentliche
Datensatzkennung, nicht der Tokenwert. Passwörter,
Token-/Sitzungswerte, Setup-Codes, Absender, Betreff, Textkörper und
Anmeldeinformations-URLs werden weggelassen. Die Setup-Code-Zeile
geht nur an die Konsole. Protokolle enthalten Ordnernamen; Der
anonyme Diagnoseexport schließt Protokolle und Namen aus.
Ordnererkennungs- und Administrator-Postfachtests geben
folders als ursprüngliches Pfadarray sowie optional
folder_roles zurück, eine Zuordnung vom Pfad zu
inbox, drafts, sent,
trash, junk, archive,
all oder flagged . Rollen stammen aus IMAP
SPECIAL-USE-Attributen; INBOX wird anhand seines
protokolldefinierten Namens erkannt. Wenn keine Rollen vorhanden
sind, greift die Web-Benutzeroberfläche auf exakte Übereinstimmungen
ohne Berücksichtigung der Groß- und Kleinschreibung für
gebräuchliche englische Ordnernamen zurück. Übersetzte Namen zeigen
den ursprünglichen Pfad in Klammern; andere Namen bleiben
unverändert. Durch Anzeigeübersetzungen werden die Abonnementpfade
nie geändert. Benachrichtigungstitel verwenden das letzte Segment
der durch Schrägstriche getrennten Ordnerpfade; Strukturierte
Ordnerfelder behalten den vollständigen Pfad. App-Postfachtests
geben weiterhin nur den Verbindungsstatus zurück.
GET /api/v1/session enthält username für
eine authentifizierte Cookie-Sitzung. Die Token-Authentifizierung
behält ihre bestehende Antwort.
App-Empfangsgerät
Zu den Liefereinstellungen gehört native_pairing_id.
Wählen Sie für den Kanal native eine aktive Paarung aus
/api/v1/native/devices aus. Sowohl
Testbenachrichtigungen als auch neue Ereignisse zielen nur auf diese
Paarung ab. Wenn Sie das Feld bei einer Aktualisierung weglassen,
bleibt die gespeicherte Auswahl erhalten. Eine leere Auswahl gibt
native_target_required zurück. Eine nicht verfügbare
Auswahl gibt native_target_unavailable zurück. Durch
das Widerrufen der ausgewählten nativen Paarung werden Kanal und
native_pairing_id atomar gelöscht und die Revision einmal erhöht.
Andere Ziele und Kanäle bleiben erhalten. Bestehende Lieferungen
behalten ihr Ziel und Widerrufsergebnis. Informationen zu Timing,
Parallelität und Neustartverhalten finden Sie unter
Pairing-Synchronisation.
Die App-Autorisierung verwaltet die Administration und die Push-Berechtigung unabhängig voneinander. Wenn Sie eine der Berechtigungen widerrufen, bleibt die andere unverändert.
Native Testbenachrichtigungen
Der Außenposten verwendet signiertes
POST /v1/pairing-tests mit
{pairing_id,test_id} (eine neue UUID pro explizitem
Test). Der Push-Zustelldienst generiert feste Inhalte und
übermittelt sie synchron an APNs, ohne dass eine Native
Push-Berechtigung erforderlich ist. Formulartests, Tests mit
gespeicherten App-Einstellungen und
/api/v1/test-push verwenden denselben Pfad. Tests sind
vom E-Mail-Postausgang getrennt und haben keine automatischen
Zustellungswiederholungen.
Der Außenposten gibt HTTP 204 nur zurück, wenn der
Push-Zustelldienst accepted meldet. APNs-Ablehnung,
unbekannte Ergebnisse und sending geben einen
lokalisierten Fehler zurück; Durch die Ratenbegrenzung des
Push-Zustelldienstes gibt der Außenposten HTTP 429 mit
Retry-After zurück. Zu den sicheren Protokollen gehören
der HTTP-Status des Push-Zustelldienstes und der stabile Fehlercode,
ausgenommen Antworttexte, Token und Benachrichtigungsinhalte. Der
Außenposten und die App teilen sich die vorhandenen Tageskontingente
pro Gerät, Minute und Betreff sowie die
(device_id,test_id)-Idempotenz des
Push-Zustelldienstes. Ein Benutzer, der einen anderen Test startet,
erstellt eine neue Test-ID.
Formale E-Mails verwenden /v1/push und bleiben
unabhängig von der Ereignis-ID oder den Client-Testflags
berechtigungsgeschützt. Stellen Sie die
Push-Delivery-Service-Pairing-Test-Route vor dieser
Außenposten-Version bereit; Der Außenposten greift nicht auf die
Zustellung bezahlter Post zurück.
Löschen Sie den Lieferverlauf und die Laufzeitprotokolle
-
DELETE /api/v1/deliveriesgibt200 {"deleted":N}zurück. Es entfernt abgeschlossene Datensätze (accepted/dead) dauerhaft im gesamten Verlauf, einschließlich der zugehörigen nativen Datensätze. Ausstehende Übermittlungen/Wiederholungsversuche, native Datensätze, die noch ausstehen/in der Warteschlange stehen/gesendet werden oder für Statusprüfungen geplant sind, und ausstehende native Aktivitätsaktualisierungen werden beibehalten. Durch das Löschen von Fehlern wird die manuelle Wiederholungsoption entfernt. Postfachprüfpunkte und -konfiguration bleiben erhalten. -
DELETE /api/v1/logsgibt200 {"cleared_through":N}zurück und löscht den gemeinsamen In-Memory-Ring für alle Ebenen und Postfächer. Die Sequenznummern nehmen weiter zu; stderr/container-Protokolle und exportierte Dateien bleiben erhalten.GET /api/v1/logsgibt auchcleared_throughzurück; Clients verwerfen zwischengespeicherte Einträge mitseq <= cleared_through, bevor sie die zurückgegebenen Einträge anhängen. - Für beide Endpunkte ist eine Administratorsitzung + Origin/CSRF oder ein Administrator-API-Token erforderlich. Mit den Anmeldeinformationen des App-Geräts sind diese Vorgänge nicht möglich. Wiederholtes Löschen ist sicher; Nach dem Vorgang können neue Arbeits- und Protokolleinträge erscheinen.
Inhalt der App-Nachricht
POST /api/v1/app/content verwendet einen
gerätegebundenen Controller-Zugang und den vom Eigentümer gewährten
content-Scope. Senden Sie
{ "reference": <message_ref> }; die
Antwort enthält text, truncated, optional
bereinigtes html und has_remote_images.
Das Lesen ist kostenlos.
Sobald der Text lesbar ist, markiert
POST /api/v1/app/content/read mit demselben Zugang,
Scope und Verweis die Nachricht im Postfach als gelesen. Erfolg
liefert 204 No Content und
Cache-Control: no-store. Der reine Abruf des Inhalts
erhält den Lesestatus. Beide Vorgänge prüfen die aktuelle
Berechtigung, den abonnierten Ordner, die Postfachidentität und den
Nachrichtenverweis.
Zielbindung der Zugangsdaten
Bei Tests und beim Speichern erfordert eine Änderung von
host, port oder username die
erneute Eingabe des gespeicherten Postfachpassworts; andernfalls
folgt 400 mailbox_password_required_for_change. Eine
Änderung der gespeicherten Bark-Adresse erfordert den
Geräteschlüssel, auch wenn ein anderer Kanal ausgewählt ist;
andernfalls folgt 400 bark_key_required_for_change.
Port, Pfad und abschließender Schrägstrich gehören zur Adresse.
Abgelehnte Anfragen öffnen keine Verbindung und erhalten
Konfiguration und Revision.
Diagnose von App-Anfragen
Diagnoseexporte verwenden schema_version: 2.
app_requests enthält bis zu 300 kürzlich abgeschlossene
App-Anfragen aus dem gemeinsamen Speicherprotokoll mit 2000
Einträgen: Zeit, serverseitige request_id (auch in
X-Request-ID), Routenvorlage, Methode, HTTP-Status,
Dauer, Phase, Ergebnis und sichere Fehlercodes. Ressourcen-IDs,
Abfrageparameter, Zugangsdaten, signierte Referenzen,
Nachrichteninhalte und vollständige Laufzeitprotokolle bleiben
ausgeschlossen. Neustart und Protokolllöschung entfernen die
Einträge; andere Ereignisse können ältere Anfragen verdrängen. Der
Download aktualisiert den Bericht zuerst. Anfragen, die den Server
nicht erreichen, benötigen App-Diagnosen.
POST /api/v1/app/content/read prüft UID und Flags.
Bereits gelesene Nachrichten sind erfolgreich; ungelesene werden
markiert und erneut geprüft. STORE OK allein beweist keine Existenz.
Fehlende UID, geänderte UIDVALIDITY oder ausdrücklich fehlender
Ordner ergeben 404, Anbieter- oder Berechtigungsfehler 503 und
Zeitüberschreitungen 504. Zwischengespeicherte Inhalte bleiben bei
ungültiger Remote-Referenz lesbar.
Markdown · AGPL-3.0-only · Mailwake-Mitwirkende