> ## Documentation Index
> Fetch the complete documentation index at: https://docs.minisend.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit a deposit

> Report your USDC transfer for a KES, GHS, or UGX order by submitting the Base transaction hash. Triggers the fiat payout. Not used for NGN.

After sending the order's USDC to `deposit_address` on Base, submit the transaction hash. Minisend verifies the transfer covers the order amount and starts the payout.

<Note>
  **KES, GHS, and UGX orders only.** NGN deposits are detected automatically at the single-use address; calling this on an NGN order returns `409`.
</Note>

## Endpoint

```text theme={null}
POST https://merchant.minisend.xyz/api/offramp/orders/{order_id}/deposit
```

```text theme={null}
Authorization: Bearer ms_live_your_key_here
```

Requires the `offramp` scope. Orders you don't own return `404`.

## Body

<ParamField body="transaction_hash" type="string" required>
  The Base transaction in which you sent the order's USDC amount to `deposit_address`. `0x`-prefixed 32-byte hex. A hash can pay exactly one order; reusing one returns `409`.
</ParamField>

## Example

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://merchant.minisend.xyz/api/offramp/orders/9b2f6c1e-.../deposit \
    -H "Authorization: Bearer ms_live_your_key_here" \
    -H "Content-Type: application/json" \
    -d '{"transaction_hash": "0x55a572efe1720250e442f38741477a4fc3f7f152e5cd208cc52f8222a1c2a13b"}'
  ```

  ```javascript Node.js theme={null}
  const res = await fetch(
    `https://merchant.minisend.xyz/api/offramp/orders/${orderId}/deposit`,
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer ms_live_your_key_here',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ transaction_hash: txHash }),
    }
  );

  if (res.status === 422) {
    // transfer could not be verified. Check amount/chain/hash and retry
  }
  const order = await res.json(); // status: "settling" on success
  ```
</CodeGroup>

## Response (200)

The full [order object](/api-reference/offramp/get-order) with `status: "settling"`:

```json theme={null}
{
  "order_id": "9b2f6c1e-...",
  "status": "settling",
  "amount_usdc": 10,
  "deposit_tx_hash": "0x55a572efe1720250e442f38741477a4fc3f7f152e5cd208cc52f8222a1c2a13b",
  "rate": 129.52,
  "amount_local": 1295,
  "fee": 13,
  "...": "..."
}
```

The order's `rate`, `amount_local`, and `fee` now reflect the **executed** payout at the live rate. From here, track `completed` via the [status endpoint](/api-reference/offramp/get-order) or the [`offramp.completed` webhook](/offramp/webhooks).

Submitting the same hash again after acceptance is a safe no-op; you get the current order state back.

## Errors

| Status | Meaning                                                                                                                                                      |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `400`  | `transaction_hash` is not a valid `0x` 32-byte hex hash                                                                                                      |
| `404`  | Unknown order, or not yours                                                                                                                                  |
| `409`  | NGN order (no hash needed), order already terminal, order expired, or the hash was already used for another order                                            |
| `422`  | The transfer could not be verified: it didn't cover the amount, used the wrong chain, or went to the wrong address. The order stays `pending`; fix and retry |

<Warning>
  A `422` means the payout did **not** start. Verify the transaction sent the exact `total_deposit_usdc` in USDC on Base to the order's `deposit_address`, then resubmit. If the order expires while you debug, contact [support](https://t.me/minisendapp) with the `order_id` and hash.
</Warning>
