Skip to main content
POST
/
2025-06-09
/
wallets
/
{walletLocator}
/
tokens
/
{tokenLocator}
/
transfers
Transfer Token
curl --request POST \
  --url https://staging.crossmint.com/api/2025-06-09/wallets/{walletLocator}/tokens/{tokenLocator}/transfers \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: <x-api-key>' \
  --data '
{
  "recipient": "<string>",
  "signer": "external-wallet:0xdeadbeef",
  "amount": "42.69",
  "transactionType": "direct",
  "memo": {
    "type": "text",
    "value": "Hello, world!"
  }
}
'
{
  "params": {
    "calls": [
      {
        "address": "<string>",
        "functionName": "<string>",
        "abi": [
          "<unknown>"
        ],
        "args": [
          "<unknown>"
        ],
        "value": "0"
      }
    ],
    "chain": "<unknown>",
    "signer": {
      "type": "external-wallet",
      "address": "<string>",
      "locator": "<string>"
    }
  },
  "onChain": {
    "userOperation": {
      "sender": "<string>",
      "nonce": "<string>",
      "callData": "<string>",
      "callGasLimit": "<string>",
      "verificationGasLimit": "<string>",
      "preVerificationGas": "<string>",
      "maxFeePerGas": "<string>",
      "maxPriorityFeePerGas": "<string>",
      "signature": "<string>",
      "paymaster": "<string>",
      "paymasterVerificationGasLimit": "<string>",
      "paymasterData": "<string>",
      "paymasterPostOpGasLimit": "<string>",
      "factory": "<string>",
      "factoryData": "<string>"
    },
    "userOperationHash": "<string>",
    "txId": "<string>",
    "proxiedTxId": "<string>",
    "explorerLink": "<string>"
  },
  "id": "<string>",
  "createdAt": 123,
  "approvals": {
    "pending": [
      {
        "signer": {
          "type": "external-wallet",
          "address": "<string>",
          "locator": "<string>"
        },
        "message": "<string>"
      }
    ],
    "submitted": [
      {
        "signature": "<string>",
        "submittedAt": 123,
        "signer": {
          "type": "external-wallet",
          "address": "<string>",
          "locator": "<string>"
        },
        "message": "<string>",
        "metadata": {
          "deviceInfo": "<string>",
          "ipAddress": "<string>",
          "userAgent": "<string>"
        }
      }
    ],
    "required": 123
  },
  "completedAt": 123,
  "error": {
    "reason": "build_failed",
    "message": "<string>",
    "revertData": {}
  },
  "sendParams": {
    "token": "<string>",
    "params": {
      "recipient": "<string>",
      "recipientAddress": "<string>",
      "amount": "<string>"
    }
  },
  "fees": {
    "estimate": "<unknown>",
    "actual": "<unknown>",
    "billed": {
      "usd": 123
    },
    "billing": {}
  }
}

Headers

X-API-KEY
string
required

API key required for authentication

x-idempotency-key
string

Unique key to prevent duplicate transaction creation

Path Parameters

walletLocator
string
required

A wallet locator can be of the format:

  • <walletAddress>
  • email:<email>:<chainType>[:<walletType>][:alias:<alias>] (walletType defaults to 'smart')
  • userId:<userId>:<chainType>[:<walletType>][:alias:<alias>] (white label user example)
  • phoneNumber:<phoneNumber>:<chainType>[:<walletType>][:alias:<alias>]
  • twitter:<handle>:<chainType>[:<walletType>][:alias:<alias>]
  • x:<handle>:<chainType>[:<walletType>][:alias:<alias>]
  • me:<chainType>[:<walletType>][:alias:<alias>] (Use when calling from the client side with a client API key)
  • chainType[:<walletType>]:alias:<alias>
tokenLocator
string
required

A token locator that supports native tokens, fungible tokens, and NFTs across different chains. It can be of the format:

  • chain:address[:tokenId]
  • chain:currency
  • chain:address

Body

application/json

Base fields for all token transfers

recipient
string
required
signer
string

Optional signer locator. Defaults to admin signer

Example:

"external-wallet:0xdeadbeef"

amount
string

Amount of tokens to transfer (in decimal value)

Pattern: ^\d+(?:\.\d*)?$
Example:

"42.69"

transactionType
default:direct

Specifies the type of transaction. Choose 'direct' for standard interactions or 'regulated-transfer' for operations requiring compliance checks.

Available options:
direct
memo
object

Memo for the transaction. Only supported for Stellar

Example:
{ "type": "text", "value": "Hello, world!" }
fees
object

Optional per-transaction fee configuration override. When omitted, the project default is used.

Response

201 - application/json

The transaction has been successfully created.

The signer registration transaction the wallet admin must sign and submit to add (on create) or revoke (on delete) the card's delegated signer on-chain.

chainType
enum<string>
required

The blockchain type of the wallet

Available options:
evm,
solana,
aptos,
sui,
stellar
walletType
enum<string>
required

The wallet type (smart or mpc)

Available options:
smart,
mpc
params
object
required
onChain
object
required

EVM smart wallet transaction data including input parameters and chain specific details

id
string
required

Unique identifier for the transaction

status
enum<string>
required

Current status of the transaction

Available options:
awaiting-approval,
pending,
failed,
success
createdAt
required

ISO timestamp when the signature was created

approvals
object

Complete approval data including requirements, pending and submitted signatures

completedAt

ISO timestamp when the transaction reached finality

error
object

Error message if the transaction fails after submission

sendParams
object
fees
object

Transaction fee information including actual transaction fees, billed amounts, and billing status