Built on Meta's official WhatsApp Cloud API
WhatsApp verification codesfor Iraqi businesses
Send login codes (OTP) and order notifications to your customers on WhatsApp with a single API call. A wallet in Iraqi dinars, and you only pay for each message sent.
No monthly subscription — top up your wallet and start sending.
Features
Everything you need for reliable messaging
Built for business systems: simple to integrate, clear to account for, and secure in the details.
OTP out of the box
We generate, send and verify the code for you: code length, expiry and attempt limits.
Template notifications
Send order, appointment and invoice updates with approved WhatsApp templates and your own variables.
Wallet in Iraqi dinars
A prepaid IQD balance, with every transaction recorded alongside the balance after it. No billing surprises.
Status of every message
Follow a message from sent to delivered and read, through the API or an instant webhook.
Safe retries
Send the same reference twice and get the same message back — no duplicate send, no duplicate charge.
Automatic refunds
If Meta rejects a message or reports it failed later, its cost goes straight back to your balance.
How it works
Start sending in three steps
Create your account
Register your company and get your own API key from the dashboard.
Top up your wallet
Add balance in Iraqi dinars; each message is charged only when it is sent.
Send from your system
Call the API from your app or website and the message reaches your customer's WhatsApp in seconds.
For developers
Two calls: send the code, then verify it
A simple JSON REST API. We keep the code hashed and verify it for you.
curl -X POST https://api.message-hub.cloud/api/v1/otp/send \
-H "Authorization: Bearer $MESSAGEHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"phone": "07701234567", "length": 6, "expires_in": 5, "reference": "login-123"}'const res = await fetch('https://api.message-hub.cloud/api/v1/otp/send', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.MESSAGEHUB_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ phone: '07701234567', length: 6, expires_in: 5, reference: 'login-123' }),
})
const { data } = await res.json()
const otpId = data.id$res = Http::withToken(env('MESSAGEHUB_KEY'))
->post('https://api.message-hub.cloud/api/v1/otp/send', [
'phone' => '07701234567',
'length' => 6,
'expires_in' => 5,
'reference' => 'login-123',
]);
$otpId = $res->json('data.id');curl -X POST https://api.message-hub.cloud/api/v1/otp/verify \
-H "Authorization: Bearer $MESSAGEHUB_KEY" \
-H "Content-Type: application/json" \
-d '{"id": "9d3c8f2e-…", "code": "482913"}'const res = await fetch('https://api.message-hub.cloud/api/v1/otp/verify', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.MESSAGEHUB_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ id: otpId, code: userInput }),
})
const { data } = await res.json()
if (data.valid) signIn()$res = Http::withToken(env('MESSAGEHUB_KEY'))
->post('https://api.message-hub.cloud/api/v1/otp/verify', [
'id' => $otpId,
'code' => $request->input('code'),
]);
if ($res->json('data.valid')) {
Auth::login($user);
}Trust & security
Secure by design
Your messages and your customers' data travel only through official channels, with every detail accounted for.
Meta's official API
We send through Meta's WhatsApp Cloud API directly — no personal numbers, no unofficial workarounds.
Hashed OTP codes
We never store or log the code; we keep only a hash of it for verification.
Per-message billing
You pay for each message actually sent, and failed ones are refunded to your balance automatically.
Signed webhooks
Every notification we send to your system carries an HMAC-SHA256 signature with your own secret.
FAQ
Questions we hear often
What is MessageHub?
An Iraqi platform for business WhatsApp messages — verification codes (OTP) and notifications — sent through Meta's official WhatsApp Cloud API, with an API key and a wallet in Iraqi dinars.
How does billing work?
You top up your wallet in Iraqi dinars and each message is charged when it is sent. There is no monthly subscription, and any message Meta rejects is refunded to your balance automatically.
Do I need my own WhatsApp number?
No, you can start right away from our verified number. If you want messages to arrive under your company's name, we help you connect your own number.
What happens when my balance runs out?
The request is refused with 402 (insufficient_balance) and nothing is sent, so no debt builds up. Top up and carry on.
Are the codes secure?
Yes. We never store or log the OTP; we keep only its hash, with an expiry time and a limit on attempts.
Which programming languages can I use?
Any language that can make an HTTP request: PHP, JavaScript, Python, Java and more. The docs include ready-made examples.
How do I contact you?
On WhatsApp — tap the WhatsApp button at the bottom of the page and our team will reply.
Ready to send your first verification code?
Create your account now and get an API key in minutes.