API inboxsink

Kotak sekali pakai yang bisa dikendalikan lewat kode, untuk menguji alur pendaftaran tanpa bergantung pada kotak surat sungguhan. Lima rute, satu basis di https://inboxsink.com, JSON.

Rute yang benar-benar mengubah sesuatu adalah wait: ia memblokir sampai pesan tiba. Tanpa itu, pengujian ujung ke ujung menebak dengan sleep dan menjadi rapuh begitu antrean pengiriman melambat.

Kunci API gratis

Seribu panggilan per bulan, tanpa kartu. Cukup untuk memasangnya ke rangkaian pengujian Anda dan melihat apakah bertahan.

Nanti, ketika pengujian Anda mulai ditolak: domain milik Anda tidak dipublikasikan di mana pun, jadi tidak masuk daftar hitam — 29 € per bulan.

Klien JavaScript

Paket tanpa dependensi apa pun, untuk Node 18 ke atas. Kodenya ada di 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 melempar galat alih-alih mengembalikan null ketika tidak ada kode yang datang: sebuah pengujian harus gagal dengan keras, bukan diam-diam mengisi kolom kosong.

Autentikasi

Satu header Authorization di setiap panggilan. Kunci dibuat dari panel dan diawali ibsk_.

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

Kunci dalam bentuk terbaca hanya ditampilkan saat pembuatan. Setelah itu hanya awalannya yang terlihat — kami hanya menyimpan sidik jarinya.

Membuat kotak

POST /v1/inboxes

Semua parameter bersifat opsional: domain (bawaannya domain acak dari kumpulan), prefix (bawaannya acak), ttl_seconds (60 detik sampai 30 hari).

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" }

Kotak yang dibuat lewat API bersifat privat: hanya kunci yang membuatnya yang bisa membacanya.

Menunggu pesan

GET /v1/inboxes/:id/wait

Memblokir sampai sebuah pesan tiba, lalu langsung menjawab. timeout dalam milidetik (bawaan 30 000, maksimum 120 000), since untuk hanya menerima pesan setelah suatu pengenal.

Menjawab 204 tanpa isi bila waktunya habis tanpa pesan — itu bukan galat, itu jawaban normal untuk «tidak ada yang datang».

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" } }

otp dan link sudah diambil untuk Anda. Kode hanya dilaporkan bila pesannya memang mengumumkan satu («kode», «verifikasi», «masuk»…) — jumlah tagihan atau angka tahun tidak akan pernah dikira kode.

Mendaftar pesan

GET /v1/inboxes/:id/messages

Menerima since dan limit (bawaan 50, maksimum 200). Mengembalikan ringkasan, tanpa isi pesan.

Membaca pesan

GET /v1/messages/:id

Pesan lengkap: text, html, headers dan daftar lampiran.

Menghapus kotak

DELETE /v1/inboxes/:id

Menghapus kotak dan pesannya seketika. Menjawab 204.

Galat

204Tanpa isi — untuk wait, waktunya habis tanpa pesan
400Parameter tidak sah
401Kunci tidak ada, tidak dikenal, atau dicabut
403Kotak itu milik kunci lain
404Kotak atau pesan tidak ada, atau sudah kedaluwarsa
429Terlalu banyak panggilan

Batas dan masa hidup

Kotak dari kumpulan publik hidup satu jam; yang dibuat lewat API mengikuti ttl_seconds masing-masing, sampai tiga puluh hari. Setelah itu kotak dan pesannya dihapus — tidak ada arsip yang bisa diambil kemudian.

Pesan di atas sepuluh megabita ditolak saat diterima. Alamat pada domain yang tidak dikenal ditolak selama sesi SMTP, tanpa menghasilkan pantulan.

Kotak ini tidak bisa mengirim surat, dan itu disengaja: pesan yang dikirim dari domain sekali pakai tidak akan sampai ke mana pun.