Delete every request the account's hosted test inbox kept, and keep the inbox: its id, url, events and signing secret are unchanged, so the next test event lands in an empty inbox you can verify with the secret you saved. Only this account's inbox entries are deleted, never a subscription, its queued events or its delivery log. Takes no body. Answers the inbox's id and how many entries were removed, 0 when it was already empty (so a retry is harmless; an Idempotency-Key replays the first answer). A test key only: a live key is 400 test_mode_only. 404 not_found until the inbox is made with POST /v1/webhooks/inbox. Deleting the inbox itself is DELETE /v1/webhooks/{id}.
- Credential
- An API key in
x-api-key - Scopes
webhooks:manage
Parameters
Idempotency-Keyheader · string (uuid)Unique key for idempotent requests. If you retry a request with the same key within 24 hours, you receive the original response. The key is bound to the request payload: reusing it for a different payload returns 422
idempotency_key_reuserather than the original response, so a changed request is never silently dropped. The binding is over the JSON's content, not its bytes — keys in another order or other whitespace are the same request. Generate a new key for each new request. On an operation that moves money (an order, a batch, an item, a shipping or address change, a cancellation's refund), a key that cannot be checked because the idempotency ledger is unreachable is answered 503idempotency_unavailablewithRetry-After, and nothing runs or is charged: retry with the same key.
Request
DELETE /api/v1/webhooks/inbox/entries
curl -X DELETE "https://portal.printedsimply.com/api/v1/webhooks/inbox/entries" \
-H "x-api-key: ps_test_YOUR_KEY" \
-H "Idempotency-Key: empty-webhook-inbox-$(date +%s)"Response 200
The inbox's id and the number of entries removed
data
webhook_idstringrequiredThe inbox's subscription id, unchanged: the inbox stays, with its url and signing secret.
removedintegerrequiredEntries deleted: at most the 100 the inbox keeps, and 0 when it was already empty.
at least 0
meta
pageintegertotalintegerlimitintegerThe page size actually applied, which is not necessarily the one asked for — the operation's own ceiling wins.
pagesintegertotaloverlimit, rounded up.next_cursorstring | nullOn a cursor-paged operation: send this back as
cursorfor the next page. Null on the last page. Absent on operations that do not page by cursor.has_morebooleanOn a list operation whose
metaisListMeta: whether another page follows this one.
{
"status": "success",
"data": {
"webhook_id": "whk_Pxpo7Z0TfZI3H2ZY7yS2tukP",
"removed": 1
},
"request_id": "4e3753e1-48dd-4313-bfd8-48e4af4e116a"
}Errors
A live key (test_mode_only): the inbox is emptied with a test key.
Missing, invalid or expired API key:
missing_api_key(none sent),invalid_api_key(unknown or revoked),key_expired(past the expiry set when it was created; create a new key).404Resource not found
Rate limit exceeded. Two windows can produce this status and
error.codesays which:rate_limit_exceededfor the per-minute sliding window,daily_quota_exceededfor the plan's daily quota. Both carryRetry-After; the daily one also carriesX-Daily-LimitandX-Daily-Remaining. The per-minute limits are plan-based — see Rate Limits above, or call GET /v1/me for this credential's own figures.