Retries
A delivery succeeds when your endpoint answers with a 2xx status within 15 seconds. Anything else (a non-2xx status, a redirect, a timeout, a connection error, a TLS error) is a failure and is retried.
Schedule
Section titled “Schedule”SpacePost makes up to 8 attempts: the first immediately, then retries with increasing delays after each failure.
| Attempt | Delay after the previous failure | Roughly after the event |
|---|---|---|
| 1 | immediate | 0 |
| 2 | 5 seconds | 5 s |
| 3 | 5 minutes | 5 min |
| 4 | 30 minutes | 35 min |
| 5 | 2 hours | 2 h 35 min |
| 6 | 5 hours | 7 h 35 min |
| 7 | 10 hours | 17 h 35 min |
| 8 | 10 hours | 27 h 35 min |
After the 8th failed attempt the delivery is marked failed and no further automatic attempts are made. You can replay it manually.
Things to know
Section titled “Things to know”- The
webhook-idis the same on every attempt, and the body is identical. Thewebhook-timestampand signature are regenerated for each attempt. - Delivery is at least once. A slow
2xxthat arrives after the timeout is treated as a failure, so your endpoint may see the same event twice. Deduplicate onwebhook-id. - Ordering is not guaranteed. A retried
email.deliveredcan arrive after a lateremail.opened. Usecreated_atin the payload and never move an email’s state backwards. - Disabled or deleted webhooks stop receiving deliveries; pending deliveries for them are marked failed.
- Response bodies (first 1 KB) and status codes of recent attempts are visible in the dashboard delivery log, which keeps 30 days of history.