# Retry the accounts a multi-account order did not reach

URL: https://docs.fxapis.com/api-reference/waves/retry-the-accounts-a-multi-account-order-did-not-reach

> Retry the accounts a multi-account order did not reach. Places a new multi-account order for the accounts of this one that were skipped (never sent: not…

`POST https://api.fxapis.com/v1/execution-waves/{id}/retry`

Places a new multi-account order for the accounts of this one that were `skipped` (never sent: not online in time, trading switched off, no price). Same market, side, per-account volumes, stops and comment. Add `rejected` to `include` to retry the accounts the broker refused too. A `cancelled` or `abandoned` order sent nothing, so every account is retried.

Only once the order has ended (`settled`, `cancelled` or `abandoned`); before that, **409** `WAVE_NOT_ENDED`. **409** `NOTHING_TO_RETRY` when no account matches. An `unresolved` account is never retried: it may have executed.

The new order is checked like any new one (plan, accounts, the key's limits) and is linked both ways: its `retryOf` is this order, and this order's `retriedBy` lists it. **An `Idempotency-Key` is required**; the same key again returns the same new order (200, `idempotent-replay: true`).

Authentication: `Authorization: Bearer <API key>`.

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string (uuid) | yes |  |
| `idempotency-key` | header | string | no | Any unique string, usually a UUID. A retry with the same key and body returns the first answer instead of placing a second order; the same key with a different body is refused. |

#### Request body (application/json, required)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `include` | "skipped" \| "rejected"[] | no | Which accounts of a settled multi-account order to retry, by their result. `skipped` (the default) is the accounts that never reached the broker; add `rejected` to retry the ones the broker refused too. A cancelled or abandoned one sent nothing, so every account is retried whatever this says. |
| `accountIds` | string (uuid)[] | no | Only these accounts, of those `include` selects. |
| `barrierPolicy` | "release-ready" \| "all-or-nothing" \| "wait" | no | Default: the original's. |
| `executeAt` | string (date-time) | no | When to send. Omit to send as soon as every account is online. |
| `expiresAt` | string (date-time) | no | Stop waiting for accounts that are not online after this. |

#### Responses

- `201`
- `400`
- `401`
- `402`
- `403`
- `404`
- `409`
- `422`

Failures return `{ "error": { "code", "message" } }`; every code is listed at https://docs.fxapis.com/errors.

#### 201 response fields

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | object | no |  |
| `data.id` | string (uuid) | no |  |
| `data.label` | null \| string | no |  |
| `data.clientWaveId` | null \| string | no |  |
| `data.symbol` | null \| string | no | The symbol every account trades. Null when the order named an `instrument`; each leg then shows its own. |
| `data.instrument` | null \| string | no | The instrument the order named instead of a symbol, if it did. |
| `data.side` | "buy" \| "sell" | no |  |
| `data.baseVolume` | null \| string | no |  |
| `data.state` | "planned" \| "preparing" \| "armed" \| "releasing" \| "settled" \| "cancelled" \| "abandoned" | no |  |
| `data.stateDetail` | null \| string | no |  |
| `data.barrierPolicy` | "release-ready" \| "all-or-nothing" \| "wait" | no |  |
| `data.executeAt` | null \| string (date-time) | no |  |
| `data.expiresAt` | null \| string (date-time) | no |  |
| `data.preparedAt` | null \| string (date-time) | no |  |
| `data.releasedAt` | null \| string (date-time) | no |  |
| `data.settledAt` | null \| string (date-time) | no |  |
| `data.dispatchSpreadMs` | null \| integer | no | The gap between the first account's order being sent and the last, in milliseconds. As it grows, your accounts are getting different prices. |
| `data.retryOf` | null \| string (uuid) | no | Set when this multi-account order was made by `POST /v1/execution-waves/{id}/retry`: the one it retries. |
| `data.retriedBy` | string (uuid)[] | no | The multi-account orders made by retrying this one, oldest first. |
| `data.summary` | object | no | What landed. Deliberately not a success flag — a multi-account order is not all-or-nothing once sent. |
| `data.summary.total` | integer | no |  |
| `data.summary.filled` | integer | no |  |
| `data.summary.partiallyFilled` | integer | no | Of `filled`, the accounts whose order filled only in part. Counted within `filled`, not beside it. |
| `data.summary.rejected` | integer | no |  |
| `data.summary.skipped` | integer | no |  |
| `data.summary.unresolved` | integer | no | Accounts whose result we are still confirming with the broker. Do not resend these. |
| `data.legs` | object[] | no | One entry per account: the order placed there and how it went. |
| `data.legs[].accountId` | string (uuid) | no |  |
| `data.legs[].orderId` | null \| string (uuid) | no | The ordinary order placed on this account. Query it like any other. |
| `data.legs[].symbol` | string | no | The broker symbol this account trades. Example: `"XAUUSD.a"` |
| `data.legs[].volume` | null \| string | no |  |
| `data.legs[].state` | "pending" \| "preparing" \| "ready" \| "dispatched" \| "filled" \| "rejected" \| "skipped" \| "unresolved" | no | `pending`/`preparing`: being brought online. `ready`: online and waiting. `dispatched`: sent, awaiting the broker. `filled`: the broker filled it, fully or in part. `rejected`: the broker refused it. `skipped`: never reached the broker (not online in time, trading switched off, the plan's allowance, no price, a send that provably failed), or the broker has no record of it. `unresolved`: sent, and we are confirming the result with the broker — do not resend. An unresolved account moves to `filled`, `rejected` or `skipped` once its order is confirmed. |
| `data.legs[].stateDetail` | null \| string | no |  |
| `data.legs[].filledVolume` | null \| string | no | On a `filled` account: how much its order filled, from the order. Null otherwise. Example: `"0.01"` |
| `data.legs[].partiallyFilled` | boolean | no | On a `filled` account: true when its order filled only in part (`filledVolume` below `volume`). |
| `data.legs[].sentAt` | null \| string (date-time) | no |  |
| `data.legs[].settledAt` | null \| string (date-time) | no |  |
| `data.createdAt` | string (date-time) | no |  |