// REST API

Tài liệu REST API

Các endpoint cho tool dùng phương thức GET và trả JSON dạng { "status": "success", "data": … }. Xác thực bằng tham số ?api_key= lấy trong trang API Docs sau khi đăng nhập.

Endpoint

Địa chỉ gốc: https://mailsmmo.com

GET/api/v1/services

Dịch vụ — giá & tồn kho

Không có ?service= → trả cả danh sách. Có ?service= → giá + tồn kho của một dịch vụ. Không cần API key.

Không cần auth

  • service (tuỳ chọn) — Bỏ trống = cả danh sách; có mã = một dịch vụ (chấp nhận cả mã trần, ví dụ facebook)

Thành công

{ "status": "success", "data": { "services": [
    { "code": "otp_gmail_facebook", "name": "Facebook", "price": 5000, "stock": 42 }
  ] } }

GET/api/v1/me

Thông tin tài khoản

ID, email và số dư của API key đang gọi.

Cần API key

Thành công

{ "status": "success", "data": { "id": "b7e5...-uuid", "email": "demo@mailsmmo.com", "balance": 1000000, "created_at": "2026-01-15T08:30:00Z" } }

GET/api/v1/orders

Tạo đơn

Một endpoint cho cả hai: service là mã OTP Gmail (otp_gmail_*) → cấp 1 mail OTP; service là mã sản phẩm kho (hotmail_*…) → mua theo quantity. Trừ tiền theo giá.

Cần API key

  • service — Mã dịch vụ OTP (otp_gmail_*) hoặc mã sản phẩm kho (vd hotmail_imap_12m_36m)
  • quantity (tuỳ chọn) — Chỉ cho email bán đứt — số lượng (mặc định 1)
  • unique_key (tuỳ chọn) — UUID tự sinh — gửi lại không tạo/trừ tiền 2 lần

Thành công

{ "status": "success", "data": {
    "id": "b7e5a1c2-3d4e-4f60-8a91-2c3d4e5f6a7b", "email": "zurhansuzu@gmail.com",
    "service": "otp_gmail_facebook", "amount": 5000
  } }

GET/api/v1/orders/otp

Lấy OTP theo đơn

Đọc OTP của một đơn. Không cần API key — mã đơn (order_id) là khóa capability.

Không cần auth

  • order_id — Mã đơn (trả về ở bước tạo đơn)
  • unique_key (tuỳ chọn) — UUID tự sinh mỗi lần gọi
  • from (tuỳ chọn) — Unix giây — bỏ otp/received_at nếu chưa có mã mới hơn

Thành công

{ "status": "success", "data": {
    "otp": "481253", "amount": 5000, "received_at": 1732000000,
    "from": "security@facebookmail.com", "otp_history": [
      { "value": "481253", "received_at": 1732000000 }
    ] } }

GET/api/v1/otp/orders

Danh sách đơn OTP

Đơn Gmail OTP đã thuê, phân trang. Kèm OTP mới nhất của mỗi đơn.

Cần API key

  • page (tuỳ chọn) — Trang (mặc định 1)
  • page_size (tuỳ chọn) — Số dòng/trang (mặc định 20, tối đa 200)

Thành công

{ "status": "success", "data": { "orders": [
    { "id": "b7e5a1c2-3d4e-4f60-8a91-2c3d4e5f6a7b", "email": "...", "service": "otp_gmail_facebook",
      "latest_otp": "481253", "latest_link": null }
  ], "page": 1, "page_size": 20, "total": 137 } }

GET/api/v1/mail

Đọc toàn bộ thư

Tất cả thư của một mail, kèm OTP/link đã bóc.

Cần API key

  • order_id — Mã đơn

Thành công

{ "status": "success", "data": { "count": 1, "messages": [
    { "id": 88, "from": "...", "subject": "...", "otp": "481253", "received_at": "..." }
  ] } }

mã lỗi thường gặp

{ "status": "error", "message": "out_of_stock", "retryable": true }
  • unauthorized — API key không hợp lệ hoặc bị thiếu (HTTP 401)
  • invalid_request — Tham số yêu cầu không hợp lệ (HTTP 400)
  • not_found — Không tìm thấy dịch vụ, đơn hàng hoặc endpoint (HTTP 404)
  • insufficient_balance — Số dư không đủ (HTTP 402)
  • out_of_stock — Hết hàng (HTTP 409) — Gmail OTP: retryable, gọi lại sau vài giây; email bán đứt: chờ nhập thêm
  • service_unavailable — Máy chủ tạm thời chưa xử lý xong đơn — gọi lại với cùng unique_key (HTTP 503, retryable)
  • in_progress — Đơn đang được chốt hoặc có thể đã tồn tại ở nhà cung cấp — gọi lại với cùng unique_key (HTTP 409, retryable)
  • forbidden — Không có quyền với tài nguyên (HTTP 403)
  • idempotency_mismatch — unique_key đã dùng cho một yêu cầu khác — dùng unique_key mới (HTTP 422)
  • order_cancelled — Đơn bị nhả trước khi tính tiền, chưa trừ tiền — gọi lại (HTTP 409, retryable)
  • too_many_requests — Gọi quá nhanh — chờ rồi thử lại (HTTP 429, retryable)
  • auth_unavailable — Chưa kiểm tra được API key lúc này, key không hỏng — thử lại (HTTP 503, retryable)
  • shutting_down — Máy chủ đang khởi động lại — thử lại sau vài giây (HTTP 503, retryable)
  • payload_too_large — Dữ liệu gửi lên quá lớn (HTTP 413)
  • internal_server_error — Lỗi hệ thống, vui lòng thử lại sau (HTTP 500)

Tài liệu cho AI và tool

Toàn bộ tài liệu dạng Markdown nằm ở https://mailsmmo.com/llms.txt — dán vào Cursor, Claude hoặc ChatGPT để sinh code tích hợp.

Gọi lại an toàn với unique_key

Mỗi lần tạo đơn, gửi kèm một unique_key (UUID tự sinh). Mạng chập chờn thì gọi lại với cùng unique_key: hệ thống trả lại đúng đơn cũ, không tạo đơn mới và không trừ tiền lần hai.

Định dạng lỗi

Khi lỗi, phản hồi chỉ gồm status, message (mã lỗi dạng snake_case) và retryable cho biết có nên gọi lại hay không.

Bắt đầu với MailSMMO

Đăng ký miễn phí, nạp ví và thuê mail đầu tiên trong vài phút.

Tạo tài khoản →