English
English
Appearance
English
English
Appearance
The most frequent integration questions. If yours isn't here, reach out to Zorio support.
A token is shown only once at creation; it can't be retrieved. Go to Admin Console → API Tokens → Revoke the old token → create a new one. Update your CRM with the fresh token.
User-session tokens don't auto-expire by default — they only go away on manual revoke by an admin. The industry-standard advice is to rotate every 90 days. You can rotate yourself: create a new token → update the CRM → revoke the old one.
OAuth2 is not supported yet. Currently only Bearer (user session) is available.
Each customer is provisioned their own account. Use the provisioned account for testing — there's no shared sandbox.
Check in this order:
pbx_api_access permission?from_extension exist and have status=active in the account?to_phone formatted as ^[0-9+]+$?trunk_id — does the trunk have status=active?ringing / answered / hangup events)?Pass the caller_id field in the body. The number must belong to the account's active caller-IDs — fetch them with GET /api/pbx/caller-ids.
Call GET /api/pbx/cdr/{uuid} again to receive a new signed URL (TTL 30' from the request time). The old URL is expired; a new request mints a different URL.
pbx.call.hangup vs pbx.cdr.created? pbx.call.hangup: fires in real time as the call ends, before recording_url is available.pbx.cdr.created: fires after the CDR pipeline finishes, with recording_url and a more detailed result classification.CRMs that need real-time → subscribe to pbx.call.hangup. CRMs that need full data + recording → subscribe to pbx.cdr.created.
Not yet. The webhook receives ALL PBX events for the account. Filter on the receiver side with data.extension.
No hard cap. Recommendation: ≤ 100,000 leads per campaign to keep dashboard reports snappy.
Not by default — the system dedupes by (campaign_id, phone). If you need duplicates (e.g. same campaign, different strategy), create two separate campaigns.
There's a default catalog seeded for every new account ("Scheduled callback" / "No answer" / "Busy" / "Rejected" / ...). Customers can add new dispositions via the API or Admin Console.
Subscribe to telesales.call.disposed — it fires immediately after the agent sets the outcome.
Recommended default: B for > 1,000 calls/day.
Tier B ships a pre-rendered vi-VN-female-01 for Vietnamese. Tier A has more voices through the premium TTS vendor — list them with GET /api/autocall/voices.
Subscribe to autocall.lead.dtmf_pressed — it fires every time the caller presses a key. The payload includes digit, lead_id, and script_id.
Check in this order:
failed / deadletter?curl https://your-url/)?No. Zorio retries when the receiver returns non-2xx or times out. The receiver MUST dedupe by X-Zorio-Delivery (UUID).
Events still in the retry queue go to the new URL after the update. Events already in deadletter are not retried automatically — an admin needs to replay them manually.
Chrome 88+, Edge 88+, Firefox 78+, Safari 14+. IE11 is NOT supported.
The page hosting the iframe MUST be HTTPS. The webphone iframe must also be HTTPS. If an HTTP page embeds an HTTPS iframe — the browser blocks it for security.
SDK v7+ has auto-reconnect + re-register supervisor. If you still lose registration:
events log for an auto_reconnect emission.The SDK ships with a default vanilla-DOM UI. To customize:
:root variables.renderer: 'headless' — the SDK only emits events and you render your own UI.Yes. Default 60 req/min/token across endpoints, with click-to-call capped at 10 req/min. Exceed → HTTP 429 with a Retry-After header.
Currently there's only v1 (the current URLs). When a breaking change ships, /api/v2/... will run alongside it. The roadmap announces breaking changes at least 6 months in advance.
The OpenAPI spec is in preparation — it will be published at /openapi/ in Phase 2.
Zorio servers are hosted in Vietnam (HCMC + Hanoi). Deploying a receiver in the same Vietnam region keeps webhook latency under 50ms.
X-Request-Id (if available) or call_uuid + timestamp.