[{"data":1,"prerenderedAt":719},["ShallowReactive",2],{"search-de":3,"content-de-api\u002Fpublic-endpoints":4,"surround-de-\u002Fapi\u002Fpublic-endpoints":712},[],{"id":5,"title":6,"body":7,"description":13,"extension":705,"meta":706,"navigation":707,"path":708,"seo":709,"stem":710,"__hash__":711},"content_de\u002F2.api\u002F11.public-endpoints.md","Öffentliche Endpunkte",{"type":8,"value":9,"toc":693},"minimark",[10,14,19,29,33,47,51,65,69,81,85,97,101,108,112,120,123,136,243,249,257,324,331,335,343,346,351,360,448,454,468,527,539,598,626,633,637,640,662,674,678,689],[11,12,13],"p",{},"Diese Routen sind öffentlich zugänglich und werden üblicherweise über Links in E-Mails oder eingebettete Formulare aufgerufen.",[15,16,18],"h2",{"id":17},"health-check","Health-Check",[20,21,22],"ul",{},[23,24,25],"li",{},[26,27,28],"code",{},"GET \u002Fapi\u002Fv1\u002Fhealth",[15,30,32],{"id":31},"tracking","Tracking",[20,34,35,41],{},[23,36,37,40],{},[26,38,39],{},"GET \u002Ft\u002Fo\u002F:emailSendId"," (Öffnungs-Pixel)",[23,42,43,46],{},[26,44,45],{},"GET \u002Ft\u002Fc\u002F:emailSendId\u002F:encodedUrl"," (Klick-Weiterleitung + Tracking)",[15,48,50],{"id":49},"abmeldung","Abmeldung",[20,52,53,59],{},[23,54,55,58],{},[26,56,57],{},"POST \u002Funsub\u002F:token"," (One-Click-Abmeldung nach RFC 8058)",[23,60,61,64],{},[26,62,63],{},"GET \u002Funsub\u002Fverify\u002F:token"," (Token validieren und Seitenkontext abrufen)",[15,66,68],{"id":67},"präferenzcenter","Präferenzcenter",[20,70,71,76],{},[23,72,73],{},[26,74,75],{},"GET \u002Fprefs\u002Fverify\u002F:token",[23,77,78],{},[26,79,80],{},"POST \u002Fprefs\u002Fupdate\u002F:token",[15,82,84],{"id":83},"double-opt-in-für-kontakte","Double Opt-in für Kontakte",[20,86,87,92],{},[23,88,89],{},[26,90,91],{},"GET \u002Fconfirm\u002Fdoi\u002Fverify?token=...",[23,93,94],{},[26,95,96],{},"POST \u002Fconfirm\u002Fdoi?token=...",[15,98,100],{"id":99},"formularübermittlung","Formularübermittlung",[20,102,103],{},[23,104,105],{},[26,106,107],{},"POST \u002Fforms\u002F:formId",[15,109,111],{"id":110},"kampagnen-archiv","Kampagnen-Archiv",[20,113,114],{},[23,115,116,119],{},[26,117,118],{},"GET \u002Farchive\u002F:token"," — liefert den archivierten HTML-Snapshot einer versendeten Kampagne",[11,121,122],{},"Öffentlicher Endpunkt für „Im Browser ansehen“-Links. Liefert den Kampagneninhalt so, wie er zum Sendezeitpunkt aussah.",[11,124,125,131,132,135],{},[126,127,128],"strong",{},[26,129,130],{},"200 OK"," — Erfolgs-Bodys verwenden den Action-Mode-Envelope ",[26,133,134],{},"{ \"ok\": true, \"data\": { ... } }",":",[137,138,143],"pre",{"className":139,"code":140,"language":141,"meta":142,"style":142},"language-json shiki shiki-themes github-light github-dark-dimmed","{\n  \"ok\": true,\n  \"data\": {\n    \"html\": \"\u003Chtml>...\u003C\u002Fhtml>\",\n    \"subject\": \"Our biggest sale of the year\",\n    \"sentAt\": 1741616400000,\n    \"organizationName\": \"Acme Inc.\"\n  }\n}\n","json","",[26,144,145,154,171,180,194,207,220,231,237],{"__ignoreMap":142},[146,147,150],"span",{"class":148,"line":149},"line",1,[146,151,153],{"class":152},"sYgZi","{\n",[146,155,157,161,164,168],{"class":148,"line":156},2,[146,158,160],{"class":159},"snmFh","  \"ok\"",[146,162,163],{"class":152},": ",[146,165,167],{"class":166},"sviXB","true",[146,169,170],{"class":152},",\n",[146,172,174,177],{"class":148,"line":173},3,[146,175,176],{"class":159},"  \"data\"",[146,178,179],{"class":152},": {\n",[146,181,183,186,188,192],{"class":148,"line":182},4,[146,184,185],{"class":159},"    \"html\"",[146,187,163],{"class":152},[146,189,191],{"class":190},"s-HuK","\"\u003Chtml>...\u003C\u002Fhtml>\"",[146,193,170],{"class":152},[146,195,197,200,202,205],{"class":148,"line":196},5,[146,198,199],{"class":159},"    \"subject\"",[146,201,163],{"class":152},[146,203,204],{"class":190},"\"Our biggest sale of the year\"",[146,206,170],{"class":152},[146,208,210,213,215,218],{"class":148,"line":209},6,[146,211,212],{"class":159},"    \"sentAt\"",[146,214,163],{"class":152},[146,216,217],{"class":166},"1741616400000",[146,219,170],{"class":152},[146,221,223,226,228],{"class":148,"line":222},7,[146,224,225],{"class":159},"    \"organizationName\"",[146,227,163],{"class":152},[146,229,230],{"class":190},"\"Acme Inc.\"\n",[146,232,234],{"class":148,"line":233},8,[146,235,236],{"class":152},"  }\n",[146,238,240],{"class":148,"line":239},9,[146,241,242],{"class":152},"}\n",[11,244,245,248],{},[26,246,247],{},"sentAt"," ist ein Unix-Zeitstempel in Millisekunden (eine Zahl), kein ISO-String.",[11,250,251,256],{},[126,252,253],{},[26,254,255],{},"404 Not Found"," — das Token passt zu keiner archivierten Kampagne. Fehlschläge verwenden den festgelegten Fehler-Envelope:",[137,258,260],{"className":139,"code":259,"language":141,"meta":142,"style":142},"{\n  \"error\": {\n    \"category\": \"not_found\",\n    \"message\": \"Archive not found\",\n    \"data\": { \"reason\": \"archive_not_found\" }\n  }\n}\n",[26,261,262,266,273,285,297,316,320],{"__ignoreMap":142},[146,263,264],{"class":148,"line":149},[146,265,153],{"class":152},[146,267,268,271],{"class":148,"line":156},[146,269,270],{"class":159},"  \"error\"",[146,272,179],{"class":152},[146,274,275,278,280,283],{"class":148,"line":173},[146,276,277],{"class":159},"    \"category\"",[146,279,163],{"class":152},[146,281,282],{"class":190},"\"not_found\"",[146,284,170],{"class":152},[146,286,287,290,292,295],{"class":148,"line":182},[146,288,289],{"class":159},"    \"message\"",[146,291,163],{"class":152},[146,293,294],{"class":190},"\"Archive not found\"",[146,296,170],{"class":152},[146,298,299,302,305,308,310,313],{"class":148,"line":196},[146,300,301],{"class":159},"    \"data\"",[146,303,304],{"class":152},": { ",[146,306,307],{"class":159},"\"reason\"",[146,309,163],{"class":152},[146,311,312],{"class":190},"\"archive_not_found\"",[146,314,315],{"class":152}," }\n",[146,317,318],{"class":148,"line":209},[146,319,236],{"class":152},[146,321,322],{"class":148,"line":222},[146,323,242],{"class":152},[11,325,326,327,330],{},"Das Archiv-Token ist pro Kampagne eindeutig und im „Im Browser ansehen“-Link der E-Mail enthalten. Archiv-Endpunkte sind rate-limitiert und CORS-fähig. Erfolgreiche Antworten setzen ",[26,328,329],{},"Cache-Control: public, max-age=3600",".",[15,332,334],{"id":333},"vorschau-über-freigabelink","Vorschau über Freigabelink",[20,336,337],{},[23,338,339,342],{},[26,340,341],{},"GET \u002Fshare\u002F:token"," — liefert den HTML-Snapshot einer freigegebenen Vorschau einer E-Mail-Vorlage",[11,344,345],{},"Öffentlicher Endpunkt für ablaufende Freigabelinks, die im E-Mail-Editor erstellt wurden. Liefert den E-Mail-Inhalt so, wie er beim Erstellen des Links aussah. Links laufen nach 48 Stunden ab.",[11,347,348],{},[126,349,350],{},"Antworten:",[20,352,353],{},[23,354,355,357,358,135],{},[26,356,130],{}," — gültiger Freigabelink. Erfolgs-Bodys verwenden den Action-Mode-Envelope ",[26,359,134],{},[137,361,363],{"className":139,"code":362,"language":141,"meta":142,"style":142},"{\n  \"ok\": true,\n  \"data\": {\n    \"html\": \"\u003Chtml>...\u003C\u002Fhtml>\",\n    \"subject\": \"Welcome to our product\",\n    \"previewText\": \"Here's what you need to know\",\n    \"organizationName\": \"Acme Inc.\",\n    \"expiresAt\": 1742486400000\n  }\n}\n",[26,364,365,369,379,385,395,406,418,429,439,443],{"__ignoreMap":142},[146,366,367],{"class":148,"line":149},[146,368,153],{"class":152},[146,370,371,373,375,377],{"class":148,"line":156},[146,372,160],{"class":159},[146,374,163],{"class":152},[146,376,167],{"class":166},[146,378,170],{"class":152},[146,380,381,383],{"class":148,"line":173},[146,382,176],{"class":159},[146,384,179],{"class":152},[146,386,387,389,391,393],{"class":148,"line":182},[146,388,185],{"class":159},[146,390,163],{"class":152},[146,392,191],{"class":190},[146,394,170],{"class":152},[146,396,397,399,401,404],{"class":148,"line":196},[146,398,199],{"class":159},[146,400,163],{"class":152},[146,402,403],{"class":190},"\"Welcome to our product\"",[146,405,170],{"class":152},[146,407,408,411,413,416],{"class":148,"line":209},[146,409,410],{"class":159},"    \"previewText\"",[146,412,163],{"class":152},[146,414,415],{"class":190},"\"Here's what you need to know\"",[146,417,170],{"class":152},[146,419,420,422,424,427],{"class":148,"line":222},[146,421,225],{"class":159},[146,423,163],{"class":152},[146,425,426],{"class":190},"\"Acme Inc.\"",[146,428,170],{"class":152},[146,430,431,434,436],{"class":148,"line":233},[146,432,433],{"class":159},"    \"expiresAt\"",[146,435,163],{"class":152},[146,437,438],{"class":166},"1742486400000\n",[146,440,441],{"class":148,"line":239},[146,442,236],{"class":152},[146,444,446],{"class":148,"line":445},10,[146,447,242],{"class":152},[11,449,450,453],{},[26,451,452],{},"expiresAt"," ist ein Unix-Zeitstempel in Millisekunden (eine Zahl).",[20,455,456],{},[23,457,458,460,461,464,465,135],{},[26,459,255],{}," — das Token ist ungültig oder der Link wurde widerrufen. Der festgelegte Fehler-Envelope trägt ",[26,462,463],{},"category: \"not_found\""," und ",[26,466,467],{},"data.reason: \"share_link_not_found\"",[137,469,471],{"className":139,"code":470,"language":141,"meta":142,"style":142},"{\n  \"error\": {\n    \"category\": \"not_found\",\n    \"message\": \"Share link not found\",\n    \"data\": { \"reason\": \"share_link_not_found\" }\n  }\n}\n",[26,472,473,477,483,493,504,519,523],{"__ignoreMap":142},[146,474,475],{"class":148,"line":149},[146,476,153],{"class":152},[146,478,479,481],{"class":148,"line":156},[146,480,270],{"class":159},[146,482,179],{"class":152},[146,484,485,487,489,491],{"class":148,"line":173},[146,486,277],{"class":159},[146,488,163],{"class":152},[146,490,282],{"class":190},[146,492,170],{"class":152},[146,494,495,497,499,502],{"class":148,"line":182},[146,496,289],{"class":159},[146,498,163],{"class":152},[146,500,501],{"class":190},"\"Share link not found\"",[146,503,170],{"class":152},[146,505,506,508,510,512,514,517],{"class":148,"line":196},[146,507,301],{"class":159},[146,509,304],{"class":152},[146,511,307],{"class":159},[146,513,163],{"class":152},[146,515,516],{"class":190},"\"share_link_not_found\"",[146,518,315],{"class":152},[146,520,521],{"class":148,"line":209},[146,522,236],{"class":152},[146,524,525],{"class":148,"line":222},[146,526,242],{"class":152},[20,528,529],{},[23,530,531,532,535,536,135],{},"Abgelaufener Link (48-Stunden-Fenster verstrichen) — ",[26,533,534],{},"data.reason"," ist ",[26,537,538],{},"expired",[137,540,542],{"className":139,"code":541,"language":141,"meta":142,"style":142},"{\n  \"error\": {\n    \"category\": \"not_found\",\n    \"message\": \"This share link has expired\",\n    \"data\": { \"reason\": \"expired\" }\n  }\n}\n",[26,543,544,548,554,564,575,590,594],{"__ignoreMap":142},[146,545,546],{"class":148,"line":149},[146,547,153],{"class":152},[146,549,550,552],{"class":148,"line":156},[146,551,270],{"class":159},[146,553,179],{"class":152},[146,555,556,558,560,562],{"class":148,"line":173},[146,557,277],{"class":159},[146,559,163],{"class":152},[146,561,282],{"class":190},[146,563,170],{"class":152},[146,565,566,568,570,573],{"class":148,"line":182},[146,567,289],{"class":159},[146,569,163],{"class":152},[146,571,572],{"class":190},"\"This share link has expired\"",[146,574,170],{"class":152},[146,576,577,579,581,583,585,588],{"class":148,"line":196},[146,578,301],{"class":159},[146,580,304],{"class":152},[146,582,307],{"class":159},[146,584,163],{"class":152},[146,586,587],{"class":190},"\"expired\"",[146,589,315],{"class":152},[146,591,592],{"class":148,"line":209},[146,593,236],{"class":152},[146,595,596],{"class":148,"line":222},[146,597,242],{"class":152},[599,600,603],"callout",{"title":601,"type":602},"Status bei abgelaufenem Link","info",[11,604,605,606,609,610,613,614,617,618,621,622,625],{},"Der Ablauf-Fall wird auf HTTP ",[26,607,608],{},"404"," (",[26,611,612],{},"not_found",") abgebildet, nicht auf ",[26,615,616],{},"410 Gone"," — die Hülle leitet den Status aus der Fehlerkategorie ab und kennt keine Zuordnung zu ",[26,619,620],{},"410",". Unterscheiden Sie anhand von ",[26,623,624],{},"data.reason: \"expired\""," statt anhand des Statuscodes.",[11,627,628,629,632],{},"Das Freigabe-Token ist eine 24 Zeichen lange Zufallszeichenkette. Endpunkte für Freigabelinks setzen ",[26,630,631],{},"Cache-Control: no-store"," (anders als das Archiv, das eine Stunde lang cachebar ist), da der Inhalt abläuft.",[15,634,636],{"id":635},"eingehende-mta-callbacks","Eingehende MTA-Callbacks",[11,638,639],{},"Diese Routen liegen im selben HTTP-Router, sind aber Server-zu-Server-Callbacks der mitgelieferten MTA- und IMAP-Dienste und keine Browser- oder E-Mail-Link-Abläufe. Sie werden auf Transportebene authentifiziert (Shared Secret \u002F HMAC), allgemeine Clients sollten sie daher nicht aufrufen.",[20,641,642,653],{},[23,643,644,647,648,330],{},[26,645,646],{},"POST \u002Fwebhooks\u002Fmta-mailbox"," — eingehende Postbox-Zustellung (persönliche E-Mail) vom MTA. Siehe ",[649,650,652],"a",{"href":651},"\u002Fdeveloper\u002Fpostbox-architecture","Postbox-Architektur",[23,654,655,658,659,330],{},[26,656,657],{},"POST \u002Fwebhooks\u002Fmta-verify-credential"," — Verifizierung von App-Passwörtern für die SMTP-Einlieferung über den MTA und die IMAP\u002FSMTP-Client-Authentifizierung (HMAC-signiert). Siehe ",[649,660,652],{"href":661},"\u002Fdeveloper\u002Fpostbox-architecture#app-password-auth-flow",[11,663,664,665,668,669,673],{},"Der Callback für Bounce-\u002FBeschwerde-\u002FIP-Zustellereignisse ",[26,666,667],{},"POST \u002Fwebhooks\u002Fmta"," ist auf der Seite ",[649,670,672],{"href":671},"\u002Fapi\u002Fwebhooks","Webhooks"," dokumentiert.",[15,675,677],{"id":676},"hinweise","Hinweise",[20,679,680,683,686],{},[23,681,682],{},"CORS ist überall dort aktiviert, wo es für browserbasierte Abläufe erforderlich ist",[23,684,685],{},"Öffentliche Endpunkte werden pro IP rate-limitiert (empfängerbezogene Token-Endpunkte wie Archiv\u002FFreigabe\u002FAbmeldung werden nach IP+Token geschlüsselt)",[23,687,688],{},"Tokenbasierte Endpunkte liefern für ungültige\u002Fabgelaufene Token strukturiertes JSON zurück",[690,691,692],"style",{},"html pre.shiki code .sYgZi, html code.shiki .sYgZi{--shiki-default:#24292E;--shiki-dark:#ADBAC7}html pre.shiki code .snmFh, html code.shiki .snmFh{--shiki-default:#005CC5;--shiki-dark:#8DDB8C}html pre.shiki code .sviXB, html code.shiki .sviXB{--shiki-default:#005CC5;--shiki-dark:#6CB6FF}html pre.shiki code .s-HuK, html code.shiki .s-HuK{--shiki-default:#032F62;--shiki-dark:#96D0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":142,"searchDepth":156,"depth":156,"links":694},[695,696,697,698,699,700,701,702,703,704],{"id":17,"depth":156,"text":18},{"id":31,"depth":156,"text":32},{"id":49,"depth":156,"text":50},{"id":67,"depth":156,"text":68},{"id":83,"depth":156,"text":84},{"id":99,"depth":156,"text":100},{"id":110,"depth":156,"text":111},{"id":333,"depth":156,"text":334},{"id":635,"depth":156,"text":636},{"id":676,"depth":156,"text":677},"md",{},true,"\u002Fapi\u002Fpublic-endpoints",{"title":6,"description":13},"2.api\u002F11.public-endpoints","QgDwI9s7-DXne5vfe8VmxjVw40OZ8fgLec9nF5fZzDc",[713,715],{"title":672,"path":671,"stem":714,"children":-1},"2.api\u002F10.webhooks",{"title":716,"path":717,"stem":718,"children":-1},"Webhook-Payloads","\u002Fapi\u002Fwebhook-payloads","2.api\u002F12.webhook-payloads",1786915107080]