curl --request POST \
--url https://api.rolla.xyz/api/v1/external/wallet/withdraw \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"amount": 5000,
"currency": "NGN",
"description": "<string>",
"externalReference": "<string>",
"beneficiaryId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"inlineBeneficiary": {
"account_name": "John Doe",
"account_number": "0123456789",
"bank_name": "Access Bank",
"bank_code": "000014",
"routing_number": "<string>",
"swift_code": "<string>",
"sort_code": "400515",
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX",
"bank_address": {
"street": "456 Bank Avenue",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"beneficiary_address": {
"street": "123 Main Street",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"wallet_address": "TXyZ1234abcd5678efgh9012ijkl3456mnop",
"wallet_chain": "tron",
"intermediary_bank_name": "<string>",
"intermediary_bank_routing_number": "<string>",
"email": "jsmith@example.com",
"contact_person": "<string>"
},
"saveBeneficiary": false,
"deductFeesFromBalance": false
}
'import requests
url = "https://api.rolla.xyz/api/v1/external/wallet/withdraw"
payload = {
"amount": 5000,
"currency": "NGN",
"description": "<string>",
"externalReference": "<string>",
"beneficiaryId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"inlineBeneficiary": {
"account_name": "John Doe",
"account_number": "0123456789",
"bank_name": "Access Bank",
"bank_code": "000014",
"routing_number": "<string>",
"swift_code": "<string>",
"sort_code": "400515",
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX",
"bank_address": {
"street": "456 Bank Avenue",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"beneficiary_address": {
"street": "123 Main Street",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"wallet_address": "TXyZ1234abcd5678efgh9012ijkl3456mnop",
"wallet_chain": "tron",
"intermediary_bank_name": "<string>",
"intermediary_bank_routing_number": "<string>",
"email": "jsmith@example.com",
"contact_person": "<string>"
},
"saveBeneficiary": False,
"deductFeesFromBalance": False
}
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: 5000,
currency: 'NGN',
description: '<string>',
externalReference: '<string>',
beneficiaryId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
inlineBeneficiary: {
account_name: 'John Doe',
account_number: '0123456789',
bank_name: 'Access Bank',
bank_code: '000014',
routing_number: '<string>',
swift_code: '<string>',
sort_code: '400515',
iban: 'DE89370400440532013000',
bic: 'COBADEFFXXX',
bank_address: {
street: '456 Bank Avenue',
city: 'New York',
state: 'NY',
postalCode: '10001',
country: 'US'
},
beneficiary_address: {
street: '123 Main Street',
city: 'New York',
state: 'NY',
postalCode: '10001',
country: 'US'
},
wallet_address: 'TXyZ1234abcd5678efgh9012ijkl3456mnop',
wallet_chain: 'tron',
intermediary_bank_name: '<string>',
intermediary_bank_routing_number: '<string>',
email: 'jsmith@example.com',
contact_person: '<string>'
},
saveBeneficiary: false,
deductFeesFromBalance: false
})
};
fetch('https://api.rolla.xyz/api/v1/external/wallet/withdraw', 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.rolla.xyz/api/v1/external/wallet/withdraw",
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' => 5000,
'currency' => 'NGN',
'description' => '<string>',
'externalReference' => '<string>',
'beneficiaryId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'inlineBeneficiary' => [
'account_name' => 'John Doe',
'account_number' => '0123456789',
'bank_name' => 'Access Bank',
'bank_code' => '000014',
'routing_number' => '<string>',
'swift_code' => '<string>',
'sort_code' => '400515',
'iban' => 'DE89370400440532013000',
'bic' => 'COBADEFFXXX',
'bank_address' => [
'street' => '456 Bank Avenue',
'city' => 'New York',
'state' => 'NY',
'postalCode' => '10001',
'country' => 'US'
],
'beneficiary_address' => [
'street' => '123 Main Street',
'city' => 'New York',
'state' => 'NY',
'postalCode' => '10001',
'country' => 'US'
],
'wallet_address' => 'TXyZ1234abcd5678efgh9012ijkl3456mnop',
'wallet_chain' => 'tron',
'intermediary_bank_name' => '<string>',
'intermediary_bank_routing_number' => '<string>',
'email' => 'jsmith@example.com',
'contact_person' => '<string>'
],
'saveBeneficiary' => false,
'deductFeesFromBalance' => false
]),
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.rolla.xyz/api/v1/external/wallet/withdraw"
payload := strings.NewReader("{\n \"amount\": 5000,\n \"currency\": \"NGN\",\n \"description\": \"<string>\",\n \"externalReference\": \"<string>\",\n \"beneficiaryId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"inlineBeneficiary\": {\n \"account_name\": \"John Doe\",\n \"account_number\": \"0123456789\",\n \"bank_name\": \"Access Bank\",\n \"bank_code\": \"000014\",\n \"routing_number\": \"<string>\",\n \"swift_code\": \"<string>\",\n \"sort_code\": \"400515\",\n \"iban\": \"DE89370400440532013000\",\n \"bic\": \"COBADEFFXXX\",\n \"bank_address\": {\n \"street\": \"456 Bank Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"beneficiary_address\": {\n \"street\": \"123 Main Street\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"wallet_address\": \"TXyZ1234abcd5678efgh9012ijkl3456mnop\",\n \"wallet_chain\": \"tron\",\n \"intermediary_bank_name\": \"<string>\",\n \"intermediary_bank_routing_number\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"contact_person\": \"<string>\"\n },\n \"saveBeneficiary\": false,\n \"deductFeesFromBalance\": false\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.rolla.xyz/api/v1/external/wallet/withdraw")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 5000,\n \"currency\": \"NGN\",\n \"description\": \"<string>\",\n \"externalReference\": \"<string>\",\n \"beneficiaryId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"inlineBeneficiary\": {\n \"account_name\": \"John Doe\",\n \"account_number\": \"0123456789\",\n \"bank_name\": \"Access Bank\",\n \"bank_code\": \"000014\",\n \"routing_number\": \"<string>\",\n \"swift_code\": \"<string>\",\n \"sort_code\": \"400515\",\n \"iban\": \"DE89370400440532013000\",\n \"bic\": \"COBADEFFXXX\",\n \"bank_address\": {\n \"street\": \"456 Bank Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"beneficiary_address\": {\n \"street\": \"123 Main Street\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"wallet_address\": \"TXyZ1234abcd5678efgh9012ijkl3456mnop\",\n \"wallet_chain\": \"tron\",\n \"intermediary_bank_name\": \"<string>\",\n \"intermediary_bank_routing_number\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"contact_person\": \"<string>\"\n },\n \"saveBeneficiary\": false,\n \"deductFeesFromBalance\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/wallet/withdraw")
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\": 5000,\n \"currency\": \"NGN\",\n \"description\": \"<string>\",\n \"externalReference\": \"<string>\",\n \"beneficiaryId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"inlineBeneficiary\": {\n \"account_name\": \"John Doe\",\n \"account_number\": \"0123456789\",\n \"bank_name\": \"Access Bank\",\n \"bank_code\": \"000014\",\n \"routing_number\": \"<string>\",\n \"swift_code\": \"<string>\",\n \"sort_code\": \"400515\",\n \"iban\": \"DE89370400440532013000\",\n \"bic\": \"COBADEFFXXX\",\n \"bank_address\": {\n \"street\": \"456 Bank Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"beneficiary_address\": {\n \"street\": \"123 Main Street\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"wallet_address\": \"TXyZ1234abcd5678efgh9012ijkl3456mnop\",\n \"wallet_chain\": \"tron\",\n \"intermediary_bank_name\": \"<string>\",\n \"intermediary_bank_routing_number\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"contact_person\": \"<string>\"\n },\n \"saveBeneficiary\": false,\n \"deductFeesFromBalance\": false\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"success": true,
"message": "Withdrawal initiated successfully",
"transaction": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transaction_type": "withdrawal",
"status": "pending",
"description": "<string>",
"external_reference": "<string>",
"fee_amount": 25,
"source_amount": 5000,
"destination_amount": 4975,
"source_currency": "NGN",
"destination_currency": "NGN",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"beneficiary": {
"bank_name": "<string>",
"bank_code": "<string>",
"account_name": "<string>",
"account_number": "<string>"
}
}
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}Withdraw Funds
Initiates a withdrawal from your wallet to a beneficiary. Either beneficiaryId or inlineBeneficiary must be provided. For USD international_wire, send as multipart/form-data and attach reference documents under the documents field.
curl --request POST \
--url https://api.rolla.xyz/api/v1/external/wallet/withdraw \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"amount": 5000,
"currency": "NGN",
"description": "<string>",
"externalReference": "<string>",
"beneficiaryId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"inlineBeneficiary": {
"account_name": "John Doe",
"account_number": "0123456789",
"bank_name": "Access Bank",
"bank_code": "000014",
"routing_number": "<string>",
"swift_code": "<string>",
"sort_code": "400515",
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX",
"bank_address": {
"street": "456 Bank Avenue",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"beneficiary_address": {
"street": "123 Main Street",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"wallet_address": "TXyZ1234abcd5678efgh9012ijkl3456mnop",
"wallet_chain": "tron",
"intermediary_bank_name": "<string>",
"intermediary_bank_routing_number": "<string>",
"email": "jsmith@example.com",
"contact_person": "<string>"
},
"saveBeneficiary": false,
"deductFeesFromBalance": false
}
'import requests
url = "https://api.rolla.xyz/api/v1/external/wallet/withdraw"
payload = {
"amount": 5000,
"currency": "NGN",
"description": "<string>",
"externalReference": "<string>",
"beneficiaryId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"inlineBeneficiary": {
"account_name": "John Doe",
"account_number": "0123456789",
"bank_name": "Access Bank",
"bank_code": "000014",
"routing_number": "<string>",
"swift_code": "<string>",
"sort_code": "400515",
"iban": "DE89370400440532013000",
"bic": "COBADEFFXXX",
"bank_address": {
"street": "456 Bank Avenue",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"beneficiary_address": {
"street": "123 Main Street",
"city": "New York",
"state": "NY",
"postalCode": "10001",
"country": "US"
},
"wallet_address": "TXyZ1234abcd5678efgh9012ijkl3456mnop",
"wallet_chain": "tron",
"intermediary_bank_name": "<string>",
"intermediary_bank_routing_number": "<string>",
"email": "jsmith@example.com",
"contact_person": "<string>"
},
"saveBeneficiary": False,
"deductFeesFromBalance": False
}
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: 5000,
currency: 'NGN',
description: '<string>',
externalReference: '<string>',
beneficiaryId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
inlineBeneficiary: {
account_name: 'John Doe',
account_number: '0123456789',
bank_name: 'Access Bank',
bank_code: '000014',
routing_number: '<string>',
swift_code: '<string>',
sort_code: '400515',
iban: 'DE89370400440532013000',
bic: 'COBADEFFXXX',
bank_address: {
street: '456 Bank Avenue',
city: 'New York',
state: 'NY',
postalCode: '10001',
country: 'US'
},
beneficiary_address: {
street: '123 Main Street',
city: 'New York',
state: 'NY',
postalCode: '10001',
country: 'US'
},
wallet_address: 'TXyZ1234abcd5678efgh9012ijkl3456mnop',
wallet_chain: 'tron',
intermediary_bank_name: '<string>',
intermediary_bank_routing_number: '<string>',
email: 'jsmith@example.com',
contact_person: '<string>'
},
saveBeneficiary: false,
deductFeesFromBalance: false
})
};
fetch('https://api.rolla.xyz/api/v1/external/wallet/withdraw', 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.rolla.xyz/api/v1/external/wallet/withdraw",
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' => 5000,
'currency' => 'NGN',
'description' => '<string>',
'externalReference' => '<string>',
'beneficiaryId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'inlineBeneficiary' => [
'account_name' => 'John Doe',
'account_number' => '0123456789',
'bank_name' => 'Access Bank',
'bank_code' => '000014',
'routing_number' => '<string>',
'swift_code' => '<string>',
'sort_code' => '400515',
'iban' => 'DE89370400440532013000',
'bic' => 'COBADEFFXXX',
'bank_address' => [
'street' => '456 Bank Avenue',
'city' => 'New York',
'state' => 'NY',
'postalCode' => '10001',
'country' => 'US'
],
'beneficiary_address' => [
'street' => '123 Main Street',
'city' => 'New York',
'state' => 'NY',
'postalCode' => '10001',
'country' => 'US'
],
'wallet_address' => 'TXyZ1234abcd5678efgh9012ijkl3456mnop',
'wallet_chain' => 'tron',
'intermediary_bank_name' => '<string>',
'intermediary_bank_routing_number' => '<string>',
'email' => 'jsmith@example.com',
'contact_person' => '<string>'
],
'saveBeneficiary' => false,
'deductFeesFromBalance' => false
]),
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.rolla.xyz/api/v1/external/wallet/withdraw"
payload := strings.NewReader("{\n \"amount\": 5000,\n \"currency\": \"NGN\",\n \"description\": \"<string>\",\n \"externalReference\": \"<string>\",\n \"beneficiaryId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"inlineBeneficiary\": {\n \"account_name\": \"John Doe\",\n \"account_number\": \"0123456789\",\n \"bank_name\": \"Access Bank\",\n \"bank_code\": \"000014\",\n \"routing_number\": \"<string>\",\n \"swift_code\": \"<string>\",\n \"sort_code\": \"400515\",\n \"iban\": \"DE89370400440532013000\",\n \"bic\": \"COBADEFFXXX\",\n \"bank_address\": {\n \"street\": \"456 Bank Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"beneficiary_address\": {\n \"street\": \"123 Main Street\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"wallet_address\": \"TXyZ1234abcd5678efgh9012ijkl3456mnop\",\n \"wallet_chain\": \"tron\",\n \"intermediary_bank_name\": \"<string>\",\n \"intermediary_bank_routing_number\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"contact_person\": \"<string>\"\n },\n \"saveBeneficiary\": false,\n \"deductFeesFromBalance\": false\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.rolla.xyz/api/v1/external/wallet/withdraw")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 5000,\n \"currency\": \"NGN\",\n \"description\": \"<string>\",\n \"externalReference\": \"<string>\",\n \"beneficiaryId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"inlineBeneficiary\": {\n \"account_name\": \"John Doe\",\n \"account_number\": \"0123456789\",\n \"bank_name\": \"Access Bank\",\n \"bank_code\": \"000014\",\n \"routing_number\": \"<string>\",\n \"swift_code\": \"<string>\",\n \"sort_code\": \"400515\",\n \"iban\": \"DE89370400440532013000\",\n \"bic\": \"COBADEFFXXX\",\n \"bank_address\": {\n \"street\": \"456 Bank Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"beneficiary_address\": {\n \"street\": \"123 Main Street\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"wallet_address\": \"TXyZ1234abcd5678efgh9012ijkl3456mnop\",\n \"wallet_chain\": \"tron\",\n \"intermediary_bank_name\": \"<string>\",\n \"intermediary_bank_routing_number\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"contact_person\": \"<string>\"\n },\n \"saveBeneficiary\": false,\n \"deductFeesFromBalance\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.rolla.xyz/api/v1/external/wallet/withdraw")
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\": 5000,\n \"currency\": \"NGN\",\n \"description\": \"<string>\",\n \"externalReference\": \"<string>\",\n \"beneficiaryId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"inlineBeneficiary\": {\n \"account_name\": \"John Doe\",\n \"account_number\": \"0123456789\",\n \"bank_name\": \"Access Bank\",\n \"bank_code\": \"000014\",\n \"routing_number\": \"<string>\",\n \"swift_code\": \"<string>\",\n \"sort_code\": \"400515\",\n \"iban\": \"DE89370400440532013000\",\n \"bic\": \"COBADEFFXXX\",\n \"bank_address\": {\n \"street\": \"456 Bank Avenue\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"beneficiary_address\": {\n \"street\": \"123 Main Street\",\n \"city\": \"New York\",\n \"state\": \"NY\",\n \"postalCode\": \"10001\",\n \"country\": \"US\"\n },\n \"wallet_address\": \"TXyZ1234abcd5678efgh9012ijkl3456mnop\",\n \"wallet_chain\": \"tron\",\n \"intermediary_bank_name\": \"<string>\",\n \"intermediary_bank_routing_number\": \"<string>\",\n \"email\": \"jsmith@example.com\",\n \"contact_person\": \"<string>\"\n },\n \"saveBeneficiary\": false,\n \"deductFeesFromBalance\": false\n}"
response = http.request(request)
puts response.read_body{
"status": 200,
"success": true,
"message": "Withdrawal initiated successfully",
"transaction": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transaction_type": "withdrawal",
"status": "pending",
"description": "<string>",
"external_reference": "<string>",
"fee_amount": 25,
"source_amount": 5000,
"destination_amount": 4975,
"source_currency": "NGN",
"destination_currency": "NGN",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"beneficiary": {
"bank_name": "<string>",
"bank_code": "<string>",
"account_name": "<string>",
"account_number": "<string>"
}
}
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}beneficiaryId or inlineBeneficiary must be provided. The required fields inside inlineBeneficiary depend on the currency and withdrawal_method.
X-Account-Id header set to the merchant’s account ID — the payout is then deducted from that merchant’s wallet. Without it, the withdrawal runs against your own (parent) account. The account ID is the id returned by POST /accounts (or from GET /accounts).amount is US cents — e.g. 100 cents = $1.00 USD transferred (consistent with ledger *_amount fields returned on transactions).Top-level Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Amount in the smallest unit (kobo for NGN, cents for USD — 100 cents = $1.00 USD) |
currency | string | Yes | 3-letter currency code — NGN, USD, or XAF |
description | string | No | Narration for the transaction |
externalReference | string | No | Your own unique reference for this transaction |
beneficiaryId | string (UUID) | No* | ID of a saved beneficiary |
inlineBeneficiary | object | No* | One-time beneficiary details (see per-currency fields below) |
saveBeneficiary | boolean | No | Save the inline beneficiary for future use |
deductFeesFromBalance | boolean | No | If true, fees are deducted from your wallet; beneficiary receives the exact amount |
beneficiaryId or inlineBeneficiary is required.
inlineBeneficiary — Required Fields by Currency
NGN
| Field | Required |
|---|---|
account_number | Yes |
bank_name | Yes |
bank_code | Yes |
account_name | No (auto-resolved from bank lookup) |
curl -X POST "https://api.rolla.xyz/api/v1/external/wallet/withdraw" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"amount": 5000,
"currency": "NGN",
"description": "Vendor payment",
"inlineBeneficiary": {
"account_number": "0123456789",
"bank_name": "Access Bank",
"bank_code": "000014"
},
"saveBeneficiary": true
}'
Choosing a USD rail
USD payouts run on one of three bank rails, selected withwithdrawal_method. The choice drives settlement speed, the fields you must supply, and the fee — so pass it explicitly on both the quote and the withdrawal.
withdrawal_method | Use for | Addressed by | Notes |
|---|---|---|---|
ach | Domestic US, cost-sensitive | routing_number (ABA) | Settles in business days. Cheapest US rail. |
domestic_wire | Domestic US, time-sensitive | routing_number (ABA) | Same-day settlement, priced above ACH. |
international_wire | Outside the US | swift_code | Requires supporting documents — multipart/form-data only. |
ach and domestic_wire to the same bank generally cost different amounts. Send withdrawal_method (or beneficiaryId) to POST /wallet/fee to quote the exact fee this withdrawal will be charged.USD — ACH
| Field | Required |
|---|---|
withdrawal_method | Yes — "ach" |
account_name | Yes |
bank_name | Yes |
account_number | Yes |
routing_number | Yes — 9-digit ABA number |
beneficiary_address | Yes — { street, city, state, postalCode, country } |
bank_address | Yes — { street, city, state, postalCode, country } |
account_category | No — "checking" or "savings". Recommended; carried onto the saved record when saveBeneficiary: true |
curl -X POST "https://api.rolla.xyz/api/v1/external/wallet/withdraw" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000,
"currency": "USD",
"description": "Payroll run",
"inlineBeneficiary": {
"withdrawal_method": "ach",
"account_name": "Jane Smith",
"bank_name": "Chase Bank",
"account_number": "123456789",
"routing_number": "021000021",
"account_category": "checking",
"beneficiary_address": { "street": "123 Main St", "city": "New York", "state": "NY", "postalCode": "10001", "country": "US" },
"bank_address": { "street": "270 Park Ave", "city": "New York", "state": "NY", "postalCode": "10017", "country": "US" }
}
}'
international_wire, ACH needs no supporting documents — send it as a normal JSON body.routing_number is required for ach and domestic_wire. Omitting it returns a 400 with "routing_number is required for ACH and domestic wire withdrawals".This is newly enforced. It has always been documented as required for domestic_wire, but the server previously accepted domestic wire requests without it and the payout then stranded. If you have been omitting it, those requests now fail fast instead.USD — Domestic Wire
| Field | Required |
|---|---|
withdrawal_method | Yes — "domestic_wire" |
account_name | Yes |
bank_name | Yes |
account_number | Yes |
routing_number | Yes |
beneficiary_address | Yes — { street, city, state, postalCode, country } |
bank_address | Yes — { street, city, state, postalCode, country } |
curl -X POST "https://api.rolla.xyz/api/v1/external/wallet/withdraw" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000,
"currency": "USD",
"inlineBeneficiary": {
"withdrawal_method": "domestic_wire",
"account_name": "Jane Smith",
"bank_name": "Chase Bank",
"account_number": "123456789",
"routing_number": "021000021",
"beneficiary_address": { "street": "123 Main St", "city": "New York", "state": "NY", "postalCode": "10001", "country": "US" },
"bank_address": { "street": "270 Park Ave", "city": "New York", "state": "NY", "postalCode": "10017", "country": "US" }
}
}'
USD — International Wire
| Field | Required |
|---|---|
withdrawal_method | Yes — "international_wire" |
account_name | Yes |
bank_name | Yes |
account_number | Yes |
swift_code | Yes |
beneficiary_address | Yes — { street, city, state, postalCode, country } |
bank_address | Yes — { street, city, state, postalCode, country } |
intermediary_bank_name | No |
intermediary_bank_routing_number | No |
multipart/form-data (every other currency/method uses a JSON body). Include one or more files under the documents field.inlineBeneficiary as a single JSON-stringified field — one form field named inlineBeneficiary whose value is the full JSON object. Do not spread it across bracketed fields like inlineBeneficiary[account_name]=…; multipart form fields are not reconstructed into a nested object, so the request will fail with 400 "Either beneficiaryId or inlineBeneficiary must be provided".curl -X POST "https://api.rolla.xyz/api/v1/external/wallet/withdraw" \
-H "X-API-Key: your_api_key_here" \
-F "amount=1000" \
-F "currency=USD" \
-F 'inlineBeneficiary={
"withdrawal_method": "international_wire",
"account_name": "Jane Smith",
"bank_name": "Barclays Bank",
"account_number": "12345678",
"swift_code": "BARCGB22",
"beneficiary_address": { "street": "123 Main Street", "city": "New York", "state": "NY", "postalCode": "10001", "country": "US" },
"bank_address": { "street": "456 Bank Avenue", "city": "New York", "state": "NY", "postalCode": "10001", "country": "US" }
}' \
-F "documents=@/path/to/invoice.pdf"
USD — Crypto (USDT / USDC)
Crypto withdrawals are sent from your USD wallet. Setwithdrawal_method to "crypto_usdt" or "crypto_usdc" to send the USD value as a stablecoin to a crypto wallet address.
| Field | Required |
|---|---|
withdrawal_method | Yes — "crypto_usdt" or "crypto_usdc" |
account_name | Yes — used as a display nickname |
wallet_address | Yes — 26–64 alphanumeric characters |
wallet_chain | Yes — e.g. "ethereum", "tron" |
curl -X POST "https://api.rolla.xyz/api/v1/external/wallet/withdraw" \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"amount": 100,
"currency": "USD",
"inlineBeneficiary": {
"withdrawal_method": "crypto_usdt",
"account_name": "My USDT Wallet",
"wallet_address": "TXyZ1234abcd5678efgh9012ijkl3456mnop",
"wallet_chain": "tron"
}
}'
XAF
| Field | Required |
|---|---|
account_name | Yes |
bank_name | Yes |
account_number | Yes |
swift_code | Yes |
bank_address | Yes — { street, city, state, country } |
Example Response
{
"status": 200,
"success": true,
"message": "Withdrawal initiated successfully",
"data": {
"transaction": {
"id": "866b7abd-6cac-40f2-a04f-d6e58bf47d04",
"transaction_type": "withdrawal",
"status": "pending",
"description": "Vendor payment",
"external_reference": "NG-NFNUJTUW",
"fee_amount": 25,
"source_amount": 5000,
"destination_amount": 4975,
"source_currency": "NGN",
"destination_currency": "NGN",
"created_at": "2026-03-23T13:45:28.138Z",
"updated_at": "2026-03-23T13:45:28.263Z",
"beneficiary": {
"bank_name": "Access Bank",
"bank_code": "000014",
"account_name": "John Doe",
"account_number": "0123456789"
}
}
}
}
beneficiaryId to pay a saved beneficiary. Use inlineBeneficiary for one-time transfers. Set saveBeneficiary: true to save the inline beneficiary automatically for reuse.deductFeesFromBalance: true so fees come out of your wallet balance and the beneficiary receives the exact amount specified.Authorizations
Your Rolla API key
Body
Either beneficiaryId or inlineBeneficiary must be provided.
Amount in smallest units (kobo for NGN; US cents for USD — 100 = 1 USD).
5000
3-letter currency code
3"NGN"
Narration for the transaction
500Your own unique reference for this transaction
255ID of a saved beneficiary. Use this OR inlineBeneficiary.
One-time beneficiary details (use instead of beneficiaryId)
Show child attributes
Show child attributes
Save the inline beneficiary for future use
If true, fees are taken from your wallet balance so the beneficiary receives the exact amount