[{"data":1,"prerenderedAt":1513},["ShallowReactive",2],{"navigation":3,"\u002Fdevelopers\u002Fquickstart":200,"\u002Fdevelopers\u002Fquickstart-surround":1508},[4,9,14,40,53,70,91,108,129,146,183,192],{"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],{"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,"children":57,"page":39},"Using Your Mail","\u002Fmail","05.mail",[58,62,66],{"title":59,"path":60,"stem":61},"Webmail","\u002Fmail\u002Fwebmail","05.mail\u002F01.webmail",{"title":63,"path":64,"stem":65},"IMAP & SMTP settings","\u002Fmail\u002Fimap-smtp-settings","05.mail\u002F02.imap-smtp-settings",{"title":67,"path":68,"stem":69},"iPhone setup","\u002Fmail\u002Fios-profile","05.mail\u002F03.ios-profile",{"title":71,"path":72,"stem":73,"children":74,"page":39},"Drive","\u002Fdrive","06.drive",[75,79,83,87],{"title":76,"path":77,"stem":78},"Drive overview","\u002Fdrive\u002Foverview","06.drive\u002F01.overview",{"title":80,"path":81,"stem":82},"Uploading & organising files","\u002Fdrive\u002Ffiles-and-folders","06.drive\u002F02.files-and-folders",{"title":84,"path":85,"stem":86},"Sharing files","\u002Fdrive\u002Fsharing","06.drive\u002F03.sharing",{"title":88,"path":89,"stem":90},"Connect Drive to other apps","\u002Fdrive\u002Fconnect-apps","06.drive\u002F04.connect-apps",{"title":92,"path":93,"stem":94,"children":95,"page":39},"Sending & Campaigns","\u002Fsending","07.sending",[96,100,104],{"title":97,"path":98,"stem":99},"Sending limits","\u002Fsending\u002Flimits","07.sending\u002F01.limits",{"title":101,"path":102,"stem":103},"Campaigns","\u002Fsending\u002Fcampaigns","07.sending\u002F02.campaigns",{"title":105,"path":106,"stem":107},"Deliverability & staying out of spam","\u002Fsending\u002Fdeliverability","07.sending\u002F03.deliverability",{"title":109,"path":110,"stem":111,"children":112,"page":39},"Transactional Email","\u002Ftransactional","08.transactional",[113,117,121,125],{"title":114,"path":115,"stem":116},"Transactional email","\u002Ftransactional\u002Foverview","08.transactional\u002F01.overview",{"title":118,"path":119,"stem":120},"Templates","\u002Ftransactional\u002Ftemplates","08.transactional\u002F02.templates",{"title":122,"path":123,"stem":124},"Sending via the API","\u002Ftransactional\u002Fsend-api","08.transactional\u002F03.send-api",{"title":126,"path":127,"stem":128},"Webhooks","\u002Ftransactional\u002Fwebhooks","08.transactional\u002F04.webhooks",{"title":130,"path":131,"stem":132,"children":133,"page":39},"Migrations","\u002Fmigrations","09.migrations",[134,138,142],{"title":135,"path":136,"stem":137},"Migrating your email","\u002Fmigrations\u002Foverview","09.migrations\u002F01.overview",{"title":139,"path":140,"stem":141},"Migrating from Gmail","\u002Fmigrations\u002Ffrom-gmail","09.migrations\u002F02.from-gmail",{"title":143,"path":144,"stem":145},"Migrating from Microsoft 365","\u002Fmigrations\u002Ffrom-microsoft-365","09.migrations\u002F03.from-microsoft-365",{"title":147,"path":148,"stem":149,"children":150,"page":39},"AI & Developers","\u002Fdevelopers","10.developers",[151,155,159,163,166,170,174,178],{"title":152,"path":153,"stem":154,"icon":8},"Quickstart","\u002Fdevelopers\u002Fquickstart","10.developers\u002F00.quickstart",{"title":156,"path":157,"stem":158},"Connect Claude","\u002Fdevelopers\u002Fconnect-claude","10.developers\u002F01.connect-claude",{"title":160,"path":161,"stem":162},"AI agents & API keys","\u002Fdevelopers\u002Fai-agents","10.developers\u002F02.ai-agents",{"title":126,"path":164,"stem":165},"\u002Fdevelopers\u002Fwebhooks","10.developers\u002F03.webhooks",{"title":167,"path":168,"stem":169},"Partner API","\u002Fdevelopers\u002Fpartners","10.developers\u002F04.partners",{"title":171,"path":172,"stem":173},"Intake and Lens","\u002Fdevelopers\u002Fintake","10.developers\u002F05.intake",{"title":175,"path":176,"stem":177},"Use Faivelo from your coding agent","\u002Fdevelopers\u002Fcoding-agents","10.developers\u002F06.coding-agents",{"title":179,"path":180,"stem":181,"icon":182},"Errors","\u002Fdevelopers\u002Ferrors","10.developers\u002F07.errors","i-lucide-circle-alert",{"title":184,"path":185,"stem":186,"children":187,"page":39},"Billing","\u002Fbilling","11.billing",[188],{"title":189,"path":190,"stem":191},"Billing & plans","\u002Fbilling\u002Fplans","11.billing\u002F01.plans",{"title":193,"path":194,"stem":195,"children":196,"page":39},"Security","\u002Fsecurity","12.security",[197],{"title":193,"path":198,"stem":199},"\u002Fsecurity\u002Foverview","12.security\u002F01.overview",{"id":201,"title":202,"body":203,"description":1501,"extension":1502,"links":1503,"meta":1504,"navigation":1505,"path":153,"seo":1506,"stem":154,"__hash__":1507},"docs\u002F10.developers\u002F00.quickstart.md","Quickstart: send and receive email from code",{"type":204,"value":205,"toc":1491},"minimark",[206,210,215,277,280,283,332,335,367,387,391,397,539,567,576,580,596,754,765,769,772,847,853,856,902,906,909,937,944,972,975,979,996,1164,1167,1267,1272,1276,1296,1299,1339,1342,1420,1431,1435,1487],[207,208,209],"p",{},"This page gets a script or an AI agent from nothing to sending and receiving real email on your own domain. Every command runs as pasted once two values are set.",[211,212,214],"h2",{"id":213},"what-you-need-first","What you need first",[216,217,218,242],"ol",{},[219,220,221,225,226,233,234,238,239,241],"li",{},[222,223,224],"strong",{},"A Faivelo account with a verified domain."," A person sets this up once: sign up at ",[227,228,232],"a",{"href":229,"rel":230},"https:\u002F\u002Ffaivelo.com\u002Fregister",[231],"nofollow","faivelo.com",", add a domain, and Faivelo writes the DNS records for most hosts (or run ",[235,236,237],"code",{},"npx faivelo init yourdomain.com"," from a terminal). See ",[227,240,10],{"href":11},".",[219,243,244,247,248,253,254,257,258,261,262,261,265,268,269,272,273,276],{},[222,245,246],{},"An API key."," A person on the account creates it in ",[227,249,252],{"href":250,"rel":251},"https:\u002F\u002Ffaivelo.com\u002Fsettings\u002Fdevelopers",[231],"Settings → Developers",". Pick the ",[222,255,256],{},"agent"," kind for anything autonomous. Give it the scopes ",[235,259,260],{},"mail:send",", ",[235,263,264],{},"mail:read",[235,266,267],{},"mailboxes:read"," and ",[235,270,271],{},"mailboxes:write",". The key starts with ",[235,274,275],{},"fvl_live_"," and is shown once.",[207,278,279],{},"The API is included on every paid plan and during the free trial.",[207,281,282],{},"Set both values in your shell:",[284,285,290],"pre",{"className":286,"code":287,"language":288,"meta":289,"style":289},"language-bash shiki shiki-themes github-light-high-contrast","export FAIVELO_API_KEY=\"fvl_live_...\"    # the key from Settings → Developers\nexport DOMAIN=\"yourdomain.com\"           # a verified domain on the account\n","bash","",[235,291,292,316],{"__ignoreMap":289},[293,294,297,301,305,308,312],"span",{"class":295,"line":296},"line",1,[293,298,300],{"class":299},"sTJeM","export",[293,302,304],{"class":303},"sigWx"," FAIVELO_API_KEY",[293,306,307],{"class":299},"=",[293,309,311],{"class":310},"sYEJz","\"fvl_live_...\"",[293,313,315],{"class":314},"sFeEa","    # the key from Settings → Developers\n",[293,317,319,321,324,326,329],{"class":295,"line":318},2,[293,320,300],{"class":299},[293,322,323],{"class":303}," DOMAIN",[293,325,307],{"class":299},[293,327,328],{"class":310},"\"yourdomain.com\"",[293,330,331],{"class":314},"           # a verified domain on the account\n",[207,333,334],{},"Check the key works:",[284,336,338],{"className":286,"code":337,"language":288,"meta":289,"style":289},"curl https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Fmailboxes \\\n  -H \"Authorization: Bearer $FAIVELO_API_KEY\"\n",[235,339,340,352],{"__ignoreMap":289},[293,341,342,346,349],{"class":295,"line":296},[293,343,345],{"class":344},"sV4o_","curl",[293,347,348],{"class":310}," https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Fmailboxes",[293,350,351],{"class":299}," \\\n",[293,353,354,358,361,364],{"class":295,"line":318},[293,355,357],{"class":356},"sacAq","  -H",[293,359,360],{"class":310}," \"Authorization: Bearer ",[293,362,363],{"class":303},"$FAIVELO_API_KEY",[293,365,366],{"class":310},"\"\n",[207,368,369,370,373,374,377,378,380,381,384,385,241],{},"A ",[235,371,372],{},"200"," with ",[235,375,376],{},"{\"success\":true,\"data\":[...]}"," means you are ready. Anything else returns an error with a ",[235,379,235],{}," and a ",[235,382,383],{},"fix","; see ",[227,386,179],{"href":180},[211,388,390],{"id":389},"send-an-email","Send an email",[207,392,393,396],{},[235,394,395],{},"POST \u002Fapi\u002Fv1\u002Femails"," sends from any address on a verified domain. No mailbox has to exist for the sender.",[284,398,400],{"className":286,"code":399,"language":288,"meta":289,"style":289},"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\\\": \\\"hello@$DOMAIN\\\",\n    \\\"to\\\": \\\"you@example.com\\\",\n    \\\"subject\\\": \\\"It works\\\",\n    \\\"text\\\": \\\"Sent with the Faivelo API.\\\"\n  }\"\n",[235,401,402,411,424,434,443,471,492,513,533],{"__ignoreMap":289},[293,403,404,406,409],{"class":295,"line":296},[293,405,345],{"class":344},[293,407,408],{"class":310}," https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Femails",[293,410,351],{"class":299},[293,412,413,415,417,419,422],{"class":295,"line":318},[293,414,357],{"class":356},[293,416,360],{"class":310},[293,418,363],{"class":303},[293,420,421],{"class":310},"\"",[293,423,351],{"class":299},[293,425,427,429,432],{"class":295,"line":426},3,[293,428,357],{"class":356},[293,430,431],{"class":310}," \"Content-Type: application\u002Fjson\"",[293,433,351],{"class":299},[293,435,437,440],{"class":295,"line":436},4,[293,438,439],{"class":356},"  -d",[293,441,442],{"class":310}," \"{\n",[293,444,446,449,452,455,458,460,463,466,468],{"class":295,"line":445},5,[293,447,448],{"class":299},"    \\\"",[293,450,451],{"class":310},"from",[293,453,454],{"class":299},"\\\"",[293,456,457],{"class":310},": ",[293,459,454],{"class":299},[293,461,462],{"class":310},"hello@",[293,464,465],{"class":303},"$DOMAIN",[293,467,454],{"class":299},[293,469,470],{"class":310},",\n",[293,472,474,476,479,481,483,485,488,490],{"class":295,"line":473},6,[293,475,448],{"class":299},[293,477,478],{"class":310},"to",[293,480,454],{"class":299},[293,482,457],{"class":310},[293,484,454],{"class":299},[293,486,487],{"class":310},"you@example.com",[293,489,454],{"class":299},[293,491,470],{"class":310},[293,493,495,497,500,502,504,506,509,511],{"class":295,"line":494},7,[293,496,448],{"class":299},[293,498,499],{"class":310},"subject",[293,501,454],{"class":299},[293,503,457],{"class":310},[293,505,454],{"class":299},[293,507,508],{"class":310},"It works",[293,510,454],{"class":299},[293,512,470],{"class":310},[293,514,516,518,521,523,525,527,530],{"class":295,"line":515},8,[293,517,448],{"class":299},[293,519,520],{"class":310},"text",[293,522,454],{"class":299},[293,524,457],{"class":310},[293,526,454],{"class":299},[293,528,529],{"class":310},"Sent with the Faivelo API.",[293,531,532],{"class":299},"\\\"\n",[293,534,536],{"class":295,"line":535},9,[293,537,538],{"class":310},"  }\"\n",[207,540,541,542,545,546,549,550,261,553,261,556,261,559,562,563,566],{},"The response holds an ",[235,543,544],{},"id",". ",[235,547,548],{},"GET \u002Fapi\u002Fv1\u002Femails\u002F{id}"," returns its delivery status (",[235,551,552],{},"sent",[235,554,555],{},"delivered",[235,557,558],{},"bounced",[235,560,561],{},"complained"," or ",[235,564,565],{},"failed",").",[207,568,569,570,573,574,241],{},"To retry safely after a network error, add an ",[235,571,572],{},"Idempotency-Key"," header. Two requests with the same key send at most one email. See ",[227,575,122],{"href":123},[211,577,579],{"id":578},"the-same-in-nodejs","The same in Node.js",[284,581,583],{"className":286,"code":582,"language":288,"meta":289,"style":289},"npm install faivelo\n",[235,584,585],{"__ignoreMap":289},[293,586,587,590,593],{"class":295,"line":296},[293,588,589],{"class":344},"npm",[293,591,592],{"class":310}," install",[293,594,595],{"class":310}," faivelo\n",[284,597,601],{"className":598,"code":599,"language":600,"meta":289,"style":289},"language-ts shiki shiki-themes github-light-high-contrast","import { Faivelo } from 'faivelo'\n\nconst faivelo = new Faivelo(process.env.FAIVELO_API_KEY!)\n\nconst email = await faivelo.emails.send({\n  from: `hello@${process.env.DOMAIN}`,\n  to: 'you@example.com',\n  subject: 'It works',\n  text: 'Sent with the Faivelo SDK.'\n})\n\nconsole.log(email.id)\n","ts",[235,602,603,616,622,652,656,677,703,713,723,731,737,742],{"__ignoreMap":289},[293,604,605,608,611,613],{"class":295,"line":296},[293,606,607],{"class":299},"import",[293,609,610],{"class":303}," { Faivelo } ",[293,612,451],{"class":299},[293,614,615],{"class":310}," 'faivelo'\n",[293,617,618],{"class":295,"line":318},[293,619,621],{"emptyLinePlaceholder":620},true,"\n",[293,623,624,627,630,633,636,640,643,646,649],{"class":295,"line":426},[293,625,626],{"class":299},"const",[293,628,629],{"class":356}," faivelo",[293,631,632],{"class":299}," =",[293,634,635],{"class":299}," new",[293,637,639],{"class":638},"s3dhs"," Faivelo",[293,641,642],{"class":303},"(process.env.",[293,644,645],{"class":356},"FAIVELO_API_KEY",[293,647,648],{"class":299},"!",[293,650,651],{"class":303},")\n",[293,653,654],{"class":295,"line":436},[293,655,621],{"emptyLinePlaceholder":620},[293,657,658,660,663,665,668,671,674],{"class":295,"line":445},[293,659,626],{"class":299},[293,661,662],{"class":356}," email",[293,664,632],{"class":299},[293,666,667],{"class":299}," await",[293,669,670],{"class":303}," faivelo.emails.",[293,672,673],{"class":638},"send",[293,675,676],{"class":303},"({\n",[293,678,679,682,685,688,690,693,695,698,701],{"class":295,"line":473},[293,680,681],{"class":303},"  from: ",[293,683,684],{"class":310},"`hello@${",[293,686,687],{"class":303},"process",[293,689,241],{"class":310},[293,691,692],{"class":303},"env",[293,694,241],{"class":310},[293,696,697],{"class":356},"DOMAIN",[293,699,700],{"class":310},"}`",[293,702,470],{"class":303},[293,704,705,708,711],{"class":295,"line":494},[293,706,707],{"class":303},"  to: ",[293,709,710],{"class":310},"'you@example.com'",[293,712,470],{"class":303},[293,714,715,718,721],{"class":295,"line":515},[293,716,717],{"class":303},"  subject: ",[293,719,720],{"class":310},"'It works'",[293,722,470],{"class":303},[293,724,725,728],{"class":295,"line":535},[293,726,727],{"class":303},"  text: ",[293,729,730],{"class":310},"'Sent with the Faivelo SDK.'\n",[293,732,734],{"class":295,"line":733},10,[293,735,736],{"class":303},"})\n",[293,738,740],{"class":295,"line":739},11,[293,741,621],{"emptyLinePlaceholder":620},[293,743,745,748,751],{"class":295,"line":744},12,[293,746,747],{"class":303},"console.",[293,749,750],{"class":638},"log",[293,752,753],{"class":303},"(email.id)\n",[207,755,756,757,760,761,764],{},"A failed call throws ",[235,758,759],{},"FaiveloError"," with the HTTP ",[235,762,763],{},"statusCode"," and the API's message.",[211,766,768],{"id":767},"give-an-agent-its-own-mailbox","Give an agent its own mailbox",[207,770,771],{},"An agent that signs up for services or talks to people needs an address that can receive mail too. Create one:",[284,773,775],{"className":286,"code":774,"language":288,"meta":289,"style":289},"curl https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Fmailboxes \\\n  -H \"Authorization: Bearer $FAIVELO_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d \"{\\\"domain\\\": \\\"$DOMAIN\\\", \\\"localPart\\\": \\\"agent\\\"}\"\n",[235,776,777,785,797,805],{"__ignoreMap":289},[293,778,779,781,783],{"class":295,"line":296},[293,780,345],{"class":344},[293,782,348],{"class":310},[293,784,351],{"class":299},[293,786,787,789,791,793,795],{"class":295,"line":318},[293,788,357],{"class":356},[293,790,360],{"class":310},[293,792,363],{"class":303},[293,794,421],{"class":310},[293,796,351],{"class":299},[293,798,799,801,803],{"class":295,"line":426},[293,800,357],{"class":356},[293,802,431],{"class":310},[293,804,351],{"class":299},[293,806,807,809,812,814,817,819,821,823,825,827,829,831,834,836,838,840,842,844],{"class":295,"line":436},[293,808,439],{"class":356},[293,810,811],{"class":310}," \"{",[293,813,454],{"class":299},[293,815,816],{"class":310},"domain",[293,818,454],{"class":299},[293,820,457],{"class":310},[293,822,454],{"class":299},[293,824,465],{"class":303},[293,826,454],{"class":299},[293,828,261],{"class":310},[293,830,454],{"class":299},[293,832,833],{"class":310},"localPart",[293,835,454],{"class":299},[293,837,457],{"class":310},[293,839,454],{"class":299},[293,841,256],{"class":310},[293,843,454],{"class":299},[293,845,846],{"class":310},"}\"\n",[207,848,849,852],{},[235,850,851],{},"agent@yourdomain.com"," now exists. An agent key can only see mailboxes it created or was granted, so it can never read the rest of the account. A key may create 10 mailboxes per 24 hours.",[207,854,855],{},"Send as that mailbox (the message lands in its Sent folder, and replies come back to it):",[284,857,859],{"className":286,"code":858,"language":288,"meta":289,"style":289},"curl \"https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Fmailboxes\u002Fagent@$DOMAIN\u002Fsend\" \\\n  -H \"Authorization: Bearer $FAIVELO_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"to\": \"you@example.com\", \"subject\": \"Hello from an agent\", \"text\": \"Reply to this and I will read it.\"}'\n",[235,860,861,875,887,895],{"__ignoreMap":289},[293,862,863,865,868,870,873],{"class":295,"line":296},[293,864,345],{"class":344},[293,866,867],{"class":310}," \"https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Fmailboxes\u002Fagent@",[293,869,465],{"class":303},[293,871,872],{"class":310},"\u002Fsend\"",[293,874,351],{"class":299},[293,876,877,879,881,883,885],{"class":295,"line":318},[293,878,357],{"class":356},[293,880,360],{"class":310},[293,882,363],{"class":303},[293,884,421],{"class":310},[293,886,351],{"class":299},[293,888,889,891,893],{"class":295,"line":426},[293,890,357],{"class":356},[293,892,431],{"class":310},[293,894,351],{"class":299},[293,896,897,899],{"class":295,"line":436},[293,898,439],{"class":356},[293,900,901],{"class":310}," '{\"to\": \"you@example.com\", \"subject\": \"Hello from an agent\", \"text\": \"Reply to this and I will read it.\"}'\n",[211,903,905],{"id":904},"read-the-replies","Read the replies",[207,907,908],{},"List the newest messages in the inbox:",[284,910,912],{"className":286,"code":911,"language":288,"meta":289,"style":289},"curl \"https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Fmailboxes\u002Fagent@$DOMAIN\u002Fmessages?folder=INBOX&limit=10\" \\\n  -H \"Authorization: Bearer $FAIVELO_API_KEY\"\n",[235,913,914,927],{"__ignoreMap":289},[293,915,916,918,920,922,925],{"class":295,"line":296},[293,917,345],{"class":344},[293,919,867],{"class":310},[293,921,465],{"class":303},[293,923,924],{"class":310},"\u002Fmessages?folder=INBOX&limit=10\"",[293,926,351],{"class":299},[293,928,929,931,933,935],{"class":295,"line":318},[293,930,357],{"class":356},[293,932,360],{"class":310},[293,934,363],{"class":303},[293,936,366],{"class":310},[207,938,939,940,943],{},"Each message has a ",[235,941,942],{},"uid",". Read one in full, body included:",[284,945,947],{"className":286,"code":946,"language":288,"meta":289,"style":289},"curl \"https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Fmailboxes\u002Fagent@$DOMAIN\u002Fmessages\u002F\u003Cuid>\" \\\n  -H \"Authorization: Bearer $FAIVELO_API_KEY\"\n",[235,948,949,962],{"__ignoreMap":289},[293,950,951,953,955,957,960],{"class":295,"line":296},[293,952,345],{"class":344},[293,954,867],{"class":310},[293,956,465],{"class":303},[293,958,959],{"class":310},"\u002Fmessages\u002F\u003Cuid>\"",[293,961,351],{"class":299},[293,963,964,966,968,970],{"class":295,"line":318},[293,965,357],{"class":356},[293,967,360],{"class":310},[293,969,363],{"class":303},[293,971,366],{"class":310},[207,973,974],{},"Polling works for a script that waits for one verification code. For anything long-running, use a webhook instead.",[211,976,978],{"id":977},"get-replies-pushed-as-webhooks","Get replies pushed as webhooks",[207,980,981,982,987,988,991,992,995],{},"Add an endpoint in ",[227,983,986],{"href":984,"rel":985},"https:\u002F\u002Ffaivelo.com\u002Fsettings\u002Fdevelopers\u002Fwebhooks",[231],"Settings → Developers → Webhooks"," and subscribe to ",[235,989,990],{},"message.received"," (Pro and Business). Faivelo sends a signed ",[235,993,994],{},"POST"," to your URL the moment mail arrives:",[284,997,1001],{"className":998,"code":999,"language":1000,"meta":289,"style":289},"language-json shiki shiki-themes github-light-high-contrast","{\n  \"id\": \"evt_01J8ZK3V5QXR7\",\n  \"type\": \"message.received\",\n  \"created_at\": \"2026-09-20T14:02:11Z\",\n  \"data\": {\n    \"mailbox\": \"agent@yourdomain.com\",\n    \"message_id\": \"eaaaaab\",\n    \"thread_id\": \"b\",\n    \"folder\": \"INBOX\",\n    \"from\": { \"name\": \"Dana Whitfield\", \"address\": \"dana@northwind.io\" },\n    \"subject\": \"Re: Hello from an agent\",\n    \"snippet\": \"Thanks, here is the code you asked for...\"\n  }\n}\n","json",[235,1002,1003,1008,1021,1033,1045,1053,1065,1077,1089,1101,1130,1142,1152,1158],{"__ignoreMap":289},[293,1004,1005],{"class":295,"line":296},[293,1006,1007],{"class":303},"{\n",[293,1009,1010,1014,1016,1019],{"class":295,"line":318},[293,1011,1013],{"class":1012},"s742_","  \"id\"",[293,1015,457],{"class":303},[293,1017,1018],{"class":310},"\"evt_01J8ZK3V5QXR7\"",[293,1020,470],{"class":303},[293,1022,1023,1026,1028,1031],{"class":295,"line":426},[293,1024,1025],{"class":1012},"  \"type\"",[293,1027,457],{"class":303},[293,1029,1030],{"class":310},"\"message.received\"",[293,1032,470],{"class":303},[293,1034,1035,1038,1040,1043],{"class":295,"line":436},[293,1036,1037],{"class":1012},"  \"created_at\"",[293,1039,457],{"class":303},[293,1041,1042],{"class":310},"\"2026-09-20T14:02:11Z\"",[293,1044,470],{"class":303},[293,1046,1047,1050],{"class":295,"line":445},[293,1048,1049],{"class":1012},"  \"data\"",[293,1051,1052],{"class":303},": {\n",[293,1054,1055,1058,1060,1063],{"class":295,"line":473},[293,1056,1057],{"class":1012},"    \"mailbox\"",[293,1059,457],{"class":303},[293,1061,1062],{"class":310},"\"agent@yourdomain.com\"",[293,1064,470],{"class":303},[293,1066,1067,1070,1072,1075],{"class":295,"line":494},[293,1068,1069],{"class":1012},"    \"message_id\"",[293,1071,457],{"class":303},[293,1073,1074],{"class":310},"\"eaaaaab\"",[293,1076,470],{"class":303},[293,1078,1079,1082,1084,1087],{"class":295,"line":515},[293,1080,1081],{"class":1012},"    \"thread_id\"",[293,1083,457],{"class":303},[293,1085,1086],{"class":310},"\"b\"",[293,1088,470],{"class":303},[293,1090,1091,1094,1096,1099],{"class":295,"line":535},[293,1092,1093],{"class":1012},"    \"folder\"",[293,1095,457],{"class":303},[293,1097,1098],{"class":310},"\"INBOX\"",[293,1100,470],{"class":303},[293,1102,1103,1106,1109,1112,1114,1117,1119,1122,1124,1127],{"class":295,"line":733},[293,1104,1105],{"class":1012},"    \"from\"",[293,1107,1108],{"class":303},": { ",[293,1110,1111],{"class":1012},"\"name\"",[293,1113,457],{"class":303},[293,1115,1116],{"class":310},"\"Dana Whitfield\"",[293,1118,261],{"class":303},[293,1120,1121],{"class":1012},"\"address\"",[293,1123,457],{"class":303},[293,1125,1126],{"class":310},"\"dana@northwind.io\"",[293,1128,1129],{"class":303}," },\n",[293,1131,1132,1135,1137,1140],{"class":295,"line":739},[293,1133,1134],{"class":1012},"    \"subject\"",[293,1136,457],{"class":303},[293,1138,1139],{"class":310},"\"Re: Hello from an agent\"",[293,1141,470],{"class":303},[293,1143,1144,1147,1149],{"class":295,"line":744},[293,1145,1146],{"class":1012},"    \"snippet\"",[293,1148,457],{"class":303},[293,1150,1151],{"class":310},"\"Thanks, here is the code you asked for...\"\n",[293,1153,1155],{"class":295,"line":1154},13,[293,1156,1157],{"class":303},"  }\n",[293,1159,1161],{"class":295,"line":1160},14,[293,1162,1163],{"class":303},"}\n",[207,1165,1166],{},"Check the signature before trusting the body. Pass the raw body, not parsed JSON:",[284,1168,1170],{"className":598,"code":1169,"language":600,"meta":289,"style":289},"import { Faivelo } from 'faivelo'\n\nconst event = await Faivelo.webhooks.verify(\n  rawBody,\n  request.headers['x-faivelo-signature'],\n  process.env.FAIVELO_WEBHOOK_SECRET!\n)\n\nif (event.type === 'message.received') {\n  \u002F\u002F event.data.message_id works anywhere the API takes a message uid\n}\n",[235,1171,1172,1182,1186,1206,1211,1222,1233,1237,1241,1258,1263],{"__ignoreMap":289},[293,1173,1174,1176,1178,1180],{"class":295,"line":296},[293,1175,607],{"class":299},[293,1177,610],{"class":303},[293,1179,451],{"class":299},[293,1181,615],{"class":310},[293,1183,1184],{"class":295,"line":318},[293,1185,621],{"emptyLinePlaceholder":620},[293,1187,1188,1190,1193,1195,1197,1200,1203],{"class":295,"line":426},[293,1189,626],{"class":299},[293,1191,1192],{"class":356}," event",[293,1194,632],{"class":299},[293,1196,667],{"class":299},[293,1198,1199],{"class":303}," Faivelo.webhooks.",[293,1201,1202],{"class":638},"verify",[293,1204,1205],{"class":303},"(\n",[293,1207,1208],{"class":295,"line":436},[293,1209,1210],{"class":303},"  rawBody,\n",[293,1212,1213,1216,1219],{"class":295,"line":445},[293,1214,1215],{"class":303},"  request.headers[",[293,1217,1218],{"class":310},"'x-faivelo-signature'",[293,1220,1221],{"class":303},"],\n",[293,1223,1224,1227,1230],{"class":295,"line":473},[293,1225,1226],{"class":303},"  process.env.",[293,1228,1229],{"class":356},"FAIVELO_WEBHOOK_SECRET",[293,1231,1232],{"class":299},"!\n",[293,1234,1235],{"class":295,"line":494},[293,1236,651],{"class":303},[293,1238,1239],{"class":295,"line":515},[293,1240,621],{"emptyLinePlaceholder":620},[293,1242,1243,1246,1249,1252,1255],{"class":295,"line":535},[293,1244,1245],{"class":299},"if",[293,1247,1248],{"class":303}," (event.type ",[293,1250,1251],{"class":299},"===",[293,1253,1254],{"class":310}," 'message.received'",[293,1256,1257],{"class":303},") {\n",[293,1259,1260],{"class":295,"line":733},[293,1261,1262],{"class":314},"  \u002F\u002F event.data.message_id works anywhere the API takes a message uid\n",[293,1264,1265],{"class":295,"line":739},[293,1266,1163],{"class":303},[207,1268,1269,1270,241],{},"Every event, the payloads and the retry rules are in ",[227,1271,126],{"href":164},[211,1273,1275],{"id":1274},"use-it-from-an-ai-agent-over-mcp","Use it from an AI agent over MCP",[207,1277,1278,1279,261,1282,261,1285,261,1288,1291,1292,1295],{},"The hosted MCP server exposes the same actions as tools (",[235,1280,1281],{},"send_message",[235,1283,1284],{},"list_messages",[235,1286,1287],{},"read_message",[235,1289,1290],{},"create_mailbox"," and more) at ",[235,1293,1294],{},"https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fmcp",", over Streamable HTTP. It is included from the Growth plan.",[207,1297,1298],{},"Claude Code, with an API key:",[284,1300,1302],{"className":286,"code":1301,"language":288,"meta":289,"style":289},"claude mcp add --transport http faivelo https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fmcp \\\n  --header \"Authorization: Bearer $FAIVELO_API_KEY\"\n",[235,1303,1304,1328],{"__ignoreMap":289},[293,1305,1306,1309,1312,1315,1318,1321,1323,1326],{"class":295,"line":296},[293,1307,1308],{"class":344},"claude",[293,1310,1311],{"class":310}," mcp",[293,1313,1314],{"class":310}," add",[293,1316,1317],{"class":356}," --transport",[293,1319,1320],{"class":310}," http",[293,1322,629],{"class":310},[293,1324,1325],{"class":310}," https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fmcp",[293,1327,351],{"class":299},[293,1329,1330,1333,1335,1337],{"class":295,"line":318},[293,1331,1332],{"class":356},"  --header",[293,1334,360],{"class":310},[293,1336,363],{"class":303},[293,1338,366],{"class":310},[207,1340,1341],{},"Any MCP client that reads JSON config:",[284,1343,1345],{"className":998,"code":1344,"language":1000,"meta":289,"style":289},"{\n  \"mcpServers\": {\n    \"faivelo\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fmcp\",\n      \"headers\": { \"Authorization\": \"Bearer fvl_live_...\" }\n    }\n  }\n}\n",[235,1346,1347,1351,1358,1365,1377,1389,1407,1412,1416],{"__ignoreMap":289},[293,1348,1349],{"class":295,"line":296},[293,1350,1007],{"class":303},[293,1352,1353,1356],{"class":295,"line":318},[293,1354,1355],{"class":1012},"  \"mcpServers\"",[293,1357,1052],{"class":303},[293,1359,1360,1363],{"class":295,"line":426},[293,1361,1362],{"class":1012},"    \"faivelo\"",[293,1364,1052],{"class":303},[293,1366,1367,1370,1372,1375],{"class":295,"line":436},[293,1368,1369],{"class":1012},"      \"type\"",[293,1371,457],{"class":303},[293,1373,1374],{"class":310},"\"http\"",[293,1376,470],{"class":303},[293,1378,1379,1382,1384,1387],{"class":295,"line":445},[293,1380,1381],{"class":1012},"      \"url\"",[293,1383,457],{"class":303},[293,1385,1386],{"class":310},"\"https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fmcp\"",[293,1388,470],{"class":303},[293,1390,1391,1394,1396,1399,1401,1404],{"class":295,"line":473},[293,1392,1393],{"class":1012},"      \"headers\"",[293,1395,1108],{"class":303},[293,1397,1398],{"class":1012},"\"Authorization\"",[293,1400,457],{"class":303},[293,1402,1403],{"class":310},"\"Bearer fvl_live_...\"",[293,1405,1406],{"class":303}," }\n",[293,1408,1409],{"class":295,"line":494},[293,1410,1411],{"class":303},"    }\n",[293,1413,1414],{"class":295,"line":515},[293,1415,1157],{"class":303},[293,1417,1418],{"class":295,"line":535},[293,1419,1163],{"class":303},[207,1421,1422,1423,1426,1427,268,1429,241],{},"Without a key, ",[235,1424,1425],{},"claude mcp add --transport http faivelo https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fmcp"," signs in through the browser instead, and the person picks which mailboxes the agent may use. See ",[227,1428,156],{"href":157},[227,1430,160],{"href":161},[211,1432,1434],{"id":1433},"for-agents-reading-this-page","For agents reading this page",[1436,1437,1438,1448,1460,1467,1484],"ul",{},[219,1439,1440,1441,1444,1445,241],{},"Every docs page is available as markdown: add ",[235,1442,1443],{},".md"," to its URL, for example ",[235,1446,1447],{},"https:\u002F\u002Ffaivelo.com\u002Fdocs\u002Fdevelopers\u002Fquickstart.md",[219,1449,1450,1451,1455,1456,241],{},"The index of all pages is at ",[227,1452,1453],{"href":1453,"rel":1454},"https:\u002F\u002Ffaivelo.com\u002Fdocs\u002Fllms.txt",[231],", and all of them in one file at ",[227,1457,1458],{"href":1458,"rel":1459},"https:\u002F\u002Ffaivelo.com\u002Fllms-full.txt",[231],[219,1461,1462,1463,241],{},"The OpenAPI 3.1 spec is at ",[227,1464,1465],{"href":1465,"rel":1466},"https:\u002F\u002Ffaivelo.com\u002Fapi\u002Fv1\u002Fopenapi.json",[231],[219,1468,1469,1470,1472,1473,380,1475,1478,1479,1481,1482,241],{},"Errors carry a stable ",[235,1471,235],{},", a ",[235,1474,383],{},[235,1476,1477],{},"docs"," link. Branch on ",[235,1480,235],{},". See ",[227,1483,179],{"href":180},[219,1485,1486],{},"Creating an account, verifying a domain and creating a key need a person today.",[1488,1489,1490],"style",{},"html pre.shiki code .sTJeM, html code.shiki .sTJeM{--shiki-default:#A0111F}html pre.shiki code .sigWx, html code.shiki .sigWx{--shiki-default:#0E1116}html pre.shiki code .sYEJz, html code.shiki .sYEJz{--shiki-default:#032563}html pre.shiki code .sFeEa, html code.shiki .sFeEa{--shiki-default:#66707B}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 .sV4o_, html code.shiki .sV4o_{--shiki-default:#702C00}html pre.shiki code .sacAq, html code.shiki .sacAq{--shiki-default:#023B95}html pre.shiki code .s742_, html code.shiki .s742_{--shiki-default:#024C1A}html pre.shiki code .s3dhs, html code.shiki .s3dhs{--shiki-default:#622CBC}",{"title":289,"searchDepth":296,"depth":318,"links":1492},[1493,1494,1495,1496,1497,1498,1499,1500],{"id":213,"depth":318,"text":214},{"id":389,"depth":318,"text":390},{"id":578,"depth":318,"text":579},{"id":767,"depth":318,"text":768},{"id":904,"depth":318,"text":905},{"id":977,"depth":318,"text":978},{"id":1274,"depth":318,"text":1275},{"id":1433,"depth":318,"text":1434},"Send your first email, give an agent its own mailbox and read the replies. Every snippet runs as pasted.","md",null,{},{"title":152,"icon":8},{"title":202,"description":1501},"JhBiiDUL7XCFiRnT3CaCiW6xJ7X68KyzueH_cHuBKG0",[1509,1511],{"title":143,"path":144,"stem":145,"description":1510,"children":-1},"Import Microsoft 365 mail with OAuth.",{"title":156,"path":157,"stem":158,"description":1512,"children":-1},"Give Claude access to your mailbox via MCP.",1791124187510]