سرد القوالب
كل قالب على الاتصال، الأحدث أولاً، مقسَّم إلى صفحات بأسلوب keyset.
ينفّذ الاستدعاء الحقيقي على مساحة عملك، بمفتاحك أنت.
GET /templates
كل قالب على الاتصال، الأحدث أولاً، مقسَّم إلى صفحات بأسلوب keyset.
محرّكان
export OE=https://api.openemail.ukexport AUTH="Authorization: Bearer $OPENEMAIL_API_KEY"القالب متن يُخزَّن مرة ويُرسل مرات، وهو ملك للاتصال لا لمن كتبه. فمفتاح مساحة العمل يرى القوالب ذاتها التي يراها زميلك، وحذف حساب كاتبها لا يأخذها معه.
يخزّن engine: "blocks" شجرةً أنواع عقدها هي صادرات @react-email/components (Section وRow وColumn وContainer وText وHeading وButton وLink وImg وHr وMarkdown وCodeBlock وCodeInline) وخصائصها هي خصائص تلك المكوّنات نفسها. ويجري التحقق منها عند الدخول، فالعقدة الفاسدة هي 422 على الطلب الذي كتبها لا بريد معطوب لاحقاً.
يخزّن engine: "html" ترميزاً تملكه أصلاً، يُنقّى مرة واحدة عند نشر الإصدار. وهذا ما تلجأ إليه حين تكون قوالبك مكوّنات react-email تعيش في مستودعك: اعرض المكوّن عبر @react-email/render في عملية البناء لديك وأرسل الناتج. لا توجد نقطة نهاية لـ JSX ولن توجد. فالـ API يقبل HTML لأن HTML هو ما يقرأه عميل البريد، وتنفيذ مكوّن المستدعي يشتري صندوقاً رملياً لا يحتاجه أحد.
| يُعلَن بوصفه | يملؤه | غيابه عند الإرسال |
|---|---|---|
| `slots` | من يحرّر القالب | يُعرض default الخاص بالفتحة |
| `props` | من يرسل | missing_template_prop، وهو 422، ولا يخرج أي بريد |
يُكتب كلاهما على هيئة {{key}} في المتن وفي الموضوع، ويحمل كلاهما kind (text أو url أو image) يحدّد كيفية تهريب القيمة عند استبدالها. والمفتاح الذي لا يعلنه شيء يفشل عند النشر؛ وقيمة url التي ليس مخططها http أو https أو mailto تُرفض بدل أن تُعرض.
الإصدار المنشور مجمَّد. وتحرير متن قالب منشور يسكّ مسوّدة جديدة بدل أن يغيّر ما تحلّه عمليات الإرسال الحيّة، فالزميل الذي يعيد كتابة النص لا يستطيع تغيير ما ترسله شيفرتك أصلاً، وتثبيت version يعني أنه لن يغيّره عند النشر أيضاً.
مثال
يتطلب templates:read. تصل limit إلى 100، ويضيّق status إلى draft أو active أو archived، وcursor معتم، فأعد تمرير nextCursor الذي أُعطي لك بدل أن تبني واحداً.
curl "$OE/templates?limit=25&status=active" -H "$AUTH"{ "object": "list", "data": [ { "object": "template", "id": "tpl_9c1f0a4b7e05d3862c1f0a44", "name": "Order shipped", "slug": "order-shipped", "description": null, "status": "active", "publishedVersion": 3, "latestVersion": 4, "createdAt": "2026-08-01T09:12:44.000Z", "updatedAt": "2026-08-28T16:03:10.000Z" } ], "hasMore": false, "nextCursor": null}الحقل publishedVersion هو ما يحلّه إرسال بلا version، وlatestVersion هو المسوّدة الجاثمة فوقه. واختلافهما يعني أن أحدهم حرّر ولم ينشر. وليس هذا خطأ، ويستحق الإظهار في سجل النشر.
الصف بيانات وصفية. أما slots وprops المعلَنة فتعود من عملية جلب، وهي الطلب الذي تجريه حين تحتاج أن تعرف ما تمرّره إلى قالب.