Skip to main content
POST
/
v2
/
embedded-wallet-api
/
end-users
/
{userId}
/
evm
/
{address}
/
send
/
{asset}
curl --request POST \
  --url https://api.cdp.coinbase.com/platform/v2/embedded-wallet-api/end-users/{userId}/evm/{address}/send/{asset} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "to": "0x1234567890123456789012345678901234567890",
  "amount": "25.50",
  "network": "base-sepolia",
  "walletSecretId": "e051beeb-7163-4527-a5b6-35e301529ff2"
}
'
{
  "transactionHash": "0xf8f98fb6726fc936f24b2007df5cb20e2b8444ff3dfaa2a929335f432a9be2e7",
  "userOpHash": null
}

Authorizations

Authorization
string
header
required

A JWT signed using the developer's own JWT private key (in the case of JWT authentication), or an end user JWT signed by CDP, encoded in base64. This is used for End User Account APIs.

Headers

X-Wallet-Auth
string

A JWT signed using your Wallet Secret, encoded in base64. Refer to the Generate Wallet Token section of our Authentication docs for more details on how to generate your Wallet Token.

X-Idempotency-Key
string

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.

Required string length: 1 - 128
X-Developer-Auth
string

A JWT signed using your Wallet Secret, encoded in base64. Refer to the Generate Wallet Token section of our Authentication docs for more details on how to generate your Wallet Token.

Path Parameters

userId
string
required

The ID of the end user.

Pattern: ^[a-zA-Z0-9-]{1,100}$
address
string
required

The 0x-prefixed address of the EVM account (EOA or Smart Account) to send USDC from. The address does not need to be checksummed. A blockchain address. Format varies by network (e.g., 0x-prefixed for EVM, base58 for Solana).

Required string length: 1 - 128
Pattern: ^0x[0-9a-fA-F]{40}$
Example:

"0x742d35Cc6634C0532925a3b844Bc454e4438f44e"

asset
enum<string>
required

The asset to send. Currently only "usdc" is supported. The symbol of the asset (e.g., eth, usd, usdc, usdt).

Available options:
usdc
Required string length: 1 - 42
Example:

"usd"

Query Parameters

projectID
string

The ID of the CDP Project. Required for end users authenticated using custom auth (i.e. a non-CDP JWT provider).

Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
Example:

"8e03978e-40d5-43e8-bc93-6894a57f9324"

Body

application/json
to
string
required

The 0x-prefixed address of the recipient.

Required string length: 1 - 128
Pattern: ^0x[0-9a-fA-F]{40}$
Example:

"0x1234567890123456789012345678901234567890"

amount
string
required

The amount of USDC to send as a decimal string (e.g., "1.5" or "25.50").

Required string length: 1 - 32
Example:

"1.50"

network
enum<string>
required

The EVM network to send USDC on.

Available options:
base,
base-sepolia,
ethereum,
ethereum-sepolia,
avalanche,
polygon,
optimism,
arbitrum,
arbitrum-sepolia,
world,
world-sepolia
Example:

"base-sepolia"

useCdpPaymaster
boolean

Whether to use CDP Paymaster to sponsor gas fees. Only applicable for EVM Smart Accounts. When true, the transaction gas will be paid by the Paymaster, allowing users to send USDC without holding native gas tokens. Ignored for EOA accounts. Cannot be used together with paymasterUrl.

Example:

true

paymasterUrl
string<uri>

Optional custom Paymaster URL to use for gas sponsorship. Only applicable for EVM Smart Accounts. This allows you to use your own Paymaster service instead of CDP's Paymaster. Cannot be used together with useCdpPaymaster.

Required string length: 11 - 2048
Pattern: ^https?://.*$
Example:

"https://api.developer.coinbase.com/rpc/v1/base/AbCdEf123456"

walletSecretId
string

Required when not using delegated signing. The ID of the Temporary Wallet Secret that was used to sign the X-Wallet-Auth Header.

Pattern: ^[a-zA-Z0-9-]{1,100}$
Example:

"e051beeb-7163-4527-a5b6-35e301529ff2"

Response

Successfully sent transaction.

transactionHash
string | null

The hash of the transaction, as a 0x-prefixed hex string. Populated for EOA accounts. Null for Smart Accounts (use userOpHash instead).

Example:

"0xf8f98fb6726fc936f24b2007df5cb20e2b8444ff3dfaa2a929335f432a9be2e7"

userOpHash
string | null

The hash of the user operation, as a 0x-prefixed hex string. Populated for Smart Accounts. Null for EOA accounts (use transactionHash instead).

Example:

"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"