Ontwikkelaars

De mailbox vraagt niet
wie er achter het stuur zit.

Alles wat de app doet, doet jouw code ook: 104 gedocumenteerde operaties over 68 paden, achter een OpenAPI 3.1-document dat je zonder sleutel kunt lezen. De TypeScript-client wordt bij elke build aan dat document getoetst.

Plak het in elke MCP-client. Hij registreert zichzelf.
{ "mcpServers": {
    "openemail": {
      "url": "https://api.openemail.uk/mcp"
    } } }

Bij MCP hoef je geen sleutel te plakken. De client vindt de autorisatieserver via het endpoint, registreert zichzelf en stuurt je hierheen om in te loggen.

104

gedocumenteerde operaties

68

paden onder één host

116

SDK-methodes, die ze allemaal dekken

20

webhook-events, in drie families

Het OpenAPI 3.1-document staat op GET /openapi.json, en het lezen ervan vraagt geen sleutel.

Ingangen

Drie deuren,
één mailbox.

REST API

Een workspacesleutel bepaalt wat een aanroep mag doen en vanaf welke adressen hij mag versturen. Intrekken is een update en geen verwijdering, dus een latere aanroep krijgt te horen dat de sleutel is ingetrokken.

/threads?query=invoice
/emails
emails:sendthreads:readwebhooks:write

Een sleutel verstuurt namens maximaal 25 hele domeinen en 50 losse adressen. GET /ping leest de scopes terug die hij heeft en de scopes die zijn rol hem heeft gelaten.

MCP-server

Richt een client op het endpoint en log in. Er is geen sleutel om te plakken, want de client registreert zichzelf en stuurt je hierheen.

listThreads
threads:reademails:sendlabels:write

Tools worden gebouwd uit wat de aanroeper mag doen, dus een client die tot lezen beperkt is, heeft geen verzendtool. Een token reikt nog steeds tot de hele mailbox.

Webhooks

Registreer een https-endpoint en de mailbox post ernaartoe. Bezorgingen komen van de mailbox zelf en niet van een API-aanroep, dus opstellen in de app en posten naar de API veroorzaken dezelfde.

/webhooks
email.receivedemail.sentemail.failedemail.openeddomain.verifiedsuppression.added

20 events in drie families, en tien endpoints per mailbox.

Pariteit

De client kan niet achterlopen
op de API.

Een pariteitscontrole leest bij elke build het OpenAPI-document en faalt bij drift: een methode die wijst naar een operatie die de spec niet heeft, een gedocumenteerde operatie zonder methode, of een scopelijst die niet klopt met wat de operatie vereist. Hij drukt af wat hij heeft bewezen, en vandaag staat daar 116 SDK-methodes over alle 104 gedocumenteerde operaties.

Eén verzending, drie manieren

De config, het request en de aanroep zijn dezelfde operatie, op drie manieren geschreven.

MCPAPISDK
{ "mcpServers": {
"openemail": {
"url": "https://api.openemail.uk/mcp"
} } }
01 · 5 functies, 1 nog te komen

Agents, API & MCP

OpenEmail is bedoeld om net zo goed door software als door mensen bediend te worden. De mailbox is in beide gevallen dezelfde.

/threads?query=invoice
{ "threads": 12 }
Dezelfde mailbox, of een mens of een programma hem nu vasthoudt.

MCP-server

Richt Claude, of elke andere MCP-client, op je mailbox.

/threads?query=invoice
{ "threads": 12 }
Dezelfde mailbox, of een mens of een programma hem nu vasthoudt.

OAuth voor externe clients

Binnenkort

Zelf clients registreren met PKCE, zodat een app netjes om toegang kan vragen.

Toestemming en intrekken zijn er; scope niet, dus een token reikt tot je hele mailbox in plaats van tot het deel waar een app om vroeg.

/threads?query=invoice
{ "threads": 12 }
Dezelfde mailbox, of een mens of een programma hem nu vasthoudt.

REST API

Een gedocumenteerde HTTP-API met sleutels die je kunt uitgeven, beperken en intrekken.

/threads?query=invoice
{ "threads": 12 }
Dezelfde mailbox, of een mens of een programma hem nu vasthoudt.

Getypeerde SDK's

Eerst een TypeScript-client, daarna de rest.

/threads?query=invoice
{ "threads": 12 }
Dezelfde mailbox, of een mens of een programma hem nu vasthoudt.

Webhooks

Vertelt je endpoint wanneer er mail binnenkomt, in plaats van jou te laten pollen.

/threads?query=invoice
{ "threads": 12 }
Dezelfde mailbox, of een mens of een programma hem nu vasthoudt.

Snelstart

Van niets tot een verzonden bericht.
Drie stappen.

  1. 1

    Maak een sleutel aan

    Instellingen, API-sleutels, op een mailbox die van jou is. Kies de scopes en beperk waarvandaan hij mag versturen tot hele domeinen of losse adressen. Het geheim wordt één keer getoond en wat wordt opgeslagen is een eenrichtingshash.

    GET /ping antwoordt met de scopes op de sleutel en de scopes die zijn rol hem heeft gelaten.
    export OPENEMAIL_API_KEY=oe_live_9f2c1a4b7e05d3862c1f0a44_kX7… curl https://api.openemail.uk/ping \  -H "Authorization: Bearer $OPENEMAIL_API_KEY"
  2. 2

    Installeer de client

    Een TypeScript-client zonder dependencies, gepubliceerd als ESM en CommonJS, die de sleutel uit OPENEMAIL_API_KEY leest. Sla hem over als je liever zelf JSON post, want elk endpoint is gewoon HTTP.

    Node 18 en hoger, Workers, Deno, Bun en de browser.
    bun add @openemail/sdk
  3. 3

    Versturen

    Het antwoord bevat de id. GET /emails/{id} lost die op, /events heeft het spoor per ontvanger en /tracking heeft opens en kliks.

    Een herhaalpoging met dezelfde Idempotency-Key geeft het eerste resultaat terug met Idempotency-Replayed: true.
    import { init, openemail } from '@openemail/sdk' init({ apiKey: process.env.OPENEMAIL_API_KEY }) const email = await openemail.emails.send({  from: 'Acme Billing <[email protected]>',  to: '[email protected]',  subject: 'Your September invoice',  html: '<p>Invoice attached.</p>',}) console.log(email.id, email.status)

Afwezig

Wat het nog niet doet
voor jou.

Vijf dingen die je beter vooraf weet dan achteraf, voordat je hierop bouwt.

Geen upload-endpoint
Inline bijlagen gaan mee als base64 onder een totaallimiet van 5 MB. Een groter bestand verstuur je door een bestand dat al in de workspace staat bij zijn id te noemen; dat reist mee als downloadlink.
Bounces komen niet verder dan de mailbox
Een bezorgrapport wordt geparseerd, gekoppeld via Message-ID, op het gesprek gelabeld en als email.bounced-webhook verstuurd. Niets schrijft terug naar de verzendregel, dus via GET /emails staat een gebouncet bericht nog altijd als verzonden.
Mail uit het opstelvenster staat niet in GET /emails
Mail die vanuit het opstelvenster in de app wordt verstuurd, verschijnt niet in die lijst, omdat het opstelvenster niet via hetzelfde verzendpad schrijft.
OAuth heeft toestemming, geen scope
Een verzoek wordt getoond voordat het wordt verleend en Verbonden apps trekt het weer in, maar een token reikt tot je hele mailbox in plaats van tot het deel waar een app om vroeg.
Geen releaseworkflow
De client publiceren is een handmatige run van de preflight, de build en bun publish, dus een versie komt op npm wanneer iemand dat uitvoert en niet wanneer de wijziging landt.

Een bezorging verifiëren

Elke bezorging is ondertekend,
en elke herhaalpoging draagt zijn id mee.

De handtekening is een HMAC-SHA-256 over de timestamp, een punt en de ruwe body. Verifieer tegen de bytes zoals ze binnenkwamen, want parsen en opnieuw serialiseren verandert de volgorde van de sleutels en breekt hem.

Headers bij elke bezorging
X-OpenEmail-Signature: t=1758240000,v1=9f0c4b2e7d1a86c3X-OpenEmail-Event: email.deliveredX-OpenEmail-Delivery: evt_4b7e05d3862c1f0a
Replayvenster
300 seconden, en het afdwingen is de taak van de ontvanger. De verifier in de SDK houdt die standaard aan.
Idempotency-Key
Geclaimd tegen een unieke index op de sleutel en je API-sleutel samen, dus een herhaalpoging na een timeout geeft het eerste resultaat terug met Idempotency-Replayed: true in plaats van twee keer te versturen.
Herhaalpogingen
Vijf pogingen: op het moment van het event, daarna na 1 minuut, 5, 25 en 2 uur. Alleen een timeout, een geweigerde verbinding, 408, 425, 429 of een 5xx wordt herhaald.
X-OpenEmail-Delivery
De event-id wordt één keer aangemaakt en elke poging draagt hem mee, dus een ontvanger die dezelfde id twee keer ziet kan de tweede laten vallen in plaats van er opnieuw naar te handelen.

Voor wie het is

Eén mailbox.
Drie ingangen.

Particulieren

Een gratis adres op openemail.uk, met de client erachter.

acme.comacme.devstudio.acme.com
hello@acme.comafgeleverd
billing@acme.comafgeleverd
oct-2026-signup@acme.comafgeleverd
anything-at-all@acme.comafgeleverd
Bedrijven

Adressen voor iedereen, leden tellen nooit als gebruikers.

SSarahAAliJJamieNNadia
Geen extra plek toegevoegd. De rekening verandert niet.
Ontwikkelaars

Dezelfde mailbox via een API, een SDK en MCP.

/threads?query=invoice
{ "threads": 12 }
Dezelfde mailbox, of een mens of een programma hem nu vasthoudt.

Maak een sleutel aan.
Verstuur iets.

Full API, MCP and SDK access bij elk abonnement. Free brengt 50 AI actions a day mee.

Lees de API-snelstart

Jouw inbox,
op jouw voorwaarden.

E-mailinfrastructuur voor bedrijven, AI, agents en persoonlijke e-mail. Gebouwd voor schaal, privacy en controle. Alles wat e-mail vanaf dag één had moeten hebben.

OpenEmail

E-mailinfrastructuur voor bedrijven, AI, agents en persoonlijke e-mail. Gebouwd voor schaal, privacy en controle. Alles wat e-mail vanaf dag één had moeten hebben.

© 2026 OpenEmail. Alle rechten voorbehouden.
Status