Le CLI de Resend est l'outil officiel en ligne de commande pour Resend, une plateforme d'e-mails conçue pour les développeurs. Vous l'installez avec npm install -g resend-cli ou brew install resend/cli/resend, vous authentifiez avec resend login, et ensuite envoyez des e-mails, gérez des domaines et automatisez votre infrastructure e-mail depuis n'importe quel terminal ou pipeline CI/CD.
Qu'est-ce que Resend ?
Resend est une API d'e-mails pour les développeurs. Vous connectez votre domaine, obtenez une clé API et commencez à envoyer des e-mails transactionnels depuis votre application : réinitialisations de mot de passe, confirmations de commande, séquences d'intégration, tout ce qui se déclenche de manière programmatique.
Le 13 mars 2026, Zeno Rocha, fondateur de Resend, a lancé le CLI de Resend, apportant cette même infrastructure au terminal. Le CLI dispose de 53 commandes réparties sur 13 ressources. Il est écrit en TypeScript, entièrement open source sous licence MIT, et fonctionne pour trois publics différents :
- Humains : invites interactives, sortie de tableau lisible, planification en langage naturel ("demain à 9h")
- Agents IA : mode de sortie JSON, clés d'idempotence, détection automatique des agents
- Pipelines CI/CD : authentification par variable d'environnement, drapeaux scriptables, codes de sortie cohérents
Installation du CLI de Resend
Il existe quatre façons d'installer le CLI. Choisissez celle qui correspond à votre configuration.
Via cURL (binaire autonome, pas de Node.js requis)
curl -fsSL https://resend.com/install.sh | bash
Ceci télécharge un binaire précompilé pour votre système d'exploitation et le place sur votre PATH. Pas besoin de Node.js.
Via npm
npm install -g resend-cli
Nécessite Node.js 20 ou une version ultérieure. Après l'installation, confirmez qu'il fonctionne :
resend --version
Via Homebrew (macOS et Linux)
brew install resend/cli/resend
C'est l'option la plus propre sur macOS. Homebrew gère les mises à jour automatiquement.
Via PowerShell (Windows)
irm https://resend.com/install.ps1 | iex
Vous pouvez également télécharger les binaires .exe directement depuis la page des versions GitHub.
Pour le développement local
Si vous souhaitez contribuer au CLI ou compiler à partir des sources, vous aurez besoin de Node.js 20+ et de pnpm :
git clone https://github.com/resend/resend-cli.git
cd resend-cli
pnpm install
pnpm build # outputs ./dist/cli.cjs
pnpm build:bin # native binary at ./dist/resend
Authentifier votre compte
Exécutez resend login pour connecter le CLI à votre compte Resend :
resend login
Ceci ouvre votre navigateur, vous guide dans la création d'une clé API dans le tableau de bord Resend, et stocke vos identifiants localement à ~/.config/resend/credentials.json avec des permissions restreintes 0600.
Pour les environnements non interactifs (CI/CD, scripts), ignorez le flux du navigateur et passez une clé directement :
resend login --key re_xxxxxxxxxxxxx
Une fois stocké, vous n'avez pas besoin de vous réauthentifier pour chaque commande. Le CLI résout votre clé API dans cet ordre :
- Drapeau
--api-key(annule tout) - Variable d'environnement
RESEND_API_KEY - Le fichier d'identifiants stocké
Pour les pipelines CI, définir RESEND_API_KEY comme variable d'environnement secrète est l'approche standard :
RESEND_API_KEY=re_xxx resend emails send --from builds@yourco.com --to dev@yourco.com --subject "Build passed" --text "All tests green."
Prise en charge de plusieurs comptes
Si vous travaillez sur plusieurs organisations ou équipes Resend, le CLI gère cela aussi. Basculez entre les profils stockés sans vous déconnecter :
resend auth switch
Ou passez un profil spécifique pour une seule commande :
resend <command> --profile production
Envoyer votre premier e-mail
La commande principale pour l'envoi est resend emails send. Au minimum, vous avez besoin d'une adresse expéditeur (provenant d'un domaine vérifié), d'un destinataire, d'un sujet et d'un corps de message.
Envoyer un e-mail en texte brut
resend emails send \
--from "you@yourdomain.com" \
--to recipient@example.com \
--subject "Hello from the CLI" \
--text "This is a test email sent from the Resend CLI."
Envoyer un e-mail HTML
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Your order is confirmed" \
--html "<h1>Order confirmed</h1><p>Thanks for your purchase.</p>"
Ou pointez vers un fichier HTML local :
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Welcome aboard" \
--html-file ./templates/welcome.html
Planifier l'envoi
Le CLI analyse les dates en langage naturel ainsi que les horodatages ISO 8601 :
resend emails send \
--from "you@yourco.com" \
--to user@example.com \
--subject "Scheduled check-in" \
--text "Just checking in." \
--schedule "tomorrow at 9am"
Fonctionne avec des expressions comme "dans 1 heure", "lundi prochain à 15h", ou un horodatage ISO complet.
Capturer l'ID de l'e-mail
Lorsqu'il est redirigé (piped), le CLI passe automatiquement à la sortie JSON. Utilisez jq pour capturer l'ID de l'e-mail pour les opérations de suivi :
EMAIL_ID=$(resend emails send \
--from a@acme.com \
--to b@acme.com \
--subject "Test" \
--text "Hi" | jq -r '.data.id')
echo "Sent email: $EMAIL_ID"
Annuler ou mettre à jour un e-mail planifié
resend emails cancel $EMAIL_ID
resend emails update $EMAIL_ID --schedule "next Monday at 10am"
Lister les e-mails récents
resend emails list
Envoyer par lot jusqu'à 100 e-mails à la fois
Créez un fichier JSON avec un tableau d'objets e-mail :
[
{ "from": "you@yourco.com", "to": "alice@example.com", "subject": "Hi Alice", "text": "Hello!" },
{ "from": "you@yourco.com", "to": "bob@example.com", "subject": "Hi Bob", "text": "Hello!" }
]
Ensuite, envoyez le lot :
resend emails send-batch --file emails.json
Chaque requête de lot compte comme un appel API par rapport à votre limite de débit, même si elle envoie jusqu'à 100 e-mails.
Gestion des domaines et des clés API
Avant de pouvoir envoyer des e-mails, vous avez besoin d'un domaine vérifié. Le CLI vous guide tout au long du cycle de vie du domaine.
Ajouter un domaine
resend domains create --name yourdomain.com --region us-east-1
Régions prises en charge : us-east-1, eu-west-1, sa-east-1, ap-northeast-1. Choisissez la région la plus proche de vos utilisateurs pour minimiser la latence.
Vérifier les enregistrements DNS
Après avoir créé le domaine, Resend vous fournit les enregistrements DNS à ajouter (SPF, DKIM, DMARC). Une fois que vous les avez ajoutés à votre fournisseur DNS, exécutez :
resend domains verify --id <domain-id>
Interrogez le statut jusqu'à ce qu'il renvoie "verified" :
resend domains get --id <domain-id>
Configurer le suivi et TLS
resend domains configure --id <domain-id> # Configuration interactive
Vous pouvez activer le suivi d'ouverture, le suivi de clics et le DKIM personnalisé via cette commande.
Lister tous les domaines
resend domains list
Gérer les clés API
Pour des raisons de sécurité, créez des clés API spécifiques pour chaque service ou environnement au lieu de partager une seule clé partout :
resend api-keys create # Interactif, vous permet de définir la portée par domaine
resend api-keys list
resend api-keys delete --id <key-id>
Les clés à portée limitée limitent ce que chaque intégration peut faire. Une clé limitée à un domaine ne peut pas accéder à vos autres domaines ou paramètres de compte.
Fonctionnalités avancées : diffusions, webhooks et modèles
Au-delà de l'envoi d'e-mails individuels, le CLI de Resend gère trois autres cas d'utilisation majeurs : les diffusions en masse, la gestion des webhooks et les modèles réutilisables.
Diffusions
Les diffusions vous permettent d'envoyer le même e-mail à une grande liste de contacts. Vous rédigez d'abord, puis envoyez ou planifiez :
resend broadcasts create # Création interactive de brouillons
resend broadcasts send --id <broadcast-id>
resend broadcasts schedule --id <broadcast-id> --date "next Monday at 10am"
Webhooks
Les webhooks vous donnent des événements de livraison en temps réel : rebonds, ouvertures, clics, rapports de spam. Le CLI gère le cycle de vie complet :
resend webhooks create # Enregistrer un nouveau point de terminaison
resend webhooks list
Pour le développement local, utilisez la commande webhooks listen pour rediriger les événements de webhook vers votre localhost :
resend webhooks listen --forward-to http://localhost:3000/webhooks/resend
Cela vous évite de configurer ngrok ou des outils de tunneling similaires. Le CLI prend en charge 17 types d'événements, y compris email.sent, email.delivered, email.bounced, email.opened et email.clicked.
Modèles
Les modèles vous permettent de créer un code HTML d'e-mail réutilisable avec des variables dynamiques :
resend templates create # Constructeur de modèles interactif
Les variables utilisent la syntaxe {{variable_name}} avec des valeurs de secours. Une fois créés, référencez les modèles par ID lors de l'envoi d'e-mails.
Contacts et audiences
Resend intègre la gestion des contacts pour les e-mails marketing :
resend contacts create --audience-id <id> --email user@example.com --first-name "Alice"
resend contacts list --audience-id <id>
resend contacts update --id <contact-id> --unsubscribed false
Exécuter des diagnostics
La commande doctor vérifie votre environnement et signale les problèmes :
resend doctor
Elle vérifie la version de votre CLI, la validité de votre clé API, les domaines vérifiés, et détecte même les agents de codage IA (Cursor, Claude Desktop, VS Code, OpenClaw).
Utilisation du CLI de Resend dans les pipelines CI/CD
Le CLI est conçu pour fonctionner efficacement dans les environnements automatisés. Quelques modèles à connaître :
Sortie lisible par machine
Chaque fois que vous redirigez la sortie ou passez --json, le CLI passe à une sortie JSON structurée. Pas de spinners, pas d'invites interactives :
resend emails send --from a@co.com --to b@co.com --subject "Deploy" --text "Done" --json
L'option --quiet supprime également toutes les sorties sauf JSON :
resend emails list --quiet | jq '.[0].id'
Confirmation automatique des opérations destructives
Utilisez --yes pour ignorer les invites de confirmation dans les scripts :
resend api-keys delete --id <key-id> --yes
Exemple GitHub Actions
- name: Send deployment notification
env:
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
run: |
resend emails send \
--from deploys@yourco.com \
--to team@yourco.com \
--subject "Deploy to production: ${{ github.sha }}" \
--text "Deployed commit ${{ github.sha }} to production."
Limites de débit
La limite de débit de l'API Resend est de 2 requêtes par seconde, partagée entre toutes les clés API de votre équipe. Lors de l'envoi par lots, utilisez send-batch (jusqu'à 100 e-mails par appel) au lieu de boucler sur des envois individuels.
Tester votre API d'e-mail avec Apidog
Le CLI de Resend est excellent pour une utilisation interactive et des scripts simples. Cependant, lorsque vous créez un backend qui appelle directement l'API REST de Resend, vous avez besoin d'un moyen d'explorer et de tester ces points de terminaison avant d'écrire le code de l'application.
Apidog s'en occupe. C'est un client API gratuit qui vous permet d'envoyer des requêtes HTTP, d'inspecter les réponses, d'organiser vos cas de test et de configurer des environnements pour différentes clés API et configurations.
Voici comment Apidog s'intègre dans un flux de travail d'intégration Resend typique :
Importez la spécification de l'API Resend. Resend fournit une documentation de référence de l'API sur resend.com/docs. Vous pouvez importer la spécification de l'API dans Apidog pour obtenir une vue organisée de chaque point de terminaison, y compris les schémas de requête/réponse.
Configurez les environnements. Dans Apidog, créez des environnements pour le développement et la production. Stockez votre RESEND_API_KEY en tant que variable d'environnement et référencez-la dans vos requêtes avec {{RESEND_API_KEY}}. Basculez entre les environnements en un seul clic.
Testez votre logique d'envoi. Avant d'écrire du code pour envoyer des e-mails depuis votre application, exécutez le point de terminaison POST /emails dans Apidog avec votre charge utile exacte. Vérifiez la réponse, assurez-vous que l'ID de l'e-mail est correctement renvoyé, et confirmez le comportement pour les cas limites (champs manquants, adresses invalides, etc.).
Automatisez les tests. L'exécuteur de tests d'Apidog vous permet d'enchaîner les appels API et d'effectuer des assertions sur les valeurs de réponse. Vous pouvez configurer un test qui envoie un e-mail de test, le récupère par ID, puis vérifie son statut, le tout sans écrire de code de test.
Cela permet de détecter les bugs d'intégration avant qu'ils n'apparaissent en production. Combiné avec le CLI de Resend pour le développement local, vous disposez à la fois d'un outil de terminal rapide et d'un environnement de test API complet.
Tarification Resend
Le CLI lui-même est gratuit et open source. La tarification s'applique à la plateforme Resend :
| Forfait | Prix | E-mails mensuels | Limite quotidienne | Rétention des logs |
|---|---|---|---|---|
| Gratuit | 0 $/mois | 3 000 | 100/jour | 1 jour |
| Pro | 20 $/mois | 50 000 | Pas de limite | 3 jours |
| Scale | 90 $/mois | 100 000 | Pas de limite | 7 jours |
| Entreprise | Personnalisé | Personnalisé | Personnalisé | Personnalisé |
Quelques points importants à savoir sur le niveau gratuit :
- La limite de 100/jour le rend adapté aux tests et aux petits projets, pas au trafic de production
- Les analyses (suivi d'ouverture/clic) nécessitent un forfait payant
- La rétention des logs n'est que d'un jour, vous ne pouvez donc pas récupérer l'état des anciens e-mails après 24 heures
- La limite de débit est de 2 requêtes/seconde pour tous les forfaits, partagée au sein de votre équipe
- Le dépassement sur les forfaits payants est plafonné à 5 fois votre quota mensuel pour éviter les factures imprévues
Les IP dédiées sont un ajout de 30 $/mois sur le forfait Scale, disponible lorsque vous envoyez plus de 500 e-mails/jour.
FAQ
Ai-je besoin de Node.js pour installer le CLI de Resend ?
Pas pour les méthodes d'installation via cURL ou Homebrew, qui téléchargent des binaires autonomes précompilés. La méthode d'installation via npm nécessite Node.js 20+.
Pourquoi ne puis-je pas envoyer depuis n'importe quelle adresse e-mail ?
Resend nécessite un domaine vérifié. Vous devez posséder le domaine, ajouter les enregistrements DNS fournis par Resend (SPF, DKIM, DMARC) et passer l'étape de vérification. Les fournisseurs d'e-mails gratuits comme Gmail ne sont pas pris en charge comme adresses d'expéditeur.
Puis-je envoyer à n'importe quelle adresse e-mail avec le forfait gratuit ?
Oui. Le forfait gratuit ne restreint pas les destinataires. Il vous limite à 3 000 e-mails/mois avec un plafond de 100/jour.
Comment fonctionne la planification en langage naturel ?
Le CLI analyse des expressions telles que "demain à 9h", "dans 2 heures", "vendredi prochain à 15h", ou des horodatages ISO 8601 standard. Les heures sont interprétées selon le fuseau horaire local de votre système, sauf indication contraire.
Que se passe-t-il lorsque je redirige la sortie ?
Le CLI détecte quand il est redirigé et passe automatiquement à une sortie uniquement JSON sans spinners ni invites. Vous n'avez pas besoin de passer --json explicitement.
Puis-je utiliser le CLI avec plusieurs comptes Resend ?
Oui. Utilisez resend login plusieurs fois pour stocker différents profils, puis resend auth switch pour basculer entre eux, ou passez --profile <name> sur n'importe quelle commande pour utiliser un profil spécifique.
Le CLI de Resend est-il open source ?
Oui, il est sous licence MIT et hébergé sur github.com/resend/resend-cli.
Quelle est la différence entre --quiet et --json ?
Les deux produisent une sortie JSON. --json force la sortie JSON. --quiet supprime les indicateurs de progression et les spinners, ce qui implique également le mode JSON. En pratique, ils se comportent de la même manière pour le format de sortie ; --quiet supprime en outre toutes les sorties non liées aux données.
