curl --request POST \
--url https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <x-api-key>' \
--data '
{
"recipient": "0x1234567890123456789012345678901234567890",
"signer": "evm-keypair:0xdeadbeef",
"amount": "42.69"
}
'import requests
url = "https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers"
payload = {
"recipient": "0x1234567890123456789012345678901234567890",
"signer": "evm-keypair:0xdeadbeef",
"amount": "42.69"
}
headers = {
"X-API-KEY": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
recipient: '0x1234567890123456789012345678901234567890',
signer: 'evm-keypair:0xdeadbeef',
amount: '42.69'
})
};
fetch('https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'recipient' => '0x1234567890123456789012345678901234567890',
'signer' => 'evm-keypair:0xdeadbeef',
'amount' => '42.69'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers"
payload := strings.NewReader("{\n \"recipient\": \"0x1234567890123456789012345678901234567890\",\n \"signer\": \"evm-keypair:0xdeadbeef\",\n \"amount\": \"42.69\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers")
.header("X-API-KEY", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": \"0x1234567890123456789012345678901234567890\",\n \"signer\": \"evm-keypair:0xdeadbeef\",\n \"amount\": \"42.69\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": \"0x1234567890123456789012345678901234567890\",\n \"signer\": \"evm-keypair:0xdeadbeef\",\n \"amount\": \"42.69\"\n}"
response = http.request(request)
puts response.read_body{
"id": "tx-b984491a-5785-43c0-8811-45d46fe6e520",
"walletType": "evm-smart-wallet",
"status": "awaiting-approval",
"approvals": {
"pending": [
{
"signer": "evm-keypair:0xdeadbeef",
"message": "Please sign this transaction"
}
],
"submitted": []
},
"params": {
"calls": [
{
"to": "0x1234567890123456789012345678901234567890",
"value": "1000000000000000000",
"data": "0x"
}
],
"chain": "base",
"signer": "evm-keypair:0xdeadbeef"
},
"onChain": {
"userOperation": "... full user operation object",
"userOperationHash": "0xf719f9570671c6eb016f1f4a95ada4278b8e91f55bc384d70c69fd756919a41c"
},
"createdAt": "2024-01-01T00:00:00Z",
"sendParams": {
"params": {
"recipient": "0x1234567890123456789012345678901234567890",
"recipientAddress": "0x1234567890123456789012345678901234567890",
"amount": "42.42"
},
"token": "base-sepolia:usdc"
}
}Transfer Token
Sends a token of any type from this wallet to a recipient
curl --request POST \
--url https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <x-api-key>' \
--data '
{
"recipient": "0x1234567890123456789012345678901234567890",
"signer": "evm-keypair:0xdeadbeef",
"amount": "42.69"
}
'import requests
url = "https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers"
payload = {
"recipient": "0x1234567890123456789012345678901234567890",
"signer": "evm-keypair:0xdeadbeef",
"amount": "42.69"
}
headers = {
"X-API-KEY": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
recipient: '0x1234567890123456789012345678901234567890',
signer: 'evm-keypair:0xdeadbeef',
amount: '42.69'
})
};
fetch('https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'recipient' => '0x1234567890123456789012345678901234567890',
'signer' => 'evm-keypair:0xdeadbeef',
'amount' => '42.69'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers"
payload := strings.NewReader("{\n \"recipient\": \"0x1234567890123456789012345678901234567890\",\n \"signer\": \"evm-keypair:0xdeadbeef\",\n \"amount\": \"42.69\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers")
.header("X-API-KEY", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": \"0x1234567890123456789012345678901234567890\",\n \"signer\": \"evm-keypair:0xdeadbeef\",\n \"amount\": \"42.69\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/unstable/wallets/{walletLocator}/tokens/{tokenLocator}/transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": \"0x1234567890123456789012345678901234567890\",\n \"signer\": \"evm-keypair:0xdeadbeef\",\n \"amount\": \"42.69\"\n}"
response = http.request(request)
puts response.read_body{
"id": "tx-b984491a-5785-43c0-8811-45d46fe6e520",
"walletType": "evm-smart-wallet",
"status": "awaiting-approval",
"approvals": {
"pending": [
{
"signer": "evm-keypair:0xdeadbeef",
"message": "Please sign this transaction"
}
],
"submitted": []
},
"params": {
"calls": [
{
"to": "0x1234567890123456789012345678901234567890",
"value": "1000000000000000000",
"data": "0x"
}
],
"chain": "base",
"signer": "evm-keypair:0xdeadbeef"
},
"onChain": {
"userOperation": "... full user operation object",
"userOperationHash": "0xf719f9570671c6eb016f1f4a95ada4278b8e91f55bc384d70c69fd756919a41c"
},
"createdAt": "2024-01-01T00:00:00Z",
"sendParams": {
"params": {
"recipient": "0x1234567890123456789012345678901234567890",
"recipientAddress": "0x1234567890123456789012345678901234567890",
"amount": "42.42"
},
"token": "base-sepolia:usdc"
}
}Headers
API key required for authentication
Unique key to prevent duplicate transaction creation
Path Parameters
A wallet locator can be of the format:
<walletAddress>email:<email>:<walletType>userId:<userId>:<walletType>userId:<userId>:<walletType>(white label user example)phoneNumber:<phoneNumber>:<walletType>twitter:<handle>:<walletType>x:<handle>:<walletType>
A token locator that supports native tokens, fungible tokens, and NFTs across different chains. It can be of the format:
chain:address[:tokenId]chain:currencychain:address
Body
An address locator that supports different types of recipients. It can be of the format:
<address>(wallet address)chain:address(e.g. ethereum:0x1234...)address:<blockchain_address>[:chain]email:<email_address>[:chain]phoneNumber:<phone_number>[:chain]twitter:<twitter_handle>[:chain]x:<twitter_handle>[:chain]userId:<user_id>[:chain]
"0x1234567890123456789012345678901234567890"
Optional signer locator. Defaults to admin signer
"evm-keypair:0xdeadbeef"
Amount of tokens to transfer (in decimal value)
"42.69"
Response
The transaction has been successfully created.
- EVM transaction response
- Solana transaction response
- EVM MPC transaction response
- Solana smart wallet transaction response
Complete transaction response including status, signing requirements, and wallet type specific data
The type of wallet that created this transaction
evm-smart-wallet EVM smart wallet transaction parameters
Show child attributes
Show child attributes
EVM smart wallet transaction data including input parameters and chain specific details
Show child attributes
Show child attributes
Unique identifier for the transaction
Current status of the transaction
awaiting-approval, pending, failed, success ISO timestamp when the transaction was created
"2024-01-01T00:00:00.000Z"
Complete approval data including requirements, pending and submitted signatures
Show child attributes
Show child attributes
ISO timestamp when the transaction reached finality
"2024-01-01T00:00:00.000Z"
Error message if the transaction fails after submission
- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?

