TempMail API v1
REST API để tạo email tạm thời, đọc thư và lấy mã OTP tự động.
Xác thực & Rate limit
Mọi endpoint (trừ /domains) yêu cầu API key trong header:
X-API-Key: tm_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API key được cấp trong trang quản trị, có thể đặt thời hạn hoặc vô thời hạn.
⚡ Rate limit: 2000 request / giây / IP (cấu hình được 1000–2000 qua biến môi trường RATE_LIMIT). Header chuẩn RateLimit-* được trả kèm mỗi response.
Endpoints
Tạo một địa chỉ email mới. Bỏ trống username để random; bỏ trống domain để chọn ngẫu nhiên.
curl -X POST https://yourdomain.com/api/v1/email/create \
-H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"username": "thuan123", "domain": "tempmail.local"}'
Response:
{
"success": true,
"email": "thuan123@tempmail.local",
"id": 42,
"created_at": 1751788800000
}
Danh sách domain đang hoạt động. Không cần API key.
{ "success": true, "domains": ["tempmail.local", "quickinbox.local"] }
Danh sách email đã tạo bởi API key hiện tại (tối đa 500, mới nhất trước).
{
"success": true,
"count": 2,
"emails": [
{ "address": "thuan123@tempmail.local", "created_at": 1751788800000, "message_count": 3 }
]
}
Đọc toàn bộ thư của một địa chỉ (tối đa 100, mới nhất trước). Thư sẽ được đánh dấu đã đọc.
curl "https://yourdomain.com/api/v1/messages?email=thuan123@tempmail.local" \ -H "X-API-Key: YOUR_KEY"
{
"success": true,
"email": "thuan123@tempmail.local",
"count": 1,
"messages": [
{
"id": 7,
"sender": "no-reply@service.com",
"subject": "Mã xác minh của bạn",
"body_text": "Mã OTP của bạn là: 493201",
"body_html": "Mã OTP của bạn là: 493201
",
"received_at": 1751788912000,
"is_read": 0
}
]
}
Tự động trích xuất mã OTP từ thư mới nhất. Logic ưu tiên:
- Số 4–8 chữ số nằm cùng dòng với từ khoá (OTP, code, mã xác minh, verify, PIN…) — hỗ trợ cả mã có khoảng trắng/gạch nối như
123 456. - Số 4–8 chữ số đứng riêng một dòng (kiểu mail in mã to giữa trang).
- Fallback: số 6 chữ số đầu tiên trong nội dung.
since_minutes (mặc định 15): chỉ quét thư nhận trong N phút gần nhất — tránh lấy nhầm mã cũ.
{
"success": true,
"otp": "493201",
"source": {
"message_id": 7,
"sender": "no-reply@service.com",
"subject": "Mã xác minh của bạn",
"received_at": 1751788912000
}
}
Nếu chưa có mã: { "success": true, "otp": null } — hãy poll lại sau vài giây.
Endpoint phát triển: bơm một thư giả vào hộp để test khi chưa cấu hình MX record.
{ "to": "thuan123@tempmail.local", "from": "test@x.com", "subject": "Test", "text": "OTP: 123456" }
Mã lỗi
| HTTP | Ý nghĩa |
|---|---|
| 401 | Thiếu API key, key sai hoặc đã hết hạn / bị thu hồi |
| 400 | Tham số không hợp lệ (username sai định dạng, thiếu ?email=…) |
| 404 | Email không tồn tại |
| 409 | Địa chỉ email đã có người dùng |
| 429 | Vượt rate limit (2000 req/s) |
Ví dụ luồng lấy OTP tự động (Python)
import requests, time
BASE = "https://yourdomain.com/api/v1"
H = {"X-API-Key": "YOUR_KEY"}
email = requests.post(f"{BASE}/email/create", json={}, headers=H).json()["email"]
print("Dùng email:", email) # đăng ký dịch vụ bằng email này...
for _ in range(30): # poll tối đa 60s
r = requests.get(f"{BASE}/otp", params={"email": email}, headers=H).json()
if r["otp"]:
print("OTP:", r["otp"]); break
time.sleep(2)