curl --request POST \
--url https://developersandbox-api.flutterwave.com/direct-transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"action": "instant",
"payment_instruction": {
"source_currency": "NGN",
"amount": {
"value": 3000.44
},
"recipient": {
"bank": {
"account_number": "0690000031",
"code": "044"
}
}
},
"reference": "<string>",
"narration": "<string>",
"disburse_option": {
"date_time": "<string>"
},
"callback_url": "<string>",
"meta": {}
}
'import requests
url = "https://developersandbox-api.flutterwave.com/direct-transfers"
payload = {
"action": "instant",
"payment_instruction": {
"source_currency": "NGN",
"amount": { "value": 3000.44 },
"recipient": { "bank": {
"account_number": "0690000031",
"code": "044"
} }
},
"reference": "<string>",
"narration": "<string>",
"disburse_option": { "date_time": "<string>" },
"callback_url": "<string>",
"meta": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
action: 'instant',
payment_instruction: {
source_currency: 'NGN',
amount: {value: 3000.44},
recipient: {bank: {account_number: '0690000031', code: '044'}}
},
reference: '<string>',
narration: '<string>',
disburse_option: {date_time: '<string>'},
callback_url: '<string>',
meta: {}
})
};
fetch('https://developersandbox-api.flutterwave.com/direct-transfers', 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://developersandbox-api.flutterwave.com/direct-transfers",
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([
'action' => 'instant',
'payment_instruction' => [
'source_currency' => 'NGN',
'amount' => [
'value' => 3000.44
],
'recipient' => [
'bank' => [
'account_number' => '0690000031',
'code' => '044'
]
]
],
'reference' => '<string>',
'narration' => '<string>',
'disburse_option' => [
'date_time' => '<string>'
],
'callback_url' => '<string>',
'meta' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://developersandbox-api.flutterwave.com/direct-transfers"
payload := strings.NewReader("{\n \"action\": \"instant\",\n \"payment_instruction\": {\n \"source_currency\": \"NGN\",\n \"amount\": {\n \"value\": 3000.44\n },\n \"recipient\": {\n \"bank\": {\n \"account_number\": \"0690000031\",\n \"code\": \"044\"\n }\n }\n },\n \"reference\": \"<string>\",\n \"narration\": \"<string>\",\n \"disburse_option\": {\n \"date_time\": \"<string>\"\n },\n \"callback_url\": \"<string>\",\n \"meta\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://developersandbox-api.flutterwave.com/direct-transfers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"action\": \"instant\",\n \"payment_instruction\": {\n \"source_currency\": \"NGN\",\n \"amount\": {\n \"value\": 3000.44\n },\n \"recipient\": {\n \"bank\": {\n \"account_number\": \"0690000031\",\n \"code\": \"044\"\n }\n }\n },\n \"reference\": \"<string>\",\n \"narration\": \"<string>\",\n \"disburse_option\": {\n \"date_time\": \"<string>\"\n },\n \"callback_url\": \"<string>\",\n \"meta\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developersandbox-api.flutterwave.com/direct-transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"action\": \"instant\",\n \"payment_instruction\": {\n \"source_currency\": \"NGN\",\n \"amount\": {\n \"value\": 3000.44\n },\n \"recipient\": {\n \"bank\": {\n \"account_number\": \"0690000031\",\n \"code\": \"044\"\n }\n }\n },\n \"reference\": \"<string>\",\n \"narration\": \"<string>\",\n \"disburse_option\": {\n \"date_time\": \"<string>\"\n },\n \"callback_url\": \"<string>\",\n \"meta\": {}\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"id": "trf_yuK89vb",
"type": "bank",
"action": "instant",
"reference": "<string>",
"status": "NEW",
"reversal": {
"reversal_datetime": "2023-11-07T05:31:56Z",
"initial_status": "SUCCESSFUL",
"reconciliation_status": "REVERSED",
"reconciliation_type": "D"
},
"narration": "Salary payment for January",
"source_currency": "NGN",
"destination_currency": "EUR",
"amount": {
"value": 3000.44,
"applies_to": "destination_currency"
},
"fee": {
"currency": "NGN",
"value": 10.35
},
"debit_information": {
"currency": "NGN",
"actual_debit_amount": 100.35,
"rate_used": 100.35,
"vat": 100.35
},
"payment_information": {
"proof": "11000224070317345400001414441712312381"
},
"retry": {
"parent_id": "trf_HUQUYb1Sp5CkiIJFebk1Z",
"parent_reference": "flw_z882wFGMjc"
},
"duplicate": {
"parent_id": "trf_HUQUYb1Sp5CkiIJFebk1Z",
"parent_reference": "flw_z882wFGMjc"
},
"disburse_option": {
"date_time": "<string>",
"timezone": "Africa/Cairo"
},
"callback_url": "https://example.com/flw/callback",
"provider_response": {
"type": "transfer_amount_exceeds_limit",
"code": "<string>",
"message": "DISBURSE FAILED: Insufficient wallet balance"
},
"recipient": {
"bank": {
"account_number": "<string>",
"code": "<string>",
"account_type": "checking",
"branch": "<string>",
"name": "<string>",
"routing_number": "<string>",
"swift_code": "<string>",
"sort_code": "<string>"
},
"id": "<string>",
"type": "bank",
"name": {
"first": "King",
"middle": "Leo",
"last": "LeBron"
},
"currency": "NGN",
"national_identification": {
"type": "PASSPORT",
"identifier": "FLY5869798686",
"expiration_date": "2029-07-08"
},
"phone": {
"country_code": "234",
"number": "08012345678"
},
"date_of_birth": "<string>",
"email": "hi@flutterwave.com",
"address": {
"city": "New York",
"country": "US",
"line1": "123 Main Street",
"postal_code": "10001",
"state": "New York",
"line2": "Apt 4B"
}
},
"sender": {
"id": "<string>",
"name": {
"first": "King",
"middle": "Leo",
"last": "LeBron"
},
"national_identification": {
"type": "PASSPORT",
"identifier": "FLY5869798686",
"expiration_date": "2029-07-08"
},
"phone": {
"country_code": "234",
"number": "08012345678"
},
"date_of_birth": "<string>",
"email": "cornelius@gmail.com",
"address": {
"city": "New York",
"country": "US",
"line1": "123 Main Street",
"postal_code": "10001",
"state": "New York",
"line2": "Apt 4B"
}
},
"meta": {},
"created_datetime": "2023-11-07T05:31:56Z"
}
}{
"status": "failed",
"error": {
"type": "REQUEST_NOT_VALID",
"code": "10400",
"message": "Request is not valid",
"validation_errors": [
{
"field_name": "amount",
"message": "must not be null"
}
]
}
}{
"status": "failed",
"message": "UNAUTHORIZED",
"error": {
"type": "UNAUTHORIZED",
"code": "10401",
"message": "unauthorized"
}
}{
"status": "failed",
"message": "<string>",
"error": {
"type": "FORBIDDEN",
"code": "10403",
"message": "Forbidden"
}
}{
"status": "failed",
"message": "<string>",
"error": {
"type": "RESOURCE_CONFLICT",
"code": "10409",
"message": "Resource conflict"
}
}Initiate an Orchestrator transfer.
Create a transfer with Orchestrator helper.
curl --request POST \
--url https://developersandbox-api.flutterwave.com/direct-transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"action": "instant",
"payment_instruction": {
"source_currency": "NGN",
"amount": {
"value": 3000.44
},
"recipient": {
"bank": {
"account_number": "0690000031",
"code": "044"
}
}
},
"reference": "<string>",
"narration": "<string>",
"disburse_option": {
"date_time": "<string>"
},
"callback_url": "<string>",
"meta": {}
}
'import requests
url = "https://developersandbox-api.flutterwave.com/direct-transfers"
payload = {
"action": "instant",
"payment_instruction": {
"source_currency": "NGN",
"amount": { "value": 3000.44 },
"recipient": { "bank": {
"account_number": "0690000031",
"code": "044"
} }
},
"reference": "<string>",
"narration": "<string>",
"disburse_option": { "date_time": "<string>" },
"callback_url": "<string>",
"meta": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
action: 'instant',
payment_instruction: {
source_currency: 'NGN',
amount: {value: 3000.44},
recipient: {bank: {account_number: '0690000031', code: '044'}}
},
reference: '<string>',
narration: '<string>',
disburse_option: {date_time: '<string>'},
callback_url: '<string>',
meta: {}
})
};
fetch('https://developersandbox-api.flutterwave.com/direct-transfers', 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://developersandbox-api.flutterwave.com/direct-transfers",
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([
'action' => 'instant',
'payment_instruction' => [
'source_currency' => 'NGN',
'amount' => [
'value' => 3000.44
],
'recipient' => [
'bank' => [
'account_number' => '0690000031',
'code' => '044'
]
]
],
'reference' => '<string>',
'narration' => '<string>',
'disburse_option' => [
'date_time' => '<string>'
],
'callback_url' => '<string>',
'meta' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://developersandbox-api.flutterwave.com/direct-transfers"
payload := strings.NewReader("{\n \"action\": \"instant\",\n \"payment_instruction\": {\n \"source_currency\": \"NGN\",\n \"amount\": {\n \"value\": 3000.44\n },\n \"recipient\": {\n \"bank\": {\n \"account_number\": \"0690000031\",\n \"code\": \"044\"\n }\n }\n },\n \"reference\": \"<string>\",\n \"narration\": \"<string>\",\n \"disburse_option\": {\n \"date_time\": \"<string>\"\n },\n \"callback_url\": \"<string>\",\n \"meta\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://developersandbox-api.flutterwave.com/direct-transfers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"action\": \"instant\",\n \"payment_instruction\": {\n \"source_currency\": \"NGN\",\n \"amount\": {\n \"value\": 3000.44\n },\n \"recipient\": {\n \"bank\": {\n \"account_number\": \"0690000031\",\n \"code\": \"044\"\n }\n }\n },\n \"reference\": \"<string>\",\n \"narration\": \"<string>\",\n \"disburse_option\": {\n \"date_time\": \"<string>\"\n },\n \"callback_url\": \"<string>\",\n \"meta\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://developersandbox-api.flutterwave.com/direct-transfers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"action\": \"instant\",\n \"payment_instruction\": {\n \"source_currency\": \"NGN\",\n \"amount\": {\n \"value\": 3000.44\n },\n \"recipient\": {\n \"bank\": {\n \"account_number\": \"0690000031\",\n \"code\": \"044\"\n }\n }\n },\n \"reference\": \"<string>\",\n \"narration\": \"<string>\",\n \"disburse_option\": {\n \"date_time\": \"<string>\"\n },\n \"callback_url\": \"<string>\",\n \"meta\": {}\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"id": "trf_yuK89vb",
"type": "bank",
"action": "instant",
"reference": "<string>",
"status": "NEW",
"reversal": {
"reversal_datetime": "2023-11-07T05:31:56Z",
"initial_status": "SUCCESSFUL",
"reconciliation_status": "REVERSED",
"reconciliation_type": "D"
},
"narration": "Salary payment for January",
"source_currency": "NGN",
"destination_currency": "EUR",
"amount": {
"value": 3000.44,
"applies_to": "destination_currency"
},
"fee": {
"currency": "NGN",
"value": 10.35
},
"debit_information": {
"currency": "NGN",
"actual_debit_amount": 100.35,
"rate_used": 100.35,
"vat": 100.35
},
"payment_information": {
"proof": "11000224070317345400001414441712312381"
},
"retry": {
"parent_id": "trf_HUQUYb1Sp5CkiIJFebk1Z",
"parent_reference": "flw_z882wFGMjc"
},
"duplicate": {
"parent_id": "trf_HUQUYb1Sp5CkiIJFebk1Z",
"parent_reference": "flw_z882wFGMjc"
},
"disburse_option": {
"date_time": "<string>",
"timezone": "Africa/Cairo"
},
"callback_url": "https://example.com/flw/callback",
"provider_response": {
"type": "transfer_amount_exceeds_limit",
"code": "<string>",
"message": "DISBURSE FAILED: Insufficient wallet balance"
},
"recipient": {
"bank": {
"account_number": "<string>",
"code": "<string>",
"account_type": "checking",
"branch": "<string>",
"name": "<string>",
"routing_number": "<string>",
"swift_code": "<string>",
"sort_code": "<string>"
},
"id": "<string>",
"type": "bank",
"name": {
"first": "King",
"middle": "Leo",
"last": "LeBron"
},
"currency": "NGN",
"national_identification": {
"type": "PASSPORT",
"identifier": "FLY5869798686",
"expiration_date": "2029-07-08"
},
"phone": {
"country_code": "234",
"number": "08012345678"
},
"date_of_birth": "<string>",
"email": "hi@flutterwave.com",
"address": {
"city": "New York",
"country": "US",
"line1": "123 Main Street",
"postal_code": "10001",
"state": "New York",
"line2": "Apt 4B"
}
},
"sender": {
"id": "<string>",
"name": {
"first": "King",
"middle": "Leo",
"last": "LeBron"
},
"national_identification": {
"type": "PASSPORT",
"identifier": "FLY5869798686",
"expiration_date": "2029-07-08"
},
"phone": {
"country_code": "234",
"number": "08012345678"
},
"date_of_birth": "<string>",
"email": "cornelius@gmail.com",
"address": {
"city": "New York",
"country": "US",
"line1": "123 Main Street",
"postal_code": "10001",
"state": "New York",
"line2": "Apt 4B"
}
},
"meta": {},
"created_datetime": "2023-11-07T05:31:56Z"
}
}{
"status": "failed",
"error": {
"type": "REQUEST_NOT_VALID",
"code": "10400",
"message": "Request is not valid",
"validation_errors": [
{
"field_name": "amount",
"message": "must not be null"
}
]
}
}{
"status": "failed",
"message": "UNAUTHORIZED",
"error": {
"type": "UNAUTHORIZED",
"code": "10401",
"message": "unauthorized"
}
}{
"status": "failed",
"message": "<string>",
"error": {
"type": "FORBIDDEN",
"code": "10403",
"message": "Forbidden"
}
}{
"status": "failed",
"message": "<string>",
"error": {
"type": "RESOURCE_CONFLICT",
"code": "10409",
"message": "Resource conflict"
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
A unique identifier to track this operation. It must be between 12 and 255 characters in length.
12 - 255A unique identifier to prevent duplicate requests. It must be between 12 and 255 characters in length.
12 - 255An optional scenario key that can be used to simulate specific behaviors or test different scenarios within the API. Providing this header allows you to trigger predefined responses or alter data based on the key's value, which can be useful for testing, development, or demonstrating specific functionalities. The key should be a string of 1 to 1000 characters.
Body
- Option 1
- Option 2
- Option 3
To define whether the transfer should be processed immediately, scheduled for a later date, or deferred for future processing.
instant, deferred, scheduled "instant"
Currency-specific information for the transfer.
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
Show child attributes
Show child attributes
A custom identifier to track the transaction, This must be unique across all your transactions.
6 - 42^[a-zA-Z0-9\-]+$Transfer description. This cannot be greater than 180 characters.
1 - 180To specify the date and time for disbursement, this is required when action is set to scheduled.
Show child attributes
Show child attributes
Specify to set a callback url for receiving payout webhook, this will take precedent over the merchant's default webhook url.
Show child attributes
Show child attributes
Was this page helpful?