Aller au contenu

RELIER VOTRE APPLICATION

Un message utile.
Un contrat explicite.

L’API transactionnelle du socle privé prépare des messages à partir de modèles publiés. Un identifiant durable permet de suivre une intention sans la confondre avec une livraison.

Explorer ce guide

Projet privé · ouverture publique en préparation

L’APPROCHE MAILIE

202 signifie « mis en file »

01

Une intention enregistrée

02

Un identifiant de message durable

03

Une livraison à suivre séparément

Des messages utiles. Des choix clairs.

Informations mises à jour le 14 octobre 2026. Ces guides décrivent les choix du produit et l’intégration privée. Ils ne constituent ni certification, ni conditions juridiques validées, ni qualification des fournisseurs live.

CLÉS ET PÉRIMÈTRE

Une clé par usage, un espace de travail.

Le contrat utilise Authorization: Bearer avec une clé de service créée dans l’application. Ses scopes, son espace et son échéance limitent les opérations. Les exemples ci-dessous ne contiennent aucune clé utilisable.

messages.send autorise une intention transactionnelle ; messages.read sert à lire un message et ses événements. statistics.read et events.write couvrent leurs endpoints respectifs. Une clé ne remplace pas l’approbation humaine d’une campagne marketing.

Base canonique prévue : https://mailie.app/api/v1. Les routes sont présentes dans le code privé ; disponibilité commerciale et qualification du transport live ne sont pas annoncées par cette documentation.

UNE INTENTION DURABLE

Modèle publié, expéditeur vérifié, clé d’idempotence.

Le POST requiert un destinataire, un expéditeur autorisé, une version de modèle transactionnel déjà publiée et une catégorie compatible. Un email promotionnel ne devient pas un message de service en changeant seulement son étiquette.

Utilisez la même Idempotency-Key pour la même opération logique et le même corps. Une nouvelle clé est une nouvelle intention. Réutiliser la clé avec un corps différent provoque un conflit.

HTTPRequête illustrative
POST /api/v1/messages HTTP/1.1
Host: mailie.app
Authorization: Bearer MAILIE_SERVICE_KEY_PLACEHOLDER
Idempotency-Key: demo-order-42
Content-Type: application/json

{
  "type": "transactional",
  "category": "order_confirmation",
  "fromSenderId": "11111111-1111-4111-8111-111111111111",
  "to": {
    "email": "recipient@example.invalid",
    "name": "Recipient example"
  },
  "template": {
    "id": "22222222-2222-4222-8222-222222222222",
    "version": 1
  },
  "variables": {
    "reference": "ORDER-EXAMPLE-42"
  },
  "metadata": {
    "external_reference": "demo_order_42"
  }
}

Suivre la même intention

GET /api/v1/messages/{messageId}
GET /api/v1/messages/{messageId}/events

Authorization: Bearer MAILIE_READ_KEY_PLACEHOLDER

Utilisez le message_id retourné par la réponse réelle. Ces lectures demandent messages.read.

202En file, pas livré

La réponse distingue status, mode et request_id. simulation et test_sink sont distincts du mode live.

Les UUID et adresses example.invalid de l’exemple sont fictifs. Préparez un espace isolé, un modèle et un transport de test autorisé avant toute recette ; le mode de transport est décidé au serveur, pas par un champ arbitraire du client.

INTERPRÉTER LES RÉPONSES

Accepter une commande n’est pas livrer un email.

202 indique que le message et sa file durable ont été créés. Lisez ensuite l’état et les événements via l’identifiant retourné. Une acceptation par le transport reste distincte d’une livraison au destinataire.

Une réponse perdue autour de la remise peut produire un état incertain. Vérifiez l’intention existante et ses événements avant toute décision de renvoi. Les ouvertures et clics individuels ne sont pas des critères de succès disponibles.

ÉVÉNEMENTS ET LIMITES

Prévoir les erreurs et la révocation.

Les erreurs utilisent un format Problem Details avec un code et une référence de requête. Les limites et quotas viennent de la politique de l’espace ; cette page ne promet pas de capacité illimitée.

Les webhooks clients du chantier utilisent une signature et un identifiant d’événement. Un callback dupliqué doit rester idempotent. Validez la signature et conservez l’identité logique avant de produire un effet dans votre système.

Routes sous https://mailie.app/api/v1
MéthodeRouteScopeUsage
POST/messagesmessages.sendUne intention transactionnelle
POST/messages/batchmessages.sendUn lot borné ; lire chaque résultat
GET/messages/{messageId}messages.readLire un message visible
GET/messages/{messageId}/eventsmessages.readLire les événements opérationnels
GET/statisticsstatistics.readLire les agrégats opérationnels
POST/business-eventsevents.writeEnregistrer un événement métier autorisé
401Clé absente, expirée ou révoquée
403Permission insuffisante
404Ressource indisponible dans ce périmètre
409Conflit d’idempotence ou de version
422Message invalide ou contrôle métier refusé
429Quota ou limite atteints
503Un service ou une capacité requis sont indisponibles

Une erreur HTTP marquée comme réessayable ne prouve pas qu’une remise précédente n’a jamais été acceptée. Conservez l’identité logique et vérifiez toute issue incertaine.

Aucun lien OpenAPI téléchargeable n’est présenté tant que l’artefact officiel du projet n’a pas été livré. Les exemples suivent les routes et schémas du code ; les contrats peuvent encore évoluer avant l’ouverture publique.

POUR LES COMPTES PRIVÉS AUTORISÉS

Retrouver votre espace.

Votre compte et vos permissions déterminent les parcours accessibles.
Ouvrir l’application