Create USD virtual account
curl --request POST \
--url https://api.daya.co/v1/virtual-accounts \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"customer_id": "<string>",
"currency": "<string>",
"developer_fee": {
"developer_fee.percentage": "<string>"
}
}
'import requests
url = "https://api.daya.co/v1/virtual-accounts"
payload = {
"customer_id": "<string>",
"currency": "<string>",
"developer_fee": { "developer_fee.percentage": "<string>" }
}
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({
customer_id: '<string>',
currency: '<string>',
developer_fee: {'developer_fee.percentage': '<string>'}
})
};
fetch('https://api.daya.co/v1/virtual-accounts', 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.daya.co/v1/virtual-accounts",
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([
'customer_id' => '<string>',
'currency' => '<string>',
'developer_fee' => [
'developer_fee.percentage' => '<string>'
]
]),
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://api.daya.co/v1/virtual-accounts"
payload := strings.NewReader("{\n \"customer_id\": \"<string>\",\n \"currency\": \"<string>\",\n \"developer_fee\": {\n \"developer_fee.percentage\": \"<string>\"\n }\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://api.daya.co/v1/virtual-accounts")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customer_id\": \"<string>\",\n \"currency\": \"<string>\",\n \"developer_fee\": {\n \"developer_fee.percentage\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daya.co/v1/virtual-accounts")
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 \"customer_id\": \"<string>\",\n \"currency\": \"<string>\",\n \"developer_fee\": {\n \"developer_fee.percentage\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "650e8400-e29b-41d4-a716-446655440000",
"customer_id": "650e8400-e29b-41d4-a716-446655440002",
"merchant_id": "650e8400-e29b-41d4-a716-446655440001",
"currency": "usd",
"status": "active",
"provider": "bridge",
"developer_fee": {
"percentage": "1.5"
},
"deposit_instructions": {
"bank_beneficiary_name": "Bridge Trust",
"bank_beneficiary_address": "123 Finance St, New York, NY",
"bank_name": "Lead Bank",
"bank_address": "1801 Main St, Kansas City, MO",
"bank_routing_number": "101019644",
"bank_account_number": "1234567890",
"payment_rails": ["ach", "wire"]
},
"destination": {
"payment_rail": "base",
"currency": "usdc",
"address": "0x1234567890abcdef1234567890abcdef12345678"
},
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T15:04:05Z"
}
{
"error": {
"code": "TIER2_NOT_VERIFIED",
"message": "Customer has not completed tier 2 verification",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
USD Virtual Accounts
Create USD virtual account
Create a USD virtual account for a customer
POST
/
v1
/
virtual-accounts
Create USD virtual account
curl --request POST \
--url https://api.daya.co/v1/virtual-accounts \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"customer_id": "<string>",
"currency": "<string>",
"developer_fee": {
"developer_fee.percentage": "<string>"
}
}
'import requests
url = "https://api.daya.co/v1/virtual-accounts"
payload = {
"customer_id": "<string>",
"currency": "<string>",
"developer_fee": { "developer_fee.percentage": "<string>" }
}
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({
customer_id: '<string>',
currency: '<string>',
developer_fee: {'developer_fee.percentage': '<string>'}
})
};
fetch('https://api.daya.co/v1/virtual-accounts', 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.daya.co/v1/virtual-accounts",
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([
'customer_id' => '<string>',
'currency' => '<string>',
'developer_fee' => [
'developer_fee.percentage' => '<string>'
]
]),
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://api.daya.co/v1/virtual-accounts"
payload := strings.NewReader("{\n \"customer_id\": \"<string>\",\n \"currency\": \"<string>\",\n \"developer_fee\": {\n \"developer_fee.percentage\": \"<string>\"\n }\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://api.daya.co/v1/virtual-accounts")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customer_id\": \"<string>\",\n \"currency\": \"<string>\",\n \"developer_fee\": {\n \"developer_fee.percentage\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daya.co/v1/virtual-accounts")
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 \"customer_id\": \"<string>\",\n \"currency\": \"<string>\",\n \"developer_fee\": {\n \"developer_fee.percentage\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "650e8400-e29b-41d4-a716-446655440000",
"customer_id": "650e8400-e29b-41d4-a716-446655440002",
"merchant_id": "650e8400-e29b-41d4-a716-446655440001",
"currency": "usd",
"status": "active",
"provider": "bridge",
"developer_fee": {
"percentage": "1.5"
},
"deposit_instructions": {
"bank_beneficiary_name": "Bridge Trust",
"bank_beneficiary_address": "123 Finance St, New York, NY",
"bank_name": "Lead Bank",
"bank_address": "1801 Main St, Kansas City, MO",
"bank_routing_number": "101019644",
"bank_account_number": "1234567890",
"payment_rails": ["ach", "wire"]
},
"destination": {
"payment_rail": "base",
"currency": "usdc",
"address": "0x1234567890abcdef1234567890abcdef12345678"
},
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T15:04:05Z"
}
{
"error": {
"code": "TIER2_NOT_VERIFIED",
"message": "Customer has not completed tier 2 verification",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Overview
Creates a new USD virtual account for a customer. The customer must have completed tier 2 verification before creating a USD virtual account. Payments into the account settle into the merchant collection balance, are listed as USD virtual account deposits, and send a webhook.Prerequisite: The customer must have completed tier 2 verification (
POST /v1/customers/{id}/tier2-verification).Authentication
string
required
Your merchant API key
Request Body
string
required
Customer ID (UUID). The customer must have completed tier 2 verification.Example:
650e8400-e29b-41d4-a716-446655440000string
Currency for the virtual account. Defaults to
usd if omitted. Currently only usd is supported.Example: usdobject
Optional fee that your merchant account keeps from each USD deposit received through this virtual account. Omit to use
0%.Show developer_fee properties
Show developer_fee properties
string
required
Percentage of each received USD deposit that your merchant account keeps. Use a decimal string from
0 to 50. This is a percentage value, not basis points: 0.5 means 0.5%, 2 means 2%, and 50 means 50%.Example: "1.5"Request Example
curl --request POST \
--url https://api.daya.co/v1/virtual-accounts \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"customer_id": "650e8400-e29b-41d4-a716-446655440000",
"currency": "usd",
"developer_fee": {
"percentage": "1.5"
}
}'
Response
string
required
Virtual account ID (UUID)
string
required
Associated customer ID
string
required
Merchant ID
string
required
Source currency (e.g.
usd)string
required
Account status (e.g.
active)string
required
Virtual account provider (e.g.
bridge)object
required
Developer fee percentage used for deposits received through this virtual account.
Show developer_fee properties
Show developer_fee properties
string
Configured percentage as a decimal string.
object
object
string
required
When the account was created (ISO 8601)
string
required
When the account was last updated (ISO 8601)
{
"id": "650e8400-e29b-41d4-a716-446655440000",
"customer_id": "650e8400-e29b-41d4-a716-446655440002",
"merchant_id": "650e8400-e29b-41d4-a716-446655440001",
"currency": "usd",
"status": "active",
"provider": "bridge",
"developer_fee": {
"percentage": "1.5"
},
"deposit_instructions": {
"bank_beneficiary_name": "Bridge Trust",
"bank_beneficiary_address": "123 Finance St, New York, NY",
"bank_name": "Lead Bank",
"bank_address": "1801 Main St, Kansas City, MO",
"bank_routing_number": "101019644",
"bank_account_number": "1234567890",
"payment_rails": ["ach", "wire"]
},
"destination": {
"payment_rail": "base",
"currency": "usdc",
"address": "0x1234567890abcdef1234567890abcdef12345678"
},
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T15:04:05Z"
}
{
"error": {
"code": "TIER2_NOT_VERIFIED",
"message": "Customer has not completed tier 2 verification",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}