Skip to main content
Every response — success or error — shares one shape.
integer
The HTTP status, repeated in the body.
string
A human-readable summary. "Success" on a plain 200.
enum
Exactly SUCCESS or ERROR.
object | null
The payload. null on an error.
array
A list of { code, message, field }. Empty on success. code is the stable ERRWHK_ or ERRCORE_ identifier — match on it. field names the offending body field, or is null when the error is not field-specific.
Match on errors[].code, not on the HTTP status. Several codes share a status and mean different things — 429 is the per-key rate limit as ERRCORE_1006, but the per-subscription retry and send allowances as ERRWHK_1105 and ERRWHK_1106. One is a property of your key, the others of the subscription.

Codes every endpoint can return

405 carries no Allow header. The gateway relays only Content-Type, so a wrong verb tells you nothing about which verbs the path does serve — check the endpoint page instead.

Webhook error codes

Codes are banded by area, so the first two digits say where the failure came from.
The ingest, registry and gateway bands are raised on internal surfaces and never reach a partner — ERRWHK_1700 is converted to 502 ERRWHK_1900 before it leaves the gateway. Only the partner-visible codes are listed below.

Subscriptions

Deliveries, send and retry

Events and the pull feed

Target and egress policy

Cursors, paging and dates

Secret handling

Server edge

Shared core codes

Retrying safely

ERRWHK_1900 collapses three causes on purpose — the service was unreachable, it refused the gateway’s credentials, or the gateway omitted its partner header. All three are Endl-side, none are your request, and all are retryable.