Skip to main content
Wircle delivers events as HTTPS POST requests. Delivery is asynchronous and at least once: your endpoint may receive the same delivery more than once, so every handler must be idempotent.

Successful delivery

Any HTTP status from 200 through 299 marks the delivery as succeeded. Wircle does not use the response body. Verify the signature, durably record the delivery, and return a 2xx response as soon as possible. Run slow work asynchronously after the event has been accepted. Each request has a 15-second timeout. A timeout, connection error, or non-2xx response is treated as a failed attempt.

HTTP response behavior

Return 410 Gone only when you intentionally want Wircle to stop delivering to that endpoint. Once disabled, the endpoint no longer matches new events.

Retry schedule

Wircle makes one initial attempt and up to nine retries. Delays are measured from the end of the preceding failed attempt. After attempt 10 fails, the delivery is marked failed. Scheduling and worker availability can make an attempt occur slightly later than the listed delay.

What remains stable across retries

One event can match multiple endpoints. Those requests share the event body id, but each endpoint receives a different webhook-id. Deduplicate by webhook-id so one endpoint’s successful processing does not suppress another endpoint’s delivery.

Idempotent receiver pattern

Use a transaction or another atomic operation to persist both the verified delivery ID and a queued work item before returning success:
enqueueEventOnce should use a transaction and enforce a unique constraint on the delivery ID. This prevents concurrent duplicates from both performing the same action without losing the event if the receiver stops between deduplication and queueing.

Delivery statuses

Inspect delivery activity

Workspace owners and admins can view aggregate status and the 50 most recently updated deliveries in the Developer → Webhooks page or through:
Each delivery item includes: Use the activity history to distinguish receiver errors from connection failures. After correcting a URL, pending retries automatically use the updated endpoint URL.