---
title: "Transfer funds to a UID"
method: POST
path: "/internal-transfer"
tags: ["Fund"]
---

# Transfer funds to a UID

`POST /internal-transfer`

Transfers funds from the authenticated organization to an Infini UID. Requires `fund.withdraw` permission.

V1 supports same-currency transfers in USDT, USDC, or USD only. `source_currency` is optional and defaults to `token_type`; when supplied, it must equal `token_type`. The transfer has no fee, so the amount deducted from the sender equals the amount received by the recipient.

`request_id` is optional. When supplied, it must be a UUID and acts as the idempotency key. A retry by the same organization with an already completed `request_id` returns `status=completed` and `is_duplicate=true`.

## Headers

- `Date` string
- `Authorization` string
- `Digest` string

## Request body

- InternalTransferRequest
  - `request_id` string, uuid — Optional idempotency key. Must be a UUID when supplied.
  - `recipient_uid` string, required — Recipient Infini UID. The UID cannot belong to the source organization.
  - `token_type` 'USDT' | 'USDC' | 'USD', required — Recipient account currency.
  - `source_currency` 'USDT' | 'USDC' | 'USD' — Source account currency. Defaults to `token_type`; V1 requires the same currency as `token_type`.
  - `amount` string, required — Positive amount deducted and received. USDT and USDC support up to six decimal places; USD supports up to two. V1 internal transfers have no fee.
  - `note` string — Optional transfer note.

## Response `200`

Standard response envelope

- union
  - InternalTransferEnvelope
    - `code` 0, required — Business code. `0` means success.
    - `message` string, required — Response message.
    - `data` InternalTransferResponse, required
      - `request_id` string, uuid, required — Internal transfer request ID.
      - `status` 'completed', required — Internal transfer status. V1 completes the ledger transfer synchronously.
      - `is_duplicate` boolean, required — Whether the same request ID was already completed for the authenticated organization.
  - ErrorEnvelope
    - `code` integer, required — Non-zero business error code.
    - `message` string, required — Error details.
    - `data` object, nullable, required — Error responses return null.

## Other responses

- `400` — Invalid application request
- `401` — HMAC gateway validation or application authentication failed
- `403` — API key permission, IP whitelist, or endpoint policy rejected the request

## Changes

- **2026-08-29** `a77090a3bdd5` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/infini/apis/infini-fund-api/changes/internal-transfer/post.md)

---

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