All endpoints require an API key in the
X-API-Key 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
string
Human-readable label.
string
required
HTTPS endpoint that will receive deliveries. Must use
https://, must resolve to a non-private IP outside of dev.string[]
required
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
string
Header name attached to every request (e.g.,
X-API-Key).string
Value for
apiKeyName. Stored encrypted at rest.object
Extra headers as a key-value map.
string
default:"ACTIVE"
ACTIVE or INACTIVE. Inactive subscriptions don’t receive deliveries.Response
string
Subscription UUID.
string
Only returned on this initial response. Store it now; we won’t show it again. Used for HMAC verification — see Verifying signatures.
string
Masked form for UI display (e.g.,
whsec_••••5d4d). Returned on every read.string[]
Echoed event subscriptions.
string
ACTIVE or INACTIVE.string
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.
boolean
default:"false"
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.integer
default:"50"
Max rows. Capped at 200.
Response
object[]
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
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.