This walkthrough provisions aDocumentation Index
Fetch the complete documentation index at: https://docs.vobiz.ai/llms.txt
Use this file to discover all available pages before exploring further.
customer_use sub-account from scratch — create → KYC → number → first call — and is explicit about which credentials to use at each step.
Base URL: https://api.vobiz.ai/api/v1
The one rule that prevents most of the confusion
Two credential pairs are in play. Keep them straight:| Credential | What it is | Used for |
|---|---|---|
Parent X-Auth-ID / X-Auth-Token | Your main account (MA_…) API key | All provisioning & administration — create the sub-account, run its KYC, buy numbers, assign/unassign numbers. The {sub_auth_id} in the URL identifies which sub-account you act on. |
Sub-account auth_id / auth_token | The sub-account’s own API key (SA_…), returned once at creation | The sub-account’s runtime usage — placing/receiving calls, pulling its own CDRs and recordings. Hand this to your customer. |
KYC is not an exception. Sub-account KYC endpoints authenticate with the parent’s
X-Auth-ID / X-Auth-Token; the sub-account is identified by {sub_auth_id} in the path.The flow
Create the customer sub-account — parent credentials
A customer that must be KYC’d in its own name is a Response (201) — save the sub-account’s own credentials;
customer_use sub-account. It requires an email and starts call-blocked until KYC passes.cURL
auth_token is shown once:auth_credentials→ the sub-account’s key (used in the final step).tokens(JWT) are optional — only for console/dashboard sign-in, not the REST/telephony API.kyc_calls_blocked: true→ the sub-account cannot place calls yet.
Complete KYC — parent credentials
All KYC endpoints live under When
/sub-accounts/{sub_auth_id}/kyc/… and authenticate as the parent. Run the documents the entity needs (PAN + GST/CIN for companies; PAN + Aadhaar via DigiLocker for individuals), then poll status.Verify PAN
Verify GST
Poll status
kyc_calls_blocked flips to false, the sub-account may place calls.Buy a number — parent credentials
Browse inventory, then purchase. Buying with the parent puts the number in the parent’s pool, ready to assign in the next step. Billing for an Purchasing debits the parent’s balance (setup fee + monthly fee).
SA_ purchase always routes to the parent MA_.Find a number
Purchase it
Link the number to the sub-account — parent credentials
Assign a parent-pool DID to the sub-account. URL-encode The number now belongs to the sub-account.
+ as %2B in the path; name the sub-account in the body via sub_account_id.cURL
Moving a number back to the parent pool is subject to a 15-day cool-off if it had a call in the last 15 days. See Unassign DID.
Alternative: let the sub-account buy its own number
Instead of Steps 3–4, the sub-account can purchase directly with its ownauth_id / auth_token (billing still routes to the parent MA_). The number lands directly on the sub-account — no separate assign step:
cURL
Auth cheat-sheet
| Step | Operation | Endpoint | Auth |
|---|---|---|---|
| 1 | Create sub-account | POST /accounts/{auth_id}/sub-accounts/ | Parent |
| 2 | Verify PAN / GST / CIN / DigiLocker | POST /sub-accounts/{sub_auth_id}/kyc/… | Parent |
| 2 | KYC status | GET /sub-accounts/{sub_auth_id}/kyc/status | Parent |
| 3 | List inventory | GET /Account/{auth_id}/inventory/numbers | Parent |
| 3 | Buy number | POST /Account/{auth_id}/numbers/purchase-from-inventory | Parent |
| 4 | Assign to sub-account | POST /account/{auth_id}/numbers/{e164}/assign-subaccount | Parent |
| 4 | Unassign (15-day cool-off) | DELETE /account/{auth_id}/numbers/{e164}/assign-subaccount | Parent |
| 5 | Place a call | POST /Account/{auth_id}/Call/ | Sub-account |
| alt | Sub buys directly | POST /Account/{auth_id}/numbers/purchase-from-inventory | Sub-account |