All endpoints require a bearer token in the
Authorization header. The two new event types (MAPPING_ERROR_RESOLVED, INVENTORY_DUPLICATE_RESOLVED) require a Pro or above plan.POST /api/v1/webhook-subscriptions
Create a subscription. Returns the freshly generated signing secret exactly once — store it before responding.Request body
Human-readable label.
HTTPS endpoint that will receive deliveries. Must use
https://, must resolve to a non-private IP outside of dev.Array of event types this subscription should receive. One or more of:
MAPPING_COMPLETED— all plansMAPPING_ERROR_RESOLVED— Pro and aboveINVENTORY_DUPLICATE_RESOLVED— Pro and above
Header name attached to every request (e.g.,
X-API-Key).Value for
apiKeyName. Stored encrypted at rest.Extra headers as a key-value map.
ACTIVE or INACTIVE. Inactive subscriptions don’t receive deliveries.Response
Subscription UUID.
Only returned on this initial response. Store it now; we won’t show it again. Used for HMAC verification — see Verifying signatures.
Masked form for UI display (e.g.,
whsec_••••5d4d). Returned on every read.Echoed event subscriptions.
ACTIVE or INACTIVE.PLAN_DOWNGRADE if auto-disabled by a plan downgrade. Otherwise null.Example
GET /api/v1/webhook-subscriptions
List subscriptions for the organization.signingSecret is never returned — only signingSecretMasked.
When
true, only ACTIVE subscriptions are returned.GET /api/v1/webhook-subscriptions/
Retrieve one subscription.signingSecret is masked.
PUT /api/v1/webhook-subscriptions/
Replace the subscription. Same body schema as create. Returns403 if any event in events is not permitted for the org’s current plan.
DELETE /api/v1/webhook-subscriptions/
Permanently delete the subscription and its delivery history. Returns204 No Content.
POST /api/v1/webhook-subscriptions//rotate-secret
Generate a new signing secret and invalidate the old one. Returns the new secret once.GET /api/v1/webhook-subscriptions//deliveries
Recent delivery attempts for inspection and debugging.Max rows. Capped at 200.
Response
POST /api/v1/webhook-subscriptions//test
Enqueue a syntheticwebhook.test event for the subscription. Useful to confirm your endpoint receives and verifies signed payloads end-to-end.
/deliveries for the result within ~30 seconds.
Error codes
| Status | Code | When |
|---|---|---|
| 400 | BAD_REQUEST | Invalid URL, no events, quota exceeded, etc. |
| 401 | UNAUTHORIZED | Missing or invalid bearer token. |
| 403 | FORBIDDEN | At least one requested event requires a plan upgrade. Body includes the offending event names. |
| 404 | NOT_FOUND | Subscription doesn’t exist or belongs to a different org. |
Operational guards
- Quota: 10 active subscriptions per organization.
- URL safety:
https://only; loopback and RFC 1918 hosts are rejected outside dev. - Payload cap: 64 KB. Larger payloads get
{ truncated: true, dataRef }and the data is queryable via API. - Backpressure: when
PENDINGdeliveries for one org exceeds 10,000, new events for that org are dropped silently and an hourly audit entry records the drop.