[{"data":1,"prerenderedAt":873},["ShallowReactive",2],{"docs-navigation":3,"\u002Fdocs\u002Femails\u002Ftransactional":202,"\u002Fdocs\u002Femails\u002Ftransactional-surround":868},[4],{"title":5,"path":6,"stem":7,"children":8,"page":22},"Docs","\u002Fdocs","docs",[9,23,36,65,86,115,128,172,185],{"title":10,"path":11,"stem":12,"children":13,"page":22},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[14,18],{"title":15,"path":16,"stem":17},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F1.quickstart",{"title":19,"path":20,"stem":21},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002F1.getting-started\u002F2.concepts",false,{"title":24,"path":25,"stem":26,"children":27,"page":22},"Sending domain","\u002Fdocs\u002Fdomains","docs\u002F2.domains",[28,32],{"title":29,"path":30,"stem":31},"Add your domain","\u002Fdocs\u002Fdomains\u002Fadd-your-domain","docs\u002F2.domains\u002F1.add-your-domain",{"title":33,"path":34,"stem":35},"Troubleshooting","\u002Fdocs\u002Fdomains\u002Ftroubleshooting","docs\u002F2.domains\u002F2.troubleshooting",{"title":37,"path":38,"stem":39,"children":40,"page":22},"Audience","\u002Fdocs\u002Faudience","docs\u002F3.audience",[41,45,49,53,57,61],{"title":42,"path":43,"stem":44},"Contacts","\u002Fdocs\u002Faudience\u002Fcontacts","docs\u002F3.audience\u002F1.contacts",{"title":46,"path":47,"stem":48},"Import contacts","\u002Fdocs\u002Faudience\u002Fimport","docs\u002F3.audience\u002F2.import",{"title":50,"path":51,"stem":52},"Lists","\u002Fdocs\u002Faudience\u002Flists","docs\u002F3.audience\u002F3.lists",{"title":54,"path":55,"stem":56},"Segments","\u002Fdocs\u002Faudience\u002Fsegments","docs\u002F3.audience\u002F4.segments",{"title":58,"path":59,"stem":60},"Signup forms","\u002Fdocs\u002Faudience\u002Fsignup-forms","docs\u002F3.audience\u002F5.signup-forms",{"title":62,"path":63,"stem":64},"Unsubscribe and preferences","\u002Fdocs\u002Faudience\u002Funsubscribe-and-preferences","docs\u002F3.audience\u002F6.unsubscribe-and-preferences",{"title":66,"path":67,"stem":68,"children":69,"page":22},"Sending emails","\u002Fdocs\u002Femails","docs\u002F4.emails",[70,74,78,82],{"title":71,"path":72,"stem":73},"Writing emails","\u002Fdocs\u002Femails\u002Fwriting-emails","docs\u002F4.emails\u002F1.writing-emails",{"title":75,"path":76,"stem":77},"Campaigns","\u002Fdocs\u002Femails\u002Fcampaigns","docs\u002F4.emails\u002F2.campaigns",{"title":79,"path":80,"stem":81},"Flows","\u002Fdocs\u002Femails\u002Fflows","docs\u002F4.emails\u002F3.flows",{"title":83,"path":84,"stem":85},"Transactional emails","\u002Fdocs\u002Femails\u002Ftransactional","docs\u002F4.emails\u002F4.transactional",{"title":87,"path":88,"stem":89,"children":90,"page":22},"Deliverability","\u002Fdocs\u002Fdeliverability","docs\u002F5.deliverability",[91,95,99,103,107,111],{"title":92,"path":93,"stem":94},"Overview","\u002Fdocs\u002Fdeliverability\u002Foverview","docs\u002F5.deliverability\u002F1.overview",{"title":96,"path":97,"stem":98},"Warm-up","\u002Fdocs\u002Fdeliverability\u002Fwarm-up","docs\u002F5.deliverability\u002F2.warm-up",{"title":100,"path":101,"stem":102},"Contacts under review","\u002Fdocs\u002Fdeliverability\u002Fimported-contacts","docs\u002F5.deliverability\u002F3.imported-contacts",{"title":104,"path":105,"stem":106},"Reputation","\u002Fdocs\u002Fdeliverability\u002Freputation","docs\u002F5.deliverability\u002F4.reputation",{"title":108,"path":109,"stem":110},"Bounces and suppressions","\u002Fdocs\u002Fdeliverability\u002Fbounces-and-suppressions","docs\u002F5.deliverability\u002F5.bounces-and-suppressions",{"title":112,"path":113,"stem":114},"Deliverability report","\u002Fdocs\u002Fdeliverability\u002Fdeliverability-report","docs\u002F5.deliverability\u002F6.deliverability-report",{"title":116,"path":117,"stem":118,"children":119,"page":22},"AI","\u002Fdocs\u002Fai","docs\u002F6.ai",[120,124],{"title":121,"path":122,"stem":123},"Assistant","\u002Fdocs\u002Fai\u002Fassistant","docs\u002F6.ai\u002F1.assistant",{"title":125,"path":126,"stem":127},"Connect your agent (MCP)","\u002Fdocs\u002Fai\u002Fmcp","docs\u002F6.ai\u002F2.mcp",{"title":129,"path":130,"stem":131,"children":132,"page":22},"API reference","\u002Fdocs\u002Fapi","docs\u002F7.api",[133,137,141,145,148,152,156,160,164,168],{"title":134,"path":135,"stem":136},"Introduction","\u002Fdocs\u002Fapi\u002Fintroduction","docs\u002F7.api\u002F01.introduction",{"title":138,"path":139,"stem":140},"Emails","\u002Fdocs\u002Fapi\u002Femails","docs\u002F7.api\u002F02.emails",{"title":142,"path":143,"stem":144},"Templates","\u002Fdocs\u002Fapi\u002Ftemplates","docs\u002F7.api\u002F03.templates",{"title":42,"path":146,"stem":147},"\u002Fdocs\u002Fapi\u002Fcontacts","docs\u002F7.api\u002F04.contacts",{"title":149,"path":150,"stem":151},"Events","\u002Fdocs\u002Fapi\u002Fevents","docs\u002F7.api\u002F05.events",{"title":153,"path":154,"stem":155},"Lists and segments","\u002Fdocs\u002Fapi\u002Flists-and-segments","docs\u002F7.api\u002F06.lists-and-segments",{"title":157,"path":158,"stem":159},"Campaigns and flows","\u002Fdocs\u002Fapi\u002Fcampaigns-and-flows","docs\u002F7.api\u002F07.campaigns-and-flows",{"title":161,"path":162,"stem":163},"Domains and suppressions","\u002Fdocs\u002Fapi\u002Fdomains-and-suppressions","docs\u002F7.api\u002F08.domains-and-suppressions",{"title":165,"path":166,"stem":167},"Spaces","\u002Fdocs\u002Fapi\u002Fspaces","docs\u002F7.api\u002F09.spaces",{"title":169,"path":170,"stem":171},"Webhooks","\u002Fdocs\u002Fapi\u002Fwebhooks","docs\u002F7.api\u002F10.webhooks",{"title":173,"path":174,"stem":175,"children":176,"page":22},"Account & billing","\u002Fdocs\u002Faccount","docs\u002F8.account",[177,181],{"title":178,"path":179,"stem":180},"Spaces and members","\u002Fdocs\u002Faccount\u002Fspaces-and-members","docs\u002F8.account\u002F1.spaces-and-members",{"title":182,"path":183,"stem":184},"Billing","\u002Fdocs\u002Faccount\u002Fbilling","docs\u002F8.account\u002F2.billing",{"title":186,"path":187,"stem":188,"children":189,"page":22},"Guides","\u002Fdocs\u002Fguides","docs\u002F9.guides",[190,194,198],{"title":191,"path":192,"stem":193},"Welcome new subscribers","\u002Fdocs\u002Fguides\u002Fwelcome-sequence","docs\u002F9.guides\u002F1.welcome-sequence",{"title":195,"path":196,"stem":197},"Onboarding with events","\u002Fdocs\u002Fguides\u002Fonboarding-with-events","docs\u002F9.guides\u002F2.onboarding-with-events",{"title":199,"path":200,"stem":201},"Migrate from another tool","\u002Fdocs\u002Fguides\u002Fmigrate-from-another-tool","docs\u002F9.guides\u002F3.migrate-from-another-tool",{"id":203,"title":83,"body":204,"description":861,"extension":862,"links":863,"meta":864,"navigation":865,"path":84,"seo":866,"stem":85,"__hash__":867},"docs\u002Fdocs\u002F4.emails\u002F4.transactional.md",{"type":205,"value":206,"toc":852},"minimark",[207,211,216,278,282,289,332,350,421,428,432,443,487,502,508,512,526,646,649,690,696,700,781,788,798,802,818,821,825,848],[208,209,210],"p",{},"A transactional email is sent by your app to one person, because of something they just did: a password reset, a sign-in link, a receipt, an invitation. It needs no list and has no unsubscribe link. It travels on its own stream, so it keeps flowing when marketing is paused.",[212,213,215],"h2",{"id":214},"two-ways-to-send","Two ways to send",[217,218,219,234],"table",{},[220,221,222],"thead",{},[223,224,225,228,231],"tr",{},[226,227],"th",{},[226,229,230],{},"Template",[226,232,233],{},"Raw content",[235,236,237,252,265],"tbody",{},[223,238,239,246,249],{},[240,241,242],"td",{},[243,244,245],"strong",{},"Content lives in",[240,247,248],{},"Kula: anyone on the team edits it in the dashboard",[240,250,251],{},"Your code",[223,253,254,259,262],{},[240,255,256],{},[243,257,258],{},"You send",[240,260,261],{},"The template alias and variables",[240,263,264],{},"The subject and the HTML or Markdown",[223,266,267,272,275],{},[240,268,269],{},[243,270,271],{},"Best for",[240,273,274],{},"Most emails",[240,276,277],{},"Emails your app already renders",[212,279,281],{"id":280},"create-a-template","Create a template",[208,283,284,285,288],{},"Open ",[243,286,287],{},"Transactional › New template",":",[290,291,292,300,316],"ul",{},[293,294,295,296,299],"li",{},"a ",[243,297,298],{},"Name",", internal;",[293,301,302,303,306,307,311,312,315],{},"an ",[243,304,305],{},"Alias",", the key your code sends as ",[308,309,310],"code",{},"template",", such as ",[308,313,314],{},"password-reset",";",[293,317,318,319,322,323,326,327,331],{},"the ",[243,320,321],{},"Subject",", ",[243,324,325],{},"Preview text",", sender and content, written in the ",[328,329,330],"a",{"href":72},"editor",".",[208,333,334,335,338,339,322,342,345,346,349],{},"Use ",[308,336,337],{},"data.*"," variables for the values your app sends: ",[308,340,341],{},"{{ data.reset_url }}",[308,343,344],{},"{{ data.order.total }}",". In ",[243,347,348],{},"Sample data",", type example values as JSON to fill the preview and test emails:",[351,352,357],"pre",{"className":353,"code":354,"language":355,"meta":356,"style":356},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"Ada\",\n  \"reset_url\": \"https:\u002F\u002Facme.com\u002Freset?token=abc123\"\n}\n","json","",[308,358,359,368,395,415],{"__ignoreMap":356},[360,361,364],"span",{"class":362,"line":363},"line",1,[360,365,367],{"class":366},"sMK4o","{\n",[360,369,371,374,378,381,383,386,390,392],{"class":362,"line":370},2,[360,372,373],{"class":366},"  \"",[360,375,377],{"class":376},"spNyl","name",[360,379,380],{"class":366},"\"",[360,382,288],{"class":366},[360,384,385],{"class":366}," \"",[360,387,389],{"class":388},"sfazB","Ada",[360,391,380],{"class":366},[360,393,394],{"class":366},",\n",[360,396,398,400,403,405,407,409,412],{"class":362,"line":397},3,[360,399,373],{"class":366},[360,401,402],{"class":376},"reset_url",[360,404,380],{"class":366},[360,406,288],{"class":366},[360,408,385],{"class":366},[360,410,411],{"class":388},"https:\u002F\u002Facme.com\u002Freset?token=abc123",[360,413,414],{"class":366},"\"\n",[360,416,418],{"class":362,"line":417},4,[360,419,420],{"class":366},"}\n",[208,422,423,424,427],{},"If the recipient is also a contact of your space, ",[308,425,426],{},"{{ contact.first_name }}"," and the contact's attributes work too.",[212,429,431],{"id":430},"draft-and-published-versions","Draft and published versions",[208,433,434,435,438,439,442],{},"A template has a ",[243,436,437],{},"draft"," and a ",[243,440,441],{},"published version",". The API always sends the published version: editing the draft does not change emails in production.",[217,444,445,455],{},[220,446,447],{},[223,448,449,452],{},[226,450,451],{},"Status",[226,453,454],{},"Meaning",[235,456,457,467,477],{},[223,458,459,464],{},[240,460,461],{},[243,462,463],{},"Draft",[240,465,466],{},"Never published: the API refuses to send it",[223,468,469,474],{},[240,470,471],{},[243,472,473],{},"Published",[240,475,476],{},"The draft and the published version are the same",[223,478,479,484],{},[240,480,481],{},[243,482,483],{},"Unpublished changes",[240,485,486],{},"You edited the draft since the last publication",[208,488,489,490,493,494,497,498,501],{},"Preview and ",[243,491,492],{},"Send a test"," use the draft. Click ",[243,495,496],{},"Publish"," to make the draft live, or ",[243,499,500],{},"Discard draft"," to go back to the published version.",[208,503,504,505,331],{},"AI assistants can write a template draft but never publish it: they ask a member, who clicks ",[243,506,507],{},"Approve and publish",[212,509,511],{"id":510},"send-it-from-your-app","Send it from your app",[208,513,514,515,518,519,522,523,288],{},"Create an API key in ",[243,516,517],{},"Settings › API keys",". A key with ",[243,520,521],{},"sending access"," is enough, and safer to store in an app. Then call ",[308,524,525],{},"POST \u002Fv1\u002Femails",[351,527,532],{"className":528,"code":529,"filename":530,"language":531,"meta":356,"style":356},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl https:\u002F\u002Fapi.kulamail.com\u002Fv1\u002Femails \\\n  -H \"Authorization: Bearer $KULA_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Idempotency-Key: reset-8f6c2a1e\" \\\n  -d '{\n    \"to\": \"ada@example.com\",\n    \"template\": \"password-reset\",\n    \"variables\": {\n      \"name\": \"Ada\",\n      \"reset_url\": \"https:\u002F\u002Facme.com\u002Freset?token=abc123\"\n    }\n  }'\n","cURL","bash",[308,533,534,547,564,577,590,601,607,613,619,625,631,637],{"__ignoreMap":356},[360,535,536,540,543],{"class":362,"line":363},[360,537,539],{"class":538},"sBMFI","curl",[360,541,542],{"class":388}," https:\u002F\u002Fapi.kulamail.com\u002Fv1\u002Femails",[360,544,546],{"class":545},"sTEyZ"," \\\n",[360,548,549,552,554,557,560,562],{"class":362,"line":370},[360,550,551],{"class":388},"  -H",[360,553,385],{"class":366},[360,555,556],{"class":388},"Authorization: Bearer ",[360,558,559],{"class":545},"$KULA_API_KEY",[360,561,380],{"class":366},[360,563,546],{"class":545},[360,565,566,568,570,573,575],{"class":362,"line":397},[360,567,551],{"class":388},[360,569,385],{"class":366},[360,571,572],{"class":388},"Content-Type: application\u002Fjson",[360,574,380],{"class":366},[360,576,546],{"class":545},[360,578,579,581,583,586,588],{"class":362,"line":417},[360,580,551],{"class":388},[360,582,385],{"class":366},[360,584,585],{"class":388},"Idempotency-Key: reset-8f6c2a1e",[360,587,380],{"class":366},[360,589,546],{"class":545},[360,591,593,596,599],{"class":362,"line":592},5,[360,594,595],{"class":388},"  -d",[360,597,598],{"class":366}," '",[360,600,367],{"class":388},[360,602,604],{"class":362,"line":603},6,[360,605,606],{"class":388},"    \"to\": \"ada@example.com\",\n",[360,608,610],{"class":362,"line":609},7,[360,611,612],{"class":388},"    \"template\": \"password-reset\",\n",[360,614,616],{"class":362,"line":615},8,[360,617,618],{"class":388},"    \"variables\": {\n",[360,620,622],{"class":362,"line":621},9,[360,623,624],{"class":388},"      \"name\": \"Ada\",\n",[360,626,628],{"class":362,"line":627},10,[360,629,630],{"class":388},"      \"reset_url\": \"https:\u002F\u002Facme.com\u002Freset?token=abc123\"\n",[360,632,634],{"class":362,"line":633},11,[360,635,636],{"class":388},"    }\n",[360,638,640,643],{"class":362,"line":639},12,[360,641,642],{"class":388},"  }",[360,644,645],{"class":366},"'\n",[208,647,648],{},"The email is queued and leaves within seconds. The template page shows the same snippet, in cURL and Node, with your alias and sample data.",[290,650,651,661,671,680],{},[293,652,653,656,657,660],{},[243,654,655],{},"Sender",": the sender of the template, or the default sender of the space. Override it with ",[308,658,659],{},"from",", on a verified domain.",[293,662,663,666,667,670],{},[243,664,665],{},"Idempotency",": send an ",[308,668,669],{},"Idempotency-Key"," header. If your app retries after a timeout, Kula returns the first email instead of sending a second one.",[293,672,673,676,677,331],{},[243,674,675],{},"Batches",": send up to 100 emails in one call with ",[308,678,679],{},"POST \u002Fv1\u002Femails\u002Fbatch",[293,681,682,685,686,689],{},[243,683,684],{},"Tags",": attach key\u002Fvalue ",[308,687,688],{},"tags"," to find the email in webhooks.",[208,691,692,693,331],{},"Every field and error: ",[328,694,695],{"href":139},"Emails API",[212,697,699],{"id":698},"a-separate-stream","A separate stream",[217,701,702,714],{},[220,703,704],{},[223,705,706,708,711],{},[226,707],{},[226,709,710],{},"Marketing",[226,712,713],{},"Transactional",[235,715,716,727,738,751,762,772],{},[223,717,718,721,724],{},[240,719,720],{},"Priority in the queue",[240,722,723],{},"Normal",[240,725,726],{},"First",[223,728,729,732,735],{},[240,730,731],{},"Paused on a reputation alert",[240,733,734],{},"Yes",[240,736,737],{},"No",[223,739,740,745,748],{},[240,741,742,744],{},[328,743,96],{"href":97}," of a new domain",[240,746,747],{},"Applies",[240,749,750],{},"Skipped",[223,752,753,758,760],{},[240,754,755],{},[328,756,757],{"href":101},"Contact review",[240,759,747],{},[240,761,750],{},[223,763,764,767,769],{},[240,765,766],{},"Unsubscribed contacts",[240,768,750],{},[240,770,771],{},"Still receive it",[223,773,774,777,779],{},[240,775,776],{},"Hard-bounced addresses",[240,778,750],{},[240,780,750],{},[208,782,783,784,787],{},"A hard-bounced address is blocked on both streams: the email comes back with the status ",[308,785,786],{},"SUPPRESSED"," and is not sent.",[789,790,791],"warning",{},[208,792,793,794,331],{},"Use transactional emails only for messages a person expects after an action. Newsletters and promotions sent through the transactional API skip the unsubscribe rules of inbox providers and break our ",[328,795,797],{"href":796},"\u002Flegal\u002Facceptable-use","acceptable use policy",[212,799,801],{"id":800},"follow-what-happens","Follow what happens",[290,803,804,810,813],{},[293,805,806,809],{},[243,807,808],{},"Activity"," lists every email, with its status and events. Filter on the transactional stream.",[293,811,812],{},"Each template page shows its sends, deliveries, opens and clicks over 30 days.",[293,814,815,817],{},[328,816,169],{"href":170}," tell your app when an email is delivered, bounces, is opened or clicked.",[208,819,820],{},"Raw content you send (HTML or Markdown, without a template) is kept 30 days, then deleted.",[212,822,824],{"id":823},"related","Related",[826,827,828,835,842],"card-group",{},[829,830,832],"card",{"icon":831,"title":695,"to":139},"i-mingcute-code-fill",[208,833,834],{},"Fields, batches and errors",[829,836,839],{"icon":837,"title":838,"to":143},"i-mingcute-terminal-box-fill","Templates API",[208,840,841],{},"Manage templates from your code",[829,843,845],{"icon":844,"title":169,"to":170},"i-mingcute-webhook-fill",[208,846,847],{},"Delivery, bounce, open and click events",[849,850,851],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":356,"searchDepth":363,"depth":370,"links":853},[854,855,856,857,858,859,860],{"id":214,"depth":370,"text":215},{"id":280,"depth":370,"text":281},{"id":430,"depth":370,"text":431},{"id":510,"depth":370,"text":511},{"id":698,"depth":370,"text":699},{"id":800,"depth":370,"text":801},{"id":823,"depth":370,"text":824},"Send password resets, receipts and notifications from your app","md",null,{},true,{"title":83,"description":861},"Wsw0Vp33faKuCGDvYwx58PNoHuk3cjVM3c1a2AAKlOc",[869,871],{"title":79,"path":80,"stem":81,"description":870,"children":-1},"Automated sequences triggered by a subscription or an event",{"title":92,"path":93,"stem":94,"description":872,"children":-1},"What Kula enforces and what is up to you",1792265663528]