curl --request POST \
--url https://api.meow.com/v1/accounts/{account_id}/usdc \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"amount": 500000000.5,
"static_memo_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crypto_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"internal_note": "<string>",
"emails": [
"jsmith@example.com"
],
"metadata": {}
}
'import requests
url = "https://api.meow.com/v1/accounts/{account_id}/usdc"
payload = {
"amount": 500000000.5,
"static_memo_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crypto_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"internal_note": "<string>",
"emails": ["jsmith@example.com"],
"metadata": {}
}
headers = {
"x-api-key": "<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': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: 500000000.5,
static_memo_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
crypto_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
internal_note: '<string>',
emails: ['jsmith@example.com'],
metadata: {}
})
};
fetch('https://api.meow.com/v1/accounts/{account_id}/usdc', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.meow.com/v1/accounts/{account_id}/usdc"
payload := strings.NewReader("{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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://api.meow.com/v1/accounts/{account_id}/usdc")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meow.com/v1/accounts/{account_id}/usdc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meow.com/v1/accounts/{account_id}/usdc",
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' => 500000000.5,
'static_memo_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'crypto_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'internal_note' => '<string>',
'emails' => [
'jsmith@example.com'
],
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const url = 'https://api.meow.com/v1/accounts/{account_id}/usdc';
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: 500000000.5,
static_memo_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
crypto_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
internal_note: '<string>',
emails: ['jsmith@example.com'],
metadata: {}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));using RestSharp;
var options = new RestClientOptions("https://api.meow.com/v1/accounts/{account_id}/usdc");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-api-key", "<api-key>");
request.AddJsonBody("{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}")
val request = Request.Builder()
.url("https://api.meow.com/v1/accounts/{account_id}/usdc")
.post(body)
.addHeader("x-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()import Foundation
let parameters = [
"amount": 500000000.5,
"static_memo_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crypto_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"internal_note": "<string>",
"emails": ["jsmith@example.com"],
"metadata": []
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.meow.com/v1/accounts/{account_id}/usdc")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"x-api-key": "<api-key>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))falsefalse$headers=@{}
$headers.Add("x-api-key", "<api-key>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.meow.com/v1/accounts/{account_id}/usdc' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"amount": 500000000.5,
"static_memo_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crypto_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"internal_note": "<string>",
"emails": [
"jsmith@example.com"
],
"metadata": {}
}'{
"status": "pending",
"amount": "<string>",
"created_time": 123,
"destination_address": "<string>",
"destination_payment_rail": "arbitrum",
"approval_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "<string>",
"internal_note": "<string>",
"destination_address_nickname": "<string>",
"message": "<string>",
"metadata": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Create USDC Transaction
Legacy endpoint for USDC transactions. Requires the transfers:usdc:write scope. For new integrations, use POST /accounts/{account_id}/crypto. The destination determines the currency and network.
curl --request POST \
--url https://api.meow.com/v1/accounts/{account_id}/usdc \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"amount": 500000000.5,
"static_memo_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crypto_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"internal_note": "<string>",
"emails": [
"jsmith@example.com"
],
"metadata": {}
}
'import requests
url = "https://api.meow.com/v1/accounts/{account_id}/usdc"
payload = {
"amount": 500000000.5,
"static_memo_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crypto_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"internal_note": "<string>",
"emails": ["jsmith@example.com"],
"metadata": {}
}
headers = {
"x-api-key": "<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': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: 500000000.5,
static_memo_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
crypto_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
internal_note: '<string>',
emails: ['jsmith@example.com'],
metadata: {}
})
};
fetch('https://api.meow.com/v1/accounts/{account_id}/usdc', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.meow.com/v1/accounts/{account_id}/usdc"
payload := strings.NewReader("{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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://api.meow.com/v1/accounts/{account_id}/usdc")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meow.com/v1/accounts/{account_id}/usdc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meow.com/v1/accounts/{account_id}/usdc",
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' => 500000000.5,
'static_memo_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'crypto_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'internal_note' => '<string>',
'emails' => [
'jsmith@example.com'
],
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const url = 'https://api.meow.com/v1/accounts/{account_id}/usdc';
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: 500000000.5,
static_memo_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
crypto_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
internal_note: '<string>',
emails: ['jsmith@example.com'],
metadata: {}
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));using RestSharp;
var options = new RestClientOptions("https://api.meow.com/v1/accounts/{account_id}/usdc");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-api-key", "<api-key>");
request.AddJsonBody("{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"amount\": 500000000.5,\n \"static_memo_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"crypto_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"internal_note\": \"<string>\",\n \"emails\": [\n \"jsmith@example.com\"\n ],\n \"metadata\": {}\n}")
val request = Request.Builder()
.url("https://api.meow.com/v1/accounts/{account_id}/usdc")
.post(body)
.addHeader("x-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()import Foundation
let parameters = [
"amount": 500000000.5,
"static_memo_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crypto_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"internal_note": "<string>",
"emails": ["jsmith@example.com"],
"metadata": []
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.meow.com/v1/accounts/{account_id}/usdc")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"x-api-key": "<api-key>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))falsefalse$headers=@{}
$headers.Add("x-api-key", "<api-key>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.meow.com/v1/accounts/{account_id}/usdc' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"amount": 500000000.5,
"static_memo_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"crypto_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"internal_note": "<string>",
"emails": [
"jsmith@example.com"
],
"metadata": {}
}'{
"status": "pending",
"amount": "<string>",
"created_time": 123,
"destination_address": "<string>",
"destination_payment_rail": "arbitrum",
"approval_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "<string>",
"internal_note": "<string>",
"destination_address_nickname": "<string>",
"message": "<string>",
"metadata": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Your Meow API key, sent in the x-api-key header for authentication.
Headers
A unique key you generate (1-50 printable ASCII characters, no spaces) so retrying this request never creates a duplicate. Reusing a key is rejected.
1 - 50^[!-~]+$Optional entity_id to scope requests to a specific entity.
Path Parameters
The ID of the account.
Body
Amount to send, in USD.
1 <= x <= 1000000000Destination static memo. Provide exactly one of static_memo_id or crypto_id.
Destination crypto address on a contact. Provide exactly one of static_memo_id or crypto_id.
Private note, visible only inside Meow.
5 - 255Addresses to notify when the transaction is sent, as a list.
Your own key/value data to attach to this object. Meow stores it unchanged and returns it on every read of the object and on every webhook event about it, so you can match it back to your own records. Up to 20 pairs; keys up to 40 characters, values up to 200, and 5 KB serialized as JSON in total — note that a non-ASCII character counts as 6 bytes and an emoji as 12. Values must be strings. Meow never interprets it — do not put anything here that needs to stay private.
Show child attributes
Show child attributes
Response
Successful Response
Where the transaction is in its lifecycle. pending_approval means an approval policy is holding it; processing means it was queued for submission.
pending, pending_approval, canceled, processing, error, sent, returned, void Amount sent, in USD. Echoes the request.
^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$When the transaction was created, as a Unix timestamp in seconds.
On-chain address the funds were sent to.
Blockchain network the funds were sent over.
arbitrum, avalanche_c_chain, base, ethereum, optimism, polygon, solana, stellar, sui, tempo, tron, xdc, ach, ach_push, ach_same_day, fednow, wire Handle for this transaction, returned whether or not an approval policy gated it. Pass it to GET /approvals/{approval_id} to follow the transaction to completion.
Identifier of the transaction, for use with Get Crypto Transaction. null until the transfer leaves the queue, so it is always absent while status is processing or pending_approval. Use approval_id as the stable handle instead.
Private note, visible only inside Meow. Echoes the request.
Nickname of the contact that owns the destination address. null when the address is not attached to a contact.
Human-readable next step. Set only when status is pending_approval; otherwise null.
The metadata attached when this object was created, unchanged. null when none was attached. Rarely, a .created webhook can be published before the create request finishes committing, and that one event reports null; every later event and every read of the object carries the metadata.
Show child attributes
Show child attributes