Create transfer
Create a new transfer to move funds from a source to a target.
All transfers first transition to quoted. If execute: false, the transfer stays quoted until you call /v2/transfers/{transferId}/execute.
If execute: true, quoted status emits momentarily before the transfer moves to processing, where execution proceeds. Subscribe to the transfers webhook to follow progress in real time instead of polling.
Authorizations
A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the Generate Bearer Token section of our Authentication docs for information on how to generate your Bearer Token.
Headers
An optional string request header for making requests safely retryable. When included, duplicate requests with the same key will return identical responses. Refer to our Idempotency docs for more information on using idempotency keys.
1 - 128Body
A request to create a transfer.
The source of the transfer.
- Account
- Payment Method
{
"accountId": "account_af2937b0-9846-4fe7-bfe9-ccc22d935114",
"asset": "usd"
}The target of the transfer.
- Account
- Payment Method
- Onchain Address
- Email Instrument
{
"accountId": "account_af2937b0-9846-4fe7-bfe9-ccc22d935114",
"asset": "usd"
}The amount of the transfer, as a decimal string in standard unit denomination of the asset specified by asset (e.g., "100.00" for 100 USD, "0.05" for 0.05 ETH).
^\+?(?:(?:0*[1-9]\d*)(?:\.\d*)?|0*\.\d*[1-9]\d*)$"100.00"
The symbol of the asset for the amount. This must be one of the assets of the source or target.
1 - 42"usd"
Whether to immediately execute the transfer. If false, the transfer will be created in quoted status and must be executed manually via the /execute endpoint.
true
Specifies whether the given amount is to be received by the target or taken from the source.
target: The transfertargetreceives the exact value specified inamount. Fees are added to the amount taken from the transfersource.source: The transfertargetreceives the value specified inamount, minus any fees.
target, source "source"
If true, validates the transfer without initiating it. If the request is valid, a 2xx will be returned. If the request is invalid, a 4xx error will be returned. The response will include an errorType, for e.g. invalid_target if the specified target cannot receive funds.
false
Optional metadata as key-value pairs. Use this to store additional structured information on a resource, such as customer IDs, order references, or any application-specific data. Up to 10 key/value pairs may be provided. Keys and values are both strings. Keys must be ≤ 40 characters; values must be ≤ 500 characters.
{
"customer_id": "cust_12345",
"order_reference": "order-67890"
}Travel Rule compliance information for this transfer. Required for transfers to external wallets above regulatory thresholds. Fields required differ by region and Coinbase contracting entity.
{
"isSelf": false,
"isIntermediary": false,
"originator": {
"name": "John Doe",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postCode": "94105",
"countryCode": "US"
}
},
"beneficiary": {
"name": "Jane Smith",
"walletType": "custodial"
}
}Response
Successfully created transfer.
A Transfer represents all the information needed to execute a transfer and tracks the lifecycle of a transfer from initiation through completion or failure.
The source of the transfer.
- Account
- Payment Method
- Onchain Address
- Originating Bank Account (US)
{
"accountId": "account_af2937b0-9846-4fe7-bfe9-ccc22d935114",
"asset": "usd"
}The target of the transfer.
- Account
- Payment Method
- Onchain Address
- Email Instrument
{
"accountId": "account_af2937b0-9846-4fe7-bfe9-ccc22d935114",
"asset": "usd"
}The ID of the transfer. Required when validateOnly is false.
"transfer_af2937b0-9846-4fe7-bfe9-ccc22d935114"
The current status of the transfer, indicating what action you need to take next. Required when validateOnly is false.
quoted, processing, completed, failed "quoted"
The amount of the source asset that will be transferred out, as a decimal string in standard unit denomination.
"103.50"
The asset symbol of the source amount.
1 - 42"usd"
The amount of the target asset received, as a decimal string in standard unit denomination. May be omitted in the quoted state if the value cannot be guaranteed; see estimate.targetAmount for the expected value. Populated with the actual executed amount once the transfer completes.
"100.00"
The asset symbol of the target amount.
1 - 42"usdc"
Exchange rate information for currency conversion. The rate indicates how much of the target asset is equivalent to one unit of the source asset. May be omitted in the quoted state if the rate cannot be guaranteed; see estimate.exchangeRate for the expected rate. Populated with the actual executed rate once the transfer completes.
{
"sourceAsset": "usd",
"targetAsset": "usdc",
"rate": "1"
}The fees associated with this transfer. Different transfer types have different fee structures. May be omitted in the quoted state if the fees cannot be guaranteed; see estimate.fees for the expected fees. Populated with the actual fees once the transfer completes.
[
{
"type": "bank",
"amount": "20",
"asset": "usd"
},
{
"type": "conversion",
"amount": "1.00",
"asset": "usdc"
},
{
"type": "network",
"amount": "0.01",
"asset": "usdc"
}
]Captures estimated values for transfers where amounts can't be guaranteed (e.g., USDC -> EURC).
The values in estimate are not modified after a transfer is executed. They are preserved as an immutable record of the original pre-execution snapshot.
The actual executed values are populated in the transfer resource post-execution.
{
"exchangeRate": {
"sourceAsset": "usdc",
"targetAsset": "eur",
"rate": "0.85"
},
"targetAmount": "85.00",
"targetAsset": "eur",
"fees": [
{
"type": "conversion",
"amount": "0.01",
"asset": "usdc"
}
],
"estimatedAt": "2023-10-08T14:30:00Z"
}The date and time the transfer was completed.
"2025-01-01T00:05:00Z"
The reason for failure, if the transfer failed. Only present when status is failed.
"Insufficient balance to complete this transfer."
The date and time when this transfer will expire if not executed. Only present for quoted status. A new transfer must be created to obtain an updated quote after expiration. Required when validateOnly is false.
"2025-01-01T00:15:00Z"
The date and time the transfer was executed and moved to processing. Only present when status has progressed beyond quoted.
"2025-01-01T00:01:30Z"
The date and time the transfer was created. Required when validateOnly is false.
"2025-01-01T00:00:00Z"
The date and time the transfer was last updated. Required when validateOnly is false.
"2025-01-01T00:00:00Z"
Optional metadata as key-value pairs. Use this to store additional structured information on a resource, such as customer IDs, order references, or any application-specific data. Up to 10 key/value pairs may be provided. Keys and values are both strings. Keys must be ≤ 40 characters; values must be ≤ 500 characters.
{
"customer_id": "cust_12345",
"order_reference": "order-67890"
}Additional details about the transfer. For example, if the transfer was sent to a deposit destination, the information about that destination will be included in this field.
{
"depositDestination": {
"id": "depositDestination_af2937b0-9846-4fe7-bfe9-ccc22d935114"
},
"onchainTransactions": [
{
"transactionHash": "0x363cd3b3d4f49497cf5076150cd709307b90e9fc897fdd623546ea7b9313cecb",
"network": "base"
}
]
}