Referência da API
API v1A CoffeeMail expõe uma API REST pública para integração via API Key. Esta referência cobre apenas as rotas de Produto (/v1/product/*) consumidas pelo SDK Node e por clientes externos. Rotas internas (Plataforma e Infraestrutura) não fazem parte deste contrato público.
Escopo desta referência
URL base
Autenticação
Todas as requisições exigem um Bearer Token no header Authorization. Você pode criar e revogar API Keys em Dashboard → Chaves de API.
Idioma
A API detecta o idioma pelo header Accept-Language. Valores suportados: pt-BR (padrão), en, es. Mensagens de validação e códigos de erro são localizados.
Formato de erro
Todas as respostas de erro seguem o mesmo envelope JSON:
Rate limit
Headers X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset são retornados em todas as requisições. Limites aplicados por chave de API e por IP. Veja a tabela completa em Códigos de erro.
Endpoints da API
Emails
/emails202 AcceptedEnviar emails
Enfileira um email transacional. Aceita HTML puro, texto puro, ou um templateId + variáveis. Suporta anexos (string base64 ou Uint8Array), headers customizados, agendamento (scheduledAt) e idempotência (idempotencyKey).
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| from* | string | { email, name? } | Remetente (deve ser domínio verificado). |
| to* | string | string[] | { email, name? }[] | Um destinatário ou lista. |
| subject* | string | Assunto. |
| html | string | Conteúdo HTML. |
| text | string | Fallback em texto puro. |
| templateId | string | Renderiza um template existente. |
| variables | Record<string, unknown> | Variáveis para o template. |
| cc / bcc / replyTo | EmailAddressInput | Cópia, cópia oculta e reply-to. |
| attachments | EmailAttachment[] | Anexos. content aceita string base64 ou Uint8Array. |
| scheduledAt | ISO 8601 | Date | Envio programado. |
| idempotencyKey | string | Evita duplicação em retries. |
| tags | EmailTag[] | Tags para métricas. |
| isSandbox | boolean | Não envia de fato (simulação). |
Regras e limites de anexos
Estrutura do objeto EmailAttachment
| Campo | Tipo | Descrição |
|---|---|---|
| filename* | string (1-255) | Nome do arquivo com extensão (ex: fatura.pdf). Limite de 255 caracteres. |
| content* | string (Base64) | Conteúdo binário do arquivo codificado em Base64. |
| contentType* | string (MIME) | MIME type (ex: application/pdf, image/png). Padrão no SDK: application/octet-stream. |
| disposition* | 'attachment' | 'inline' | Modo de entrega: 'attachment' (download tradicional) ou 'inline' (embutido no corpo HTML). |
| cid | string (opcional) | Content-ID único usado para referenciar imagens inline no corpo HTML (ex: cid:logo referenciado em img). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | Identificador único do email. |
| status | 'queued' | 'scheduled' | Status inicial após o envio. |
| queuedAt | string (ISO 8601) | Timestamp de entrada na fila. |
Exemplo de resposta
/emails200 OKListar e-mails
Lista os e-mails da organização com paginação por cursor. Aceita filtros por status, destinatário, remetente, assunto, tag, API key e período.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| status | 'queued' | 'processing' | 'sent' | 'delivered' | 'bounced' | 'complained' | 'failed' | 'skipped' | 'scheduled' | 'cancelled' | Filtra e-mails por status de envio. |
| recipient | string | Busca parcial por destinatário em to/cc/bcc. |
| fromEmail | string | Filtra e-mails por endereço do remetente. |
| subjectContains | string | Busca parcial no assunto do e-mail. |
| apiKeyId | string (uuid) | Filtra e-mails enviados por uma API key específica. |
| tag | string | Filtra e-mails que possuem esta tag. |
| from | string (ISO 8601) | Data/hora inicial do período de busca. |
| to | string (ISO 8601) | Data/hora final do período de busca. |
| after | string (ISO 8601) | Cursor de paginação para buscar registros seguintes. |
| limit | number | Quantidade máxima de e-mails retornados (padrão 50, máximo 100). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| emails | EmailResponse[] | Lista de e-mails retornados. |
| nextCursor | string | null | Cursor para buscar a próxima página, ou null se não houver mais registros. |
Exemplo de resposta
/emails/batch202 AcceptedEnviar e-mails em lote
Envia até 100 e-mails em uma única chamada. Cada item segue o mesmo formato do envio individual (from, to, subject/html/text ou templateId, etc). Falhas em itens individuais não derrubam o lote inteiro.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| (array)* | SendEmailRequest[] | Array com de 1 a 100 payloads de envio, no mesmo formato de POST /emails. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| [].ok | boolean | Indica se o item foi aceito com sucesso. |
| [].data.id | string | Identificador único do e-mail criado (quando ok é true). |
| [].data.status | 'queued' | 'scheduled' | Status inicial do e-mail após o envio (quando ok é true). |
| [].data.queuedAt | string (ISO 8601) | Timestamp de entrada na fila (quando ok é true). |
| [].error | string | Mensagem de erro do item que falhou (quando ok é false). |
Exemplo de resposta
/emails/:id200 OKBuscar e-mail por ID
Retorna os detalhes completos de um e-mail: status, tentativas, timestamps do ciclo de vida, tags, corpo (html/text) e a API key usada no envio.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | ID único do e-mail. |
| from | string | Endereço do remetente. |
| to | string[] | Lista de destinatários. |
| cc / bcc | string[] | null | Lista de destinatários em cópia e em cópia oculta. |
| subject | string | null | Assunto do e-mail. |
| status | 'queued' | 'processing' | 'sent' | 'delivered' | 'bounced' | 'failed' | 'skipped' | 'scheduled' | 'cancelled' | Status atual do envio. |
| attempts | number | Número de tentativas de envio realizadas. |
| lastError | string | null | Última mensagem de erro registrada no envio. |
| messageId | string | null | ID da mensagem retornado pelo provedor de envio. |
| createdAt / scheduledAt / sentAt | string (ISO 8601) | null | Data/hora de criação, agendamento e envio do e-mail. |
| deliveredAt / bouncedAt / failedAt / complainedAt / suppressedAt | string (ISO 8601) | null | Data/hora de entrega, bounce, falha ou reclamação de spam, se houve. |
| openedAt / firstClickedAt | string (ISO 8601) | null | Data/hora da primeira abertura e do primeiro clique em um link. |
| openCount / clickCount | number | Quantidade de aberturas e cliques registrados. |
| tags | { name, value }[] | null | Tags associadas ao e-mail. |
| html / text | string | null | Corpo do e-mail em HTML e em texto puro. |
| apiKey | { id, name } | null | API key usada para enviar o e-mail. |
Exemplo de resposta
/emails/:id/events200 OKLinha do tempo de eventos
Retorna o histórico de eventos de um e-mail (fila, processamento, envio, entrega, abertura, clique, bounce, reclamação, falha), em ordem cronológica.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | ID único do e-mail. |
| events | { type, timestamp, metadata? }[] | Linha do tempo de eventos do e-mail, cada um com tipo, timestamp e metadata opcional. |
Exemplo de resposta
/emails/:id/cancel204 No ContentCancelar e-mail agendado
Cancela um e-mail que ainda está no status scheduled. Não tem efeito sobre e-mails que já entraram em processamento ou foram enviados. Não retorna corpo na resposta.
Exemplo de requisição
/emails/:id/resend202 AcceptedReenviar e-mail
Reenfileira um e-mail que falhou ou foi cancelado, criando um novo ciclo de envio.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | Identificador único do novo envio. |
| status | 'queued' | 'scheduled' | Status inicial do e-mail após o reenvio. |
| queuedAt | string (ISO 8601) | Timestamp de entrada na fila. |
Exemplo de resposta
Domínios
/domains201 CreatedAdicionar domínio
Registra um domínio na organização e retorna os registros DNS (SPF, DKIM, DMARC e ownership) que precisam ser configurados no provedor.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| name* | string | FQDN a ser cadastrado (ex: empresa.com.br). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | ID do domínio. |
| name | string | Nome do domínio. |
| status | 'verified' | 'pending' | 'failed' | Status de validação. |
| records | DomainDnsRecord[] | SPF/DKIM/DMARC/ownership. |
/domains/:id/verify202 AcceptedVerificar domínio
Executa a verificação sob demanda dos registros DNS. Retorna checks detalhados (spf, dkim, dmarc, ownership).
Exemplo de requisição
/domains/:id/health200 OKSaúde do domínio
Diagnóstico de reputação, presença em blacklists e recomendações de melhoria.
Exemplo de requisição
/domains200 OKListar domínios
Lista todos os domínios cadastrados na organização, com status de verificação e dados de DKIM.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| domains | DomainListItem[] | Lista de domínios cadastrados na organização. |
| domains[].id | string (uuid) | ID do domínio. |
| domains[].name | string | Nome do domínio. |
| domains[].status | 'pending' | 'verified' | 'failed' | Situação atual da verificação do domínio. |
| domains[].dkimSelector | string | Seletor usado no registro DKIM do domínio. |
| domains[].dkimPublicKey | string | null | Chave pública DKIM gerada para o domínio. |
| domains[].verifiedAt | string (ISO 8601) | null | Data e hora em que o domínio foi verificado. |
| domains[].lastCheckAt | string (ISO 8601) | null | Data e hora da última verificação de DNS realizada. |
| domains[].createdAt | string (ISO 8601) | Data e hora em que o domínio foi cadastrado. |
Exemplo de resposta
/domains/:id200 OKObter domínio
Retorna o detalhe de um domínio, incluindo os registros DNS (TXT/CNAME) pendentes de publicação.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | ID do domínio. |
| name | string | Nome do domínio. |
| status | 'pending' | 'verified' | 'failed' | Situação atual da verificação do domínio. |
| dkimSelector | string | Seletor usado no registro DKIM do domínio. |
| dkimPublicKey | string | null | Chave pública DKIM gerada para o domínio. |
| verifiedAt | string (ISO 8601) | null | Data e hora em que o domínio foi verificado. |
| lastCheckAt | string (ISO 8601) | null | Data e hora da última verificação de DNS realizada. |
| createdAt | string (ISO 8601) | Data e hora em que o domínio foi cadastrado. |
| dnsRecordsToPublish | DnsRecord[] | Registros DNS pendentes que o cliente precisa publicar. |
| dnsRecordsToPublish[].type | 'TXT' | 'CNAME' | Tipo do registro DNS a ser publicado (TXT ou CNAME). |
| dnsRecordsToPublish[].host | string | Nome do host/subdomínio onde o registro deve ser criado. |
| dnsRecordsToPublish[].value | string | Valor que deve ser publicado no registro DNS. |
| dnsRecordsToPublish[].ttl | number | TTL em segundos sugerido para o registro. |
Exemplo de resposta
/domains/:id200 OKRemover domínio
Remove (soft-delete) um domínio da organização. Se a conta tiver reautenticação configurada, é necessário enviar method + credential; limite de 5 requisições por minuto.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| method | 'totp' | 'password' | Método de reautenticação, 'totp' ou 'password'. Obrigatório apenas se a conta tiver reauth configurado. |
| credential | string | Código TOTP ou senha usada para confirmar a exclusão. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| ok | boolean | Confirma que o domínio foi removido. |
Exemplo de resposta
/domains/:id/warmup200 OKStatus de warmup
Consulta o progresso do aquecimento (warmup) de IP/domínio. Retorna null quando o domínio ainda não iniciou o warmup.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| domainId | string (uuid) | ID do domínio. |
| currentDay | number | Dia atual do período de aquecimento (warmup). |
| dailyQuota | number | Limite diário de envios permitido para o dia atual. |
| sentToday | number | Quantidade de emails já enviados hoje. |
| remainingToday | number | Quantidade de envios restantes na cota diária. |
| quotaUsedPercent | number (0-100) | Percentual da cota diária já utilizado. |
| lastSendDate | string | null | Data do último envio registrado para o domínio. |
Exemplo de resposta
Modelos
/templates201 CreatedCriar modelo
Cadastra um template. Suporta HTML com Handlebars (format: handlebars) ou TSX com React Email (format: react_email).
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| name* | string | Nome do modelo. |
| subject | string | Assunto padrão. |
| html | string | Conteúdo (Handlebars). |
| text | string | Versão em texto puro. |
| format | 'handlebars' | 'react_email' | Engine do template. |
| variables | { name, defaultValue? }[] | Variáveis esperadas. |
Exemplo de requisição
/templates/preview200 OKRenderizar preview
Renderiza um preview sem precisar enviar útil para o playground e validação de variáveis.
Exemplo de requisição
/templates200 OKListar templates
Retorna todos os templates cadastrados na organização, com o código-fonte completo de cada um.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| data | TemplateDetail[] | Lista de templates de e-mail cadastrados. |
| data[].id | string (uuid) | Identificador único do template. |
| data[].name | string | Nome do template. |
| data[].subject | string | null | Assunto padrão do e-mail. |
| data[].html | string | Código-fonte HTML ou JSX do template. |
| data[].textPayload | string | null | Versão em texto simples do template. |
| data[].variables | { name, description? }[] | Variáveis disponíveis para interpolação no template. |
| data[].isActive | boolean | Indica se o template está ativo para uso. |
| data[].format | 'html' | 'react' | Formato do código-fonte do template. |
| data[].sourceLocale | string | Idioma de origem do conteúdo do template. |
| data[].starterSlug | string | null | Slug do template inicial usado como base, se houver. |
| data[].createdAt | string (ISO 8601) | Data de criação do template. |
| data[].updatedAt | string (ISO 8601) | Data da última atualização do template. |
Exemplo de resposta
/templates/:id200 OKBuscar template
Retorna um template específico pelo id, com o código-fonte completo e as variáveis disponíveis.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador único do template. |
| name | string | Nome do template. |
| subject | string | null | Assunto padrão do e-mail. |
| html | string | Código-fonte HTML ou JSX do template. |
| textPayload | string | null | Versão em texto simples do template. |
| variables | { name, description? }[] | Variáveis disponíveis para interpolação no template. |
| isActive | boolean | Indica se o template está ativo para uso. |
| format | 'html' | 'react' | Formato do código-fonte do template. |
| sourceLocale | string | Idioma de origem do conteúdo do template. |
| starterSlug | string | null | Slug do template inicial usado como base, se houver. |
| createdAt | string (ISO 8601) | Data de criação do template. |
| updatedAt | string (ISO 8601) | Data da última atualização do template. |
Exemplo de resposta
/templates/:id200 OKAtualizar template
Atualiza parcialmente um template existente. Envie somente os campos que quer alterar.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Novo nome do template. |
| subject | string | null | Novo assunto padrão do e-mail. |
| html | string | Novo código-fonte HTML ou JSX. |
| textPayload | string | null | Nova versão em texto simples. |
| variables | { name, description? }[] | Nova lista de variáveis disponíveis para interpolação. |
| format | 'html' | 'react' | Novo formato do código-fonte. |
| isActive | boolean | Ativa ou desativa o template. |
| sourceLocale | string | Novo idioma de origem do conteúdo. |
| starterSlug | string | null | Slug do template inicial usado como base. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador único do template. |
| name | string | Nome do template. |
| isActive | boolean | Indica se o template está ativo para uso. |
| updatedAt | string (ISO 8601) | Data da última atualização do template. |
Exemplo de resposta
/templates/:id204 No ContentExcluir template
Remove um template definitivamente. A ação não pode ser desfeita.
Exemplo de requisição
/templates/format200 OKFormatar template
Formata o código-fonte de um template (HTML ou JSX) via Prettier, sem persistir nada.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| html* | string | Código-fonte HTML ou JSX a ser formatado. |
| format | 'html' | 'react' | Formato do código de origem. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| html | string | Código-fonte formatado. |
Exemplo de resposta
/templates/test-render200 OKRenderizar teste sanitizado
Renderiza um template com variáveis e sanitiza o HTML resultante (remove scripts, iframes, links javascript: e handlers de evento inline). Diferente de /templates/preview, que não sanitiza use este endpoint para testar conteúdo não confiável.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| html* | string | Código-fonte HTML ou JSX do template a renderizar. |
| format | 'html' | 'react' | Formato do template de origem. |
| variables | Record<string, unknown> | Valores das variáveis usadas para popular o template. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| html | string | HTML final renderizado e sanitizado. |
| text | string | Versão em texto simples do e-mail renderizado. |
| sanitizeReport | { scripts, iframes, javascriptHrefs, eventHandlers } | Relatório com a quantidade de elementos removidos pela sanitização (scripts, iframes, links javascript: e handlers de evento). |
Exemplo de resposta
Audiências e contatos
/audiences201 CreatedCriar audiência
Cria uma lista segmentada de contatos.
Exemplo de requisição
/audiences/:id/contacts201 CreatedAdicionar contato
Insere um contato em uma audiência. Aceita firstName, lastName e metadata arbitrária.
Exemplo de requisição
/audiences200 OKListar audiências
Lista as audiências da organização, com paginação.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| limit | number | Quantidade máxima de itens por página (padrão 50, máximo 200). |
| offset | number | Quantidade de itens a pular a partir do início (padrão 0). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| audiences | Audience[] | Lista de audiências encontradas. |
| total | number | Total de audiências da organização. |
Exemplo de resposta
/audiences/:id200 OKObter audiência
Retorna os dados de uma audiência específica.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | Identificador único da audiência. |
| name | string | Nome da audiência. |
| description | string | null | Descrição da audiência. |
| active | boolean | Se a audiência está ativa. |
| contactsCount | number | Quantidade de contatos na audiência. |
| createdAt | string (ISO 8601) | Data de criação da audiência. |
| updatedAt | string (ISO 8601) | Data da última atualização da audiência. |
Exemplo de resposta
/audiences/:id200 OKAtualizar audiência
Atualiza nome, descrição e/ou status de uma audiência. Pelo menos um campo deve ser enviado.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Novo nome da audiência. |
| description | string | null | Nova descrição da audiência. Envie null para limpar. |
| active | boolean | Se a audiência está ativa. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | Identificador único da audiência atualizada. |
Exemplo de resposta
/audiences/:id204 No ContentExcluir audiência
Remove permanentemente uma audiência e seus contatos. Não retorna corpo na resposta.
Exemplo de requisição
/audiences/:id/contacts200 OKListar contatos da audiência
Lista os contatos de uma audiência, com paginação.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| limit | number | Quantidade máxima de itens por página (padrão 100, máximo 500). |
| offset | number | Quantidade de itens a pular a partir do início (padrão 0). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| contacts | Contact[] | Lista de contatos encontrados. |
| total | number | Total de contatos na audiência. |
Exemplo de resposta
/audiences/:id/contacts/bulk200 OKAdicionar contatos em lote
Adiciona até 10.000 contatos de uma vez a uma audiência.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| contacts* | { email, firstName?, lastName?, metadata? }[] | Lista de contatos a adicionar (email obrigatório; firstName, lastName e metadata opcionais). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| inserted | number | Quantidade de contatos inseridos com sucesso. |
| skipped | number | Quantidade de contatos ignorados (ex.: e-mails duplicados na audiência). |
| errors | { email, reason }[] | Lista de erros por e-mail, com o motivo de cada falha. |
Exemplo de resposta
/audiences/:id/contacts/:contactId200 OKAtualizar contato
Atualiza firstName, lastName e/ou metadata de um contato. Pelo menos um campo deve ser enviado.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| firstName | string | null | Novo primeiro nome do contato. Envie null para limpar. |
| lastName | string | null | Novo sobrenome do contato. Envie null para limpar. |
| metadata | Record<string, unknown> | Dados extras do contato em formato livre. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | Identificador único do contato atualizado. |
Exemplo de resposta
/audiences/:id/contacts/:contactId204 No ContentRemover contato
Remove um contato de uma audiência. Não retorna corpo na resposta.
Exemplo de requisição
Campanhas (broadcasts)
/broadcasts201 CreatedCriar campanha
Cria uma campanha para uma audiência. Pode usar um template existente (templateId) ou HTML próprio. Aceita agendamento via scheduledAt.
Exemplo de requisição
/broadcasts/:id/send202 AcceptedDisparar campanha
Coloca a campanha em estado de envio. Os cabeçalhos RFC 8058 (List-Unsubscribe e List-Unsubscribe-Post) são injetados automaticamente.
Exemplo de requisição
/broadcasts200 OKListar campanhas
Lista as campanhas de broadcast da organização. Filtra por status e período, com paginação por cursor.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| status | 'draft' | 'scheduled' | 'sending' | 'sent' | 'failed' | 'cancelled' | Filtra pelo status do broadcast. |
| from | string (ISO 8601) | Data inicial do período de busca. |
| to | string (ISO 8601) | Data final do período de busca. |
| after | string | Cursor de paginação retornado por uma chamada anterior. |
| limit | number (max 200) | Quantidade máxima de broadcasts retornados por página. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| broadcasts | Broadcast[] | Lista de broadcasts da página atual. |
| nextCursor | string | null | Cursor para buscar a próxima página, ou null se não houver mais resultados. |
Exemplo de resposta
/broadcasts/:id200 OKDetalhar campanha
Retorna os dados completos de uma campanha específica, incluindo status e contadores de destinatários.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | Identificador único do broadcast. |
| audienceId | string | Identificador da audiência destinatária. |
| audienceName | string | null | Nome da audiência destinatária. |
| templateId | string | null | Identificador do template usado no envio, se houver. |
| subject | string | Assunto do e-mail. |
| fromEmail | string | Endereço de e-mail do remetente. |
| replyTo | string | null | Endereço de e-mail para respostas. |
| status | 'draft' | 'scheduled' | 'sending' | 'sent' | 'failed' | 'cancelled' | Status atual do broadcast. |
| scheduledAt | string (ISO 8601) | null | Data e hora agendadas para o envio. |
| sentAt | string (ISO 8601) | null | Data e hora em que o envio foi concluído. |
| cancelledAt | string (ISO 8601) | null | Data e hora em que o broadcast foi cancelado. |
| recipientsTotal | number | Total de destinatários do broadcast. |
| recipientsQueued | number | Quantidade de destinatários enfileirados para envio. |
| recipientsFailed | number | Quantidade de destinatários com falha no envio. |
| createdAt | string (ISO 8601) | Data de criação do broadcast. |
| updatedAt | string (ISO 8601) | Data da última atualização do broadcast. |
Exemplo de resposta
/broadcasts/:id/cancel200 OKCancelar campanha
Cancela um broadcast agendado ou em envio. Emails já entregues não são afetados.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | Identificador único do broadcast. |
| status | 'cancelled' | Status do broadcast após o cancelamento. |
| cancelledAt | string (ISO 8601) | null | Data e hora em que o broadcast foi cancelado. |
Exemplo de resposta
Supressões
/suppressions200 OKListar supressões
Lista bloqueios ativos (bounces, complaints, unsubscribes e manuais).
Exemplo de requisição
/suppressions201 CreatedAdicionar supressão
Adiciona manualmente um email à lista de supressão.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| email* | string (email) | Endereço de email a ser suprimido. |
| reason | 'manual' | 'bounce' | 'complaint' | Motivo da supressão. Aceita apenas 'manual', 'bounce' ou 'complaint'. |
| expiresAt | string (ISO 8601) | Data em que a supressão expira e o email volta a receber envios. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador único da supressão. |
| string | Endereço de email suprimido. | |
| reason | 'manual' | 'bounce' | 'isp_block' | 'mailbox_not_found' | 'complaint' | 'unsubscribe' | Motivo que originou a supressão. |
| source | 'manual' | 'auto' | Origem da supressão: manual ou automática. |
| category | string | Categoria de classificação da supressão. |
| status | 'active' | 'expired' | 'inactive' | Situação atual da supressão. |
| expiresAt | string (ISO 8601) | null | Data em que a supressão expira e o email volta a receber envios. |
| createdAt | string (ISO 8601) | Data de criação da supressão. |
Exemplo de resposta
/suppressions/:id200 OKDetalhar supressão
Retorna os detalhes de uma supressão específica pelo id.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador único da supressão. |
| string | Endereço de email suprimido. | |
| reason | 'manual' | 'bounce' | 'isp_block' | 'mailbox_not_found' | 'complaint' | 'unsubscribe' | Motivo que originou a supressão. |
| source | 'manual' | 'auto' | Origem da supressão: manual ou automática. |
| category | string | Categoria de classificação da supressão. |
| status | 'active' | 'expired' | 'inactive' | Situação atual da supressão. |
| expiresAt | string (ISO 8601) | null | Data em que a supressão expira e o email volta a receber envios. |
| createdAt | string (ISO 8601) | Data de criação da supressão. |
Exemplo de resposta
/suppressions/:id204 No ContentRemover supressão
Remove definitivamente uma supressão da lista.
Exemplo de requisição
/suppressions/:id/reactivate204 No ContentReativar supressão
Desfaz uma supressão, permitindo que o email volte a receber envios.
Exemplo de requisição
Webhooks
/webhooks201 CreatedCadastrar webhook
Registra um endpoint HTTPS para receber eventos. Recomendamos fornecer um secret para validação HMAC SHA-256.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| url* | string (HTTPS) | URL de destino. |
| events* | WebhookEventType[] | Eventos a assinar (ex: email.delivered). |
| secret | string | Chave secreta para HMAC. |
Exemplo de requisição
/webhooks/:id/test202 AcceptedTestar webhook
Dispara um evento simulado para validar o endpoint e a configuração.
Exemplo de requisição
/webhooks200 OKListar webhooks
Lista os webhooks cadastrados na organização, com filtro opcional por status.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| status | 'active' | 'paused' | 'disabled' | Filtra webhooks pelo status atual (active, paused ou disabled). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| webhooks | WebhookListItem[] | Lista de webhooks cadastrados na organização. |
| webhooks[].id | string (uuid) | Identificador do webhook. |
| webhooks[].url | string | URL de destino que recebe os eventos. |
| webhooks[].events | string[] | Eventos aos quais o webhook está inscrito. |
| webhooks[].status | 'active' | 'paused' | 'disabled' | Status atual do webhook. |
| webhooks[].description | string | null | Descrição informada pelo usuário para o webhook. |
| webhooks[].hasSecret | boolean | Indica se o webhook possui um segredo de assinatura configurado. |
| webhooks[].createdAt | string (ISO 8601) | Data e hora de criação do webhook. |
Exemplo de resposta
/webhooks/:id200 OKObter webhook
Retorna os detalhes de um webhook específico, incluindo uma prévia truncada do segredo de assinatura.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador do webhook. |
| url | string | URL de destino que recebe os eventos. |
| events | string[] | Eventos aos quais o webhook está inscrito. |
| status | 'active' | 'paused' | 'disabled' | Status atual do webhook. |
| description | string | null | Descrição informada pelo usuário para o webhook. |
| createdAt | string (ISO 8601) | Data e hora de criação do webhook. |
| secret | null | Sempre null nesta rota o segredo completo não é reexibido depois da criação. |
| secretPreview | string | null | Prévia truncada do segredo, para exibição segura. |
Exemplo de resposta
/webhooks/:id200 OKAtualizar webhook
Atualiza url, events e/ou description de um webhook existente. Pelo menos um dos campos deve ser enviado.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| url | string (URL) | Nova URL de destino que receberá os eventos. |
| events | WebhookEventType[] | Novos eventos aos quais o webhook deve se inscrever. |
| description | string | null | Nova descrição do webhook (envie null para remover). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador do webhook. |
| url | string | URL de destino que recebe os eventos. |
| events | string[] | Eventos aos quais o webhook está inscrito. |
| status | 'active' | 'paused' | 'disabled' | Status atual do webhook. |
| description | string | null | Descrição informada pelo usuário para o webhook. |
| createdAt | string (ISO 8601) | Data e hora de criação do webhook. |
| secret | null | Sempre null nesta rota o segredo completo não é reexibido depois da criação. |
| secretPreview | string | null | Prévia truncada do segredo, para exibição segura. |
Exemplo de resposta
/webhooks/:id200 OKAtivar ou pausar webhook
Altera apenas o status do webhook (active ou paused), sem afetar url, events ou description.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| status* | 'active' | 'paused' | Novo status do webhook (active ou paused). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador do webhook. |
| status | 'active' | 'paused' | Novo status aplicado ao webhook. |
Exemplo de resposta
/webhooks/:id204 No ContentRemover webhook
Remove definitivamente o webhook da organização. Não retorna corpo na resposta.
Exemplo de requisição
/webhooks/:id/deliveries200 OKListar entregas do webhook
Lista as tentativas de entrega de eventos para um webhook, com filtros por tipo de evento, status e período.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| eventType | string | Filtra entregas por tipo de evento. |
| status | 'pending' | 'success' | 'failed' | 'exhausted' | Filtra entregas pelo status atual. |
| from | string (ISO 8601) | Data inicial do período de busca. |
| to | string (ISO 8601) | Data final do período de busca. |
| limit | number (max 200) | Quantidade máxima de entregas retornadas (até 200). |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| deliveries | WebhookDelivery[] | Lista de tentativas de entrega do webhook. |
| deliveries[].id | string (uuid) | Identificador da tentativa de entrega. |
| deliveries[].webhookId | string (uuid) | Identificador do webhook associado. |
| deliveries[].emailEventId | string (uuid) | null | Evento de e-mail que originou a entrega. |
| deliveries[].eventType | string | Tipo de evento disparado (ex: email.delivered). |
| deliveries[].responseStatus | number | null | Status HTTP retornado pelo endpoint de destino. |
| deliveries[].responseBody | string | null | Corpo da resposta retornada pelo endpoint de destino. |
| deliveries[].attempts | number | Quantidade de tentativas de envio já realizadas. |
| deliveries[].lastError | string | null | Mensagem do último erro ocorrido no envio. |
| deliveries[].status | 'pending' | 'success' | 'failed' | 'exhausted' | Status atual da entrega. |
| deliveries[].nextRunAt | string (ISO 8601) | Data e hora da próxima tentativa de reenvio. |
| deliveries[].createdAt | string (ISO 8601) | Data e hora em que a entrega foi criada. |
Exemplo de resposta
/webhooks/:id/rotate-secret200 OKRotacionar segredo
Gera um novo segredo de assinatura HMAC para o webhook, invalidando o anterior. O valor completo é retornado apenas nesta resposta.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| webhookId | string (uuid) | Identificador do webhook. |
| secret | string | Novo segredo completo, usado para assinar os payloads enviados exibido uma única vez. |
Exemplo de resposta
Estatísticas
/stats200 OKMétricas gerais
Retorna contadores agregados (sent, delivered, failed, bounced, complained, opened?, clicked?).
Exemplo de requisição
Remetentes avulsos
/senders201 CreatedCadastrar remetente avulso
Registra uma identidade de remetente de e-mail avulso e dispara um email de verificação. A resposta traz um verificationToken, mas o remetente só pode ser usado para envio depois que POST /senders/verify confirmar a verificação.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| email* | string (email) | Endereço de e-mail do remetente a ser verificado. |
| displayName | string (max 200) | Nome de exibição do remetente. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador único do remetente. |
| string | Endereço de e-mail do remetente. | |
| displayName | string | null | Nome de exibição do remetente. |
| verificationToken | string | Token enviado ao email para confirmar a verificação. |
| verifiedAt | string (ISO 8601) | null | Data/hora em que o remetente foi verificado. |
| active | boolean | Se o remetente está ativo para envio. |
| createdAt | string (ISO 8601) | Data/hora de criação do remetente. |
Exemplo de resposta
/senders200 OKListar remetentes avulsos
Lista as identidades de remetente avulso cadastradas na organização.
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| senders | Sender[] | Lista de remetentes da organização. |
Exemplo de resposta
/senders/verify200 OKVerificar remetente avulso
Confirma a verificação de um remetente avulso a partir do token enviado por e-mail. Depois de verificado, o endereço pode ser usado no campo "from" dos envios.
Request body
| Campo | Tipo | Descrição |
|---|---|---|
| token* | string (uuid) | Token de verificação recebido por e-mail. |
Exemplo de requisição
Response
| Campo | Tipo | Descrição |
|---|---|---|
| id | string (uuid) | Identificador único do remetente. |
| string | Endereço de e-mail do remetente. |
Exemplo de resposta
/senders/:id204 No ContentExcluir remetente avulso
Remove uma identidade de remetente avulso da organização. A exclusão é definitiva e o e-mail precisa ser verificado novamente caso seja recadastrado.