O Resend CLI é a ferramenta de linha de comando oficial para Resend, uma plataforma de e-mail construída para desenvolvedores. Você o instala com npm install -g resend-cli ou brew install resend/cli/resend, autentica com resend login e, em seguida, envia e-mails, gerencia domínios e automatiza sua infraestrutura de e-mail a partir de qualquer terminal ou pipeline de CI/CD.
O que é Resend?
Resend é uma API de e-mail para desenvolvedores. Você conecta seu domínio, obtém uma chave de API e começa a enviar e-mails transacionais de sua aplicação: redefinições de senha, confirmações de pedido, sequências de integração (onboarding), tudo o que dispara programaticamente.
Em 13 de março de 2026, o fundador da Resend, Zeno Rocha, lançou o Resend CLI, trazendo essa mesma infraestrutura para o terminal. O CLI tem 53 comandos em 13 recursos. Ele é escrito em TypeScript, totalmente de código aberto sob licença MIT e funciona para três públicos diferentes:
- Humanos: prompts interativos, saída de tabela legível, agendamento em linguagem natural ("amanhã às 9h")
- Agentes de IA: modo de saída JSON, chaves de idempotência, detecção automática de agente
- Pipelines de CI/CD: autenticação por variável de ambiente, flags scriptáveis, códigos de saída consistentes
Instalando o Resend CLI
Existem quatro maneiras de instalar o CLI. Escolha a que melhor se adapta à sua configuração.
Via cURL (binário autônomo, não requer Node.js)
curl -fsSL https://resend.com/install.sh | bash
Isso baixa um binário pré-compilado para o seu sistema operacional e o adiciona ao seu PATH. Não é necessário Node.js.
Via npm
npm install -g resend-cli
Requer Node.js 20 ou posterior. Após a instalação, confirme se funciona:
resend --version
Via Homebrew (macOS e Linux)
brew install resend/cli/resend
Esta é a opção mais limpa no macOS. O Homebrew lida com as atualizações automaticamente.
Via PowerShell (Windows)
irm https://resend.com/install.ps1 | iex
Você também pode baixar binários .exe diretamente da página de Releases do GitHub.
Para desenvolvimento local
Se você deseja contribuir para o CLI ou construir a partir do código-fonte, precisará do Node.js 20+ e pnpm:
git clone https://github.com/resend/resend-cli.git
cd resend-cli
pnpm install
pnpm build # gera ./dist/cli.cjs
pnpm build:bin # binário nativo em ./dist/resend
Autenticando sua conta
Execute resend login para conectar o CLI à sua conta Resend:
resend login
Isso abre seu navegador, guia você pela criação de uma chave de API no painel da Resend e armazena suas credenciais localmente em ~/.config/resend/credentials.json com permissões restritas 0600.
Para ambientes não interativos (CI/CD, scripts), pule o fluxo do navegador e passe uma chave diretamente:
resend login --key re_xxxxxxxxxxxxx
Uma vez armazenada, você não precisa se autenticar novamente para cada comando. O CLI resolve sua chave de API nesta ordem:
- Flag
--api-key(sobrescreve tudo) - Variável de ambiente
RESEND_API_KEY - O arquivo de credenciais armazenado
Para pipelines de CI, definir RESEND_API_KEY como uma variável de ambiente secreta é a abordagem padrão:
RESEND_API_KEY=re_xxx resend emails send --from builds@yourco.com --to dev@yourco.com --subject "Build passed" --text "All tests green."
Suporte a múltiplas contas
Se você trabalha com várias organizações ou equipes Resend, o CLI também lida com isso. Alterne entre perfis armazenados sem fazer logout:
resend auth switch
Ou passe um perfil específico para um único comando:
resend <comando> --profile production
Enviando seu primeiro e-mail
O comando principal para envio é resend emails send. No mínimo, você precisa de um endereço de remetente (de um domínio verificado), um destinatário, um assunto e um corpo.
Enviar um e-mail em texto simples
resend emails send \
--from "voce@seudominio.com" \
--to destinatario@example.com \
--subject "Olá do CLI" \
--text "Este é um e-mail de teste enviado do Resend CLI."
Enviar um e-mail HTML
resend emails send \
--from "equipe@suaempresa.com" \
--to usuario@example.com \
--subject "Seu pedido está confirmado" \
--html "<h1>Pedido confirmado</h1><p>Obrigado pela sua compra.</p>"
Ou aponte para um arquivo HTML local:
resend emails send \
--from "equipe@suaempresa.com" \
--to usuario@example.com \
--subject "Bem-vindo a bordo" \
--html-file ./templates/welcome.html
Agendar entrega
O CLI analisa datas em linguagem natural, juntamente com timestamps ISO 8601:
resend emails send \
--from "voce@suaempresa.com" \
--to usuario@example.com \
--subject "Check-in agendado" \
--text "Apenas um check-in." \
--schedule "amanhã às 9am"
Funciona com frases como "em 1 hora", "próxima segunda-feira às 15h" ou um timestamp ISO completo.
Capturar o ID do e-mail
Quando redirecionado (piped), o CLI muda automaticamente para a saída JSON. Redirecione através de jq para capturar o ID do e-mail para operações de acompanhamento:
EMAIL_ID=$(resend emails send \
--from a@acme.com \
--to b@acme.com \
--subject "Teste" \
--text "Olá" | jq -r '.data.id')
echo "E-mail enviado: $EMAIL_ID"
Cancelar ou atualizar um e-mail agendado
resend emails cancel $EMAIL_ID
resend emails update $EMAIL_ID --schedule "próxima Segunda às 10am"
Listar e-mails recentes
resend emails list
Enviar em lote até 100 de uma vez
Crie um arquivo JSON com um array de objetos de e-mail:
[
{ "from": "voce@suaempresa.com", "to": "alice@example.com", "subject": "Olá Alice", "text": "Olá!" },
{ "from": "voce@suaempresa.com", "to": "bob@example.com", "subject": "Olá Bob", "text": "Olá!" }
]
Então envie o lote:
resend emails send-batch --file emails.json
Cada requisição em lote conta como uma chamada de API contra seu limite de taxa, mesmo que envie até 100 e-mails.
Gerenciando domínios e chaves de API
Antes de poder enviar e-mail, você precisa de um domínio verificado. O CLI o guia por todo o ciclo de vida do domínio.
Adicionar um domínio
resend domains create --name seudominio.com --region us-east-1
Regiões suportadas: us-east-1, eu-west-1, sa-east-1, ap-northeast-1. Escolha a região mais próxima de seus usuários para minimizar a latência.
Verificar registros DNS
Após criar o domínio, a Resend lhe dá registros DNS para adicionar (SPF, DKIM, DMARC). Depois de adicioná-los ao seu provedor de DNS, execute:
resend domains verify --id <domain-id>
Consulte o status até que retorne "verificado":
resend domains get --id <domain-id>
Configurar rastreamento e TLS
resend domains configure --id <domain-id> # Configuração interativa
Você pode habilitar o rastreamento de aberturas, rastreamento de cliques e DKIM personalizado através deste comando.
Listar todos os domínios
resend domains list
Gerenciar chaves de API
Para segurança, crie chaves de API com escopo para cada serviço ou ambiente, em vez de compartilhar uma única chave em todos os lugares:
resend api-keys create # Interativo, permite definir escopo por domínio
resend api-keys list
resend api-keys delete --id <key-id>
Chaves com escopo limitam o que cada integração pode fazer. Uma chave com escopo para um domínio não pode acessar seus outros domínios ou configurações de conta.
Recursos avançados: broadcasts, webhooks e templates
Além de enviar e-mails individuais, o Resend CLI lida com mais três casos de uso importantes: broadcasts em massa, gerenciamento de webhooks e templates reutilizáveis.
Broadcasts
Broadcasts permitem que você envie o mesmo e-mail para uma grande lista de contatos. Você primeiro rascunha e depois envia ou agenda:
resend broadcasts create # Criação de rascunho interativa
resend broadcasts send --id <broadcast-id>
resend broadcasts schedule --id <broadcast-id> --date "próxima Segunda às 10am"
Webhooks
Webhooks fornecem eventos de entrega em tempo real: bounces, aberturas, cliques, relatórios de spam. O CLI lida com o ciclo de vida completo:
resend webhooks create # Registrar um novo endpoint
resend webhooks list
Para desenvolvimento local, use o comando webhooks listen para fazer proxy de eventos de webhook para seu localhost:
resend webhooks listen --forward-to http://localhost:3000/webhooks/resend
Isso evita que você precise configurar ngrok ou ferramentas de tunelamento semelhantes. O CLI suporta 17 tipos de eventos, incluindo email.sent, email.delivered, email.bounced, email.opened e email.clicked.
Templates
Templates permitem que você crie HTML de e-mail reutilizável com variáveis dinâmicas:
resend templates create # Construtor de templates interativo
Variáveis usam a sintaxe {{nome_da_variavel}} com valores de fallback. Uma vez criados, faça referência aos templates por ID ao enviar e-mails.
Contatos e públicos
A Resend possui gerenciamento de contatos integrado para e-mails de marketing:
resend contacts create --audience-id <id> --email usuario@example.com --first-name "Alice"
resend contacts list --audience-id <id>
resend contacts update --id <contact-id> --unsubscribed false
Executar diagnósticos
O comando doctor verifica seu ambiente e sinaliza problemas:
resend doctor
Ele verifica a versão do seu CLI, a validade da chave de API, domínios verificados e até detecta agentes de codificação de IA (Cursor, Claude Desktop, VS Code, OpenClaw).
Usando o Resend CLI em pipelines de CI/CD
O CLI é construído para funcionar bem em ambientes automatizados. Alguns padrões a serem conhecidos:
Saída legível por máquina
Sempre que você redireciona a saída (pipe) ou passa --json, o CLI muda para JSON estruturado. Sem spinners, sem prompts interativos:
resend emails send --from a@co.com --to b@co.com --subject "Deploy" --text "Feito" --json
A flag --quiet também suprime toda a saída, exceto JSON:
resend emails list --quiet | jq '.[0].id'
Confirmar automaticamente operações destrutivas
Use --yes para pular os prompts de confirmação em scripts:
resend api-keys delete --id <key-id> --yes
Exemplo de 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 para produção: ${{ github.sha }}" \
--text "Commit ${{ github.sha }} implantado em produção."
Limites de taxa
O limite de taxa da API Resend é de 2 requisições por segundo, compartilhado entre todas as chaves de API da sua equipe. Ao enviar lotes, use send-batch (até 100 e-mails por chamada) em vez de fazer um loop para envios individuais.
Testando sua API de e-mail com Apidog
O Resend CLI é ótimo para uso interativo e scripts simples. No entanto, quando você está construindo um backend que chama a API REST da Resend diretamente, você precisa de uma maneira de explorar e testar esses endpoints antes de escrever o código da aplicação.
O Apidog cobre isso. É um cliente de API gratuito que permite enviar requisições HTTP, inspecionar respostas, organizar seus casos de teste e configurar ambientes para diferentes chaves de API e configurações.
Veja como o Apidog se encaixa em um fluxo de trabalho típico de integração com a Resend:
Importar a especificação da API Resend. A Resend fornece documentação de referência da API em resend.com/docs. Você pode importar a especificação da API para o Apidog para obter uma visão organizada de cada endpoint, incluindo os esquemas de requisição/resposta.
Configurar ambientes. No Apidog, crie ambientes para desenvolvimento e produção. Armazene sua RESEND_API_KEY como uma variável de ambiente e referencie-a em suas requisições com {{RESEND_API_KEY}}. Alterne entre ambientes com um clique.
Testar sua lógica de envio. Antes de escrever código para enviar e-mails de sua aplicação, execute o endpoint POST /emails no Apidog com seu payload exato. Verifique a resposta, certifique-se de que o ID do e-mail retorne corretamente e confirme o comportamento para casos de borda (campos ausentes, endereços inválidos, etc.).
Automatizar testes. O test runner do Apidog permite encadear chamadas de API e fazer asserções sobre os valores de resposta. Você pode configurar um teste que envia um e-mail de teste, o recupera pelo ID e, em seguida, verifica seu status, tudo sem escrever código de teste.
Isso captura bugs de integração antes que apareçam na produção. Combinado com o Resend CLI para desenvolvimento local, você tem tanto uma ferramenta de terminal rápida quanto um ambiente completo de teste de API.
Preços da Resend
O CLI em si é gratuito e de código aberto. Os preços se aplicam à plataforma Resend:
| Plano | Preço | E-mails mensais | Limite diário | Retenção de logs |
|---|---|---|---|---|
| Grátis | $0/mês | 3.000 | 100/dia | 1 dia |
| Pro | $20/mês | 50.000 | Sem limite | 3 dias |
| Scale | $90/mês | 100.000 | Sem limite | 7 dias |
| Enterprise | Personalizado | Personalizado | Personalizado | Personalizado |
Algumas coisas que vale a pena saber sobre o plano gratuito:
- O limite de 100/dia o torna adequado para testes e pequenos projetos, não para tráfego de produção
- Análises (rastreamento de aberturas/cliques) requerem um plano pago
- A retenção de logs é de apenas 1 dia, então você não pode recuperar o status de e-mails antigos após 24 horas
- O limite de taxa é de 2 requisições/segundo para todos os planos, compartilhado entre sua equipe
- O excesso de uso em planos pagos é limitado a 5 vezes sua cota mensal para evitar contas inesperadas
IPs dedicados são um adicional de $30/mês no plano Scale, disponível quando você envia mais de 500 e-mails/dia.
FAQ
Preciso de Node.js para instalar o Resend CLI?
Não para os métodos de instalação via cURL ou Homebrew, que baixam binários autônomos pré-compilados. O caminho de instalação via npm requer Node.js 20+.
Por que não consigo enviar de qualquer endereço de e-mail?
A Resend exige um domínio verificado. Você precisa ser o proprietário do domínio, adicionar os registros DNS que a Resend fornece (SPF, DKIM, DMARC) e passar pela etapa de verificação. Provedores de e-mail gratuitos como o Gmail não são suportados como endereços de remetente.
Posso enviar para qualquer endereço de e-mail no plano gratuito?
Sim. O plano gratuito não restringe os destinatários. Ele limita você a 3.000 e-mails/mês com um limite de 100/dia.
Como funciona o agendamento em linguagem natural?
O CLI analisa frases como "amanhã às 9h", "em 2 horas", "próxima sexta-feira às 15h" ou timestamps ISO 8601 padrão. Os horários são interpretados no fuso horário local do seu sistema, a menos que você especifique o contrário.
O que acontece quando eu redireciono a saída (pipe output)?
O CLI detecta quando está sendo redirecionado e automaticamente muda para a saída apenas em JSON, sem spinners ou prompts. Você não precisa passar --json explicitamente.
Posso usar o CLI com várias contas Resend?
Sim. Use resend login várias vezes para armazenar diferentes perfis, depois resend auth switch para alternar entre eles, ou passe --profile <nome> em qualquer comando para usar um perfil específico.
O Resend CLI é de código aberto?
Sim, ele é licenciado sob MIT e hospedado em github.com/resend/resend-cli.
Qual a diferença entre --quiet e --json?
Ambos produzem saída JSON. --json força a saída JSON. --quiet suprime spinners e indicadores de progresso, o que também implica no modo JSON. Na prática, eles se comportam da mesma forma para o formato de saída; --quiet remove adicionalmente toda a saída que não seja de dados.
