Skip to main content
Robase generates the code, sends it over SMS and/or WhatsApp, and checks what the user types. You store the id from send — never the code.

Delivery modes

Each workspace has an otp_delivery_mode: WhatsApp OTP uses a Meta Authentication template with a copy-code button. It is OTP delivery only — not general WhatsApp messaging. No silent fallback. A failed WhatsApp leg is refunded and reported failed; it is never re-sent as SMS unless the mode is both (two intentional legs) or the caller retries on a new send.

Send

Accept-Language changes error prose only, not the message body. Response status is always pending on success. The code is never returned. channel on the response reports which leg(s) were queued.

Verify

Comparison is constant-time. Verify is the same otp_id regardless of whether the user read the code from SMS or WhatsApp. GET /v1/otp/{id} returns status, lengths, and timestamps — never the code.

Rate limits

3 sends / 10 minutes and 10 verifies / 10 minutes per phone number.

Credits

SMS OTP uses the destination SMS rate from GET /v1/pricing. WhatsApp OTP uses the live whatsapp array on the same endpoint: ceil(cost_ngn * 1.20 / credit_price), minimum 1, from whatsapp_otp_costs + FX.

Delivery

Use otp.sent / otp.delivered / otp.failed webhooks or poll GET. Credits refund if a queued leg fails. Nigeria OTP SMS uses transactional routes so DND is not treated as a promo filter — DND.