> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getsinbad.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getsinbad.com/_mcp/server.

# Payment proof

> Upload, read, replace or remove the active payment receipt for a trade.

Payment proof is a receipt image that the fiat payer attaches to a trade. Only the customer on a BUY uploads proof. On a SELL, the merchant is the fiat payer and the customer can only read it.

## Upload a receipt

Call [`POST /v1/trades/{tradeId}/proof`](https://docs.getsinbad.com/api-reference/payment-proof/upload-partner-trade-proof) while the trade is `CREATED`, `PAID` or `DISPUTED`. Send the image as raw base64 in `dataBase64`, without a `data:` prefix, together with a `contentType` of `image/png` or `image/jpeg`. Uploading proof does not mark the trade as paid.

An identical upload returns the existing matching receipt. After an uncertain result, read the current proof before you change it.

## Read the receipt

[`GET /v1/trades/{tradeId}/proof`](https://docs.getsinbad.com/api-reference/payment-proof/get-partner-trade-proof) returns the original image bytes in `dataBase64`. The `base64` field is only a blurred preview. Authenticated reads preserve the native files that merchants upload.

## Replace the current receipt

Call [`PATCH /v1/trades/{tradeId}/proof`](https://docs.getsinbad.com/api-reference/payment-proof/replace-partner-trade-proof) with `expectedProofId` set to the current proof's ID. If the proof has changed since you read it, the call returns `409 CONFLICT` and leaves the active receipt unchanged. Do not retry different contents against a stale revision.

## Remove the active receipt

Call [`DELETE /v1/trades/{tradeId}/proof`](https://docs.getsinbad.com/api-reference/payment-proof/delete-partner-trade-proof) with `expectedProofId` in the JSON body of the `DELETE` request. Sinbad keeps the evidence that is already in the chat history.

## Errors

| Situation                                                            | Response                                            |
| -------------------------------------------------------------------- | --------------------------------------------------- |
| A proof already exists, the revision changed, or the trade is closed | `409 CONFLICT`. Read the trade and the proof again. |
| The customer is on a SELL and tries to upload or change proof        | `403 FORBIDDEN`. Only the fiat payer uploads.       |
| No current proof or stored file exists                               | `404 NOT_FOUND` on a read.                          |

New uploads must be PNG or JPEG files of up to 3 MiB. Those limits do not restrict how Sinbad reads merchant files that already exist. See [Limits and limitations](/limits-and-limitations#size-limits).