[{"data":1,"prerenderedAt":477},["ShallowReactive",2],{"search-de":3,"content-de-api\u002Fforms":4,"surround-de-\u002Fapi\u002Fforms":468},[],{"id":5,"title":6,"body":7,"description":13,"extension":461,"meta":462,"navigation":463,"path":464,"seo":465,"stem":466,"__hash__":467},"content_de\u002F2.api\u002F9.forms.md","Formular-API",{"type":8,"value":9,"toc":451},"minimark",[10,14,19,52,56,75,79,112,116,193,197,212,255,262,267,270,332,339,361,365,382,447],[11,12,13],"p",{},"Abonnentinnen und Abonnenten über öffentliche Formular-Endpunkte erfassen.",[15,16,18],"h2",{"id":17},"endpunkt","Endpunkt",[20,21,22,35],"table",{},[23,24,25],"thead",{},[26,27,28,32],"tr",{},[29,30,31],"th",{},"Methode",[29,33,34],{},"Pfad",[36,37,38],"tbody",{},[26,39,40,47],{},[41,42,43],"td",{},[44,45,46],"code",{},"POST",[41,48,49],{},[44,50,51],{},"\u002Fforms\u002F:formId",[15,53,55],{"id":54},"unterstützte-content-types","Unterstützte Content-Types",[57,58,59,65,70],"ul",{},[60,61,62],"li",{},[44,63,64],{},"application\u002Fjson",[60,66,67],{},[44,68,69],{},"application\u002Fx-www-form-urlencoded",[60,71,72],{},[44,73,74],{},"multipart\u002Fform-data",[15,76,78],{"id":77},"verhalten","Verhalten",[57,80,81,91,94,101,104,109],{},[60,82,83,84,87,88],{},"Der Formular-Endpunkt muss existieren und aktiv sein — eine unbekannte Formular-ID liefert ",[44,85,86],{},"404",", ein inaktives Formular liefert ",[44,89,90],{},"403",[60,92,93],{},"Ein Honeypot-Feld wird geprüft, um Spam zu blockieren",[60,95,96,97,100],{},"Feldanforderungen werden anhand der Formularkonfiguration validiert (ein Fehlschlag liefert ",[44,98,99],{},"400",")",[60,102,103],{},"Rate-Limiting erfolgt pro IP",[60,105,106,107],{},"Der Request-Body ist auf 100 KB begrenzt; ein größerer Body liefert ",[44,108,99],{},[60,110,111],{},"Eine optionale Weiterleitung nach dem Absenden wird unterstützt",[15,113,115],{"id":114},"beispielanfrage","Beispielanfrage",[117,118,123],"pre",{"className":119,"code":120,"language":121,"meta":122,"style":122},"language-bash shiki shiki-themes github-light github-dark-dimmed","curl -X POST \"https:\u002F\u002F\u003Cdeployment>.convex.site\u002Fforms\u002F\u003CformId>\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"email\": \"lead@example.com\",\n    \"firstName\": \"Avery\",\n    \"company\": \"Acme\"\n  }'\n","bash","",[44,124,125,149,160,169,175,181,187],{"__ignoreMap":122},[126,127,130,134,138,142,145],"span",{"class":128,"line":129},"line",1,[126,131,133],{"class":132},"sOLd2","curl",[126,135,137],{"class":136},"sviXB"," -X",[126,139,141],{"class":140},"s-HuK"," POST",[126,143,144],{"class":140}," \"https:\u002F\u002F\u003Cdeployment>.convex.site\u002Fforms\u002F\u003CformId>\"",[126,146,148],{"class":147},"s74oq"," \\\n",[126,150,152,155,158],{"class":128,"line":151},2,[126,153,154],{"class":136},"  -H",[126,156,157],{"class":140}," \"Content-Type: application\u002Fjson\"",[126,159,148],{"class":147},[126,161,163,166],{"class":128,"line":162},3,[126,164,165],{"class":136},"  -d",[126,167,168],{"class":140}," '{\n",[126,170,172],{"class":128,"line":171},4,[126,173,174],{"class":140},"    \"email\": \"lead@example.com\",\n",[126,176,178],{"class":128,"line":177},5,[126,179,180],{"class":140},"    \"firstName\": \"Avery\",\n",[126,182,184],{"class":128,"line":183},6,[126,185,186],{"class":140},"    \"company\": \"Acme\"\n",[126,188,190],{"class":128,"line":189},7,[126,191,192],{"class":140},"  }'\n",[15,194,196],{"id":195},"typische-antworten","Typische Antworten",[11,198,199,200,203,204,207,208,211],{},"Erfolg (HTTP 200). Der Formular-Endpunkt läuft durch die Hülle des öffentlichen\nToken-Endpunkts, daher trägt der Body ein ",[44,201,202],{},"ok"," auf oberster Ebene und verschachtelt ",[44,205,206],{},"message"," unter ",[44,209,210],{},"data",":",[117,213,217],{"className":214,"code":215,"language":216,"meta":122,"style":122},"language-json shiki shiki-themes github-light github-dark-dimmed","{ \"ok\": true, \"data\": { \"message\": \"Form submitted successfully\" } }\n","json",[44,218,219],{"__ignoreMap":122},[126,220,221,225,229,232,235,238,241,244,247,249,252],{"class":128,"line":129},[126,222,224],{"class":223},"sYgZi","{ ",[126,226,228],{"class":227},"snmFh","\"ok\"",[126,230,231],{"class":223},": ",[126,233,234],{"class":136},"true",[126,236,237],{"class":223},", ",[126,239,240],{"class":227},"\"data\"",[126,242,243],{"class":223},": { ",[126,245,246],{"class":227},"\"message\"",[126,248,231],{"class":223},[126,250,251],{"class":140},"\"Form submitted successfully\"",[126,253,254],{"class":223}," } }\n",[11,256,257,258,261],{},"Ist für das Formular eine Weiterleitungs-URL konfiguriert, liefert ein erfolgreiches Absenden statt\ndieses JSON-Bodys ein ",[44,259,260],{},"302"," auf diese URL.",[263,264,266],"h3",{"id":265},"double-opt-in-ausstehende-bestätigung","Double Opt-in \u002F ausstehende Bestätigung",[11,268,269],{},"Wenn das Thema, für das sich das Formular anmeldet, eine Bestätigung erfordert, wird der Kontakt erst\nhinzugefügt, nachdem er per E-Mail bestätigt hat. Das Absenden liefert weiterhin HTTP 200, allerdings\nmit einem eigenen Body, der signalisiert, dass eine Bestätigungs-E-Mail versendet wurde:",[117,271,273],{"className":214,"code":272,"language":216,"meta":122,"style":122},"{\n  \"ok\": true,\n  \"data\": {\n    \"message\": \"Please check your email to confirm your subscription\",\n    \"confirmationRequired\": true\n  }\n}\n",[44,274,275,280,292,300,312,322,327],{"__ignoreMap":122},[126,276,277],{"class":128,"line":129},[126,278,279],{"class":223},"{\n",[126,281,282,285,287,289],{"class":128,"line":151},[126,283,284],{"class":227},"  \"ok\"",[126,286,231],{"class":223},[126,288,234],{"class":136},[126,290,291],{"class":223},",\n",[126,293,294,297],{"class":128,"line":162},[126,295,296],{"class":227},"  \"data\"",[126,298,299],{"class":223},": {\n",[126,301,302,305,307,310],{"class":128,"line":171},[126,303,304],{"class":227},"    \"message\"",[126,306,231],{"class":223},[126,308,309],{"class":140},"\"Please check your email to confirm your subscription\"",[126,311,291],{"class":223},[126,313,314,317,319],{"class":128,"line":177},[126,315,316],{"class":227},"    \"confirmationRequired\"",[126,318,231],{"class":223},[126,320,321],{"class":136},"true\n",[126,323,324],{"class":128,"line":183},[126,325,326],{"class":223},"  }\n",[126,328,329],{"class":128,"line":189},[126,330,331],{"class":223},"}\n",[11,333,334,335,338],{},"Ist eine Weiterleitungs-URL konfiguriert, führt dieses Ergebnis dorthin mit angehängtem\n",[44,336,337],{},"?confirmation=pending",", sodass die Erfolgsseite ihren Text anpassen kann.",[11,340,341,342,346,347,350,351,354,355,360],{},"Double Opt-in ist die ",[343,344,345],"strong",{},"Vereinigung"," des Formular-Schalters ",[44,348,349],{},"doubleOptIn"," und der\nEinstellung ",[44,352,353],{},"requireDoubleOptIn"," des Themas — wird eines von beiden aktiviert, erzwingt das den\nAblauf mit ausstehender Bestätigung. Unter ",[356,357,359],"a",{"href":358},"\u002Fguide\u002Ftopics","Themen"," erfahren Sie, wie Sie es am\nThema aktivieren.",[263,362,364],{"id":363},"validierungsfehler","Validierungsfehler",[11,366,367,368,371,372,375,376,379,380,211],{},"Ein Validierungsfehler liefert HTTP 400 mit dem Standard-Fehler-Envelope. Die\n",[44,369,370],{},"category"," ist ",[44,373,374],{},"invalid_input","; der maschinenlesbare ",[44,377,378],{},"reason"," steht in ",[44,381,210],{},[117,383,385],{"className":214,"code":384,"language":216,"meta":122,"style":122},"{\n  \"error\": {\n    \"category\": \"invalid_input\",\n    \"message\": \"Email is required\",\n    \"data\": { \"reason\": \"validation_error\" }\n  }\n}\n",[44,386,387,391,398,410,421,439,443],{"__ignoreMap":122},[126,388,389],{"class":128,"line":129},[126,390,279],{"class":223},[126,392,393,396],{"class":128,"line":151},[126,394,395],{"class":227},"  \"error\"",[126,397,299],{"class":223},[126,399,400,403,405,408],{"class":128,"line":162},[126,401,402],{"class":227},"    \"category\"",[126,404,231],{"class":223},[126,406,407],{"class":140},"\"invalid_input\"",[126,409,291],{"class":223},[126,411,412,414,416,419],{"class":128,"line":171},[126,413,304],{"class":227},[126,415,231],{"class":223},[126,417,418],{"class":140},"\"Email is required\"",[126,420,291],{"class":223},[126,422,423,426,428,431,433,436],{"class":128,"line":177},[126,424,425],{"class":227},"    \"data\"",[126,427,243],{"class":223},[126,429,430],{"class":227},"\"reason\"",[126,432,231],{"class":223},[126,434,435],{"class":140},"\"validation_error\"",[126,437,438],{"class":223}," }\n",[126,440,441],{"class":128,"line":183},[126,442,326],{"class":223},[126,444,445],{"class":128,"line":189},[126,446,331],{"class":223},[448,449,450],"style",{},"html pre.shiki code .sOLd2, html code.shiki .sOLd2{--shiki-default:#6F42C1;--shiki-dark:#F69D50}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 pre.shiki code .s74oq, html code.shiki .s74oq{--shiki-default:#005CC5;--shiki-dark:#F47067}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);}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}",{"title":122,"searchDepth":151,"depth":151,"links":452},[453,454,455,456,457],{"id":17,"depth":151,"text":18},{"id":54,"depth":151,"text":55},{"id":77,"depth":151,"text":78},{"id":114,"depth":151,"text":115},{"id":195,"depth":151,"text":196,"children":458},[459,460],{"id":265,"depth":162,"text":266},{"id":363,"depth":162,"text":364},"md",{},true,"\u002Fapi\u002Fforms",{"title":6,"description":13},"2.api\u002F9.forms","ThBV0l4dZYm_NjcQC4ETZLIlbhcWnEa7GvZdfBIECWU",[469,473],{"title":470,"path":471,"stem":472,"children":-1},"Transaktionale API","\u002Fapi\u002Ftransactional","2.api\u002F8.transactional",{"title":474,"path":475,"stem":476,"children":-1},"Entwicklerhandbuch","\u002Fdeveloper","3.developer\u002F1.index",1786915106933]