Partner API
Balance Transfer
Transfer credits from your partner master wallet to a customer's wallet. This is the primary mechanism for reselling voice minutes — you fund your customers, and they spend from their allocated balance on calls.
Overview
How Balance Transfer Works
When you call the transfer endpoint, Vobiz atomically debits the specified amount from your partner master balance and credits it to the target customer's wallet. Both debit and credit are recorded as separate transaction entries in each account's ledger.
Transfer Balance
https://api.vobiz.ai/api/v1/partner/accounts/{customer_auth_id}/transfer-balanceTransfer credits from your partner master balance to a customer wallet. Transfers are atomic and permanent — verify the amount and target customer before submitting.
Authentication Required:
- • X-Auth-ID: Your Partner ID
- • X-Auth-Token: Your secret API token
- • Content-Type: application/json
Request
| Field | Type | Required | Description |
|---|---|---|---|
| amount | number | Required | Amount to transfer as a decimal (e.g. 500.00). Must be a positive number. Your master balance must be ≥ this amount. |
| currency | string | Required | Currency code. Must match your partner account currency (e.g. INR). |
| description | string | Optional | Optional note for your bookkeeping records. Appears in the transaction ledger. |
curl -X POST \
"https://api.vobiz.ai/api/v1/partner/accounts/{customer_auth_id}/transfer-balance" \
-H "X-Auth-ID: {your_partner_id}" \
-H "X-Auth-Token: {your_auth_token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"amount": 500.00,
"currency": "INR",
"description": "April recharge — Credresolve"
}'import requests
BASE = "https://api.vobiz.ai/api/v1/partner"
HEADERS = {
"X-Auth-ID": "{your_partner_id}",
"X-Auth-Token": "{your_auth_token}",
"Accept": "application/json",
"Content-Type": "application/json",
}
# Check your own balance first
profile = requests.get(f"{BASE}/me", headers=HEADERS).json()
if profile["balance"] < 500.00:
raise Exception(f"Insufficient partner balance: {profile['balance']}")
# Transfer
response = requests.post(
f"{BASE}/accounts/{'{customer_auth_id}'}/transfer-balance",
headers=HEADERS,
json={
"amount": 500.00,
"currency": "INR",
"description": "April recharge",
}
)
print(response.json())Response
{
"transaction_id": "txn_abc123def456",
"from_account": "partner-882abc",
"to_account": "MA_48149cf4",
"amount": 500.00,
"currency": "INR",
"description": "April recharge — Credresolve",
"status": "completed",
"partner_balance_after": 47750.00,
"customer_balance_after": 2950.00,
"timestamp": "2026-03-25T11:00:00Z"
}{
"error": "insufficient_balance",
"message": "Your partner balance (₹200.00) is insufficient for this transfer (₹500.00).",
"current_balance": 200.00,
"requested_amount": 500.00,
"currency": "INR"
}Important Warnings
Once a transfer completes, there is no API endpoint to reverse it. If you transfer the wrong amount or to the wrong customer, you must contact Vobiz support. Always double-check the customer_auth_id and amount before calling this endpoint.
The API checks your master balance at the moment the request is received. If concurrent transfers cause your balance to drop below the required amount between your check and the actual transfer, the request will fail with a 400 error.
The description field is recorded in your partner transaction ledger as a debit and in the customer's transaction ledger as a credit. Use descriptive notes for easier reconciliation during billing cycles.