Brancher Mailcheer dans votre application
L'API REST remplace un service d'envoi transactionnel. Les champs et la réponse sont ceux de Resend : une migration se résume à l'adresse de base et à la clé.
Créer une clé d'API
Dans votre espace Mailcheer : Réglages → API → Nouvelle clé. Nommez-la, cochez les droits, validez. La clé s'affiche UNE seule fois — copiez-la tout de suite. Elle ressemble à « mch_live_ » suivi de trente-deux caractères.
Poser la clé dans l'environnement du service
Comme n'importe quel secret : dans les variables d'environnement, jamais dans le dépôt.
MAILCHEER_API_KEY=mch_live_…Si vous venez de Resend : copiez le client minimal
Un fichier, aucune dépendance, la même signature que le SDK que vous quittez. Le reste de votre code d'envoi ne bouge pas : il lit toujours { data, error } et data.id.
curl -O https://mailcheer.com/mailcheer-client.fr.ts // puis, dans votre code : - const resend = new Resend(process.env.RESEND_API_KEY); + const mailcheer = new Mailcheer(process.env.MAILCHEER_API_KEY); const { data, error } = await mailcheer.emails.send({ from, to, subject, html }); if (error) throw new Error(`Email delivery failed: ${error.message}`);Ou envoyer sans rien copier
Aucune bibliothèque n'est nécessaire : un appel HTTP ordinaire suffit. La réponse est un 202 avec l'identifiant du message — l'e-mail est accepté, pas encore remis.
const res = await fetch("https://mailcheer.com/api/v1/emails", { method: "POST", headers: { Authorization: `Bearer ${process.env.MAILCHEER_API_KEY}`, "Content-Type": "application/json", // Une valeur unique par envoi : un réessai ne fera pas de doublon. "Idempotency-Key": factureId, }, body: JSON.stringify({ from: "Votre marque <bonjour@votredomaine.fr>", to: client.email, subject: "Votre facture", html: "<p>La voici.</p>", }), }); if (!res.ok) { // Toujours la même forme : { error: { code, message, details } }. // Écrivez votre code contre « code », jamais contre « message ». const { error } = await res.json(); throw new Error(`${error.code} — ${error.message}`); } const { id } = await res.json();Savoir si le message est arrivé
Le statut évolue après l'envoi : sent, puis delivered, bounced ou complained. Une adresse qui rebondit entre automatiquement en liste de suppression — votre application n'a pas à s'en occuper.
curl https://mailcheer.com/api/v1/emails/ID \ -H "Authorization: Bearer $MAILCHEER_API_KEY"Vérifier que c'est branché
Demandez l'état du compte. C'est une lecture seule : rien n'est modifié, rien n'est envoyé. La réponse nomme votre espace et liste vos domaines d'envoi vérifiés — ce sont eux qui décident des adresses depuis lesquelles vous pourrez écrire.
curl -s https://mailcheer.com/api/v1/me \ -H "Authorization: Bearer $MAILCHEER_API_KEY"
Si quelque chose coince
Les erreurs de l'API portent toutes un code lisible. Voici ceux qu'on rencontre au branchement.
| 422 suppressed_recipient sur un e-mail transactionnel | L'adresse du destinataire est revenue en erreur, il s'est plaint, ou vous l'avez retirée à la main : ces trois motifs refusent aussi les envois unitaires. Une simple désinscription ne refuse que les envois qui portent unsubscribe_url. |
|---|---|
| 401 invalid_api_key | La clé est incomplète (un retour à la ligne s'est glissé au copier-coller) ou elle a été remplacée. Créez-en une neuve. |
| 401 revoked_api_key | La clé a été coupée dans Réglages → API. Créez-en une autre. |
| 403 insufficient_scope | La clé n'a pas le droit demandé. Les droits se choisissent à la création et ne se modifient plus : créez une clé avec le bon périmètre. |
| 422 unverified_from_domain | L'adresse d'expédition n'est pas sur un domaine vérifié de l'espace. Le message d'erreur liste ceux qui le sont. Pour en ajouter un : Domaines → Ajouter un domaine, puis poser les enregistrements DNS. |
| 429 rate_limit_exceeded | Plus de 600 requêtes par minute pour cette clé. L'en-tête Retry-After dit combien de secondes attendre. |