[{"data":1,"prerenderedAt":817},["ShallowReactive",2],{"navigation":3,"\u002Ftransactional\u002Fsend-api":216,"\u002Ftransactional\u002Fsend-api-surround":812},[4,9,14,40,57,74,95,112,133,150,199,208],{"title":5,"path":6,"stem":7,"icon":8},"Quick start","\u002Fgetting-started","01.getting-started","i-lucide-rocket",{"title":10,"path":11,"stem":12,"icon":13},"Set up from the terminal","\u002Fcli","02.cli","i-lucide-terminal",{"title":15,"path":16,"stem":17,"children":18,"page":39},"Domains & DNS","\u002Fdomains","03.domains",[19,23,27,31,35],{"title":20,"path":21,"stem":22},"Adding a domain","\u002Fdomains\u002Fadding-a-domain","03.domains\u002F01.adding-a-domain",{"title":24,"path":25,"stem":26},"Automatic DNS setup","\u002Fdomains\u002Fautomatic-dns-setup","03.domains\u002F02.automatic-dns-setup",{"title":28,"path":29,"stem":30},"Manual DNS records","\u002Fdomains\u002Fmanual-dns-records","03.domains\u002F03.manual-dns-records",{"title":32,"path":33,"stem":34},"Domain verification","\u002Fdomains\u002Fverification","03.domains\u002F04.verification",{"title":36,"path":37,"stem":38},"Troubleshooting DNS","\u002Fdomains\u002Ftroubleshooting","03.domains\u002F05.troubleshooting",false,{"title":41,"path":42,"stem":43,"children":44,"page":39},"Mailboxes & Aliases","\u002Fmailboxes","04.mailboxes",[45,49,53],{"title":46,"path":47,"stem":48},"Creating mailboxes","\u002Fmailboxes\u002Fcreating-mailboxes","04.mailboxes\u002F01.creating-mailboxes",{"title":50,"path":51,"stem":52},"Aliases","\u002Fmailboxes\u002Faliases","04.mailboxes\u002F02.aliases",{"title":54,"path":55,"stem":56},"Passwords, passkeys & access","\u002Fmailboxes\u002Fpasswords-and-access","04.mailboxes\u002F03.passwords-and-access",{"title":58,"path":59,"stem":60,"children":61,"page":39},"Using Your Mail","\u002Fmail","05.mail",[62,66,70],{"title":63,"path":64,"stem":65},"Webmail","\u002Fmail\u002Fwebmail","05.mail\u002F01.webmail",{"title":67,"path":68,"stem":69},"IMAP & SMTP settings","\u002Fmail\u002Fimap-smtp-settings","05.mail\u002F02.imap-smtp-settings",{"title":71,"path":72,"stem":73},"iPhone setup","\u002Fmail\u002Fios-profile","05.mail\u002F03.ios-profile",{"title":75,"path":76,"stem":77,"children":78,"page":39},"Drive","\u002Fdrive","06.drive",[79,83,87,91],{"title":80,"path":81,"stem":82},"Drive overview","\u002Fdrive\u002Foverview","06.drive\u002F01.overview",{"title":84,"path":85,"stem":86},"Uploading & organising files","\u002Fdrive\u002Ffiles-and-folders","06.drive\u002F02.files-and-folders",{"title":88,"path":89,"stem":90},"Sharing files","\u002Fdrive\u002Fsharing","06.drive\u002F03.sharing",{"title":92,"path":93,"stem":94},"Connect Drive to other apps","\u002Fdrive\u002Fconnect-apps","06.drive\u002F04.connect-apps",{"title":96,"path":97,"stem":98,"children":99,"page":39},"Sending & Campaigns","\u002Fsending","07.sending",[100,104,108],{"title":101,"path":102,"stem":103},"Sending limits","\u002Fsending\u002Flimits","07.sending\u002F01.limits",{"title":105,"path":106,"stem":107},"Campaigns","\u002Fsending\u002Fcampaigns","07.sending\u002F02.campaigns",{"title":109,"path":110,"stem":111},"Deliverability & staying out of spam","\u002Fsending\u002Fdeliverability","07.sending\u002F03.deliverability",{"title":113,"path":114,"stem":115,"children":116,"page":39},"Transactional Email","\u002Ftransactional","08.transactional",[117,121,125,129],{"title":118,"path":119,"stem":120},"Transactional email","\u002Ftransactional\u002Foverview","08.transactional\u002F01.overview",{"title":122,"path":123,"stem":124},"Templates","\u002Ftransactional\u002Ftemplates","08.transactional\u002F02.templates",{"title":126,"path":127,"stem":128},"Sending via the API","\u002Ftransactional\u002Fsend-api","08.transactional\u002F03.send-api",{"title":130,"path":131,"stem":132},"Webhooks","\u002Ftransactional\u002Fwebhooks","08.transactional\u002F04.webhooks",{"title":134,"path":135,"stem":136,"children":137,"page":39},"Migrations","\u002Fmigrations","09.migrations",[138,142,146],{"title":139,"path":140,"stem":141},"Migrating your email","\u002Fmigrations\u002Foverview","09.migrations\u002F01.overview",{"title":143,"path":144,"stem":145},"Migrating from Gmail","\u002Fmigrations\u002Ffrom-gmail","09.migrations\u002F02.from-gmail",{"title":147,"path":148,"stem":149},"Migrating from Microsoft 365","\u002Fmigrations\u002Ffrom-microsoft-365","09.migrations\u002F03.from-microsoft-365",{"title":151,"path":152,"stem":153,"children":154,"page":39},"AI & Developers","\u002Fdevelopers","10.developers",[155,159,163,167,170,174,178,182,187,191,195],{"title":156,"path":157,"stem":158,"icon":8},"Quickstart","\u002Fdevelopers\u002Fquickstart","10.developers\u002F00.quickstart",{"title":160,"path":161,"stem":162},"Connect Claude","\u002Fdevelopers\u002Fconnect-claude","10.developers\u002F01.connect-claude",{"title":164,"path":165,"stem":166},"AI agents & API keys","\u002Fdevelopers\u002Fai-agents","10.developers\u002F02.ai-agents",{"title":130,"path":168,"stem":169},"\u002Fdevelopers\u002Fwebhooks","10.developers\u002F03.webhooks",{"title":171,"path":172,"stem":173},"Partner API","\u002Fdevelopers\u002Fpartners","10.developers\u002F04.partners",{"title":175,"path":176,"stem":177},"Intake and Lens","\u002Fdevelopers\u002Fintake","10.developers\u002F05.intake",{"title":179,"path":180,"stem":181},"Use Faivelo from your coding agent","\u002Fdevelopers\u002Fcoding-agents","10.developers\u002F06.coding-agents",{"title":183,"path":184,"stem":185,"icon":186},"Errors","\u002Fdevelopers\u002Ferrors","10.developers\u002F07.errors","i-lucide-circle-alert",{"title":188,"path":189,"stem":190},"Email your agent","\u002Fdevelopers\u002Femail-your-agent","10.developers\u002F08.email-your-agent",{"title":192,"path":193,"stem":194},"Email agent with Claude","\u002Fdevelopers\u002Fagent-with-claude","10.developers\u002F09.agent-with-claude",{"title":196,"path":197,"stem":198},"Email agent with ChatGPT","\u002Fdevelopers\u002Fagent-with-chatgpt","10.developers\u002F10.agent-with-chatgpt",{"title":200,"path":201,"stem":202,"children":203,"page":39},"Billing","\u002Fbilling","11.billing",[204],{"title":205,"path":206,"stem":207},"Billing & plans","\u002Fbilling\u002Fplans","11.billing\u002F01.plans",{"title":209,"path":210,"stem":211,"children":212,"page":39},"Security","\u002Fsecurity","12.security",[213],{"title":209,"path":214,"stem":215},"\u002Fsecurity\u002Foverview","12.security\u002F01.overview",{"id":217,"title":126,"body":218,"description":805,"extension":806,"links":807,"meta":808,"navigation":809,"path":127,"seo":810,"stem":128,"__hash__":811},"docs\u002F08.transactional\u002F03.send-api.md",{"type":219,"value":220,"toc":795},"minimark",[221,242,252,257,351,382,389,393,400,485,496,509,513,520,559,566,570,577,638,642,657,661,668,737,758,762,769,773,791],[222,223,224,225,229,230,233,234,237,238,241],"p",{},"One endpoint sends transactional mail: ",[226,227,228],"code",{},"POST \u002Fapi\u002Fv1\u002Femails",". It needs an API key with the ",[226,231,232],{},"mail:send"," scope (create one in the dashboard — see ",[235,236,164],"a",{"href":165},") and a ",[235,239,240],{"href":33},"verified domain"," to send from.",[222,243,244,245,251],{},"The full request\u002Fresponse reference lives in the ",[235,246,250],{"href":247,"rel":248},"https:\u002F\u002Ffaivelo.com\u002Fdocs\u002Fapi",[249],"nofollow","REST API reference"," — this page covers how the endpoint behaves.",[253,254,256],"h2",{"id":255},"a-first-send","A first send",[258,259,264],"pre",{"className":260,"code":261,"language":262,"meta":263,"style":263},"language-bash shiki shiki-themes github-light-high-contrast","curl https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Femails \\\n  -H \"Authorization: Bearer $FAIVELO_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"from\": \"receipts@yourdomain.com\",\n    \"to\": \"customer@example.com\",\n    \"subject\": \"Your order is confirmed\",\n    \"html\": \"\u003Cp>Thanks for your order!\u003C\u002Fp>\"\n  }'\n","bash","",[226,265,266,283,302,312,321,327,333,339,345],{"__ignoreMap":263},[267,268,271,275,279],"span",{"class":269,"line":270},"line",1,[267,272,274],{"class":273},"sV4o_","curl",[267,276,278],{"class":277},"sYEJz"," https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Femails",[267,280,282],{"class":281},"sTJeM"," \\\n",[267,284,286,290,293,297,300],{"class":269,"line":285},2,[267,287,289],{"class":288},"sacAq","  -H",[267,291,292],{"class":277}," \"Authorization: Bearer ",[267,294,296],{"class":295},"sigWx","$FAIVELO_API_KEY",[267,298,299],{"class":277},"\"",[267,301,282],{"class":281},[267,303,305,307,310],{"class":269,"line":304},3,[267,306,289],{"class":288},[267,308,309],{"class":277}," \"Content-Type: application\u002Fjson\"",[267,311,282],{"class":281},[267,313,315,318],{"class":269,"line":314},4,[267,316,317],{"class":288},"  -d",[267,319,320],{"class":277}," '{\n",[267,322,324],{"class":269,"line":323},5,[267,325,326],{"class":277},"    \"from\": \"receipts@yourdomain.com\",\n",[267,328,330],{"class":269,"line":329},6,[267,331,332],{"class":277},"    \"to\": \"customer@example.com\",\n",[267,334,336],{"class":269,"line":335},7,[267,337,338],{"class":277},"    \"subject\": \"Your order is confirmed\",\n",[267,340,342],{"class":269,"line":341},8,[267,343,344],{"class":277},"    \"html\": \"\u003Cp>Thanks for your order!\u003C\u002Fp>\"\n",[267,346,348],{"class":269,"line":347},9,[267,349,350],{"class":277},"  }'\n",[222,352,353,354,357,358,362,363,366,367,370,371,374,375,366,378,381],{},"The ",[226,355,356],{},"from"," address can be ",[359,360,361],"strong",{},"any local part on any of your verified domains"," — no mailbox has to exist for it. ",[226,364,365],{},"to",", ",[226,368,369],{},"cc",", and ",[226,372,373],{},"bcc"," each accept a single address or an array (up to 50 recipients per call). Provide ",[226,376,377],{},"html",[226,379,380],{},"text",", or both.",[222,383,384,385,388],{},"The response includes an ",[226,386,387],{},"id",". Keep it: it's how you look the send up later.",[253,390,392],{"id":391},"sending-a-stored-template","Sending a stored template",[222,394,395,396,399],{},"Instead of inline content, pass a ",[235,397,398],{"href":123},"template"," alias and its variables:",[258,401,405],{"className":402,"code":403,"language":404,"meta":263,"style":263},"language-json shiki shiki-themes github-light-high-contrast","{\n  \"from\": \"receipts@yourdomain.com\",\n  \"to\": \"customer@example.com\",\n  \"templateAlias\": \"order-confirmation\",\n  \"variables\": { \"name\": \"Robin\", \"total\": \"$42.00\" }\n}\n","json",[226,406,407,412,427,439,451,480],{"__ignoreMap":263},[267,408,409],{"class":269,"line":270},[267,410,411],{"class":295},"{\n",[267,413,414,418,421,424],{"class":269,"line":285},[267,415,417],{"class":416},"s742_","  \"from\"",[267,419,420],{"class":295},": ",[267,422,423],{"class":277},"\"receipts@yourdomain.com\"",[267,425,426],{"class":295},",\n",[267,428,429,432,434,437],{"class":269,"line":304},[267,430,431],{"class":416},"  \"to\"",[267,433,420],{"class":295},[267,435,436],{"class":277},"\"customer@example.com\"",[267,438,426],{"class":295},[267,440,441,444,446,449],{"class":269,"line":314},[267,442,443],{"class":416},"  \"templateAlias\"",[267,445,420],{"class":295},[267,447,448],{"class":277},"\"order-confirmation\"",[267,450,426],{"class":295},[267,452,453,456,459,462,464,467,469,472,474,477],{"class":269,"line":323},[267,454,455],{"class":416},"  \"variables\"",[267,457,458],{"class":295},": { ",[267,460,461],{"class":416},"\"name\"",[267,463,420],{"class":295},[267,465,466],{"class":277},"\"Robin\"",[267,468,366],{"class":295},[267,470,471],{"class":416},"\"total\"",[267,473,420],{"class":295},[267,475,476],{"class":277},"\"$42.00\"",[267,478,479],{"class":295}," }\n",[267,481,482],{"class":269,"line":329},[267,483,484],{"class":295},"}\n",[222,486,487,488,491,492,495],{},"The template supplies the subject and body. Rendering is ",[359,489,490],{},"strict",": if a variable the template references is missing, the call fails with ",[226,493,494],{},"422"," and nothing is sent — you get an error, not a receipt with a blank total.",[222,497,498,499,502,503,505,506,508],{},"If the template has an ",[359,500,501],{},"API-content slot",", any ",[226,504,377],{}," you pass renders inside the designed template rather than replacing it. See ",[235,507,122],{"href":123}," for how slots and repeating sections work.",[253,510,512],{"id":511},"safe-retries-with-idempotency-keys","Safe retries with idempotency keys",[222,514,515,516,519],{},"Networks fail mid-request. To retry safely, send any unique string (up to 256 characters) as an ",[226,517,518],{},"Idempotency-Key"," header:",[258,521,523],{"className":260,"code":522,"language":262,"meta":263,"style":263},"curl https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Femails \\\n  -H \"Authorization: Bearer $FAIVELO_API_KEY\" \\\n  -H \"Idempotency-Key: order-8412-confirmation\" \\\n  ...\n",[226,524,525,533,545,554],{"__ignoreMap":263},[267,526,527,529,531],{"class":269,"line":270},[267,528,274],{"class":273},[267,530,278],{"class":277},[267,532,282],{"class":281},[267,534,535,537,539,541,543],{"class":269,"line":285},[267,536,289],{"class":288},[267,538,292],{"class":277},[267,540,296],{"class":295},[267,542,299],{"class":277},[267,544,282],{"class":281},[267,546,547,549,552],{"class":269,"line":304},[267,548,289],{"class":288},[267,550,551],{"class":277}," \"Idempotency-Key: order-8412-confirmation\"",[267,553,282],{"class":281},[267,555,556],{"class":269,"line":314},[267,557,558],{"class":277},"  ...\n",[222,560,561,562,565],{},"Two requests with the same key send ",[359,563,564],{},"at most one email"," — the second request gets the first one's response back. Derive the key from the event that triggered the send (an order id, a reset-token id), not from a timestamp.",[253,567,569],{"id":568},"attachments","Attachments",[222,571,572,573,576],{},"Attach up to ",[359,574,575],{},"10 files, 10 MB total",", base64-encoded:",[258,578,580],{"className":402,"code":579,"language":404,"meta":263,"style":263},"{\n  \"attachments\": [\n    { \"filename\": \"invoice.pdf\", \"content\": \"\u003Cbase64>\", \"contentType\": \"application\u002Fpdf\" }\n  ]\n}\n",[226,581,582,586,594,629,634],{"__ignoreMap":263},[267,583,584],{"class":269,"line":270},[267,585,411],{"class":295},[267,587,588,591],{"class":269,"line":285},[267,589,590],{"class":416},"  \"attachments\"",[267,592,593],{"class":295},": [\n",[267,595,596,599,602,604,607,609,612,614,617,619,622,624,627],{"class":269,"line":304},[267,597,598],{"class":295},"    { ",[267,600,601],{"class":416},"\"filename\"",[267,603,420],{"class":295},[267,605,606],{"class":277},"\"invoice.pdf\"",[267,608,366],{"class":295},[267,610,611],{"class":416},"\"content\"",[267,613,420],{"class":295},[267,615,616],{"class":277},"\"\u003Cbase64>\"",[267,618,366],{"class":295},[267,620,621],{"class":416},"\"contentType\"",[267,623,420],{"class":295},[267,625,626],{"class":277},"\"application\u002Fpdf\"",[267,628,479],{"class":295},[267,630,631],{"class":269,"line":314},[267,632,633],{"class":295},"  ]\n",[267,635,636],{"class":269,"line":323},[267,637,484],{"class":295},[253,639,641],{"id":640},"suppression","Suppression",[222,643,644,645,648,649,653,654,656],{},"Recipients who previously hard-bounced or marked your mail as spam are on your ",[359,646,647],{},"suppression list"," and are dropped from the recipient set automatically. If ",[650,651,652],"em",{},"every"," recipient is suppressed, the call fails with ",[226,655,494],{}," and nothing is sent. This is protection, not an obstacle: sending to a known-bad address damages your domain's deliverability for everyone you mail afterwards.",[253,658,660],{"id":659},"tracking-delivery","Tracking delivery",[222,662,663,664,667],{},"A send starts with status ",[226,665,666],{},"sent"," (accepted for delivery) and updates as events arrive:",[669,670,671,684],"table",{},[672,673,674],"thead",{},[675,676,677,681],"tr",{},[678,679,680],"th",{},"Status",[678,682,683],{},"Meaning",[685,686,687,697,707,717,727],"tbody",{},[675,688,689,694],{},[690,691,692],"td",{},[226,693,666],{},[690,695,696],{},"Accepted for delivery; no events yet",[675,698,699,704],{},[690,700,701],{},[226,702,703],{},"delivered",[690,705,706],{},"The receiving server accepted it",[675,708,709,714],{},[690,710,711],{},[226,712,713],{},"bounced",[690,715,716],{},"The receiving server rejected it (the address is suppressed)",[675,718,719,724],{},[690,720,721],{},[226,722,723],{},"complained",[690,725,726],{},"The recipient marked it as spam (the address is suppressed)",[675,728,729,734],{},[690,730,731],{},[226,732,733],{},"failed",[690,735,736],{},"The send could not be completed",[222,738,739,740,743,744,747,748,366,751,370,754,757],{},"Poll with ",[226,741,742],{},"GET \u002Fapi\u002Fv1\u002Femails\u002F{id}",", or — better for anything real-time — register a ",[235,745,746],{"href":131},"webhook"," and get pushed ",[226,749,750],{},"email.delivered",[226,752,753],{},"email.bounced",[226,755,756],{},"email.complained"," events as they happen. The dashboard's Transactional section shows the same log with full detail.",[253,759,761],{"id":760},"limits","Limits",[222,763,764,765,768],{},"Transactional sends count against your plan's ",[235,766,767],{"href":102},"monthly sending limit"," (and, on a free trial, the sending domain's warm-up ramp). There is no daily allowance to earn: paid plans send at their quota from day one, and bounce or spam-report rates are what pause an account.",[253,770,772],{"id":771},"sending-from-a-mailbox-instead","Sending from a mailbox instead",[222,774,775,778,779,782,783,786,787,790],{},[226,776,777],{},"POST \u002Fapi\u002Fv1\u002Fmailboxes\u002F{address}\u002Fsend"," sends as an ",[359,780,781],{},"existing mailbox",", authenticated as that mailbox — the same path a mail app uses. It also accepts ",[226,784,785],{},"templateAlias",". Use ",[226,788,789],{},"\u002Femails"," for application mail from role addresses that don't need a mailbox; use the mailbox send when the mail should come from a real person's account.",[792,793,794],"style",{},"html pre.shiki code .sV4o_, html code.shiki .sV4o_{--shiki-default:#702C00}html pre.shiki code .sYEJz, html code.shiki .sYEJz{--shiki-default:#032563}html pre.shiki code .sTJeM, html code.shiki .sTJeM{--shiki-default:#A0111F}html pre.shiki code .sacAq, html code.shiki .sacAq{--shiki-default:#023B95}html pre.shiki code .sigWx, html code.shiki .sigWx{--shiki-default:#0E1116}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 pre.shiki code .s742_, html code.shiki .s742_{--shiki-default:#024C1A}",{"title":263,"searchDepth":270,"depth":285,"links":796},[797,798,799,800,801,802,803,804],{"id":255,"depth":285,"text":256},{"id":391,"depth":285,"text":392},{"id":511,"depth":285,"text":512},{"id":568,"depth":285,"text":569},{"id":640,"depth":285,"text":641},{"id":659,"depth":285,"text":660},{"id":760,"depth":285,"text":761},{"id":771,"depth":285,"text":772},"Send transactional email with POST \u002Fapi\u002Fv1\u002Femails.","md",null,{},true,{"title":126,"description":805},"aT5HTGN2UC0eCkpphAAVTwXZE_eqEX4JIvIxTaJv3gw",[813,815],{"title":122,"path":123,"stem":124,"description":814,"children":-1},"Design transactional emails visually, then trigger them from code.",{"title":130,"path":131,"stem":132,"description":816,"children":-1},"Get delivery, bounce, and complaint events pushed to your server.",1792109925149]