Skip to main content
Runcrate keeps trying an event until your endpoint takes it, for about 3 hours 40 minutes. Every attempt, its answer and why it failed is in the delivery log, and you can send any event again from there.

What counts as delivered

  • Your endpoint answers with any 2xx status within 10 seconds. The body of your answer is ignored.
  • Anything else is a failed attempt: another status, no answer within 10 seconds, a connection or TLS error, or a host that resolves to a private address.
  • Redirects are not followed. A 301, 302, 307 or 308 is a failed attempt. Paste the address the redirect leads to instead.
The same rules apply to Slack and Discord endpoints.

The retry schedule

An event is tried up to 8 times. The wait before each retry triples, up to an hour: If attempt 8 fails, Runcrate gives up on that event for that endpoint. The times are when an attempt becomes due; it can start a little later. Every attempt sends the same event: the same id and the same body. Each one is signed again, so t in Runcrate-Signature changes. Because a retry can arrive after your server already handled the event (for example when your answer was slower than 10 seconds), drop any event whose id you have already processed. Each attempt carries a Runcrate-Delivery header. Use it to match a request in your own logs to a row in the delivery log. Events are sent independently, so they can arrive out of order, especially around retries. Order them by created_at, not by arrival.

The delivery log

In Settings > Webhooks, select Deliveries, or View deliveries in an endpoint’s menu. Filter by:
  • Endpoint: one endpoint, or All endpoints.
  • Event: one event type, or All events.
  • Status:
Each row shows the event, the endpoint, the status, the HTTP status code, how long the attempt took, which attempt it was, and for a failure one sentence about what went wrong, such as “No answer within 10 seconds. Answer with a 2xx first and do slow work after.” Open a row to see:
  • What was sent: the request body.
  • What came back: the first 2 KB of your endpoint’s answer, with control characters removed (tabs and newlines are kept).
Every member of the workspace can see the delivery log. Only owners and admins can see what was sent and what came back, because either can hold data from your systems. Deliveries are kept for 30 days, then deleted.

Redeliver

Open a delivery and select Redeliver to send that event to that endpoint again. Use it after you fix your endpoint, or to replay an event your server lost. A redelivery is the same event, with the same id and body, signed with the endpoint’s current secret. It gets a new Runcrate-Delivery id, so you can tell it apart in your logs.
  • Only owners and admins can redeliver.
  • The endpoint must be on.
  • While another delivery of the same event to that endpoint is still being tried (Sending or Retrying), Redeliver is refused (HTTP 409). Wait for it to finish.
  • Each person can redeliver 10 times per 10 minutes, and a workspace 30 times per 10 minutes.

Automatic turn-off

Runcrate turns an endpoint off when either is true:
  • It has been failing for 3 days with no success, and with at least 10 failed attempts in that time. A run of failures ends after 12 hours with no failed attempt, so an endpoint that fails only now and then is not turned off.
  • It has had 20 events in a row given up on (each failed all 8 attempts).
When that happens:
  • Nothing more is sent to it. Its row shows Disabled: kept failing.
  • Owners and admins get an email.
  • A webhook.disabled event goes to your other endpoints that subscribe to it, so a broken endpoint can be reported somewhere that works.

Turning it back on

  1. Fix what the delivery log says is wrong.
  2. Select Send a test event from the endpoint’s menu and check that it lands.
  3. Switch the endpoint back on with the switch on its row.
Turning it back on clears its record of failures, so the 3 days and the 20 events count again from zero. It does not send what happened while it was off. Once it is on, open the events you need in the delivery log and select Redeliver. An endpoint an owner or admin switched off shows Disabled by a member, and is switched on the same way.

Best practices

Answer fast, dedupe on id, order by created_at.

Testing locally

Send test events to a server on your own machine.