---
title: "Create transfer"
method: POST
path: "/transfers"
tags: ["Transfers"]
---

# Create transfer

`POST /transfers`

Create a new transfer request between your own accounts.
To submit transfers on behalf of others, you will require the `submits_platform_transfers_for` relationship. Transfer requests created via the API are automatically set to an `APPROVED` state.

## Headers

- `X-SCX-SIGNED` string, required
- `X-SCX-TIMESTAMP` string, required

## Request body

- PostTransferBody
  - `from_participant_code` string, required — The source participant for the transfer, e.g. `ABCDEF`.
  - `from_account_group` string, required — The source account group for the transfer, e.g. `ABCDEF`.
  - `from_account_label` string — The source account label for the transfer, e.g. `general`.
  - `to_participant_code` string, required — The destination participant for the transfer, e.g. `ABCDEF`.
  - `to_account_group` string, required — The destination account group for the transfer, e.g. `ABCDEF`.
  - `to_account_label` string — The destination account label for the transfer, e.g. `general`.
  - `asset` string, required — The asset code for the transfer, e.g. `USD`.
  - `amount` string, required — The amount or quantity to transfer, e.g. `100`.
  - `client_transfer_id` string — A unique identifier for the transfer. Must be unique per platform, per 72 hour period.
  - `prefunded` boolean — Set to `true` if the transfer amount should be included in the net settlement calculation. Requires `pt_1.is_prefunded_transfer_enabled` to be enabled for the calling participant.

## Response `201`

Successfully created transfer request. Returns the created resource with generated IDs and timestamps.

- PostTransferResponse
  - `message` TransferEntity
    - `id` number — The transfer request ID.
    - `created_at` string, date-time — ISO 8601 timestamp when the transfer request was created.
    - `updated_at` string, date-time — ISO 8601 timestamp when the transfer request was last updated.
    - `status` 'pending' | 'approved' | 'canceled' | 'rejected' | 'settled' | 'outstanding' | 'error_canceled' — The current status of the transfer request: - `pending`: platform submitted and awaiting approval via the customer portal. - `approved`: platform submitted and approved. Transfers created via this API are auto-set to `approved`. - `rejected`: transfer was declined by an administrator. - `settled`: transfer has been successfully completed. - `outstanding`: transfer has no funds available. - `canceled`: transfer was canceled. - `error_canceled`: transfer failed. Note: pre-funded transfers can only be `approved`, `settled`, or `rejected`.
    - `from_participant_code` string — The source participant for the transfer, e.g. `ABCDEF`.
    - `from_account_group` string, nullable — The source account group for the transfer, e.g. `ABCDEF`. Null when the requesting participant is not authorized to see the source account group.
    - `from_account_label` string, nullable — The source account label for the transfer, e.g. `general`. Null when the requesting participant is not authorized to see the source account label.
    - `to_participant_code` string — The destination participant for the transfer, e.g. `ABCDEF`.
    - `to_account_group` string, nullable — The destination account group for the transfer, e.g. `ABCDEF`. Null when the requesting participant is not authorized to see the destination account group.
    - `to_account_label` string, nullable — The destination account label for the transfer, e.g. `general`. Null when the requesting participant is not authorized to see the destination account label.
    - `asset` string — The asset code for the transfer, e.g. `USD`.
    - `amount` string — The amount or quantity transferred, e.g. `100`.
    - `movement_id` string, nullable — A unique ID for the ledger movement associated with the transfer. Null until the transfer reaches `settled`.
    - `client_transfer_id` string — A unique identifier for the transfer. Must be unique per platform, per 72 hour period.
    - `admin_transfer` boolean — Indicates whether the transfer was created by an administrator. Transfers created via this API are always `false`.
    - `parent_link_id` string, nullable — Identifier linking this transfer to a parent operation (e.g. a prefunded transfer chain). Null when the transfer is not linked.
    - `parent_link_id_source` string, nullable — Source of the `parent_link_id`. Null when the transfer is not linked.
    - `prefunded` boolean — Indicates whether this transfer was created as a pre-funded transfer that is included in net settlement calculations.

## Other responses

- `400` — Bad Request
- `403` — Forbidden
- `404` — Not Found
- `500` — Internal Server Error
- `503` — Service Unavailable

---

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