Channels and billing
Channel order
VERYO picks the channel. The cheapest enabled channel is tried first: Telegram, then WhatsApp, then SMS. If a channel does not deliver the code, the session moves to the next, more expensive one. The code stays the same.
The starting channel is determined as follows:
options.preferred_channelfrom the request, if that channel is enabled.- The channel that delivered a code to this number in your account, if the number was verified in the last 30 days.
- The cheapest enabled channel.
The cascade only moves toward more expensive channels. A request with preferred_channel: "sms" will not fall back to Telegram, even if the SMS does not get through.
When a code counts as delivered
| Channel | Delivered | Moves to the next channel |
|---|---|---|
| Telegram | Status “delivered” or “read” | The number has no Telegram, an error occurred, or no confirmation arrived in the allotted time |
| Delivery report | An error occurred or no report arrived in the allotted time | |
| SMS | Carrier delivery report | There is no next channel; the session ends as failed |
A messenger has about 10 seconds to confirm delivery. If the carrier accepted an SMS but no report arrives within 15 seconds, the SMS counts as delivered and is charged: carrier reports are often late.
What you pay for
You are charged only the price of the channel that delivered the code. Attempts that did not get through are not charged. Current prices are on the pricing page.
Requesting a code requires a balance that covers the most expensive channel, SMS; otherwise the API returns 402 insufficient_balance. The amount actually charged is the price of the channel that delivered the code.
Amounts in the API are in tiyn: *_tiyn fields, 1 ₸ = 100 tiyn. *_kzt fields are in tenge.
You can top up your balance by invoice in the dashboard. The daily spending limit and the low-balance alert are configured in the Alerts & limits section.