Skip to main content

POST /v1/webhooks

POST /v1/webhooks

ScopeIdempotency-KeyOperation ID
webhooks.manageRequiredregisterWebhook

Register or update a webhook endpoint and its subscriptions.

Subscriptions name catalogue events. The URL must be https with no credentials, and every address its host resolves to must be public: private, loopback, link-local and other special ranges are refused (VALIDATION_FAILED, detail.field: url). The URL is resolved again before every attempt. A new endpoint answers 201 with its signing secret, shown once; keep it to verify X-Intellisol-Signature: t=<unix>,v1=<hex>, which is HMAC-SHA256 over "<t>.<raw body>". With reference, the tenant's endpoint is updated (URL and subscriptions) and re-enabled if it was disabled (200, no secret). Deliveries are at least once with exponential backoff, ordering is not guaranteed (each body carries the job's event sequence), and an endpoint failing persistently is disabled automatically. Idempotency-Key required. Audited.

Request​

Signed with your API credential: see Authentication.

ParameterInRequiredDescription
Idempotency-KeyheaderYesOne key per user intent, reused for every retry of that intent. See Idempotency.

Body​

FieldTypeRequiredDescription
referencestringNoPattern ^WHK-[0-9A-HJKMNP-TV-Z]{8}$.
urlstring, uriYesPattern ^https://. At most 2048 characters.
subscriptionsarray of stringYesOne of: delivery.requested, delivery.assigned, rider.accepted, delivery.picked_up, delivery.on_the_way, delivery.arrived, delivery.delivered, delivery.cancelled, delivery.reassigned, delivery.failed, delivery.exception_raised, delivery.batched, delivery.unbatched, relay.requested, relay.claimed, relay.completed, relay.failed, payment.state_changed, partner.blocked, partner.reactivated, bulk.created, bulk.recipient_confirmed, bulk.quote_ready, bulk.confirmed, bulk.progress_updated, bulk.completed, bulk.cancelled, credential.revoked.

Responses​

200​

Updated.

FieldTypeRequiredDescription
referencestringYesPattern ^WHK-[0-9A-HJKMNP-TV-Z]{8}$.
urlstringYes
subscriptionsarray of stringYesOne of: delivery.requested, delivery.assigned, rider.accepted, delivery.picked_up, delivery.on_the_way, delivery.arrived, delivery.delivered, delivery.cancelled, delivery.reassigned, delivery.failed, delivery.exception_raised, delivery.batched, delivery.unbatched, relay.requested, relay.claimed, relay.completed, relay.failed, payment.state_changed, partner.blocked, partner.reactivated, bulk.created, bulk.recipient_confirmed, bulk.quote_ready, bulk.confirmed, bulk.progress_updated, bulk.completed, bulk.cancelled, credential.revoked.
statusstringYesOne of: ACTIVE, DISABLED.
secretstringNoThe signing secret, in the 201 answer only (shown once)

201​

Registered; the secret is shown this once.

FieldTypeRequiredDescription
referencestringYesPattern ^WHK-[0-9A-HJKMNP-TV-Z]{8}$.
urlstringYes
subscriptionsarray of stringYesOne of: delivery.requested, delivery.assigned, rider.accepted, delivery.picked_up, delivery.on_the_way, delivery.arrived, delivery.delivered, delivery.cancelled, delivery.reassigned, delivery.failed, delivery.exception_raised, delivery.batched, delivery.unbatched, relay.requested, relay.claimed, relay.completed, relay.failed, payment.state_changed, partner.blocked, partner.reactivated, bulk.created, bulk.recipient_confirmed, bulk.quote_ready, bulk.confirmed, bulk.progress_updated, bulk.completed, bulk.cancelled, credential.revoked.
statusstringYesOne of: ACTIVE, DISABLED.
secretstringNoThe signing secret, in the 201 answer only (shown once)

400​

Structural validation failed or an Idempotency-Key is missing.

The error envelope: code, message, detail, request_id.

401​

Unknown, revoked or wrong-environment credential, bad signature, or expired session.

The error envelope: code, message, detail, request_id.

403​

Tenant access denied (existence is not disclosed), insufficient scope, MFA/step-up required, partner blocked or module disabled.

The error envelope: code, message, detail, request_id.

409​

State changed, race lost, or idempotency conflict. Refetch before deciding again.

The error envelope: code, message, detail, request_id.

422​

Semantically invalid (location, vehicle, server-controlled field, bulk limits).

The error envelope: code, message, detail, request_id.

429​

Rate limit reached; honour Retry-After.

The error envelope: code, message, detail, request_id.

500​

Unexpected failure. Only code and request_id are returned.

The error envelope: code, message, detail, request_id.