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

# Create Transfer

`POST /transfers`

Moves funds out of an account. `type` selects the kind of movement (default `ledger`): `ledger` transfers credit between two ledger accounts and returns a Transfer; `wallet_send` sends USDT from the origin account's Ethereum wallet to a recipient; `claim_link` funds a shareable claim link anyone with the URL can redeem.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `amount` number, required — The amount to move, in the transfer currency. For example 25.00.
  - `currency` string — Currency, such as `usd`. Required for ledger transfers.
  - `destination_id` string — The recipient. Required for ledger and wallet_send (a user_/biz_/ldgr_ ID, or — for sends — an email). Omit for claim_link.
  - `expires_at` string, date-time, nullable — claim_link only. Link expiry as an ISO 8601 timestamp. Defaults to 24 hours from creation.
  - `idempotence_key` string, nullable — Ledger transfers only. A unique key to prevent duplicate transfers.
  - `metadata` object, nullable — Ledger transfers only. Custom key-value pairs attached to the transfer. Max 50 keys, 100 chars per key, 500 chars per string value.
  - `notes` string, nullable — Ledger transfers only. A short note describing the transfer.
  - `origin_id` string, required — The account sending the funds. A user ID (user_xxx), account ID (biz_xxx), or ledger account ID (ldgr_xxx).
  - `redeemable_count` integer — claim_link only. How many different users can claim the link. Defaults to 1.
  - `type` 'ledger' | 'wallet_send' | 'claim_link' — The kind of money movement. Defaults to ledger.

## Response `201`

money movement created

- union
  - object — A transfer of credit between two ledger accounts.
    - `amount` number, required — Transfer amount.
    - `created_at` string, date-time, required — When the transfer was created.
    - `currency` string, required — Transfer currency.
    - `destination` union, required — Account or user receiving funds.
      - object
        - `id` string, required — Account ID.
        - `route` string, nullable — Account route.
        - `title` string, nullable — Account display name.
        - `typename` 'Company', required
      - object
        - `id` string, required — User ID.
        - `name` string, nullable — User display name.
        - `typename` 'User', required
        - `username` string — User's username.
    - `destination_ledger_account_id` string, required — Destination ledger account ID.
    - `fee_amount` number, nullable — Fee charged for the transfer.
    - `id` string, required — Transfer ID.
    - `metadata` object, nullable — Custom metadata attached to the transfer.
    - `notes` string, nullable — Transfer note.
    - `origin` union, required — Account or user sending funds.
      - object
        - `id` string, required — Account ID.
        - `route` string, nullable — Account route.
        - `title` string, nullable — Account display name.
        - `typename` 'Company', required
      - object
        - `id` string, required — User ID.
        - `name` string, nullable — User display name.
        - `typename` 'User', required
        - `username` string — User's username.
    - `origin_ledger_account_id` string, required — Source ledger account ID.
  - object — Returned for a wallet_send: an onchain USDT send to a recipient.
    - `amount` string, required
    - `currency` string, required
    - `destination` object, required
      - `account_id` string, required
      - `address` string, required
    - `object` 'send', required
    - `source` object, required
      - `account_id` string, required
      - `address` string, required
    - `tx_hash` string, required
  - object — Returned for a claim_link: a shareable URL anyone can open to claim the funds.
    - `amount` string, required
    - `claim_url` string, required
    - `currency` string, required
    - `expires_at` string, date-time, nullable, required
    - `id` string, required
    - `object` 'claim_link', required
    - `redeemable_count` integer, required
    - `source` object, required
      - `account_id` string, required
    - `status` string, required

## Other responses

- `400` — Invalid Parameters
- `401` — Unauthorized
- `403` — Forbidden

## Changes

- **2026-07-26** `60bbb4a6ffbc` — 3 info
  - the security scope `payout:transfer_funds` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `airdrop_link:manage` was removed from the endpoint's security scheme `bearerAuth`
  - added the new optional `header` request parameter `Idempotency-Key`
- **2026-07-14** `3a06a605784b` — 2 info
  - the security scope `payout:transfer_funds` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `airdrop_link:manage` was removed from the endpoint's security scheme `bearerAuth`

[Change history](https://skmtc.dev/whop/apis/whop-api/changes/transfers/post.md)

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/whop/whop-api/revisions/60bbb4a6ffbc/schema)
