API Documentation توثيق API بەڵگەنامەی API
https://wp.964.live
964Auth OTP API
Iraq's OTP delivery platform via WhatsApp & SMS. Simple REST API with automatic WhatsApp→SMS fallback, prepaid credit billing in Iraqi Dinar.
منصة إرسال رموز التحقق عبر واتساب وSMS في العراق. API بسيطة مع Fallback تلقائي ونظام رصيد مسبق بالدينار العراقي.
پلاتفۆرمی OTP لە عێراق ئێستا. API ی ئاسان بە Fallback ئۆتۆماتیک و سیستەمی کرێی پێشوەختی دینار عێراقی.
WhatsApp Cloud API
EasySendSMS
10 min expiryصلاحية 10 دقائق١٠ خولەک
IQD prepaid creditرصيد بالدينارکرێی دینار
3 attempts max3 محاولات٣ هەوڵ
Base URL: https://wp.964.live — Prepend to all endpoints Base URL: https://wp.964.live — أضفه قبل كل endpoint Base URL: https://wp.964.live — پێشی هەموو endpoint دابنێ
Authentication المصادقة دەستوەریپێدان
x-api-key: sk_live_...
Client operations — send OTP, verify, account info عمليات العميل — إرسال OTP، التحقق، معلومات الحساب کارەکانی کلیێنت — ناردنی OTP، پشتڕاستکردنەوە، زانیاری ئەکاونت
cURL
curl -X POST "https://wp.964.live/otp/send/auto" \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_abc123..." \
  -d '{"phone":"07XXXXXXXXX"}'
Send OTP — WhatsApp Only إرسال OTP — واتساب فقط ناردنی OTP — واتساپ تەنها
POST /otp/send/whatsapp API Key يحتاج API Key API Key پێویستە
Header: x-api-key: sk_live_...
Fieldالحقلخانە Typeالنوعجۆر Descriptionالوصفوەسف
phonestringRequiredPhone number — accepts 07XX or 9647XXرقم الهاتف — يقبل 07XX أو 9647XXژمارەی تەلەفۆن — 07XX یان 9647XX
metadataobjectOptionalExtra data saved with message logبيانات إضافية تُحفظ مع سجل الرسالةداتای زیادە کە لەگەڵ تۆماری نامەکە خەزن دەکرێت
cURL
curl -X POST "https://wp.964.live/otp/send/whatsapp" \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk_live_..." \
  -d '{
    "phone": "07XXXXXXXXX",
    "metadata": { "user_id": "123" }
  }'
200 OK
{
  "success": true,
  "msg_id": "msg_abc123...",
  "channel": "whatsapp",
  "fallback": false,
  "expires_in": 600,
  "balance_iqd": 935,
  "balance_usd": 0.0640
}
402 Insufficient Balance
{
  "success": false,
  "error": "INSUFFICIENT_BALANCE",
  "balance_usd": 0.001,
  "required_usd": 0.0445,
  "approx_remaining_messages": 0
}
Send OTP — SMS Plain OTP — SMS بدون Sender ID OTP — SMS سادە
POST /otp/send/sms Cheapest الأرخص ئەرزانترین
FieldالحقلخانەTypeالنوعجۆرDescriptionالوصفوەسف
phonestringRequiredPhone numberرقم الهاتفژمارەی تەلەفۆن
template_idstringOptionalDefault: otp_ar_shortالافتراضي: otp_ar_shortپێشکەوتوو: otp_ar_short
metadataobjectOptionalExtra metadataبيانات إضافيةداتای زیادە
cURL
curl -X POST "https://wp.964.live/otp/send/sms" \
  -H "x-api-key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"phone":"07XXXXXXXXX","template_id":"otp_ar_short"}'
Send OTP — SMS Branded OTP — SMS مع Sender ID OTP — SMS بە ناوی ناردەر
Sender ID rules: alphanumeric only, no spaces, max 11 chars — e.g. 964Auth قواعد Sender ID: أحرف وأرقام فقط، بدون مسافات، 11 حرف كحد أقصى — مثال: 964Auth ڕووکاری Sender ID: تەنها پیت و ژمارە، بێ بۆشایی، زیاتر لە ١١ پیت نابێت — بۆ نموونە: 964Auth
POST /otp/send/sms/branded API Keyيحتاج API KeyAPI Key پێویستە
FieldالحقلخانەTypeالنوعجۆرDescriptionالوصفوەسف
phonestringRequiredPhone numberرقم الهاتفژمارەی تەلەفۆن
sender_idstringOptionalSender name, default: 964Authاسم المرسل، الافتراضي: 964Authناوی ناردەر، پێشکەوتوو: 964Auth
template_idstringOptionalDefault: otp_arالافتراضي: otp_arپێشکەوتوو: otp_ar
cURL
curl -X POST "https://wp.964.live/otp/send/sms/branded" \
  -H "x-api-key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "07XXXXXXXXX",
    "sender_id": "964Auth",
    "template_id": "otp_ar"
  }'
Auto — WhatsApp → SMS Fallback Auto — واتساب ← SMS تلقائي ئۆتۆماتیک — واتساپ → SMS Fallback
Recommendedموصى بهپێشنیارکراو — Tries WhatsApp first, automatically falls back to SMS Branded on failure — يحاول واتساب أولاً، ويتحول تلقائياً لـ SMS Branded عند الفشل — یەکەم واتساپ تاقی دەکاتەوە، بە خۆی دەگۆڕێت بۆ SMS Branded ئەگەر شکستی هێنا
POST /otp/send/auto API Keyيحتاج API KeyAPI Key پێویستە
FieldالحقلخانەTypeالنوعجۆرDescriptionالوصفوەسف
phonestringRequiredPhone numberرقم الهاتفژمارەی تەلەفۆن
sms_template_idstringOptionalSMS template if fallback used — default: otp_arقالب SMS للـ fallback — الافتراضي: otp_arقاڵبی SMS بۆ fallback — پێشکەوتوو: otp_ar
sender_idstringOptionalSender ID for SMS fallbackSender ID لـ SMS الاحتياطيSender ID بۆ SMS Fallback
cURL
curl -X POST "https://wp.964.live/otp/send/auto" \
  -H "x-api-key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "07XXXXXXXXX",
    "sms_template_id": "otp_ar",
    "sender_id": "964Auth"
  }'
200 OK — Fallback Used
{
  "success": true,
  "channel": "sms_branded",
  "fallback": true,
  "fallback_reason": "WhatsApp failed — switched to SMS",
  "expires_in": 600
}
POST /otp/send/auto/plain WA → SMS plain (cheapest fallback) WA → SMS بدون sender (الأرخص) WA → SMS سادە (ئەرزانترین)
FieldالحقلخانەTypeالنوعجۆرDescriptionالوصفوەسف
phonestringRequiredPhone numberرقم الهاتفژمارەی تەلەفۆن
sms_template_idstringOptionalDefault: otp_ar_shortالافتراضي: otp_ar_shortپێشکەوتوو: otp_ar_short
cURL
curl -X POST "https://wp.964.live/otp/send/auto/plain" \
  -H "x-api-key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"phone":"07XXXXXXXXX"}'
Verify OTP التحقق من الرمز پشتڕاستکردنەوەی کۆد
POST /otp/verify API Keyيحتاج API KeyAPI Key پێویستە
FieldالحقلخانەTypeالنوعجۆرDescriptionالوصفوەسف
phonestringRequiredSame number used when sendingنفس الرقم المستخدم عند الإرسالهەمان ژمارەی کاتی ناردن
otpstringRequired6-digit code received by userالرمز المكون من 6 أرقامکۆدی ٦ ژمارە
msg_idstringOptionalMessage ID to link with log entryمعرف الرسالة لربطه بالسجلناسنامەی نامە بۆ بەستنەوە بە تۆمار
cURL
curl -X POST "https://wp.964.live/otp/verify" \
  -H "x-api-key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "07XXXXXXXXX",
    "otp": "847231",
    "msg_id": "msg_abc..."
  }'
200 — Verified
{
  "success": true,
  "message": "✅ تم التحقق بنجاح",
  "phone": "9647XXXXXXXX",
  "verified_at": "2024-01-01T12:01:00Z"
}
400 — Wrong Code
{
  "success": false,
  "error": "INVALID_OTP",
  "remaining_attempts": 2
}
Send Custom SMS إرسال SMS مخصص ناردنی SMS تایبەت
POST /sms/send/branded  |  /sms/send/plain API Keyيحتاج API KeyAPI Key پێویستە
FieldالحقلخانەTypeالنوعجۆرDescriptionالوصفوەسف
tostringRequiredRecipient phone numberرقم المستقبلژمارەی وەرگر
template_idstringRequiredTemplate ID — see templates list belowمعرف القالب — انظر القائمة أدناهناسنامەی قاڵب — لیستی خوارەوە ببینە
varsobjectOptionalTemplate variables e.g. {"name":"Ali"}متغيرات القالب مثل {"name":"علي"}گۆڕاوەکانی قاڵب، بۆ نموونە {"name":"علی"}
sender_idstringOptionalBranded only — sender name, default: 964Authللنسخة branded فقط — اسم المرسلتەنها branded — ناوی ناردەر
cURL
# Branded — with sender name
# مع اسم المرسل
curl -X POST "https://wp.964.live/sms/send/branded" \
  -H "x-api-key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "to": "07XXXXXXXXX",
    "template_id": "welcome_ar",
    "vars": { "name": "محمد" },
    "sender_id": "964Auth"
  }'

# Plain — no sender name (cheaper)
# بدون اسم مرسل (أرخص)
curl -X POST "https://wp.964.live/sms/send/plain" \
  -H "x-api-key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "to": "07XXXXXXXXX",
    "template_id": "custom_ar",
    "vars": { "message": "تم تأكيد طلبك رقم 1234" }
  }'
SMS Templates قوالب SMS قاڵبەکانی SMS
ID Langاللغةزمان Descriptionالوصفوەسف Variablesالمتغيراتگۆڕاوەکان
otp_arARFull OTP ArabicOTP عربي كاملOTP عەرەبی تەواو{{otp}}
otp_ar_shortARShort OTP ArabicOTP عربي مختصرOTP عەرەبی کورت{{otp}}
otp_enENFull OTP EnglishOTP إنجليزي كاملOTP ئینگلیزی تەواو{{otp}}
otp_en_shortENShort OTP EnglishOTP إنجليزي مختصرOTP ئینگلیزی کورت{{otp}}
welcome_arARWelcome messageرسالة ترحيبپەیامی بەخێربێیت{{name}}
welcome_enENWelcome messageرسالة ترحيبپەیامی بەخێربێیت{{name}}
notify_arARNotification Arabicإشعار عربيئاگادارکردنەوەی عەرەبی{{message}}
notify_enENNotification Englishإشعار إنجليزيئاگادارکردنەوەی ئینگلیزی{{message}}
custom_arARCustom Arabicمخصص عربيتایبەتی عەرەبی{{message}}
custom_enENCustom Englishمخصص إنجليزيتایبەتی ئینگلیزی{{message}}
otp_kuKUFull OTP KurdishOTP كوردي كاملOTP کوردی تەواو{{otp}}
otp_ku_shortKUShort OTP KurdishOTP كوردي مختصرOTP کوردی کورت{{otp}}
welcome_kuKUWelcome Kurdishترحيب كورديبەخێربێیت کوردی{{name}}
notify_kuKUNotification Kurdishإشعار كورديئاگادارکردنەوەی کوردی{{message}}
custom_kuKUCustom Kurdishمخصص كورديتایبەتی کوردی{{message}}
Rate Limits & Warnings حدود الاستخدام والتحذيرات سنووری بەکارهێنان و ئاگاداریەکان
WhatsApp Account Protection حماية حساب واتساب پاراستنی هەژماری واتساپ

Sending too many OTPs to the same number may get your WhatsApp Business account flagged or banned. Stay within the limits below.

إرسال كثير من OTP لنفس الرقم قد يؤدي لتعليق حساب واتساب. التزم بالحدود أدناه.

ناردنی زۆر OTP بۆ هەمان ژمارە دەتوانێت هەژماری واتساپت بلۆک بکات. لەناو سنوورەکان بمێنەوە.

Limitالحدسنوور Valueالقيمةبەها Applies toينطبق علىدەگەڕێتەوە بۆ Errorالخطأهەڵە
OTP per phone/hourOTP لكل رقم/ساعةOTP بۆ هەر ژمارە/کاتژمێر 10 All OTP endpointsجميع endpoints الـ OTPهەموو endpoints ی OTP HOURLY_LIMIT
Cooldown between requestsانتظار بين كل طلبچاوەڕوانی نێوان داواکاری 60s Per phone numberلكل رقم هاتفبۆ هەر ژمارەیەک COOLDOWN
OTP validityصلاحية الرمزکاتی بەردەستی کۆد 10 min All OTP typesجميع أنواع OTPهەموو جۆرەکانی OTP OTP_EXPIRED
Max verify attemptsمحاولات التحققهەوڵی پشتڕاستکردنەوە 3 Per OTP codeلكل رمزبۆ هەر کۆدێک MAX_ATTEMPTS
Wrong password lockoutقفل بعد كلمة مرور خاطئةقفڵکردن پاش پاسوۆردی هەڵە 5 attempts → 15min Login endpointتسجيل الدخولچوونەژوورەوە TOO_MANY_ATTEMPTS
Global rate limitالحد العامسنووری گشتی 120 req/min Per IP addressلكل IPبۆ هەر IP RATE_LIMIT
Password strengthقوة كلمة المروربەهێزی پاسوۆرد 8+ chars + letters + numbers Registration & password resetالتسجيل وإعادة تعيين كلمة المرورتۆمارکردن و گۆڕینی پاسوۆرد WEAK_PASSWORD
Best Practices أفضل الممارسات باشترین شێوازەکان
  • Never expose your API Key in frontend code — use a backend proxy
  • لا تضع الـ API Key في كود الواجهة — استخدم backend proxy
  • API Key ی خۆت لە کۆدی فرۆنتەند مەخەن — backend proxy بەکاربهێنە
  • Implement your own OTP attempt limiting on the frontend
  • أضف حد للمحاولات على الواجهة أيضاً
  • سنووری هەوڵ لە فرۆنتەندیشدا زیاد بکە
  • Use otp_ar_short or otp_ku_short for lower SMS costs
  • استخدم otp_ar_short أو otp_ku_short لتوفير تكلفة SMS
  • otp_ar_short یان otp_ku_short بەکاربهێنە بۆ کەمکردنەوەی تێچووی SMS
  • Always verify OTP server-side — never trust the client
  • تحقق من OTP دائماً على السيرفر — لا تثق بالعميل
  • هەمیشە OTP لە سیرفەردا پشتڕاست بکەرەوە
Error Codes رموز الأخطاء کۆدەکانی هەڵە
Error Codeرمز الخطأکۆدی هەڵە HTTP Meaningالمعنىمانا
MISSING_PHONE400Phone number not providedرقم الهاتف غير موجودژمارەی تەلەفۆن نییە
INVALID_OTP400Wrong OTP code enteredرمز التحقق غير صحيحکۆدی OTP هەڵەیە
OTP_EXPIRED400OTP expired (10 min limit)الرمز منتهي الصلاحية (10 دقائق)کۆدی OTP بەسەرچووە (١٠ خولەک)
MAX_ATTEMPTS400Exceeded 3 attempts — resend requiredتجاوزت 3 محاولات — أعد الإرسالزیاتر لە ٣ هەوڵ دا — دووبارە بنێرە
MISSING_API_KEY401x-api-key header missingheader الـ x-api-key مفقودheader ی x-api-key نییە
INVALID_API_KEY401API key does not exist or is invalidمفتاح API غير موجود أو غير صالحAPI Key نییە یان نادروستە
ACCOUNT_SUSPENDED403Account has been suspendedالحساب موقوفئەکاونت هەڵواسراوە
INSUFFICIENT_BALANCE402Not enough IQD balance to sendالرصيد غير كافٍباڵانسی پێویستی نییە
COOLDOWN429Must wait 60s before resending to same numberانتظر 60 ثانية قبل إعادة الإرسال٦٠ چرکە چاوەڕوێ بکە
RATE_LIMIT429Too many requests in a short timeطلبات كثيرة جداًزۆر داواکاری لە ماوەی کورتدا
ALL_CHANNELS_FAILED500Both WhatsApp and SMS delivery failedفشل الإرسال عبر جميع القنواتهەموو قەناڵەکان شکستیان هێنا
SMS_DISABLED503SMS channel not enabled on this systemSMS غير مفعّلقەناڵی SMS چالاک نییە
PHONE_EXISTS409Phone already registeredالرقم مسجل مسبقاًژمارەکە پێشتر تۆمارکراوە