---
title: "Take committed balance back out of CeFi trading"
url: https://docs.truemarkets.co/api/gateway/create-withdrawal
description: "Takes `amount` of the caller's committed balance back out of CeFi trading."
---

Docs index: https://docs.truemarkets.co/llms.txt

# Take committed balance back out of CeFi trading

```
POST https://api.truemarkets.co/v1/gateway/withdrawals
```

Takes `amount` of the caller's committed balance back out of CeFi trading.

No tokens move: they never left the caller's own DeFi wallet. Conductor asks the exchange to withdraw the amount and answers `202` with the withdrawal in `debiting`. The exchange holds the amount, releases the matching DeFi allocation and then debits it; the withdrawal settles in the background, to `completed` once the exchange debits it or to `rejected` if it refuses. Poll `GET /withdrawals/{id}` for the outcome.

One withdrawal per listing may be unsettled at a time: a second request for the same `asset_id` while the first is `debiting` or `stranded` answers `409`, so a retry after a lost response cannot withdraw twice. A stranded withdrawal holds the listing until an operator resolves it.

`asset_id` names a DeFi listing from `GET /assets` whose symbol is also traded on CeFi. A CeFi listing answers `404`.

## Authentication

Bearer token in `Authorization`

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `TM-On-Behalf-Of` | header | string (uuid) | no | Act as one of your organization's users. The value is the `user_id` returned when the user was created; the request then reads and writes that user's account. Requires an organization token and a user your organization created: `400` for a personal token, a repeated header or a non-UUID, `403` for a user outside your organization. Not accepted on organization-scoped routes. |

## Request body

`application/json`, required

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `asset_id` | string (uuid) | yes | DeFi listing identifier (UUID) |
| `amount` | string | yes | Amount to take out, as a positive decimal string |

Example:

```json
{
  "asset_id": "b3d9e5f2-1a4c-4e7b-9f0d-2c8a6b3e5f91",
  "amount": "100.00"
}
```

## Responses

Every error status returns the same body, described in [Errors](https://docs.truemarkets.co/developer-resources/errors.md).

### 202

CeFi withdrawal requested

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string (uuid) | yes | Withdrawal identifier |
| `status` | string, one of `debiting`, `completed`, `rejected`, `stranded` | yes | Where the withdrawal stands. * **debiting** — The exchange has been asked to withdraw the amount. * **completed** — The exchange released the allocation and debited the amount. * **rejected** — The exchange refused the withdrawal; the amount stays committed. * **stranded** — The outcome is unknown and an operator has to resolve it. |
| `asset_id` | string (uuid) | yes | DeFi listing identifier (UUID) |
| `asset_symbol` | string | yes | Symbol of the listing |
| `amount` | string | yes | Amount taken out by this withdrawal, as a decimal string |
| `transfer` | object | no | The CeFi transfer a deposit or withdrawal started, under the exchange's id |
| `transfer.id` | string | yes | Exchange transfer identifier |
| `transfer.status` | string, one of `INITIALIZED`, `PENDING`, `PROCESSING`, `COMPLETED`, `REJECTED`, `FAILED` | yes | Status as last seen from the exchange |
| `failure_reason` | string | no | Why the withdrawal was refused or stranded |
| `created_at` | string (date-time) | yes |  |
| `updated_at` | string (date-time) | yes |  |

### 400

Bad request

### 401

Unauthorized

### 403

Forbidden. On order creation this also covers an asset that is not available to trade from the country the request came from.

### 404

Not found

### 409

Conflict

### 422

Request is well-formed but cannot be processed (e.g. leverage missing or out of range for a perp order)

### 500

Internal server error

### 503

Service unavailable
