View a KYC document on file
Stream a document backing a reusable verification (the documentId
values from GET /v1/phone-numbers/kyc reusable.options[].details[]), so
the account holder can see what's on file before reusing it. Returned
inline as application/pdf (uploads are normalized to PDF). Auth-scoped:
a document is viewable only when its id is referenced by one of the
caller's own numbers — otherwise 404.
API key authentication - use your Zernio API key as a Bearer token
In: header
Path Parameters
The Telnyx document id (from reusable.options[].details[].documentId).
Response Body
application/pdf
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.phonenumbers.viewPhoneNumberKycDocument({ path: { documentId: 'document_abc123', },});console.log(data);"string"{
"error": "string",
"type": "invalid_request_error",
"code": "string",
"param": "string",
"platform": "string",
"platformError": {},
"details": {}
}{
"error": "Unauthorized"
}Pre-validate KYC address POST
Optional early check for the address step of a Tier 4 (end-user identity) registration: validates a postal address for deliverability BEFORE the full KYC submit, so it can be corrected before any documents are uploaded. The full submit (POST /v1/phone-numbers/kyc) re-validates the address, so this call is purely a fast feedback path and skipping it is safe. Only the postal address is sent (no documents, no gov-ID fields). A region (`administrative_area`) is required by the validator; when it is omitted the pre-check is skipped and `{ ok: true, skipped: true }` is returned (the final submit still validates).
List all calls (unified history) GET
Unified call history across ALL of your numbers: both channels (WhatsApp Business Calling + regular phone/PSTN), inbound and outbound, newest first. Unlike `GET /v1/voice/calls` (PSTN-only) and `GET /v1/whatsapp/calls` (one account at a time), this endpoint needs no `accountId` and never requires fanning out one request per number. Any row can be opened channel-agnostically via `GET /v1/calls/{id}` and `GET /v1/calls/{id}/recording`; no branching on `channel` needed. When the counterparty number matches a CRM contact, `contactId` and `contactName` are set. Cursor pagination: pass the returned `nextCursor` as `before` to fetch the next page. `nextCursor` is null on the last page.