Skip to main content
POST
/
api
/
v1
/
partner
/
accounts
/
{customer_auth_id}
/
transfer-balance
Transfer balance to customer
curl --request POST \
  --url https://api.vobiz.ai/api/v1/partner/accounts/{customer_auth_id}/transfer-balance \
  --header 'Content-Type: application/json' \
  --header 'X-Auth-ID: <api-key>' \
  --header 'X-Auth-Token: <api-key>' \
  --data '
{
  "amount": 500,
  "currency": "INR"
}
'
{
  "transaction_id": "txn_aabbccdd1234",
  "from_account": "PA_XXXXXXXX",
  "to_account": "MA_XXXXXXXX",
  "amount": 500,
  "currency": "INR",
  "description": "April recharge",
  "status": "completed",
  "partner_balance_after": 47750,
  "customer_balance_after": 2950,
  "timestamp": "2026-03-25T11:00:00Z"
}
← Partner API Reference 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, who then spend from their allocated balance on calls.
All Partner API requests use X-Auth-ID and X-Auth-Token headers. See Authentication for details.

Overview

PropertyBehavior
AtomicTransfers complete or fail entirely - no partial states
PermanentCannot be reversed via API - verify amount before submitting
InstantCustomer 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.
  • Your Master Balance - debited by the transfer amount (e.g. -₹500.00).
  • Customer Wallet - credited by the same amount (e.g. +₹500.00).

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.

Request Body

FieldTypeRequiredDescription
amountnumberRequiredAmount to transfer in the partner’s currency
currencystringRequiredISO 4217 currency code, e.g. INR
descriptionstringOptionalFree-text note recorded in both transaction ledgers
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 - `balance` is a STRING, cast before comparing
profile = requests.get(f"{BASE}/me", headers=HEADERS).json()
if float(profile["balance"]) >= 500.00:
    response = requests.post(
        f"{BASE}/accounts/MA_48149cf4/transfer-balance",
        headers=HEADERS,
        json={
            "amount": 500.00,
            "currency": "INR",
            "description": "April recharge - Credresolve",
        },
    )
    print(response.json())

Response (200)

{
  "transaction_id": "txn_aabbccdd1234",
  "from_account": "PA_XXXXXXXX",
  "to_account": "MA_XXXXXXXX",
  "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"
}
FieldNotes
transaction_idThe transfer’s ledger reference. Store it for reconciliation - it ties the debit on your ledger to the credit on the customer’s.
from_accountYour partner auth_id (the debited account).
to_accountThe customer auth_id (the credited account).
statuscompleted on success. The transfer is atomic - there is no pending state.
partner_balance_afterYour master balance after the debit. Assert this is non-negative as a sanity check.
customer_balance_afterThe customer’s wallet balance after the credit.

Errors

{
  "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"
}
StatusCause
400Insufficient partner balance (payload above), non-positive amount, or a currency that doesn’t match your partner account currency.
401 / 403Invalid partner credentials, or can_transfer_balance is false on your partner profile.
404customer_auth_id not found, or it belongs to a different partner.

Notes

  • 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, contact Vobiz support. Always verify 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. Both legs (your debit, the customer’s credit) commit together or not at all. If concurrent transfers cause your balance to drop below the required amount between your own check and the actual transfer, the request fails with a 400 and neither ledger is touched.
  • Currency must match your partner account - The currency you send must equal your partner account currency (GET /mecurrency). A mismatched currency is rejected; the API does not convert between currencies.
  • No built-in idempotency key - Retrying a transfer after a network timeout can double-credit the customer, because each call is a fresh transfer. Before retrying a request whose response you never saw, poll the customer’s transactions (match on amount + recent created_at) to confirm whether the first attempt landed.
  • 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 (prefixed Transfer from partner …). Use clear notes for easier reconciliation during billing cycles.

Before Transferring - Checklist

  • Verify the target customer_auth_id is correct.
  • Confirm the transfer amount and currency.
  • Confirm your master balance is sufficient.
  • Add a clear description for ledger reconciliation.
  • Remember that transfers are permanent and cannot be reversed via API.

Authorizations

X-Auth-ID
string
header
required

Your Vobiz account Auth ID

X-Auth-Token
string
header
required

Your Vobiz account Auth Token

Path Parameters

customer_auth_id
string
required
Example:

"MA_ZKITB8Z2"

Body

application/json
amount
number
required

Positive decimal. Your master balance must be ≥ this amount.

Example:

500

currency
string
required

Must match your partner account currency.

Example:

"INR"

description
string

Note for your records. Appears in both ledgers.

Example:

"April recharge - Credresolve"

Response

Transfer completed