> For the complete documentation index, see [llms.txt](https://docs.aevo.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aevo.xyz/api-reference/urls/private-api/posttwaporders.md).

# POST /twap-orders

Creates a new TWAP (Time-Weighted Average Price) order.

`POST https://api.aevo.xyz/twap-orders`

> **Authentication required.** Include your `AEVO-KEY` and `AEVO-SECRET` headers. See [Authentication](/api-reference/urls/authentication.md).

## Body Parameters

| Field           | Type    | Required | Description                                                              |
| --------------- | ------- | -------- | ------------------------------------------------------------------------ |
| `instrument_id` | integer | Yes      | Instrument ID number. Example: `12`                                      |
| `is_buy`        | boolean | Yes      | True for long order, false for short order. Example: `True`              |
| `amount_float`  | string  | Yes      | Amount in unsigned float string Example: `12.23`                         |
| `duration`      | integer | Yes      | Duration of the RFQ block in seconds Example: `30`                       |
| `reduce_only`   | boolean | No       | True for reduce-only orders, false for standard orders. Example: `False` |

## Example Request

```bash
curl --request POST \
     --url https://api.aevo.xyz/twap-orders \
     --header 'accept: application/json' \
     --header 'AEVO-KEY: <your-api-key>' \
     --header 'AEVO-SECRET: <your-api-secret>' \
     --header 'content-type: application/json' \
     --data '{ ... }'
```

## Responses

**`200`** — TWAP order created.

| Field              | Type    | Required | Description                                                                                                             |
| ------------------ | ------- | -------- | ----------------------------------------------------------------------------------------------------------------------- |
| `order_id`         | string  | Yes      | Order ID is the hash of the order payload Example: `0x4c43e0ab72a4edb72dfe4b129148899815d816837b9a7e22d964b884834639f8` |
| `account`          | string  | Yes      | Account's Ethereum address. Example: `0xE9b3a48d15BE316A8e34FAd53fFDFDddf0C3D24b`                                       |
| `instrument_id`    | string  | Yes      | Instrument ID number. Example: `12`                                                                                     |
| `instrument_name`  | string  | Yes      | Instrument name. Example: `ETH-30JUN23-1600-C`                                                                          |
| `side`             | string  | Yes      | Trade side. Example: `buy`                                                                                              |
| `total_amount`     | string  | Yes      | Total amount to execute in internal representation (6 decimals) Example: `10000000`                                     |
| `executed_amount`  | string  | Yes      | Amount executed so far in internal representation (6 decimals) Example: `5000000`                                       |
| `remaining_amount` | string  | Yes      | Remaining amount to execute in internal representation (6 decimals) Example: `5000000`                                  |
| `slices_total`     | string  | Yes      | Total number of slices for the TWAP order Example: `100`                                                                |
| `slices_executed`  | string  | Yes      | Number of slices executed so far Example: `50`                                                                          |
| `status`           | string  | Yes      | Status of the otc request Example: `requested`                                                                          |
| `duration_seconds` | string  | Yes      | Total duration of the TWAP order in seconds Example: `3600`                                                             |
| `interval_seconds` | string  | Yes      | Interval between slices in seconds Example: `36`                                                                        |
| `reduce_only`      | boolean | Yes      | True for reduce-only orders, false for standard orders. Example: `false` Example: `False`                               |
| `created_time`     | string  | No       | Timestamp when the TWAP order was created Example: `2025-01-01T00:00:00Z`                                               |
| `average_price`    | string  | No       | Volume-weighted average price of executed slices Example: `3500000000`                                                  |

**`400`** — Bad request.

| Field   | Type   | Required | Description                                     |
| ------- | ------ | -------- | ----------------------------------------------- |
| `error` | string | Yes      | Error message. Example: `ERR_MALFORMED_REQUEST` |

**`401`** — Unauthorized.

| Field   | Type   | Required | Description                            |
| ------- | ------ | -------- | -------------------------------------- |
| `error` | string | Yes      | Error message. Example: `UNAUTHORIZED` |

**`429`** — Rate limit exceeded.

| Field   | Type   | Required | Description                                   |
| ------- | ------ | -------- | --------------------------------------------- |
| `error` | string | Yes      | Error message. Example: `RATE_LIMIT_EXCEEDED` |

**`500`** — Internal server error.

| Field   | Type   | Required | Description                              |
| ------- | ------ | -------- | ---------------------------------------- |
| `error` | string | Yes      | Error message. Example: `INTERNAL_ERROR` |
