inboxsink API

Skriptbara engångsinkorgar, för att testa registreringsflöden utan att bero på en riktig brevlåda. Fem rutter, en bas på https://inboxsink.com, JSON.

Rutten som förändrar något är wait: den blockerar tills meddelandet kommer. Utan den gissar ett end-to-end-test med sleep och blir instabilt så fort utskickskön släpar efter.

Gratis API-nyckel

Tusen anrop i månaden, utan kort. Nog för att koppla in det i din testsvit och se om det håller.

Sedan, när dina tester börjar nekas: en egen domän publiceras ingenstans och hamnar därför inte på någon blockeringslista — 29 € i månaden.

JavaScript-klient

Ett paket utan beroenden, för Node 18 och senare. Koden finns på 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 kastar ett fel i stället för att returnera null när ingen kod kommer: ett test ska falla högljutt, inte tyst fylla i ett tomt fält.

Autentisering

En Authorization-header per anrop. Nycklar skapas från panelen och börjar med ibsk_.

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

Nyckeln i klartext visas bara vid skapandet. Därefter syns endast dess prefix — vi lagrar inget annat än dess hash.

Skapa en inkorg

POST /v1/inboxes

Alla parametrar är valfria: domain (som standard en slumpmässig pooldomän), prefix (slumpmässigt som standard), ttl_seconds (60 sekunder till 30 dagar).

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

En inkorg skapad via API:et är privat: bara nyckeln som skapade den kan läsa den.

Vänta på ett meddelande

GET /v1/inboxes/:id/wait

Blockerar tills ett meddelande kommer och svarar sedan omedelbart. timeout i millisekunder (30 000 som standard, 120 000 max), since för att bara få meddelanden efter ett visst id.

Svarar 204 utan innehåll om tiden går ut utan meddelande — det är inget fel, det är det normala svaret på «inget har kommit».

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 och link plockas ut åt dig. En kod rapporteras bara när meddelandet faktiskt aviserar en («kod», «verifiering», «inloggning»…) — ett fakturabelopp eller ett årtal förväxlas aldrig med en kod.

Lista meddelanden

GET /v1/inboxes/:id/messages

Tar since och limit (50 som standard, 200 max). Returnerar sammanfattningar, utan meddelandetext.

Läsa ett meddelande

GET /v1/messages/:id

Hela meddelandet: text, html, headers och listan över bilagor.

Ta bort en inkorg

DELETE /v1/inboxes/:id

Raderar inkorgen och dess meddelanden omedelbart. Svarar 204.

Fel

204Inget innehåll — för wait gick tiden ut utan meddelande
400Ogiltig parameter
401Nyckel saknas, okänd eller återkallad
403Den inkorgen tillhör en annan nyckel
404Inkorg eller meddelande finns inte, eller har gått ut
429För många anrop

Gränser och livslängd

Inkorgar ur den publika poolen lever en timme; de som skapats via API:et följer sin ttl_seconds, upp till trettio dagar. Därefter raderas inkorgen och dess meddelanden — det finns inget arkiv att hämta i efterhand.

Meddelanden över tio megabyte avvisas vid mottagandet. Adresser på en okänd domän avvisas under SMTP-sessionen, utan att skapa en studs.

De här inkorgarna kan inte skicka post, och det är avsiktligt: ett meddelande skickat från en engångsdomän skulle inte komma fram någonstans.