Développeurs

La boîte mail se moque de
qui est aux commandes.

Tout ce que fait l’application, votre code le fait : 104 opérations documentées sur 68 chemins, derrière un document OpenAPI 3.1 lisible sans clé. Le client TypeScript est tenu à ce document à chaque build.

Collez-le dans n’importe quel client MCP. Il s’enregistre tout seul.
{ "mcpServers": {
    "openemail": {
      "url": "https://api.openemail.uk/mcp"
    } } }

MCP n’a aucune clé à coller. Le client découvre le serveur d’autorisation depuis le point de terminaison, s’enregistre lui-même et vous renvoie ici pour vous connecter.

104

opérations documentées

68

chemins sous un seul hôte

116

méthodes SDK, qui les couvrent toutes

20

événements webhook, en trois familles

Le document OpenAPI 3.1 est sur GET /openapi.json, et le lire ne demande aucune clé.

Surfaces

Trois portes,
une seule boîte mail.

API REST

Une clé d’espace de travail décide de ce qu’un appel peut faire et des adresses au nom desquelles il peut envoyer. Révoquer est une mise à jour plutôt qu’une suppression : un appel ultérieur s’entend donc dire que la clé a été révoquée.

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

Une clé envoie au nom de 25 domaines entiers et 50 adresses uniques au maximum. GET /ping renvoie les portées qu’elle détient et celles que son rôle lui a laissées.

Serveur MCP

Pointez un client vers le point de terminaison et connectez-vous. Aucune clé à coller, car le client s’enregistre lui-même et vous renvoie ici.

listThreads
threads:reademails:sendlabels:write

Les outils sont construits à partir de ce que l’appelant peut faire : un client limité à la lecture n’a donc aucun outil d’envoi. Un jeton atteint malgré tout toute la boîte mail.

Webhooks

Déclarez un point de terminaison https et la boîte mail y poste. Les remises sont levées par la boîte mail elle-même plutôt que par un appel d’API : écrire dans l’application et poster vers l’API déclenchent donc la même.

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

20 événements en trois familles, et dix points de terminaison par boîte mail.

Parité

Le client ne peut pas être en retard sur
l’API.

Un contrôle de parité lit le document OpenAPI à chaque build et échoue au moindre écart : une méthode pointant vers une opération absente de la spec, une opération documentée sans méthode, ou une liste de portées en désaccord avec ce que l’opération exige. Il imprime ce qu’il a prouvé, et cela donne aujourd’hui 116 méthodes SDK couvrant les 104 opérations documentées.

Un envoi, trois façons

La configuration, la requête et l’appel sont la même opération, écrite de trois façons.

MCPAPISDK
{ "mcpServers": {
"openemail": {
"url": "https://api.openemail.uk/mcp"
} } }
01 · 5 fonctionnalités, 1 encore à venir

Agents, API et MCP

OpenEmail est fait pour être piloté par des logiciels autant que par des personnes. La boîte mail est la même dans les deux cas.

/threads?query=invoice
{ "threads": 12 }
La même boîte, qu'elle soit tenue par une personne ou par un programme.

Serveur MCP

Pointez Claude, ou n’importe quel client MCP, vers votre boîte mail.

/threads?query=invoice
{ "threads": 12 }
La même boîte, qu'elle soit tenue par une personne ou par un programme.

OAuth pour les clients tiers

Bientôt

Enregistrement de client en libre-service avec PKCE, pour qu'une application demande l'accès correctement.

Le consentement et la révocation sont là ; la portée, non : un jeton atteint donc toute votre boîte, et pas seulement la partie demandée par l'application.

/threads?query=invoice
{ "threads": 12 }
La même boîte, qu'elle soit tenue par une personne ou par un programme.

API REST

Une API HTTP documentée, avec des clés à émettre, restreindre et révoquer.

/threads?query=invoice
{ "threads": 12 }
La même boîte, qu'elle soit tenue par une personne ou par un programme.

SDK typés

Un client TypeScript d'abord, le reste ensuite.

/threads?query=invoice
{ "threads": 12 }
La même boîte, qu'elle soit tenue par une personne ou par un programme.

Webhooks

Prévient votre endpoint quand du courrier arrive, au lieu de vous obliger à l'interroger.

/threads?query=invoice
{ "threads": 12 }
La même boîte, qu'elle soit tenue par une personne ou par un programme.

Démarrage rapide

De rien à un message envoyé.
Trois étapes.

  1. 1

    Générez une clé

    Paramètres, Clés API, sur une boîte mail qui vous appartient. Choisissez ses portées, et restreignez les adresses d’envoi à des domaines entiers ou à des adresses uniques. Le secret n’est montré qu’une fois et ce qui est stocké est un hachage à sens unique.

    GET /ping répond avec les portées de la clé et celles que son rôle lui a laissées.
    export OPENEMAIL_API_KEY=oe_live_9f2c1a4b7e05d3862c1f0a44_kX7… curl https://api.openemail.uk/ping \  -H "Authorization: Bearer $OPENEMAIL_API_KEY"
  2. 2

    Installez le client

    Un client TypeScript sans dépendances, publié en ESM et CommonJS, qui lit la clé dans OPENEMAIL_API_KEY. Passez-le si vous préférez poster le JSON vous-même, car chaque point de terminaison est du simple HTTP.

    Node 18 et plus, Workers, Deno, Bun et le navigateur.
    bun add @openemail/sdk
  3. 3

    Envoyez

    La réponse porte l’id. GET /emails/{id} le résout, /events contient la trace par destinataire, et /tracking les ouvertures et les clics.

    Une nouvelle tentative portant la même Idempotency-Key renvoie le premier résultat avec 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)

Absent

Ce qu’il ne fera pas
encore pour vous.

Cinq choses à savoir avant de développer là-dessus, plutôt qu’après.

Aucun point de terminaison d’envoi de fichiers
Les pièces jointes en ligne partent en base64, sous un plafond total de 5 Mo. Un fichier plus lourd s’envoie en désignant par son id un fichier déjà présent dans l’espace de travail, qui voyage comme lien de téléchargement.
Les rejets s’arrêtent à la boîte mail
Un rapport de remise est analysé, rapproché par Message-ID, signalé sur la conversation et poussé comme webhook email.bounced. Rien n’est réécrit dans la ligne d’envoi : via GET /emails, un message rejeté se lit donc toujours comme envoyé.
Le courrier de l’éditeur n’est pas dans GET /emails
Le courrier envoyé depuis l’éditeur de l’application n’apparaît pas dans cette liste, car l’éditeur n’écrit pas par le même chemin d’envoi.
OAuth a le consentement, pas la portée
Une demande est montrée avant d’être accordée et Applications connectées la reprend, mais un jeton atteint toute votre boîte mail plutôt que la partie demandée par l’application.
Aucun workflow de publication
Publier le client, c’est lancer à la main le préflight, le build et bun publish : une version arrive donc sur npm quand quelqu’un l’exécute, pas quand le changement est intégré.

Vérifier une remise

Chaque remise est signée,
et chaque nouvelle tentative porte son id.

La signature est un HMAC-SHA-256 sur l’horodatage, un point, puis le corps brut. Vérifiez sur les octets tels qu’ils sont arrivés, car analyser puis re-sérialiser réordonne les clés et casse tout.

En-têtes sur chaque remise
X-OpenEmail-Signature: t=1758240000,v1=9f0c4b2e7d1a86c3X-OpenEmail-Event: email.deliveredX-OpenEmail-Delivery: evt_4b7e05d3862c1f0a
Fenêtre de rejeu
300 secondes, et c’est au récepteur de les faire respecter. Le vérificateur du SDK s’y tient par défaut.
Idempotency-Key
Réservée par un index unique portant à la fois sur la clé et sur votre clé API : une nouvelle tentative après un délai dépassé renvoie donc le premier résultat avec Idempotency-Replayed: true plutôt que d’envoyer deux fois.
Nouvelles tentatives
Cinq tentatives : au moment de l’événement, puis après 1 minute, 5, 25 et 2 heures. Seuls un délai dépassé, une connexion refusée, 408, 425, 429 ou un 5xx sont répétés.
X-OpenEmail-Delivery
L’id de l’événement est frappé une fois et chaque tentative le porte : un récepteur qui voit deux fois le même id peut donc jeter le second plutôt que d’agir à nouveau.

Pour qui c’est

Une seule boîte mail.
Trois portes d’entrée.

Particuliers

Une adresse gratuite sur openemail.uk, avec le client derrière.

acme.comacme.devstudio.acme.com
hello@acme.comremis
billing@acme.comremis
oct-2026-signup@acme.comremis
anything-at-all@acme.comremis
Entreprises

Des adresses pour tous, sans jamais compter un membre comme un poste.

SSarahAAliJJamieNNadia
Aucun siège ajouté. La facture ne bouge pas.
Développeurs

La même boîte mail via une API, un SDK et MCP.

/threads?query=invoice
{ "threads": 12 }
La même boîte, qu'elle soit tenue par une personne ou par un programme.

Générez une clé.
Envoyez quelque chose.

Full API, MCP and SDK access sur toutes les formules. Free emporte 50 AI actions a day avec elle.

Lire le démarrage rapide de l’API

Votre boîte de réception,
à vos conditions.

L’infrastructure e-mail pour les entreprises, l’IA, les agents et le courrier personnel. Conçue pour l’échelle, la confidentialité et le contrôle. Tout ce que l’e-mail aurait dû avoir dès le premier jour.

OpenEmail

L’infrastructure e-mail pour les entreprises, l’IA, les agents et le courrier personnel. Conçue pour l’échelle, la confidentialité et le contrôle. Tout ce que l’e-mail aurait dû avoir dès le premier jour.

© 2026 OpenEmail. Tous droits réservés.
État