> 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.

# Chat and images

> Send text or images to the merchant and read the conversation history.

Each trade has a conversation between the customer and the merchant. You send and read messages with the customer's session token.

## Send a message

Call [`POST /v1/trades/{tradeId}/messages`](https://docs.getsinbad.com/api-reference/trade-messages/send-partner-trade-message) with text, with one PNG or JPEG image of up to 3 MiB decoded, or with both. Each named example on the endpoint page shows a valid request and response. See [Limits and limitations](/limits-and-limitations#size-limits) for the size limits.

You can send messages only while the trade is `CREATED`, `PAID` or `DISPUTED`. The trade's owner can still read a completed trade's history.

## Read older messages

Call [`GET /v1/trades/{tradeId}/messages`](https://docs.getsinbad.com/api-reference/trade-messages/list-partner-trade-messages). Each page is returned from oldest to newest. To get older messages, pass the response's `nextCursor` as `before`.

## Read an attachment

[`GET /v1/trades/{tradeId}/messages/{messageId}/image`](https://docs.getsinbad.com/api-reference/trade-messages/get-partner-trade-message-image) returns the original attachment through an authenticated request. It also reads historical merchant file attachments, which keep their native formats and sizes.

## Unavailable attachments

If Sinbad cannot find or validate a stored attachment, the message stays in the history with `attachmentUnavailable: true`, `isUploaded: false` and null image and attachment metadata. Keep the message's caption and preview, and show a placeholder for the missing file. Other messages and pagination keep working. The individual attachment route still rejects the unavailable attachment.