Troubleshooting: webhook endpoint creation errors
POST /api/v1/webhooks validates your request before it persists anything.
When it rejects, it answers 422 with one of three error codes, and no
endpoint is created. Match the code below, apply its fix, then verify with
the GET /api/v1/webhooks count check at the bottom of this page.
If creation succeeds and deliveries fail instead, switch to
Troubleshooting: failed webhook deliveries.
Symptom map
WEBHOOK_ENDPOINT_CAP_REACHED — you are at 10 endpoints
Each tenant can register up to 10 webhook endpoints. The cap exists so a
runaway integration cannot fan out thousands of delivery jobs per event.
Fix one of two ways:
- Delete a stale endpoint. List your endpoints, find one that no longer receives traffic, and remove it:
- Ask support to raise the cap. If ten endpoints are genuinely in use (one per integration), write in with your tenant id (Settings → Organization) and the integrations each endpoint serves. A raise is an out-of-band operation, not self-serve.
WEBHOOK_DNS_INVALID — the hostname does not resolve
Orbit resolves the URL’s hostname before persisting it. An NXDOMAIN answer
means no inbound request would ever reach your endpoint, so creation stops. The
usual causes, in order of frequency:
- A typo in the domain — swapping a TLD (
.comfor.io) or a dropped character. Re-check the hostname character by character. - A host that is not yet provisioned — the record was not created in DNS, or it lives behind an internal resolver that public DNS cannot answer.
- DNS still propagating — if you just cut the record, wait for your provider’s TTL, then retry the create call.
POST /api/v1/webhooks.
INVALID_WEBHOOK_URL — the URL fails safety validation
When DNS resolves but validation still rejects, the URL itself is the
problem. Webhook endpoint URLs must be publicly routable HTTPS. Check
your URL against this list:
- Use
https://. Plainhttp://is rejected. If you front the endpoint with a CDN, point the URL at the CDN’s HTTPS hostname. - No loopback or literal IPs from private ranges.
localhost,127.0.0.1,10.x,172.16–31.x,192.168.x, and the cloud-metadata address are rejected by design — Orbit must never deliver your events into its own network or your workstation. - No internal suffixes. Hostnames ending in
.internal,.local, or.svcare rejected even when they resolve publicly. - Every resolved IP must be public. A hostname whose A/AAAA records include even one private address fails validation, so multi-homed DNS needs all-public answers.
Verify: the endpoint-count check
Confirm the create succeeded with the endpoint list. The response carries atotal count that reflects every endpoint under the cap:
total < 10 means you have headroom; the new endpoint appearing in rows
closes the loop.
Once creation succeeds
Delivery-level failures — retries, the dead-letter queue, replay — are a different page: Troubleshooting: failed webhook deliveries. Signature rejections are covered in Troubleshooting: signature failures, and the full delivery contract (signatures, retry semantics, security cadence) is on Webhook security.See also
- Error codes reference — the raw code table this page expands on.
- Manage webhook endpoints — request shapes for create, list, and delete.