GET /v1/webhooks
List your webhook receivers
Your integration's receivers for the calling key's mode, oldest first, each with its latest delivery. Never a secret: secretPrefix is its first characters, enough to tell secrets apart. Free, and needs only a valid key (a key without order intake has none). Receivers belong to the calling key's integration and mode. A live key's receivers get the order events they subscribe to; a test key's receivers get only the test events you send them, because a test key's orders are simulated and never send a webhook. A test key never sees a live receiver and a live key never sees a test one. Receivers CompuDime staff registered for your integration are live receivers.
| Key | Required. See Authentication. |
|---|---|
| Scope | webhooks.read |
| Price | free. How pricing works. |
Example
curl -s "https://api.compudime.com/v1/webhooks" \
-H "Authorization: Bearer $PUBLIC_API_KEY"
The answer looks like this:
{
"requestId": "req_0123456789abcdef",
"webhooks": [
{
"id": "7b0c9a1e-3f52-4c1d-9a7e-2d4f6b8c0e13",
"url": "https://hooks.example.com/compudime/orders",
"events": [
"order.dispatched",
"order.parked"
],
"active": true,
"mode": "live",
"secretPrefix": "whsec_3f9a1c",
"createdAt": "2026-10-13T15:00:00Z",
"updatedAt": "2026-10-13T15:00:00Z",
"lastDelivery": {
"id": "c2e8f4a0-6b1d-4e3f-8a9c-0d2e4f6a8b1c",
"event": "webhook.test",
"state": "delivered",
"attempts": 1,
"lastStatus": 204,
"createdAt": "2026-10-13T15:01:00Z",
"updatedAt": "2026-10-13T15:01:21Z",
"deliveredAt": "2026-10-13T15:01:21Z"
}
}
],
"limit": 5
}
Responses
| Status | Description | Body |
|---|---|---|
200 | Your receivers for this key mode. | WebhookListResponse |
401 | Public API key is missing, invalid, or revoked. | Problem |
403 | The API key is not enabled for this endpoint. | Problem |
405 | The requested method is not allowed for this endpoint. | Problem |
429 | Too many requests from this API key (code rate_limited). Each key has its own request budget at the API edge, refilled continuously; it covers every authenticated endpoint, including the free ones, and is checked before anything is billed or sent to the store. Wait at least Retry-After seconds before the next request with this key, then resume; if 429 answers again, back off exponentially (double the wait each time, up to a minute or so) and add random jitter so parallel workers do not retry in step. A 429 is never charged and reserves nothing. Header Retry-After: Whole seconds to wait before retrying with this key: the time until the key's next request token at the edge (never less than 1), or 60 when the store plan's per-minute ceiling refused the call. | Problem |
500 | The API edge encountered an internal error. | Problem |
503 | A required Public API dependency is temporarily unavailable. Also answered, with code endpoint_disabled, while CompuDime has temporarily switched the endpoint off: the whole API, the endpoint's family (x-compudime-family) or this endpoint alone; the detail says which and why. It is checked before anything is validated, reserved or sent to the store, so it is never charged; it is retryable and carries Retry-After. Header Retry-After: Sent with code endpoint_disabled: whole seconds to wait before asking again. A switch has no scheduled end, so this is a polling interval (60), not a promise. | Problem |
Error bodies are problem JSON; every code is listed there.
Access level
What your integration's access level changes here.
| Level | Scope | Effect |
|---|---|---|
own | webhooks.read | The level does not change this operation: own and all return the same data. |
all | webhooks.read | The level does not change this operation: own and all return the same data. |