QUICK START
Primeiro envio
Use a URL entregue na implantação do Ware Send e uma credencial Bearer válida.
Os exemplos usam https://mail.seudominio.com.br. Substitua pelo FQDN configurado na sua instalação.
curl -X POST "https://mail.seudominio.com.br/api/v1/send" \
-H "Authorization: Bearer $WARESEND_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"from_name": "Minha Empresa",
"from_email": "notificacoes@seudominio.com.br",
"to": ["cliente@example.com"],
"subject": "Pedido confirmado",
"html": "<h1>Pedido confirmado</h1>",
"text": "Pedido confirmado"
}'{
"ok": true,
"queued": true,
"status": "accepted",
"queue_id": "wsq_...",
"message_id": "<...@mail.seudominio.com.br>",
"accepted_at": "2026-08-24T03:00:00Z",
"cost_class": "tiny",
"version": "1.3.3"
}O Ware Send validou e persistiu o trabalho na fila durável e assumiu responsabilidade pelo processamento. Isso não significa que o servidor destinatário já confirmou a entrega.
AUTHENTICATION
Bearer token
Endpoints protegidos exigem a credencial no cabeçalho HTTP Authorization.
Authorization: Bearer <TOKEN>Não exponha a credencial em JavaScript público, aplicativo distribuído ou código-fonte acessível ao usuário final.
A credencial Bearer é entregue ao responsável técnico ou desenvolvedor indicado durante a implantação da integração, por canal seguro e com visualização única.
Solicite uma nova credencial à DB Ware ou ao responsável autorizado pela instalação Ware Send. O token anterior não é recuperável; após a troca, a credencial antiga deve ser revogada.
ENDPOINTS
Referência rápida
/api/v1/sendRecebe e persiste uma mensagem para processamento assíncrono.
Bearer/api/v1/infoCapacidades e limites anunciados pelo Engine instalado.
Bearer/api/v1/messages/status?message_id=...Consulta o estado conhecido de uma mensagem aceita.
Bearer/api/v1/engine/statusSnapshot operacional do motor, fila, recursos e campanhas.
Bearer/api/v1/engine/activityAtividade em execução e eventos recentes do Engine.
Bearer/api/v1/engine/analyticsSéries temporais e agregados operacionais de throughput, fila, recursos, scheduler, domínios e campanhas.
Bearer/healthEstado básico do serviço.
Público/readyProntidão operacional de licença, fila, Postfix e DKIM.
PúblicoSEND MESSAGE
Enviar uma mensagem
Envie JSON UTF-8 para /api/v1/send. A API valida, persiste e responde de forma assíncrona.
/api/v1/sendBearerPAYLOAD
Campos do envio
Os campos abaixo formam o contrato público atual da API v1.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from_name | string | Não | Nome amigável do remetente. |
from_email | string | Sim | Endereço do remetente autorizado para o domínio configurado. |
to | string | array | Não | Destinatário principal. Aceita um e-mail como string ou uma lista de e-mails como array. |
cc | string | array | Não | Destinatário em cópia. Aceita string ou array. |
bcc | string | array | Não | Destinatário em cópia oculta. Aceita string ou array e nunca é exposto em cabeçalho visível. |
to_visible | boolean | Não | Controla a visibilidade dos destinatários. Opcional; padrão false. false isola cada destinatário; true permite To/Cc compartilhados. Bcc nunca aparece. |
reply_to | string | Não | Endereço Reply-To opcional. |
subject | string | Sim | Assunto da mensagem. |
html | string | Não | Corpo HTML. |
text | string | Não | Corpo texto puro. |
tenant | string | Não | Identificador lógico da aplicação, cliente ou contexto de integração. |
campaign_id | string | Não | Identificador lógico para agrupar atividade operacional de uma campanha. |
campaign_report_email | string | Não | E-mail opcional que receberá o relatório de conclusão da campanha. Exige campaign_id; o endereço fica vinculado à campanha enquanto o estado existir. |
idempotency_key | string | Não | Chave estável para evitar reenvio acidental da mesma requisição. |
headers | object | Não | Cabeçalhos adicionais não reservados. Cabeçalhos estruturais do e-mail são controlados pelo Engine. |
attachments | array | Não | Anexos regulares ou inline/CID. |
* É necessário pelo menos um destinatário entre to, cc e bcc e pelo menos um corpo entre html e text. Na API HTTP, to/cc/bcc aceitam string ou array e não há teto lógico de quantidade de destinatários; o tamanho máximo da requisição e os recursos do host continuam limites práticos. SMTP Submission possui limite independente, anunciado em GET /api/v1/info.
RECIPIENT PRIVACY
Privacidade por padrão no envio em lote
Na API, listas de destinatários são entrada de roteamento para o Motor. Enviar vários endereços no mesmo payload não autoriza o Ware Send a expor essa lista para quem recebe.
to_visible=false{
"to": [
"empresa-a@example.com",
"empresa-b@example.com",
"empresa-c@example.com"
],
"subject": "Comunicado",
"html": "<p>Olá</p>"
}Se to_visible for omitido ou false, o Motor faz fan-out interno e materializa uma entrega individual para cada destinatário. A mensagem recebida mostra apenas o próprio endereço em To:; os demais to, cc e bcc não são revelados.
to_visible=true{
"to": ["a@example.com", "b@example.com"],
"cc": ["c@example.com"],
"to_visible": true,
"subject": "Reunião compartilhada",
"text": "Mensagem"
}Somente to_visible:true autoriza que as listas To e Cc do request apareçam conjuntamente no cabeçalho visível. Use esse modo apenas quando todos os participantes puderem conhecer os demais endereços.
Bcc permanece apenas como destinatário de envelope. O Engine não emite Bcc como cabeçalho visível, inclusive quando to_visible=true.
A API HTTP não impõe teto lógico de destinatários. O Engine divide e processa internamente o conjunto aceito. O tamanho do request e os recursos do host são limites práticos; o SMTP Submission possui limite próprio e independente.
Um request com muitos endereços continua sendo um job lógico, mas contém vários destinatários. Para volume real de destinatários use accepted_recipients_total e postfix_queued_recipients_total; accepted_total e postfix_queued_total contam jobs.
ATTACHMENTS
Anexos e imagens inline
A API v1 mantém compatibilidade com anexos enviados em Base64. Depois da aceitação, o Engine persiste o conteúdo em Blob e processa o envio de forma assíncrona.
{
"filename": "fatura.pdf",
"content_type": "application/pdf",
"content_base64": "JVBERi0xLjQK..."
}{
"html": "<img src=\"cid:logo_empresa\" alt=\"Logo\">",
"attachments": [{
"filename": "logo.png",
"content_type": "image/png",
"content_base64": "iVBORw0KGgoAAA...",
"cid": "logo_empresa",
"inline": true
}]
}filename e content_base64 são obrigatórios em cada anexo. Anexo inline exige cid válido e corpo HTML. CIDs duplicados na mesma mensagem são rejeitados.
RELIABILITY
Idempotência e campanhas
idempotency_keyUse uma chave previsível por evento lógico. Se a mesma requisição já tiver sido aceita, o Ware Send pode devolver a referência anterior com duplicate: true sem criar um novo trabalho.
campaign_idPermite agrupar atividade operacional de campanhas grandes e acompanhar aceitos, processados, retries e falhas no snapshot do Engine.
campaign_report_emailAssocie campaign_report_email a campaign_id para receber automaticamente um resumo da conclusão da campanha e um relatório HTML detalhado. A semântica termina no handoff ao Postfix, não no inbox.
Se outra requisição com a mesma chave ainda estiver sendo consolidada, a API pode responder 409 Conflict. Aguarde e consulte ou reenvie com a mesma chave.
CAMPAIGN COMPLETION
Relatório de conclusão da campanha
Quando campaign_report_email é informado junto de campaign_id, o Ware Send acompanha a campanha até o estado terminal do próprio Engine e envia um resumo HTML ao endereço configurado, com um relatório HTML autocontido e detalhado em anexo.
{
"tenant": "erp-production",
"campaign_id": "invoice-batch-2026-08-26",
"campaign_report_email": "mail-ops@example.com",
"from_email": "billing@example.com",
"to": ["customer@example.net"],
"subject": "Invoice",
"text": "Your invoice is attached."
}{
"ok": true,
"status": "accepted",
"message_id": "wsm_...",
"campaign_report_requested": true,
"version": "1.3.3"
}O campo é opcional. Se informado, campaign_id é obrigatório. O mesmo campaign_id não pode trocar silenciosamente o destinatário do relatório enquanto seu estado existir; use um ID exclusivo para cada campanha lógica.
Após todos os jobs aceitos da campanha estarem em POSTFIX_QUEUED ou falha terminal do Engine e não ocorrerem novos aceites durante o período de quietude configurado (padrão: 60 segundos). Novos jobs posteriores podem gerar uma nova revisão.
O relatório confirma conclusão no Ware Send e handoff ao Postfix, incluindo Queue-ID quando disponível. Não é comprovante de inbox. Entrega remota, defer, bounce e classificação pelo provedor destinatário dependem de evidência do MTA/DSN.
O e-mail contém resumo visual; o anexo HTML detalha campanha/tenant, jobs e destinatários aceitos, bytes, handoff ao Postfix, falhas, retries, Queue-IDs, distribuição por domínio e revisão. Tokens, senhas, licença e conteúdo das mensagens não entram no relatório.
OBSERVABILITY
Status da mensagem e do motor
Os endpoints abaixo permitem observar a execução sem acessar diretamente a VPS.
/api/v1/messages/status?message_id=...BearerRetorna o último estado conhecido para a mensagem indicada.
{
"ok": true,
"message_id": "<...@mail.seudominio.com.br>",
"queue_id": "wsq_...",
"state": "POSTFIX_QUEUED",
"stage": "POSTFIX_OWNS_MESSAGE",
"postfix_queue_id": "4ABC123DEF",
"cost_class": "tiny",
"recipients": 1,
"attempts": 0,
"version": "1.3.3"
}/api/v1/engine/statusBearerSnapshot amplo do Engine: backlog, workers, taxas de entrada e saída, recursos, fila Postfix, estado adaptativo, atividade recente e campanhas.
/api/v1/engine/activityBearerVisão reduzida para acompanhamento frequente: estado adaptativo, pendentes, trabalhos ativos, eventos recentes e throughput.
/api/v1/engine/analyticsBearerSéries temporais e agregados operacionais de throughput, fila, recursos, scheduler, domínios e campanhas.
A API v1 atual acompanha com precisão a responsabilidade do Ware Send até a aceitação pelo Postfix. Confirmação final por destinatário, DSN/bounce e estados de entrega remota serão documentados quando fizerem parte do contrato público.
HTTP
Respostas e erros
| HTTP | Significado | Tratamento recomendado |
|---|---|---|
| 202 | Mensagem aceita e persistida. | Guarde message_id e queue_id quando precisar acompanhar o processamento. |
| 200 | Consulta bem-sucedida ou envio idempotente já aceito. | Em duplicidade, observe duplicate: true. |
| 400 | JSON ou campos inválidos. | Corrija o payload. Campos desconhecidos também são rejeitados. |
| 401 | Credencial ausente, inválida ou revogada. | Verifique o Bearer token configurado na aplicação. |
| 403 | Instalação sem licença operacional. | Acione o responsável pela instalação Ware Send. |
| 409 | Chave de idempotência já está em processamento. | Aguarde e tente novamente usando a mesma chave. |
| 503 | Fila indisponível ou backpressure temporário. | Respeite Retry-After quando presente e faça retry com backoff. |
{
"ok": false,
"error": "unauthorized"
}LEGACY SYSTEMS
SMTP Submission
Para sistemas legados que não consomem API HTTP, o Ware Send oferece SMTP Submission autenticado. O SMTP entra no mesmo motor, fila, scheduler, workers e Postfix usados pela API; não existe um pipeline de entrega separado.
SMTP Submission é apenas entrada autenticada para aplicações. Não é MX inbound, mailbox, POP3, IMAP ou webmail; a porta 25 permanece no papel MTA/Postfix.
mail.seudominio.com.br:587 / :465TLS + AUTHUse o FQDN da instalação com porta 587 + STARTTLS ou porta 465 + TLS implícito. A autenticação é obrigatória e usa uma senha SMTP global da instalação, separada da API. O endereço canônico derivado do domínio (por exemplo, dbware@dbware.com.br) é apenas a identidade padrão: a mesma senha pode autenticar qualquer endereço completo do mesmo domínio, como contato@dbware.com.br, financeiro@dbware.com.br ou nfe@dbware.com.br. O alias curto canônico (dbware) continua disponível apenas para AUTH. Endereços de outro domínio são recusados e o MAIL FROM permanece sujeito ao domínio autorizado. O Bearer token da API não autentica SMTP.
| Servidor | mail.seudominio.com.br |
| Porta | 587 / 465 |
| Segurança | STARTTLS / implicit TLS |
| Autenticação | AUTH PLAIN / AUTH LOGIN |
| Usuário | dbware@dbware.com.br |
| Senha | Senha SMTP própria entregue durante a implantação ou rotação; não use o Bearer token ws_live_ da API. |
Na porta 587, conecte em SMTP e negocie STARTTLS antes de AUTH. Na porta 465, o TLS começa imediatamente na conexão. O Ware Send não aceita autenticação SMTP sem criptografia.
# Porta 587 / STARTTLS
S: 220 mail.seudominio.com.br ESMTP Ware Send 1.0.0
C: EHLO legado.local
S: 250-STARTTLS
C: STARTTLS
... TLS handshake ...
C: EHLO legado.local
S: 250-AUTH PLAIN LOGIN
C: AUTH ...
S: 235 2.7.0 Authentication successful
C: MAIL FROM:<notificacoes@seudominio.com.br>
S: 250 2.1.0 Sender OK
C: RCPT TO:<cliente@example.com>
S: 250 2.1.5 Recipient OK
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: ... RFC 5322 / MIME ...
C: .
S: 250 2.0.0 Message accepted for delivery; queue_id=wsq_...Depois do fim de DATA, o Ware Send responde 250 somente após persistir o trabalho na fila durável. Significa responsabilidade assumida, equivalente ao HTTP 202 Accepted; não significa entrega final ao destinatário.
O SMTP usa os mesmos limites de tamanho e destinatários configurados no Engine. Consulte GET /api/v1/info. Múltiplos RCPT TO são suportados e o cliente pode reutilizar a mesma sessão para várias mensagens.
O conteúdo RFC 5322/MIME é preservado. Destinatários ocultos devem estar no envelope RCPT TO; se um cliente legado também enviar Bcc ou Resent-Bcc no cabeçalho, o Ware Send remove esse cabeçalho antes da entrega para evitar exposição.
Clientes SMTP podem enviar X-WareSend-Tenant e X-WareSend-Campaign-ID nos cabeçalhos para associar a mensagem ao contexto operacional e à campanha.
A idempotência explícita da API por idempotency_key não existe no SMTP 1.0.0. Se a conexão cair depois do DATA e antes de o cliente receber o 250, a aceitação pode ficar ambígua; não assuma deduplicação automática por Message-ID.
Depois da admissão, API e SMTP usam a mesma fila e o mesmo caminho de entrega. Não há teto de egress específico para SMTP. Resultados numéricos de throughput dependem de benchmark da instalação e do comportamento do cliente SMTP.
/api/v1/infoBearerGET /api/v1/info anuncia se SMTP Submission está habilitado, host, usuário padrão, auth_domain, username_policy, se existe senha configurada, 587/STARTTLS, 465/TLS implícito e mecanismos AUTH.
{
"supports_smtp_submission": true,
"smtp_submission": {
"enabled": true,
"host": "mail.seudominio.com.br",
"username": "seudominio@seudominio.com.br",
"auth_domain": "seudominio.com.br",
"username_policy": "any-mailbox-in-auth-domain",
"auth_configured": true,
"auth_mechanisms": ["PLAIN", "LOGIN"],
"starttls": {"enabled": true, "port": 587, "required": true},
"implicit_tls": {"enabled": true, "port": 465}
}
}WARE SEND
Integração simples. Operação controlada pelo Engine.
A aplicação envia a mensagem; o Ware Send assume persistência, fila, controle adaptativo e entrega ao MTA conforme a capacidade da infraestrutura.