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

> Signed notification from Sinbad to your registered HTTPS receiver.

## Before you receive events

* [Register an endpoint](https://docs.getsinbad.com/api-reference/webhooks/create-webhook), store its signing secret, and [verify the receiver](https://docs.getsinbad.com/api-reference/webhooks/test-webhook).
* Subscribe the endpoint to this event type.
* Verify the timestamp and signature against the raw request body before you parse or acknowledge it. See [Webhooks](/webhooks#verify-signatures-before-parsing).

```http
POST <your receiver URL>
Content-Type: application/json
Sinbad-Webhook-Id: evt_demo
Sinbad-Webhook-Timestamp: <Unix seconds>
Sinbad-Webhook-Signature: v1=<keyId>:<HMAC-SHA256 hex>
```

## Payload examples

### Trade created

```json
{
  "id": "evt_demo",
  "type": "trade.created",
  "apiVersion": "2026-10-22",
  "environment": "sinbad-staging-env",
  "partnerId": "partner_demo",
  "integrationId": "integration_demo",
  "partnerUserId": "customer_demo",
  "tradeId": "trade_demo",
  "sequence": 3,
  "occurredAt": "2026-10-23T10:00:00.000Z",
  "sourceCommittedAt": "2026-10-23T10:00:00.000Z",
  "recordedAt": "2026-10-23T10:00:00.000Z",
  "data": {
    "trade": {
      "dispute": null,
      "tradeId": "trade_demo",
      "transferNumber": "B2B-DEMO",
      "tradeRef": "0xabababababababababababababababababababababababababababababababab",
      "status": "CREATED",
      "side": "BUY",
      "chainId": 80002,
      "tokenAddress": "0x4444444444444444444444444444444444444444",
      "escrowAddress": "0x3333333333333333333333333333333333333333",
      "escrowId": "42",
      "transactionHash": "0xabababababababababababababababababababababababababababababababab",
      "settlementTransactionHash": null,
      "disputeTransactionHash": null,
      "settlementOutcome": null,
      "fiatCurrencyId": "usd",
      "paymentMethodId": "bank_transfer",
      "createdAt": "2026-10-23T10:00:00.000Z",
      "displayLabel": "Bank transfer",
      "fundedAt": "2026-10-23T10:00:00.000Z",
      "paidAt": null,
      "releasedAt": null,
      "canceledAt": null,
      "disputedAt": null,
      "resolvedAt": null,
      "fundingExpiresAt": null,
      "pricing": {
        "usdtAmount": "100",
        "customerFiatAmount": "100",
        "subtotalFiat": "100",
        "makerFeeUsdt": "0",
        "platformFeeUsdt": "0",
        "partnerFeeUsdt": "0",
        "lockAmountUsdt": "100",
        "recipientAmountUsdt": "100"
      },
      "proofOfPayment": null
    }
  }
}
```

## Your response

Return a 2xx response once you have durably stored the event. Deduplicate on the signed event ID: retries and manual replays keep the same ID.

Trade and message events share one sequence counter, so gaps are normal if you subscribe to only some event types. A message can arrive after a newer trade update, so do not treat arrival order as the complete history of a trade. [List the trades](https://docs.getsinbad.com/api-reference/trades/list-partner-trades) to reconcile.

These payloads are synthetic examples.