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

# Trade actions

> The five settlement actions a customer can take on a funded trade, and how every action is prepared, signed and submitted.

Once a trade exists, the customer moves it forward with one of five actions. All of them share one route, `POST /v1/trades/{tradeId}/actions/{action}/execution`, and one flow. Each action also has its own page with its prerequisites and complete examples.

## The five actions

| Action                                                          | Who                | When                                                              | Result                                                                     |
| --------------------------------------------------------------- | ------------------ | ----------------------------------------------------------------- | -------------------------------------------------------------------------- |
| [`markPaid`](/trade-actions/mark-paid)                          | Customer on a BUY  | After sending the fiat, while the trade is `CREATED`.             | The trade becomes `PAID`.                                                  |
| [`release`](/trade-actions/release)                             | Customer on a SELL | After verifying that the fiat arrived, while the trade is `PAID`. | The USDT goes to the merchant and the trade becomes `RELEASED`.            |
| [`cancelPrePaid`](/trade-actions/cancel-pre-paid)               | Customer on a BUY  | Before marking payment as sent.                                   | The trade ends `CANCELED`.                                                 |
| [`openDispute`](/trade-actions/open-dispute)                    | Customer           | Depends on the side and status. See [Disputes](/disputes).        | The trade becomes `DISPUTED`.                                              |
| [`mutualResolveDispute`](/trade-actions/mutual-resolve-dispute) | Customer           | While the trade is `DISPUTED`.                                    | The trade ends `RELEASED` or `CANCELED`, depending on the customer's side. |

## How every action works

1. **Prepare.** Call [`POST /v1/trades/{tradeId}/actions/{action}/execution`](https://docs.getsinbad.com/api-reference/trade-actions/prepare-partner-customer-action) with the action name. Sinbad checks the trade's current escrow state and timing, and returns an unsigned prepared transaction. Preparing does not execute anything.
2. **Sign.** Have the customer's registered wallet sign the prepared transaction.
3. **Submit.** Call [`POST /v1/transactions`](https://docs.getsinbad.com/api-reference/transactions/submit-prepared-transaction) with the `preparationId` and an `Idempotency-Key`.
4. **Confirm.** Poll [`GET /v1/transactions/{preparationId}`](https://docs.getsinbad.com/api-reference/transactions/get-prepared-transaction-status), then read the trade with [`GET /v1/trades/{tradeId}`](https://docs.getsinbad.com/api-reference/trades/get-partner-trade).

Preparing takes no `Idempotency-Key`, and every call returns a new prepared transaction. Actions have no signing deadline, but the trade must still be in the right state when you prepare.

## Open a dispute

You can send an optional `reason` when you prepare [`openDispute`](/trade-actions/open-dispute): `name_does_not_match_payment`, `payment_not_received` or `other`. The reason is off-chain metadata. It appears in `trade.dispute` and in `trade.updated` only after Sinbad matches it to confirmed escrow evidence. Before that, `dispute` is `null`. A reason you never report, or an ambiguous one, can stay `null`. The details remain on the trade after the dispute is resolved. See [Disputes](/disputes).

## Resolve a dispute

The customer signs one transaction for [`mutualResolveDispute`](/trade-actions/mutual-resolve-dispute), and the other side does nothing.

* On a customer SELL, the customer locked the USDT and concedes, so the USDT goes to the buyer and the trade ends `RELEASED`.
* On a customer BUY, the customer paid the fiat and concedes, so the USDT goes back to the seller who locked it and the trade ends `CANCELED`.