---
title: "Create Internal Transfer"
method: POST
path: "/transfer/internal"
tags: ["Internal Transfers"]
---

# Create Internal Transfer

`POST /transfer/internal`

Transfer assets between two profiles belonging to the same customer.

## Request body

- CreateInternalTransferRequest
  - `ref_id` string — Client-specified ID for replay protection and lookup.
  - `from_profile_id` string, required — The profile from which to send funds.
  - `to_profile_id` string, required — The destination profile.
  - `amount` string, required — The amount to transfer.
  - `asset` string, required — The asset to transfer, e.g. "USD", "BTC", "ETH".
  - `metadata` object — Optional client-specified metadata for the sender side of the transaction. Up to 6 key/value pairs may be provided. Each key and value must be less than or equal to 100 characters.
  - `from_identity_id` string — The Paxos Identity (`identity_id`) of the sending user.
  - `from_account_id` string — The Paxos Account (`account_id`) of the sending user. Required only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users.
  - `to_identity_id` string — The Paxos Identity (`identity_id`) of the destination user.
  - `to_account_id` string — The Paxos Account (`account_id`) of the destination user. Required only for customers with [3rd-Party integrations](https://docs.paxos.com/crypto-brokerage/ledger-type#fiat-and-crypto-subledger) initiating transfers on behalf of their end users.
  - `recipient_metadata` object — Optional client-specified metadata for the recipient side of the transaction. Up to 6 key/value pairs may be provided. Each key and value must be less than or equal to 100 characters.

## Response `200`

A successful response.

- Transfer
  - `id` string, required — The Paxos transfer ID.
  - `customer_id` string, required — The Paxos customer ID.
  - `profile_id` string, required — The target Profile of the transfer. The profile asset balance is debited or credited by the transfer.
  - `identity_id` string — The Paxos ID of the Identity associated with the transfer.
  - `ref_id` string — The optional client-specified ID for replay protection and lookup.
  - `amount` string, required — The amount sent in the transfer.
  - `total` string, required — The balance change from this transfer: amount - fee for deposits, and amount + fee for withdrawals. Unsigned.
  - `fee` string, required — The fee paid for the transfer.
  - `asset` string, required — The asset for this transfer. This profile's balance of this asset will be debited or credited.
  - `balance_asset` string — The balance_asset represents what asset's balance was affected at Paxos with this transfer. It only differs from Asset when the transfer includes conversion.
  - `direction` 'CREDIT' | 'DEBIT', required — Direction of the transfer.
  - `type` 'INTERNAL_TRANSFER_DEBIT' | 'INTERNAL_TRANSFER_CREDIT' | 'CRYPTO_DEPOSIT' | 'CRYPTO_WITHDRAWAL' | 'WIRE_DEPOSIT' | 'WIRE_WITHDRAWAL' | 'SEN_DEPOSIT' | 'SEN_WITHDRAWAL' | 'BANK_DEPOSIT' | 'BANK_WITHDRAWAL' | 'PAXOS_TRANSFER_DEBIT' | 'PAXOS_TRANSFER_CREDIT' | 'SIGNET_DEPOSIT' | 'SIGNET_WITHDRAWAL' | 'CBIT_WITHDRAWAL' | 'CBIT_DEPOSIT' | 'CUBIX_DEPOSIT' | 'CUBIX_WITHDRAWAL' | 'RTP_DEPOSIT', required — Type of transfer.
  - `status` 'PENDING' | 'COMPLETED' | 'FAILED', required
  - `secondary_status` SecondaryStatus — Secondary status for the transfer, used for more granular explanation of the transfer status.
    - `name` 'TRAVEL_RULE_INFO_REQUESTED' | 'TRAVEL_RULE_REJECTED' | 'CUSTOMER_REJECTED' | 'PENDING_CUSTOMER_APPROVAL' — Identifier for secondary status. - TRAVEL_RULE_INFO_REQUESTED: Travel rule information is required to continue processing the transfer. - TRAVEL_RULE_REJECTED: Transfer has been terminally rejected due to failing travel rule checks. - CUSTOMER_REJECTED: Transfer was rejected by a customer. - PENDING_CUSTOMER_APPROVAL: Transfer is pending customer approval.
    - `detail` string — Additional information about the current status of the transfer (e.g. if information is missing).
  - `status_details` TransferStatusDetails — TransferStatusDetails provides additional information about why a transfer is in its current state. This field is only populated when a transfer encounters specific error conditions or requires additional context.
    - `missing_trustline` MissingTrustline — MissingTrustline represents a failed transfer where the destination account lacks the required asset trustline.
      - `message` string
      - `destination_address` string
      - `asset` string
    - `max_rent_exceeded` MaxRentExceeded — MaxRentExceeded represents a failed transfer that was flagged for system abuse. When a withdrawal's rent calculation for the destination account exceeds the maximum allowed rent threshold, it may indicate malicious behavior. This status detail is set when such transfers are automatically cancelled.
      - `message` string
      - `destination_address` string
    - `pending_customer_approval` PendingCustomerApproval — PendingCustomerApproval represents that this resource is awaiting customer approval.
      - `message` string
      - `awaiting_action_from` 'AWAITING_ACTION_FROM_UNSPECIFIED' | 'AWAITING_ACTION_FROM_CLIENT' | 'AWAITING_ACTION_FROM_PAXOS' — AwaitingActionFrom indicates who needs to act on or is responsible for a given status. - AWAITING_ACTION_FROM_CLIENT: The customer needs to take action. - AWAITING_ACTION_FROM_PAXOS: Paxos needs to take action.
    - `stale_fee_quote` StaleFeeQuote — StaleFeeQuote represents a transfer cancelled because on-chain state changed after the fee was quoted.
      - `message` string
    - `invalid_destination_address` InvalidDestinationAddress — InvalidDestinationAddress represents a transfer cancelled because the destination address cannot receive the requested asset (e.g. it is a token account for a different mint).
      - `message` string
      - `destination_address` string
  - `created_at` string, date-time, required — The time at which this transfer record was created.
  - `updated_at` string, date-time, required — The time at which this transfer record was most recently updated.
  - `metadata` object — Optional client-specified stored metadata. For deposit event transfers this metadata is copied from the crypto deposit address or fiat deposit memo used for attribution. Up to 6 key/value pairs may be returned. Each key and value must be less than or equal to 100 characters.
  - `destination_address` string — The destination crypto address.
  - `crypto_network` 'BITCOIN' | 'ETHEREUM' | 'BITCOIN_CASH' | 'LITECOIN' | 'SOLANA' | 'POLYGON_POS' | 'BASE' | 'ARBITRUM_ONE' | 'STELLAR' | 'INK' | 'XLAYER' | 'AVALANCHE' | 'DOGECOIN' | 'SUI' | 'ROBINHOOD' | 'BNB' — A CryptoNetwork is a blockchain transmitting cryptocurrencies.
  - `crypto_tx_hash` string — For crypto transactions, the on-chain transaction hash.
  - `crypto_tx_index` string — For crypto transactions, the output index or output address.
  - `account_id` string — The Paxos ID of the Account associated with the transfer.
  - `auto_conversion` AutoConversion
    - `from_transfer_id` string
    - `to_transfer_id` string
  - `group_id` string — Unique identifier linking the debit and credit sides of an internal or Paxos transfer.
  - `fiat_account_id` string — For fiat withdrawals, the Paxos ID of the owner's fiat account (UUID).
  - `notional_value` string, decimal — For crypto withdrawals and deposits, the USD value of the combined amount and fee at the time of the transfer.
  - `memo` string — An optional memo to be included with the transfer as an identifier.

## Other responses

- `403` — Insufficient funds
- `404` — Could not find profile
- `409` — Transfer already exists

---

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