Send USDC
curl --request POST \
--url https://api.example.com/v1/usdc/transfer \
--header 'Content-Type: application/json' \
--data '
{
"amount_usdc": 123,
"to_address": "<string>",
"chain": "<string>",
"description": "<string>",
"idempotency_key": "<string>"
}
'import requests
url = "https://api.example.com/v1/usdc/transfer"
payload = {
"amount_usdc": 123,
"to_address": "<string>",
"chain": "<string>",
"description": "<string>",
"idempotency_key": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
amount_usdc: 123,
to_address: '<string>',
chain: '<string>',
description: '<string>',
idempotency_key: '<string>'
})
};
fetch('https://api.example.com/v1/usdc/transfer', 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://api.example.com/v1/usdc/transfer",
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([
'amount_usdc' => 123,
'to_address' => '<string>',
'chain' => '<string>',
'description' => '<string>',
'idempotency_key' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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://api.example.com/v1/usdc/transfer"
payload := strings.NewReader("{\n \"amount_usdc\": 123,\n \"to_address\": \"<string>\",\n \"chain\": \"<string>\",\n \"description\": \"<string>\",\n \"idempotency_key\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.example.com/v1/usdc/transfer")
.header("Content-Type", "application/json")
.body("{\n \"amount_usdc\": 123,\n \"to_address\": \"<string>\",\n \"chain\": \"<string>\",\n \"description\": \"<string>\",\n \"idempotency_key\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/usdc/transfer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount_usdc\": 123,\n \"to_address\": \"<string>\",\n \"chain\": \"<string>\",\n \"description\": \"<string>\",\n \"idempotency_key\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"status": "<string>",
"amount_usdc": 123,
"fee_usdc": 123,
"to_address": "<string>",
"chain": "<string>",
"tx_hash": {},
"created_at": "<string>"
}Agent API
Send USDC
Send USDC on-chain to an external wallet address.
POST
/
v1
/
usdc
/
transfer
Send USDC
curl --request POST \
--url https://api.example.com/v1/usdc/transfer \
--header 'Content-Type: application/json' \
--data '
{
"amount_usdc": 123,
"to_address": "<string>",
"chain": "<string>",
"description": "<string>",
"idempotency_key": "<string>"
}
'import requests
url = "https://api.example.com/v1/usdc/transfer"
payload = {
"amount_usdc": 123,
"to_address": "<string>",
"chain": "<string>",
"description": "<string>",
"idempotency_key": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
amount_usdc: 123,
to_address: '<string>',
chain: '<string>',
description: '<string>',
idempotency_key: '<string>'
})
};
fetch('https://api.example.com/v1/usdc/transfer', 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://api.example.com/v1/usdc/transfer",
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([
'amount_usdc' => 123,
'to_address' => '<string>',
'chain' => '<string>',
'description' => '<string>',
'idempotency_key' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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://api.example.com/v1/usdc/transfer"
payload := strings.NewReader("{\n \"amount_usdc\": 123,\n \"to_address\": \"<string>\",\n \"chain\": \"<string>\",\n \"description\": \"<string>\",\n \"idempotency_key\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.example.com/v1/usdc/transfer")
.header("Content-Type", "application/json")
.body("{\n \"amount_usdc\": 123,\n \"to_address\": \"<string>\",\n \"chain\": \"<string>\",\n \"description\": \"<string>\",\n \"idempotency_key\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/usdc/transfer")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount_usdc\": 123,\n \"to_address\": \"<string>\",\n \"chain\": \"<string>\",\n \"description\": \"<string>\",\n \"idempotency_key\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"status": "<string>",
"amount_usdc": 123,
"fee_usdc": 123,
"to_address": "<string>",
"chain": "<string>",
"tx_hash": {},
"created_at": "<string>"
}This endpoint is deprecated. Use POST /v1/pay with an EVM address recipient instead.
Requires a bearer token with the
pay permission.Request Body
number
required
Amount of USDC to send (e.g.,
10.50 for 10.50 USDC). Max 100,000.string
required
Destination EVM address. Must be
0x followed by 40 hexadecimal characters. Cannot be the zero address.string
default:"base"
Blockchain network to send on. Default:
"base".string
Payment description for record-keeping. Max 500 characters.
string
Unique key to prevent duplicate transfers. Max 255 characters.
Response
string
required
Unique transaction identifier.
string
required
Transaction status:
pending, processing, completed, or failed.number
required
Amount of USDC sent.
number
required
Platform fee in USDC.
string
required
Destination wallet address.
string
required
Blockchain network used.
string | null
required
On-chain transaction hash.
null while the transaction is pending.string
required
ISO 8601 timestamp of when the transfer was created.
Examples
curl -X POST https://api.unwall.xyz/v1/usdc/transfer \
-H "Authorization: Bearer aw_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"amount_usdc": 25.00,
"to_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"description": "Contractor payment",
"idempotency_key": "pay-contractor-2026-03"
}'
import requests
resp = requests.post(
"https://api.unwall.xyz/v1/usdc/transfer",
headers={"Authorization": "Bearer aw_live_xxxxxxxxxxxx"},
json={
"amount_usdc": 25.00,
"to_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"description": "Contractor payment",
"idempotency_key": "pay-contractor-2026-03",
},
)
result = resp.json()
print(f"Sent {result['amount_usdc']} USDC — tx: {result['tx_hash']}")
const resp = await fetch("https://api.unwall.xyz/v1/usdc/transfer", {
method: "POST",
headers: {
Authorization: "Bearer aw_live_xxxxxxxxxxxx",
"Content-Type": "application/json",
},
body: JSON.stringify({
amount_usdc: 25.0,
to_address: "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
description: "Contractor payment",
idempotency_key: "pay-contractor-2026-03",
}),
});
const result = await resp.json();
console.log(`Sent ${result.amount_usdc} USDC — tx: ${result.tx_hash}`);
Response (201 Created)
{
"id": "tx_usdc_abc123",
"status": "processing",
"amount_usdc": 25.0,
"fee_usdc": 0.375,
"to_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28",
"chain": "base",
"tx_hash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
"created_at": "2026-03-11T14:30:00Z"
}