فضاهای کاری
ایجاد و مدیریت چندین فضای کاری برای پروژهها یا مشتریان مختلف
فضاهای کاری (tenantها) محیطهای ایزوله برای عملیات ایمیل شما هستند. هر فضای کاری دامنهها، مشترکین، کلیدهای API و صورتحساب مخصوص به خود را دارد. یک حساب کاربری واحد میتواند عضو چندین فضای کاری باشد.
این صفحه API مربوط به tenantها را در /v1/account/tenants پوشش میدهد: «فضای کاری» این صفحه همان tenant است (مرز ایزولهسازی صورتحساب/دامنه). /v1/account/workspaces یک قابلیت متفاوت و جداگانه است: زیرفضاهای کاری برای سازماندهی منابع درون یک tenant، که در این صفحه مستند نشده است.
زیرفضاهای کاری سازماندهی میکنند، tenantها جدا میکنند
زیرفضای کاری (/v1/account/workspaces) فقط منابع را درون یک tenant و با همان نقشهای موجود سازماندهی میکند. مرز صورتحساب، تحویلپذیری یا امنیت نیست. موارد زیر همیشه به tenant تعلق دارند:
- صورتحساب: پلن، اشتراک و فاکتورها
- فهرست سرکوب (suppression)
- محدودیتها و سهمیههای ارسال
- IPهای ارسال و اعتبار فرستنده
- امنیت کلیدهای API
اگر کسبوکار مستقلی دارید یا برای مشتری جداگانهای ارسال میکنید، برای او یک tenant جداگانه بسازید، نه یک زیرفضای کاری. در غیر این صورت آن مشتری فهرست سرکوب، محدودیتهای ارسال و اعتبار فرستنده را با بقیهٔ tenant مشترک خواهد داشت.
سطوح تایید
هر فضای کاری دارای سطح تاییدی است که قابلیتهای ارسال را تعیین میکند:
| سطح | مقدار | توضیحات |
|---|---|---|
Restricted | -1 | ارسال غیرفعال (تخلف شناسایی شده) |
Sandbox | 0 | پیشفرض برای فضاهای کاری جدید: فقط میتواند به فهرست مجاز sandbox آن فضای کاری ارسال کند |
BasicVerified | 1 | ایمیل، تلفن و 2FA همگی تأیید شده، محدودیتهای متوسط |
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 شناسهی عددی داخلی tenant است؛ publicId مقداری است که باید در فراخوانیهای API و رابطهای کاربری استفاده شود (فیلد عددی id تنها به این دلیل اینجا نمایش داده میشود که API فعلی آن را برمیگرداند: منطق کلاینت را حول آن نسازید، چون در حال حذف از پاسخهای سمت کلاینت است).
ایجاد فضای کاری
POST https://api.mail.land/v1/account/tenants{
"name": "New Project",
"description": "Optional workspace description"
}| فیلد | نوع | الزامی | توضیحات |
|---|---|---|---|
name | string | بله | نام فضای کاری، ۱ تا ۲۵۵ کاراکتر |
description | string | خیر | توضیحات اختیاری، حداکثر ۵۰۰ کاراکتر |
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 اختیاری است: اگر ارسال نشود، مقدار کوکی refresh token بهجای آن استفاده میشود. 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 بین ۲ تا ۱۰۰ کاراکتر است؛ description اختیاری است و حداکثر ۵۰۰ کاراکتر.
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 در محدوده فضای کاری فعال هستند. فضای کاری از طریق claim فضای کاری فعالِ توکن تعیین میشود. منابع (دامنهها، مشترکین، کمپینها، کلیدهای API) بین فضاهای کاری ایزوله هستند.
هنگام استفاده از کلیدهای API، هر کلید به یک فضای کاری واحد متعلق است. نیازی به تغییر فضای کاری نیست: کلید به صورت خودکار زمینه را تعیین میکند.
پاسخهای خطا
| وضعیت | کد | توضیحات |
|---|---|---|
400 | VALIDATION_FAILED | نام فضای کاری نامعتبر |
403 | FORBIDDEN | عضو فضای کاری مقصد نیستید |
403 | INSUFFICIENT_PERMISSIONS | فقط در بهروزرسانی: فراخوان Member یا Viewer یا یک کلید API است و هیچکدام دسترسی tenant.edit را ندارند |
404 | TENANT_NOT_FOUND | فضای کاری یافت نشد (فقط در بهروزرسانی: سوییچ به فضای کاری ناشناخته یا متعلق به مستأجر دیگر همیشه 403 FORBIDDEN برمیگرداند، نه 404) |
مراحل بعدی
- مدیریت تیم: دعوت اعضا به فضای کاری
- صورتحساب: مدیریت اشتراک فضای کاری
- احراز هویت: مدیریت توکن و نشست
- کلیدهای API: ایجاد کلیدهای API متعلق به فضای کاری