---
title: "Create account transfer"
method: POST
path: "/account_transfers"
tags: ["Account Transfers"]
---

# Create account transfer

`POST /account_transfers`

Create account transfer

## Headers

- `idempotency-key` string, uuid, required

## Request body

- object
  - `direction` 'INCOMING' | 'OUTGOING', required — Direction of the securities transfer * `INCOMING` - Securities transfer is incoming to the user. * OUTGOING - Securities transfer is outgoing from the user.
  - `user_id` string, uuid, required — User unique identifier.
  - `account_id` string, uuid, required — Account unique identifier.
  - `transfer_type` 'NO_OWNER_CHANGE', required — Type of the securities transfer * NO_OWNER_CHANGE - No change of ownership.
  - `settlement_reference` string, required — Unique identifier of the account transfer set by API consumers. Useful for API consumers to build special logic on top of it. *NOTE: This reference will be set and be common to all securities transfers*
  - `instruments` object[], required — For `INCOMING` at least one instrument should be defined. For `OUTGOING` an empty list means full transfer of full units of the account.
    - `id` string, required — `ISIN` or other identity (depends on instrument_id_type) of the security to be transferred.
    - `id_type` 'ISIN', required — Type of the instrument_id * `ISIN` - International Securities Identification Number
    - `quantity` string, required — The quantity of instrument to move in or out. The value supported is maximum 15 digits including decimal place. *Note: For `INCOMING` the end user ensures that they don't sell their instruments on the counter-broker to enable smooth transfer of their instruments on Upvest platform.*
  - `counterparty` object, required — Counterparty with BIC (Bank Identifier Code) based identification for account transfer.
    - `type` string, required — Type of the counterparty.
    - `id` string, required — Business Identifier Code (also known as SWIFT-BIC, BIC, SWIFT ID or SWIFT code) [ISO 9362](https://en.wikipedia.org/wiki/ISO_9362).
    - `account_number` string — The account number is composed of valid Swift charset with a max length of 28 if provided. The account number helps other brokers identify the owner of the assets.
    - `name` string — The name is going to be split into 4 lines of 35 characters, the split is space based. This means that even if the name is exactly 140 of length, we may drop out the last parts if they don't fit into 4x35.
  - `trade_date` string, date — Optional forecast date when the trade takes place. If provided, usually T+1 is sufficient. Depending on the market this means valid working days. Date in YYYY-MM-DD format. *NOTE: Each individual transfer can differ based on market needs.*
  - `settlement_date` string, date — Optional forecast date when the settlement takes place. If provided, usually T+2 is sufficient or trade_date + 1. Depending on the market this means valid working days. Date in YYYY-MM-DD format. *NOTE: Each individual transfer can differ based on market needs.
  - `order_date` string, date — Optional date when the transfer request was received from the end user. If omitted, Upvest defaults `order_date` to the transfer's `created_at` timestamp. The regulatory deadline runs from this date. Date in YYYY-MM-DD format.

## Response `200`

Account Transfer created

- object
  - `id` string, uuid, required — Account transfer request unique identifier.
  - `created_at` string, date-time, required — Date and time when the resource was created. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
  - `updated_at` string, date-time, required — Date and time when the resource was last updated. [RFC 3339-5](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6), [ISO8601 UTC](https://www.iso.org/iso-8601-date-and-time-format.html)
  - `direction` 'INCOMING' | 'OUTGOING', required — Direction of the account transfer * INCOMING - account transfer is incoming to the user. * OUTGOING - account transfer is outgoing from the user.
  - `status` 'NEW' | 'PROCESSING' | 'SETTLED' | 'PARTIALLY_SETTLED' | 'CANCELLED', required — Status of the account transfer * NEW - account transfer is created but not started processing. * PROCESSING - account transfer is in processing. * SETTLED - account transfer was successfully settled. * PARTIALLY_SETTLED - account transfer was partially settled, while some instrument got cancelled. * CANCELLED - account transfer was cancelled.
  - `transfer_type` 'NO_OWNER_CHANGE', required — Type of the account transfer * NO_OWNER_CHANGE - No change of ownership.
  - `instruments` object[], required — List of instruments positions.
    - `id` string, required — `ISIN` or other identity (depends on instrument_id_type) of the security to be transferred.
    - `id_type` 'ISIN', required — Type of the instrument_id * `ISIN` - International Securities Identification Number
    - `quantity` string, required — The quantity of instrument to move in or out.
    - `quantity_settled` string — The quantity of instruments settled.
    - `status` 'NEW' | 'PROCESSING' | 'SETTLED' | 'CANCELLED', required — Status of the securities transfer * `NEW` - Securities transfer is created but not started processing. * `PROCESSING` - Securities transfer is in processing. * `SETTLED` - Securities transfer was successfully settled. * `CANCELLED` - Securities transfer was cancelled.
    - `transfer_id` string, uuid, required — Securities transfer request unique identifier.
  - `user_id` string, uuid, required — User unique identifier.
  - `account_id` string, uuid, required — Account unique identifier.
  - `settlement_reference` string, required — Unique identifier of the account transfer set by API consumers. Useful for API consumers to build special logic on top of it. *NOTE: This reference will be set and be common to all securities transfers.*
  - `counterparty` object, required — Counterparty with BIC (Bank Identifier Code) based identification for account transfer.
    - `type` string, required — Type of the counterparty.
    - `id` string, required — Business Identifier Code (also known as SWIFT-BIC, BIC, SWIFT ID or SWIFT code) [ISO 9362](https://en.wikipedia.org/wiki/ISO_9362).
    - `account_number` string — The account number is composed of valid Swift charset with a max length of 28 if provided. The account number helps other brokers identify the owner of the assets.
    - `name` string — The name is going to be split into 4 lines of 35 characters, the split is space based. This means that even if the name is exactly 140 of length, we may drop out the last parts if they don't fit into 4x35.
  - `trade_date` string, date — The forecast date when the trade takes place. Date in YYYY-MM-DD format. *NOTE: This date mirrors the preliminary date if given in request as input, each single transfer can have their own date according to market needs.*
  - `settlement_date` string, date — The forecast date when the settlement takes place. Date in YYYY-MM-DD format. *NOTE: This date mirrors the preliminary date if given in request as input, each single transfer can have their own date according to market needs.*
  - `order_date` string, date — Date the transfer request was received from the end user. The regulatory deadline runs from this date. Date in YYYY-MM-DD format.
  - `delay_reason` 'COUNTERPARTY_NOT_INSTRUCTING' | 'COUNTERPARTY_NOT_RESPONDING' | 'COUNTERPARTY_DOES_NOT_AGREE_TO_DELIVERY_DETAILS' | 'COUNTERPARTY_NOT_ACCEPTING' — Categorised reason why a securities transfer is delayed past the regulatory deadline. * `COUNTERPARTY_NOT_INSTRUCTING` - The counterparty has not yet instructed the transfer. * `COUNTERPARTY_NOT_RESPONDING` - The counterparty is not responding. * `COUNTERPARTY_DOES_NOT_AGREE_TO_DELIVERY_DETAILS` - The counterparty does not agree to the delivery details. * `COUNTERPARTY_NOT_ACCEPTING` - The counterparty is not accepting the transfer.

## Other responses

- `400` — Bad Request. The incoming request had a malformed parameter/object.
- `401` — Unauthorized. The caller has not been authenticated.
- `403` — Forbidden. The caller has been authenticated but is not allowed to take the requested action.
- `404` — Not Found. The requested resource could not be found.
- `406` — Not Acceptable. The resource does not have a current representation that would be acceptable to the user agent. "Accept" header defined unsupported value.
- `429` — Too Many Requests. The caller has exceeded their quota for the time period and has been throttled.
- `500` — Internal Server Error. The service encountered an unexpected error.
- `503` — Service Unavailable. The service handling for this request cannot be reached at this time.
- `504` — Gateway Timeout. The service gateway has reached its internal timeout.

---

[API](https://skmtc.net/upvest/apis/upvest-investment-api.md) · [All operations](https://skmtc.net/upvest/apis/upvest-investment-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/upvest/upvest-investment-api/revisions/2c6bc192bc09/schema)
