Vobiz uses two separate token systems. They are easy to confuse, so it helps to keep them straight from the start.Documentation Index
Fetch the complete documentation index at: https://docs.vobiz.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Access token (JWT) — a short-lived bearer token you use for console / dashboard API calls. Refreshed via
POST /auth/refresh. - Auth token (
X-Auth-Token) — a long-lived API key, paired with yourauth_id, used for the REST and telephony API (placing calls, etc.). Rotated viaPOST /auth-token/rotate.
The three tokens at a glance
| Token | What it is | Lifetime | Used for | Renewed by |
|---|---|---|---|---|
| Access token (JWT) | Short-lived bearer token issued at login | 30 minutes | Console / dashboard API calls | POST /auth/refresh |
| Refresh token (JWT) | Long-lived token that mints new access tokens | 7 days | Only to call /auth/refresh | Re-issued automatically by /auth/refresh |
Auth token (X-Auth-Token) | Long-lived API key (paired with auth_id) | Until rotated | REST / telephony API auth | POST /auth-token/rotate |
Access tokens (JWT)
Access tokens authenticate console and dashboard requests. This flow applies to main accounts, sub-accounts, and team members — all use the same endpoints, and the identity is taken from the token itself. Base URL:https://api.vobiz.ai/api/v1
You start with a token pair
When you log in to the console, you receive an access token and a refresh token:expires_in is in seconds — 1800 is 30 minutes. From here, use the refresh token to keep your access token alive.
Refresh the access token
When the access token has expired (or is about to), send the refresh token as the bearer credential — not in the body:cURL
Response (200 OK)
- Same flow for main accounts and sub-accounts — a sub-account simply presents its own refresh token. There is no separate sub-account refresh endpoint.
- The refresh token is valid for 7 days; refreshing does not shorten it. It is invalidated early by logout or password change.
Auth-token rotation
The auth token is the long-lived API key (X-Auth-Token, paired with auth_id) used to authenticate REST and telephony API requests. Rotation supports an optional grace window so the old key keeps working while you roll out the new one — zero downtime.
Authentication for these endpoints: the bearer access token (JWT) of the account owner. Log in first, then call these with
Authorization: Bearer <ACCESS_TOKEN>.Request body
All rotate endpoints accept the same body:| Field | Type | Default | Description |
|---|---|---|---|
grace_period_hours | integer (0–24) | 24 | How long the previous key keeps working. 0 = immediate cutover (old key dies at once). |
force | boolean | false | Required (true) if a previous key is still inside its grace window. |
cURL
Rotate response
Endpoints
The same rotate / revoke / status actions exist for main accounts, sub-accounts, and partner-managed customers. Main account| Action | Method & Path |
|---|---|
| Rotate | POST /accounts/{auth_id}/auth-token/rotate |
| Revoke previous key now | DELETE /accounts/{auth_id}/auth-token/previous |
| Status | GET /accounts/{auth_id}/auth-token/status |
| Action | Method & Path |
|---|---|
| Rotate | POST /accounts/{ma_auth_id}/sub-accounts/{sa_auth_id}/auth-token/rotate |
| Revoke previous | DELETE /accounts/{ma_auth_id}/sub-accounts/{sa_auth_id}/auth-token/previous |
| Status | GET /accounts/{ma_auth_id}/sub-accounts/{sa_auth_id}/auth-token/status |
The parent authenticates with its own access token and may only rotate sub-accounts it owns — otherwise the request returns
403.| Action | Method & Path |
|---|---|
| Rotate | POST /partner/accounts/{customer_auth_id}/auth-token/rotate |
| Revoke previous | DELETE /partner/accounts/{customer_auth_id}/auth-token/previous |
| Status | GET /partner/accounts/{customer_auth_id}/auth-token/status |
Status response
Behavior & errors
- Grace window — when
grace_period_hours > 0, both the new and previous keys authenticate untilprevious_token_expires_at. Roll the new key out to all callers, then let it lapse or revoke it early via the…/auth-token/previousDELETE. - Immediate cutover —
grace_period_hours = 0invalidates the old key instantly (the legacy “regenerate credentials” behavior). 409 Conflict— a previous key is still inside its grace window. Passforce: trueto discard it and rotate again, orDELETE …/auth-token/previousfirst.403 Forbidden— attempting to rotate an account or sub-account you don’t own.
FAQ
My access token expired — what do I do?
My access token expired — what do I do?
Call
POST /auth/refresh with your refresh token as the bearer credential. You get a new access and refresh token back. The same endpoint works for main accounts and sub-accounts.Do I need a separate call to regenerate the refresh token?
Do I need a separate call to regenerate the refresh token?
No. The refresh token is re-issued automatically inside the
/auth/refresh response. Just store the new one each time.Is auth-token rotation the same as access-token refresh?
Is auth-token rotation the same as access-token refresh?
No. Access and refresh tokens are JWTs for the console API. The
X-Auth-Token API key is a separate, long-lived credential rotated with a grace window.