توثيق المطورينAPI v1

دليل الربط عبر واجهة Udeyou OTP

واجهة REST بصيغة JSON لإرسال رموز التحقق إلى بريد عملائك والتحقق منها من خادمك، مع توثيق كامل بالعربية وأمثلة مُختبرة بسبع لغات وأطر عمل.

الرابط الأساسي https://udeyou.com/api/v1
خادمك يرسل طلب الإرسال إلى واجهة Udeyou، فيصل رمز من ست خانات إلى بريد العميل، ثم يتحقق خادمك من الرمز.
  1. 1خادمك يطلب الرمزPOST /otp/send
  2. 2Udeyou تولّد الرمز وترسله/api/v1
  3. 3يصل الرمز إلى بريد العميلصالح 5 دقائق افتراضيًا
  4. 4خادمك يتحقق من الرمزPOST /otp/verify
محتويات الصفحة

البداية

نظرة عامة

ترسل Udeyou رمز تحقق لمرة واحدة إلى بريد عميلك باسم متجرك، ثم تتحقق من الرمز الذي يُدخله. يتصل خادمك بالواجهة مباشرة، ولا يتعامل تطبيقك أو موقعك مع مفتاح API.

  1. 1

    الإرسال

    يرسل خادمك بريد العميل إلى POST /otp/send، فتولّد Udeyou الرمز وترسله وتعيد otp_id.

  2. 2

    الاستلام

    تصل إلى العميل رسالة باسم متجرك فيها الرمز ومدة صلاحيته، فيُدخله في تطبيقك أو موقعك.

  3. 3

    التحقق

    يرسل خادمك الرمز مع otp_id إلى POST /otp/verify، ويحصل على verified: true عند التطابق.

الصيغة
JSON في الطلب والرد، مع الترويسة Content-Type: application/json.
قناة الإرسال
البريد الإلكتروني وواتساب (تجريبي) متاحان الآن عبر معامل channel، والرسائل النصية قريبًا.
بنية الرد
success مع data عند النجاح، أو error يحتوي code وmessage عند الفشل.
الرصيد
رصيد واحد لكل رمز يُرسل بمفتاح حي، ويُعاد تلقائيًا إذا تعذّر الإرسال.

البداية

البدء السريع

ثلاث خطوات لإرسال أول رمز والتحقق منه باستخدام مفتاح تجريبي.

  1. أنشئ حسابًا

    سجّل في Udeyou لتبدأ تجربة مجانية لمدة شهرين: 2,000 رسالة في الشهر الأول ومثلها في الشهر الثاني للإرسال الفعلي. إنشاء حساب

  2. أنشئ مفتاحًا تجريبيًا

    من قسم المفاتيح في لوحة التحكم أنشئ مفتاحًا يبدأ بـ udy_test_. يظهر المفتاح مرة واحدة فقط، فاحفظه في متغير البيئة UDEYOU_API_KEY على خادمك.

  3. أرسل أول رمز

    المفتاح التجريبي لا يرسل بريدًا ولا يخصم رصيدًا، ويعيد الرمز في الرد لتكمل التحقق مباشرة.

    cURLPOST /otp/send
    curl -sS --max-time 20 -X POST https://udeyou.com/api/v1/otp/send \
      -H "Authorization: Bearer $UDEYOU_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"to": "user@example.com", "lang": "ar"}'
    
    Response201 Created
    {
      "success": true,
      "data": {
        "otp_id": "otp_b8042658f0f2959de5df7d1d",
        "to": "user@example.com",
        "status": "sent",
        "mode": "test",
        "expires_in": 300,
        "expires_at": "2026-10-09T09:16:17Z",
        "credits_remaining": 100,
        "test_mode": true,
        "code": "625056"
      }
    }
    

عند الانتقال إلى الإنتاج استبدل المفتاح التجريبي بمفتاح حي يبدأ بـ udy_live_، دون أي تغيير آخر في الطلبات.

البداية

المصادقة

أنشئ مفتاحًا من لوحة التحكم وأرسله مع كل طلب بإحدى الترويستين التاليتين. إذا أرسلت الاثنتين تُعتمد Authorization. فحص الحالة /health هو الطلب الوحيد الذي لا يحتاج مفتاحًا.

الطريقةالترويسة
الأساسيةAuthorization: Bearer <API_KEY>
البديلةX-API-Key: <API_KEY>

أنواع المفاتيح

المفتاح الحي

udy_live_
  • يرسل الرسالة فعليًا إلى بريد العميل.
  • يخصم رصيدًا واحدًا لكل رمز يُرسل، ويعيده إذا تعذّر الإرسال.
  • للاستخدام في الإنتاج.

المفتاح التجريبي

udy_test_
  • لا يرسل بريدًا ولا يخصم رصيدًا، ويعمل حتى برصيد صفر.
  • يعيد الرمز في الرد ضمن الحقل code مع test_mode: true.
  • للتطوير والاختبار الآلي.

يرى كل مفتاح رموز نوعه فقط، فالرمز المرسل بمفتاح تجريبي لا يُتحقق منه بمفتاح حي. أما حدود الإرسال فمشتركة بين النوعين على مستوى الحساب. والمفتاح المفقود أو غير الصحيح أو الملغى يعيد 401 invalid_api_key، والحساب الموقوف يعيد 403 account_suspended.

أبقِ المفتاح على الخادم

لا تضع المفتاح في كود المتصفح أو تطبيق الجوال. يتصل تطبيقك بخادمك، وخادمك وحده يتصل بـ Udeyou. نحفظ المفاتيح كبصمة SHA-256 ولا تظهر إلا مرة واحدة عند إنشائها، ويمكنك إلغاء أي مفتاح من لوحة التحكم فيتوقف قبوله فورًا.

مرجع الواجهة

إرسال رمز

POST/api/v1/otp/send201 Created

ينشئ رمزًا جديدًا ويرسله إلى بريد المستلم، ويعيد otp_id الذي تستخدمه في التحقق. إرسال رمز جديد إلى البريد نفسه يُلغي الرموز السابقة له.

حقول الطلب

tostringإلزامي

بريد المستلم (بحد أقصى 190 حرفًا) عند الإرسال البريدي، أو رقم الجوال بصيغة E.164 بدون + (مثل 9665xxxxxxxx) عند الإرسال عبر واتساب.

channelstringاختياري

email (الافتراضي) أو whatsapp. قناة التسليم — واتساب متاحة حاليًا في وضع تجريبي وتتطلب رقم مستلم مسجلًا في قائمة الأرقام التجريبية.

sender_namestringاختياري

اسم المرسل الظاهر في صندوق الوارد، من 2 إلى 60 حرفًا. الافتراضي اسم الحساب. تُستبدل فواصل الأسطر وأحرف التحكم فيه بمسافة.

langstringاختياري

ar (الافتراضي) أو en. يحدد لغة الرسالة الافتراضية وسطر التذييل.

code_lengthintegerاختياري

عدد خانات الرمز المولَّد، من 4 إلى 10. الافتراضي 6.

expires_inintegerاختياري

مدة الصلاحية بالثواني، من 60 إلى 3600. الافتراضي 300 (5 دقائق).

codestringاختياري

رمز تحدده بنفسك من 4 إلى 10 أحرف أو أرقام. إذا لم ترسله تولّد Udeyou رمزًا رقميًا.

templatestringاختياري

نص الرسالة، نص عادي حتى 1000 حرف ويجب أن يحتوي {{code}}. يمكنك استخدام {{sender_name}} و{{minutes}}. لا يُفسَّر HTML داخل القالب.

subjectstringاختياري

عنوان الرسالة حتى 120 حرفًا، ويقبل المتغيرات نفسها بما فيها {{code}}.

reply_tostringاختياري

بريد دعم متجرك الذي يستقبل ردود العميل على الرسالة.

أرسل code_length وexpires_in كأرقام في JSON، فالقيمة النصية مثل "6" تُرفض بالخطأ 422. ويُضاف إلى نهاية كل رسالة سطر يوضح أنها أُرسلت نيابةً عن sender_name عبر Udeyou OTP.

مثال

cURLPOST /otp/send — بريد
curl -sS --max-time 20 -X POST https://udeyou.com/api/v1/otp/send \
  -H "Authorization: Bearer $UDEYOU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "user@example.com", "lang": "ar"}'
cURLPOST /otp/send — واتساب (تجريبي)
# إرسال OTP عبر واتساب (تجريبي) — to = رقم الجوال بصيغة E.164 بدون +
curl -sS --max-time 20 -X POST https://udeyou.com/api/v1/otp/send   -H "Authorization: Bearer $UDEYOU_API_KEY"   -H "Content-Type: application/json"   -d '{"to": "9665XXXXXXXX", "channel": "whatsapp", "lang": "ar"}'
Response201 Created
{
  "success": true,
  "data": {
    "otp_id": "otp_61b7bfa182c0d13b33a9349f",
    "to": "user@example.com",
    "channel": "email",
    "status": "sent",
    "mode": "live",
    "expires_in": 300,
    "expires_at": "2026-10-09T09:17:23Z",
    "credits_remaining": 99
  }
}

حقول الرد

otp_idstring

معرّف الرمز. احفظه في جلسة المستخدم على خادمك لاستخدامه في التحقق.

tostring

بريد المستلم بأحرف صغيرة.

statusstring

القيمة sent في الرد الناجح.

modestring

live أو test حسب نوع المفتاح.

expires_ininteger

مدة الصلاحية بالثواني.

expires_atstring

وقت انتهاء الصلاحية بتوقيت UTC وبصيغة ISO 8601.

credits_remaininginteger

الرصيد المتبقي بعد الإرسال.

test_mode, codeboolean, string

يظهران مع المفتاح التجريبي فقط. الرمز نص وقد يبدأ بصفر، فلا تحوّله إلى رقم.

تخصيص الرسالة

يمكنك تحديد اسم المرسل والعنوان والنص وطول الرمز ومدة الصلاحية في الطلب نفسه.

curl -sS --max-time 20 -X POST https://udeyou.com/api/v1/otp/send \
  -H "Authorization: Bearer $UDEYOU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "sender_name": "My Store",
    "lang": "en",
    "code_length": 8,
    "expires_in": 600,
    "subject": "Login code",
    "template": "Your {{sender_name}} code is {{code}}. Valid for {{minutes}} minutes.",
    "reply_to": "help@example.com"
  }'
الرسالة الناتجة: من My Store بعنوان Login code، ونصها Your My Store code is 31242943. Valid for 10 minutes.

مرجع الواجهة

التحقق من الرمز

POST/api/v1/otp/verify200 OK

يتحقق من الرمز الذي أدخله العميل. عند التطابق يُستهلك الرمز ولا يُقبل مرة أخرى.

حقول الطلب

codestringإلزامي

الرمز الذي أدخله العميل، من 4 إلى 10 أحرف أو أرقام.

otp_idstringموصى به

المعرّف المعاد من طلب الإرسال.

tostringبديل

بريد المستلم بدلًا من otp_id، ويُتحقق حينها من آخر رمز أُرسل إليه.

مثال

cURLPOST /otp/verify
curl -sS --max-time 20 -X POST https://udeyou.com/api/v1/otp/verify \
  -H "Authorization: Bearer $UDEYOU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"otp_id": "otp_61b7bfa182c0d13b33a9349f", "code": "716699"}'
Response200 OK
{
  "success": true,
  "data": {
    "verified": true,
    "otp_id": "otp_61b7bfa182c0d13b33a9349f",
    "to": "user@example.com",
    "verified_at": "2026-10-09T09:12:23Z"
  }
}

حقول الرد

verifiedboolean

القيمة true عند تطابق الرمز.

otp_idstring

معرّف الرمز الذي تم التحقق منه.

tostring

البريد الذي تم التحقق منه. اعتمد عليه في خادمك بدلًا من بريد يرسله التطبيق.

verified_atstring

وقت التحقق بتوقيت UTC وبصيغة ISO 8601.

عند إدخال رمز خاطئ

تُحتسب محاولة مع كل رمز خاطئ، ويعيد الحقل attempts_remaining عدد المحاولات المتبقية.

Response400 Bad Request
{
  "success": false,
  "error": {
    "code": "invalid_code",
    "message": "The code is incorrect.",
    "attempts_remaining": 4
  }
}
  • لكل رمز 5 محاولات. بعد استنفادها يُرفض حتى الرمز الصحيح بالخطأ 429 too_many_attempts، ويلزم إرسال رمز جديد.

  • الرمز يُستخدم مرة واحدة، وإعادة التحقق به تعيد 409 otp_already_used.

  • بعد انتهاء الصلاحية، أو بعد إرسال رمز أحدث إلى البريد نفسه، يعيد الرمز القديم 410 otp_expired.

  • يتحقق كل مفتاح من رموز نوعه فقط، وغير ذلك يعيد 404 otp_not_found.

مرجع الواجهة

الرصيد

GET/api/v1/balance200 OK

يعيد اسم الحساب ونوع المفتاح المستخدم والرصيد الحالي. يعمل بأي من ترويستي المصادقة.

cURLGET /balance
curl -sS --max-time 20 https://udeyou.com/api/v1/balance \
  -H "Authorization: Bearer $UDEYOU_API_KEY"

curl -sS --max-time 20 https://udeyou.com/api/v1/balance \
  -H "X-API-Key: $UDEYOU_API_KEY"
Response200 OK
{
  "success": true,
  "data": {
    "company": "متجر الورد",
    "mode": "live",
    "credits": 98
  }
}
companystring

اسم الحساب، وهو اسم المرسل الافتراضي.

modestring

نوع المفتاح المستخدم في الطلب: live أو test.

creditsinteger

الرصيد الحالي.

مرجع الواجهة

فحص الحالة

GET/api/v1/health200 OK

يتأكد من أن الواجهة تعمل. لا يحتاج مفتاحًا ولا يخصم رصيدًا، ويعيد status بدلًا من data.

cURLGET /health
curl -sS https://udeyou.com/api/v1/health
Response200 OK
{
  "success": true,
  "status": "ok"
}

التشغيل

الحدود

قيم افتراضية على مستوى المنصة تحمي عملاءك وحسابك من الإرسال المتكرر. تُحتسب لكل حساب، ويتشاركها المفتاح الحي والتجريبي.

الحدالقيمة الافتراضيةالخطأretry_after
طلبات الإرسال لكل حساب60 طلبًا في الدقيقةrate_limited60
الفاصل بين رمزين للبريد نفسه60 ثانيةresend_too_soon60
الرموز للبريد نفسه5 رموز في الساعةrecipient_limit3600
المحاولات الخاطئة لكل رمز5 محاولاتtoo_many_attemptsلا يوجد
صلاحية الرمز300 ثانية، وتُضبط من 60 إلى 3600otp_expiredلا يوجد
  • تدخل طلبات الإرسال وحدها في حد الدقيقة، أما طلبات التحقق والرصيد فلا.
  • قيمة retry_after هي طول النافذة بالثواني، وليست الوقت المتبقي. انتظرها ثم أعد المحاولة.
Response429 Too Many Requests
{
  "success": false,
  "error": {
    "code": "resend_too_soon",
    "message": "Wait 60 seconds before sending another code to this address.",
    "retry_after": 60
  }
}

التشغيل

أكواد الأخطاء

تعيد الأخطاء حالة HTTP مناسبة مع كائن error. اعتمد في منطقك على error.code، أما message فنص توضيحي بالإنجليزية.

Response422 Unprocessable Entity
{
  "success": false,
  "error": {
    "code": "validation_error",
    "message": "Some fields are invalid.",
    "fields": {
      "to": "A valid recipient email is required.",
      "code_length": "code_length must be an integer between 4 and 10."
    }
  }
}
HTTPالكودالطلبالمعنىحقول إضافية
400 invalid_json الإرسال، التحقق جسم الطلب ليس كائن JSON.
400 invalid_code التحقق الرمز غير صحيح، وتُحتسب محاولة. attempts_remaining
401 invalid_api_key كل الطلبات عدا /health المفتاح مفقود أو بصيغة خاطئة أو غير معروف أو ملغى.
402 insufficient_credits الإرسال بمفتاح حي الرصيد صفر.
403 account_suspended كل الطلبات عدا /health الحساب موقوف.
404 otp_not_found التحقق لا يوجد رمز مطابق لـ otp_id أو to ضمن نوع المفتاح.
404 not_found أي مسار المسار غير موجود.
405 method_not_allowed أي مسار طريقة HTTP غير مدعومة لهذا المسار.
409 otp_already_used التحقق الرمز استُخدم مسبقًا.
410 otp_expired التحقق انتهت الصلاحية، أو أُرسل رمز أحدث إلى البريد نفسه.
422 validation_error الإرسال حقول غير صالحة. fields
422 validation_error التحقق الحقل code غير صالح، أو لم يُرسل otp_id ولا to.
429 rate_limited الإرسال تجاوز 60 طلب إرسال في الدقيقة. retry_after
429 resend_too_soon الإرسال أقل من 60 ثانية منذ آخر رمز لهذا البريد. retry_after
429 recipient_limit الإرسال 5 رموز لهذا البريد خلال الساعة الأخيرة. retry_after
429 too_many_attempts التحقق استُنفدت المحاولات (5)، ويلزم طلب رمز جديد.
500 server_error أي مسار خطأ غير متوقع في الخادم.
502 delivery_failed الإرسال بمفتاح حي تعذّر الإرسال عبر خادم البريد، وأُعيد الرصيد.

الربط

أمثلة الربط: سبع لغات وأطر عمل

أمثلة كاملة شُغّلت فعليًا على الواجهة بمفتاح تجريبي ومفتاح حي: ترسل رمزًا ثم تتحقق منه، وتعرض كود الخطأ وتفاصيله عند الفشل. تقرأ المفتاح من متغير البيئة UDEYOU_API_KEY على الخادم، ويمكن تغيير الرابط الأساسي عبر UDEYOU_BASE_URL. مع المفتاح التجريبي يكتمل التحقق تلقائيًا لأن الرمز يعود في الرد، ومع المفتاح الحي يطلب المثال إدخال الرمز.

Instructions

لكل لغة دليل كامل قابل للتنزيل بجانب مثالها، والنسخة الإنجليزية هي المرجع الأساسي.

Three small bash scripts: send a code, verify it and check your balance. Ideal for testing your key from a terminal before you write any code.

  • Requires bash and curl
  • Run ./send.sh user@example.com ./verify.sh otp_... 123456
#!/usr/bin/env bash

# Send a verification code by email.

# Usage: UDEYOU_API_KEY=udy_test_... ./send.sh user@example.com

BASE_URL="${UDEYOU_BASE_URL:-https://udeyou.com/api/v1}"

TO="${1:-user@example.com}"



curl -sS --max-time 20 -X POST "$BASE_URL/otp/send" \

  -H "Authorization: Bearer $UDEYOU_API_KEY" \

  -H "Content-Type: application/json" \

  -d '{"to": "'"$TO"'", "lang": "ar"}'

echo

الأدلة القابلة للتنزيل

لكل لغة دليل نصي كامل بالإنجليزية (المرجع الأساسي) وبالعربية، فيه الكود نفسه المعروض أعلاه مع المصادقة والحقول والأخطاء والحدود.

الربط

أفضل الممارسات

قائمة مراجعة قبل الإطلاق.

  • احفظ المفتاح في متغير بيئة على الخادم، ولا تضعه في المتصفح أو تطبيق الجوال أو مستودع الكود.
  • استخدم المفتاح التجريبي في التطوير والاختبار الآلي، والمفتاح الحي في الإنتاج فقط.
  • احفظ otp_id في جلسة المستخدم على الخادم، وتحقق به بدلًا من البريد.
  • اعتمد data.to من رد التحقق بريدًا موثّقًا، لا البريد المرسل من التطبيق.
  • تعامل مع الرمز كنص، فقد يبدأ بصفر.
  • اعرض للمستخدم المحاولات المتبقية من attempts_remaining، وعطّل زر إعادة الإرسال 60 ثانية بعد كل إرسال.
  • اضبط مهلة لكل طلب، وتعامل مع أخطاء الشبكة دون عرض تفاصيلها للمستخدم.
  • ألغِ من لوحة التحكم أي مفتاح يُشتبه في تسرّبه، ثم أنشئ مفتاحًا جديدًا.
  • لا تسجّل الرموز أو المفاتيح في سجلات تطبيقك.
  • عند 429 انتظر مدة retry_after بالثواني قبل إعادة المحاولة.

تحتاج مساعدة في الربط؟

راسل فريق الدعم من نموذج التواصل، وأرفق otp_id وكود الخطأ إن وُجد. نرد بالعربية خلال 24 ساعة عمل.

نموذج التواصل