List disputes
Returns all merchant disputes with optional status filtering.
/api/v1/p2p/merchant/appealsReturns all merchant disputes with optional status filtering.
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
Query Parameters
Filter by appeal status.
Value in
- "OPEN"
- "IN_PROGRESS"
- "REOPENED"
- "SATISFIED"
- "REJECTED"
Maximum number of results to return (default 20, max 100).
int321 <= value <= 10020Opaque pagination token returned by the previous page.
Response Body
application/json
application/problem+json
curl -X GET "https://example.com/api/v1/p2p/merchant/appeals"{ "data": [ { "appeal_id": "c1d2e3f4-5678-90ab-cdef-1234567890ab", "deal_id": "7ac148fe-1234-5678-9abc-def012345678", "status": "OPEN", "reason": "Funds not credited within 30 minutes", "resolution_note": "", "created_at": "2026-08-10T12:45:00Z", "resolved_at": "", "updated_at": "2026-08-10T12:45:00Z" }, { "appeal_id": "d2e3f4a5-6789-0abc-def1-234567890abc", "deal_id": "8bd2590f-2345-6789-abcd-ef1234567890", "status": "IN_PROGRESS", "reason": "Wrong recipient name", "resolution_note": "", "created_at": "2026-08-09T15:20:00Z", "resolved_at": "", "updated_at": "2026-08-10T09:10:00Z" } ], "next_page_token": ""}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "instance": "../dictionary", "errors": [ { "field": "amount", "message": "must be greater than 0", "code": "POSITIVE_REQUIRED" } ]}Settle an EXPIRED deal's received funds as a NEW deal (operator) POST
Settle-as-received: for an EXPIRED parent deal that actually received funds (`received_amount` > 0), resolving the appeal creates a NEW COMPLETED settlement deal for the received amount at the exchange rate captured at resolve time. The expired original stays EXPIRED forever (terminal states are immutable). The settlement carries `parent_deal_id` / `origin_appeal_id`; one appeal settles at most once (UNIQUE constraint — a repeat call replays the existing settlement). Emits the regular `deal.created` … `deal.completed` webhook sequence for the settlement.
Open a dispute (appeal) POST
Opens a dispute for a specific deal. The merchant may attach evidence files (by their UUIDs).