HTTP status codes for webhooks

July 23, 2026 · 3 min read

The status code you return is not decoration – it is an instruction to the sender. Returning the wrong one is why endpoints get disabled, events vanish, or the same request hammers your server for three days.

The short table

CodeMeaning for the senderUse when
200 OKReceived and processed. Done.The default answer
202 AcceptedReceived, processing later.You queued the job – the honest answer for async handling
204 No ContentReceived, nothing to say.Same as 200, without a body
400 Bad RequestBroken payload – usually no retry.The body is genuinely unparseable
401 / 403Not authorised – usually no retry.Signature verification failed
404Endpoint doesn't exist. Often disables the webhook.Never on purpose
410 GoneEndpoint permanently gone. Stop sending.You deliberately shut it down
429Too many requests – retry later.You're rate limiting
500 / 503Temporary failure – please retry.Your database is down, a dependency failed

The rule of thumb

2xx = don't send again. 4xx = don't send again, it was our fault. 5xx = send again later. That's the whole logic. Everything else is nuance.

The mistakes that hurt

  • Returning 500 on a bad payload. The provider retries a request that can never succeed – for hours or days.
  • Returning 200 when processing failed. The event is gone forever; the provider considers it delivered. If you can't process it, say 500 and let the retry work for you.
  • Answering slowly. Most providers time out after 5–30 seconds and count it as a failure – even if your code completed.
  • Returning 4xx for a full quota. Careful: the sender may disable the endpoint after enough failures. If the request itself was fine, a 2xx with an explanation in the body is friendlier – that's exactly what Webhooky does when a free-plan limit is reached.

202 is underrated

If you queue work and answer immediately, 202 Accepted is more accurate than 200 OK: “I have it, I'll deal with it.” Providers treat both as success, and your logs stay truthful about what actually happened.

More: retries and idempotency · best practices

Get Webhooky

Free for your first 100 notifications – set up your endpoint in two minutes.

Get it on Google Play Download on the App Store