انتقل إلى المحتوى
HEXSMSDEVELOPERS
HEXSMS API · v1

أدخِل الرسائل النصية
إلى خدمتك.

ابدأ بمفتاح API واحد. اختر الدولة وأرسل إلى ما يصل إلى 1,000 رقم في الطلب الواحد، وتابع النتيجة لكل رقم.

REST APIJSONحتى 1,000 مستلم / طلب

البدء السريع

  1. أنشئ مفتاح API

    بعد التسجيل والموافقة وتسجيل الدخول عبر OTP، افتح إدارة مفاتيح API لإصدار المفتاح.

  2. جهّز رصيدك

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

  3. أرسل الرسائل وتابع النتائج

    احفظ معرّف الحملة وتابع النتائج عبر واجهة الاستعلام عن الحالة.

Base URL https://hexsms.com

استدعِ الواجهة من خادمك عبر HTTPS. لا يدعم وضع المعاينة إصدار مفاتيح حقيقية أو الإرسال عبر API.

الدول المدعومة

190+تغطية الشبكة العالمية

أبرز الدول المغطّاة

  • الولايات المتحدة
  • كندا
  • المملكة المتحدة
  • ألمانيا
  • فرنسا
  • إسبانيا
  • إيطاليا
  • هولندا
  • السويد
  • النرويج
  • الدانمرك
  • بولندا
  • رومانيا
  • التشيك
  • النمسا
  • سويسرا
  • أيرلندا
  • البرتغال
  • فنلندا
  • اليابان
  • كوريا الجنوبية
  • الصين
  • تايوان
  • هونغ كونغ الصينية (منطقة إدارية خاصة)
  • سنغافورة
  • ماليزيا
  • إندونيسيا
  • الفلبين
  • تايلاند
  • فيتنام
  • الهند
  • بنغلاديش
  • باكستان
  • أستراليا
  • نيوزيلندا
  • البرازيل
  • المكسيك
  • جنوب أفريقيا
  • نيجيريا
  • الإمارات العربية المتحدة
  • المملكة العربية السعودية

يختلف توفّر الإرسال والأسعار وشروط تسجيل المرسِل لكل دولة بحسب حسابك والشبكات المحلية. تحقّق من أسعار الدولة قبل الإرسال.

GET/api/v1/messages/countries

تحقّق عبر API من الدول المفعّلة والأسعار المطبّقة فعليًا. حدّد الدولة في طلب الإرسال عبر country، واستخدم أرقامًا من الدولة نفسها في كل طلب. لا يُقبل الإرسال إلى الدول التي لم يُحدَّد لها سعر.

200 OK
{ "currency": "USDT", "countries": [{ "country": "US", "unitPrice": 0.02 }] }

المصادقة بمفتاح API

أضف الترويسة التالية إلى كل طلب API خارجي. لا حاجة إلى ملفات تعريف ارتباط تسجيل الدخول أو رموز OTP.

HTTP
Authorization: Bearer hex_live_ضع_مفتاحك_هنا

يُعرض نص المفتاح مرة واحدة فقط عند إصداره. احفظه في متغير بيئة على الخادم، ولا تضعه في كود الواجهة الأمامية. لا يمكن استخدام المفتاح بعد إبطاله أو إيقاف الحساب. يمكنك إنشاء 5 مفاتيح كحد أقصى.

POST/api/v1/messages

أرسل إلى 1,000 رقم دفعة واحدة

أرسل نص رسالة واحدًا إلى عدة أرقام. نتحقق من الطلب ونضيفه إلى قائمة الإرسال ثم نرد فورًا. لإرسال محتوى مختلف لكل رقم، استخدم طلبات منفصلة بقيمة Idempotency-Key جديدة لكل منها.

الحقلالنوعالوصف
country *stringرمز الدولة وفق ISO 3166-1 alpha-2، مثل US وGB وJP وKR. لا توجد دولة افتراضية.
text *stringمن 1 إلى 1,600 حرف بعد إزالة المسافات الطرفية. يتلقى جميع المستلمين في الطلب المحتوى نفسه.
recipients *string[]من 1 إلى 1,000 رقم جوّال. يُوصى بالتنسيق الدولي مع + ورمز الدولة، ويجب أن تكون جميع الأرقام من الدولة المحدّدة في country.
Idempotency-Key *headerمن 8 إلى 100 حرف من الأحرف الإنجليزية والأرقام والشرطات والشرطات السفلية. استخدم قيمة فريدة لكل طلب.

إذا وُجد رقم غير صالح أو مكرّر واحد على الأقل، يُرفض الطلب بأكمله دون إرسال أو خصم. يُتحقق من التكرار بعد تحويل الأرقام إلى التنسيق الدولي.

cURL · إرسال جماعي
curl -X POST 'https://hexsms.com/api/v1/messages' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: notice-20261024-001' \
  -d '{
    "country": "US",
    "text": "Your verification code is 482913.",
    "recipients": ["+12025550123", "+12025550124"]
  }'
202 Accepted · أُضيف إلى قائمة الإرسال
{
  "id": "35bed356-b84a-452a-8e94-98b538972ecd",
  "country": "US",
  "state": "RUNNING",
  "total": 2,
  "segments": 1,
  "unitPrice": 0.025,
  "cost": 0.05,
  "createdAt": 1792800000000,
  "note": null,
  "replayed": false
}
إذا انقطعت الاستجابة، أعد الإرسال بمفتاح الطلب نفسه.

إعادة المحاولة بالحساب نفسه وIdempotency-Key نفسه والمحتوى وترتيب الأرقام نفسيهما تُرجع النتيجة الأصلية دون إرسال أو خصم إضافي (200، replayed: true). إذا اختلف المحتوى تُرجع 409. تظل الحماية من التكرار قائمة حتى عند تبديل مفتاح API. لا تنتهي صلاحية مفاتيح الطلب.

كيف تُحسب التكلفة

عدد الأرقام × عدد الأجزاء (segments) × سعر الحساب — هكذا تُحسب التكلفة. تتسع رسالة UCS-2 لـ 70 حرفًا في الجزء الأول، ثم 67 حرفًا لكل جزء. وتتسع أحرف GSM-7 الأساسية لـ 160 حرفًا، ثم 153 حرفًا لكل جزء. تُحتسب أحرف الامتداد بخانتين، والرموز التعبيرية حسب طولها في UTF-16. القيمتان unitPrice وcost بالـ USDT. السعر الوارد في الاستجابة هو السعر المطبّق فعليًا، والقيمة 0.025 أعلاه مجرد مثال.

GET/api/v1/messages/{id}

تحقّق من نتيجة الإرسال لكل رقم

استخدم قيمة id التي أعادتها واجهة الإرسال. لا يمكن الاستعلام إلا عن الحملات المُرسَلة عبر API من الحساب نفسه. يُرجع الاستعلام النتائج المحفوظة؛ إذا احتجت أحدث نتائج المشغّل، فاستدعِ واجهة تحديث الحالة التالية أولًا.

cURL · الاستعلام عن الحالة
curl 'https://hexsms.com/api/v1/messages/35bed356-b84a-452a-8e94-98b538972ecd?limit=1&offset=0' \
  -H 'Authorization: Bearer YOUR_API_KEY'
200 OK · النتائج لكل رقم
{
  "id": "35bed356-b84a-452a-8e94-98b538972ecd",
  "country": "US",
  "state": "DONE",
  "total": 2, "segments": 1,
  "unitPrice": 0.025, "cost": 0.05,
  "createdAt": 1792800000000, "note": null,
  "summary": { "DELIVERED": 1, "PENDING": 1 },
  "messages": [
    {
      "id": "d2787184-d8b8-49c6-9c15-1db90a6d5516",
      "to": "12025550123",
      "status": "DELIVERED",
      "statusName": "DELIVERED_TO_HANDSET",
      "description": "Message delivered to handset",
      "error": null,
      "updatedAt": 1792800005000
    }
  ],
  "pagination": { "limit": 1, "offset": 0, "nextOffset": 1 }
}

قيمة limit من 1 إلى 1,000 (الافتراضي 100)، وoffset من 0 إلى 1,000 (الافتراضي 0). إذا كانت nextOffset تساوي null فهذه الصفحة الأخيرة. يعرض summary عدد الأرقام حسب كل حالة. تُعاد قيمة to بالتنسيق الدولي دون +، والأوقات بالمللي ثانية وفق Unix. قد يختلف ترتيب النتائج عن ترتيب الإرسال الأصلي، لذا ميّز كل رسالة بقيمة id الخاصة بها.

DONE لا تعني أن الرسالة استُلمت.

بل تعني أن معالجة قائمة الإرسال قد انتهت. للتأكد من الوصول الفعلي، تحقّق من أن status لكل رسالة في messages هي DELIVERED.

POST/api/v1/messages/{id}/refresh

احصل على أحدث حالة استلام

تُحدَّث النتائج المحفوظة بالاستعلام عن سجلات المشغّل. لا حاجة إلى نص للطلب. بعد التحديث، اقرأ النتائج مجددًا عبر GET. يمكن تحديث الحملة نفسها مرة كل 30 ثانية. تتوفر سجلات المشغّل لمدة 48 ساعة بعد الإرسال. في البيئات المُعدّة بخطافات ويب، قد تنعكس النتائج تلقائيًا.

cURL · تحديث أحدث حالة
curl -X POST 'https://hexsms.com/api/v1/messages/35bed356-b84a-452a-8e94-98b538972ecd/refresh' \
  -H 'Authorization: Bearer YOUR_API_KEY'
200 OK
{ "id": "35bed356-b84a-452a-8e94-98b538972ecd", "updated": 2 }

تمثل updated عدد الصفوف المحدَّثة، وقد تكون 0 إذا كانت الرسائل لا تزال في الانتظار أو لا توجد نتائج جديدة. نوصي باستدعاء GET بفاصل 10 ثوانٍ على الأقل، وطلب refresh عند الحاجة فقط.

تعرّف على رموز الحالة

حالة طلب الإرسال state

PREPARING قيد التحضير · RUNNING قيد المعالجة · PAUSED متوقف مؤقتًا · DONE اكتملت معالجة القائمة · CANCELED ملغى

الحالة status لكل رقمالمعنى
QUEUEDفي انتظار الإرسال.
SENDINGجارٍ الإرسال إلى المشغّل.
PENDINGقبِلها المشغّل، وبانتظار النتيجة النهائية للاستلام.
DELIVEREDسُلّمت إلى جهاز المستلم.
UNDELIVERABLEتعذّر التسليم.
EXPIREDانتهت مدة صلاحية التسليم.
REJECTEDرُفض الطلب أو حدث خطأ في المعالجة.
CANCELEDأُلغيت قبل الإرسال.
UNKNOWNلم تُعرف النتيجة بعد.

قد يضيف المشغّلون رموز حالة جديدة، لذا تعامل أيضًا مع قيم status غير المعروفة. يمكنك معرفة سبب الفشل من statusName وdescription وerror.

كيف تتعامل مع الأخطاء

تنسيق استجابة الخطأ
{ "error": "الرصيد غير كافٍ. اشحن رصيدك ثم أعد الطلب.", "code": "INSUFFICIENT_CREDITS" }
HTTPcodeما يجب التحقق منه
403COUNTRY_NOT_ENABLEDتحقّق من أسعار الإرسال لكل دولة وحالة تفعيلها.
400INVALID_COUNTRYضع رمز دولة ISO في country.
400INVALID_BODY / INVALID_JSON / INVALID_TEXTتحقّق من كائن JSON ونص الرسالة.
400INVALID_RECIPIENTS / INVALID_PHONE / DUPLICATE_PHONEتحقّق من عدد الأرقام وتنسيقها وتكرارها.
400INVALID_IDEMPOTENCY_KEY / INVALID_PAGINATIONتحقّق من مفتاح الطلب أو قيم الترقيم.
401UNAUTHORIZEDمفتاح Bearer API مفقود أو غير صالح.
402INSUFFICIENT_CREDITSيرجى شحن رصيدك.
403ACCOUNT_INACTIVEتأكّد من أن الحساب معتمد ونشط.
404NOT_FOUNDتحقّق من معرّف الحملة وملكية الحساب.
409IDEMPOTENCY_CONFLICTاستُخدم مفتاح الطلب نفسه مع محتوى مختلف.
413 / 415BODY_TOO_LARGE / UNSUPPORTED_MEDIA_TYPEأرسل نص JSON لا يتجاوز 128KiB.
429RATE_LIMITED / REFRESH_TOO_SOONانتظر عدد الثواني المحدّد في Retry-After ثم أعد الطلب.
500 / 502INTERNAL_ERROR / PROVIDER_UNAVAILABLEأعد المحاولة بعد قليل. استخدم مفتاح الطلب نفسه عند إعادة محاولة الإرسال.
503PREVIEW_ONLYلا يمكن استدعاء API الحقيقية في وضع المعاينة.

يمكن لكل مفتاح API إرسال ما يصل إلى 120 طلبًا في الدقيقة، تشمل الإرسال والاستعلام والتحديث. عند بلوغ الحد، تحقّق من الترويسة Retry-After. هذه الواجهة مخصّصة للتكامل بين الخوادم، ولا تدعم استدعاءات CORS من المتصفح.

اتصل عبر Node.js

Node.js · يعمل على الخادم
const response = await fetch('https://hexsms.com/api/v1/messages', {
  method: 'POST',
  headers: {
    Authorization: 'Bearer ' + process.env.HEXSMS_API_KEY,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'notice-20261024-001'
  },
  body: JSON.stringify({
    country: 'US',
    text: 'Your order is on its way.',
    recipients: ['+12025550123', '+12025550124']
  })
});
const result = await response.json();
if (!response.ok) throw new Error(result.code + ': ' + result.error);
console.log(result.id); // Use this ID to check delivery status.

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