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.
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
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
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.
3,000
messages on 75,000 IQD
25 dinar per message
Gmail / Email
5,000
messages on 75,000 IQD
15 dinar per message
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
0
All time on this server
Verified
0
0% of completed attempts
0
WhatsApp channel
Gmail
0
Gmail / email channel
SIM
0
Asiacell 0 · Korek 0 · Zain 0
Pending
0
Active users
0
Active API keys
0
How the system works
Authenticate
Every request sends Authorization: Bearer otp_live_… from your dashboard API key.
HEADER
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
Deliver code
WhatsApp, Gmail, or Iraqi SIM (Asiacell, Korek, Zain) delivers the code. Response includes request_id, cost, balance, and expires_in.
Response JSON
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
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 & support
Talk to us where your users already are
Chat with our team on WhatsApp for onboarding, integration help, or volume pricing.
Open WhatsApp chatIntegration
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.