[{"data":1,"prerenderedAt":1113},["ShallowReactive",2],{"navigation":3,"\u002Fdevelopers\u002Fwebhooks":187,"\u002Fdevelopers\u002Fwebhooks-surround":1108},[4,9,14,40,53,70,91,108,129,146,170,179],{"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,162,166],{"title":152,"path":153,"stem":154},"Connect Claude","\u002Fdevelopers\u002Fconnect-claude","10.developers\u002F01.connect-claude",{"title":156,"path":157,"stem":158},"AI agents & API keys","\u002Fdevelopers\u002Fai-agents","10.developers\u002F02.ai-agents",{"title":126,"path":160,"stem":161},"\u002Fdevelopers\u002Fwebhooks","10.developers\u002F03.webhooks",{"title":163,"path":164,"stem":165},"Partner API","\u002Fdevelopers\u002Fpartners","10.developers\u002F04.partners",{"title":167,"path":168,"stem":169},"Intake and Lens","\u002Fdevelopers\u002Fintake","10.developers\u002F05.intake",{"title":171,"path":172,"stem":173,"children":174,"page":39},"Billing","\u002Fbilling","11.billing",[175],{"title":176,"path":177,"stem":178},"Billing & plans","\u002Fbilling\u002Fplans","11.billing\u002F01.plans",{"title":180,"path":181,"stem":182,"children":183,"page":39},"Security","\u002Fsecurity","12.security",[184],{"title":180,"path":185,"stem":186},"\u002Fsecurity\u002Foverview","12.security\u002F01.overview",{"id":188,"title":126,"body":189,"description":1102,"extension":1103,"links":1104,"meta":1105,"navigation":969,"path":160,"seo":1106,"stem":161,"__hash__":1107},"docs\u002F10.developers\u002F03.webhooks.md",{"type":190,"value":191,"toc":1090},"minimark",[192,196,207,212,248,252,402,406,413,580,585,593,823,833,854,857,861,891,920,924,943,1027,1031,1034,1038,1068,1072,1086],[193,194,195],"p",{},"A webhook is a URL on your server that Faivelo calls when something happens in your account. Instead of asking the API \"anything new?\" every few seconds, you hear about it the moment it happens.",[193,197,198,199,206],{},"Webhooks are included on the Growth, Pro and Business plans (not on free trials). Every plan can have up to 10 endpoints. The delivery log and Events list keep 3 days on Growth, 7 on Pro and 30 on Business. Manage them in ",[200,201,205],"a",{"href":202,"rel":203},"https:\u002F\u002Ffaivelo.com\u002Fsettings\u002Fdevelopers\u002Fwebhooks",[204],"nofollow","Settings → Developers → Webhooks",".",[208,209,211],"h2",{"id":210},"add-an-endpoint","Add an endpoint",[213,214,215,226,234,241],"ol",{},[216,217,218,219,222,223,206],"li",{},"Open ",[220,221,205],"strong",{}," and choose ",[220,224,225],{},"Add endpoint",[216,227,228,229,233],{},"Enter an ",[230,231,232],"code",{},"https"," URL, pick the events you want, and choose whether to listen to the whole account or only some domains or mailboxes.",[216,235,236,237,240],{},"Copy the ",[220,238,239],{},"signing secret",". It is shown once.",[216,242,243,244,247],{},"Press ",[220,245,246],{},"Send test event",". You see what your server answered straight away.",[208,249,251],{"id":250},"events","Events",[253,254,255,268],"table",{},[256,257,258],"thead",{},[259,260,261,265],"tr",{},[262,263,264],"th",{},"Event",[262,266,267],{},"Fires when",[269,270,271,282,292,302,312,322,332,342,352,362,372,382,392],"tbody",{},[259,272,273,279],{},[274,275,276],"td",{},[230,277,278],{},"message.received",[274,280,281],{},"A new message landed in a mailbox, spam folder included. Pro and Business.",[259,283,284,289],{},[274,285,286],{},[230,287,288],{},"message.sent",[274,290,291],{},"A message left a mailbox for the outside world, from webmail, a mail app or the API. Pro and Business.",[259,293,294,299],{},[274,295,296],{},[230,297,298],{},"email.delivered",[274,300,301],{},"The recipient's server accepted an email sent through the API.",[259,303,304,309],{},[274,305,306],{},[230,307,308],{},"email.bounced",[274,310,311],{},"An email could not be delivered.",[259,313,314,319],{},[274,315,316],{},[230,317,318],{},"email.complained",[274,320,321],{},"The recipient marked an email as spam.",[259,323,324,329],{},[274,325,326],{},[230,327,328],{},"mailbox.created",[274,330,331],{},"A mailbox was created.",[259,333,334,339],{},[274,335,336],{},[230,337,338],{},"mailbox.deleted",[274,340,341],{},"A mailbox was deleted.",[259,343,344,349],{},[274,345,346],{},[230,347,348],{},"account.sending_paused",[274,350,351],{},"We paused sending for the whole account, usually for bounces or spam reports.",[259,353,354,359],{},[274,355,356],{},[230,357,358],{},"account.sending_resumed",[274,360,361],{},"Sending was restored after a pause.",[259,363,364,369],{},[274,365,366],{},[230,367,368],{},"account.storage_warning",[274,370,371],{},"Storage passed 80% or 95% of the plan. Repeats daily while it stays there.",[259,373,374,379],{},[274,375,376],{},[230,377,378],{},"domain.verified",[274,380,381],{},"A domain passed verification.",[259,383,384,389],{},[274,385,386],{},[230,387,388],{},"domain.dns_broken",[274,390,391],{},"A required DNS record on a verified domain went missing or changed.",[259,393,394,399],{},[274,395,396],{},[230,397,398],{},"domain.expiring",[274,400,401],{},"A domain registered with us expires in 30 days, and again at 7 days.",[208,403,405],{"id":404},"the-payload","The payload",[193,407,408,409,412],{},"Every event has the same envelope. ",[230,410,411],{},"data"," depends on the event type.",[414,415,420],"pre",{"className":416,"code":417,"language":418,"meta":419,"style":419},"language-json shiki shiki-themes github-light-high-contrast","{\n  \"id\": \"evt_01J8ZK3V5QXR7\",\n  \"type\": \"email.bounced\",\n  \"created_at\": \"2026-09-20T14:02:11Z\",\n  \"data\": {\n    \"email_id\": \"em_01J8ZJW2HN\",\n    \"from\": \"billing@testcompany.com\",\n    \"to\": [\"dana@northwind.io\"],\n    \"subject\": \"Your receipt from Test Company\",\n    \"bounce\": { \"type\": \"permanent\", \"reason\": \"Mailbox does not exist\" }\n  }\n}\n","json","",[230,421,422,431,448,461,474,483,496,509,524,537,568,574],{"__ignoreMap":419},[423,424,427],"span",{"class":425,"line":426},"line",1,[423,428,430],{"class":429},"sigWx","{\n",[423,432,434,438,441,445],{"class":425,"line":433},2,[423,435,437],{"class":436},"s742_","  \"id\"",[423,439,440],{"class":429},": ",[423,442,444],{"class":443},"sYEJz","\"evt_01J8ZK3V5QXR7\"",[423,446,447],{"class":429},",\n",[423,449,451,454,456,459],{"class":425,"line":450},3,[423,452,453],{"class":436},"  \"type\"",[423,455,440],{"class":429},[423,457,458],{"class":443},"\"email.bounced\"",[423,460,447],{"class":429},[423,462,464,467,469,472],{"class":425,"line":463},4,[423,465,466],{"class":436},"  \"created_at\"",[423,468,440],{"class":429},[423,470,471],{"class":443},"\"2026-09-20T14:02:11Z\"",[423,473,447],{"class":429},[423,475,477,480],{"class":425,"line":476},5,[423,478,479],{"class":436},"  \"data\"",[423,481,482],{"class":429},": {\n",[423,484,486,489,491,494],{"class":425,"line":485},6,[423,487,488],{"class":436},"    \"email_id\"",[423,490,440],{"class":429},[423,492,493],{"class":443},"\"em_01J8ZJW2HN\"",[423,495,447],{"class":429},[423,497,499,502,504,507],{"class":425,"line":498},7,[423,500,501],{"class":436},"    \"from\"",[423,503,440],{"class":429},[423,505,506],{"class":443},"\"billing@testcompany.com\"",[423,508,447],{"class":429},[423,510,512,515,518,521],{"class":425,"line":511},8,[423,513,514],{"class":436},"    \"to\"",[423,516,517],{"class":429},": [",[423,519,520],{"class":443},"\"dana@northwind.io\"",[423,522,523],{"class":429},"],\n",[423,525,527,530,532,535],{"class":425,"line":526},9,[423,528,529],{"class":436},"    \"subject\"",[423,531,440],{"class":429},[423,533,534],{"class":443},"\"Your receipt from Test Company\"",[423,536,447],{"class":429},[423,538,540,543,546,549,551,554,557,560,562,565],{"class":425,"line":539},10,[423,541,542],{"class":436},"    \"bounce\"",[423,544,545],{"class":429},": { ",[423,547,548],{"class":436},"\"type\"",[423,550,440],{"class":429},[423,552,553],{"class":443},"\"permanent\"",[423,555,556],{"class":429},", ",[423,558,559],{"class":436},"\"reason\"",[423,561,440],{"class":429},[423,563,564],{"class":443},"\"Mailbox does not exist\"",[423,566,567],{"class":429}," }\n",[423,569,571],{"class":425,"line":570},11,[423,572,573],{"class":429},"  }\n",[423,575,577],{"class":425,"line":576},12,[423,578,579],{"class":429},"}\n",[581,582,584],"h3",{"id":583},"message-events","Message events",[193,586,587,589,590,592],{},[230,588,278],{}," and ",[230,591,288],{}," carry a summary of the message, not the whole thing:",[414,594,596],{"className":416,"code":595,"language":418,"meta":419,"style":419},"{\n  \"id\": \"evt_01J8ZK3V5QXR7\",\n  \"type\": \"message.received\",\n  \"created_at\": \"2026-09-20T14:02:11Z\",\n  \"data\": {\n    \"mailbox\": \"support@testcompany.com\",\n    \"message_id\": \"eaaaaab\",\n    \"thread_id\": \"b\",\n    \"folder\": \"INBOX\",\n    \"from\": { \"name\": \"Dana Whitfield\", \"address\": \"dana@northwind.io\" },\n    \"to\": [{ \"name\": \"Test Company Support\", \"address\": \"support@testcompany.com\" }],\n    \"subject\": \"Question about our invoice\",\n    \"snippet\": \"Hi team, I noticed the March invoice lists two seats we removed in February...\",\n    \"received_at\": \"2026-09-20T14:02:11Z\",\n    \"attachments\": [{ \"name\": \"invoice-march.pdf\", \"content_type\": \"application\u002Fpdf\", \"size\": 48213 }]\n  }\n}\n",[230,597,598,602,612,623,633,639,651,663,675,687,713,738,749,762,774,813,818],{"__ignoreMap":419},[423,599,600],{"class":425,"line":426},[423,601,430],{"class":429},[423,603,604,606,608,610],{"class":425,"line":433},[423,605,437],{"class":436},[423,607,440],{"class":429},[423,609,444],{"class":443},[423,611,447],{"class":429},[423,613,614,616,618,621],{"class":425,"line":450},[423,615,453],{"class":436},[423,617,440],{"class":429},[423,619,620],{"class":443},"\"message.received\"",[423,622,447],{"class":429},[423,624,625,627,629,631],{"class":425,"line":463},[423,626,466],{"class":436},[423,628,440],{"class":429},[423,630,471],{"class":443},[423,632,447],{"class":429},[423,634,635,637],{"class":425,"line":476},[423,636,479],{"class":436},[423,638,482],{"class":429},[423,640,641,644,646,649],{"class":425,"line":485},[423,642,643],{"class":436},"    \"mailbox\"",[423,645,440],{"class":429},[423,647,648],{"class":443},"\"support@testcompany.com\"",[423,650,447],{"class":429},[423,652,653,656,658,661],{"class":425,"line":498},[423,654,655],{"class":436},"    \"message_id\"",[423,657,440],{"class":429},[423,659,660],{"class":443},"\"eaaaaab\"",[423,662,447],{"class":429},[423,664,665,668,670,673],{"class":425,"line":511},[423,666,667],{"class":436},"    \"thread_id\"",[423,669,440],{"class":429},[423,671,672],{"class":443},"\"b\"",[423,674,447],{"class":429},[423,676,677,680,682,685],{"class":425,"line":526},[423,678,679],{"class":436},"    \"folder\"",[423,681,440],{"class":429},[423,683,684],{"class":443},"\"INBOX\"",[423,686,447],{"class":429},[423,688,689,691,693,696,698,701,703,706,708,710],{"class":425,"line":539},[423,690,501],{"class":436},[423,692,545],{"class":429},[423,694,695],{"class":436},"\"name\"",[423,697,440],{"class":429},[423,699,700],{"class":443},"\"Dana Whitfield\"",[423,702,556],{"class":429},[423,704,705],{"class":436},"\"address\"",[423,707,440],{"class":429},[423,709,520],{"class":443},[423,711,712],{"class":429}," },\n",[423,714,715,717,720,722,724,727,729,731,733,735],{"class":425,"line":570},[423,716,514],{"class":436},[423,718,719],{"class":429},": [{ ",[423,721,695],{"class":436},[423,723,440],{"class":429},[423,725,726],{"class":443},"\"Test Company Support\"",[423,728,556],{"class":429},[423,730,705],{"class":436},[423,732,440],{"class":429},[423,734,648],{"class":443},[423,736,737],{"class":429}," }],\n",[423,739,740,742,744,747],{"class":425,"line":576},[423,741,529],{"class":436},[423,743,440],{"class":429},[423,745,746],{"class":443},"\"Question about our invoice\"",[423,748,447],{"class":429},[423,750,752,755,757,760],{"class":425,"line":751},13,[423,753,754],{"class":436},"    \"snippet\"",[423,756,440],{"class":429},[423,758,759],{"class":443},"\"Hi team, I noticed the March invoice lists two seats we removed in February...\"",[423,761,447],{"class":429},[423,763,765,768,770,772],{"class":425,"line":764},14,[423,766,767],{"class":436},"    \"received_at\"",[423,769,440],{"class":429},[423,771,471],{"class":443},[423,773,447],{"class":429},[423,775,777,780,782,784,786,789,791,794,796,799,801,804,806,810],{"class":425,"line":776},15,[423,778,779],{"class":436},"    \"attachments\"",[423,781,719],{"class":429},[423,783,695],{"class":436},[423,785,440],{"class":429},[423,787,788],{"class":443},"\"invoice-march.pdf\"",[423,790,556],{"class":429},[423,792,793],{"class":436},"\"content_type\"",[423,795,440],{"class":429},[423,797,798],{"class":443},"\"application\u002Fpdf\"",[423,800,556],{"class":429},[423,802,803],{"class":436},"\"size\"",[423,805,440],{"class":429},[423,807,809],{"class":808},"sacAq","48213",[423,811,812],{"class":429}," }]\n",[423,814,816],{"class":425,"line":815},16,[423,817,573],{"class":429},[423,819,821],{"class":425,"line":820},17,[423,822,579],{"class":429},[193,824,825,828,829,832],{},[230,826,827],{},"message_id"," is the message's permanent id. Pass it to the API wherever a message UID goes, for example ",[230,830,831],{},"GET \u002Fapi\u002Fv1\u002Fmailboxes\u002Fsupport@testcompany.com\u002Fmessages\u002Feaaaaab",", to read the full body, download attachments, flag, move or delete it. Unlike a UID it stays the same when the message moves to another folder.",[193,834,835,836,838,839,556,841,556,844,589,847,850,851,206],{},"Two things to know about ",[230,837,288],{},". It arrives about 20 seconds after the send, because mail apps save the Sent copy after sending. And an app that keeps no Sent copy (plain SMTP senders) still fires the event, with ",[230,840,827],{},[230,842,843],{},"thread_id",[230,845,846],{},"subject",[230,848,849],{},"snippet"," set to ",[230,852,853],{},"null",[193,855,856],{},"An endpoint narrowed to certain domains or mailboxes only hears about those. One account can cause at most 2,000 message events an hour; past that they are dropped, not delayed.",[208,858,860],{"id":859},"partner-endpoints","Partner endpoints",[193,862,863,864,867,868,871,872,556,875,556,878,589,881,884,885,887,888,206],{},"Partners add endpoints in the partner console under ",[220,865,866],{},"Developers",". One endpoint receives events for every customer you created, and every payload carries a ",[230,869,870],{},"customer_id",". Partner endpoints also get ",[230,873,874],{},"customer.created",[230,876,877],{},"customer.plan_changed",[230,879,880],{},"customer.paused",[230,882,883],{},"customer.resumed"," (the last two are your own pauses; a pause by Faivelo arrives as ",[230,886,348],{},"). Customers created with a sandbox key fire events too, marked ",[230,889,890],{},"\"sandbox\": true",[193,892,893,589,895,897,898,901,902,556,905,556,907,556,909,589,912,915,916,919],{},[230,894,278],{},[230,896,288],{}," reach a partner endpoint only for customers where you hold a mailbox key with the ",[230,899,900],{},"mail:read"," scope, and they carry a pointer rather than the mail itself: ",[230,903,904],{},"mailbox",[230,906,827],{},[230,908,843],{},[230,910,911],{},"folder",[230,913,914],{},"received_at",". No sender, subject or snippet. Fetch the message with that customer's key, ",[230,917,918],{},"GET \u002Fapi\u002Fv1\u002Fmailboxes\u002F{address}\u002Fmessages\u002F{message_id}",", which is also what puts the read on the customer's audit trail.",[208,921,923],{"id":922},"verify-the-signature","Verify the signature",[193,925,926,927,930,931,934,935,938,939,942],{},"Each request has an ",[230,928,929],{},"X-Faivelo-Signature"," header: ",[230,932,933],{},"t=\u003Cunix timestamp>,v1=\u003Csignature>",". The signature is HMAC-SHA256 of ",[230,936,937],{},"\u003Ctimestamp>.\u003Craw body>"," with your signing secret. The SDK (0.6.0 and later) checks it, and rejects timestamps older than 5 minutes, in one call. It throws ",[230,940,941],{},"FaiveloWebhookError"," when a request cannot be trusted; answer those with a 400.",[414,944,948],{"className":945,"code":946,"language":947,"meta":419,"style":419},"language-ts shiki shiki-themes github-light-high-contrast","import { Faivelo } from 'faivelo'\n\nconst event = await Faivelo.webhooks.verify(\n  rawBody, \u002F\u002F the raw request body, not parsed JSON\n  request.headers['x-faivelo-signature'],\n  process.env.FAIVELO_WEBHOOK_SECRET\n)\n","ts",[230,949,950,965,971,995,1004,1014,1022],{"__ignoreMap":419},[423,951,952,956,959,962],{"class":425,"line":426},[423,953,955],{"class":954},"sTJeM","import",[423,957,958],{"class":429}," { Faivelo } ",[423,960,961],{"class":954},"from",[423,963,964],{"class":443}," 'faivelo'\n",[423,966,967],{"class":425,"line":433},[423,968,970],{"emptyLinePlaceholder":969},true,"\n",[423,972,973,976,979,982,985,988,992],{"class":425,"line":450},[423,974,975],{"class":954},"const",[423,977,978],{"class":808}," event",[423,980,981],{"class":954}," =",[423,983,984],{"class":954}," await",[423,986,987],{"class":429}," Faivelo.webhooks.",[423,989,991],{"class":990},"s3dhs","verify",[423,993,994],{"class":429},"(\n",[423,996,997,1000],{"class":425,"line":463},[423,998,999],{"class":429},"  rawBody, ",[423,1001,1003],{"class":1002},"sFeEa","\u002F\u002F the raw request body, not parsed JSON\n",[423,1005,1006,1009,1012],{"class":425,"line":476},[423,1007,1008],{"class":429},"  request.headers[",[423,1010,1011],{"class":443},"'x-faivelo-signature'",[423,1013,523],{"class":429},[423,1015,1016,1019],{"class":425,"line":485},[423,1017,1018],{"class":429},"  process.env.",[423,1020,1021],{"class":808},"FAIVELO_WEBHOOK_SECRET\n",[423,1023,1024],{"class":425,"line":498},[423,1025,1026],{"class":429},")\n",[208,1028,1030],{"id":1029},"limits","Limits",[193,1032,1033],{},"To keep webhooks from being pointed at other people's servers, test events and resends are limited to 20 per 10 minutes per account, and the URL must resolve to a public address. We do not follow redirects.",[208,1035,1037],{"id":1036},"delivery-and-retries","Delivery and retries",[1039,1040,1041,1048,1051,1058,1065],"ul",{},[216,1042,1043,1044,1047],{},"Answer with any ",[230,1045,1046],{},"2xx"," within 10 seconds. Do slow work after you respond.",[216,1049,1050],{},"A failed delivery is retried with growing pauses for 24 hours.",[216,1052,1053,1054,1057],{},"An event can arrive more than once. Use its ",[230,1055,1056],{},"id"," to ignore repeats.",[216,1059,1060,1061,1064],{},"Events can arrive out of order. Use ",[230,1062,1063],{},"created_at"," if order matters.",[216,1066,1067],{},"An endpoint that fails every delivery for 5 days is turned off, and we email you. Turn it back on from its page once your server is fixed.",[208,1069,1071],{"id":1070},"debugging","Debugging",[193,1073,1074,1075,1078,1079,1082,1083,1085],{},"Each endpoint has a ",[220,1076,1077],{},"Deliveries"," log: every attempt, the exact body we sent, what your server answered, and a ",[220,1080,1081],{},"Resend"," button. The ",[220,1084,251],{}," tab lists everything that happened since you added your first endpoint, for the last 30 days, including events no endpoint was subscribed to.",[1087,1088,1089],"style",{},"html pre.shiki code .sigWx, html code.shiki .sigWx{--shiki-default:#0E1116}html pre.shiki code .s742_, html code.shiki .s742_{--shiki-default:#024C1A}html pre.shiki code .sYEJz, html code.shiki .sYEJz{--shiki-default:#032563}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 .sacAq, html code.shiki .sacAq{--shiki-default:#023B95}html pre.shiki code .sTJeM, html code.shiki .sTJeM{--shiki-default:#A0111F}html pre.shiki code .s3dhs, html code.shiki .s3dhs{--shiki-default:#622CBC}html pre.shiki code .sFeEa, html code.shiki .sFeEa{--shiki-default:#66707B}",{"title":419,"searchDepth":426,"depth":433,"links":1091},[1092,1093,1094,1097,1098,1099,1100,1101],{"id":210,"depth":433,"text":211},{"id":250,"depth":433,"text":251},{"id":404,"depth":433,"text":405,"children":1095},[1096],{"id":583,"depth":450,"text":584},{"id":859,"depth":433,"text":860},{"id":922,"depth":433,"text":923},{"id":1029,"depth":433,"text":1030},{"id":1036,"depth":433,"text":1037},{"id":1070,"depth":433,"text":1071},"Get a signed POST the moment mail arrives, a send bounces or a domain needs attention. No polling.","md",null,{},{"title":126,"description":1102},"G7n8sjjP1SpIDbOZS33fJCZd6aIAC1Pf05OX5gGC2bg",[1109,1111],{"title":156,"path":157,"stem":158,"description":1110,"children":-1},"Build agents on the Faivelo API and MCP server.",{"title":163,"path":164,"stem":165,"description":1112,"children":-1},"Resell Faivelo mailboxes under your own brand. Customers, domains, mailboxes and health, from one API.",1790122774843]