مساحات العمل
إنشاء وإدارة مساحات عمل متعددة لمشاريع أو عملاء مختلفين
مساحات العمل (المستأجرون) هي بيئات معزولة لعمليات البريد الإلكتروني الخاصة بك. تمتلك كل مساحة عمل نطاقاتها ومشتركيها ومفاتيح API وفوترتها الخاصة. يمكن لحساب مستخدم واحد أن ينتمي إلى مساحات عمل متعددة.
تغطي هذه الصفحة واجهة برمجة المستأجرين (tenants) على /v1/account/tenants: "مساحة العمل" في هذه الصفحة هي مستأجر (حدود عزل الفوترة/النطاق). أما /v1/account/workspaces فهي ميزة مختلفة ومنفصلة: مساحات عمل فرعية تُستخدم لتنظيم الموارد داخل مستأجر واحد، وليست موثّقة في هذه الصفحة.
المساحات الفرعية تنظّم، والمستأجرون (tenants) يفصلون
المساحة الفرعية (/v1/account/workspaces) تنظّم الموارد داخل مستأجر (tenant) واحد فقط، وباستخدام الأدوار الحالية. وهي ليست حدًّا للفوترة أو قابلية التسليم أو الأمان. العناصر التالية تعود دائمًا إلى المستأجر:
- الفوترة: الخطة والاشتراك والفواتير
- قائمة الحظر (suppression)
- حدود الإرسال والحصص
- عناوين IP الخاصة بالإرسال وسمعة المرسل
- أمان مفاتيح API
إذا كنت تدير نشاطًا تجاريًا مستقلًا أو تخدم عميلًا منفصلًا، فأنشئ له مستأجرًا (tenant) منفصلًا بدلًا من مساحة فرعية. وإلا فسيشارك هذا العميل قائمة الحظر وحدود الإرسال والسمعة مع الجميع داخل المستأجر.
مستويات التحقق
لكل مساحة عمل مستوى تحقق يحدد قدرات الإرسال:
| المستوى | القيمة | الوصف |
|---|---|---|
Restricted | -1 | الإرسال معطل (تم اكتشاف مخالفة) |
Sandbox | 0 | الافتراضي لمساحات العمل الجديدة: يمكن الإرسال فقط إلى قائمة السماح الخاصة بالـ sandbox |
BasicVerified | 1 | تم التحقق من البريد الإلكتروني والهاتف والمصادقة الثنائية معاً، حدود متوسطة |
SenderVerified | 2 | تفعيل مصادقة النطاق أو التحقق من مرسل واحد، حدود قياسية |
BusinessVerified | 3 | اكتمل التحقق التجاري: حدود كاملة |
تبدأ مساحات العمل الجديدة عند مستوى Sandbox، حيث يقتصر الإرسال على قائمة سماح لكل مساحة عمل. يتطلب BasicVerified البريد الإلكتروني والهاتف والمصادقة الثنائية معاً، وليس البريد الإلكتروني وحده. يتطلب SenderVerified مصادقة النطاق (SPF+DKIM+DMARC) أو مرسلاً واحداً موثّقاً، أيّهما، وليس تحديداً تحقق النطاق.
عرض مساحات العمل
الحصول على جميع مساحات العمل التي ينتمي إليها المستخدم الحالي:
GET https://api.mail.land/v1/account/tenantscurl https://api.mail.land/v1/account/tenants \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."[
{
"publicId": "k3m9x2p7qw4rtz",
"name": "My Company",
"role": "owner",
"isActive": true,
"status": "active"
},
{
"publicId": "t2p9k4m7x1n6w3",
"name": "Client Project",
"role": "member",
"isActive": true,
"status": "active"
}
]الاستجابة هي مصفوفة مجردة، وليست { "tenants": [...] }. لا يوجد roleName أو verificationLevel أو verificationLevelName أو isCurrent أو createdAt هنا: isActive وstatus يحلان محل isCurrent، ويتم جلب مستوى التحقق بشكل منفصل (راجع الفوترة). id هو المعرّف الرقمي الداخلي للمستأجر؛ publicId هو القيمة التي يجب استخدامها في استدعاءات API وواجهات المستخدم (حقل id الرقمي يُعرض هنا فقط لأن الواجهة الحالية تُعيده: لا تبنِ منطق العميل حوله، لأنه في طور الإزالة من الاستجابات الموجهة للعميل).
إنشاء مساحة عمل
POST https://api.mail.land/v1/account/tenants{
"name": "New Project",
"description": "Optional workspace description"
}| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
name | string | نعم | اسم مساحة العمل، من 1 إلى 255 حرفًا |
description | string | لا | وصف اختياري، حتى 500 حرف |
curl -X POST https://api.mail.land/v1/account/tenants \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{ "name": "New Project" }'الاستجابة
يُعيد 201 Created بنفس شكل استجابة تبديل مساحة العمل: رموز جديدة مخصصة لمساحة العمل الجديدة، بالإضافة إلى سجل مساحة العمل المتداخل تحت tenant:
{
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "rt_new_token...",
"expiresAt": "2026-02-17T13:00:00Z",
"tenant": {
"publicId": "u6w1m8k3p5x9n2",
"name": "New Project",
"role": "owner",
"isActive": true,
"status": "active"
}
}يتم تعيين دور Owner للمستخدم المُنشئ تلقائياً. لا يوجد verificationLevel/verificationLevelName في هذه الاستجابة، راجع الفوترة لحالة التحقق/السياسة.
تبديل مساحة العمل
تبديل مساحة العمل النشطة لاستدعاءات API اللاحقة:
POST https://api.mail.land/v1/account/tenants/switch{
"tenantId": "t2p9k4m7x1n6w3",
"refreshToken": "rt_a1b2c3d4e5..."
}refreshToken اختياري: إذا لم يُرسل، تُستخدم القيمة من كوكي رمز التحديث بدلاً منه. tenantId هو publicId الخاص بمساحة العمل من قائمة مساحات العمل.
curl -X POST https://api.mail.land/v1/account/tenants/switch \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{ "tenantId": "t2p9k4m7x1n6w3" }'{
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "rt_new_token...",
"expiresAt": "2026-09-25T15:00:00Z",
"tenant": {
"publicId": "t2p9k4m7x1n6w3",
"name": "Client Project",
"role": "member",
"isActive": true,
"status": "active"
}
}يؤدي تبديل مساحات العمل إلى إصدار رموز جديدة مخصصة لمساحة العمل المستهدفة. حقول tenant لها نفس شكل استجابة عرض مساحات العمل، متداخلة تحت tenant بدلاً من أن تكون مسطحة كـ tenantId/tenantName/role.
تحديث مساحة العمل
تحديث إعدادات مساحة العمل الحالية:
PUT https://api.mail.land/v1/account/tenants/current{
"name": "Updated Project Name",
"description": "Optional workspace description"
}name من 2 إلى 100 حرف؛ description اختياري، حتى 500 حرف.
curl -X PUT https://api.mail.land/v1/account/tenants/current \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{ "name": "Updated Project Name" }'يمكن فقط لأصحاب الملكية (Owner) والمسؤولين (Admin) تحديث مساحة العمل. الأعضاء (Member) والمشاهدون (Viewer) ومفاتيح API تحصل على 403 INSUFFICIENT_PERMISSIONS مُصنَّف (مع الصلاحية المفقودة tenant.edit في details.permission).
الاستجابة
تُرجع 200 OK:
{
"publicId": "t2p9k4m7x1n6w3",
"name": "Updated Project Name",
"description": "Optional workspace description",
"status": "Active",
"createdAt": "2026-01-15T08:00:00Z"
}سياق مساحة العمل
جميع طلبات API محددة النطاق بمساحة العمل النشطة. يتم تحديد مساحة العمل من خلال خاصية مساحة العمل النشطة في الرمز. الموارد (النطاقات، المشتركون، الحملات، مفاتيح API) معزولة بين مساحات العمل.
عند استخدام مفاتيح API، يكون كل مفتاح محدداً لمساحة عمل واحدة. لا حاجة لتبديل مساحة العمل، يحدد المفتاح السياق تلقائياً.
استجابات الأخطاء
| الحالة | الرمز | الوصف |
|---|---|---|
400 | VALIDATION_FAILED | اسم مساحة عمل غير صالح |
403 | FORBIDDEN | ليس عضواً في مساحة العمل المستهدفة |
403 | INSUFFICIENT_PERMISSIONS | فقط عند التحديث: المستدعي عضو أو مشاهد أو مفتاح API، وليس لدى أي منهم صلاحية tenant.edit |
404 | TENANT_NOT_FOUND | مساحة العمل غير موجودة (فقط عند التحديث: تبديل مساحة عمل غير معروفة أو تابعة لمستأجر آخر يُرجع دائماً 403 FORBIDDEN، وليس 404) |
الخطوات التالية
- إدارة الفريق: دعوة الأعضاء إلى مساحة العمل
- الفوترة: إدارة اشتراك مساحة العمل
- المصادقة: إدارة الرموز والجلسات
- مفاتيح API: إنشاء مفاتيح API محددة لمساحة العمل