API của Free Domain Mail cho chương trình của bạn một hộp thư chỉ-nhận: tạo địa chỉ, chờ mã OTP hoặc link xác minh, đọc và xoá thư — không cần mở trình duyệt. Hợp với kiểm thử tự động (QA), kiểm thử luồng đăng ký và các script cần lấy mã từ email.
Tạo địa chỉTrên .info, .link, inboxlumo.com hoặc tên miền của bạn.
Chờ mã OTPMột lệnh, chờ tới 60 giây, trả về đúng mã.
Lấy link xác minhLink xác nhận được tách sẵn khỏi thư.
Mọi địa chỉ @tenmien (catch-all), không cần tạo trước
Thư được giữ
7 ngày
30 ngày
Tạo / xoá bằng API
POST /addresses, DELETE /addresses/{id}
Gắn tên miền trên web (cần bản ghi MX + TXT)
Địa chỉ mail tạm 10 phút (dùng không cần đăng ký) không gọi API được. Muốn dùng API với một địa chỉ đó, hãy giữ nó vào tài khoản: POST /addresses với đúng domain và name.
Request và response đều là JSON. Khóa sai, thiếu hoặc đã thu hồi → 401unauthorized. Chúng tôi chỉ lưu bản băm của khóa; mất khóa thì tạo khóa mới và thu hồi khóa cũ. Đừng nhúng khóa vào code chạy trên trình duyệt hay ứng dụng di động.
Các địa chỉ thành viên bạn đang giữ, cùng danh sách tên miền tạo được địa chỉ và số địa chỉ tối đa. receiving = false nghĩa là tên miền đó đã ngừng nhận thư mới (thư cũ vẫn đọc được).
Một tên miền trong domains của GET /addresses. Bỏ trống → tên miền đầu tiên.
name
Phần trước @. Chữ, số, dấu chấm, gạch ngang, gạch dưới; 6–40 ký tự trên freedomainmail.info/.link, 4–40 ký tự trên inboxlumo.com. Bỏ trống → tên ngẫu nhiên dễ nhớ.
Trả về 201 và địa chỉ (giống một phần tử của GET /addresses). Lỗi hay gặp: name_taken (409, tên đã có người giữ hoặc vừa được giải phóng), name_invalid (400), name_busy (409, địa chỉ đang nhận mail tạm công khai — thử lại sau 10 phút), limit_reached (409, đã giữ đủ 100 địa chỉ), daily_limit (429, đã tạo đủ số địa chỉ trong ngày).
DELETE/api/v1/addresses/{id}
Xoá địa chỉ cùng toàn bộ thư của nó. Trả về 204. Tên đó bị khoá 90 ngày (không ai tạo lại được), nên với test chạy nhiều lần hãy giữ và dùng lại một địa chỉ thay vì tạo–xoá mỗi lần.
Đọc đầy đủ một thư: nội dung text, HTML đã làm sạch, header, thông tin tệp đính kèm và các link tách được. Ảnh từ xa trong HTML bị chặn mặc định; thêm ?images=1 để giữ.
Chờ và trả về mã OTP mới nhất gửi tới một địa chỉ. Bắt buộc có address.
wait: số giây chờ, 0–60 (lớn hơn sẽ tính là 60). Lệnh trả về ngay khi thư có mã tới; hết giờ → 404not_found.
since: chỉ lấy thư nhận từ thời điểm này — đặt bằng lúc bạn bấm “Gửi mã” để không lấy nhầm mã cũ.
pattern (tuỳ chọn): khi mã không được tự nhận ra, chỉ chỗ mã nằm trong thư bằng {code} (3–16 chữ/số) hoặc {digits} (3–12 chữ số). Ví dụ thư có key là : 5599292 → pattern=key là : {code} trả về 5599292. Không phải regex, không phân biệt hoa thường, tối đa 200 ký tự.
Giống /code (cùng address, wait, since) nhưng chờ và trả về link xác minh mới nhất. primary là link chúng tôi đoán là link xác nhận; links là mọi link xác minh tìm được.
GET /messages, /code và /links dùng chung các tham số dưới đây. /code và /links luôn trả về đúng 1 thư mới nhất nên bỏ qua limit và cursor.
Tham số
Ý nghĩa
address
Địa chỉ nhận đầy đủ, ví dụ qa.signup@inboxlumo.com.
domain
Chỉ lấy thư của một tên miền.
from
Người gửi. Địa chỉ đầy đủ → khớp chính xác. Chỉ tên miền → khớp tên miền đó và tên miền con: from=facebookmail.com khớp security@facebookmail.com, nhưng from=facebook.comkhông khớp @facebookmail.com.
subject
Tiêu đề có chứa chuỗi này (không phân biệt hoa thường).
q
Tìm trong tiêu đề, người gửi, tên người gửi và địa chỉ nhận.
since
Thời điểm ISO 8601 (2026-10-31T08:00:00Z) hoặc Unix time (giây hoặc mili-giây). Chỉ lấy thư nhận từ lúc này. So với giờ server lúc nhận thư, nên trừ hao vài giây nếu đồng hồ máy bạn lệch.
limit
Số thư mỗi trang, tối đa 100, mặc định 50. Chỉ cho GET /messages.
cursor
Gửi lại next_cursor của lần trước để lấy trang tiếp. Chỉ cho GET /messages.
6. Ví dụ hoàn chỉnh
Kịch bản: kiểm thử luồng đăng ký có mã OTP. Dùng lại một địa chỉ đã tạo (biến FDM_ADDRESS), ghi lại thời điểm bắt đầu (since), bấm gửi mã trên trang của bạn, rồi chờ mã tối đa 30 giây.
import os
import sys
import time
import requests
API = "https://freedomainmail.com/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["FDM_KEY"]}
ADDRESS = os.environ["FDM_ADDRESS"] # ví dụ ci.signup@inboxlumo.com
# 1. Ghi lại thời điểm bắt đầu để không lấy nhầm mã cũ
since = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
# 2. ... điền ADDRESS vào form đăng ký và bấm "Gửi mã" trên trang của bạn ...
# 3. Chờ mã tối đa 30 giây
response = requests.get(
API + "/code",
headers=HEADERS,
params={"address": ADDRESS, "since": since, "wait": 30},
timeout=40,
)
if response.status_code == 200:
print("Mã:", response.json()["code"])
elif response.status_code == 404:
sys.exit("Chưa có mã sau 30 giây")
elif response.status_code == 429:
sys.exit("Gọi quá nhanh, chờ " + response.headers.get("Retry-After", "?") + "s")
else:
error = response.json()["error"]
sys.exit(f"{response.status_code} {error['code']}: {error['message']}")
Tạo địa chỉ một lần, dùng mãi
Chạy một lần để lấy địa chỉ cho biến FDM_ADDRESS. Thư cũ không làm sai kết quả vì mỗi lần chạy đều lọc bằng since.
Thường là thư chưa tới trong thời gian wait (hãy tăng wait hoặc gọi lại), since đặt muộn hơn lúc thư tới, gõ sai địa chỉ, hoặc địa chỉ không thuộc tài khoản của khóa này. Mở Hộp thư thành viên trên web để xem thư đã về chưa.
Mã OTP có trong thư nhưng /code không nhận ra?
Thêm tham số pattern để chỉ chỗ mã nằm, ví dụ pattern=Mã của bạn: {code}. Hoặc đọc thư bằng GET /messages/{id} và tự tách mã.
Có gửi thư bằng API được không?
Không. Dịch vụ chỉ nhận thư, không bao giờ gửi thư đi.
Một khóa API dùng cho mấy địa chỉ?
Mọi địa chỉ thành viên bạn giữ và mọi địa chỉ trên tên miền riêng của bạn. Có thể tạo tối đa 10 khóa, ví dụ mỗi môi trường CI một khóa.
Lộ khóa API thì làm sao?
Vào trang Khóa API, bấm Thu hồi khóa đó rồi tạo khóa mới. Khóa đã thu hồi ngừng hoạt động ngay.
Thư giữ bao lâu?
7 ngày với địa chỉ thành viên, 30 ngày với tên miền riêng. Muốn xoá sớm thì dùng DELETE /messages.
10. Quy định sử dụng
Chỉ dùng API cho mục đích kiểm thử và bảo vệ quyền riêng tư hợp pháp: QA, kiểm thử luồng đăng ký, lấy mã OTP hay link xác minh tự động. Dùng API để lừa đảo hoặc vi phạm điều khoản của bên thứ ba sẽ bị khoá tài khoản. Xem đầy đủ quy định sử dụng.