Teamverwaltung
Laden Sie Teammitglieder ein, weisen Sie Rollen zu und verwalten Sie Berechtigungen in Ihrem Workspace
Arbeiten Sie mit Ihrem Team zusammen, indem Sie Mitglieder in Ihren Workspace einladen. Jedem Mitglied wird eine Rolle zugewiesen, die seine Berechtigungen bestimmt.
Rollen
| Rolle | Wert | Beschreibung |
|---|---|---|
Owner | 0 | Vollzugriff, Abrechnung, kann Eigentumsrechte übertragen |
Admin | 1 | Vollzugriff außer Abrechnung und Eigentumsübertragung |
Member | 2 | E-Mails senden, Domains verwalten, Analysen einsehen |
Viewer | 3 | Schreibgeschützter Zugriff auf alle Ressourcen |
Rollenberechtigungen
Member ist nicht schreibgeschützt und nicht von der Schlüsselverwaltung ausgeschlossen: es kann fast alles erstellen und bearbeiten. Nur das Löschen von API-Schlüsseln, Domains und Webhooks sowie Team-/Eigentümerverwaltung ist Admin-exklusiv.
| Berechtigung | Owner | Admin | Member | Viewer |
|---|---|---|---|---|
| E-Mails senden | Ja | Ja | Ja | Nein |
| Domains verwalten | Ja | Ja | Ja | Nein |
| Abonnenten verwalten | Ja | Ja | Ja | Nein |
| Analysen einsehen | Ja | Ja | Ja | Ja |
| API-Schlüssel erstellen/rotieren | Ja | Ja | Ja | Nein |
| API-Schlüssel / Domains / Webhooks löschen | Ja | Ja | Nein | Nein |
| Webhooks erstellen/bearbeiten | Ja | Ja | Ja | Nein |
| Einstellungen bearbeiten (inkl. Tracking) | Ja | Ja | Ja | Nein |
| Mitglieder einladen | Ja | Ja | Nein | Nein |
| Mitglieder entfernen | Ja | Ja | Nein | Nein |
| Rollen aktualisieren | Ja | Ja | Nein | Nein |
| Abrechnung verwalten | Ja | Nein | Nein | Nein |
| Eigentumsrechte übertragen | Ja | Nein | Nein | Nein |
| Workspace löschen | Ja | Nein | Nein | Nein |
Team-Übersicht
Rufen Sie die aktuellen Teammitglieder und ausstehende Einladungen ab:
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
}Es gibt kein id, userId, firstName/lastName, roleName/statusName, invitedBy, memberCount oder invitationCount in dieser Antwort: verwenden Sie stattdessen die obigen Feldnamen. maxMembers richtet sich nach dem Plan des Workspaces: 10 bei Free und Pro, unbegrenzt bei Max. Ein Sitzplatz ist ein aktives Mitglied (den Owner eingeschlossen) oder eine ausstehende, nicht abgelaufene Einladung; suspendierte Mitglieder sowie abgelaufene, widerrufene oder angenommene Einladungen zählen nicht. Am Limit liefern Einladen, Annehmen, Reaktivieren und der erste SSO-Login jeweils 400 PLAN_LIMIT_REACHED. Ein Downgrade entfernt oder suspendiert niemanden: es blockiert nur neue Aufnahmen, solange der Workspace über dem neuen Limit liegt.
Mitgliederstatus
| Status | Beschreibung |
|---|---|
active | Aktives Teammitglied |
suspended | Von einem Administrator gesperrt |
Einladungsstatus
Wird als Kleinbuchstaben-String zurückgegeben:
| Status | Beschreibung |
|---|---|
pending | Wartet auf Annahme |
accepted | Einladung angenommen |
expired | Einladung abgelaufen (7 Tage) |
revoked | Einladung widerrufen (nicht "cancelled") |
Teammitglied einladen
POST https://api.mail.land/v1/account/team/invite{
"email": "[email protected]",
"role": 2
}| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
email | string | Ja | E-Mail-Adresse für die Einladung |
role | int | Ja | Zuzuweisende Rolle (1–3, keine Einladung als Owner möglich) |
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 }'Der eingeladene Benutzer erhält eine E-Mail mit einem Link zur Annahme der Einladung. Einladungen laufen nach 7 Tagen ab.
Einladung annehmen
Es gibt eine einzige öffentliche Route zum Annehmen einer Einladung: sie ist nicht versioniert (/v1 ist nicht Teil des Pfads) und wird über das Einladungs-Token adressiert, nicht über eine ID:
POST https://api.mail.land/invitations/{token}/acceptFür einen bestehenden MailLand-Benutzer melden Sie sich zuerst mit der eingeladenen E-Mail-Adresse an und rufen dann diese Route mit einem leeren oder minimalen Body auf, firstName/lastName/password sind nicht nötig. Für einen komplett neuen Benutzer übergeben Sie fullName und password im selben Aufruf, um das Konto zu erstellen und in einem Schritt anzunehmen.
{
"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!"}'Es gibt kein POST /v1/account/team/invitations/{id}/accept, keine separate /accept-public-Route und kein GET /v1/team/invitations/{id}?token=. Sowohl "bestehender Benutzer" als auch "neuer Benutzer" laufen über diesen einen öffentlichen Endpunkt /invitations/{token}/accept (Controllers/Public/InvitationsController.cs).
Einladungsinformationen abrufen
Rufen Sie Einladungsdetails vor der Annahme ab (öffentlich, keine Authentifizierung nötig, über das Token adressiert, nicht /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]"
}Einladungen verwalten
Einladung stornieren
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..."Liefert bei Erfolg 204 No Content.
Einladung erneut senden
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..."Das erneute Senden einer Einladung setzt die 7-tägige Ablaufzeit zurück.
Mitgliederrolle aktualisieren
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 }'Nur Owners und Admins können Rollen aktualisieren. Sie können Ihre eigene Rolle nicht ändern oder jemanden zum Owner befördern (verwenden Sie stattdessen die Eigentumsübertragung).
Admins können nur Member-/Viewer-Rollen verwalten: sie können ein Mitglied nicht zu Admin befördern oder die Rolle eines anderen Admins ändern. Nur der Owner kann das.
Sperren und Entsperren
Sperren Sie den Zugriff eines Mitglieds vorübergehend:
POST https://api.mail.land/v1/account/team/members/{id}/suspendEin Body { reason?, credentialDecision?, transferToMemberId? } steuert, was während der Sperrung mit den API-Schlüsseln dieses Mitglieds geschieht. credentialDecision ist nur erforderlich, wenn das Mitglied mindestens einen aktiven API-Schlüssel besitzt: wird es in diesem Fall weggelassen, liefert der Aufruf 400 CREDENTIAL_DECISION_REQUIRED, mit den betroffenen Schlüsseln in details. Andernfalls kann der gesamte Body weggelassen werden.
| Feld | Werte |
|---|---|
reason | offboarding, compromise, abuse, other |
credentialDecision | revoke, keep, transfer |
transferToMemberId | Erforderlich, wenn credentialDecision gleich transfer ist |
curl -X POST https://api.mail.land/v1/account/team/members/{id}/suspend \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Gesperrtes Mitglied reaktivieren:
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..."Gesperrte Mitglieder können sich nicht mehr beim Workspace anmelden; ihre API-Schlüssel folgen der bei der Sperrung getroffenen Credential-Entscheidung: bei keep funktionieren die Schlüssel des Mitglieds weiter.
Mitglied entfernen
DELETE https://api.mail.land/v1/account/team/members/{id}Das Entfernen akzeptiert dieselbe Credential-Entscheidung als Query-Parameter:
DELETE https://api.mail.land/v1/account/team/members/{id}?reason=offboarding&credentialDecision=revoke&transferToMemberId=mbr_f6g7h8i9j0Wie beim Sperren ist credentialDecision erforderlich, wenn das Mitglied einen aktiven API-Schlüssel besitzt; andernfalls liefert der Aufruf 400 CREDENTIAL_DECISION_REQUIRED.
curl -X DELETE https://api.mail.land/v1/account/team/members/{id} \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Das Mitglied wird aus dem Workspace entfernt und verliert sofort den Zugriff auf alle Workspace-Ressourcen.
Eigentumsrechte übertragen
Übertragen Sie die Workspace-Eigentumsrechte auf ein anderes Mitglied:
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" }'Die Eigentumsübertragung ist unwiderruflich. Der aktuelle Owner wird zum Admin herabgestuft und das Zielmitglied wird der neue Owner.
Das Ziel muss ein aktiver Admin sein (kein Member oder Viewer).
Fehlerantworten
| Status | Code | Beschreibung |
|---|---|---|
400 | VALIDATION_FAILED | Ungültige E-Mail oder Rolle |
400 | INVALID_REQUEST | Mehr als 50 ausstehende Einladungen für diesen Arbeitsbereich |
400 | CREDENTIAL_DECISION_REQUIRED | Sperr-/Entfernungsziel besitzt aktive API-Schlüssel und credentialDecision fehlt |
400 | CREDENTIAL_TRANSFER_TARGET_INVALID | credentialDecision: transfer mit fehlender oder ungültiger transferToMemberId |
403 | FORBIDDEN | Unzureichende Berechtigungen für diese Aktion |
404 | RESOURCE_NOT_FOUND | Mitglied oder Einladung nicht gefunden |
400 | PLAN_LIMIT_REACHED | Workspace hat das Sitzplatzlimit seines Plans erreicht (Einladen, Annehmen, Reaktivieren oder erster SSO-Login) |
409 | CONFLICT | Benutzer ist bereits Mitglied oder hat bereits eine ausstehende Einladung |
Es gibt keinen MEMBER_ALREADY_EXISTS-Code: sowohl "bereits Mitglied" als auch "Einladung existiert bereits" liefern 409 CONFLICT.
POST /v1/account/team/leave (den Arbeitsbereich selbst verlassen) und GET /v1/account/team/me (der eigene Mitgliedschaftsdatensatz) existieren ebenfalls und sind sonst auf dieser Seite nicht dokumentiert.
Nächste Schritte
- Workspaces: Workspace-Einstellungen verwalten
- Authentifizierung: Authentifizierung und Sitzungen
- Abrechnung: Abonnement- und Zahlungsverwaltung