Transfer balance
curl --request POST \
--url https://app.autocalls.ai/api/white-label/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"user_id": 123,
"email": "<string>",
"transfer_type": "<string>",
"operation": "<string>",
"amount": 123
}
'import requests
url = "https://app.autocalls.ai/api/white-label/transfer"
payload = {
"user_id": 123,
"email": "<string>",
"transfer_type": "<string>",
"operation": "<string>",
"amount": 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({
user_id: 123,
email: '<string>',
transfer_type: '<string>',
operation: '<string>',
amount: 123
})
};
fetch('https://app.autocalls.ai/api/white-label/transfer', 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://app.autocalls.ai/api/white-label/transfer",
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([
'user_id' => 123,
'email' => '<string>',
'transfer_type' => '<string>',
'operation' => '<string>',
'amount' => 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://app.autocalls.ai/api/white-label/transfer"
payload := strings.NewReader("{\n \"user_id\": 123,\n \"email\": \"<string>\",\n \"transfer_type\": \"<string>\",\n \"operation\": \"<string>\",\n \"amount\": 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://app.autocalls.ai/api/white-label/transfer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"user_id\": 123,\n \"email\": \"<string>\",\n \"transfer_type\": \"<string>\",\n \"operation\": \"<string>\",\n \"amount\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.autocalls.ai/api/white-label/transfer")
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 \"user_id\": 123,\n \"email\": \"<string>\",\n \"transfer_type\": \"<string>\",\n \"operation\": \"<string>\",\n \"amount\": 123\n}"
response = http.request(request)
puts response.read_body{
"message": "Transfer completed successfully.",
"transfer": {
"type": "minutes",
"operation": "add",
"amount": 100
},
"user": {
"id": 123,
"email": "user@example.com",
"name": "John Doe",
"minutes_balance": 150.5,
"credits_balance": 0
},
"your_balance": {
"minutes": 850.5
}
}
{
"message": "Transfer completed successfully.",
"transfer": {
"type": "credits",
"operation": "add",
"amount": 500
},
"user": {
"id": 123,
"email": "user@example.com",
"name": "John Doe",
"minutes_balance": 0,
"credits_balance": 500
},
"your_balance": {
"minutes": 944.44
}
}
{
"error": "Insufficient minutes balance.",
"available_balance": 50.5
}
{
"error": "User has insufficient credits balance.",
"user_credits_balance": 25
}
{
"error": "You are not a white label admin."
}
{
"error": "User does not belong to your white label platform."
}
{
"error": "User not found."
}
{
"message": "Either user_id or email is required.",
"errors": {
"user_id": ["Either user_id or email is required."],
"email": ["Either user_id or email is required."]
}
}
White Label
Transfer balance
Transfer minutes or credits to/from a platform user
POST
/
white-label
/
transfer
Transfer balance
curl --request POST \
--url https://app.autocalls.ai/api/white-label/transfer \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"user_id": 123,
"email": "<string>",
"transfer_type": "<string>",
"operation": "<string>",
"amount": 123
}
'import requests
url = "https://app.autocalls.ai/api/white-label/transfer"
payload = {
"user_id": 123,
"email": "<string>",
"transfer_type": "<string>",
"operation": "<string>",
"amount": 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({
user_id: 123,
email: '<string>',
transfer_type: '<string>',
operation: '<string>',
amount: 123
})
};
fetch('https://app.autocalls.ai/api/white-label/transfer', 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://app.autocalls.ai/api/white-label/transfer",
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([
'user_id' => 123,
'email' => '<string>',
'transfer_type' => '<string>',
'operation' => '<string>',
'amount' => 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://app.autocalls.ai/api/white-label/transfer"
payload := strings.NewReader("{\n \"user_id\": 123,\n \"email\": \"<string>\",\n \"transfer_type\": \"<string>\",\n \"operation\": \"<string>\",\n \"amount\": 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://app.autocalls.ai/api/white-label/transfer")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"user_id\": 123,\n \"email\": \"<string>\",\n \"transfer_type\": \"<string>\",\n \"operation\": \"<string>\",\n \"amount\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.autocalls.ai/api/white-label/transfer")
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 \"user_id\": 123,\n \"email\": \"<string>\",\n \"transfer_type\": \"<string>\",\n \"operation\": \"<string>\",\n \"amount\": 123\n}"
response = http.request(request)
puts response.read_body{
"message": "Transfer completed successfully.",
"transfer": {
"type": "minutes",
"operation": "add",
"amount": 100
},
"user": {
"id": 123,
"email": "user@example.com",
"name": "John Doe",
"minutes_balance": 150.5,
"credits_balance": 0
},
"your_balance": {
"minutes": 850.5
}
}
{
"message": "Transfer completed successfully.",
"transfer": {
"type": "credits",
"operation": "add",
"amount": 500
},
"user": {
"id": 123,
"email": "user@example.com",
"name": "John Doe",
"minutes_balance": 0,
"credits_balance": 500
},
"your_balance": {
"minutes": 944.44
}
}
{
"error": "Insufficient minutes balance.",
"available_balance": 50.5
}
{
"error": "User has insufficient credits balance.",
"user_credits_balance": 25
}
{
"error": "You are not a white label admin."
}
{
"error": "User does not belong to your white label platform."
}
{
"error": "User not found."
}
{
"message": "Either user_id or email is required.",
"errors": {
"user_id": ["Either user_id or email is required."],
"email": ["Either user_id or email is required."]
}
}
This endpoint allows white label admins to transfer call minutes or chat credits to and from their users. This is useful for managing user balances programmatically when building custom frontends.
This endpoint is only available for white label admins. Regular users will receive a 403 Forbidden error.
Request Body
The ID of the user to transfer to/from. Required if
email is not provided.The email of the user to transfer to/from. Required if
user_id is not provided.The type of balance to transfer:
minutes or creditsThe operation to perform:
add (transfer to user) or remove (transfer from user)The amount to transfer. For minutes, this is the number of call minutes. For credits, this is the number of chat credits.
Response
Success message
Your (tenant owner’s) updated balance
Show your_balance properties
Show your_balance properties
Your current minutes balance
{
"message": "Transfer completed successfully.",
"transfer": {
"type": "minutes",
"operation": "add",
"amount": 100
},
"user": {
"id": 123,
"email": "user@example.com",
"name": "John Doe",
"minutes_balance": 150.5,
"credits_balance": 0
},
"your_balance": {
"minutes": 850.5
}
}
{
"message": "Transfer completed successfully.",
"transfer": {
"type": "credits",
"operation": "add",
"amount": 500
},
"user": {
"id": 123,
"email": "user@example.com",
"name": "John Doe",
"minutes_balance": 0,
"credits_balance": 500
},
"your_balance": {
"minutes": 944.44
}
}
{
"error": "Insufficient minutes balance.",
"available_balance": 50.5
}
{
"error": "User has insufficient credits balance.",
"user_credits_balance": 25
}
{
"error": "You are not a white label admin."
}
{
"error": "User does not belong to your white label platform."
}
{
"error": "User not found."
}
{
"message": "Either user_id or email is required.",
"errors": {
"user_id": ["Either user_id or email is required."],
"email": ["Either user_id or email is required."]
}
}
Transfer Types
| Type | Description | Conversion |
|---|---|---|
minutes | Call minutes for AI phone calls | Direct 1:1 transfer |
credits | Chat credits for AI chat, WhatsApp, SMS | 9 credits = 1 minute |
Operations
| Operation | Minutes Behavior | Credits Behavior |
|---|---|---|
add | Deducts from your balance, adds to user | Deducts minutes from you (at 9 credits/min), adds credits to user |
remove | Deducts from user, adds to your balance | Deducts credits from user, adds minutes to you |
Example: Adding Credits to a User
curl -X POST https://app.autocalls.ai/api/white-label/transfer \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"transfer_type": "credits",
"operation": "add",
"amount": 100
}'
Example: Removing Minutes from a User
curl -X POST https://app.autocalls.ai/api/white-label/transfer \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"user_id": 123,
"transfer_type": "minutes",
"operation": "remove",
"amount": 50
}'
⌘I

