curl --request POST \
--url https://api.cadanapay.com/v1/platform/transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sourceTenantKey": "blm123456",
"destinationTenantKey": "blm998877",
"amount": {
"amount": 500000,
"currency": "USD"
},
"reference": "transfer-123"
}
'import requests
url = "https://api.cadanapay.com/v1/platform/transfers"
payload = {
"sourceTenantKey": "blm123456",
"destinationTenantKey": "blm998877",
"amount": {
"amount": 500000,
"currency": "USD"
},
"reference": "transfer-123"
}
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({
sourceTenantKey: 'blm123456',
destinationTenantKey: 'blm998877',
amount: {amount: 500000, currency: 'USD'},
reference: 'transfer-123'
})
};
fetch('https://api.cadanapay.com/v1/platform/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://api.cadanapay.com/v1/platform/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([
'sourceTenantKey' => 'blm123456',
'destinationTenantKey' => 'blm998877',
'amount' => [
'amount' => 500000,
'currency' => 'USD'
],
'reference' => 'transfer-123'
]),
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://api.cadanapay.com/v1/platform/transfers"
payload := strings.NewReader("{\n \"sourceTenantKey\": \"blm123456\",\n \"destinationTenantKey\": \"blm998877\",\n \"amount\": {\n \"amount\": 500000,\n \"currency\": \"USD\"\n },\n \"reference\": \"transfer-123\"\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://api.cadanapay.com/v1/platform/transfers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sourceTenantKey\": \"blm123456\",\n \"destinationTenantKey\": \"blm998877\",\n \"amount\": {\n \"amount\": 500000,\n \"currency\": \"USD\"\n },\n \"reference\": \"transfer-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cadanapay.com/v1/platform/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 \"sourceTenantKey\": \"blm123456\",\n \"destinationTenantKey\": \"blm998877\",\n \"amount\": {\n \"amount\": 500000,\n \"currency\": \"USD\"\n },\n \"reference\": \"transfer-123\"\n}"
response = http.request(request)
puts response.read_body{
"id": "9b2c1f47-8a0d-4e21-bf3c-2d6f1a9e74c5"
}{
"code": "invalid_request_body",
"message": "The request body provided is not valid",
"params": {
"field": "Value is invalid."
}
}{
"code": "forbidden",
"message": "Transfers are only available to platform businesses."
}{
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}Create Transfer
Move money between your own business accounts — your main business and its child businesses — internally and same-currency only. Settles immediately with no fee.
Set sourceTenantKey to the business funds move from (omit it to send
from your main business) and destinationTenantKey to the business they
move to. Allowed movements are main → child, child → child, and
child → main.
There is no GET for a transfer — track it via the
platform disbursements endpoint
filtered to type=TRANSFER, matching the returned id or your reference.
curl --request POST \
--url https://api.cadanapay.com/v1/platform/transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"sourceTenantKey": "blm123456",
"destinationTenantKey": "blm998877",
"amount": {
"amount": 500000,
"currency": "USD"
},
"reference": "transfer-123"
}
'import requests
url = "https://api.cadanapay.com/v1/platform/transfers"
payload = {
"sourceTenantKey": "blm123456",
"destinationTenantKey": "blm998877",
"amount": {
"amount": 500000,
"currency": "USD"
},
"reference": "transfer-123"
}
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({
sourceTenantKey: 'blm123456',
destinationTenantKey: 'blm998877',
amount: {amount: 500000, currency: 'USD'},
reference: 'transfer-123'
})
};
fetch('https://api.cadanapay.com/v1/platform/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://api.cadanapay.com/v1/platform/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([
'sourceTenantKey' => 'blm123456',
'destinationTenantKey' => 'blm998877',
'amount' => [
'amount' => 500000,
'currency' => 'USD'
],
'reference' => 'transfer-123'
]),
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://api.cadanapay.com/v1/platform/transfers"
payload := strings.NewReader("{\n \"sourceTenantKey\": \"blm123456\",\n \"destinationTenantKey\": \"blm998877\",\n \"amount\": {\n \"amount\": 500000,\n \"currency\": \"USD\"\n },\n \"reference\": \"transfer-123\"\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://api.cadanapay.com/v1/platform/transfers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"sourceTenantKey\": \"blm123456\",\n \"destinationTenantKey\": \"blm998877\",\n \"amount\": {\n \"amount\": 500000,\n \"currency\": \"USD\"\n },\n \"reference\": \"transfer-123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cadanapay.com/v1/platform/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 \"sourceTenantKey\": \"blm123456\",\n \"destinationTenantKey\": \"blm998877\",\n \"amount\": {\n \"amount\": 500000,\n \"currency\": \"USD\"\n },\n \"reference\": \"transfer-123\"\n}"
response = http.request(request)
puts response.read_body{
"id": "9b2c1f47-8a0d-4e21-bf3c-2d6f1a9e74c5"
}{
"code": "invalid_request_body",
"message": "The request body provided is not valid",
"params": {
"field": "Value is invalid."
}
}{
"code": "forbidden",
"message": "Transfers are only available to platform businesses."
}{
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The business funds move to — a child business or your main business. Cannot equal the source.
"blm998877"
Show child attributes
Show child attributes
Your client reference for the transfer. Stored on it so you can locate it later.
"transfer-123"
The business funds move from. Omit to send from your main business, or pass a child business's tenant key.
"blm123456"
Response
Transfer created response
The transfer id. Track it via the platform disbursements endpoint filtered to type=TRANSFER.
"9b2c1f47-8a0d-4e21-bf3c-2d6f1a9e74c5"