API ReferenceMerchant APIApi referenceDisputes
Post a message in a dispute
Sends a text message (optionally with file attachments) into the dispute chat.
POST
/api/v1/p2p/merchant/appeals/{appeal_id}/messagesSends a text message (optionally with file attachments) into the dispute chat.
Authorization
MerchantToken MerchantSignature X-Merchant-Token<token>
64-character hex public merchant token assigned during onboarding.
In: header
X-Signature<token>
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
appeal_id*string
Appeal UUID.
Format
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
curl -X POST "https://example.com/api/v1/p2p/merchant/appeals/497f6eca-6276-4993-bfeb-53cbbbba6f08/messages" \ -H "Content-Type: application/json" \ -d '{ "body": "string" }'{ "message": { "message_id": "e3f4a5b6-7890-abcd-ef12-34567890abcd", "appeal_id": "c1d2e3f4-5678-90ab-cdef-1234567890ab", "sender_role": "MERCHANT", "body": "Please check the attached bank transfer screenshot.", "file_ids": [ "a1b2c3d4-e5f6-7890-abcd-ef1234567890" ], "created_at": "2026-08-10T13:05:00Z" }}{ "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" } ]}