Skip to main content
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

user_id
integer
The ID of the user to transfer to/from. Required if email is not provided.
email
string
The email of the user to transfer to/from. Required if user_id is not provided.
transfer_type
string
required
The type of balance to transfer: minutes or credits
operation
string
required
The operation to perform: add (transfer to user) or remove (transfer from user)
amount
number
required
The amount to transfer. For minutes, this is the number of call minutes. For credits, this is the number of chat credits.

Response

message
string
Success message
transfer
object
Details of the transfer
user
object
The user’s updated balance information
your_balance
object
Your (tenant owner’s) updated 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

TypeDescriptionConversion
minutesCall minutes for AI phone callsDirect 1:1 transfer
creditsChat credits for AI chat, WhatsApp, SMS9 credits = 1 minute

Operations

OperationMinutes BehaviorCredits Behavior
addDeducts from your balance, adds to userDeducts minutes from you (at 9 credits/min), adds credits to user
removeDeducts from user, adds to your balanceDeducts 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
  }'