مرجع WhatsApp OTP API
أرسل رموز OTP وتحقق منها عبر واتساب باستخدام مفتاح Sanctum API. مناسب للتحقق من الهوية، تسجيل الدخول بخطوتين، وإجراءات الأمان الأخرى.
المصادقة
تستخدم الواجهة مصادقة Bearer Token. أنشئ مفتاح API من
لوحة التحكم › الإعدادات › مفاتيح API
وامنحه صلاحيتَي otp:send وotp:verify.
Authorization: Bearer YOUR_API_KEY Content-Type: application/json Accept: application/json
Base URL
https://app.zervixo.com/api/v1
جميع الطلبات يجب أن تتضمن Accept: application/json.
الاستجابات دائمًا بصيغة JSON.
POST /api/v1/otp/send
يُرسل رمز OTP إلى رقم هاتف عبر واتساب.
يتطلب صلاحية otp:send على مفتاح API.
المعاملات
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| phone | string | ✓ |
رقم الهاتف بصيغة E.164 (مثال: +966501234567).
|
| purpose | string | — |
الغرض من الرمز. القيم المقبولة: login، register، verify. الافتراضي: verify.
|
| expires_in | integer | — |
مدة صلاحية الرمز بالثواني. الافتراضي: 300 (5 دقائق). الحد الأقصى: 3600.
|
| locale | string | — |
لغة الرسالة. القيم المقبولة: ar، en. الافتراضي: إعدادات المستأجر.
|
الاستجابات
{
"success": true,
"message": "OTP sent",
"expires_at": "2026-10-20T14:35:00Z",
"ref": "otp_01jd3k8m4v2xq6z"
}
POST /api/v1/otp/verify
يتحقق من رمز OTP مُرسَل سابقًا.
يتطلب صلاحية otp:verify على مفتاح API.
المعاملات
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| phone | string | ✓ | رقم الهاتف بصيغة E.164، نفس الرقم المستخدم في الإرسال. |
| code | string | ✓ | رمز OTP المكوّن من 6 أرقام الذي أدخله المستخدم. |
| ref | string | — | معرّف التحقق المُعاد من /otp/send. يُنصح باستخدامه لربط الطلبَين. |
الاستجابات
{
"success": true,
"verified": true,
"phone": "+966501234567"
}
{
"success": false,
"verified": false,
"error": "invalid_or_expired"
}
حدود المعدل
تُطبَّق الحدود على مستوى مفتاح API. عند تجاوزها تُعاد استجابة 429 Too Many Requests
مع رأس Retry-After يُحدد وقت الانتظار بالثواني.
رموز الأخطاء
| HTTP | رمز الخطأ | الوصف |
|---|---|---|
| 401 | unauthenticated | مفتاح API مفقود أو منتهي الصلاحية أو ملغى. |
| 403 | insufficient_scope | المفتاح لا يملك الصلاحية المطلوبة (otp:send أو otp:verify). |
| 422 | validation_error | أحد الحقول المطلوبة مفقود أو يحتوي قيمة غير صالحة. |
| 400 | invalid_or_expired | رمز OTP غير صحيح أو انتهت صلاحيته. |
| 429 | too_many_requests | تم تجاوز حد المعدل. راجع رأس Retry-After. |
| 500 | server_error | خطأ في الخادم. يرجى المحاولة مرة أخرى أو التواصل مع الدعم. |
أمثلة على الكود
cURL — إرسال OTP
curl -X POST https://app.zervixo.com/api/v1/otp/send \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "phone": "+966501234567", "purpose": "login", "expires_in": 300, "locale": "ar" }'
cURL — التحقق من OTP
curl -X POST https://app.zervixo.com/api/v1/otp/verify \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "phone": "+966501234567", "code": "483921", "ref": "otp_01jd3k8m4v2xq6z" }'
PHP (Guzzle) — إرسال OTP
use GuzzleHttp\Client; $client = new Client([ 'base_uri' => 'https://app.zervixo.com/api/v1/', 'headers' => [ 'Authorization' => 'Bearer ' . $apiKey, 'Accept' => 'application/json', ], ]); $response = $client->post('otp/send', [ 'json' => [ 'phone' => '+966501234567', 'purpose' => 'login', 'expires_in' => 300, 'locale' => 'ar', ], ]); $data = json_decode($response->getBody(), true); echo $data['ref']; // store this for verify step
PHP (Guzzle) — التحقق من OTP
$response = $client->post('otp/verify', [ 'json' => [ 'phone' => '+966501234567', 'code' => $userEnteredCode, 'ref' => $ref, ], ]); $data = json_decode($response->getBody(), true); if ($data['verified']) { // proceed with login / registration } else { // show "incorrect code" message to user }