Skip to content

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

Atomic
Transfers complete or fail entirely — no partial states
Permanent
Cannot be reversed via API — verify amount before submitting
Instant
Customer wallet is credited immediately on success

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.

Balance flow
Your Master Balance
- ₹500.00
Customer Wallet
+ ₹500.00

Transfer Balance

POSThttps://api.vobiz.ai/api/v1/partner/accounts/{customer_auth_id}/transfer-balance

Transfer 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

FieldTypeRequiredDescription
amountnumberRequiredAmount to transfer as a decimal (e.g. 500.00). Must be a positive number. Your master balance must be ≥ this amount.
currencystringRequiredCurrency code. Must match your partner account currency (e.g. INR).
descriptionstringOptionalOptional note for your bookkeeping records. Appears in the transaction ledger.
cURL — Transfer ₹500 to a customer
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"
  }'
Python — With balance check
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

200 OK — Transfer successful
{
  "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"
}
400 Bad Request — Insufficient balance
{
  "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

Transfers are permanent and cannot be reversed

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.

Transfers are atomic — your balance is checked at submission time

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.

Description appears in both ledgers

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.

Before Transferring — Checklist

Verify the customer_auth_id by calling GET /accounts/{id} and confirming the account name
Check your own balance via GET /me — ensure it exceeds the transfer amount
Confirm the currency matches your partner account currency (INR)
Add a descriptive description for your ledger records
In production, implement idempotency — store the transaction_id to detect duplicate transfers