The message moves from submitted to delivered, then the batch closes.
notif.Messages, OTP, and Virtual Numbers.
MESSAGES DELIVERED. STATUS CONFIRMED.
Send SMS and WhatsApp campaigns, verify users with OTP, and rent Virtual Numbers to receive codes from other services. One account and one balance, with APIs for SMS, WhatsApp, and OTP.
NewVirtual numbers can now forward codes to your WhatsApp deviceHow it works
Three steps from a recipient list to a delivery report.
Pick a service
Choose what fits the job: SMS and WhatsApp for campaigns, OTP for verification, Virtual Numbers for receiving codes from other services.
- SMS, RCS, and MMS from a single composer
- OTP over SMS or WhatsApp
- Numbers catalogued by country and platform
Quickstart
Send your first OTP through the API, or run everything from the dashboard.
const response = await fetch( `${process.env.NOTIF_API_URL}/api/v1/otp/sms/send`, { method: "POST", headers: { Authorization: `Bearer ${process.env.NOTIF_TOKEN}`, "Content-Type": "application/json", "Idempotency-Key": "login-2026-11-07-001", }, body: JSON.stringify({ recipient: "081234567890", template: "Your notif code: {otp}. Valid for 5 minutes.", ttl: 300, }), },);const result = await response.json();$response = Http::withToken(config('services.notif.token')) ->withHeaders(['Idempotency-Key' => 'login-2026-11-07-001']) ->post(config('services.notif.url').'/api/v1/otp/sms/send', [ 'recipient' => '081234567890', 'template' => 'Your notif code: {otp}. Valid for 5 minutes.', 'ttl' => 300, ]);$response->throw();curl -s -X POST "$NOTIF_API_URL/api/v1/otp/sms/send" \ -H "Authorization: Bearer $NOTIF_TOKEN" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: login-2026-11-07-001" \ -d '{ "recipient": "081234567890", "template": "Your notif code: {otp}. Valid for 5 minutes.", "ttl": 300 }'Run it all from the browser
Watch batches, orders, balance, and API tokens without writing code. The statuses match what the REST endpoints return.
Open the dashboardCreate a token first on the API Tokens page. Full documentation lives at /docs.
Services
Four core services, plus a prepaid balance and APIs for SMS, WhatsApp, and OTP.
SMS Marketing
Upload a list of numbers, write messages with merge tags, and send SMS, RCS, or MMS now or on a schedule.
WhatsApp Marketing
Connect your own device, send in batches, pause a session, and resend messages that failed.
OTP API
Send codes over SMS or WhatsApp, verify through the same endpoint, and follow the status of every request.
Virtual Numbers
Find a number by country, platform, and carrier to receive OTPs from other services.
Prepaid Balance
Top up, check rates before sending, and reconcile every charge against an invoice or batch.
API and Webhooks
Bearer tokens scoped per service, Idempotency-Key support, and HMAC-signed batch webhooks.
Channels and integrations
Message channels, API endpoints, and payment gateways available on a notif account.
Events and statuses
Sample events and statuses from the API contract, not customer data.
The batch is sending. Remaining messages go out in stages until it finishes.
The response includes Retry-After, so you know when it is safe to try again.
Reusing a key with a different body is rejected so batches never double up.
The payload is checked against HMAC before your app processes it.
A WhatsApp batch can pause and resume from where it stopped.
The batch is queued and waiting for sending to start.
Every message is processed and the final batch status is on record.
Guides
Send, verify, and track OTP across two channels
Request flow, HMAC hashing, expiry, attempt limits, and the same verification example for SMS and WhatsApp.
Check the signature before trusting a batch status
The sms.batch.updated and whatsapp.batch.updated events, the X-Webhook-Signature header, and how to verify the raw body.
Frequently asked questions
How do I send my first SMS?
Create an account, top up your balance, and open the SMS workspace. Upload numbers from TXT, CSV, or XLSX, write the message, check the segment estimate, then start the batch.
Can I send OTP over WhatsApp?
Yes. Create the request with /api/v1/otp/whatsapp/send and verify it through /api/v1/otp/verify using the whatsapp channel.
How do virtual number statuses update?
Partner webhooks are verified against a shared secret first. On a match, the order moves to OTP_RECEIVED and the code appears in your dashboard or forwards to your WhatsApp device.
Which payment methods are available?
Whatever gateways are active on your account: Midtrans, Xendit, DOKU, or USDT through NOWPayments. The balance page only lists methods that are already configured.
Is the API fully documented?
Yes, at /docs: authentication, endpoints, limits, and error codes. The complete contract with response examples lives in the app documentation.
Ready to start with a single message?
Create an account, top up, and send your first campaign or OTP. Every status is visible from the dashboard or the API.