OTPsignal

OTPsignal · OTP API

One API for every OTP

Verify users over WhatsApp (25 dinar / msg), Gmail (15 dinar / msg), and Iraqi SIM — Asiacell, Korek, Zain (60 dinar / msg). Top up credits, send OTPs, and only pay for what you deliver.

Pricing

Simple per-message rates

Top up at least 75,000 dinar into one wallet. WhatsApp costs 25 dinar, Gmail costs 15 dinar, and SIM OTP (Asiacell, Korek, Zain) costs 60 dinar per message. Those three networks are one service — one message, any of them. Mix channels from the same wallet; you do not receive every total at once.

WhatsApp

WhatsApp

25 dinar

per verified message

  • · Instant delivery to WhatsApp
  • · 75,000 dinar covers up to 3,000 WhatsApp messages
  • · Deducted from your wallet balance
Gmail / Email

Gmail / Email

15 dinar

per verified message

  • · Works with Gmail and any email
  • · 75,000 dinar covers up to 5,000 Gmail / Email messages
  • · Deducted from your wallet balance
AsiacellKorekZain

SIM OTP

Asiacell · Korek · Zain

60 dinar

per verified message

  • · Asiacell, Korek, and Zain — one SIM service, one price
  • · 75,000 dinar covers up to 1,250 SIM messages
  • · Deducted from your wallet balance

Cost meter

What this wallet can send

Enter dinar. WhatsApp 25 dinar · Gmail 15 dinar · SIM (Asiacell, Korek, Zain) 60 dinar per message. Minimum purchase 75,000 dinar. Mix splits the same wallet across WhatsApp, Gmail, and SIM. The three SIM networks share one slice, not three.

You receive dinar wallet credit. Counts below are estimates only — each successful send deducts its unit price. Failed sends are not charged.

WhatsApp

WhatsApp

3,000

messages on 75,000 IQD

25 dinar per message

Gmail / Email

Gmail / Email

5,000

messages on 75,000 IQD

15 dinar per message

AsiacellKorekZain

SIM OTP

Asiacell · Korek · Zain

1,250

messages on 75,000 IQD

60 dinar per message

You pay

75,000 dinar

Platform

Data, flow, and use cases

Live stats from your OTP database, how send and verify work end to end, and real integration patterns teams run in production.

Live platform data

Real counts from your OTP database — messages sent, verification outcomes, and active workspaces on this instance.

OTPs sent

27

All time on this server

Verified

8

100% of completed attempts

WhatsApp

8

WhatsApp channel

Gmail

4

Gmail / email channel

SIM

15

Asiacell 3 · Korek 9 · Zain 3

Pending

19

Active users

11

Active API keys

6

How the system works

01

Authenticate

Every request sends Authorization: Bearer otp_live_… from your dashboard API key.

HEADER

02

Send OTP

POST /api/otp/send with recipient, channel (whatsapp | email | asia | korek | zain), and optional purpose. Balance is charged in IQD dinar per message.

POST /api/otp/send

03

Deliver code

WhatsApp, Gmail, or Iraqi SIM (Asiacell, Korek, Zain) delivers the code. Response includes request_id, cost, balance, and expires_in.

Response JSON

04

Verify OTP

POST /api/otp/verify with recipient, otp, and request_id. Status moves from pending → verified.

POST /api/otp/verify

API reference

POST/api/otp/send

Request

{ "recipient": "+1...", "channel": "whatsapp", "purpose": "login" }

Response

{ "success": true, "request_id": 42, "expires_in": 300, "cost_iqd": 25 }

POST/api/otp/verify

Request

{ "recipient": "+1...", "otp": "847291", "request_id": 42 }

Response

{ "success": true, "message": "OTP verified" }

GET/api/dashboard

Request

Session cookie (logged-in user)

Response

{ "balance_iqd": 3860, "keys": [...], "recent_otps": [...] }

Production use cases

Where teams deploy OTPsignal

Finance

99.97% delivery rate

Banking Login OTP

Gulf Bank

Secure one-time codes for retail banking apps with sub-2s WhatsApp delivery.

WhatsAppEmail

Volume

850K OTPs / month

Go-live

Live in 2 weeks

How it works

  1. 1User enters phone on banking app login screen
  2. 2App calls POST /api/otp/send with channel whatsapp
  3. 3User receives 6-digit code and enters it
  4. 4App calls POST /api/otp/verify → session unlocked

Typical API payload

{ "recipient": "+1...", "channel": "whatsapp", "purpose": "bank_login" }
  • Sub-2s delivery for login flows
  • Device fingerprinting on verify
  • Real-time fraud throttling
  • Audit logs for compliance teams

REST API · Webhooks · SDK-ready

Retail

34% fewer abandoned carts

E-commerce Checkout

Souq Market

Frictionless purchase verification across SMS and WhatsApp for high-volume stores.

WhatsAppEmailSMS fallback

Volume

1.2M checkout verifications

Go-live

Peak season ready

How it works

  1. 1Customer reaches checkout confirmation step
  2. 2Store backend sends OTP before payment capture
  3. 3Code delivered via WhatsApp or email
  4. 4Verify success unlocks payment and order creation

Typical API payload

{ "recipient": "buyer@email.com", "channel": "email", "purpose": "checkout" }
  • Cart recovery OTP nudges
  • Multi-channel failover
  • Localized message templates
  • Webhook on verify success

Shopify · Custom checkout · Mobile apps

Mobility

2.1M OTPs / month

Ride-Hailing Driver Auth

CityRide

Driver identity checks with rotating OTP windows and anti-abuse throttling.

WhatsApp

Volume

2.1M driver checks / month

Go-live

24/7 operations

How it works

  1. 1Driver opens app at shift start
  2. 2Dispatch API triggers OTP to registered number
  3. 3Driver enters code within 5-minute window
  4. 4Verified status enables trip acceptance

Typical API payload

{ "recipient": "+1...", "channel": "whatsapp", "purpose": "driver_auth" }
  • Rotating OTP windows
  • Anti-abuse rate limits
  • Geo-aware delivery rules
  • Driver session hardening

Driver app · Dispatch API · Admin console

Health

Zero missed confirmations

Healthcare Appointment Confirm

MedLink Clinics

Patient confirmation flows with bilingual templates and audit trails.

WhatsAppEmail

Volume

180K appointments / month

Go-live

Clinic rollout in 5 days

How it works

  1. 1Clinic schedules appointment in portal
  2. 2System sends confirm OTP to patient contact
  3. 3Patient replies with code via app or SMS link
  4. 4Appointment marked confirmed in EHR

Typical API payload

{ "recipient": "+1...", "channel": "whatsapp", "purpose": "appointment" }
  • Appointment confirm + reschedule
  • Patient-friendly copy
  • Delivery status dashboard
  • HIPAA-friendly logging options

Patient portal · EHR integrations

Public Sector

ISO-aligned audit trail

Government Service Portal

NatServe

Citizen verification with multi-channel failover and compliance logging.

WhatsAppEmailSMS fallback

Volume

3.4M citizen verifications

Go-live

Nationwide portal

How it works

  1. 1Citizen logs into government portal
  2. 2Portal requests OTP for step-up authentication
  3. 3Code sent with failover if primary channel fails
  4. 4Verify logs immutable audit entry for compliance

Typical API payload

{ "recipient": "citizen@email.com", "channel": "email", "purpose": "portal_login" }
  • Multi-channel failover
  • Immutable audit trail
  • Role-based admin access
  • High-availability routing

Citizen portal · Legacy SSO bridge

SaaS

Integrated in 3 days

SaaS Team Invite Flow

StackForge

Invite and 2FA OTP pipeline for B2B platforms with webhook callbacks.

EmailWhatsApp

Volume

420K team invites / quarter

Go-live

Integrated in 3 days

How it works

  1. 1Admin invites teammate from SaaS dashboard
  2. 2Invite email contains OTP for account activation
  3. 3New user verifies and sets password
  4. 4Workspace access granted via verify callback

Typical API payload

{ "recipient": "dev@company.com", "channel": "email", "purpose": "team_invite" }
  • Invite + 2FA in one pipeline
  • Webhook callbacks on verify
  • Workspace-scoped API keys
  • Self-serve usage analytics

B2B SaaS · SCIM-ready auth layer

Platform

Three steps to verified users

01

Create your workspace

Sign up with 0 dinar, request balance from admin, generate an API key, and choose WhatsApp, Gmail, or SIM (Asiacell, Korek, Zain).

02

Send an OTP

Hit our REST endpoint. WhatsApp 25 dinar, Gmail 15 dinar, SIM 60 dinar — deducted instantly.

03

Verify in your app

Confirm the code through the verify API and unlock login, checkout, or account recovery.

WhatsApp messaging on a phone

WhatsApp & support

Talk to us where your users already are

Chat with our team on WhatsApp for onboarding, integration help, or volume pricing.

Open WhatsApp chat

Integration

Connect in three API calls

Copy working send and verify examples below. Replace the API key with yours from the dashboard — WhatsApp, Gmail, and SIM channels use the same endpoints.

POST/api/otp/send

<?php
$apiKey = "otp_live_YOUR_API_KEY";
$url = "https://otpsignal.com/api/otp/send";

$payload = [
    "recipient" => "+9647515171795",
    "channel"   => "whatsapp",
    "purpose"   => "login",
];

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer " . $apiKey,
        "Content-Type: application/json",
        "Accept: application/json",
    ],
    CURLOPT_POSTFIELDS     => json_encode($payload),
    CURLOPT_TIMEOUT        => 30,
]);

$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);
if ($code >= 400) {
    throw new Exception($data["error"] ?? "Send failed");
}

echo $data["request_id"] . " " . $data["cost_iqd"] . " " . $data["balance_iqd"];

Response

{
  "success": true,
  "request_id": 42,
  "channel": "whatsapp",
  "recipient": "+9647515171795",
  "cost_iqd": 25,
  "balance_iqd": 3825,
  "currency": "IQD",
  "expires_in": 300,
  "delivered_via": "whatsapp-web",
  "message": "OTP sent via WhatsApp"
}

Step 1

Get your API key

Create a workspace, request balance, then generate a key from the dashboard.

Step 2

Send an OTP

POST /api/otp/send with recipient, channel (whatsapp, email, asia, korek, or zain), and optional purpose. Same JSON from PHP, Node, Python, or any HTTP client.

Step 3

Verify the code

POST /api/otp/verify with recipient, otp, and request_id from the send response.

Contact

Need help integrating?

Share your stack and expected OTP volume. We will map the right channel mix and send API credentials the same day.