MailLandDocs
Konto

Authentifizierung

Authentifizieren Sie sich bei der Mail.Land API mit Bearer-Tokens oder API-Schlüsseln

MailLand unterstützt zwei Authentifizierungsmethoden: Bearer-Tokens (JWT) für Benutzersitzungen und API-Schlüssel für die Server-zu-Server-Integration. Alle API-Anfragen erfordern eine Authentifizierung über den Authorization-Header.

Authentifizierungsmethoden

MethodeHeaderAnwendungsfall
Bearer-TokenAuthorization: Bearer <token>Benutzersitzungen, Dashboard
API-SchlüsselX-API-Key: <key>Server-zu-Server, Automatisierung

Registrierung

POST https://api.mail.land/v1/auth/register
Registrierungsanfrage
{
  "email": "[email protected]",
  "password": "SecureP@ssw0rd!",
  "fullName": "John Doe",
  "companyName": "My Company"
}
Register
curl -X POST https://api.mail.land/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "SecureP@ssw0rd!",
    "fullName": "John Doe",
    "companyName": "My Company"
  }'
FeldTypErforderlichBeschreibung
emailstringJaE-Mail-Adresse
passwordstringJaPasswort (8–128 Zeichen; benötigt einen Groß- und Kleinbuchstaben, eine Ziffer und ein Sonderzeichen)
fullNamestringNeinVollständiger Name
companyNamestringNeinFirmen-/Arbeitsbereichsname

Unbekannte Felder (z. B. ein versehentlich gesendetes tenantName) werden stillschweigend verworfen.

Registrierungsantwort
{
  "requiresEmailVerification": true,
  "verificationTicket": "vt_abc123...",
  "maskedEmail": "u***@example.com"
}

Der Antwortstatus ist 201.

Nach der Registrierung muss die E-Mail-Adresse verifiziert werden, bevor Sie sich anmelden können.

E-Mail-Verifizierung

Bei der Registrierung wird ein 6-stelliger Code per E-Mail versendet. Rufen Sie POST /v1/auth/verify-email-ticket mit { "ticket": "<verificationTicket>", "code": "123456" } auf; bei Erfolg wird die Login-Token-Antwort zurückgegeben.

POST https://api.mail.land/v1/auth/verify-email-ticket
Anfrage zur E-Mail-Verifizierung
{
  "ticket": "vt_abc123...",
  "code": "123456"
}
Verify email
curl -X POST https://api.mail.land/v1/auth/verify-email-ticket \
  -H "Content-Type: application/json" \
  -d '{"ticket": "vt_abc123...", "code": "123456"}'

Senden Sie die Verifizierungs-E-Mail erneut: Rufen Sie POST /v1/auth/resend-verification-ticket mit { "ticket": "..." } auf. Die Anfrage ist ratenbegrenzt und liefert ein neues Ticket zurück.

POST https://api.mail.land/v1/auth/resend-verification-ticket
Anfrage zum erneuten Senden der Verifizierung
{
  "ticket": "vt_abc123..."
}
Resend verification
curl -X POST https://api.mail.land/v1/auth/resend-verification-ticket \
  -H "Content-Type: application/json" \
  -d '{"ticket": "vt_abc123..."}'

Anmeldung

POST https://api.mail.land/v1/auth/login
Anmeldeanfrage
{
  "email": "[email protected]",
  "password": "SecureP@ssw0rd!"
}
Login
curl -X POST https://api.mail.land/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "password": "SecureP@ssw0rd!"
  }'

Antwort

Die Anmeldeantwort variiert je nach Kontozustand:

Erfolgreiche Anmeldung:

Anmeldeantwort
{
  "userId": "v4j2x7n1m9k5p3",
  "email": "[email protected]",
  "fullName": "John Doe",
  "avatarUrl": null,
  "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  "refreshToken": "rt_a1b2c3d4e5...",
  "expiresAt": "2026-09-25T13:00:00Z",
  "requiresTwoFactor": false,
  "twoFactorChallengeId": null,
  "tenantCount": 1,
  "activeTenantId": "k3m9x2p7qw4rtz",
  "activeTenantName": "My Company",
  "requiresEmailVerification": false,
  "verificationTicket": null,
  "maskedEmail": null
}

Es gibt kein user-Objekt und keine role in der Antwort. Ein unverifiziertes Konto erhält 200 mit requiresEmailVerification: true und einem verificationTicket, keinen Fehler.

Zwei-Faktor-Authentifizierung erforderlich:

Antwort bei erforderlicher 2FA
{
  "accessToken": null,
  "refreshToken": null,
  "requiresTwoFactor": true,
  "twoFactorChallengeId": "2fa_challenge_abc123"
}

Wenn requiresTwoFactor den Wert true hat, schließen Sie die 2FA-Verifizierung ab, bevor Sie Tokens erhalten.

Token aktualisieren

Zugriffstoken laufen nach 60 Minuten ab. Verwenden Sie das Aktualisierungstoken, um ein neues Zugriffstoken zu erhalten:

POST https://api.mail.land/v1/auth/refresh-token
Anfrage zur Token-Aktualisierung
{
  "refreshToken": "rt_a1b2c3d4e5..."
}
Refresh token
curl -X POST https://api.mail.land/v1/auth/refresh-token \
  -H "Content-Type: application/json" \
  -d '{"refreshToken": "rt_a1b2c3d4e5..."}'

Die Antwort hat dieselbe Form wie die obige Login-Antwort (die vollständige AuthResponse), nicht nur diese drei Felder:

Antwort zur Token-Aktualisierung
{
  "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  "refreshToken": "rt_new_token...",
  "expiresAt": "2026-09-25T14:00:00Z"
}

Jedes Aktualisierungstoken kann nur einmal verwendet werden. Die Antwort enthält ein neues Aktualisierungstoken für die nächste Rotation.

Abmeldung

Invalidieren Sie die aktuelle Sitzung:

POST https://api.mail.land/v1/auth/logout

Senden Sie { "refreshToken": "..." } im Anfragetext (oder das Refresh-Token-Cookie). Das Refresh-Token wird widerrufen; das Access-Token bleibt bis zum Ablauf gültig, ein Bearer-Header allein widerruft nichts.

Logout
curl -X POST https://api.mail.land/v1/auth/logout \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Widerrufen Sie alle aktiven Sitzungen:

POST https://api.mail.land/v1/auth/revoke-all-tokens
Revoke all sessions
curl -X POST https://api.mail.land/v1/auth/revoke-all-tokens \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Passwortverwaltung

Passwort vergessen

POST https://api.mail.land/v1/auth/forgot-password
Anfrage bei vergessenem Passwort
{
  "email": "[email protected]"
}
Forgot password
curl -X POST https://api.mail.land/v1/auth/forgot-password \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

Sendet eine Passwortzurücksetzungs-E-Mail mit einem zeitlich begrenzten Token.

Passwort zurücksetzen

POST https://api.mail.land/v1/auth/reset-password

confirmPassword ist erforderlich und muss mit newPassword übereinstimmen; es gelten dieselben Komplexitätsregeln wie bei der Registrierung.

Anfrage zum Zurücksetzen des Passworts
{
  "token": "reset-token-from-email",
  "newPassword": "NewSecureP@ssw0rd!",
  "confirmPassword": "NewSecureP@ssw0rd!"
}
Reset password
curl -X POST https://api.mail.land/v1/auth/reset-password \
  -H "Content-Type: application/json" \
  -d '{
    "token": "reset-token-from-email",
    "newPassword": "NewSecureP@ssw0rd!",
    "confirmPassword": "NewSecureP@ssw0rd!"
  }'

Zurücksetzungstoken validieren

Prüfen Sie, ob ein Zurücksetzungstoken noch gültig ist, bevor Sie das Zurücksetzungsformular anzeigen:

GET https://api.mail.land/v1/auth/validate-reset-token?token=reset-token-from-email
Zurücksetzungstoken validieren
curl "https://api.mail.land/v1/auth/validate-reset-token?token=reset-token-from-email"
Token-Validierungsantwort
{
  "valid": true,
  "message": "Token is valid"
}

Passwort ändern

Ändern Sie das Passwort des aktuell authentifizierten Benutzers:

POST https://api.mail.land/v1/auth/change-password
Anfrage zur Passwortänderung
{
  "currentPassword": "OldP@ssw0rd!",
  "newPassword": "NewSecureP@ssw0rd!"
}
Change password
curl -X POST https://api.mail.land/v1/auth/change-password \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "currentPassword": "OldP@ssw0rd!",
    "newPassword": "NewSecureP@ssw0rd!"
  }'

Profilverwaltung

Aktuellen Benutzer abrufen

GET https://api.mail.land/v1/auth/me
Get current user
curl https://api.mail.land/v1/auth/me \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Antwort zum aktuellen Benutzer
{
  "id": "v4j2x7n1m9k5p3",
  "email": "[email protected]",
  "fullName": "John Doe",
  "companyName": "Acme",
  "avatarUrl": "https://cdn.mail.land/avatars/usr_a1b2c3d4e5.jpg",
  "status": "Active",
  "createdAt": "2026-01-15T08:00:00Z",
  "subscription": {
    "planName": "Pro",
    "monthlyEmailLimit": 50000,
    "rateLimitPerSecond": 10,
    "startDate": "2026-01-15T08:00:00Z",
    "endDate": "2026-10-15T08:00:00Z",
    "status": "Active"
  },
  "stats": {
    "credentialCount": 3,
    "domainCount": 2
  }
}

Es gibt kein firstName-, lastName-, phone-, tenantId-, role- oder twoFactorEnabled-Feld in dieser Antwort.

Profil aktualisieren

PUT https://api.mail.land/v1/auth/profile

fullName ist erforderlich; wird companyName weggelassen, wird es gelöscht. Diese Aktualisierung trifft die Zeile des Benutzers allein anhand der Benutzer-ID, funktioniert also aus jedem Arbeitsbereich, in dem der Benutzer aktiv ist, nicht nur aus dem, in dem das Konto erstellt wurde.

Anfrage zur Profilaktualisierung
{
  "fullName": "Jane Smith",
  "companyName": "Acme"
}
Update profile
curl -X PUT https://api.mail.land/v1/auth/profile \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "fullName": "Jane Smith",
    "companyName": "Acme"
  }'

Avatar hochladen

POST https://api.mail.land/v1/account/avatar

Senden Sie eine multipart/form-data-Anfrage mit der Avatar-Bilddatei. Unterstützte Formate: JPEG, PNG, GIF oder WebP (der Inhalt wird geprüft, nicht nur die Dateiendung). Maximale Größe: 1 MB.

Upload avatar
curl -X POST https://api.mail.land/v1/account/avatar \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -F "file=@/path/to/avatar.jpg"

Soziale Authentifizierung

MailLand unterstützt die Anmeldung über Google, GitHub und Microsoft:

Zum Anbieter weiterleiten

GET https://api.mail.land/auth/social/{provider}

Dabei ist {provider} entweder google, github oder microsoft. Dies leitet den Benutzer zum OAuth-Zustimmungsbildschirm des Anbieters weiter.

Redirect to social provider
curl https://api.mail.land/auth/social/google

Rückruf verarbeiten

Nachdem der Benutzer autorisiert hat, leitet der Anbieter mit einem Autorisierungscode zurück zu MailLand:

GET https://api.mail.land/auth/social/{provider}/callback?code=...
Social callback
curl "https://api.mail.land/auth/social/google/callback?code=authorization-code-from-provider"

Der Callback wird von MailLand verarbeitet, das den Browser zu {frontend}/{locale}/auth/callback?code=<Einmal-Code>&provider=... weiterleitet. Dieser code ist MailLands eigener Einmal-Code, nicht der Autorisierungscode des Anbieters: geben Sie ihn unverändert an den Austauschschritt unten weiter.

Gegen Tokens eintauschen

POST https://api.mail.land/v1/auth/social/exchange
Anfrage zum sozialen Austausch
{
  "code": "one-time-code-from-callback-redirect"
}
Exchange social code for tokens
curl -X POST https://api.mail.land/v1/auth/social/exchange \
  -H "Content-Type: application/json" \
  -d '{"code": "one-time-code-from-callback-redirect"}'

Gibt dieselbe AuthResponse wie die reguläre Anmeldung zurück.

Konto löschen

Die Löschung erfolgt pro Arbeitsbereich, nicht pro Benutzerkonto, und nur ein Owner des Arbeitsbereichs kann sie starten. Sie plant die Löschung nach einer Karenzzeit, statt sofort zu löschen:

POST https://api.mail.land/v1/account/lifecycle/schedule-deletion
Löschung planen – Anfrage
{
  "gracePeriodDays": 30
}
Löschung planen
curl -X POST https://api.mail.land/v1/account/lifecycle/schedule-deletion \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{"gracePeriodDays": 30}'

gracePeriodDays akzeptiert 7–90 (Standard 30); Werte außerhalb dieses Bereichs werden begrenzt, nicht abgelehnt. Die geplante Löschung kann jederzeit vor Ablauf der Karenzzeit storniert werden:

POST https://api.mail.land/v1/account/lifecycle/cancel-deletion

Arbeitsbereichs-Owner planen die Löschung mit POST /v1/account/lifecycle/schedule-deletion (gracePeriodDays 7–90, Standard 30, Werte außerhalb des Bereichs werden begrenzt) und können sie bis dahin mit POST /v1/account/lifecycle/cancel-deletion stornieren. Es gibt keinen Endpunkt DELETE /v1/auth/delete-account, und diese Aktion ist nicht pro Benutzer: sie löscht den gesamten Arbeitsbereich, sobald die Karenzzeit abgelaufen ist.

Fehlerantworten

StatusCodeBeschreibung
400VALIDATION_FAILEDRegistrierungsanfrage hat die Validierung nicht bestanden, mit einem errors[]-Array
401UNAUTHORIZEDFalsche E-Mail-Adresse oder falsches Passwort
403FORBIDDENKonto ist inaktiv
409CONFLICTE-Mail-Adresse bereits registriert
429TOO_MANY_LOGIN_ATTEMPTSZu viele fehlgeschlagene Anmeldeversuche; die Antwort enthält Retry-After

Eine nicht verifizierte E-Mail-Adresse führt zu keinem Fehler: Der Login antwortet mit 200, requiresEmailVerification: true und einem neuen verificationTicket.

Nächste Schritte

Auf dieser Seite