CIIFragments Studio est agréée CII : récupérez jusqu'à 20 % de vos dépenses en développement logicielEn savoir plus

Intégration API Resend

Nous développons votre connecteur Resend

Nous branchons Resend à votre produit : confirmation, reset, facture PDF. Chaque envoi est rattaché à une intention métier, sans double envoi ni campagne marketing forcée.

  • Équipe produit senior
  • connecteurs email en production
  • du cadrage au monitoring
En bref

À quoi sert l'API Resend et quand choisir Resend pour ses emails applicatifs ?

Resend est un service d'envoi d'emails transactionnels conçu pour les développeurs, avec une API simple, des logs en temps réel et une gestion native des domaines d'envoi. On le choisit pour les emails déclenchés par votre application : confirmation d'inscription, lien de connexion, notification d'événement, quand la priorité est la délivrabilité et la traçabilité, pas les campagnes marketing. L'idempotence de l'API garantit qu'un email comme un magic link ne part pas deux fois, même en cas de retry. La plateforme supporte l'envoi depuis une région européenne pour les projets avec des contraintes de localisation des données.

Cas d'usage

Ce que nos clients construisent sur l'API Resend

01

Magic links et reset de mot de passe

Lien de connexion ou reset : un même envoi ne part pas deux fois si la file rejoue. Le client reçoit un seul lien utilisable.

02

Factures PDF en pièce jointe

La facture part en pièce jointe. Si la livraison échoue, le dossier est marqué « e-mail non rendu », sans surveillance manuelle.

03

Onboarding sans double bienvenue

Bienvenue et relance J+3 partent groupés, sans envoyer deux fois le même message au même compte.

04

Alertes produit avec latence européenne

L'envoi part d'Irlande pour un meilleur délai en Europe. On dit franchement où vivent les logs : ce n'est pas un compte UE.

Pour vous

Ce que ça change dans vos emails transactionnels

La technique au service d'un résultat mesurable : zéro double magic link, un statut de livraison fiable, une résidence dite franchement.

Un rejeu n'envoie plus un second e-mail

Chaque intention (reset, facture, bienvenue) a une clé métier. Si la file rejoue, le client ne reçoit pas deux liens.

Vous savez si l'e-mail est arrivé

Les notifications de livraison sont vérifiées. Vous ouvrez un accès ou fermez un compte sur un statut fiable, pas sur un espoir.

La région d'envoi n'est pas la résidence

Choisir l'Europe pour le délai d'inbox ne déplace pas automatiquement les logs. On l'écrit clairement dans le cadrage.

Le marketing reste dans l'outil marketing

Resend couvre le transactionnel. Campagnes, listes et SMS restent chez Mailjet ou Brevo : pas de mauvais usage forcé.

Méthode

Comment nous livrons votre connecteur Resend

01

Cadrage

Quels emails, quel volume, DPA US acceptable ou non. On écrit la décision de résidence, la région d'envoi, et ce qui reste dans l'ESP.

02

Développement

Idempotency-Key dérivée de l'intention, file unique par équipe, Svix sur corps brut, respect de ratelimit-* et retry-after.

03

Recette

Domaine resend.dev, jamais le domaine de prod. 409 sur payload divergent, replay hors 24 h, webhook hors fenêtre rejeté.

04

Monitoring

Alertes 429 et quota, journal des clés d'idempotence, file morte inspectable. Vous voyez un seau d'équipe saturé avant vos utilisateurs.

L'API

Ce que permet l'API Resend

Envoi unitaire idempotent
POST /emails avec Idempotency-Key (1 à 256 caractères), mémorisée 24 heures. Même clé + même payload = même réponse, pas de second envoi.
Batch jusqu'à 100
POST /emails/batch, une clé d'idempotence pour le lot, pas pour chaque ligne. SMTP : Resend-Idempotency-Key.
Webhooks Svix
En-têtes svix-id, svix-timestamp, svix-signature. Vérifier le corps brut avec le signing secret. Le secret n'est montré qu'à la création ou à la lecture.
Régions d'envoi, résidence US
us-east-1, eu-west-1, sa-east-1, ap-northeast-1. eu-west-1 améliore le time-to-inbox européen. Ça ne déplace pas les logs.
Vocabulaire

Le vocabulaire de l'API Resend

Idempotency-Key
En-tête 1 à 256 caractères, mémorisé 24 heures. Dérivé de l'intention, jamais un UUID régénéré dans le retry de la file. Au-delà de 24 h, la même clé n'existe plus.
409 invalid_idempotent_request
Même clé, autre payload. Réutiliser welcome-user/123 pour un e-mail différent (changement de gabarit) est une erreur. La clé identifie le payload, pas l'utilisateur.
svix-signature
HMAC Svix sur le corps brut, avec svix-id et svix-timestamp. Parser le JSON puis re-signer échoue. Dédup sur svix-id, rejet hors fenêtre de timestamp.
eu-west-1
Région d'envoi Irlande. « It does not control where customer data is stored. » Une page « Resend Europe » qui laisse croire que les logs sont en Irlande est fausse.
ratelimit-*
En-têtes IETF : limit, remaining, reset, plus retry-after. Un cron de relance et le trafic web partagent le seau. File unique par équipe.
10 rps / équipe
Défaut documenté, toutes les clés du compte. 429 daily_quota_exceeded ou monthly_quota_exceeded sur les offres à quota e-mails.
À savoir

Les contraintes réelles de l'API Resend

01

La résidence est aux États-Unis

Toutes les données de compte restent aux États-Unis. eu-west-1 = dispatch depuis l'Irlande. Si le client exige un stockage UE, Mailjet ou Brevo se discutent, pas un slogan « Resend Europe ».

02

La fenêtre d'idempotence dure 24 h

Au-delà, un replay tardif renvoie. Votre table d'envois doit vivre plus longtemps que Resend. 409 concurrent_idempotent_requests existe aussi.

03

10 requêtes par seconde par équipe

Toutes clés confondues. Deux workers indépendants vident le seau. On pose une file unique, on lit retry-after, on ne lance pas un cron parallèle au trafic web.

04

Ce n'est pas un ESP

Pas de listes, segments, SMS v4, parse inbound au même titre. Forcer un usage marketing de masse dans Resend est un mauvais cadrage (quotas contacts, produit).

Resend ou Mailjet

Resend ou Mailjet pour vos emails ?

Une API d'envoi idempotente d'un côté, un ESP de l'autre. Choisir l'un ou l'autre est une décision de résidence et de produit, pas un choix de SDK.

CritèreResendCette pageMailjetESP
ProduitAPI d'envoi, broadcasts limitésESP : tx, marketing, contacts, SMS
IdempotenceIdempotency-Key, fenêtre 24 hCustomID (corrélation, pas anti-doublon)
WebhooksSvix, HMAC, en-têtes svix-*eventcallbackurl v2, pas de HMAC dans le guide
SandboxDomaine resend.dev / clés de testSandboxMode racine
RésidenceCompte US, envoi optionnel eu-west-1DPA du compte à relire
Débit documenté10 req/s par équipe, en-têtes IETF429, chiffres non publiés
Le bon casEmail transactionnel idempotent de SaaSTx + marketing + SMS dans un compte

Les deux se combinent : Resend pour le magic link, Mailjet pour le cycle de vie et les listes. C'est un arbitrage de cadrage, pas un choix définitif.

Notre expertise

Ce que nous mesurons sur une intégration Resend

15 j
premier flux Resend en production
1
file d'envoi unique par équipe Resend
0
e-mail envoyé deux fois sur un rejeu
4
développeurs seniors sur le projet

On combine Resend avec

La stack qui entoure Resend sur nos projets.

  • Stripe
  • React Email
  • n8n
  • PostgreSQL
  • Node.js
FAQ

Intégration Resend : vos questions

Trois étapes. Une clé re_ par environnement, en coffre, jamais partagée entre la CI et la production. Un connecteur POST /emails dont l'Idempotency-Key est dérivée de l'intention (reset/userId/tokenId), pas d'un UUID régénéré au retry, plus une table d'envois qui vit plus de 24 h. Une file unique par équipe Resend, qui lit ratelimit-* et retry-after : le défaut est 10 requêtes par seconde, toutes clés confondues. Puis les webhooks Svix : corps brut, signing secret, rejet hors fenêtre de timestamp, dédup svix-id. La partie sensible n'est pas le SDK : c'est la résidence US, à écrire avant de promettre l'Europe.

Un premier flux utile, typiquement magic link ou facture avec idempotence et webhook d'échec, se livre en deux à trois semaines. Une chaîne complète avec batch, domaines multi-région, rotation DNS et frontière nette vis-à-vis de l'ESP marketing demande plutôt quatre à six semaines. Le DNS et le DPA pèsent souvent plus que POST /emails. Nous cadrons le périmètre en amont et donnons une estimation ferme avant de commencer.

Non. eu-west-1 est une région d'envoi (Irlande). La documentation est explicite : ça ne contrôle pas où les données client sont stockées. Métadonnées, logs et enregistrements API restent aux États-Unis. Le RGPD passe par le DPA et les CCT, pas par le hostname d'envoi. Si le questionnaire exige un stockage UE, on discute Mailjet ou Brevo, on n'écrit pas « Resend Europe » sur une page. C'est le test de sérieux du cadrage.

Resend est une API d'envoi : Idempotency-Key 24 h, webhooks Svix signés, DX courte, pas un ESP. Mailjet est un ESP : CustomID, SandboxMode, listes, SMS v4, pas d'HMAC webhook dans le guide, pas d'Idempotency-Key. On choisit Resend quand un retry ne doit pas renvoyer le magic link, et que le stockage US est accepté. On choisit Mailjet quand le marketing et le produit partagent la liste. Les deux se combinent. Ce n'est pas un choix de SDK.

Parce que la clé identifie le payload, pas l'utilisateur. Réutiliser welcome-user/123 après un changement de gabarit est 409 invalid_idempotent_request. Un UUID neuf à chaque retry de file annule l'idempotence : Resend voit un autre envoi. 409 concurrent_idempotent_requests existe aussi si deux workers partent ensemble. Nous calculons la clé sur l'intention, nous sérialisons les retries, et nous gardons notre table plus de 24 h, parce qu'au-delà Resend a oublié la clé.

Un projet d'intégration Resend ?

Parlons-en. 30 minutes pour cadrer vos envois, vérifier résidence et idempotence, et vous dire franchement ce qui est faisable.

Parler de mon projet Resend
Parler de mon projet Resend