MailLandDocs
حساب کاربری

فضاهای کاری

ایجاد و مدیریت چندین فضای کاری برای پروژه‌ها یا مشتریان مختلف

فضاهای کاری (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ارسال غیرفعال (تخلف شناسایی شده)
Sandbox0پیش‌فرض برای فضاهای کاری جدید: فقط می‌تواند به فهرست مجاز sandbox آن فضای کاری ارسال کند
BasicVerified1ایمیل، تلفن و 2FA همگی تأیید شده، محدودیت‌های متوسط
SenderVerified2احراز هویت دامنه یا یک فرستنده‌ی تکی تأییدشده، محدودیت‌های استاندارد
BusinessVerified3تایید کسب‌وکار تکمیل شده: محدودیت‌های کامل

فضاهای کاری جدید از سطح Sandbox شروع می‌کنند، جایی که ارسال به فهرست مجاز مختص همان فضای کاری محدود است. BasicVerified نیازمند ایمیل، تلفن و احراز هویت دومرحله‌ای با هم است، نه فقط ایمیل. SenderVerified نیازمند احراز هویت دامنه (SPF+DKIM+DMARC) یا یک فرستنده‌ی تکی تأییدشده است، هرکدام، نه لزوماً تأیید دامنه.

فهرست فضاهای کاری

دریافت تمامی فضاهای کاری که کاربر فعلی عضو آن‌هاست:

GET https://api.mail.land/v1/account/tenants
List workspaces
curl 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"
}
فیلدنوعالزامیتوضیحات
namestringبلهنام فضای کاری، ۱ تا ۲۵۵ کاراکتر
descriptionstringخیرتوضیحات اختیاری، حداکثر ۵۰۰ کاراکتر
Create a workspace
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 فضای کاری از فهرست فضاهای کاری است.

Switch workspace
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 اختیاری است و حداکثر ۵۰۰ کاراکتر.

Update workspace
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، هر کلید به یک فضای کاری واحد متعلق است. نیازی به تغییر فضای کاری نیست: کلید به صورت خودکار زمینه را تعیین می‌کند.

پاسخ‌های خطا

وضعیتکدتوضیحات
400VALIDATION_FAILEDنام فضای کاری نامعتبر
403FORBIDDENعضو فضای کاری مقصد نیستید
403INSUFFICIENT_PERMISSIONSفقط در به‌روزرسانی: فراخوان Member یا Viewer یا یک کلید API است و هیچ‌کدام دسترسی tenant.edit را ندارند
404TENANT_NOT_FOUNDفضای کاری یافت نشد (فقط در به‌روزرسانی: سوییچ به فضای کاری ناشناخته یا متعلق به مستأجر دیگر همیشه 403 FORBIDDEN برمی‌گرداند، نه 404)

مراحل بعدی

در این صفحه