AVVIO RAPIDO
Primo invio
Usa l’URL fornito durante il deployment di Ware Send e una credenziale Bearer valida.
Gli esempi usano https://mail.tuodominio.it. Sostituiscilo con il FQDN configurato nella tua installazione.
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"
}Ware Send ha validato e persistito il lavoro nella coda durevole e ha assunto la responsabilità dell’elaborazione. Non significa che il server destinatario abbia già confermato la consegna.
AUTENTICAZIONE
Bearer token
Gli endpoint protetti richiedono la credenziale nell’header HTTP Authorization.
Authorization: Bearer <TOKEN>Non esporre la credenziale in JavaScript pubblico, applicazioni distribuite o codice sorgente accessibile all’utente finale.
La credenziale Bearer viene consegnata in modo sicuro, con visualizzazione unica, al referente tecnico o sviluppatore indicato durante l’implementazione dell’integrazione.
Richiedi una nuova credenziale a DB Ware o al referente autorizzato dell’installazione Ware Send. Il token precedente non è recuperabile; dopo la sostituzione, la vecchia credenziale deve essere revocata.
ENDPOINTS
Riferimento rapido
/api/v1/sendRiceve e persiste un messaggio per elaborazione asincrona.
Bearer/api/v1/infoCapacità e limiti dichiarati dall’Engine installato.
Bearer/api/v1/messages/status?message_id=...Consulta lo stato noto di un messaggio accettato.
Bearer/api/v1/engine/statusSnapshot operativo del motore, coda, risorse e campagne.
Bearer/api/v1/engine/activityAttività in corso ed eventi recenti dell’Engine.
Bearer/api/v1/engine/analyticsSerie temporali e aggregati operativi per throughput, coda, risorse, scheduler, domini e campagne.
Bearer/healthStato base del servizio.
Pubblico/readyProntezza operativa di licenza, coda, Postfix e DKIM.
PubblicoINVIO MESSAGGIO
Inviare un messaggio
Invia JSON UTF-8 a /api/v1/send. L’API valida, persiste e risponde in modo asincrono.
/api/v1/sendBearerPAYLOAD
Campi invio
I campi seguenti costituiscono il contratto pubblico attuale di API v1.
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
from_name | string | No | Nome descrittivo del mittente. |
from_email | string | Sì | Indirizzo mittente autorizzato per il dominio configurato. |
to | string | array | No | Destinatario principale. Accetta un indirizzo e-mail come stringa o più indirizzi come array. |
cc | string | array | No | Destinatario in copia. Accetta stringa o array. |
bcc | string | array | No | Destinatario in copia nascosta. Accetta stringa o array e non viene mai esposto in un header visibile. |
to_visible | boolean | No | Controlla la visibilità dei destinatari. Opzionale; default false. false isola ogni destinatario; true consente header To/Cc condivisi. Bcc non viene mai mostrato. |
reply_to | string | No | Indirizzo Reply-To opzionale. |
subject | string | Sì | Oggetto del messaggio. |
html | string | No | Corpo HTML. |
text | string | No | Corpo testo semplice. |
tenant | string | No | Identificatore logico dell’applicazione, cliente o contesto di integrazione. |
campaign_id | string | No | Identificatore logico per raggruppare l’attività operativa di una campagna. |
campaign_report_email | string | No | Indirizzo e-mail opzionale che riceve il report di completamento campagna. Richiede campaign_id e resta associato alla campagna finché ne esiste lo stato. |
idempotency_key | string | No | Chiave stabile per evitare il reinvio accidentale della stessa richiesta. |
headers | object | No | Header aggiuntivi non riservati. Gli header strutturali dell’e-mail sono controllati dall’Engine. |
attachments | array | No | Allegati regolari o inline/CID. |
* È richiesto almeno un destinatario tra to, cc e bcc e almeno un corpo tra html e text. Nell’API HTTP, to/cc/bcc accettano stringa o array e non esiste un limite logico applicativo al numero di destinatari; dimensione della request e risorse dell’host restano limiti pratici. SMTP Submission ha un limite indipendente annunciato da GET /api/v1/info.
PRIVACY DESTINATARI
Privacy predefinita negli invii multi-destinatario
Le liste di destinatari dell’API sono input di routing per l’Engine. Inserire molti indirizzi nello stesso payload non autorizza Ware Send a esporre tale lista ai destinatari.
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 è omesso o false, l’Engine esegue il fan-out interno e materializza una consegna individuale per ogni destinatario. Il messaggio ricevuto mostra soltanto quel destinatario in To:; gli altri to, cc e bcc restano nascosti.
to_visible=true{
"to": ["a@example.com", "b@example.com"],
"cc": ["c@example.com"],
"to_visible": true,
"subject": "Reunião compartilhada",
"text": "Mensagem"
}Solo to_visible:true consente alle liste To e Cc della request di comparire insieme negli header visibili. Usare questa modalità solo quando tutti i partecipanti possono conoscere gli altri indirizzi.
Bcc rimane solo nell’envelope. L’Engine non emette mai un header Bcc visibile, anche con to_visible=true.
L’API HTTP non impone un limite logico applicativo ai destinatari. L’Engine divide e processa internamente il gruppo accettato. Dimensione della request e risorse dell’host sono limiti pratici; SMTP Submission ha un proprio limite indipendente.
Una request con molti indirizzi resta un job logico ma contiene più destinatari. Per il volume dei destinatari usare accepted_recipients_total e postfix_queued_recipients_total; accepted_total e postfix_queued_total contano i job.
ALLEGATI
Allegati e immagini inline
API v1 resta compatibile con allegati Base64. Dopo l’accettazione, l’Engine persiste il contenuto come Blob e processa l’invio in modo asincrono.
{
"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 sono obbligatori per ogni allegato. Un allegato inline richiede cid valido e corpo HTML. I CID duplicati nello stesso messaggio vengono rifiutati.
AFFIDABILITÀ
Idempotenza e campagne
idempotency_keyUsa una chiave prevedibile per evento logico. Se la stessa richiesta è già stata accettata, Ware Send può restituire il riferimento precedente con duplicate: true senza creare un nuovo lavoro.
campaign_idRaggruppa l’attività operativa di grandi campagne e consente di seguire accettati, processati, retry e fallimenti nello snapshot dell’Engine.
campaign_report_emailAssocia campaign_report_email a campaign_id per ricevere automaticamente riepilogo e report HTML dettagliato di completamento.
Se un’altra richiesta con la stessa chiave è ancora in consolidamento, l’API può rispondere 409 Conflict. Attendi e consulta o reinvia usando la stessa chiave.
COMPLETAMENTO CAMPAGNA
Report di completamento campagna
Con campaign_report_email e campaign_id, Ware Send segue la campagna fino allo stato terminale dell’Engine e invia un riepilogo HTML stilizzato con un report HTML dettagliato allegato.
{
"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"
}Il campo è opzionale; se presente, campaign_id è obbligatorio. Lo stesso campaign_id non può cambiare silenziosamente il destinatario mentre esiste lo stato; usare un ID unico per campagna logica.
Quando tutti i job accettati sono POSTFIX_QUEUED o errori terminali Engine e non arrivano nuovi job durante il quiet period configurato (60 s predefiniti). Lavoro successivo può produrre una nuova revisione.
Certifica completamento Ware Send e handoff locale a Postfix, Queue-ID incluso se disponibile. Non è una ricevuta inbox; delivery remoto, defer e bounce richiedono evidenza MTA/DSN.
Il corpo e-mail contiene un riepilogo; l’HTML allegato dettaglia campagna/tenant, job, destinatari, byte, handoff Postfix, errori, retry, Queue-ID, distribuzione per dominio e revisione. Nessun segreto o corpo messaggio.
OSSERVABILITÀ
Stato del messaggio e del motore
Gli endpoint seguenti consentono di osservare l’esecuzione senza accedere direttamente alla VPS.
/api/v1/messages/status?message_id=...BearerRestituisce l’ultimo stato noto del messaggio indicato.
{
"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 ampio dell’Engine: backlog, worker, tassi di ingresso e uscita, risorse, coda Postfix, stato adattivo, attività recente e campagne.
/api/v1/engine/activityBearerVista ridotta per monitoraggio frequente: stato adattivo, pendenti, lavori attivi, eventi recenti e throughput.
/api/v1/engine/analyticsBearerSerie temporali e aggregati operativi per throughput, coda, risorse, scheduler, domini e campagne.
API v1 segue con precisione la responsabilità di Ware Send fino all’accettazione da parte di Postfix. Conferma finale per destinatario, DSN/bounce e stati di consegna remota saranno documentati quando faranno parte del contratto pubblico.
HTTP
Risposte ed errori
| HTTP | Significato | Trattamento consigliato |
|---|---|---|
| 202 | Messaggio accettato e persistito. | Conserva message_id e queue_id se devi seguire l’elaborazione. |
| 200 | Query riuscita o invio idempotente già accettato. | In caso di duplicato, osserva duplicate: true. |
| 400 | JSON o campi non validi. | Correggi il payload. Anche i campi sconosciuti vengono rifiutati. |
| 401 | Credenziale assente, non valida o revocata. | Controlla il Bearer token configurato nell’applicazione. |
| 403 | Installazione senza licenza operativa. | Contatta il responsabile dell’installazione Ware Send. |
| 409 | La chiave di idempotenza è già in elaborazione. | Attendi e riprova usando la stessa chiave. |
| 503 | Coda non disponibile o backpressure temporaneo. | Rispetta Retry-After quando presente e riprova con backoff. |
{
"ok": false,
"error": "unauthorized"
}SISTEMI LEGACY
SMTP Submission
Per i sistemi legacy che non possono usare un’API HTTP, Ware Send offre SMTP Submission autenticato. SMTP entra nello stesso motore, coda, scheduler, worker e Postfix usati dall’API; non esiste una pipeline di consegna separata.
SMTP Submission è solo ingresso autenticato per applicazioni. Non è MX inbound, mailbox, POP3, IMAP o webmail; la porta 25 resta nel ruolo MTA/Postfix.
mail.seudominio.com.br:587 / :465TLS + AUTHUsa l’FQDN dell’installazione con porta 587 + STARTTLS oppure porta 465 + TLS implicito. L’autenticazione è obbligatoria e usa una password SMTP globale dell’installazione, separata dall’API. L’indirizzo canonico derivato dal dominio del cliente (ad esempio, azienda@azienda.com) è solo l’identità predefinita: la stessa password può autenticare qualsiasi indirizzo completo di quel dominio, come contatto@azienda.com, amministrazione@azienda.com o nfe@azienda.com. L’alias breve canonico (azienda) resta disponibile solo per AUTH. Gli altri domini vengono rifiutati e MAIL FROM resta soggetto al dominio mittente autorizzato. Il Bearer token dell’API non autentica SMTP.
| Server | mail.seudominio.com.br |
| Porta | 587 / 465 |
| Sicurezza | STARTTLS / implicit TLS |
| Autenticazione | AUTH PLAIN / AUTH LOGIN |
| Utente | azienda@azienda.com |
| Password | Password SMTP dedicata consegnata durante installazione o rotazione; non usare il Bearer token ws_live_ dell’API. |
Sulla porta 587, connettiti in SMTP e negozia STARTTLS prima di AUTH. Sulla porta 465, TLS inizia immediatamente all’apertura della connessione. Ware Send non accetta autenticazione SMTP senza cifratura.
# 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_...Dopo la fine di DATA, Ware Send risponde 250 solo dopo aver persistito il lavoro nella coda durevole. Significa responsabilità assunta, equivalente a HTTP 202 Accepted; non significa consegna finale al destinatario.
SMTP usa gli stessi limiti di dimensione e destinatari configurati nell’Engine. Consulta GET /api/v1/info. Sono supportati più RCPT TO e il client può riutilizzare una sessione per più messaggi.
Il contenuto RFC 5322/MIME viene preservato. I destinatari nascosti devono essere nell’envelope RCPT TO; se un client legacy invia anche Bcc o Resent-Bcc negli header, Ware Send li rimuove prima della consegna per evitare esposizione.
I client SMTP possono inviare X-WareSend-Tenant e X-WareSend-Campaign-ID per associare il messaggio a un contesto operativo e a una campagna.
La semantica idempotency_key dell’API non è disponibile in SMTP 1.0.0. Se la connessione cade dopo DATA ma prima che il client riceva 250, l’accettazione può essere ambigua; non assumere deduplicazione automatica tramite Message-ID.
Dopo l’ammissione, API e SMTP usano la stessa coda e lo stesso percorso di consegna. Non esiste un limite di egress specifico per SMTP. Il throughput numerico dipende dai benchmark dell’installazione e dal comportamento del client SMTP.
/api/v1/infoBearerGET /api/v1/info indica se SMTP Submission è abilitato, host, utente predefinito, auth_domain, username_policy, se è configurata una password, 587/STARTTLS, 465/TLS implicito e meccanismi 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
Integrazione semplice. Operazione controllata dall’Engine.
L’applicazione invia il messaggio; Ware Send assume persistenza, coda, controllo adattivo e consegna all’MTA in base alla capacità dell’infrastruttura.