Failover endpoints — which API to use
Routee provides three send APIs for multi-channel Failover. They share the same idea — ordered steps, failover when a channel does not succeed — but differ in what you can put on Viber steps, which channels are supported, and how you track results.
Use this page to pick the right endpoint before you integrate.
Quick decision guide
| Your message is… | Use this API |
|---|---|
| A one-time password (login, payment, recovery) with Viber OTP templates and optional SMS backup | Failover OTP |
| A transactional notification (order update, appointment reminder, …) with approved Rakuten BM templates on Viber, plus Sms/Voice fallback | Transactional Failover |
| Promotional or rich session Viber (free text, image, button, file, video) plus Sms and/or Voice fallback | Standard Failover |
July 1, 2026: Template-based transactional Viber in Failover must use
POST /failover/transactional, not the standard endpoint.
All send endpoints at a glance
| API | Method & path | Base URL |
|---|---|---|
| Standard Failover | POST /failover | https://connect.routee.net |
| Transactional Failover | POST /failover/transactional | https://connect.routee.net |
| Failover OTP | POST /failover-otp/otp/send-failover | https://connect.routee.net/failover-otp |
API reference: Standard · Transactional · OTP
How-to guides: Standard · Transactional
Side-by-side comparison
| Standard Failover | Transactional Failover | Failover OTP | |
|---|---|---|---|
| When to use | Marketing, rich Viber session messages, campaigns | Compliant transactional Viber (BM templates) + fallback | OTP / verification codes only |
| Viber step type | Free-form message (text, media, action, file, …) | BM template fields only (templateId, templateLang, templateParams) | ViberOtp step (templateId, pin, templateType, …) |
| Sms in flow | Yes | Yes | Yes |
| Voice in flow | Yes | Yes | No |
| Service | Routee Failover | Routee Failover (same service) | Failover OTP (dedicated service) |
| Create response id | trackingId | trackingId + flowKind: transactional | flowId (UUID) |
| Tracking | GET/POST …/failover/tracking | Same URLs; filter by flowKind: transactional | GET …/failover-otp/otp/failover/{id} |
| Callbacks | callback.strategy + callback.url; payload includes flowKind | Same as standard | Optional callback.url; OTP tracking JSON shape |
| Auth | Bearer + Routee roles (MT_ROLE_FAILOVER, channel roles) | Same as standard | Bearer (Routee access token) |
Standard Failover
Endpoint: POST https://connect.routee.net/failover
Choose this when you send promotional or session Viber content — text, images, action buttons, files, or video — and want Sms and/or Voice as backup channels.
Typical scenarios
- Abandoned-cart reminder: Viber rich message → SMS if undelivered
- Promotional offer with image and CTA → Voice call as last step
- Session-style Viber chat notifications with free-form body
Viber rules
- Use the
messageobject (text,imageUrl,action, etc.) - Do not send BM transactional template fields — they are rejected (400)
Not for: OTP codes (use Failover OTP) or BM transactional templates (use Transactional Failover).
Transactional Failover
Endpoint: POST https://connect.routee.net/failover/transactional
Choose this when Viber steps must use approved Rakuten BM transactional templates (compliance), and you may still fall back to Sms or Voice.
Typical scenarios
- Order shipped / delivered notification with approved template → SMS backup
- Appointment reminder (template) → Voice if Viber expires
- Account alert that must not use promotional Viber formatting
Viber rules
- Required:
templateId,templateLang,senderInfoTrackingId - Optional:
templateParams,deliveryScope,seq - Free-form Viber
messageand clientlabelare rejected (400)
Prerequisite: Rakuten Viber transactional templates
Not for: OTP with Viber OTP templates (use Failover OTP) or promotional rich media (use Standard Failover).
Failover OTP
Endpoint: POST https://connect.routee.net/failover-otp/otp/send-failover
Choose this when the payload is a verification code delivered via Viber OTP templates and/or SMS — not general notifications or promotional Viber.
Typical scenarios
- Login / 2FA: ViberOtp first → SMS if Expired / Failed / Undelivered
- Password reset with dedicated OTP templates
- Payment confirmation code with optional SMS fallback
Flow step types
ViberOtp—senderInfoTrackingId,templateId,pin, optionaltemplateTypeand related fieldsSms—message.body(and optionalfrom)
Differences from Standard / Transactional
- Separate service and base URL (
/failover-otp) - No Voice steps
- Tracking uses
flowIdand/failover-otp/otp/failover/…(not/failover/tracking) - Template list:
GET /failover-otp/otp/templates
Not for: Marketing messages, BM transactional notifications, or Voice failover.
Standard vs Transactional (same Failover service)
Both use https://connect.routee.net, the same tracking URLs, and the same callback model. Only Viber step shape differs:
| Rule | POST /failover | POST /failover/transactional |
|---|---|---|
Viber message (text, media, action) | Allowed | Rejected (400) |
Viber templateId / templateLang / templateParams | Rejected (400) | Required on Viber steps |
Client Viber label | Optional | Rejected (400) |
flowKind in response / callbacks | standard | transactional |
Sending the wrong shape to the wrong endpoint always returns 400 — the APIs are intentionally strict so compliant traffic uses the right path.
Scenario examples
| Business need | Recommended API | Example flow |
|---|---|---|
| “Your code is 847291” for app login | Failover OTP | ViberOtp (pin) → Sms |
| “Your order #1234 has shipped” (approved BM template) | Transactional Failover | Viber (template) → Sms |
| “Flash sale — 50% off today” with Viber image + button | Standard Failover | Viber (message + imageUrl + action) → Sms |
| OTP + Voice reminder (unsupported) | Failover OTP for OTP only; Voice is not available on OTP API | ViberOtp → Sms only |
| Transactional template + Voice call if Viber fails | Transactional Failover | Viber (template) → Voice |
Tracking & callbacks (summary)
| API | Track a single flow | Search / list | Webhooks |
|---|---|---|---|
| Standard | GET /failover/tracking/{trackingId} | POST /failover/tracking | Optional; see Callbacks |
| Transactional | Same as standard | Same; use flowKind: transactional filter | Same; flowKind in payload |
| Failover OTP | GET /failover-otp/otp/failover/{flowId or token} | GET /failover-otp/otp/failover?… | Optional callback.url on create |
Full endpoint list: Resource Overview
Related documentation
| Topic | Page |
|---|---|
| Failover overview | Failover |
| Standard how-to | How to send a Failover message |
| Transactional how-to | How to send a transactional Failover message |
| Callbacks | Callbacks (Webhook) |
| Status codes | Failover Statuses |

