# Follow a multi-account order

URL: https://docs.fxapis.com/api-reference/waves/follow-a-multi-account-order

> Follow a multi-account order. Poll this after creating a multi-account order.

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

Poll this after creating a multi-account order. `state` moves `planned → preparing → armed → releasing → settled`: accepted, bringing accounts online, waiting for `executeAt`, sending, and every account has a result. `cancelled` and `abandoned` mean nothing was sent.

Each account in `legs` carries its own state and its own order id — an account's order is an ordinary order, confirmed with the broker and audited like any other.

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

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string (uuid) | yes |  |

#### Responses

- `200`
- `401`
- `404`

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

#### 200 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.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.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`, `rejected`: the broker's answer. `skipped`: never sent. `unresolved`: sent, and we are confirming the result with the broker — do not resend. |
| `data.legs[].stateDetail` | null \| string | no |  |
| `data.legs[].sentAt` | null \| string (date-time) | no |  |
| `data.legs[].settledAt` | null \| string (date-time) | no |  |
| `data.createdAt` | string (date-time) | no |  |