[{"data":1,"prerenderedAt":1075},["ShallowReactive",2],{"navigation":3,"\u002Fapi\u002Fwebhooks\u002Fretries-and-failures":547,"\u002Fapi\u002Fwebhooks\u002Fretries-and-failures-surround":1070},[4,28,62,92,117,146,253,292,325,349,385,421,459,488],{"title":5,"path":6,"stem":7,"children":8,"icon":27},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17,22],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Usage","\u002Fgetting-started\u002Fusage","1.getting-started\u002F3.usage","i-lucide-sliders",{"title":18,"path":19,"stem":20,"icon":21},"Signing in on the mobile app","\u002Fgetting-started\u002Fmobile-app-sign-in","1.getting-started\u002F4.mobile-app-sign-in","i-lucide-smartphone",{"title":23,"path":24,"stem":25,"icon":26},"Running without email","\u002Fgetting-started\u002Frunning-without-email","1.getting-started\u002F5.running-without-email","i-lucide-mail-x",false,{"title":29,"icon":27,"path":30,"stem":31,"children":32,"page":27},"Security & Privacy","\u002Fsecurity","10.security",[33,38,43,47,52,57],{"title":34,"path":35,"stem":36,"icon":37},"Security Overview","\u002Fsecurity\u002Foverview","10.security\u002F1.overview","i-lucide-shield-check",{"title":39,"path":40,"stem":41,"icon":42},"Authentication","\u002Fsecurity\u002Fauthentication","10.security\u002F2.authentication","i-lucide-log-in",{"title":44,"path":45,"stem":46,"icon":21},"Two-Factor & Devices","\u002Fsecurity\u002Ftwo-factor-and-devices","10.security\u002F3.two-factor-and-devices",{"title":48,"path":49,"stem":50,"icon":51},"Audit & Monitoring","\u002Fsecurity\u002Faudit-and-monitoring","10.security\u002F4.audit-and-monitoring","i-lucide-scroll-text",{"title":53,"path":54,"stem":55,"icon":56},"Account Deletion & Privacy","\u002Fsecurity\u002Faccount-deletion-and-privacy","10.security\u002F5.account-deletion-and-privacy","i-lucide-user-x",{"title":58,"path":59,"stem":60,"icon":61},"Roles & Permissions","\u002Fsecurity\u002Froles-and-permissions","10.security\u002F6.roles-and-permissions","i-lucide-key-round",{"title":63,"icon":27,"path":64,"stem":65,"children":66,"page":27},"Billing & Plans","\u002Fbilling","11.billing",[67,72,77,82,87],{"title":68,"path":69,"stem":70,"icon":71},"Plans","\u002Fbilling\u002Fplans","11.billing\u002F1.plans","i-lucide-credit-card",{"title":73,"path":74,"stem":75,"icon":76},"Limits & Usage","\u002Fbilling\u002Flimits-and-usage","11.billing\u002F2.limits-and-usage","i-lucide-gauge",{"title":78,"path":79,"stem":80,"icon":81},"Managing Your Subscription","\u002Fbilling\u002Fmanaging-your-subscription","11.billing\u002F3.managing-your-subscription","i-lucide-receipt",{"title":83,"path":84,"stem":85,"icon":86},"Add-ons","\u002Fbilling\u002Fadd-ons","11.billing\u002F4.add-ons","i-lucide-puzzle",{"title":88,"path":89,"stem":90,"icon":91},"Integrations","\u002Fbilling\u002Fintegrations","11.billing\u002F5.integrations","i-lucide-plug",{"title":93,"icon":27,"path":94,"stem":95,"children":96,"page":27},"Settings","\u002Fsettings","12.settings",[97,101,105,109,113],{"title":98,"path":99,"stem":100},"General","\u002Fsettings\u002Fgeneral","12.settings\u002F1.general",{"title":102,"path":103,"stem":104},"Leave Types","\u002Fsettings\u002Fleavetype","12.settings\u002F2.leaveType",{"title":106,"path":107,"stem":108},"Carry Forward","\u002Fsettings\u002Fcarryforward","12.settings\u002F3.carryForward",{"title":110,"path":111,"stem":112},"Department Management","\u002Fsettings\u002Fdepartments","12.settings\u002F4.departments",{"title":114,"path":115,"stem":116},"Public Holidays","\u002Fsettings\u002Fpublicholiday","12.settings\u002F5.publicholiday",{"title":118,"path":119,"stem":120,"children":121,"page":27},"Mcp","\u002Fmcp","13.mcp",[122,127,131,136,141],{"title":123,"path":124,"stem":125,"icon":126},"Overview","\u002Fmcp\u002Foverview","13.mcp\u002F1.overview","i-lucide-bot",{"title":128,"path":129,"stem":130,"icon":91},"Connecting","\u002Fmcp\u002Fconnecting","13.mcp\u002F2.connecting",{"title":132,"path":133,"stem":134,"icon":135},"Tools Reference","\u002Fmcp\u002Ftools","13.mcp\u002F3.tools","i-lucide-wrench",{"title":137,"path":138,"stem":139,"icon":140},"Security","\u002Fmcp\u002Fsecurity","13.mcp\u002F4.security","i-lucide-shield",{"title":142,"path":143,"stem":144,"icon":145},"Integrating Your Own MCP Client","\u002Fmcp\u002Fcustom-client","13.mcp\u002F5.custom-client","i-lucide-code",{"title":147,"icon":27,"path":148,"stem":149,"children":150,"page":27},"Public API","\u002Fapi","14.api",[151,156,160,164,169,174,179,183,208,238,243,248],{"title":152,"path":153,"stem":154,"icon":155},"API Overview","\u002Fapi\u002Foverview","14.api\u002F1.overview","i-lucide-code-xml",{"title":5,"path":157,"stem":158,"icon":159},"\u002Fapi\u002Fgetting-started","14.api\u002F2.getting-started","i-lucide-rocket",{"title":161,"path":162,"stem":163,"icon":61},"Authentication & Tokens","\u002Fapi\u002Fauthentication","14.api\u002F3.authentication",{"title":165,"path":166,"stem":167,"icon":168},"API Roles & Scopes","\u002Fapi\u002Froles-and-scopes","14.api\u002F4.roles-and-scopes","i-lucide-layers",{"title":170,"path":171,"stem":172,"icon":173},"Requests & Responses","\u002Fapi\u002Frequests-and-responses","14.api\u002F5.requests-and-responses","i-lucide-arrow-left-right",{"title":175,"path":176,"stem":177,"icon":178},"Errors","\u002Fapi\u002Ferrors","14.api\u002F6.errors","i-lucide-circle-alert",{"title":180,"path":181,"stem":182,"icon":76},"Rate Limits","\u002Fapi\u002Frate-limits","14.api\u002F7.rate-limits",{"title":184,"icon":185,"path":186,"stem":187,"children":188,"page":27},"Guides","i-lucide-book-marked","\u002Fapi\u002Fguides","14.api\u002F8.guides",[189,194,199,204],{"title":190,"path":191,"stem":192,"icon":193},"People","\u002Fapi\u002Fguides\u002Fpeople","14.api\u002F8.guides\u002F1.people","i-lucide-users",{"title":195,"path":196,"stem":197,"icon":198},"Leave","\u002Fapi\u002Fguides\u002Fleave","14.api\u002F8.guides\u002F2.leave","i-lucide-calendar-days",{"title":200,"path":201,"stem":202,"icon":203},"Time","\u002Fapi\u002Fguides\u002Ftime","14.api\u002F8.guides\u002F3.time","i-lucide-clock",{"title":205,"path":206,"stem":207,"icon":81},"Expenses & Documents","\u002Fapi\u002Fguides\u002Fexpenses-and-documents","14.api\u002F8.guides\u002F4.expenses-and-documents",{"title":209,"icon":210,"path":211,"stem":212,"children":213,"page":27},"Webhooks","i-lucide-webhook","\u002Fapi\u002Fwebhooks","14.api\u002F9.webhooks",[214,218,223,228,233],{"title":215,"path":216,"stem":217,"icon":210},"Webhooks Overview","\u002Fapi\u002Fwebhooks\u002Foverview","14.api\u002F9.webhooks\u002F1.overview",{"title":219,"path":220,"stem":221,"icon":222},"Events Reference","\u002Fapi\u002Fwebhooks\u002Fevents","14.api\u002F9.webhooks\u002F2.events","i-lucide-list",{"title":224,"path":225,"stem":226,"icon":227},"Verifying Signatures","\u002Fapi\u002Fwebhooks\u002Fverifying-signatures","14.api\u002F9.webhooks\u002F3.verifying-signatures","i-lucide-badge-check",{"title":229,"path":230,"stem":231,"icon":232},"Retries & Failures","\u002Fapi\u002Fwebhooks\u002Fretries-and-failures","14.api\u002F9.webhooks\u002F4.retries-and-failures","i-lucide-refresh-cw",{"title":234,"path":235,"stem":236,"icon":237},"Best Practices","\u002Fapi\u002Fwebhooks\u002Fbest-practices","14.api\u002F9.webhooks\u002F5.best-practices","i-lucide-list-checks",{"title":239,"path":240,"stem":241,"icon":242},"Postman & OpenAPI","\u002Fapi\u002Fpostman-and-openapi","14.api\u002F91.postman-and-openapi","i-lucide-file-json",{"title":244,"path":245,"stem":246,"icon":247},"Versioning & Changes","\u002Fapi\u002Fversioning","14.api\u002F92.versioning","i-lucide-git-branch",{"title":249,"path":250,"stem":251,"icon":252},"API Reference","\u002Fapi\u002Freference","14.api\u002F93.reference","i-lucide-book-open",{"title":254,"icon":27,"path":255,"stem":256,"children":257,"page":27},"Data Import & Migration","\u002Fdata-import","2.data-import",[258,262,267,272,277,282,287],{"title":123,"path":259,"stem":260,"icon":261},"\u002Fdata-import\u002Foverview","2.data-import\u002F1.overview","i-lucide-database",{"title":263,"path":264,"stem":265,"icon":266},"Importing a File","\u002Fdata-import\u002Fimporting-a-file","2.data-import\u002F2.importing-a-file","i-lucide-file-up",{"title":268,"path":269,"stem":270,"icon":271},"Supported Platforms","\u002Fdata-import\u002Fsupported-platforms","2.data-import\u002F3.supported-platforms","i-lucide-layout-grid",{"title":273,"path":274,"stem":275,"icon":276},"Direct Connections","\u002Fdata-import\u002Fdirect-connections","2.data-import\u002F4.direct-connections","i-lucide-plug-zap",{"title":278,"path":279,"stem":280,"icon":281},"Custom Templates","\u002Fdata-import\u002Fcustom-templates","2.data-import\u002F5.custom-templates","i-lucide-layout-template",{"title":283,"path":284,"stem":285,"icon":286},"Rollback & Import History","\u002Fdata-import\u002Frollback-and-history","2.data-import\u002F6.rollback-and-history","i-lucide-undo-2",{"title":288,"path":289,"stem":290,"icon":291},"Troubleshooting","\u002Fdata-import\u002Ftroubleshooting","2.data-import\u002F7.troubleshooting","i-lucide-life-buoy",{"title":293,"icon":27,"path":294,"stem":295,"children":296,"page":27},"Leave Management","\u002Fleave-management","3.leave-management",[297,302,307,312,316,321],{"title":298,"path":299,"stem":300,"icon":301},"Leave Management Overview","\u002Fleave-management\u002Foverview","3.leave-management\u002F1.overview","i-lucide-palmtree",{"title":303,"path":304,"stem":305,"icon":306},"Requesting Leave","\u002Fleave-management\u002Frequesting-leave","3.leave-management\u002F2.requesting-leave","i-lucide-calendar-plus",{"title":308,"path":309,"stem":310,"icon":311},"Leave Balances","\u002Fleave-management\u002Fleave-balances","3.leave-management\u002F3.leave-balances","i-lucide-wallet",{"title":313,"path":314,"stem":315,"icon":193},"Group Booking","\u002Fleave-management\u002Fgroup-booking","3.leave-management\u002F4.group-booking",{"title":317,"path":318,"stem":319,"icon":320},"Editing and Cancelling Leave","\u002Fleave-management\u002Fediting-and-cancelling","3.leave-management\u002F5.editing-and-cancelling","i-lucide-pencil",{"title":322,"path":323,"stem":324,"icon":291},"Leave Troubleshooting","\u002Fleave-management\u002Ftroubleshooting","3.leave-management\u002F6.troubleshooting",{"title":326,"icon":27,"path":327,"stem":328,"children":329,"page":27},"Approvals","\u002Fapprovals","4.approvals",[330,335,340,344],{"title":331,"path":332,"stem":333,"icon":334},"Approvals Overview","\u002Fapprovals\u002Foverview","4.approvals\u002F1.overview","i-lucide-check-check",{"title":336,"path":337,"stem":338,"icon":339},"Leave Approvals","\u002Fapprovals\u002Fleave-approvals","4.approvals\u002F2.leave-approvals","i-lucide-calendar-check",{"title":341,"path":342,"stem":343,"icon":81},"Expense Approvals","\u002Fapprovals\u002Fexpense-approvals","4.approvals\u002F3.expense-approvals",{"title":345,"path":346,"stem":347,"icon":348},"Time Approvals","\u002Fapprovals\u002Ftime-approvals","4.approvals\u002F4.time-approvals","i-lucide-clock-9",{"title":350,"icon":27,"path":351,"stem":352,"children":353,"page":27},"Time tracking & monitoring","\u002Ftime-tracking","5.Time Tracking",[354,359,364,369,373,377,381],{"title":355,"path":356,"stem":357,"icon":358},"Clocking In & Location","\u002Ftime-tracking\u002Fclock-in-and-location","5.Time Tracking\u002F5.clock-in-and-location","i-lucide-map-pin",{"title":360,"path":361,"stem":362,"icon":363},"Overtime & Pay-Period Lockdown","\u002Ftime-tracking\u002Fovertime-and-lockdown","5.Time Tracking\u002F6.overtime-and-lockdown","i-lucide-lock",{"title":365,"path":366,"stem":367,"icon":368},"Geofencing","\u002Ftime-tracking\u002Fgeofencing","5.Time Tracking\u002F7.geofencing","i-lucide-map",{"title":370,"path":371,"stem":372},"Time & Projects","\u002Ftime-tracking\u002Ftimeandprojects","5.Time Tracking\u002FTime&Projects",{"title":374,"path":375,"stem":376},"Time Tracking","\u002Ftime-tracking\u002Ftime-tracking","5.Time Tracking\u002FTime-tracking",{"title":378,"path":379,"stem":380},"Timeboard","\u002Ftime-tracking\u002Ftimeboard","5.Time Tracking\u002FTimeBoard",{"title":382,"path":383,"stem":384},"Timesheets","\u002Ftime-tracking\u002Ftimesheets","5.Time Tracking\u002FTimesheets",{"title":386,"icon":27,"path":387,"stem":388,"children":389,"page":27},"Expenses","\u002Fexpenses","6.expenses",[390,394,398,402,406,411,416],{"title":391,"path":392,"stem":393},"Expense Claims","\u002Fexpenses\u002Foverview","6.expenses\u002F1.overview",{"title":395,"path":396,"stem":397},"Add & Manage Purchases","\u002Fexpenses\u002Fpurchases","6.expenses\u002F2.purchases",{"title":399,"path":400,"stem":401},"Travel & Mileage Entry","\u002Fexpenses\u002Ftravelentries","6.expenses\u002F3.travelentries",{"title":403,"path":404,"stem":405,"icon":71},"Company Card Expenses","\u002Fexpenses\u002Fcompany-cards","6.expenses\u002F4.company-cards",{"title":407,"path":408,"stem":409,"icon":410},"Per Diems","\u002Fexpenses\u002Fper-diems","6.expenses\u002F5.per-diems","i-lucide-utensils",{"title":412,"path":413,"stem":414,"icon":415},"Receipt Scanning","\u002Fexpenses\u002Freceipt-scanning","6.expenses\u002F6.receipt-scanning","i-lucide-scan-line",{"title":417,"path":418,"stem":419,"icon":420},"Statuses & Submission","\u002Fexpenses\u002Fstatuses-and-submission","6.expenses\u002F7.statuses-and-submission","i-lucide-git-pull-request-arrow",{"title":422,"icon":27,"path":423,"stem":424,"children":425,"page":27},"Documents & E-Signatures","\u002Fdocuments","7.documents",[426,430,435,440,445,449,454],{"title":123,"path":427,"stem":428,"icon":429},"\u002Fdocuments\u002Foverview","7.documents\u002F1.overview","i-lucide-folder-open",{"title":431,"path":432,"stem":433,"icon":434},"Uploading Documents","\u002Fdocuments\u002Fuploading","7.documents\u002F2.uploading","i-lucide-upload",{"title":436,"path":437,"stem":438,"icon":439},"E-Signatures","\u002Fdocuments\u002Fe-signatures","7.documents\u002F3.e-signatures","i-lucide-pen-tool",{"title":441,"path":442,"stem":443,"icon":444},"Audit Trail & Certificate","\u002Fdocuments\u002Faudit-trail","7.documents\u002F4.audit-trail","i-lucide-file-check",{"title":446,"path":447,"stem":448,"icon":281},"Templates & Bulk Send","\u002Fdocuments\u002Ftemplates-and-bulk-send","7.documents\u002F5.templates-and-bulk-send",{"title":450,"path":451,"stem":452,"icon":453},"Onboarding","\u002Fdocuments\u002Fonboarding","7.documents\u002F6.onboarding","i-lucide-user-plus",{"title":455,"path":456,"stem":457,"icon":458},"Offboarding","\u002Fdocuments\u002Foffboarding","7.documents\u002F7.offboarding","i-lucide-user-minus",{"title":460,"icon":27,"path":461,"stem":462,"children":463,"page":27},"People & HR","\u002Fpeople","8.people",[464,468,473,478,483],{"title":465,"path":466,"stem":467,"icon":193},"Directory & Profiles","\u002Fpeople\u002Fdirectory-and-profiles","8.people\u002F1.directory-and-profiles",{"title":469,"path":470,"stem":471,"icon":472},"Managing Users","\u002Fpeople\u002Fmanaging-users","8.people\u002F2.managing-users","i-lucide-user-cog",{"title":474,"path":475,"stem":476,"icon":477},"HR Records","\u002Fpeople\u002Fhr-records","8.people\u002F3.hr-records","i-lucide-folder-archive",{"title":479,"path":480,"stem":481,"icon":482},"Performance","\u002Fpeople\u002Fperformance","8.people\u002F4.performance","i-lucide-target",{"title":484,"path":485,"stem":486,"icon":487},"Training","\u002Fpeople\u002Ftraining","8.people\u002F5.training","i-lucide-graduation-cap",{"title":489,"icon":27,"path":490,"stem":491,"children":492,"page":27},"Features","\u002Ffeatures","9.features",[493,497,501,505,510,515,519,523,527,531,535,539,543],{"title":494,"path":495,"stem":496,"icon":11},"Home","\u002Ffeatures\u002Fhome","9.features\u002F1.home",{"title":498,"path":499,"stem":500},"Email Configuration (SMTP)","\u002Ffeatures\u002Femail-configuration","9.features\u002F10.email-configuration",{"title":502,"path":503,"stem":504},"SMTP troubleshoot","\u002Ffeatures\u002Fsmtp-troubleshoot","9.features\u002F11.smtp-troubleshoot",{"title":506,"path":507,"stem":508,"icon":509},"Notifications","\u002Ffeatures\u002Fnotifications","9.features\u002F12.notifications","i-lucide-bell",{"title":511,"path":512,"stem":513,"icon":514},"Reports","\u002Ffeatures\u002Freports","9.features\u002F13.reports","i-lucide-bar-chart-3",{"title":516,"path":517,"stem":518},"Dashboard","\u002Ffeatures\u002Fdashboard","9.features\u002F2.dashboard",{"title":520,"path":521,"stem":522},"Calendar & Leave Overview","\u002Ffeatures\u002Fcalendar","9.features\u002F3.calendar",{"title":524,"path":525,"stem":526},"Calendar Integration","\u002Ffeatures\u002Fcalendar-integration","9.features\u002F4.calendar-integration",{"title":528,"path":529,"stem":530},"Schedules","\u002Ffeatures\u002Fschedules","9.features\u002F5.schedules",{"title":532,"path":533,"stem":534},"Project Management","\u002Ffeatures\u002Fprojects","9.features\u002F6.projects",{"title":536,"path":537,"stem":538},"Expense Settings","\u002Ffeatures\u002Fexpense-settings","9.features\u002F7.expense-settings",{"title":540,"path":541,"stem":542},"Auth0 SSO Integration","\u002Ffeatures\u002Fauth0-integration","9.features\u002F8.auth0-integration",{"title":544,"path":545,"stem":546},"Password & Authentication Policy","\u002Ffeatures\u002Fpolicies","9.features\u002F9.policies",{"id":548,"title":229,"body":549,"description":1063,"extension":1064,"links":1065,"meta":1066,"navigation":1067,"path":230,"seo":1068,"stem":231,"__hash__":1069},"docs\u002F14.api\u002F9.webhooks\u002F4.retries-and-failures.md",{"type":550,"value":551,"toc":1049},"minimark",[552,557,636,645,648,652,659,665,669,676,754,761,771,775,778,794,797,800,804,819,827,834,838,849,863,872,886,890,915,922,926,935,939],[553,554,556],"h2",{"id":555},"how-a-delivery-is-sent","How a delivery is sent",[558,559,560,573],"table",{},[561,562,563],"thead",{},[564,565,566,570],"tr",{},[567,568,569],"th",{},"Property",[567,571,572],{},"Value",[574,575,576,588,598,608,616,628],"tbody",{},[564,577,578,582],{},[579,580,581],"td",{},"Method",[579,583,584],{},[585,586,587],"code",{},"POST",[564,589,590,593],{},[579,591,592],{},"Content type",[579,594,595],{},[585,596,597],{},"application\u002Fjson",[564,599,600,603],{},[579,601,602],{},"User agent",[579,604,605],{},[585,606,607],{},"Webhooks\u002F1.0",[564,609,610,613],{},[579,611,612],{},"Timeout",[579,614,615],{},"10 seconds for the whole exchange",[564,617,618,621],{},[579,619,620],{},"Redirects",[579,622,623,624,627],{},"Not followed. A ",[585,625,626],{},"3xx"," response counts as a failure.",[564,629,630,633],{},[579,631,632],{},"Response body",[579,634,635],{},"Read up to 1 KB and discarded. Only the status code, the duration and an error category are recorded.",[637,638,639,640,644],"p",{},"The first attempt is normally made within about a second of the change being saved; anything it does not send is picked up by a job that runs every minute. Before ",[641,642,643],"strong",{},"every"," attempt the API switch, the plan, the endpoint's status, its owner and the event's module are checked again, and the receiver's host name is resolved again and must still point only at public addresses.",[637,646,647],{},"The body is built once, at the first attempt, as the endpoint's owner sees the record at that moment. Every retry and redelivery sends exactly the same body, signed with a fresh timestamp.",[553,649,651],{"id":650},"success-and-failure","Success and failure",[637,653,654,655,658],{},"Any ",[585,656,657],{},"2xx"," status code is a success. Everything else is a failure and is retried: other status codes, redirects, timeouts, connection errors, TLS errors and a host name that no longer resolves to a public address.",[637,660,661,662,664],{},"Return ",[585,663,657],{}," as soon as you have verified and stored the event, and do the real work afterwards. A receiver that takes more than 10 seconds to answer is treated as failed even if it later finishes the work.",[553,666,668],{"id":667},"retry-schedule","Retry schedule",[637,670,671,672,675],{},"A delivery gets ",[641,673,674],{},"8 attempts"," in all. After each failed attempt, the next one waits a random time up to the limit below (and never less than 30 seconds), so many failed deliveries do not all retry at the same moment:",[558,677,678,688],{},[561,679,680],{},[564,681,682,685],{},[567,683,684],{},"Attempt",[567,686,687],{},"Waits after the previous attempt",[574,689,690,698,706,714,722,730,738,746],{},[564,691,692,695],{},[579,693,694],{},"1",[579,696,697],{},"Sent straight away",[564,699,700,703],{},[579,701,702],{},"2",[579,704,705],{},"Up to 1 minute",[564,707,708,711],{},[579,709,710],{},"3",[579,712,713],{},"Up to 5 minutes",[564,715,716,719],{},[579,717,718],{},"4",[579,720,721],{},"Up to 30 minutes",[564,723,724,727],{},[579,725,726],{},"5",[579,728,729],{},"Up to 2 hours",[564,731,732,735],{},[579,733,734],{},"6",[579,736,737],{},"Up to 6 hours",[564,739,740,743],{},[579,741,742],{},"7",[579,744,745],{},"Up to 12 hours",[564,747,748,751],{},[579,749,750],{},"8",[579,752,753],{},"Up to 24 hours",[637,755,756,757,760],{},"All eight attempts happen within about 45 hours. If the last attempt fails, the delivery is marked ",[641,758,759],{},"failed",".",[637,762,763,764,767,768,770],{},"Retries carry the same event ",[585,765,766],{},"id",", so a receiver that de-duplicates on ",[585,769,766],{}," processes each event once, even if an earlier attempt succeeded but its response was lost.",[553,772,774],{"id":773},"when-a-delivery-is-cancelled","When a delivery is cancelled",[637,776,777],{},"A queued delivery is cancelled, not sent later, when before its next attempt:",[779,780,781,785,788,791],"ul",{},[782,783,784],"li",{},"the API is switched off, the plan no longer includes API access or the subscription lapses;",[782,786,787],{},"the endpoint is paused or turned off;",[782,789,790],{},"the endpoint's owner is deactivated, offboarded or no longer an Administrator or Executive;",[782,792,793],{},"the module the event belongs to (time tracking or expenses) is switched off.",[637,795,796],{},"A delivery is also cancelled at its first attempt if the owner cannot see the record the event is about. Nothing is sent in that case.",[637,798,799],{},"Cancelled deliveries are listed in the delivery log with the reason.",[553,801,803],{"id":802},"automatic-disabling","Automatic disabling",[637,805,806,807,810,811,814,815,818],{},"An endpoint is ",[641,808,809],{},"turned off"," automatically when every delivery to it has failed for ",[641,812,813],{},"72 hours"," and at least ",[641,816,817],{},"20"," attempts in a row have failed in that time. Any successful delivery resets the count. When it is turned off:",[779,820,821,824],{},[782,822,823],{},"every queued delivery to it is cancelled;",[782,825,826],{},"its owner and every Executive in the organization are emailed.",[637,828,829,830,833],{},"Turning the endpoint back on (",[641,831,832],{},"Resume",") is a manual step, and it does not replay what was missed. Fix the receiver, resume the endpoint, then redeliver.",[553,835,837],{"id":836},"redelivering-events","Redelivering events",[637,839,840,841,844,845,848],{},"From the endpoint's ",[641,842,843],{},"Delivery log"," in ",[641,846,847],{},"Settings > API > Webhooks",":",[779,850,851,857],{},[782,852,853,856],{},[641,854,855],{},"Redeliver"," sends one finished delivery again: succeeded, failed or cancelled.",[782,858,859,862],{},[641,860,861],{},"Redeliver all failed"," queues every failed delivery, and every delivery cancelled because the endpoint was turned off for failing, up to 500 at a time.",[637,864,865,866,871],{},"A redelivery has the same event id and body as the original, a fresh signature and timestamp, and a fresh retry schedule. The endpoint must be active, and redelivering needs the same authority as resuming it (see ",[867,868,870],"a",{"href":869},"\u002Fapi\u002Fwebhooks\u002Foverview#who-can-change-an-endpoint","Who can change an endpoint",").",[637,873,874,875,878,879,882,883,871],{},"Through the API, ",[585,876,877],{},"POST \u002Fwebhooks\u002F{id}\u002Fdeliveries\u002F{delivery_id}\u002Fredeliver"," redelivers one delivery and answers ",[585,880,881],{},"202",". A delivery that is still queued cannot be redelivered (",[585,884,885],{},"409 CONFLICT",[553,887,889],{"id":888},"the-delivery-log","The delivery log",[637,891,892,893,896,897,896,900,903,904,907,908,911,912,760],{},"Each endpoint has a delivery log showing, for every delivery, the event, its status (",[641,894,895],{},"Delivered",", ",[641,898,899],{},"Failed",[641,901,902],{},"Retrying or queued"," or ",[641,905,906],{},"Not sent","), the attempt number, the status code your server returned, the duration, the error category and when the next attempt is due. ",[585,909,910],{},"GET \u002Fwebhooks\u002F{id}\u002Fdeliveries"," returns the same information to a token with ",[585,913,914],{},"webhooks:read",[637,916,917,918,921],{},"Delivery records are kept for ",[641,919,920],{},"30 days",". A delivery that is still queued is never removed.",[553,923,925],{"id":924},"concurrency","Concurrency",[637,927,928,929,931,932,934],{},"At most ",[641,930,718],{}," deliveries are in flight to one endpoint at a time, and at most ",[641,933,817],{}," for one organization, so a slow receiver cannot hold up the others.",[553,936,938],{"id":937},"troubleshooting-by-status","Troubleshooting by status",[558,940,941,951],{},[561,942,943],{},[564,944,945,948],{},[567,946,947],{},"What the log shows",[567,949,950],{},"What to check",[574,952,953,960,977,992,1002,1012,1025,1033,1041],{},[564,954,955,957],{},[579,956,612],{},[579,958,959],{},"Your handler is doing work before responding. Acknowledge first, process afterwards.",[564,961,962,966],{},[579,963,964],{},[585,965,626],{},[579,967,968,969,972,973,976],{},"The URL redirects (for example, ",[585,970,971],{},"http"," to ",[585,974,975],{},"https",", or a trailing slash). Use the final URL.",[564,978,979,987],{},[579,980,981,903,984],{},[585,982,983],{},"401",[585,985,986],{},"403",[579,988,989,990,760],{},"Your signature check or firewall is rejecting deliveries. See ",[867,991,224],{"href":225},[564,993,994,999],{},[579,995,996],{},[585,997,998],{},"404",[579,1000,1001],{},"The URL path is wrong, or the route was removed from your application.",[564,1003,1004,1009],{},[579,1005,1006],{},[585,1007,1008],{},"413",[579,1010,1011],{},"Your server's request size limit is lower than the payload. Payloads are at most 64 KB.",[564,1013,1014,1019],{},[579,1015,1016],{},[585,1017,1018],{},"5xx",[579,1020,1021,1022,760],{},"Your application raised an error. Check its logs for the ",[585,1023,1024],{},"webhook-id",[564,1026,1027,1030],{},[579,1028,1029],{},"Connection refused, reset or unreachable",[579,1031,1032],{},"The host is down, or a firewall blocks the connection.",[564,1034,1035,1038],{},[579,1036,1037],{},"TLS error",[579,1039,1040],{},"The certificate is invalid, expired or does not match the host name.",[564,1042,1043,1046],{},[579,1044,1045],{},"DNS or address error",[579,1047,1048],{},"The host name does not resolve, or resolves to a private address. Receivers must be reachable on the public internet.",{"title":1050,"searchDepth":1051,"depth":1052,"links":1053},"",1,2,[1054,1055,1056,1057,1058,1059,1060,1061,1062],{"id":555,"depth":1052,"text":556},{"id":650,"depth":1052,"text":651},{"id":667,"depth":1052,"text":668},{"id":773,"depth":1052,"text":774},{"id":802,"depth":1052,"text":803},{"id":836,"depth":1052,"text":837},{"id":888,"depth":1052,"text":889},{"id":924,"depth":1052,"text":925},{"id":937,"depth":1052,"text":938},"What counts as a successful webhook delivery, the retry schedule, when an endpoint is turned off automatically, and how to redeliver events.","md",null,{},{"icon":232},{"title":229,"description":1063},"aIqTsDAb42i8PVf6bfOy2DjZOWt5WHNzxI2Uj02dAx4",[1071,1073],{"title":224,"path":225,"stem":226,"description":1072,"icon":227,"children":-1},"Check that a webhook really came from BookYourPTO and was not replayed, with verification samples in Node.js, Python, PHP, Ruby, Go and C#.",{"title":234,"path":235,"stem":236,"description":1074,"icon":237,"children":-1},"A checklist for a secure, reliable webhook receiver, covering verification, de-duplication, ordering, quick acknowledgement and secret handling.",1791906547406]