curl --request POST \
--url https://api.stabyl.com/v1/partner/wallets/recipients \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"label": "Main USDT recipient",
"account_name": "Jane Doe",
"account_number": "0123456789",
"bank_code": "058",
"bank_name": "GTBank",
"chain": "evm",
"country": "NGA",
"crypto_address": "0x1234...abcd",
"currency": "USDT"
}
'import requests
url = "https://api.stabyl.com/v1/partner/wallets/recipients"
payload = {
"label": "Main USDT recipient",
"account_name": "Jane Doe",
"account_number": "0123456789",
"bank_code": "058",
"bank_name": "GTBank",
"chain": "evm",
"country": "NGA",
"crypto_address": "0x1234...abcd",
"currency": "USDT"
}
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({
label: 'Main USDT recipient',
account_name: 'Jane Doe',
account_number: '0123456789',
bank_code: '058',
bank_name: 'GTBank',
chain: 'evm',
country: 'NGA',
crypto_address: '0x1234...abcd',
currency: 'USDT'
})
};
fetch('https://api.stabyl.com/v1/partner/wallets/recipients', 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.stabyl.com/v1/partner/wallets/recipients",
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([
'label' => 'Main USDT recipient',
'account_name' => 'Jane Doe',
'account_number' => '0123456789',
'bank_code' => '058',
'bank_name' => 'GTBank',
'chain' => 'evm',
'country' => 'NGA',
'crypto_address' => '0x1234...abcd',
'currency' => 'USDT'
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.stabyl.com/v1/partner/wallets/recipients"
payload := strings.NewReader("{\n \"label\": \"Main USDT recipient\",\n \"account_name\": \"Jane Doe\",\n \"account_number\": \"0123456789\",\n \"bank_code\": \"058\",\n \"bank_name\": \"GTBank\",\n \"chain\": \"evm\",\n \"country\": \"NGA\",\n \"crypto_address\": \"0x1234...abcd\",\n \"currency\": \"USDT\"\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.stabyl.com/v1/partner/wallets/recipients")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"Main USDT recipient\",\n \"account_name\": \"Jane Doe\",\n \"account_number\": \"0123456789\",\n \"bank_code\": \"058\",\n \"bank_name\": \"GTBank\",\n \"chain\": \"evm\",\n \"country\": \"NGA\",\n \"crypto_address\": \"0x1234...abcd\",\n \"currency\": \"USDT\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stabyl.com/v1/partner/wallets/recipients")
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 \"label\": \"Main USDT recipient\",\n \"account_name\": \"Jane Doe\",\n \"account_number\": \"0123456789\",\n \"bank_code\": \"058\",\n \"bank_name\": \"GTBank\",\n \"chain\": \"evm\",\n \"country\": \"NGA\",\n \"crypto_address\": \"0x1234...abcd\",\n \"currency\": \"USDT\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"account_name": "Example Recipient",
"account_number": "0123456789",
"bank_code": "044",
"bank_name": "Access Bank",
"chain": null,
"created_at": "2026-05-24T12:00:00Z",
"crypto_address": null,
"currency": "NGN",
"id": "0197f1f0-0000-7000-8000-000000000002",
"label": "Operations account",
"recipient_type": "fiat",
"updated_at": "2026-05-24T12:00:00Z"
},
"status": "success"
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "invalid request parameters"
},
"status": "error"
}{
"error": {
"code": "UNAUTHORIZED",
"message": "missing X-Api-Key header"
},
"status": "error"
}Create saved recipient
Creates a saved fiat or crypto recipient record for future use in Stabyl Pro workflows. Production requires approved KYB for fiat recipients. Creating a recipient does not submit a withdrawal or move funds.
curl --request POST \
--url https://api.stabyl.com/v1/partner/wallets/recipients \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"label": "Main USDT recipient",
"account_name": "Jane Doe",
"account_number": "0123456789",
"bank_code": "058",
"bank_name": "GTBank",
"chain": "evm",
"country": "NGA",
"crypto_address": "0x1234...abcd",
"currency": "USDT"
}
'import requests
url = "https://api.stabyl.com/v1/partner/wallets/recipients"
payload = {
"label": "Main USDT recipient",
"account_name": "Jane Doe",
"account_number": "0123456789",
"bank_code": "058",
"bank_name": "GTBank",
"chain": "evm",
"country": "NGA",
"crypto_address": "0x1234...abcd",
"currency": "USDT"
}
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({
label: 'Main USDT recipient',
account_name: 'Jane Doe',
account_number: '0123456789',
bank_code: '058',
bank_name: 'GTBank',
chain: 'evm',
country: 'NGA',
crypto_address: '0x1234...abcd',
currency: 'USDT'
})
};
fetch('https://api.stabyl.com/v1/partner/wallets/recipients', 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.stabyl.com/v1/partner/wallets/recipients",
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([
'label' => 'Main USDT recipient',
'account_name' => 'Jane Doe',
'account_number' => '0123456789',
'bank_code' => '058',
'bank_name' => 'GTBank',
'chain' => 'evm',
'country' => 'NGA',
'crypto_address' => '0x1234...abcd',
'currency' => 'USDT'
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.stabyl.com/v1/partner/wallets/recipients"
payload := strings.NewReader("{\n \"label\": \"Main USDT recipient\",\n \"account_name\": \"Jane Doe\",\n \"account_number\": \"0123456789\",\n \"bank_code\": \"058\",\n \"bank_name\": \"GTBank\",\n \"chain\": \"evm\",\n \"country\": \"NGA\",\n \"crypto_address\": \"0x1234...abcd\",\n \"currency\": \"USDT\"\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.stabyl.com/v1/partner/wallets/recipients")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"Main USDT recipient\",\n \"account_name\": \"Jane Doe\",\n \"account_number\": \"0123456789\",\n \"bank_code\": \"058\",\n \"bank_name\": \"GTBank\",\n \"chain\": \"evm\",\n \"country\": \"NGA\",\n \"crypto_address\": \"0x1234...abcd\",\n \"currency\": \"USDT\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stabyl.com/v1/partner/wallets/recipients")
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 \"label\": \"Main USDT recipient\",\n \"account_name\": \"Jane Doe\",\n \"account_number\": \"0123456789\",\n \"bank_code\": \"058\",\n \"bank_name\": \"GTBank\",\n \"chain\": \"evm\",\n \"country\": \"NGA\",\n \"crypto_address\": \"0x1234...abcd\",\n \"currency\": \"USDT\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"account_name": "Example Recipient",
"account_number": "0123456789",
"bank_code": "044",
"bank_name": "Access Bank",
"chain": null,
"created_at": "2026-05-24T12:00:00Z",
"crypto_address": null,
"currency": "NGN",
"id": "0197f1f0-0000-7000-8000-000000000002",
"label": "Operations account",
"recipient_type": "fiat",
"updated_at": "2026-05-24T12:00:00Z"
},
"status": "success"
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "invalid request parameters"
},
"status": "error"
}{
"error": {
"code": "UNAUTHORIZED",
"message": "missing X-Api-Key header"
},
"status": "error"
}Authorizations
API credential. Withdrawal quote and submit operations additionally require the documented Ed25519 timestamp, nonce, and signature headers.
Body
Recipient details to save in the account address book. This request does not submit a withdrawal.
Recipient details to save in the account address book.
"Main USDT recipient"
Saved recipient type. Fiat recipients use bank details; crypto recipients use chain and address details.
fiat, crypto "Jane Doe"
"0123456789"
"058"
"GTBank"
"evm"
ISO-3166 alpha-3 country code for crypto recipients. Null for existing recipients or when the client has not collected the destination country.
"NGA"
"0x1234...abcd"
"USDT"
Was this page helpful?