/api/v1/p2p/merchant/callbacks/{callback_id}/retryСтейджQueues an immediate re-delivery of ONE of the caller's own webhook deliveries. Only records with a terminal failure qualify (status ERROR or RETRY); PENDING/SUCCESS are rejected with 400 FAILED_PRECONDITION. Rate limit: at most one manual retry per record per 60 seconds (otherwise 429 RESOURCE_EXHAUSTED). Another merchant's callback_id — 403; unknown — 404. The rewritten row is returned with status PENDING, cleared response fields, and the PRESERVED retry_count (unlike the admin retry, which resets the attempt counter). Dual authentication: HMAC pair or cabinet JWT. The body is an empty JSON object.
Authorization
MerchantToken MerchantSignature MerchantTimestamp The merchant's public token (64 hex characters), issued at onboarding.
In: header
HMAC-SHA256 signature (a single scheme for all endpoints).
Format: t=<unix_seconds>,v1=<hex_hmac_sha256>
where hex_hmac = HMAC-SHA256(webhook_secret, "<unix_seconds>.<raw_body>").
Replay window: 5 minutes (a 60-second drift into the future is allowed).
In: header
Unix time of the request in seconds. Signature window: 5 minutes back / 60 seconds forward.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/api/v1/p2p/merchant/callbacks/497f6eca-6276-4993-bfeb-53cbbbba6f08/retry" \ -H "X-Merchant-Token: <MERCHANT_TOKEN>" \ -H "X-Timestamp: <UNIX_TIMESTAMP>" \ -H "X-Signature: t=<UNIX_TIMESTAMP>,v1=<HEX_HMAC_SHA256>" \ -H "Content-Type: application/json" \ -d '{}'{ "callback": { "callback_id": "f4a074ff-b67f-4fe6-8a19-9acf4989a084", "deal_id": "2fa5b64f-5b72-4263-958e-07b76f41abe3", "merchant_id": "500924a8-3f5e-4c00-beb8-2efcde988aea", "callback_url": "http://example.com", "status": "PENDING", "retry_count": 0, "response_code": 0, "response_body": "string", "next_retry_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" }}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "instance": "../dictionary", "errors": [ { "field": "amount", "message": "must be greater than 0", "code": "POSITIVE_REQUIRED" } ]}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "instance": "../dictionary", "errors": [ { "field": "amount", "message": "must be greater than 0", "code": "POSITIVE_REQUIRED" } ]}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "instance": "../dictionary", "errors": [ { "field": "amount", "message": "must be greater than 0", "code": "POSITIVE_REQUIRED" } ]}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "instance": "../dictionary", "errors": [ { "field": "amount", "message": "must be greater than 0", "code": "POSITIVE_REQUIRED" } ]}Withdrawal history (manual queue merged with executed debits) GET GET
The merchant's withdrawal history: the manual approval queue merged with executed ledger debits, deduplicated by the on-chain transaction hash. Statuses: PENDING (awaiting approval), APPROVED (approved, not yet in broadcast), COMPLETED (broadcast, tx hash present), CANCELLED (rejected by the operator). The same keyset pagination as deposits.
Deal created Webhook Webhook
Emitted when a new deal enters the `INITIALIZED` state.