How it works
Prelude partners with many to guarantee the highest possible delivery rate at the lowest possible cost. We also use multiple to reach your users thanks to our routing engine which compares all available routes and selects the best one for each individual user. Prelude is constantly keeping and updating statistics on the conversion rate for each provider/channel pair. To measure these rates, we send a unique OTP for each attempt (retry). This helps us pinpoint exactly which provider/channel pair successfully converted the user.For example, if your user is in an area with poor cellular network coverage
and has an Android phone, Prelude could give priority to RCS or WhatsApp
rather than SMS to deliver the OTP as these channels are known to be more
likely able to reach the user
Retries and fallback
When an attempt fails to deliver, or when your user requests a new code, Prelude creates a new attempt on the next best available route — ranked by the same cost and conversion criteria — while excluding routes already tried in this verification. Because routing is decided per attempt across every available route, a retry is not guaranteed to change channels. The next route may be a different provider on the same channel or a different channel entirely, depending on which one ranks best at that point. For example, an undeliverable WhatsApp attempt is followed by whichever route ranks best next, which may be another non-SMS route rather than SMS. Each non-SMS channel (such as WhatsApp, RCS, Viber, Telegram or Zalo) is used at most once within a verification. SMS is the exception: it can be attempted multiple times across retries, on different providers. If you want a specific channel to be prioritized, setpreferred_channel on your request. Prelude prioritizes that channel on the first attempt and keeps preferring it on retries while an untried route on that channel remains; once those are exhausted, retries fall back to the next best available route.
To restrict the channels themselves rather than only their priority, set channels instead: it lists the channels the verification may use, in the order they are tried. Omitted channels are never used, so retries never fall back to them. Unlike preferred_channel, channels is only read on the request that creates the verification: the list is recorded on the verification and applies for its whole lifecycle, so sending channels on a retry has no effect. Every channel you list must be active in the destination country, otherwise the request is rejected. The two options are mutually exclusive. channels is disabled by default; contact support to enable it.
Strategic Trade-offs
You can configure the routing engine to better fit your needs using Strategic Trade-offs. Strategic Trade-offs are a set of 3 options that you can use to configure the routing engine per country: prioritize price, balanced, and prioritize conversion.- prioritize price will prioritize less expensive at the expense of conversion rate.
- balanced will try to find the best compromise between cost and conversion rate.
- prioritize conversion will give priority to the with the highest conversion rate, even if it means paying a bit more.
We recommend using the default
balanced option for most use cases and
selecting conversion for countries that are important to you. The cost
option can be used for cost reduction.