Passez au contenu principal

Documentation

API Mailera

Gérez vos boîtes aux lettres Microsoft (Outlook, Hotmail, Microsoft 365) de bout en bout via REST: ajoutez des boîtes aux lettres, vérifiez leur fonctionnement, lisez et envoyez des messages, récupérez des codes OTP, sortez les messages du Courrier indésirable et recevez des webhooks.

Introduction

Tous les points de terminaison partagent une URL de base et acceptent et renvoient du JSON.

  1. 1Créez un compte et votre propre espace de travail (gratuit).
  2. 2Ouvrez Paramètres → API keys, créez une clé et choisissez ses autorisations.
  3. 3Transmettez la clé dans l’en-tête X-API-Key à chaque requête.

Les réponses réussies contiennent un champ data; les erreurs contiennent un champ error avec code et message.

Créez un espace de travail gratuit
URL de base
https://mailera.app/api/public/v1# 200{ "data": [ ... ], "next_cursor": "..." }# 4xx / 5xx{ "error": { "code": "not_found", "message": "..." } }

Authentification

Transmettez votre API key dans l’en-tête X-API-Key. Les clés commencent par mh_live_ et ne sont affichées qu’une fois, à leur création; si vous en perdez une, créez-en une nouvelle et révoquez l’ancienne.

Un en-tête Authorization avec un token Bearer contenant la même clé est également accepté.

Les clés peuvent être limitées à une liste d’IP autorisées; les appels provenant d’autres IP reçoivent une erreur 403.

cURL
curl https://mailera.app/api/public/v1/mailboxes \  -H "X-API-Key: mh_live_..."

Autorisations des clés

Chaque clé possède une ou plusieurs autorisations. L’appel d’un point de terminaison sans l’autorisation requise renvoie 403 forbidden.

AutorisationPermet de
readLire les boîtes aux lettres, les messages, les codes OTP et leur emplacement (Boîte de réception/Courrier indésirable)
moveSortir les messages du Courrier indésirable et les déplacer entre dossiers
importAjouter des boîtes aux lettres
syncDemander une synchronisation immédiate
sendEnvoyer des messages, y répondre et les transférer
manageSuspendre, réactiver et supprimer des boîtes aux lettres
webhooksGérer les webhooks

Erreurs

Les erreurs contiennent toujours un code stable et un message en anglais. Traitez-les selon le champ code, jamais selon le texte du champ message.

HTTPCodeSignification
401unauthorizedAPI key manquante, invalide, expirée ou révoquée
403forbiddenLa clé n’a pas l’autorisation requise ou l’IP ne figure pas dans sa liste d’IP autorisées
404not_foundLa boîte aux lettres ou le message n’existe pas ou n’appartient pas à l’espace de travail de la clé
409mailbox_unavailableLa boîte aux lettres doit être reconnectée, est suspendue ou utilise uniquement IMAP (pas encore pris en charge)
422validation_errorLes données de la requête sont mal formatées
429rate_limitedPlus de 300 requêtes par minute pour cette clé — respectez le délai indiqué dans l’en-tête Retry-After
503upstream_errorMicrosoft rencontre une erreur ou limite le débit — réessayez plus tard
500internal_errorErreur système

Limites et pagination

Chaque clé autorise 300 requêtes par minute. Tout dépassement renvoie 429 avec un en-tête Retry-After.

Les listes renvoient next_cursor; transmettez cette valeur dans le paramètre cursor pour obtenir la page suivante. S’il n’y a plus de données, next_cursor vaut null.

Le paramètre limit définit la taille des pages.

cURL
curl "https://mailera.app/api/public/v1/mailboxes?limit=50&cursor=NEXT_CURSOR" \  -H "X-API-Key: mh_live_..."

Boîtes aux lettres

Ajoutez, vérifiez, synchronisez, suspendez et supprimez des boîtes aux lettres.

  • GET/mailboxes

    Lister les boîtes aux lettres

    Autorisation:
    read
    Paramètres de requête:
    status, q, cursor, limit
  • POST/mailboxes/import

    Importer des boîtes aux lettres en masse (email:password:refresh_token:client_id, ou séparées par |)

    Autorisation:
    import
    Corps:
    lines, text, group_id, duplicate_mode
  • GET/mailboxes/import

    Progression de l’import et résultats par ligne

    Autorisation:
    import
    Paramètres de requête:
    job_id
  • GET/mailboxes/{id}

    Détails de la boîte aux lettres et compteurs des dossiers

    Autorisation:
    read
  • PATCH/mailboxes/{id}

    Suspendre ou réactiver une boîte aux lettres

    Autorisation:
    manage
    Corps:
    action (obligatoire)
  • DELETE/mailboxes/{id}

    Supprimer une boîte aux lettres

    Autorisation:
    manage
  • GET/mailboxes/{id}/status

    Vérifier en direct auprès de Microsoft si la boîte aux lettres fonctionne toujours

    Autorisation:
    read
  • POST/mailboxes/{id}/sync

    Synchronisez maintenant

    Autorisation:
    sync
    Corps:
    wait
Importer des boîtes aux lettres et suivre la progression
curl -X POST https://mailera.app/api/public/v1/mailboxes/import \  -H "X-API-Key: mh_live_xxx" -H "content-type: application/json" \  -d '{"lines":["user@hotmail.com:pass:M.C5_refresh...:9e5f94bc-..."]}'# → { "data": { "job_id": "..." } }curl "https://mailera.app/api/public/v1/mailboxes/import?job_id=JOB_ID" -H "X-API-Key: mh_live_xxx"

Messages

Lisez, recherchez et envoyez des messages, et récupérez des codes OTP.

  • GET/mailboxes/{id}/messages

    Lister les messages d’un dossier

    Autorisation:
    read
    Paramètres de requête:
    folder, unread, cursor, limit
  • GET/mailboxes/{id}/messages/{msgId}

    Récupérer un message avec son contenu

    Autorisation:
    read
  • GET/mailboxes/{id}/otp

    Récupérer le dernier code OTP

    Autorisation:
    read
    Paramètres de requête:
    from, subject, since_minutes
  • POST/mailboxes/{id}/send

    Envoyer, répondre ou transférer

    Autorisation:
    send
    Corps:
    to, cc, bcc, subject, html, text, importance, reply_to_message_id, mode, attachments
  • GET/messages/search

    Rechercher des messages dans toutes les boîtes aux lettres

    Autorisation:
    read
    Paramètres de requête:
    q, folder, limit
Envoyer un message
curl -X POST https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/send \  -H "X-API-Key: mh_live_xxx" -H "content-type: application/json" \  -d '{"to":["customer@example.com"],"subject":"Hello","text":"Message body"}'

Courrier indésirable

Vérifiez l’emplacement des messages (Boîte de réception/Courrier indésirable) et sortez-les du Courrier indésirable.

  • POST/mailboxes/{id}/messages/{msgId}/move

    Déplacer un message (par exemple du Courrier indésirable vers la Boîte de réception)

    Autorisation:
    move
    Corps:
    destination (obligatoire)
  • POST/mailboxes/{id}/unspam

    Sortir tous les messages, ou ceux d’un expéditeur, du Courrier indésirable

    Autorisation:
    move
    Corps:
    filter
  • GET/mailboxes/{id}/placement

    Savoir si le message est arrivé dans la Boîte de réception ou le Courrier indésirable

    Autorisation:
    read
    Paramètres de requête:
    from, subject, since_minutes
Boîte de réception ou Courrier indésirable? Puis sortir le message du Courrier indésirable
curl "https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/placement?from=me@example.com" -H "X-API-Key: mh_live_xxx"curl -X POST https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/unspam -H "X-API-Key: mh_live_xxx" \  -H "content-type: application/json" -d '{"filter":{"type":"sender","value":"me@example.com"}}'

Webhooks

Enregistrez des URL pour recevoir des événements.

Pour chaque événement, Mailera envoie une requête POST en JSON à votre URL. Si votre point de terminaison renvoie une erreur ou ne répond pas, Mailera réessaie avec des délais croissants.

ÉvénementQuand
message.receivedUn nouveau message est arrivé dans la Boîte de réception
message.junkUn nouveau message est arrivé dans le Courrier indésirable
mailbox.disconnectedLa boîte aux lettres a perdu sa connexion (token révoqué, mot de passe modifié…)

Pour vérifier la signature, calculez le HMAC-SHA256 de l’horodatage suivi d’un point et du corps avec le secret du webhook, puis comparez-le à l’en-tête de signature.

En-têtes envoyés: X-MailHub-Event X-MailHub-Delivery X-MailHub-Timestamp X-MailHub-Signature

  • GET/webhooks

    Lister les webhooks

    Autorisation:
    webhooks
  • POST/webhooks

    Créer un webhook (le secret de signature n’est renvoyé qu’une fois)

    Autorisation:
    webhooks
    Corps:
    url (obligatoire), events, group_id
  • PATCH/webhooks/{id}

    Activer/désactiver un webhook ou modifier ses événements ou son URL

    Autorisation:
    webhooks
  • DELETE/webhooks/{id}

    Supprimer un webhook

    Autorisation:
    webhooks
Vérifier la signature d’un webhook (Node.js)
import crypto from "node:crypto";// X-MailHub-Signature: sha256=<hex>   X-MailHub-Timestamp: <unix seconds>const expected = "sha256=" + crypto.createHmac("sha256", SECRET)  .update(timestamp + "." + rawBody).digest("hex");const ok = expected.length === signature.length &&  crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));

Exemples

Remplacez MAILBOX_ID et la clé par vos propres valeurs.

Importer des boîtes aux lettres et suivre la progression
curl -X POST https://mailera.app/api/public/v1/mailboxes/import \  -H "X-API-Key: mh_live_xxx" -H "content-type: application/json" \  -d '{"lines":["user@hotmail.com:pass:M.C5_refresh...:9e5f94bc-..."]}'# → { "data": { "job_id": "..." } }curl "https://mailera.app/api/public/v1/mailboxes/import?job_id=JOB_ID" -H "X-API-Key: mh_live_xxx"
Vérifier qu’une boîte aux lettres fonctionne
curl https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/status -H "X-API-Key: mh_live_xxx"
Récupérer le dernier code OTP (15 dernières minutes)
curl "https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/otp?from=noreply@service.com&since_minutes=15" \  -H "X-API-Key: mh_live_xxx"# → { "data": { "code": "482913", "folder": "inbox", ... } }  or  { "data": { "code": null } }
Envoyer un message
curl -X POST https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/send \  -H "X-API-Key: mh_live_xxx" -H "content-type: application/json" \  -d '{"to":["customer@example.com"],"subject":"Hello","text":"Message body"}'
Boîte de réception ou Courrier indésirable? Puis sortir le message du Courrier indésirable
curl "https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/placement?from=me@example.com" -H "X-API-Key: mh_live_xxx"curl -X POST https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/unspam -H "X-API-Key: mh_live_xxx" \  -H "content-type: application/json" -d '{"filter":{"type":"sender","value":"me@example.com"}}'
JavaScript (côté serveur)
const res = await fetch("https://mailera.app/api/public/v1/mailboxes?limit=50", {  headers: { "X-API-Key": process.env.MAILERA_API_KEY },});const { data, next_cursor } = await res.json();
Python
import os, requestsr = requests.get(    "https://mailera.app/api/public/v1/mailboxes/MAILBOX_ID/messages",    params={"folder": "inbox", "limit": 20},    headers={"X-API-Key": os.environ["MAILERA_API_KEY"]},)print(r.json()["data"])
Vérifier la signature d’un webhook (Node.js)
import crypto from "node:crypto";// X-MailHub-Signature: sha256=<hex>   X-MailHub-Timestamp: <unix seconds>const expected = "sha256=" + crypto.createHmac("sha256", SECRET)  .update(timestamp + "." + rawBody).digest("hex");const ok = expected.length === signature.length &&  crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));