Mail Sender docs Retour à l'application →

Référence de l'API

Un seul point d'entrée : POST /api/send.php.

endpoint
POST https://mailer.echange.online/api/send.php

GET est également accepté (pratique pour un test rapide depuis un navigateur), mais POST est la méthode recommandée : une requête GET fait apparaître la clé API et le contenu du message dans les journaux du serveur, l'historique du navigateur et les en-têtes Referer.

Authentification

Chaque appel doit porter une clé API valide, de préférence dans un en-tête :

bash
-H "X-API-Key: msk_live_xxxxxxxxxxxxxxxxxxxxxxxx"

Le paramètre api_key dans le corps de la requête est accepté en repli, pour les environnements où l'on ne maîtrise pas les en-têtes. La clé est liée à un compte SMTP et à un utilisateur : c'est elle qui détermine le serveur d'envoi, le quota et les limites de débit appliquées.

Formats de requête acceptés

Content-TypeUsage
application/x-www-form-urlencoded Le plus courant. curl -d, formulaires HTML, clients HTTP classiques.
multipart/form-data Obligatoire pour envoyer un fichier en pièce jointe par upload. curl -F.
application/json Corps JSON. Autorise les tableaux d'adresses et l'objet vars sans ré-encodage.

En cas de doublon, la priorité est : corps JSON > corps de formulaire > paramètres d'URL.

Paramètres

Message

ParamètreTypeRequisDescription
fromadresseoui Expéditeur affiché. Une seule adresse. Forme Nom <adresse> acceptée.
toadressesoui Destinataires, séparés par des virgules (ou tableau JSON).
ccadressesnon Copie visible.
bccadressesnon Copie cachée, absente des en-têtes du message.
reply_toadressesnon Adresse de réponse, si différente de from.
subjecttexteoui* Objet du message. *Facultatif si un template en fournit un.
bodytexteoui* Corps du message. *Facultatif si un template en fournit un.
formattext | htmlnon Format d'envoi. Défaut : text.
text_bodytextenon Version texte d'un email HTML. Générée automatiquement depuis le HTML si absente.
htmlbooléennon Ancien paramètre, équivalent à format=html. Conservé par compatibilité.

Templates

ParamètreTypeRequisDescription
templatetextenon Identifiant (slug) ou id numérique d'un de vos templates.
varsobjet JSONnon Valeurs des variables {nom}. Valeurs simples uniquement (texte, nombre).
strict_varsbooléennon Défaut 1 : une variable sans valeur provoque une erreur. 0 : le placeholder est laissé tel quel.

Pièces jointes

ParamètreTypeRequisDescription
attachments[]fichier(s)non Un ou plusieurs fichiers, en multipart/form-data.
attachmentstableau JSONnon Objets {filename, content_base64, content_type}, en application/json.

Réponse en cas de succès

json
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  "success": true,
  "message_id": "<3f0a1c...@mondomaine.com>",
  "format": "html",
  "template": "confirmation-commande",
  "recipients": { "to": 2, "cc": 1, "bcc": 0 },
  "attachments": { "count": 1, "bytes": 184320 },
  "quota": { "used": 128, "quota": 20000 }
}
ChampDescription
message_idEn-tête Message-ID du message envoyé. À conserver pour tout rapprochement ultérieur.
formatFormat effectivement utilisé.
templateSlug du template utilisé, ou null.
recipientsNombre d'adresses par champ.
attachmentsNombre et taille cumulée (avant encodage) des pièces jointes.
quotaConsommation du mois en cours après cet envoi. quota: 0 signifie « illimité ».

Réponse en cas d'erreur

json
{
  "success": false,
  "error": {
    "code": "invalid_request",
    "message": "Au moins un destinataire \"to\" est requis."
  }
}

Le champ error.code est stable : testez-le dans votre code plutôt que le message, qui peut être reformulé. La liste complète se trouve sur Codes d'erreur.

Ordre des contrôles

Comprendre cet ordre aide à interpréter les erreurs — et garantit qu'une requête refusée ne consomme pas de quota :

  1. Méthode HTTP et lisibilité du corps de la requête ;
  2. clé API valide et active ;
  3. compte utilisateur actif ;
  4. adresse IP autorisée pour cette clé ;
  5. template demandé (existence, forfait) ;
  6. validation du message (adresses, format, variables, pièces jointes) ;
  7. quota mensuel, puis limites de débit ;
  8. envoi SMTP.

À savoir

Le quota et le débit ne sont décomptés qu'une fois la requête entièrement validée. Une erreur 4xx de validation ne coûte donc rien. En revanche, un échec SMTP (502) intervient après le décompte : l'envoi a bien été tenté.

Journalisation

Chaque appel, réussi ou non, est journalisé avec : horodatage, clé API utilisée, IP source, user-agent, compte SMTP, sujet, format, template, nombre de destinataires, nombre et taille des pièces jointes, Message-ID, réponse du serveur SMTP et durée. Ces informations sont consultables depuis le tableau de bord.