MailLandDocs
Konto

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

RolleWertBeschreibung
Owner0Vollzugriff, Abrechnung, kann Eigentumsrechte übertragen
Admin1Vollzugriff außer Abrechnung und Eigentumsübertragung
Member2E-Mails senden, Domains verwalten, Analysen einsehen
Viewer3Schreibgeschü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.

BerechtigungOwnerAdminMemberViewer
E-Mails sendenJaJaJaNein
Domains verwaltenJaJaJaNein
Abonnenten verwaltenJaJaJaNein
Analysen einsehenJaJaJaJa
API-Schlüssel erstellen/rotierenJaJaJaNein
API-Schlüssel / Domains / Webhooks löschenJaJaNeinNein
Webhooks erstellen/bearbeitenJaJaJaNein
Einstellungen bearbeiten (inkl. Tracking)JaJaJaNein
Mitglieder einladenJaJaNeinNein
Mitglieder entfernenJaJaNeinNein
Rollen aktualisierenJaJaNeinNein
Abrechnung verwaltenJaNeinNeinNein
Eigentumsrechte übertragenJaNeinNeinNein
Workspace löschenJaNeinNeinNein

Team-Übersicht

Rufen Sie die aktuellen Teammitglieder und ausstehende Einladungen ab:

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
}

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

StatusBeschreibung
activeAktives Teammitglied
suspendedVon einem Administrator gesperrt

Einladungsstatus

Wird als Kleinbuchstaben-String zurückgegeben:

StatusBeschreibung
pendingWartet auf Annahme
acceptedEinladung angenommen
expiredEinladung abgelaufen (7 Tage)
revokedEinladung widerrufen (nicht "cancelled")

Teammitglied einladen

POST https://api.mail.land/v1/account/team/invite
Invite request
{
  "email": "[email protected]",
  "role": 2
}
FeldTypErforderlichBeschreibung
emailstringJaE-Mail-Adresse für die Einladung
roleintJaZuzuweisende Rolle (1–3, keine Einladung als Owner möglich)
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 }'

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}/accept

Fü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.

Einladung annehmen – Anfrage (neuer Benutzer)
{
  "fullName": "New Member",
  "password": "SecureP@ssw0rd!"
}
Einladung annehmen
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}
Einladungsinformationen abrufen
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]"
}

Einladungen verwalten

Einladung stornieren

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..."

Liefert bei Erfolg 204 No Content.

Einladung erneut senden

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..."

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
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 }'

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}/suspend

Ein 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.

FeldWerte
reasonoffboarding, compromise, abuse, other
credentialDecisionrevoke, keep, transfer
transferToMemberIdErforderlich, wenn credentialDecision gleich transfer ist
Suspend a member
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}/reactivate
Unsuspend a member
curl -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_f6g7h8i9j0

Wie beim Sperren ist credentialDecision erforderlich, wenn das Mitglied einen aktiven API-Schlüssel besitzt; andernfalls liefert der Aufruf 400 CREDENTIAL_DECISION_REQUIRED.

Remove a member
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
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" }'

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

StatusCodeBeschreibung
400VALIDATION_FAILEDUngültige E-Mail oder Rolle
400INVALID_REQUESTMehr als 50 ausstehende Einladungen für diesen Arbeitsbereich
400CREDENTIAL_DECISION_REQUIREDSperr-/Entfernungsziel besitzt aktive API-Schlüssel und credentialDecision fehlt
400CREDENTIAL_TRANSFER_TARGET_INVALIDcredentialDecision: transfer mit fehlender oder ungültiger transferToMemberId
403FORBIDDENUnzureichende Berechtigungen für diese Aktion
404RESOURCE_NOT_FOUNDMitglied oder Einladung nicht gefunden
400PLAN_LIMIT_REACHEDWorkspace hat das Sitzplatzlimit seines Plans erreicht (Einladen, Annehmen, Reaktivieren oder erster SSO-Login)
409CONFLICTBenutzer 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

Auf dieser Seite