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

# Transfers

> Integration sequence for moving ownership between FBO accounts

Follow a transfer on [Transfers](/api-reference/transfers/list). The item stays on [Inventory](/api-reference/inventory/list). Ownership has moved when [Get Inventory Item](/api-reference/inventory/get) returns `in_vault` and `fboAccountId` equal to `toFboAccountId`. That is `transfer.completed`.

## Create

`POST /transfers`. Required fields:

* `fromFboAccountId`
* `toFboAccountId` — must differ from the source
* `items` — at least one entry, each with `inventoryItemId` and `reason` (`request`, `trade`, or `rebalance`)

Each item must be `in_vault` on the source account. `inventoryItemId` values must be unique. An item already on an open transfer or an open outbound request is rejected.

The response `status` is `pending_review`. Webhook: `transfer.status_changed` with `toStatus: "pending_review"`.

The item stays `in_vault` on the source account. The inventory resource has no transfer id. Read the transfer from [Get Transfer](/api-reference/transfers/get).

```json theme={null}
{
  "fromFboAccountId": "m97fbo456",
  "toFboAccountId": "m97fbo789",
  "items": [{ "inventoryItemId": "k57item123", "reason": "trade" }]
}
```

`approve: true` returns `approved` and `approvedBySystem: true`. The webhook `toStatus` is `approved`. There is no `pending_review` event. The item is unchanged.

[Cancel Transfer](/api-reference/transfers/cancel) is valid only while `status` is `pending_review`.

## Statuses

Transfer `status` on list, get, and `transfer.status_changed`:

| Status           | What to do                                                                                                                          |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `pending_review` | Waiting for vault staff review. There is no partner approve call. Item is `in_vault` on the source account. Cancel is available.    |
| `approved`       | Item is still on the source account. It can be `pending_transfer` (`inventory.status_changed`). `fboAccountId` is still the source. |
| `rejected`       | Item stays `in_vault` on the source account. Terminal.                                                                              |
| `cancelled`      | Cancelled from `pending_review`. Item stays `in_vault` on the source account.                                                       |
| `completed`      | Also sends `transfer.completed`. Item is `in_vault` and `fboAccountId` is `toFboAccountId`.                                         |

`pending_transfer` is an inventory status. Handle it if you receive it. It can be skipped. `transfer.completed` and `transfer.status_changed` with `toStatus: "completed"` are the same moment. That is when every item on the transfer has moved.
