---
title: "Simulate a USDT deposit for a sell order (sandbox only)"
method: POST
path: "/v1/simulations/orders/{id}/usdt-receipt"
tags: ["Partner API"]
---

# Simulate a USDT deposit for a sell order (sandbox only)

`POST /v1/simulations/orders/{id}/usdt-receipt`

## Request

- Base URL: `https://sandbox.onlink.africa`
- URL: `https://sandbox.onlink.africa/v1/simulations/orders/{id}/usdt-receipt`
- Auth: API key in header `X-OnLink-Key`

Sandbox only. Behaves as if the USDT for this sell order arrived on chain, so you can test your integration end to end without sending any. Attach the transaction hash to the order first with PATCH /v1/orders/{id}. The body may be empty: the order's own amount is used. A different amount sends the order to review. Not available in production: the route answers 404 there.

## Path parameters

- `id` string, required

## Request body

- PartnerSimulateUsdtReceiptDto
  - `amount` string: The USDT amount the simulated deposit carries, as a decimal string with at most six decimal places. Omit it to deposit exactly what the order expects. A different amount sends the order to review, which is the way to see what an amount mismatch looks like.

## Response `200`

The deposit was recorded. `receipt.outcome` says what the order did with it.

- PartnerSimulatedUsdtReceiptResponseDto
  - `orderId` string, required
  - `receipt` PartnerSimulatedUsdtReceiptDetailsDto, required
    - `amount` string, required: The USDT amount the simulated deposit carried.
    - `txHash` string, required: The on-chain hash the deposit was matched on.
    - `outcome` 'matched' | 'review' | 'not_matched', required: What the order did with the deposit, read back from the order. `matched`: the deposit matched and the order moved on. `review`: the amount differed and the order is held for review. `not_matched`: the deposit was not matched to the order.
  - `orderStatus` string, required: The order status read back after the deposit was processed.
  - `walletFunded` boolean, required: Always true: if the deposit cannot be funded, the request fails with 503 SIMULATION_UPSTREAM_UNAVAILABLE.
  - `message` string, required: A sentence saying what happened.

## Other responses

- `400`: Validation failed (`Validation failed on: <fields>`), or SIMULATION_AMOUNT_INVALID.
- `404`: ORDER_NOT_FOUND. Also the answer wherever simulations are not available, production included.
- `409`: ORDER_NOT_SELL_SIDE, ORDER_NOT_AWAITING_USDT, ORDER_TX_HASH_NOT_ATTACHED or ORDER_USDT_COLLECTED_AUTOMATICALLY.
- `503`: SIMULATION_NOT_CONFIGURED or SIMULATION_UPSTREAM_UNAVAILABLE.

---

[API](https://skmtc.dev/onlink/apis/onlink-partner-api.md) - [All operations](https://skmtc.dev/onlink/apis/onlink-partner-api/llms.txt) - [OpenAPI document](https://skmtc.dev/onlink/apis/onlink-partner-api/revisions/1d1c6a3671f2?raw)
