Skip to main content

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 device
4Services
3Message types
30Import files
120Requests / minute

How 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.

REQUEST EXAMPLE / API V1
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();

Create 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.

Channels and integrations

Message channels, API endpoints, and payment gateways available on a notif account.

SMSRCSMMSWhatsAppOTPVirtual NumbersREST APIWebhooksMidtransXenditDOKUNOWPayments

Events and statuses

See event details →

Sample events and statuses from the API contract, not customer data.

DELIVEREDsms.batch.updated

The message moves from submitted to delivered, then the batch closes.

message: submitted → delivered

RUNNINGsms.batch.updated

The batch is sending. Remaining messages go out in stages until it finishes.

batch: running

RATE_LIMIT_EXCEEDEDHTTP 429

The response includes Retry-After, so you know when it is safe to try again.

limit: 120 / minute

IDEMPOTENCY_KEY_REUSEDHTTP 409

Reusing a key with a different body is rejected so batches never double up.

header: Idempotency-Key

SIGNEDsms.batch.updated

The payload is checked against HMAC before your app processes it.

header: X-Webhook-Signature

PAUSEDwhatsapp.batch.updated

A WhatsApp batch can pause and resume from where it stopped.

batch: paused

PENDINGwhatsapp.batch.updated

The batch is queued and waiting for sending to start.

batch: pending

COMPLETEDwhatsapp.batch.updated

Every message is processed and the final batch status is on record.

batch: completed

Guides

SMS MarketingCampaigns and importsWhatsAppSend from your deviceOTP APITwo-channel verificationVirtual NumbersCatalog and orders

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.

Read the full 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.