Branded Calling

Create a caller identity

A caller identity is what the callee sees: display name, logo and call reasons, backed by a registered business and three references the carrier vetting team phones. It starts in Zernio review (requested). Once approved, the carrier emails the authorizer a 6-digit code; confirm it with the verify-email endpoint and the identity goes into carrier vetting on its own. Track it with GET or the branded_calling.identity.status_updated webhook.

Billing: $100 per identity per month, the first month charged when the identity is filed with the carrier and not refunded if the carrier rejects it, then monthly while the identity exists. Branded calls add $0.10 each, counted on every outbound call from a verified branded number to a US destination (whether or not the callee's carrier displayed the branding); the surcharge shows as brandedCallUSD on the call's billing and in GET /v1/voice/calls/estimate when you pass from.

Run POST /v1/branded-calling/identities/preflight with the same body first to catch what the review would bounce. Send an Idempotency-Key so a retry replays the original response instead of creating a second identity.

post/v1/branded-calling/identities

Headers

Idempotency-Keystring

Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.

Request body

enterpriseIdstring required

A business from POST /v1/branded-calling/enterprises.

displayNamestring required

Shown on the callee's screen. No emoji.

callReasonsstring[] required

1 to 10 reasons you call, each up to 64 characters. Pick from GET /v1/branded-calling/call-reasons to skip manual vetting.

logoUrlstring

HTTPS URL of a PNG, JPEG, WebP or SVG logo. Zernio converts it to the 256x256 BMP the carriers require and hosts it.

Response

Identity created, in review.

idstring
enterpriseIdstring
displayNamestring
callReasonsstring[]
callReasonsPreApprovedboolean

Every call reason matches the carrier catalogue (GET /v1/branded-calling/call-reasons); anything else is vetted by hand and takes longer.

logoUrlstring nullable

The image you sent. Zernio hosts the 256x256 BMP the carriers require.

status'requested' | 'changes_requested' | 'rejected' | 'pending_email_verification' | 'in_review' | 'verified' | 'suspended' | 'expired' | 'permanently_rejected'

requested = in Zernio review; changes_requested = answer the review (PATCH); pending_email_verification = confirm the code emailed to the authorizer; in_review = with the carrier vetting team; verified = attach numbers; rejected = fix and PATCH to resubmit; suspended = an infringement claim is open; expired = the yearly verification lapsed; permanently_rejected = terminal.

reviewNotestring nullable

The open change request, as text.

emailVerifiedAtstring date-time nullable
submittedAtstring date-time nullable
verifiedAtstring date-time nullable
expiringAtstring date-time nullable

Verification lasts one year; Zernio resubmits 30 days before this date.

createdAtstring date-time nullable
updatedAtstring date-time nullable

Changes

Changed in 2 of the 61 revisions of this API.2