MailLandDocs
حساب کاربری

مدیریت تیم

دعوت اعضای تیم، تخصیص نقش‌ها و مدیریت دسترسی‌ها در فضای کاری

با دعوت اعضا به فضای کاری خود، با تیمتان همکاری کنید. به هر عضو یک نقش اختصاص داده می‌شود که دسترسی‌های آن‌ها را تعیین می‌کند.

نقش‌ها

نقشمقدارتوضیحات
Owner0دسترسی کامل، صورتحساب، امکان انتقال مالکیت
Admin1دسترسی کامل به جز صورتحساب و انتقال مالکیت
Member2ارسال ایمیل، مدیریت دامنه‌ها، مشاهده تحلیل‌ها
Viewer3دسترسی فقط خواندنی به تمامی منابع

دسترسی‌های نقش‌ها

Member فقط‌خواندنی نیست و از مدیریت کلیدها مستثنی نیست: می‌تواند تقریباً همه چیز را بسازد و ویرایش کند. فقط حذف کلیدهای API، دامنه‌ها و وب‌هوک‌ها، به‌علاوه مدیریت تیم و مالکیت، مخصوص Admin است.

دسترسیOwnerAdminMemberViewer
ارسال ایمیلبلهبلهبلهخیر
مدیریت دامنه‌هابلهبلهبلهخیر
مدیریت مشترکینبلهبلهبلهخیر
مشاهده تحلیل‌هابلهبلهبلهبله
ایجاد/چرخش کلیدهای APIبلهبلهبلهخیر
حذف کلیدهای API / دامنه‌ها / وب‌هوک‌هابلهبلهخیرخیر
ایجاد/ویرایش وب‌هوک‌هابلهبلهبلهخیر
ویرایش تنظیمات (شامل ردیابی)بلهبلهبلهخیر
دعوت اعضابلهبلهخیرخیر
حذف اعضابلهبلهخیرخیر
به‌روزرسانی نقش‌هابلهبلهخیرخیر
مدیریت صورتحساببلهخیرخیرخیر
انتقال مالکیتبلهخیرخیرخیر
حذف فضای کاریبلهخیرخیرخیر

مرور تیم

دریافت اعضای فعلی تیم و دعوت‌نامه‌های در انتظار:

GET https://api.mail.land/v1/account/team
List team members
curl https://api.mail.land/v1/account/team \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Team overview response
{
  "members": [
    {
      "publicId": "mbr_a1b2c3d4e5",
      "email": "[email protected]",
      "fullName": "John Doe",
      "role": "owner",
      "status": "active",
      "joinedAt": "2026-01-15T08:00:00Z",
      "invitedByEmail": null,
      "isCurrentUser": true
    },
    {
      "publicId": "mbr_f6g7h8i9j0",
      "email": "[email protected]",
      "fullName": "Jane Smith",
      "role": "admin",
      "status": "active",
      "joinedAt": "2026-01-20T10:00:00Z",
      "invitedByEmail": "[email protected]",
      "isCurrentUser": false
    }
  ],
  "pendingInvitations": [
    {
      "publicId": "inv_k1l2m3n4o5",
      "email": "[email protected]",
      "role": "member",
      "status": "pending",
      "createdAt": "2026-02-17T08:00:00Z",
      "expiresAt": "2026-02-24T08:00:00Z",
      "invitedByEmail": "[email protected]",
      "invitedByName": "John Doe",
      "isExpired": false
    }
  ],
  "totalMembers": 2,
  "totalPendingInvitations": 1,
  "maxMembers": 10
}

هیچ id، userId، firstName/lastName، roleName/statusName، invitedBy، memberCount یا invitationCount در این پاسخ وجود ندارد؛ به‌جای آن از نام‌های فیلد بالا استفاده کنید. maxMembers نشان‌دهنده‌ی پلن فضای کاری است: در پلن‌های Free و Pro برابر با 10 و در پلن Max نامحدود است. یک صندلی یعنی یک عضو فعال (شامل مالک) یا یک دعوت‌نامه‌ی معلق که هنوز منقضی نشده است؛ اعضای تعلیق‌شده و دعوت‌نامه‌های منقضی، لغوشده یا پذیرفته‌شده صندلی اشغال نمی‌کنند. در سقف مجاز، دعوت کردن، پذیرفتن، فعال‌سازی دوباره و اولین ورود از طریق SSO همگی 400 PLAN_LIMIT_REACHED برمی‌گردانند. کاهش پلن هیچ عضوی را حذف یا تعلیق نمی‌کند؛ فقط تا زمانی که فضای کاری بالاتر از سقف جدید باشد، از پذیرش عضو جدید جلوگیری می‌کند.

وضعیت‌های عضو

وضعیتتوضیحات
activeعضو فعال تیم
suspendedتعلیق شده توسط مدیر

وضعیت‌های دعوت‌نامه

این مقادیر به‌صورت رشته‌های حروف کوچک بازگردانده می‌شوند:

وضعیتتوضیحات
pendingدر انتظار پذیرش
acceptedدعوت‌نامه پذیرفته شده
expiredدعوت‌نامه منقضی شده (۷ روز)
revokedدعوت‌نامه لغو شده (نه "cancelled")

دعوت عضو جدید

POST https://api.mail.land/v1/account/team/invite
Invite request
{
  "email": "[email protected]",
  "role": 2
}
فیلدنوعاجباریتوضیحات
emailstringبلهآدرس ایمیل برای دعوت
roleintبلهنقش تخصیصی (۱ تا ۳، نمی‌توان به عنوان Owner دعوت کرد)
Invite a team member
curl -X POST https://api.mail.land/v1/account/team/invite \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{ "email": "[email protected]", "role": 2 }'

کاربر دعوت‌شده ایمیلی با لینک پذیرش دریافت می‌کند. دعوت‌نامه‌ها پس از ۷ روز منقضی می‌شوند.

پذیرش دعوت‌نامه

یک مسیر عمومی واحد برای پذیرش دعوت‌نامه وجود دارد: این مسیر نسخه‌بندی‌نشده است (/v1 بخشی از مسیر نیست) و بر اساس token دعوت‌نامه شناسایی می‌شود، نه یک id:

POST https://api.mail.land/invitations/{token}/accept

برای یک کاربر موجود MailLand، ابتدا با ایمیل دعوت‌شده وارد شوید، سپس این مسیر را با بدنه‌ای خالی یا حداقلی فراخوانی کنید، نیازی به firstName/lastName/password نیست. برای یک کاربر کاملاً جدید، fullName و password را در همان فراخوانی ارسال کنید تا حساب ساخته شود و در یک مرحله پذیرفته شود.

درخواست پذیرش دعوت‌نامه (کاربر جدید)
{
  "fullName": "New Member",
  "password": "SecureP@ssw0rd!"
}
پذیرش دعوت‌نامه
curl -X POST https://api.mail.land/invitations/invitation-token-from-email/accept \
  -H "Content-Type: application/json" \
  -d '{"fullName": "New Member", "password": "SecureP@ssw0rd!"}'

هیچ POST /v1/account/team/invitations/{id}/accept، هیچ مسیر جداگانه‌ی /accept-public، و هیچ GET /v1/team/invitations/{id}?token= وجود ندارد. هم پذیرش «کاربر موجود» و هم «کاربر جدید» از همین یک endpoint عمومی /invitations/{token}/accept عبور می‌کنند (Controllers/Public/InvitationsController.cs).

دریافت اطلاعات دعوت‌نامه

پیش از پذیرش، جزئیات دعوت‌نامه را دریافت کنید (عمومی، بدون نیاز به احراز هویت، شناسایی‌شده با token، نه /v1):

GET https://api.mail.land/invitations/{token}
دریافت اطلاعات دعوت‌نامه
curl "https://api.mail.land/invitations/invitation-token-from-email"
Invitation info response
{
  "tenantName": "My Company",
  "role": "member",
  "invitedByName": "John Doe",
  "expiresAt": "2026-02-24T08:00:00Z",
  "isExpired": false,
  "alreadyAccepted": false,
  "existingUserEmail": "[email protected]"
}

مدیریت دعوت‌نامه‌ها

لغو دعوت‌نامه

DELETE https://api.mail.land/v1/account/team/invitations/{id}
Cancel an invitation
curl -X DELETE https://api.mail.land/v1/account/team/invitations/{id} \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

در صورت موفقیت، 204 No Content برمی‌گرداند.

ارسال مجدد دعوت‌نامه

POST https://api.mail.land/v1/account/team/invitations/{id}/resend
Resend an invitation
curl -X POST https://api.mail.land/v1/account/team/invitations/{id}/resend \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

ارسال مجدد دعوت‌نامه، مهلت انقضای ۷ روزه را بازنشانی می‌کند.

به‌روزرسانی نقش عضو

PATCH https://api.mail.land/v1/account/team/members/{id}/role
Update role request
{
  "role": 1
}
Update member role
curl -X PATCH https://api.mail.land/v1/account/team/members/{id}/role \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{ "role": 1 }'

تنها مالکان و مدیران می‌توانند نقش‌ها را به‌روزرسانی کنند. نمی‌توانید نقش خود را تغییر دهید یا کسی را به مالک ارتقا دهید (برای این کار از انتقال مالکیت استفاده کنید).

کاربران Admin فقط می‌توانند نقش‌های Member/Viewer را مدیریت کنند: نمی‌توانند عضوی را به Admin ارتقا دهند یا نقش یک Admin دیگر را تغییر دهند. فقط Owner می‌تواند این کار را انجام دهد.

تعلیق و رفع تعلیق

تعلیق موقت دسترسی عضو:

POST https://api.mail.land/v1/account/team/members/{id}/suspend

بدنه‌ی { reason?, credentialDecision?, transferToMemberId? } کنترل می‌کند که در طول تعلیق چه اتفاقی برای کلیدهای API آن عضو می‌افتد. credentialDecision تنها زمانی الزامی است که آن عضو حداقل یک کلید API فعال داشته باشد: نبود آن در این حالت 400 CREDENTIAL_DECISION_REQUIRED را برمی‌گرداند و کلیدهای در معرض را در details فهرست می‌کند. در غیر این‌صورت می‌توان کل بدنه را حذف کرد.

فیلدمقادیر
reasonoffboarding, compromise, abuse, other
credentialDecisionrevoke, keep, transfer
transferToMemberIdزمانی الزامی است که credentialDecision برابر transfer باشد
Suspend a member
curl -X POST https://api.mail.land/v1/account/team/members/{id}/suspend \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

بازگردانی عضو تعلیق‌شده:

POST https://api.mail.land/v1/account/team/members/{id}/reactivate
Unsuspend a member
curl -X POST https://api.mail.land/v1/account/team/members/{id}/reactivate \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

اعضای تعلیق‌شده نمی‌توانند به فضای کاری وارد شوند؛ کلیدهای API آن‌ها از تصمیم مربوط به اعتبارنامه که هنگام تعلیق گرفته شده پیروی می‌کند: با keep، کلیدهای عضو همچنان کار می‌کنند.

حذف عضو

DELETE https://api.mail.land/v1/account/team/members/{id}

حذف عضو همان تصمیم اعتبارنامه را به‌صورت پارامترهای کوئری می‌پذیرد:

DELETE https://api.mail.land/v1/account/team/members/{id}?reason=offboarding&credentialDecision=revoke&transferToMemberId=mbr_f6g7h8i9j0

مانند تعلیق، credentialDecision زمانی الزامی است که عضو یک کلید API فعال داشته باشد؛ در غیر این‌صورت درخواست 400 CREDENTIAL_DECISION_REQUIRED برمی‌گرداند.

Remove a member
curl -X DELETE https://api.mail.land/v1/account/team/members/{id} \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

عضو از فضای کاری حذف می‌شود و بلافاصله دسترسی به تمامی منابع فضای کاری را از دست می‌دهد.

انتقال مالکیت

انتقال مالکیت فضای کاری به عضو دیگر:

POST https://api.mail.land/v1/account/team/transfer-ownership
Transfer ownership request
{
  "newOwnerMemberId": "mbr_f6g7h8i9j0"
}
Transfer ownership
curl -X POST https://api.mail.land/v1/account/team/transfer-ownership \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{ "newOwnerMemberId": "mbr_f6g7h8i9j0" }'

انتقال مالکیت غیرقابل بازگشت است. مالک فعلی به مدیر تنزل می‌یابد و عضو هدف مالک جدید می‌شود.

هدف باید یک Admin فعال باشد (نه Member یا Viewer).

پاسخ‌های خطا

وضعیتکدتوضیحات
400VALIDATION_FAILEDایمیل یا نقش نامعتبر
400INVALID_REQUESTبیش از ۵۰ دعوت‌نامه‌ی معلق برای این فضای کاری
400CREDENTIAL_DECISION_REQUIREDهدف تعلیق/حذف دارای کلید API فعال است و credentialDecision ارسال نشده
400CREDENTIAL_TRANSFER_TARGET_INVALIDcredentialDecision: transfer با transferToMemberId مفقود یا نامعتبر
403FORBIDDENدسترسی ناکافی برای این عملیات
404RESOURCE_NOT_FOUNDعضو یا دعوت‌نامه یافت نشد
400PLAN_LIMIT_REACHEDفضای کاری به سقف صندلی‌های پلن خود رسیده است (دعوت کردن، پذیرفتن، فعال‌سازی دوباره یا اولین ورود از طریق SSO)
409CONFLICTکاربر از قبل عضو است، یا از قبل دعوت‌نامه‌ی معلقی دارد

هیچ کد MEMBER_ALREADY_EXISTS وجود ندارد: هم «از قبل عضو است» و هم «دعوت‌نامه از قبل وجود دارد» کد 409 CONFLICT برمی‌گردانند.

POST /v1/account/team/leave (ترک فضای کاری توسط خودتان) و GET /v1/account/team/me (رکورد عضویت خودتان) نیز وجود دارند و در جای دیگری از این صفحه مستند نشده‌اند.

مراحل بعدی

در این صفحه