POST /v1/webhooks/{webhookId}/test
Send a test event to a receiver
Queues one signed webhook.test event to the receiver and answers 202 with its delivery. CompuDime posts it within about a minute, through the same path, headers and signature as the order events, and retries a failure on the same schedule; follow it on GET /v1/webhooks/{webhookId}/deliveries. Use it to check your signature verification before the first order. At most 10 test events per receiver in an hour (429 rate_limited with Retry-After). A disabled receiver is 409 webhook_inactive. Works with test keys too: it is the only event a test key's receiver gets. Needs a key with the order-intake capability. Free.
| Key | Required. See Authentication. |
|---|---|
| Capability | order-intake |
| Scope | orders.webhooks |
| Price | free. How pricing works. |
Example
curl -s -X POST "https://api.compudime.com/v1/webhooks/{webhookId}/test" \
-H "Authorization: Bearer $PUBLIC_API_KEY"
The answer looks like this:
{
"requestId": "req_0123456789abcdef",
"delivery": {
"id": "c2e8f4a0-6b1d-4e3f-8a9c-0d2e4f6a8b1c",
"event": "webhook.test",
"state": "pending",
"attempts": 0,
"nextAttemptAt": "2026-10-13T15:01:00Z",
"createdAt": "2026-10-13T15:01:00Z",
"updatedAt": "2026-10-13T15:01:00Z"
},
"note": "Queued. CompuDime posts it within about a minute; follow it on GET /v1/webhooks/{webhookId}/deliveries."
}
Parameters
| Name | In | Type | Description |
|---|---|---|---|
webhookId required | path | string | The receiver's id (id in the answer of POST /v1/webhooks or GET /v1/webhooks). An id your key has no receiver under is 404 webhook_not_found. |
Responses
| Status | Description | Body |
|---|---|---|
202 | The test event is queued for delivery. | WebhookTestQueuedResponse |
401 | Public API key is missing, invalid, or revoked. | Problem |
403 | The API key does not carry the order-intake capability, or the store has not turned it on (code capability_not_enabled). | Problem |
404 | Your key has no receiver with this id: it never existed, belongs to another integration or to a key of the other mode, or you removed it (code webhook_not_found). | Problem |
405 | The requested method is not allowed for this endpoint. | Problem |
409 | The receiver is disabled (code webhook_inactive): the store owner or CompuDime turned it off, so nothing would be sent to it. | 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. Also answered when 10 test events were sent to this receiver in the last hour; Retry-After then says when the next one may be sent. 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 | orders.webhooks | The level does not change this operation: own and all return the same data. |
all | orders.webhooks | The level does not change this operation: own and all return the same data. |