Tiga endpoint, JSON masuk dan JSON keluar. Tanpa kunci dan tanpa akun pada domain
publik — tempel permintaan ke terminal dan langsung berfungsi.
Ikhtisar
Kotak masuk tidak pernah dibuat — ia ada begitu sebuah pesan tiba di suatu
alamat, dan hilang 5 hari kemudian. Tidak ada
yang perlu didaftarkan, jadi pada domain publik API tidak mengenal konsep
pengguna, proyek, atau token.
Setiap respons berupa JSON, termasuk setiap error.
Semua waktu dalam UTC dengan format RFC 3339 — 2026-08-04T18:31:07Z.
Id pesan adalah string opak. Jangan diurai.
Hanya terima. Tidak ada endpoint untuk mengirim email, memang disengaja.
URL dasar
https://grabmail.io/api/v1
Hanya HTTPS; HTTP biasa akan dialihkan. Versi berada di path, dan
v1 tidak akan berubah bentuk di bawah Anda — perubahan yang tidak kompatibel akan
mendapat nomor baru.
Autentikasi
Tidak ada di domain publik. Siapa pun yang mengetahui suatu alamat dapat
membaca kotak masuknya, melalui API sama seperti melalui situs web. Itulah
konsekuensi dari layanan email sekali pakai bersama, jadi jangan pernah gunakan
hal yang penting bagi Anda di alamat publik.
Pada domain milik Anda sendiri, kotak masuk bersifat privat, sehingga permintaan membawa kunci —
yang membuktikan bahwa kotak masuk itu milik Anda. Kunci diterbitkan saat Anda
verifikasi domain, ditampilkan sekali,
dan hanya disimpan di sini sebagai hash:
Authorization: Bearer <your key>
Kunci yang salah atau hilang pada domain privat akan dijawab dengan 401 dan
unauthorized. Kunci dibandingkan dalam waktu konstan, sehingga kunci yang salah
membutuhkan waktu penolakan yang sama dengan waktu penerimaan kunci yang benar.
Endpoint
GET/api/v1/mailbox
Semua yang menunggu di suatu alamat, terbaru lebih dulu. Ini panggilan yang dipoll oleh test suite Anda.
Parameter
Nama
Masuk
Jenis
Wajib
Deskripsi
address
query
string
ya
Mailbox yang akan dibaca, mis. k7fq2m@grabmail.io.
limit
query
integer
tidak
Jumlah pesan yang dikembalikan dalam panggilan ini, 1–200. Standarnya 50, terbaru dahulu. Ini membatasi satu respons, bukan mailbox — gunakan before untuk membaca lebih lanjut.
before
query
string
tidak
id dari pesan tertua yang sudah Anda miliki; mengembalikan halaman setelahnya. Kirim kembali kolom next dari respons sebelumnya. Saat next bernilai null, Anda sudah memiliki semuanya.
Dihapus. Panggilan ini idempoten: menghapus dua kali tetap menjawab 200.
400
mailbox tidak ada atau tidak valid.
404
Tidak ada pesan seperti itu di mailbox tersebut.
429
Batas laju terlampaui.
Lampiran
Setiap pesan mencantumkan lampirannya dengan URL yang sudah siap pakai. Ambil dengan
otorisasi yang sama seperti pesan itu sendiri.
GET /api/v1/attachment/{id}?mailbox={address}
Selalu menjawab dengan application/octet-stream beserta
Content-Disposition: attachment, apa pun label yang diberikan pengirim.
Itu disengaja: mengembalikan text/html milik orang asing
akan memungkinkan lampiran berjalan sebagai halaman di origin ini. Tipe sebenarnya ada di
JSON pesan, di mana ia berupa data, bukan instruksi.
Error
Setiap kegagalan berupa JSON dengan dua field yang sama, sehingga klien menanganinya
di satu tempat. Status membawa kategorinya, error adalah
slug yang stabil dan dapat dibaca mesin, dan message ditujukan untuk manusia dan
dapat diubah kata-katanya kapan saja.
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "invalid_address",
"message": "address must look like name@domain"
}
Jangan pernah membuat percabangan berdasarkan message. Slug yang digunakan adalah
invalid_address, unknown_domain,
not_found, dan rate_limited.
Batas laju
Satu permintaan per detik, per alamat. Melakukan polling kotak masuk
sekali per detik adalah pola yang dimaksudkan dan tidak pernah dibatasi.
Melebihi batas, Anda akan mendapat 429 dengan Retry-After dalam
detik. Tidak ada kuota harian dan tidak ada kredit burst yang perlu dikelola.
Retensi
Sebuah pesan dihapus 5 hari
setelah tiba, baik sudah dibaca maupun belum. Setiap pesan membawa
expires_at, jadi Anda tidak perlu menghitung tanggal itu sendiri.
Ini batas keras, bukan pengaturan — tidak ada parameter yang memperpanjangnya. Jika sebuah pesan
harus bertahan lebih lama dari jendela waktu ini, ambil dan simpan di sisi Anda.
Domain Anda sendiri
Arahkan MX Anda ke smtp.grabmail.io dan setiap alamat di
domain Anda akan dijawab melalui endpoint yang sama ini — tidak ada API kedua yang perlu dipelajari,
dan kotak masuknya hanya dapat dibaca dengan kunci Anda.