MailLandDocs
Hesap

Kimlik Doğrulama

Bearer token veya API anahtarları kullanarak Mail.Land API ile kimlik doğrulama

MailLand iki kimlik doğrulama yöntemini destekler: kullanıcı oturumları için Bearer token (JWT) ve sunucular arası entegrasyon için API anahtarları. Tüm API istekleri, Authorization başlığı aracılığıyla kimlik doğrulaması gerektirir.

Kimlik Doğrulama Yöntemleri

YöntemBaşlıkKullanım Durumu
Bearer TokenAuthorization: Bearer <token>Kullanıcı oturumları, kontrol paneli
API AnahtarıX-API-Key: <key>Sunucular arası, otomasyon

Kayıt

POST https://api.mail.land/v1/auth/register
Registration request
{
  "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"
  }'
AlanTürZorunluAçıklama
emailstringEvetE-posta adresi
passwordstringEvetŞifre (8-128 karakter; büyük harf, küçük harf, rakam ve özel karakter içermeli)
fullNamestringHayırTam ad
companyNamestringHayırŞirket / çalışma alanı adı

Bilinmeyen alanlar (yanlışlıkla gönderilen bir tenantName gibi) sessizce yok sayılır.

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

Yanıt durumu 201'dir.

Kayıttan sonra, giriş yapmadan önce e-posta adresini doğrulayın.

E-posta Doğrulama

Kayıt sırasında 6 haneli bir kod e-postayla gönderilir. { "ticket": "<verificationTicket>", "code": "123456" } gövdesiyle POST /v1/auth/verify-email-ticket çağrılır; başarılı olursa giriş token yanıtı döner.

POST https://api.mail.land/v1/auth/verify-email-ticket
Verify email request
{
  "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"}'

Doğrulama e-postasını yeniden gönderin: { "ticket": "..." } gövdesiyle POST /v1/auth/resend-verification-ticket çağrılır. Bu istek hız sınırlıdır ve yeni bir ticket döner.

POST https://api.mail.land/v1/auth/resend-verification-ticket
Resend verification request
{
  "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..."}'

Giriş

POST https://api.mail.land/v1/auth/login
Login request
{
  "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!"
  }'

Yanıt

Giriş yanıtı, hesap durumuna göre değişir:

Başarılı giriş:

Login response
{
  "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
}

Yanıtta bir user nesnesi ve role alanı yoktur. Doğrulanmamış bir hesap bir hata değil, requiresEmailVerification: true ve bir verificationTicket ile 200 alır.

İki faktörlü kimlik doğrulama gerekli:

2FA required response
{
  "accessToken": null,
  "refreshToken": null,
  "requiresTwoFactor": true,
  "twoFactorChallengeId": "2fa_challenge_abc123"
}

requiresTwoFactor değeri true olduğunda, token almadan önce 2FA doğrulamasını tamamlayın.

Token Yenileme

Erişim tokenları 60 dakika sonra sona erer. Yeni bir erişim tokenı almak için yenileme tokenını kullanın:

POST https://api.mail.land/v1/auth/refresh-token
Refresh token request
{
  "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..."}'

Yanıt, yukarıdaki giriş yanıtıyla aynı biçimdedir (tam AuthResponse), yalnızca bu üç alan değil:

Refresh response
{
  "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  "refreshToken": "rt_new_token...",
  "expiresAt": "2026-09-25T14:00:00Z"
}

Her yenileme tokenı yalnızca bir kez kullanılabilir. Yanıt, bir sonraki döngü için yeni bir yenileme tokenı içerir.

Çıkış

Mevcut oturumu geçersiz kılın:

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

İstek gövdesinde { "refreshToken": "..." } gönderin (veya refresh token çerezini kullanın). Refresh token iptal edilir; access token süresi dolana kadar geçerli kalır: yalnızca Bearer başlığı hiçbir şeyi iptal etmez.

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

Tüm aktif oturumları iptal edin:

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

Şifre Yönetimi

Şifremi Unuttum

POST https://api.mail.land/v1/auth/forgot-password
Forgot password request
{
  "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]"}'

Süresi sınırlı token içeren bir şifre sıfırlama e-postası gönderir.

Şifre Sıfırlama

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

confirmPassword zorunludur ve newPassword ile eşleşmelidir; kayıt sırasındaki aynı karmaşıklık kuralları geçerlidir.

Reset password request
{
  "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!"
  }'

Sıfırlama Tokenını Doğrulama

Sıfırlama formunu göstermeden önce sıfırlama tokenının hâlâ geçerli olup olmadığını kontrol edin:

GET https://api.mail.land/v1/auth/validate-reset-token?token=reset-token-from-email
Sıfırlama tokenını doğrula
curl "https://api.mail.land/v1/auth/validate-reset-token?token=reset-token-from-email"
Token doğrulama yanıtı
{
  "valid": true,
  "message": "Token is valid"
}

Şifre Değiştirme

Mevcut kimliği doğrulanmış kullanıcının şifresini değiştirin:

POST https://api.mail.land/v1/auth/change-password
Change password request
{
  "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!"
  }'

Profil Yönetimi

Mevcut Kullanıcıyı Getir

GET https://api.mail.land/v1/auth/me
Get current user
curl https://api.mail.land/v1/auth/me \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Current user response
{
  "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
  }
}

Bu yanıtta firstName, lastName, phone, tenantId, role veya twoFactorEnabled alanı yoktur.

Profili Güncelle

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

fullName zorunludur; companyName gönderilmezse temizlenir. Bu güncelleme kullanıcının satırıyla yalnızca kullanıcı kimliğine göre eşleşir, bu nedenle hesabın oluşturulduğu çalışma alanıyla sınırlı kalmadan kullanıcının aktif olduğu her çalışma alanından çalışır.

Update profile request
{
  "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 Yükle

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

Avatar resim dosyasıyla birlikte multipart/form-data isteği gönderin. Desteklenen formatlar: JPEG, PNG, GIF veya WebP (uzantı değil, dosya içeriği kontrol edilir). Maksimum boyut: 1 MB.

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

Sosyal Kimlik Doğrulama

MailLand, Google, GitHub ve Microsoft aracılığıyla sosyal girişi destekler:

Sağlayıcıya Yönlendir

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

{provider} değeri google, github veya microsoft olabilir. Bu, kullanıcıyı sağlayıcının OAuth onay ekranına yönlendirir.

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

Geri Çağrıyı İşle

Kullanıcı yetkilendirme verdikten sonra sağlayıcı, bir yetkilendirme koduyla MailLand'e geri yönlendirir:

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"

Callback, tarayıcıyı {frontend}/{locale}/auth/callback?code=<tek kullanımlık kod>&provider=... adresine yönlendiren MailLand tarafından işlenir. Bu code, sağlayıcının yetkilendirme kodu değil, MailLand'in kendi tek kullanımlık kodudur, değiştirmeden aşağıdaki değişim adımına iletin.

Token ile Değiştir

POST https://api.mail.land/v1/auth/social/exchange
Social exchange request
{
  "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"}'

Normal girişle aynı AuthResponse döndürür.

Hesabı Sil

Silme işlemi kullanıcı hesabı bazında değil, çalışma alanı bazında yapılır ve yalnızca bir çalışma alanı Owner'ı bunu başlatabilir. Hemen silmek yerine bir bekleme süresinin ardından silmeyi planlar:

POST https://api.mail.land/v1/account/lifecycle/schedule-deletion
Silme planlama isteği
{
  "gracePeriodDays": 30
}
Silmeyi planla
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 7-90 arası bir değer kabul eder (varsayılan 30); bu aralığın dışındaki değerler reddedilmez, sınıra çekilir. Planlanan silme, bekleme süresi bitmeden önce herhangi bir zamanda iptal edilebilir:

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

Çalışma alanı Owner'ları, silmeyi POST /v1/account/lifecycle/schedule-deletion ile (gracePeriodDays 7-90, varsayılan 30, aralık dışı değerler sınıra çekilir) planlar ve o zamana kadar POST /v1/account/lifecycle/cancel-deletion ile iptal edebilir. DELETE /v1/auth/delete-account diye bir endpoint yoktur ve bu işlem kullanıcı bazında değildir: bekleme süresi dolduğunda tüm çalışma alanını siler.

Hata Yanıtları

DurumKodAçıklama
400VALIDATION_FAILEDKayıt isteği doğrulamayı geçemedi, bir errors[] dizisiyle birlikte
401UNAUTHORIZEDYanlış e-posta veya şifre
403FORBIDDENHesap aktif değil
409CONFLICTE-posta zaten kayıtlı
429TOO_MANY_LOGIN_ATTEMPTSÇok fazla başarısız giriş denemesi; yanıt Retry-After içerir

Doğrulanmamış bir e-posta hata döndürmez: giriş, requiresEmailVerification: true ve yeni bir verificationTicket ile 200 yanıtı verir.

Sonraki Adımlar

Bu sayfada