Retrieve a deal by ID
Returns the details of a single deal scoped to the merchant.
/api/v1/p2p/merchant/deals/{deal_id}Returns the details of a single deal scoped to the merchant.
Authorization
MerchantToken MerchantSignature 64-character hex public merchant token assigned during onboarding.
In: header
Stripe-style HMAC-SHA256 signature.
Format: t=<unix_seconds>,v1=<hex_hmac_sha256>
where hex_hmac = HMAC-SHA256(webhook_secret, "<unix_seconds>.<raw_body>").
Replay window: 5 minutes (60s future drift tolerated).
In: header
Path Parameters
Deal UUID.
uuidResponse Body
application/json
application/problem+json
application/problem+json
curl -X GET "https://example.com/api/v1/p2p/merchant/deals/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "deal": { "deal_id": "7ac148fe-1234-5678-9abc-def012345678", "status": "PAYMENT_VERIFIED", "amount": "150000", "currency": "RUB", "created_at": "2026-08-10T12:00:00Z", "client_id": "player_42", "deal_type": "PAYIN", "updated_at": "2026-08-10T12:06:42Z", "payment_url": "https://checkout.syncra.money/pay/a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2" }}{ "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" } ]}Daily deal turnover (cabinet chart) GET
One aggregate row per (UTC day × deal_type × currency) over a bounded date window, summed from the same UNION ALL surface as the listing (orders `amount` for PAYIN, payouts `amount_fiat` for PAYOUT). `date_from`/`date_to` are REQUIRED RFC3339; the window is capped at 92 days (InvalidArgument beyond). Deals that never happened are excluded (orders EXPIRED/SPAM_REJECTED, payouts FAILED/EXPIRED). Rows are ordered by (date ASC, deal_type ASC, currency ASC); days without deals are absent.
Cancel a PayIn deal POST
Explicitly cancels a deposit (PayIn) deal before the payment is verified. Allowed only from `INITIALIZED`, `ESCROW_LOCKED` or `PAYMENT_NOTIFIED`; escrow holds are released automatically, the fee breakdown is zeroed and matches are marked `FAILED`. Re-cancelling an already-`CANCELLED` deal returns the deal unchanged (idempotent). Players cancel via the public checkout endpoint `POST /api/v1/p2p/checkout/{hash}/cancel` instead.