Lưu Vân MailLưu Vân Mail Docs Open App

Lưu Vân Mail API

Tạo và quản lý email tạm thời qua REST API. Sử dụng cho automation, testing, bảo mật, hoặc bất kỳ workflow nào cần email dùng một lần.

BASE URL

https://mail.luuvan.online
⚡ Miễn phí. Mặc định mỗi API key được 100 request/giờ. Admin có thể tăng giới hạn cho từng key.
🔒 Thành viên: Mailbox được lưu vĩnh viễn, không giới hạn số lượng. Khách: Tối đa 5 email/ngày, lưu tối đa 24 giờ.

Multi-domain

Hệ thống hỗ trợ nhiều domain email. Danh sách domain hiện có:

domains
animee.tokyo
vibecoder.io.vn
luuvan.site
luuvan.indevs.in
locpnv.indevs.in
lhuniverse.io.vn
locpnv.click
locpnv.site
luuvan.online
edu.luuvan.site
⚠ Các domain đang chờ kích hoạt DNS (zone pending), không nhận được email: luuvan.indevs.in, locpnv.indevs.in, locpnv.site

Tính năng chính

Tính năngMô tả
Multi-domainChọn domain khi tạo email. Gọi GET /api/domains để xem danh sách + pending status.
User Dashboard/dashboard — Quản lý mailbox, xem inbox, tạo API key.
Recovery KeyMỗi mailbox có RK để khôi phục. Dùng cho guest không cần đăng nhập.
Admin Panel/admin — Quản lý mailbox, messages, API keys, thành viên.
Expired MailboxMailbox khách hết hạn sẽ bị chặn với Recovery Key, nhưng dữ liệu vẫn được giữ để admin xem trong panel/export.

Xác thực (Authentication)

Mọi request đến API đều cần Bearer token trong header Authorization.

HTTP Header
Authorization: Bearer tm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Lấy API Key

Có 2 cách lấy API Key:

CáchMô tả
Tự tạoĐăng ký tài khoản → đăng nhập → gọi POST /api/register hoặc vào Dashboard. Mỗi tài khoản được 1 key, 100 req/h.
Admin cấpAdmin tạo key qua panel /admin — rate limit mặc định: 1000 req/giờ, có thể tuỳ chỉnh.
🔒 Scope: User API key chỉ truy cập mailbox do chính user/key đó tạo. Admin key và bootstrap key có quyền quản trị toàn hệ thống.

Đăng ký API Key

Bạn cần đăng ký tài khoản trước. Mỗi tài khoản được 1 API key duy nhất. Key hiển thị lại được trong Dashboard để dễ quản lý.

POST/api/register
🔒 Yêu cầu đăng nhập. Gọi API này với cookie session hoặc vào Dashboard để tạo key.
Tham sốKiểuBắt buộcMô tả
namestringYêu cầuTên ứng dụng của bạn (2-80 ký tự)
curl
# Đăng ký API key mới
curl -X POST https://mail.luuvan.online/api/register \
  -H "Content-Type: application/json" \
  -H "Cookie: tempmail_user_session=..." \
  -d '{"name": "My Cool App"}'
javascript
// Phải đăng nhập trước (cookie session tự gửi)
const res = await fetch('https://mail.luuvan.online/api/register', {
  method: 'POST',
  credentials: 'include',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'My Cool App' })
});
const data = await res.json();
console.log(data.apiKey); // tm_xxxx... (lưu lại ngay!)
201 Thành công
json
{
  "apiKey": "tm_ABCxyz123...",
  "username": "myuser",
  "rateLimit": 100,
  "rateLimitPeriod": "hour"
}
⚠ Mỗi tài khoản chỉ tạo được 1 key. Nếu cần key mới hoặc tăng rate limit, liên hệ admin.

Tạo API Key

Đang kiểm tra đăng nhập...

Rate Limits

Mỗi API key có giới hạn số request trên mỗi khung giờ. Admin có thể thay đổi giới hạn cho từng key.

100
User key (mặc định)
1,000
Admin key (mặc định)
Bootstrap key (env)

Response Headers

API key lưu trong database sẽ trả rate limit headers trên các Bearer API. Bootstrap key cấu hình bằng biến môi trường có thể không có các header này.

HTTP Headers
X-RateLimit-Limit: 100        # Tổng request được phép/giờ
X-RateLimit-Remaining: 95    # Request còn lại
X-RateLimit-Reset: 2025-01-01T... # Thời điểm reset
429 Khi vượt giới hạn
json
{
  "error": "Rate limit exceeded.",
  "limit": 100,
  "resetAt": "2025-01-01T12:00:00.000Z"
}

Mã lỗi

HTTP CodeMô tả
400Dữ liệu gửi lên không hợp lệ (thiếu tham số, sai format)
401Thiếu Authorization header hoặc Bearer token
403API key không hợp lệ hoặc đã bị thu hồi
404Mailbox hoặc message không tìm thấy
409Mailbox đã tồn tại, user đã có API key, hoặc messageId đã được lưu trước đó
429Vượt giới hạn rate limit
500Lỗi server nội bộ

Mọi lỗi đều trả về JSON với field error:

json
{ "error": "Mailbox not found or expired." }

Health Check

GET/health

Kiểm tra trạng thái cơ bản của service, domain hiện tại, danh sách domain và cấu hình TTL.

curl
curl https://mail.luuvan.online/health
200
json
{
  "ok": true,
  "domain": "luuvan.online",
  "domains": ["animee.tokyo", ...],
  "defaultTtlMinutes": 60,
  "maxTtlMinutes": 1440,
  "hasAdminPassword": true
}

Tạo Mailbox

POST/mailboxes

Tạo email mới bằng API key. Mailbox được tạo bằng API key của user sẽ thuộc về user đó và được lưu vĩnh viễn theo chính sách thành viên.

Tham sốKiểuBắt buộcMô tả
prefixstringTuỳ chọnPhần đầu email (1-32 ký tự, a-z 0-9 . _ -). Để trống = random.
domainstringTuỳ chọnDomain email muốn dùng. Nếu bỏ trống, hệ thống chọn domain mặc định theo base URL hiện tại.
metadataobjectTuỳ chọnDữ liệu phụ dạng JSON lưu cùng mailbox.
ttlMinutesnumberTuỳ chọnChỉ áp dụng cho mailbox khách/public. Với API key user, giá trị này được bỏ qua vì mailbox được lưu vĩnh viễn.
Chính sách lưu trữ: user đăng nhập/API key user = mailbox vĩnh viễn; khách không đăng nhập = tối đa 1440 phút và giới hạn 5 mailbox/ngày.
curl
curl -X POST https://mail.luuvan.online/mailboxes \
  -H "Authorization: Bearer tm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prefix": "otp-test", "domain": "luuvan.online"}'
javascript
const res = await fetch('https://mail.luuvan.online/mailboxes', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer $\{API_KEY}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ prefix: 'otp-test', domain: 'luuvan.online' })
});
const data = await res.json();
201 Thành công
json
{
  "mailbox": {
    "address": "otp-test@luuvan.online",
    "label": "otp-test",
    "createdAt": "2025-01-01T12:00:00.000Z",
    "expiresAt": "2125-01-01T12:00:00.000Z"
  },
  "recoveryKey": "RK-xxxxxxxxxxxxxxxxxxxxxxxx"
}

Xem Mailbox

GET/mailboxes/:address

Lấy thông tin mailbox. address là địa chỉ email đầy đủ, URL-encoded.

curl
curl https://mail.luuvan.online/mailboxes/otp-test%40luuvan.online \
  -H "Authorization: Bearer tm_YOUR_KEY"

Liệt kê tin nhắn

GET/mailboxes/:address/messages

Lấy danh sách tất cả tin nhắn trong mailbox, sắp xếp mới nhất trước.

curl
curl https://mail.luuvan.online/mailboxes/otp-test%40luuvan.online/messages \
  -H "Authorization: Bearer tm_YOUR_KEY"
200
json
{
  "mailbox": { ... },
  "messages": [
    {
      "id": "abc123",
      "from": "noreply@example.com",
      "to": "otp-test@luuvan.online",
      "subject": "Your OTP code",
      "receivedAt": "2025-01-01T12:05:00.000Z"
    }
  ]
}

Chi tiết tin nhắn

GET/messages/:id

Lấy nội dung đầy đủ của tin nhắn (text, HTML, headers).

curl
curl https://mail.luuvan.online/messages/abc123 \
  -H "Authorization: Bearer tm_YOUR_KEY"
200
json
{
  "message": {
    "id": "abc123",
    "from": "noreply@example.com",
    "to": "otp-test@luuvan.online",
    "subject": "Your OTP code",
    "text": "Your code is 482910",
    "html": "<p>Your code is <b>482910</b></p>",
    "receivedAt": "2025-01-01T12:05:00.000Z"
  }
}

Gia hạn Mailbox

POST/mailboxes/:address/extend

Kéo dài thời hạn sống của mailbox.

Tham sốKiểuBắt buộcMô tả
ttlMinutesnumberYêu cầuThời hạn mới (phút), từ 1 đến 1440.
curl
curl -X POST https://mail.luuvan.online/mailboxes/otp-test%40luuvan.online/extend \
  -H "Authorization: Bearer tm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ttlMinutes": 120}'

Xoá Mailbox

DELETE/mailboxes/:address

Xoá vĩnh viễn mailbox và toàn bộ tin nhắn bên trong.

curl
curl -X DELETE https://mail.luuvan.online/mailboxes/otp-test%40luuvan.online \
  -H "Authorization: Bearer tm_YOUR_KEY"
204 Thành công (không có body)

Lưu inbound message qua API

POST/inbound/messages

Ghi một email vào mailbox đã tồn tại bằng Bearer API. Endpoint này hữu ích cho automation, test E2E hoặc tích hợp inbound từ hệ thống ngoài.

Tham sốKiểuBắt buộcMô tả
tostringYêu cầuĐịa chỉ mailbox nhận thư.
fromstringTuỳ chọnNgười gửi. Nếu bỏ trống hệ thống dùng unknown.
subjectstringTuỳ chọnTiêu đề email.
textstringTuỳ chọnNội dung text.
htmlstringTuỳ chọnNội dung HTML.
headersobject|stringTuỳ chọnHeader phụ cần lưu.
messageIdstringTuỳ chọnID chống trùng. Nếu gửi lại cùng messageId sẽ trả 409.
receivedAtstringTuỳ chọnISO datetime. Nếu bỏ trống hệ thống dùng thời điểm hiện tại.
curl
curl -X POST https://mail.luuvan.online/inbound/messages \
  -H "Authorization: Bearer tm_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"otp-test@luuvan.online","from":"sender@example.com","subject":"OTP","text":"Your code is 123456","messageId":"<unique@example.com>"}'
201 Thành công
json
{ "stored": true }

Tạo mailbox public

POST/api/mailboxes

Tạo mailbox không cần API key. Nếu chưa đăng nhập, mỗi IP tạo tối đa 5 mailbox/ngày và mailbox có TTL tối đa 24 giờ. Nếu đã đăng nhập bằng cookie session, mailbox được gắn với user và lưu vĩnh viễn.

Tham sốKiểuBắt buộcMô tả
prefixstringTuỳ chọnPhần đầu email. Để trống = random.
domainstringTuỳ chọnDomain muốn dùng.
ttlMinutesnumberTuỳ chọnTTL cho khách, từ 1 đến 1440 phút.
metadataobjectTuỳ chọnDữ liệu phụ dạng JSON.
curl
curl -X POST https://mail.luuvan.online/api/mailboxes \
  -H "Content-Type: application/json" \
  -d '{"prefix":"guest-test","domain":"luuvan.online","ttlMinutes":60}'
201 Thành công
json
{
  "address": "guest-test@luuvan.online",
  "expiresAt": "2025-01-01T13:00:00.000Z",
  "recoveryKey": "RK-xxxxxxxxxxxxxxxxxxxxxxxx"
}

Xem inbox bằng Recovery Key

GET/api/inbox

Lấy mailbox và danh sách message bằng header x-recovery-key. Dùng cho mailbox public hoặc khi cần khôi phục inbox không cần đăng nhập.

curl
curl https://mail.luuvan.online/api/inbox \
  -H "x-recovery-key: RK-xxxxxxxxxxxxxxxxxxxxxxxx"
200
json
{
  "mailbox": { ... },
  "messages": [
    { "id": "abc123", "from": "sender@example.com", "subject": "OTP" }
  ]
}

Chi tiết message bằng Recovery Key

GET/api/inbox/messages/:id

Lấy nội dung đầy đủ của một message trong mailbox tương ứng với recovery key.

curl
curl https://mail.luuvan.online/api/inbox/messages/abc123 \
  -H "x-recovery-key: RK-xxxxxxxxxxxxxxxxxxxxxxxx"

Kiểm tra phiên đăng nhập

GET/api/auth/me

Kiểm tra user hiện tại từ cookie session. Nếu chưa đăng nhập, API trả {"user":null}.

curl
curl https://mail.luuvan.online/api/auth/me \
  -H "Cookie: tempmail_user_session=..."

Thông báo mail mới của tôi

GET/api/my/notifications

Trả tổng số message trong tất cả mailbox thuộc user đang đăng nhập. Endpoint này đang được puppy notification dùng để phát hiện mail mới trên toàn bộ mailbox của user.

200
json
{ "totalMessages": 12 }

Email của tôi

GET/api/my/mailboxes

Lấy danh sách tất cả mailbox của user đang đăng nhập. Yêu cầu cookie session (không cần Bearer token).

🔒 Yêu cầu đăng nhập (cookie session). Truy cập Dashboard để dùng giao diện đồ hoạ.
200
json
{
  "mailboxes": [
    {
      "address": "test@luuvan.online",
      "label": "test",
      "createdAt": "2025-01-01T12:00:00.000Z",
      "expiresAt": "2025-01-01T13:00:00.000Z",
      "recoveryKey": "RK-xxxx...",
      "active": true
    }
  ]
}

Xem inbox của tôi

GET/api/my/mailboxes/:address/messages

Lấy tin nhắn trong mailbox thuộc về user đang đăng nhập. Chỉ xem được mailbox do chính mình tạo.

200
json
{
  "mailbox": { ... },
  "messages": [
    { "id": "...", "from": "...", "subject": "...", "receivedAt": "..." }
  ]
}

Chi tiết thư của tôi

GET/api/my/messages/:id

Xem nội dung đầy đủ của tin nhắn. Chỉ xem được thư thuộc mailbox của mình.

Xóa mailbox của tôi

DELETE/api/my/mailboxes/:address

Xóa vĩnh viễn mailbox mà bạn đã tạo. Chỉ xóa được mailbox thuộc về tài khoản của bạn.

204 Thành công

Danh sách domain

GET/api/domains

Lấy danh sách tất cả domain có sẵn và domain đang pending (không cần xác thực).

curl
curl https://mail.luuvan.online/api/domains
200
json
{
  "domains": ["vibecoder.io.vn", "luuvan.site", ...],
  "pendingDomains": ["locpnv.site", ...]
}
⚠ Domain trong pendingDomains chưa kích hoạt DNS — email gửi đến sẽ không nhận được. Tránh tạo mailbox với domain pending.

Admin API nội bộ

Nhóm endpoint này phục vụ Admin Panel và yêu cầu cookie session admin sau khi đăng nhập tại /admin. Đây không phải Bearer API public cho bên thứ ba.

MethodEndpointMô tả
POST/admin/api/mailboxesTạo mailbox bằng quyền admin.
GET/admin/api/mailboxes/:address/messagesXem messages của mailbox bất kỳ.
GET/admin/api/messages/:idXem chi tiết message.
DELETE/admin/api/mailboxes/:addressXóa mailbox.
POST/admin/api/api-keysTạo API key admin/user-level theo cấu hình panel.
POST/admin/api/api-keys/:id/rate-limitCập nhật rate limit.
POST/admin/api/api-keys/:id/revokeThu hồi API key.
GET/admin/api/statsThống kê tổng quan.
GET/admin/api/all-messages100 message mới nhất toàn hệ thống.
GET/admin/api/usersDanh sách user kèm số mailbox/message.
GET/admin/api/users/:id/mailboxesMailbox và API key của một user.
DELETE/admin/api/users/:idXóa user và dữ liệu liên quan.
Click để mở inbox
Woof! Có thư mới!
1