API mua Gmail live ngắn: đặt đơn và đọc hộp thư bằng code
Mua Gmail live ngắn không còn chỉ làm được trên web. Mọi việc trang "Mua gmail live ngắn" làm được, từ xem giá, đặt đơn, tải tài khoản đến đọc hộp thư, giờ đều gọi được qua API /v1/mail-shop, bằng đúng API key và số dư bạn đang dùng để thuê Gmail. Đơn mua qua API hiện cả trong tab Lịch sử trên web, và đơn mua trên web cũng đọc được qua API.
Bài này dành cho developer, QA và người làm tự động hóa. Tài liệu đầy đủ và luôn mới nhất nằm ở tài liệu API, mục Mua Gmail live ngắn.
Chín lệnh của API mua Gmail
| Lệnh | Dùng để |
|---|---|
GET /v1/mail-shop/products |
Xem các loại đang bán: mã sản phẩm, bảng giá theo số lượng, tồn kho, số tối đa mỗi đơn, điều khoản |
GET /v1/mail-shop/quote |
Báo giá cho một số lượng (không giữ hàng) |
POST /v1/mail-shop/orders |
Mua: trừ tiền ngay, tài khoản là của bạn |
GET /v1/mail-shop/orders |
Danh sách đơn, mới nhất trước (không kèm tài khoản) |
GET /v1/mail-shop/orders/{id} |
Một đơn cùng mọi tài khoản đã giao tới lúc đó |
GET /v1/mail-shop/orders/{id}/download |
Tải tài khoản dạng .txt, mỗi tài khoản một dòng |
GET /v1/mail-shop/orders/{id}/items/{lineNo}/inbox |
Đọc thư mới nhất của một tài khoản |
POST /v1/mail-shop/orders/{id}/items/{lineNo}/inbox-link |
Tạo link đọc hộp thư mới hoặc tắt link |
GET /v1/mail-shop/orders/{id}/items/{lineNo}/status |
Kiểm tra tài khoản còn sống |
Xác thực giống API thuê: header Authorization: Bearer <API key>, key bắt đầu bằng og_, lấy ở trang tài liệu sau khi đăng nhập.
Luồng bốn bước
- Chọn sản phẩm. Gọi
GET /v1/mail-shop/products, lấycodecủa loại muốn mua (ví dụgm_used), kiểm traavailablelàtruevà số lượng không vượtmaxQty. Đọc kỹterms: đó là điều khoản và bảo hành của loại đó. - Báo giá (tùy chọn).
GET /v1/mail-shop/quote?product=gm_used&quantity=5trả đơn giá, tổng tiền và bậc giá áp dụng. Lệnh này không giữ hàng. - Đặt đơn.
POST /v1/mail-shop/ordersvới body{"product": "...", "quantity": n}và headerIdempotency-Keymới (UUID). Tiền trừ ngay. Lệnh này chờ giao hàng tối đa khoảng 16 giây, nên đặt timeout phía client ít nhất 60 giây. Phản hồi thường đã là đơncompletedkèmitems[]. - Theo dõi nếu chưa xong. Khi
statuslàqueuedhoặcprocessing, gọiGET /v1/mail-shop/orders/{id}mỗi 5 giây tới khi đơn chốt:completed,partialhoặcfailed. Đơn nhiều tài khoản có thể giao dần; tài khoản về tới đâu hiện trongitems[]tới đó.
Ví dụ Python
Đặt biến môi trường OTPGMAIL_BASE là tên miền OTPGmail kèm https:// (không thêm /v1, vì đường dẫn trong ví dụ đã có sẵn /v1), và thay YOUR_API_KEY bằng key của bạn.
import os, time, uuid, requests
BASE = os.environ["OTPGMAIL_BASE"]
H = {"Authorization": "Bearer YOUR_API_KEY"}
# 1. Chọn một sản phẩm đang bán
products = requests.get(f"{BASE}/v1/mail-shop/products", headers=H, timeout=30).json()["data"]
product = next(p for p in products if p["available"])
# 2. Mua 2 tài khoản: key mới cho mỗi lần mua, giữ lại để thử lại khi timeout
key = str(uuid.uuid4())
r = requests.post(f"{BASE}/v1/mail-shop/orders",
json={"product": product["code"], "quantity": 2},
headers={**H, "Idempotency-Key": key}, timeout=60)
body = r.json()
if not body["success"]:
raise SystemExit(f'{r.status_code} {body["error"]["code"]}: {body["error"]["message"]}')
order = body["data"]
# 3. Chờ tới khi đơn chốt
while order["status"] in ("queued", "processing"):
time.sleep(5)
order = requests.get(f"{BASE}/v1/mail-shop/orders/{order['id']}", headers=H, timeout=30).json()["data"]
print(order["status"], order["deliveredCount"], order["refundVnd"])
for it in order["items"]:
print(it["lineNo"], it["email"], "đọc được hộp thư" if it["inbox"] else "")
Ví dụ Node.js
Chạy trên Node 18 trở lên (có sẵn fetch). Key được tạo bên ngoài hàm để lần thử lại dùng đúng key cũ.
import { randomUUID } from "node:crypto";
const BASE = process.env.OTPGMAIL_BASE;
const H = { Authorization: "Bearer YOUR_API_KEY" };
export async function buy(product, quantity, key = randomUUID()) {
const res = await fetch(`${BASE}/v1/mail-shop/orders`, {
method: "POST",
headers: { ...H, "Content-Type": "application/json", "Idempotency-Key": key },
body: JSON.stringify({ product, quantity }),
signal: AbortSignal.timeout(60_000),
});
const body = await res.json();
if (!body.success) throw new Error(`${res.status} ${body.error.code}`);
let order = body.data;
while (order.status === "queued" || order.status === "processing") {
await new Promise((r) => setTimeout(r, 5000));
order = (await (await fetch(`${BASE}/v1/mail-shop/orders/${order.id}`, { headers: H })).json()).data;
}
return order;
}
Đọc kết quả: trạng thái, định dạng và hoàn tiền
completed: giao đủ.partial: giao thiếu, phần thiếu đã hoàn vào số dư (refundVnd, lý do ởmessage).failed: không giao được tài khoản nào, hoàn toàn bộ.- Mỗi tài khoản trong
items[]cólineNo,email,password,recovery(trống nếu không có),loginUrl(trống nếu sản phẩm không có link),cookies(chỉ có ở sản phẩm giao cookies),inboxvàinboxUrl. Hãy đọc theo từng trường thay vì tự táchrawLine, vì định dạng dòng có thể khác nhau. - File
.txttừ/downloadgiống file tải trên web: tài khoản có cookies ghiemail|mật khẩu|mail khôi phục|cookies, cuối dòng thêm link đọc hộp thư khi link còn hạn; tài khoản khác giữ nguyên dòng nguồn giao, ví dụemail----mật khẩu----mail khôi phục----link. - Đơn nhiều tài khoản có cookies có thể nặng vài MB: dừng hỏi khi đơn đã chốt.
- Giá trả về là giá áp cho chính tài khoản của bạn và được khóa lúc mua (
unitPriceVnd); bậc giá theo số lượng nằm trongpriceTiers.
Tài khoản đã giao là mua đứt, không hoàn ngoài điều khoản của sản phẩm. Bảo hành chỉ cho lần đăng nhập thành công đầu tiên trong 2 giờ sau khi mua: không vào được thì nhắn hỗ trợ kèm mã đơn (id) để được đổi tài khoản khác hoặc hoàn vào số dư, tùy tình trạng kho. Chi tiết ở bài bảo hành Gmail live ngắn.
Đọc hộp thư và kiểm tra còn sống
Các lệnh dưới đây chỉ dùng được cho tài khoản có inbox: true trong items[]:
GET .../items/{lineNo}/inbox?max=10trả các thư mới nhất: người gửi, tiêu đề, thời gian vàcodelà mã hoặc link hệ thống tách được.maxnhận 10, 20, 50, 100 hoặc 200; đọc nhiều thư có thể mất tới khoảng một phút.- Lỗi
409 PROVIDER_ERRORkèmdetails.dead = truenghĩa là tài khoản đã bị khóa hoặc xóa, đọc lại cũng vô ích;502 PROVIDER_ERRORlà lỗi tạm, thử lại sau. GET .../items/{lineNo}/statustrảlivelàtrue,falsehoặcnullkhi chưa xác định được.inboxUrllà trang đọc hộp thư không cần API key, hợp để đưa cho khách của bạn. Gửi nhầm người thì gọiPOST .../inbox-linkvới{"action": "regenerate"}để tạo link mới (link cũ hết hiệu lực ngay) hoặc{"action": "off"}để tắt.
Đọc hộp thư và kiểm tra còn sống có giới hạn số lần mỗi giờ, dùng chung với web, và kết quả được lưu đệm 15 giây, nên gọi dồn không cho dữ liệu mới hơn. Cách hiểu các trạng thái live, die có ở bài check Gmail live/die.
Idempotency, timeout và lỗi nên xử lý
Idempotency-Keylà bắt buộc khi mua, thiếu thì lỗi 400. Bị timeout hay rớt mạng, gửi lại đúng key cũ: hệ thống trả lại đơn đã tạo, không trừ tiền lần hai. Key mới nghĩa là một lần mua mới.MAILSHOP_OUT_OF_STOCK: không đủ hàng cho số lượng này;error.details.stockcho biết mua được bao nhiêu.MAILSHOP_QTY_LIMIT: vượt số tối đa mỗi đơn (error.details.max).INSUFFICIENT_BALANCE: số dư không đủ.MAILSHOP_SUPPLIER_ERROR: nguồn từ chối ngay; đơnfailedđã được ghi và hoàn tiền, thử lại sau với key mới.MAILSHOP_DISABLED: việc bán đang tạm dừng hoặc loại đó đang tắt.RATE_LIMITED: vượt giới hạn số lần mua mỗi phút, hoặc số lần đọc hộp thư và kiểm tra mỗi giờ, của tài khoản (web và API dùng chung); chờ rồi thử lại.DUPLICATE_REQUEST: key đã dùng cho nội dung khác, hoặc lệnh đầu tiên với key đó vẫn đang chạy.
Dùng API này cho việc gì
API hợp với developer, QA kiểm thử luồng "Đăng nhập bằng Google", hay agency cần tài khoản riêng cho từng dự án ngắn và muốn quy trình chạy tự động. Không dùng để đăng ký tài khoản hàng loạt hay gửi thư rác; hãy tuân thủ điều khoản của Google và của từng nền tảng. Google có thể đòi captcha hoặc xác minh khi đăng nhập Gmail ngắn hạn, và OTPGmail không giải captcha: tool của bạn không tự xử lý được bước này thì đừng mua.
Nếu chỉ cần nhận mã chứ không cần đăng nhập, API thuê Gmail rẻ hơn: xem thuê Gmail qua API cho tool tự động. Tổng quan sản phẩm ở trang mua Gmail live ngắn.
Câu hỏi thường gặp
API mua Gmail có dùng chung key với API thuê Gmail không?
Có. Một API key cho cả hai, cùng một số dư. Đơn mua qua API hiện trong tab Lịch sử của trang mua trên web.
Mua qua API có khác giá trên web không?
Không. API trả đúng giá áp cho tài khoản của bạn, đó cũng là số tiền bị trừ, và giá được khóa lúc mua.
Lệnh mua bị timeout, tôi có bị trừ tiền hai lần không?
Không, nếu bạn gửi lại với đúng Idempotency-Key cũ: hệ thống trả lại đơn đã tạo. Chỉ tạo key mới khi muốn mua thêm.
Đọc được hộp thư của mọi tài khoản đã mua không?
Chỉ tài khoản có inbox: true; xem trường này của từng tài khoản trong items[]. Với tài khoản khác, bạn đăng nhập để đọc thư.
Mua loại "mới, chưa qua dịch vụ" qua API thế nào?
Giống mọi loại khác: lấy code của loại đó từ GET /v1/mail-shop/products, kiểm tra available là true và số lượng không vượt maxQty, rồi mua theo đúng code đó. Tồn kho từng loại cũng hiện trên trang mua.
Mở tài liệu API để lấy key và xem ví dụ đầy đủ, hoặc mua tay thử một tài khoản tại /app/buy.
