HyoNovaالتوثيق

واجهة Mail البرمجية

أرسل البريد المعاملاتي وأدِر جهات الاتصال من أنظمتك عبر واجهة هيو ميل البرمجية — مفاتيح API ونقاط النهاية والأمثلة ومنع التكرار والأخطاء والحدود.

متاحيعمل اليوم لمساحات العمل التي تتضمنه خطتها.مرجعلمن: المطورون، تقنية المعلومات والأمان، المديرون العامونآخر تحديث: أُضيفت في:
في هذه الصفحة

تتيح واجهة هيو ميل البرمجية لمنتجك إرسال البريد المعاملاتي — الإيصالات والتأكيدات وإشعارات الحساب — رسالةً واحدة في كل استدعاء، وقراءة حالة كل رسالة، ومزامنة جهات الاتصال. وهي جزء من هيو ميل، وتشملها كل الخطط.

العنوان الأساسي والمصادقة#

كل نقاط النهاية تحت عنوان أساسي واحد:

text
https://api.hyonova.com

أرسل مفتاح API كرمز حامل (bearer token) في كل استدعاء:

http
Authorization: Bearer YOUR_API_KEY

تبدأ المفاتيح بـ hnm_. احفظها على خوادمك فقط، ولا تضع مفتاح API في صفحة ويب أو تطبيق جوال أبداً.

يعرض البريد › الأتمتة › دليل API العنوان نفسه في حقل نقطة النهاية مع زر للنسخ.

قبل أن تبدأ#

  • مرسِل موثّق. تتحقق شركتك من نطاق الإرسال الخاص بها (DKIM، وSPF عبر نطاق MAIL FROM مخصص، وDMARC) وتضيف عنوان مرسِل عليه. ومن دونه يردّ الإرسال بالرمز 409 SENDER_NOT_VERIFIED. راجع المرسلون والنطاقات والإعدادات.
  • أرصدة البريد. تستهلك كل رسالة رصيد بريد واحداً. راجع الأرصدة أدناه.
  • مفتاح API. يُنشئه شخص لديه صلاحية إدارة البريد — وهو افتراضياً المالك أو المدير العام.

مفاتيح API#

  1. افتح المفاتيح. انتقل إلى البريد › الأتمتة وافتح تبويب مفاتيح API.
  2. أنشئ مفتاحاً. اختر مفتاح API جديد، وأعطه اسماً يوضّح أين يُستخدم، وحدّد الصلاحيات التي يحتاجها (الجدول أدناه). امنح كل تكامل الصلاحيات التي يستخدمها فقط.
  3. انسخ السر. اختر إنشاء مفتاح. يُعرض مفتاح API الجديد مرة واحدة فقط. احفظه في مدير الأسرار لديك، وإن فقدته فأنشئ مفتاحاً جديداً.
الصلاحيةتسمح بـ
mail.transactional.sendPOST /mail/v1/send
mail.events.readGET /mail/v1/me وGET /mail/v1/messages وGET /mail/v1/messages/{id} وGET /mail/v1/forms
mail.contacts.readGET /mail/v1/contacts وGET /mail/v1/contacts/{id}
mail.contacts.writePOST /mail/v1/contacts
mail.conversions.writePOST /mail/v1/conversions
mail.integrations.writeنقاط نهاية المتجر التي تستخدمها إضافة WordPress وWooCommerce

يعرض جدول المفاتيح بادئة كل مفتاح وصلاحياته وآخر استخدام. يوقف إلغاء المفتاح فوراً، فتردّ الاستدعاءات التي تستخدمه بالرمز 401 API_KEY_INVALID. ولا يخزّن HyoNova من كل مفتاح إلا قيمته المجزّأة (hash).

نقاط النهاية#

الطريقةالمسارالصلاحيةالغرض
POST/mail/v1/sendmail.transactional.sendوضع رسالة واحدة في طابور الإرسال
GET/mail/v1/messages/{id}mail.events.readرسالة واحدة مع أحداث تسليمها
GET/mail/v1/messagesmail.events.readسجل الرسائل، الأحدث أولاً
GET/mail/v1/memail.events.readالشركة والمفتاح المرتبطان بمفتاح API، والحدود
GET/mail/v1/contactsmail.contacts.readقائمة جهات الاتصال
GET/mail/v1/contacts/{id}mail.contacts.readجهة اتصال واحدة بمعرّفها أو بعنوان بريدها
POST/mail/v1/contactsmail.contacts.writeإنشاء جهة اتصال أو تحديثها بعنوان البريد
GET/mail/v1/formsmail.events.readنماذج الاشتراك النشطة
POST/mail/v1/conversionsmail.conversions.writeتسجيل طلب شراء أو تحويل آخر لنسبته إلى الحملات
GET/mail/v1/openapi.jsonلا شيءوثيقة OpenAPI 3.0 لهذه الواجهة

لتُبلَّغ بأحداث التسليم بدل أن تسأل عنها، استخدم Webhooks.

إرسال رسالة#

يضع POST /mail/v1/send رسالة واحدة في الطابور ويردّ بالحالة 202 Accepted. أرسل إما قالباً مع متغيراته، وإما عنواناً وHTML:

الحقلالنوعملاحظات
toنص أو كائن"name@example.com" أو { "email": "name@example.com", "name": "Name" } (الاسم حتى 120 حرفاً)
templateIdنصقالب من البريد › الحملات › قوالبي. مطلوب ما لم ترسل subject وhtml
variablesكائنقيم متغيرات القالب، مثل { "order_number": "1001" }. نصوص أو أرقام أو قيم منطقية أو null
subjectنصحتى 500 حرف. مطلوب مع html عند غياب templateId
htmlنصحتى 400,000 حرف. يُزال المحتوى غير الآمن
textنصنسخة نصية اختيارية، حتى 100,000 حرف
senderIdنصمرسِل موثّق. ومن دونه يُستخدم المرسِل الموثّق الافتراضي
replyToنصعنوان الرد
tagsكائنوسومك الخاصة، مثل { "type": "receipt" } (المفاتيح حتى 40 حرفاً والقيم حتى 120)
idempotencyKeyنصحتى 160 حرفاً. ويمكنك إرساله في الترويسة Idempotency-Key بدلاً من ذلك

تستخدم القوالب متغيرات مثل {{ order_number }} مع قيمة بديلة اختيارية: {{ order_number | default:"—" }}. وتُدرج القيم دائماً كنص.

cURL
curl -X POST "https://api.hyonova.com/mail/v1/send" \
  -H "Authorization: Bearer $HYO_MAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1001-confirmation" \
  -d '{
    "to": { "email": "name@example.com", "name": "Customer" },
    "templateId": "TEMPLATE_ID",
    "variables": { "order_number": "1001" }
  }'

الاستجابة:

json
{ "id": "6f1c2d4e-9a7b-4c1d-8e2f-3a4b5c6d7e8f", "status": "queued", "replayed": false }

احتفظ بقيمة id: فهي تعرّف الرسالة في سجل الرسائل وفي GET /mail/v1/messages/{id} وفي أحداث Webhooks.

منع التكرار#

أعطِ كل رسالة منطقية مفتاحها الخاص — مثل order-1001-confirmation — وأرسل المفتاح نفسه عند إعادة المحاولة بعد انتهاء المهلة أو خطأ في الشبكة.

  • الترويسة Idempotency-Key تعمل مع كل نقاط النهاية من نوع POST. يُحفظ أول رد تحت المفتاح لمدة 24 ساعة لمفتاح API ذاته. وإعادة المحاولة بالمفتاح نفسه والمحتوى نفسه تعيد الرد نفسه مع الترويسة Idempotent-Replayed: true. أما المفتاح نفسه مع محتوى مختلف فيردّ بالرمز 409 IDEMPOTENCY_CONFLICT. ويصل طول مفتاح الترويسة إلى 200 حرف.
  • في POST /mail/v1/send يسمّي المفتاح الرسالةَ أيضاً على مستوى شركتك كلها: أي استدعاء لاحق بالمفتاح نفسه يعيد الرسالة الأصلية مع "replayed": true ولا يرسل شيئاً جديداً. اجعل مفاتيح الإرسال في حدود 160 حرفاً.

قراءة رسالة#

يعيد GET /mail/v1/messages/{id} رسالة واحدة مع أحداثها:

bash
curl "https://api.hyonova.com/mail/v1/messages/MESSAGE_ID" \
  -H "Authorization: Bearer $HYO_MAIL_API_KEY"
json
{
  "id": "6f1c2d4e-9a7b-4c1d-8e2f-3a4b5c6d7e8f",
  "recipient": "name@example.com",
  "subject": "Your order 1001",
  "templateId": "TEMPLATE_ID",
  "status": "delivered",
  "providerMessageId": "…",
  "errorCode": null,
  "createdAt": "2026-10-18T09:30:00.000Z",
  "sentAt": "2026-10-18T09:30:02.000Z",
  "lastEventAt": "2026-10-18T09:30:05.000Z",
  "events": [
    { "type": "sent", "at": "2026-10-18T09:30:02.000Z" },
    { "type": "delivery", "at": "2026-10-18T09:30:05.000Z" }
  ]
}

يعرض GET /mail/v1/messages الرسائل من الأحدث إلى الأقدم بالشكل { "items": [...], "nextCursor": "…" }. معاملات الاستعلام: limit (من 1 إلى 100، والافتراضي 25)، وcursor (قيمة nextCursor السابقة)، وstatus، وq (جزء من عنوان المستلم أو الموضوع)، وsince (تاريخ ووقت بصيغة ISO)، وtag (مفتاح وسم).

حالات الرسالة#

الحالةالمعنى
queuedقبلتها الواجهة وتنتظر الإرسال
deferredتنتظر دورها ضمن إيقاع الإرسال في HyoNova، وتُرسل تلقائياً لاحقاً
processingيجري تسليمها إلى خدمة البريد
sentقبلتها خدمة البريد
deliveredقبلها خادم بريد المستلم
bouncedالعنوان غير موجود أو رفض الرسالة نهائياً
complainedأبلغ المستلم أن الرسالة مزعجة
rejectedرفضت خدمة البريد الرسالة
failedلم تُرسل، ويوضّح errorCode السبب — MAIL_CREDITS_EXHAUSTED (نفدت الأرصدة) أو SENDING_SUSPENDED (أوقف HyoNova الإرسال لشركتك)
suppressedلم تُرسل لأن العنوان ارتدّ أو اشتكى من قبل (errorCode هو SUPPRESSED)

إلغاء الاشتراك من البريد التسويقي لا يوقف البريد المعاملاتي، أما الارتداد النهائي أو الشكوى فيوقفانه.

الحساب: GET /mail/v1/me#

استخدمه لفحص مفتاح. يعيد organization (id وname)، وkey (id وname وprefix وscopes وexpiresAt)، وentitlements (api وsmtp)، وlimits (requestsPerMinute وidempotencyWindowHours وkeyRotationGraceHours)، وapiVersion.

جهات الاتصال#

يعرض GET /mail/v1/contacts جهات الاتصال بالشكل { "items": [...], "nextCursor": "…" } مع المعاملات limit وcursor وstatus وq وtag وlistId. ويقبل GET /mail/v1/contacts/{id} معرّف جهة الاتصال أو عنوان بريدها.

ينشئ POST /mail/v1/contacts جهة اتصال أو يحدّثها حسب email. الحقول: email (مطلوب)، وfirstName، وlastName، وcompany، وphone، وlocale، وattributes، وtags، وlistIds (حتى 20)، وstatus (subscribed أو pending أو unsubscribed)، وconsent.

الموافقة صادقة بطبيعة التصميم:

  • لا تصبح جهة الاتصال subscribed إلا إذا أرسلت معها consent — مثل { "source": "checkout opt-in", "at": "2026-10-18T09:30:00Z", "reference": "order-1001" }. ومن دونها تكون جهة الاتصال الجديدة pending ولا تتلقى بريداً تسويقياً.
  • لا تستبدل الواجهة حالة أقوى أبداً: تبقى جهة الاتصال الملغى اشتراكها أو المحجوبة أو المرتدة أو المشتكية على حالها.

يكون الرد جهة الاتصال، مع created (‏true لجهة اتصال جديدة) وmarketable (‏true فقط للحالة subscribed).

bash
curl -X POST "https://api.hyonova.com/mail/v1/contacts" \
  -H "Authorization: Bearer $HYO_MAIL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: signup-name@example.com" \
  -d '{
    "email": "name@example.com",
    "firstName": "Sam",
    "status": "subscribed",
    "consent": { "source": "website newsletter form" }
  }'

النماذج والتحويلات#

  • يعرض GET /mail/v1/forms نماذج الاشتراك النشطة مع publicId وname وfields وconsentText وdoubleOptIn وlanguage ورابط النموذج المستضاف url. وتستخدمه إضافة WordPress.
  • يسجّل POST /mail/v1/conversions طلب شراء أو تحويلاً آخر، لتنسب تقارير الحملات الإيرادات إلى آخر نقرة موثّقة. الحقول: eventId (معرّفك الثابت — إرساله مرة أخرى لا يضيف الإيراد مرتين)، وeventType (purchase أو order_confirmed أو registration أو lead أو booking)، وأحد الحقول contactId أو email أو customerRef، وrevenue، وcurrency (ثلاثة أحرف، والافتراضي USD)، وstatus (completed أو refunded أو cancelled)، وrefundedAmount، وoccurredAt، وmetadata. ويردّ بالحالة 202 مع conversion وoutcome. تقبل نقطة النهاية هذه حتى 300 طلب في الدقيقة لكل مفتاح.

الأخطاء#

تأتي الأخطاء بهذا الشكل. اعتمد على code لا على نص الرسالة. وتحمل كل استجابة الترويسة X-Request-Id؛ أرفقها عند التواصل مع HyoNova.

json
{ "error": { "code": "SENDER_NOT_VERIFIED", "message": "Add and verify a sender before sending." } }
الحالةcodeالمعنى
400VALIDATION_ERRORالمحتوى أو الاستعلام غير صالح، وتسمّي الرسالة كل حقل
401AUTHENTICATION_REQUIREDلم يُرسل رمز حامل
401API_KEY_INVALIDالمفتاح غير معروف أو أُلغي
401API_KEY_EXPIREDاستُبدل المفتاح وانتهت فترة السماح
402INSUFFICIENT_CREDITSلم يبقَ لشركتك رصيد بريد، ولم يُوضع شيء في الطابور
403FORBIDDENالمفتاح لا يملك الصلاحية التي تحتاجها نقطة النهاية
403FEATURE_NOT_ENTITLEDهيو ميل أو واجهته البرمجية غير مفعّلة لشركتك
404NOT_FOUNDالقالب أو الرسالة أو جهة الاتصال أو القائمة غير موجودة
409SENDER_NOT_VERIFIEDلا يوجد مرسِل موثّق، أو المرسِل المختار غير موثّق
409IDEMPOTENCY_CONFLICTاستُخدم Idempotency-Key من قبل مع محتوى مختلف
429—طلبات كثيرة جداً. اكتشفها من رمز الحالة، وانتظر عدد الثواني في retry-after

الأرصدة#

تستهلك كل رسالة رصيد بريد واحداً، يُحتسب مرة واحدة عند تسليم الرسالة إلى خدمة البريد:

  • لا تُحتسب إعادة المحاولة مرة أخرى.
  • الرسالة التي ترفضها خدمة البريد رفضاً نهائياً يُعاد رصيدها. أما الارتداد بعد قبول الرسالة فلا يُعاد رصيده.
  • عندما تفرغ المحفظة يردّ POST /mail/v1/send بالرمز 402 INSUFFICIENT_CREDITS. وإذا نفدت الأرصدة بين وضع الرسالة في الطابور وإرسالها، تُعلَّم الرسالة failed مع MAIL_CREDITS_EXHAUSTED. أضف أرصدة ثم أرسلها مجدداً بمفتاح منع تكرار جديد.

لا توجد حصة شهرية ولا حد يومي في الخطة. راجع سعة البريد والتوقيع.

الحدود#

  • الطلبات. 600 طلب في الدقيقة لكل مفتاح API (و300 لـ POST /mail/v1/conversions). تحمل كل استجابة x-ratelimit-limit وx-ratelimit-remaining وx-ratelimit-reset، وتحمل الاستجابة 429 أيضاً retry-after.
  • إيقاع التسليم. يضبط HyoNova إيقاع كل الإرسال ليبقى ضمن حدود مزوّد البريد، لذلك قد تنتظر الرسالة قليلاً بالحالة queued أو deferred قبل إرسالها.
  • الحجم. html حتى 400,000 حرف، وsubject حتى 500.

سجل الرسائل#

تعرض البريد › الأتمتة › الرسائل كل رسالة أُرسلت عبر الواجهة، مع المستلم والحالة وآخر حدث. افتح أي رسالة لترى الأحداث ومعرّف الرسالة لدى المزوّد. يستطيع كل من لديه وصول إلى البريد قراءة السجل، أما تبويبا مفاتيح API وWebhooks فلمديري البريد.

صفحة الرسائل المعاملاتية مع تبويبات الرسائل ومفاتيح API وWebhooks ودليل API
البريد › الأتمتة › الرسائل.

ترحيل SMTP#

الحالة#

الميزةالحالةملاحظات
واجهة برمجة البريد التشغيليمتاحيعمل اليوم لمساحات العمل التي تتضمنه خطتها.أرسل البريد من أنظمتك بمفاتيح API وسجل رسائل وWebhooks موقّعة. جزء من هيو ميل.
ترحيل SMTP لهيو ميلمخططضمن خارطة طريق HyoNova. لم يُبنَ بعد وليس له موعد إصدار.الإرسال عبر هيو ميل باستخدام SMTP.
↑↓ للتنقل · Enter للفتح · Esc للإغلاق