E-mail API
Envio de e-mails transacionais (redefinição de senha, avisos, confirmações) pela Sendeasy, a partir da sua aplicação, autenticado pelo token do próprio e-mail — cada e-mail configurado no projeto tem o seu.
O envio sai pelo e-mail dono do token e consome 1 crédito de e-mail do projeto. Você não informa o remetente: ele é o e-mail do token. Tem mais de um e-mail? Use o token daquele pelo qual quer enviar.
Pré-requisitos
- Token do e-mail — em Canais → E-mail (ou no card do e-mail em Canais) → Configurações → seção API de envio. Cada e-mail tem o próprio token; ali também dá para gerar um novo (o anterior deixa de valer na hora).
- O e-mail com status Verificado (mesmo lugar). Sem isso a rota responde
503 ERR_EMAIL_SENDER_NOT_CONFIGUREDe nada sai, mesmo com crédito. - Créditos de e-mail disponíveis no plano do projeto.
Use GET /api/v1/email/health para conferir os itens 1 e 2 sem gastar crédito.
Autenticação
Header obrigatório, com o token do e-mail remetente:
Authorization: Bearer <token_do_email>
O token identifica o e-mail remetente e, por ele, o projeto — não existe whatsappId/emailId na URL.
Compatibilidade: o API Token do projeto (o mesmo da WABA API) também é aceito neste header. Nesse caso o remetente é o primeiro e-mail verificado do projeto — útil para integrações feitas antes do token por e-mail, mas para escolher o remetente use o token do e-mail.
Endpoints
| Método | Endpoint | Finalidade | Crédito |
|---|---|---|---|
POST | /api/v1/email/send | Enviar e-mail transacional | 1 por envio |
GET | /api/v1/email/health | Diagnóstico: o e-mail do token está verificado? | não consome |
Limite: 20 requisições por minuto por origem (429 ERR_PUBLIC_EMAIL_RATE_LIMIT).
Envio de e-mail
POST /api/v1/email/send
Payload
| Campo | Tipo | Obrigatório | Observações |
|---|---|---|---|
to | string ou string[] | Sim | até 10 destinatários por envio |
subject | string | Sim | até 200 caracteres |
html | string | Um dos dois | corpo HTML, até 200.000 caracteres |
text | string | Um dos dois | corpo em texto puro, até 20.000 caracteres |
fromName | string | Não | nome de exibição do remetente (até 80 caracteres). O endereço é sempre o e-mail dono do token |
O remetente (fromEmail) não é aceito no payload: a rota usa sempre o e-mail dono do token. Isso impede que um token envie em nome de um e-mail que não é o seu.
Exemplo
curl --location 'https://server.sendeasy.pro/api/v1/email/send' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN_DO_EMAIL' \
--data '{
"to": "cliente@exemplo.com",
"subject": "Redefinição de senha",
"fromName": "Minha Plataforma",
"html": "<p>Olá! Clique no link abaixo para criar uma nova senha.</p>"
}'
Resposta de sucesso:
{
"success": true,
"id": "9fbbb3a9-4c1e-4b1a-9d1e-0c2b7e3f5a61"
}
O id é o identificador do envio no provedor. A resposta confirma que o e-mail foi aceito para entrega — a entrega final depende do servidor do destinatário.
Diagnóstico da integração
GET /api/v1/email/health
Não consome crédito. Diz se o e-mail do token já está verificado — a causa mais comum de envio falhar mesmo com crédito disponível.
curl --location 'https://server.sendeasy.pro/api/v1/email/health' \
--header 'Authorization: Bearer TOKEN_DO_EMAIL'
{
"ok": true,
"senderConfigured": true,
"sender": "no-reply@suaempresa.com.br",
"domain": "suaempresa.com.br",
"channelId": 12
}
Com senderConfigured: false, conclua a verificação do e-mail em Canais → E-mail antes de enviar. (Com API Token do projeto, a resposta vem sem channelId e diz se o projeto tem algum e-mail verificado.)
Créditos e estorno
- Cada envio aceito desconta 1 crédito de e-mail do projeto.
- Sem crédito, a rota responde
402 ERR_NO_EMAIL_CREDITSantes de qualquer débito. - Se o envio falhar depois do débito (remetente não configurado, provedor indisponível), o crédito é estornado automaticamente e a rota responde
502/503.
Códigos de erro
| HTTP | error | Quando acontece |
|---|---|---|
| 400 | ERR_EMAIL_INVALID_BODY | payload inválido (sem to/subject, sem html nem text, nenhum destinatário válido) |
| 400 | ERR_EMAIL_TOO_MANY_RECIPIENTS | mais de 10 destinatários em um envio |
| 401 | ERR_API_TOKEN_NOT_PROVIDED / ERR_API_TOKEN_INVALID | header ausente ou token inválido/inativo |
| 402 | ERR_NO_EMAIL_CREDITS | projeto sem créditos de e-mail |
| 429 | ERR_PUBLIC_EMAIL_RATE_LIMIT | mais de 20 requisições por minuto |
| 502 | ERR_EMAIL_SEND_FAILED | falha no provedor ao enviar (crédito estornado) |
| 503 | ERR_EMAIL_SENDER_NOT_CONFIGURED | e-mail do token ainda não verificado (com token do e-mail, antes de qualquer débito) |
E-mail API × Integração Custom
A Sendeasy tem duas formas de enviar e-mail por API — escolha pelo tipo de token que você tem:
E-mail API (/api/v1/email/send) | Custom (/api/integration/generic) | |
|---|---|---|
| Token | token do e-mail (Canais → E-mail → API de envio) | Token de integração amarrado a um canal de e-mail |
| Remetente | o e-mail dono do token | o canal do token |
| Uso típico | e-mails transacionais de uma aplicação sua | integrações por canal, com bcc, inReplyTo etc. |
Detalhes da integração Custom em /server/integracoes.
Segurança: trate o token como uma senha. Nunca o embuta em JavaScript do navegador, repositórios públicos ou logs — use variáveis de ambiente ou um secret manager no seu servidor.