مدیریت تیم
دعوت اعضای تیم، تخصیص نقشها و مدیریت دسترسیها در فضای کاری
با دعوت اعضا به فضای کاری خود، با تیمتان همکاری کنید. به هر عضو یک نقش اختصاص داده میشود که دسترسیهای آنها را تعیین میکند.
نقشها
| نقش | مقدار | توضیحات |
|---|---|---|
Owner | 0 | دسترسی کامل، صورتحساب، امکان انتقال مالکیت |
Admin | 1 | دسترسی کامل به جز صورتحساب و انتقال مالکیت |
Member | 2 | ارسال ایمیل، مدیریت دامنهها، مشاهده تحلیلها |
Viewer | 3 | دسترسی فقط خواندنی به تمامی منابع |
دسترسیهای نقشها
Member فقطخواندنی نیست و از مدیریت کلیدها مستثنی نیست: میتواند تقریباً همه چیز را بسازد و ویرایش کند. فقط حذف کلیدهای API، دامنهها و وبهوکها، بهعلاوه مدیریت تیم و مالکیت، مخصوص Admin است.
| دسترسی | Owner | Admin | Member | Viewer |
|---|---|---|---|---|
| ارسال ایمیل | بله | بله | بله | خیر |
| مدیریت دامنهها | بله | بله | بله | خیر |
| مدیریت مشترکین | بله | بله | بله | خیر |
| مشاهده تحلیلها | بله | بله | بله | بله |
| ایجاد/چرخش کلیدهای API | بله | بله | بله | خیر |
| حذف کلیدهای API / دامنهها / وبهوکها | بله | بله | خیر | خیر |
| ایجاد/ویرایش وبهوکها | بله | بله | بله | خیر |
| ویرایش تنظیمات (شامل ردیابی) | بله | بله | بله | خیر |
| دعوت اعضا | بله | بله | خیر | خیر |
| حذف اعضا | بله | بله | خیر | خیر |
| بهروزرسانی نقشها | بله | بله | خیر | خیر |
| مدیریت صورتحساب | بله | خیر | خیر | خیر |
| انتقال مالکیت | بله | خیر | خیر | خیر |
| حذف فضای کاری | بله | خیر | خیر | خیر |
مرور تیم
دریافت اعضای فعلی تیم و دعوتنامههای در انتظار:
GET https://api.mail.land/v1/account/teamcurl https://api.mail.land/v1/account/team \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"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{
"email": "[email protected]",
"role": 2
}| فیلد | نوع | اجباری | توضیحات |
|---|---|---|---|
email | string | بله | آدرس ایمیل برای دعوت |
role | int | بله | نقش تخصیصی (۱ تا ۳، نمیتوان به عنوان Owner دعوت کرد) |
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"{
"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}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}/resendcurl -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{
"role": 1
}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 فهرست میکند. در غیر اینصورت میتوان کل بدنه را حذف کرد.
| فیلد | مقادیر |
|---|---|
reason | offboarding, compromise, abuse, other |
credentialDecision | revoke, keep, transfer |
transferToMemberId | زمانی الزامی است که credentialDecision برابر transfer باشد |
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}/reactivatecurl -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 برمیگرداند.
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{
"newOwnerMemberId": "mbr_f6g7h8i9j0"
}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).
پاسخهای خطا
| وضعیت | کد | توضیحات |
|---|---|---|
400 | VALIDATION_FAILED | ایمیل یا نقش نامعتبر |
400 | INVALID_REQUEST | بیش از ۵۰ دعوتنامهی معلق برای این فضای کاری |
400 | CREDENTIAL_DECISION_REQUIRED | هدف تعلیق/حذف دارای کلید API فعال است و credentialDecision ارسال نشده |
400 | CREDENTIAL_TRANSFER_TARGET_INVALID | credentialDecision: transfer با transferToMemberId مفقود یا نامعتبر |
403 | FORBIDDEN | دسترسی ناکافی برای این عملیات |
404 | RESOURCE_NOT_FOUND | عضو یا دعوتنامه یافت نشد |
400 | PLAN_LIMIT_REACHED | فضای کاری به سقف صندلیهای پلن خود رسیده است (دعوت کردن، پذیرفتن، فعالسازی دوباره یا اولین ورود از طریق SSO) |
409 | CONFLICT | کاربر از قبل عضو است، یا از قبل دعوتنامهی معلقی دارد |
هیچ کد MEMBER_ALREADY_EXISTS وجود ندارد: هم «از قبل عضو است» و هم «دعوتنامه از قبل وجود دارد» کد 409 CONFLICT برمیگردانند.
POST /v1/account/team/leave (ترک فضای کاری توسط خودتان) و GET /v1/account/team/me (رکورد عضویت خودتان) نیز وجود دارند و در جای دیگری از این صفحه مستند نشدهاند.
مراحل بعدی
- فضاهای کاری: مدیریت تنظیمات فضای کاری
- احراز هویت: احراز هویت و جلسات
- صورتحساب: مدیریت اشتراک و پرداخت