API inboxsink

Hộp thư dùng một lần điều khiển bằng mã, để kiểm thử luồng đăng ký mà không phụ thuộc vào hòm thư thật. Năm tuyến, một cơ sở tại https://inboxsink.com, JSON.

Tuyến thực sự thay đổi mọi thứ là wait: nó chặn cho tới khi thư tới. Thiếu nó, một bài kiểm thử đầu-cuối phải đoán bằng sleep và trở nên bấp bênh ngay khi hàng đợi gửi bị chậm.

Khoá API miễn phí

Một nghìn lượt gọi mỗi tháng, không cần thẻ. Đủ để gắn vào bộ kiểm thử của bạn và xem nó có trụ được không.

Sau đó, khi các bài kiểm thử của bạn bắt đầu bị từ chối: tên miền riêng của bạn không được công bố ở đâu cả, nên không rơi vào danh sách chặn nào — 29 € mỗi tháng.

Thư viện JavaScript

Một gói không có bất kỳ phụ thuộc nào, cho Node 18 trở lên. Mã nguồn trên GitHub.

npm i inboxsink
import { InboxSink } from 'inboxsink';
const sink = new InboxSink(process.env.INBOXSINK_API_KEY);

const inbox = await sink.createInbox();
const code = await sink.waitForOtp(inbox.id);   // '204815'

waitForOtp ném lỗi thay vì trả về null khi không có mã nào tới: một bài kiểm thử phải hỏng ồn ào, chứ không lặng lẽ điền vào ô trống.

Xác thực

Một tiêu đề Authorization cho mỗi lần gọi. Khoá được tạo từ bảng điều khiển và bắt đầu bằng ibsk_.

curl -H "Authorization: Bearer ibsk_…" \
  https://inboxsink.com/v1/domains

Khoá ở dạng đọc được chỉ hiện lúc tạo. Sau đó chỉ còn thấy tiền tố của nó — chúng tôi chỉ lưu dấu vân của khoá.

Tạo một hộp thư

POST /v1/inboxes

Mọi tham số đều tuỳ chọn: domain (mặc định một tên miền ngẫu nhiên trong nhóm), prefix (mặc định ngẫu nhiên), ttl_seconds (từ 60 giây đến 30 ngày).

curl -X POST https://inboxsink.com/v1/inboxes \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"ttl_seconds": 900}'

→ 201
{ "id": "42", "address": "9f2c1a@mailhusk.com", "expires_at": "2026-09-01T15:12:00Z" }

Hộp thư tạo qua API là riêng tư: chỉ khoá đã tạo ra nó mới đọc được.

Chờ một thư

GET /v1/inboxes/:id/wait

Chặn cho tới khi có thư, rồi trả lời ngay. timeout tính bằng mili giây (mặc định 30 000, tối đa 120 000), since để chỉ nhận các thư sau một định danh.

Trả về 204 không có nội dung nếu hết thời gian mà không có thư — đó không phải lỗi, đó là câu trả lời bình thường cho «không có gì tới cả».

curl -H "Authorization: Bearer $KEY" \
  "https://inboxsink.com/v1/inboxes/42/wait?timeout=45000"

→ 200
{ "message": { "id": "913", "from": "no-reply@acme.com", "subject": "…",
               "otp": "204815", "link": "https://acme.com/confirm/9f3a" } }

otplink đã được trích sẵn cho bạn. Mã chỉ được báo khi thư thực sự thông báo một mã («mã», «xác minh», «đăng nhập»…) — số tiền hoá đơn hay một năm sẽ không bao giờ bị nhầm thành mã.

Liệt kê thư

GET /v1/inboxes/:id/messages

Nhận sincelimit (mặc định 50, tối đa 200). Trả về bản tóm tắt, không kèm nội dung thư.

Đọc một thư

GET /v1/messages/:id

Toàn bộ thư: text, html, headers và danh sách tệp đính kèm.

Xoá một hộp thư

DELETE /v1/inboxes/:id

Xoá hộp thư và các thư của nó ngay lập tức. Trả về 204.

Lỗi

204Không có nội dung — với wait, hết thời gian mà không có thư
400Tham số không hợp lệ
401Thiếu khoá, khoá lạ hoặc đã bị thu hồi
403Hộp thư đó thuộc về một khoá khác
404Hộp thư hoặc thư không tồn tại, hoặc đã hết hạn
429Gọi quá nhiều

Giới hạn và thời gian sống

Hộp thư trong nhóm công khai sống một giờ; hộp tạo qua API theo ttl_seconds của chúng, tối đa ba mươi ngày. Hết hạn, hộp thư và thư bị xoá — không có kho lưu trữ nào để lấy lại sau đó.

Thư trên mười megabyte bị từ chối ngay khi nhận. Địa chỉ thuộc tên miền lạ bị từ chối ngay trong phiên SMTP, không sinh ra thư báo lỗi ngược.

Các hộp thư này không thể gửi thư, và đó là chủ ý: một thư gửi từ tên miền dùng một lần sẽ không tới được đâu cả.