curl --request POST \
--url https://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-API-Nonce: <api-key>' \
--header 'X-API-Signature: <api-key>' \
--data '
{
"amount": "100.00",
"currency": "EUR",
"account_id": 42,
"account_reference": "<string>",
"chain_id": 8453,
"destination_account_id": 123,
"destination_account_reference": "<string>",
"metadata": {},
"reference": "<string>",
"token_address": "<string>"
}
'import requests
url = "https://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout"
payload = {
"amount": "100.00",
"currency": "EUR",
"account_id": 42,
"account_reference": "<string>",
"chain_id": 8453,
"destination_account_id": 123,
"destination_account_reference": "<string>",
"metadata": {},
"reference": "<string>",
"token_address": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"X-API-Nonce": "<api-key>",
"X-API-Signature": "<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>',
'X-API-Nonce': '<api-key>',
'X-API-Signature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: '100.00',
currency: 'EUR',
account_id: 42,
account_reference: '<string>',
chain_id: 8453,
destination_account_id: 123,
destination_account_reference: '<string>',
metadata: {},
reference: '<string>',
token_address: '<string>'
})
};
fetch('https://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout', 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://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout",
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' => '100.00',
'currency' => 'EUR',
'account_id' => 42,
'account_reference' => '<string>',
'chain_id' => 8453,
'destination_account_id' => 123,
'destination_account_reference' => '<string>',
'metadata' => [
],
'reference' => '<string>',
'token_address' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>",
"X-API-Nonce: <api-key>",
"X-API-Signature: <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://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout"
payload := strings.NewReader("{\n \"amount\": \"100.00\",\n \"currency\": \"EUR\",\n \"account_id\": 42,\n \"account_reference\": \"<string>\",\n \"chain_id\": 8453,\n \"destination_account_id\": 123,\n \"destination_account_reference\": \"<string>\",\n \"metadata\": {},\n \"reference\": \"<string>\",\n \"token_address\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("X-API-Nonce", "<api-key>")
req.Header.Add("X-API-Signature", "<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://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout")
.header("X-API-KEY", "<api-key>")
.header("X-API-Nonce", "<api-key>")
.header("X-API-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"100.00\",\n \"currency\": \"EUR\",\n \"account_id\": 42,\n \"account_reference\": \"<string>\",\n \"chain_id\": 8453,\n \"destination_account_id\": 123,\n \"destination_account_reference\": \"<string>\",\n \"metadata\": {},\n \"reference\": \"<string>\",\n \"token_address\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout")
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["X-API-Nonce"] = '<api-key>'
request["X-API-Signature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"100.00\",\n \"currency\": \"EUR\",\n \"account_id\": 42,\n \"account_reference\": \"<string>\",\n \"chain_id\": 8453,\n \"destination_account_id\": 123,\n \"destination_account_reference\": \"<string>\",\n \"metadata\": {},\n \"reference\": \"<string>\",\n \"token_address\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"amount": "<string>",
"created_at": "<string>",
"currency": "<string>",
"customer": {
"created_at": "<string>",
"deleted_at": "<string>",
"email": "<string>",
"id": "<string>",
"metadata": [
123
],
"name": "<string>",
"org_id": "<string>",
"phone": "<string>",
"properties": [
123
],
"reference": "<string>",
"updated_at": "<string>",
"wallet_address": "<string>"
},
"customer_id": "<string>",
"id": "<string>",
"invoice_id": "<string>",
"next_action": "<string>",
"org_id": "<string>",
"parent_id": "<string>",
"payment_method": "Unknown",
"properties": {},
"reference": "<string>",
"scheduled_time": 123,
"source": "Lago",
"status": "Unknown",
"updated_at": "<string>"
},
"error": true,
"message": "<string>"
}{
"error": {
"code": 400,
"errors": [
{
"domain": "orders",
"reason": "InsufficientQuantity"
}
],
"message": "Insufficient quantity"
}
}{
"error": {
"code": 400,
"errors": [
{
"domain": "orders",
"reason": "InsufficientQuantity"
}
],
"message": "Insufficient quantity"
}
}{
"error": {
"code": 400,
"errors": [
{
"domain": "orders",
"reason": "InsufficientQuantity"
}
],
"message": "Insufficient quantity"
}
}{
"error": {
"code": 400,
"errors": [
{
"domain": "orders",
"reason": "InsufficientQuantity"
}
],
"message": "Insufficient quantity"
}
}Create Virtual Account Payout
Create a payout from the managed virtual account to a registered destination account, identified by id or by the merchant’s own reference. The destination must be enabled; enabling it is the step-up-protected operation, so this call needs no per-request step-up token. A fiat currency settles to the destination bank account, a digital one to its wallet address and requires chain_id.
curl --request POST \
--url https://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-API-Nonce: <api-key>' \
--header 'X-API-Signature: <api-key>' \
--data '
{
"amount": "100.00",
"currency": "EUR",
"account_id": 42,
"account_reference": "<string>",
"chain_id": 8453,
"destination_account_id": 123,
"destination_account_reference": "<string>",
"metadata": {},
"reference": "<string>",
"token_address": "<string>"
}
'import requests
url = "https://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout"
payload = {
"amount": "100.00",
"currency": "EUR",
"account_id": 42,
"account_reference": "<string>",
"chain_id": 8453,
"destination_account_id": 123,
"destination_account_reference": "<string>",
"metadata": {},
"reference": "<string>",
"token_address": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"X-API-Nonce": "<api-key>",
"X-API-Signature": "<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>',
'X-API-Nonce': '<api-key>',
'X-API-Signature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: '100.00',
currency: 'EUR',
account_id: 42,
account_reference: '<string>',
chain_id: 8453,
destination_account_id: 123,
destination_account_reference: '<string>',
metadata: {},
reference: '<string>',
token_address: '<string>'
})
};
fetch('https://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout', 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://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout",
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' => '100.00',
'currency' => 'EUR',
'account_id' => 42,
'account_reference' => '<string>',
'chain_id' => 8453,
'destination_account_id' => 123,
'destination_account_reference' => '<string>',
'metadata' => [
],
'reference' => '<string>',
'token_address' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>",
"X-API-Nonce: <api-key>",
"X-API-Signature: <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://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout"
payload := strings.NewReader("{\n \"amount\": \"100.00\",\n \"currency\": \"EUR\",\n \"account_id\": 42,\n \"account_reference\": \"<string>\",\n \"chain_id\": 8453,\n \"destination_account_id\": 123,\n \"destination_account_reference\": \"<string>\",\n \"metadata\": {},\n \"reference\": \"<string>\",\n \"token_address\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("X-API-Nonce", "<api-key>")
req.Header.Add("X-API-Signature", "<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://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout")
.header("X-API-KEY", "<api-key>")
.header("X-API-Nonce", "<api-key>")
.header("X-API-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"100.00\",\n \"currency\": \"EUR\",\n \"account_id\": 42,\n \"account_reference\": \"<string>\",\n \"chain_id\": 8453,\n \"destination_account_id\": 123,\n \"destination_account_reference\": \"<string>\",\n \"metadata\": {},\n \"reference\": \"<string>\",\n \"token_address\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mapi.zbx.boomfi.xyz/v1/accounts/virtual/payout")
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["X-API-Nonce"] = '<api-key>'
request["X-API-Signature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"100.00\",\n \"currency\": \"EUR\",\n \"account_id\": 42,\n \"account_reference\": \"<string>\",\n \"chain_id\": 8453,\n \"destination_account_id\": 123,\n \"destination_account_reference\": \"<string>\",\n \"metadata\": {},\n \"reference\": \"<string>\",\n \"token_address\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"amount": "<string>",
"created_at": "<string>",
"currency": "<string>",
"customer": {
"created_at": "<string>",
"deleted_at": "<string>",
"email": "<string>",
"id": "<string>",
"metadata": [
123
],
"name": "<string>",
"org_id": "<string>",
"phone": "<string>",
"properties": [
123
],
"reference": "<string>",
"updated_at": "<string>",
"wallet_address": "<string>"
},
"customer_id": "<string>",
"id": "<string>",
"invoice_id": "<string>",
"next_action": "<string>",
"org_id": "<string>",
"parent_id": "<string>",
"payment_method": "Unknown",
"properties": {},
"reference": "<string>",
"scheduled_time": 123,
"source": "Lago",
"status": "Unknown",
"updated_at": "<string>"
},
"error": true,
"message": "<string>"
}{
"error": {
"code": 400,
"errors": [
{
"domain": "orders",
"reason": "InsufficientQuantity"
}
],
"message": "Insufficient quantity"
}
}{
"error": {
"code": 400,
"errors": [
{
"domain": "orders",
"reason": "InsufficientQuantity"
}
],
"message": "Insufficient quantity"
}
}{
"error": {
"code": 400,
"errors": [
{
"domain": "orders",
"reason": "InsufficientQuantity"
}
],
"message": "Insufficient quantity"
}
}{
"error": {
"code": 400,
"errors": [
{
"domain": "orders",
"reason": "InsufficientQuantity"
}
],
"message": "Insufficient quantity"
}
}Authorizations
Body
body
Amount to pay out, in major units of currency.
"100.00"
Currency symbol to pay out. A fiat symbol takes the bank rail, a digital one the chain rail.
"EUR"
Account to pay out FROM: a virtual account, or one specific sub-account under it for a caller that wants to choose the custodian. Optional — omitted, the org's primary virtual account is used and the funding wallet is chosen for you.
42
Merchant's own reference for the VIRTUAL account to pay out from, for orgs holding more than one. Mutually exclusive with account_id.
255Chain id. Required for a digital currency, must be omitted for fiat.
8453
Destination account id as returned by the accounts APIs. Mutually exclusive with destination_account_reference.
123
Merchant's own reference for the destination account. Mutually exclusive with destination_account_id.
255Optional caller metadata returned on the payment record (maximum 2 KiB).
Show child attributes
Show child attributes
Optional payment reference passed through to the destination rail.
1024Token contract address. Optional: resolved from the currency cache, and only required when the symbol maps to several tokens on the chain.