Vai al contenuto

Riferimento API

Ogni endpoint, ogni campo e ogni risposta dell'API, generati dalla specifica OpenAPI. Per iniziare in cinque minuti parti dalla panoramica per sviluppatori.

La specifica è scritta in italiano e questa pagina la riporta così com'è, in ogni lingua del sito.

Panoramica per sviluppatoriScarica la specifica (openapi.yaml)

Versione della specifica: 1.13.0

Panoramica

Produzione
https://api.mailronix.com
Sviluppo locale
http://localhost:8080

Autenticazione

apiKeyTipo: http bearer

sessionCookieTipo: apiKey

Endpoint

POST/email/send

Invia un'email transazionale

Autenticazione: una tra apiKey, sessionCookie

Parametri

Idempotency-Keystring · nell'intestazionefacoltativo

Corpo della richiesta · obbligatorio

Variante 1: SendRequestDirect

fromstring (email)obbligatorio
from_namestringfacoltativo
Vincoli: lunghezza minima 1; lunghezza massima 78
reply_tostring (email)facoltativo
languagestringfacoltativo
Valori ammessi: it, en, es, de, fr
attachmentsarray di valorifacoltativo
Vincoli: al massimo 5 elementi
attachments[].filenamestringobbligatorio
Vincoli: lunghezza minima 1; lunghezza massima 100
attachments[].content_typestringobbligatorio
Valori ammessi: application/pdf, image/png, image/jpeg, image/gif, text/plain, text/csv, text/calendar
attachments[].contentstring (byte)obbligatorio
tostring (email)obbligatorio
subjectstringobbligatorio
html_bodystringfacoltativo
text_bodystringfacoltativo
brand_idstring (uuid)facoltativo
marketingbooleanfacoltativo
Predefinito: false

Variante 2: SendRequestTemplate

fromstring (email)obbligatorio
from_namestringfacoltativo
Vincoli: lunghezza minima 1; lunghezza massima 78
reply_tostring (email)facoltativo
languagestringfacoltativo
Valori ammessi: it, en, es, de, fr
attachmentsarray di valorifacoltativo
Vincoli: al massimo 5 elementi
attachments[].filenamestringobbligatorio
Vincoli: lunghezza minima 1; lunghezza massima 100
attachments[].content_typestringobbligatorio
Valori ammessi: application/pdf, image/png, image/jpeg, image/gif, text/plain, text/csv, text/calendar
attachments[].contentstring (byte)obbligatorio
tostring (email)obbligatorio
template_idstring (uuid)obbligatorio
variablesobjectfacoltativo
brand_idstring (uuid)facoltativo
marketingbooleanfacoltativo
Predefinito: false

Esempi

Contenuto diretto (senza template)

{
  "from": "[email protected]",
  "to": "[email protected]",
  "subject": "Conferma ordine #4821",
  "html_body": "<p>Il tuo ordine #4821 è confermato.</p>"
}

Con brand_id come asserzione (facoltativo)

{
  "from": "[email protected]",
  "to": "[email protected]",
  "subject": "Conferma ordine #4821",
  "html_body": "<p>Il tuo ordine #4821 è confermato.</p>",
  "brand_id": "3f2b8c1d-9a4e-4c7b-8e5f-1a2b3c4d5e6f"
}

Solo testo (la parte HTML viene derivata)

{
  "from": "[email protected]",
  "to": "[email protected]",
  "subject": "Conferma ordine #4821",
  "text_body": "Il tuo ordine #4821 è confermato.\n\nDettaglio: https://negozio.example/ordini/4821"
}

Da template con variabili

{
  "from": "[email protected]",
  "to": "[email protected]",
  "template_id": "5f1d6c2e-3b4a-4f0e-9c1a-2d8e7f6a1b3c",
  "variables": {
    "nome_cliente": "Maria",
    "numero_ordine": "4821"
  }
}

Risposte

202

statusstringobbligatorio
Valori ammessi: queued
email_log_idstring (uuid)obbligatorio
{
  "status": "queued",
  "email_log_id": "9c4e2f1a-7d3b-4a5e-8f6c-1b2a3d4e5f6a"
}

400

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

Payload malformato o campi incompatibili/mancanti

{
  "error": {
    "code": "invalid_request",
    "message": "from e to sono obbligatori."
  }
}

Autenticazione via sessione senza brand_id

{
  "error": {
    "code": "invalid_request",
    "message": "brand_id è obbligatorio: indica il brand da cui parte questo invio."
  }
}

from non è un indirizzo email

{
  "error": {
    "code": "invalid_request",
    "message": "from non è un indirizzo email valido."
  }
}

from_name non valido

{
  "error": {
    "code": "invalid_from_name",
    "message": "from_name non è valido: da 1 a 78 caratteri, senza «@», «<», «>», virgolette, a-capo o indirizzi web."
  }
}

reply_to non valido

{
  "error": {
    "code": "invalid_reply_to",
    "message": "reply_to non è un indirizzo email valido: serve un solo indirizzo, senza nome e senza spazi."
  }
}

language non valida

{
  "error": {
    "code": "invalid_language",
    "message": "language deve essere una tra it, en, es, de, fr."
  }
}

Più di 5 allegati

{
  "error": {
    "code": "too_many_attachments",
    "message": "Troppi allegati: al massimo 5 per messaggio."
  }
}

Allegato non valido

{
  "error": {
    "code": "invalid_attachment",
    "message": "Allegato non valido: servono filename, content_type e content in base64 standard, non vuoti."
  }
}

Tipo di allegato non ammesso

{
  "error": {
    "code": "attachment_type_not_allowed",
    "message": "Tipo di allegato non ammesso. Sono ammessi application/pdf, image/png, image/jpeg, image/gif, text/plain, text/csv e text/calendar; il contenuto e l'estensione del nome devono corrispondere al tipo dichiarato."
  }
}

Allegati su un messaggio marketing

{
  "error": {
    "code": "attachments_not_allowed_for_marketing",
    "message": "Un messaggio marketing non può avere allegati: gli allegati sono ammessi solo sui messaggi transazionali."
  }
}

Variabile del template non fornita

{
  "error": {
    "code": "missing_template_variable",
    "message": "Il template referenzia una variabile non fornita."
  }
}

401

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio
{
  "error": {
    "code": "unauthenticated",
    "message": "Autenticazione richiesta."
  }
}

403

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

Il mittente non è sul dominio del brand dell'invio

{
  "error": {
    "code": "from_address_not_of_brand",
    "message": "Il dominio del mittente non è quello del brand da cui parte questo invio: un brand invia dal proprio dominio (o da un suo sottodominio verificato). Vedi il dominio del brand su GET /brands."
  }
}

Dominio del mittente non verificato

{
  "error": {
    "code": "domain_not_verified",
    "message": "Il dominio del mittente non è verificato per questo tenant."
  }
}

Tenant sospeso

{
  "error": {
    "code": "tenant_suspended",
    "message": "Il tenant è sospeso."
  }
}

Limite giornaliero di destinatari unici del piano Free raggiunto

{
  "error": {
    "code": "free_daily_recipients_exceeded",
    "message": "Limite giornaliero di destinatari unici del piano Free raggiunto."
  }
}

Limite mensile del piano superato

{
  "error": {
    "code": "plan_limit_exceeded",
    "message": "Limite mensile del piano superato."
  }
}

reply_to non consentito dal brand

{
  "error": {
    "code": "reply_to_not_allowed",
    "message": "Questo brand non consente di indicare un reply_to nella richiesta: attivalo nelle impostazioni del brand in console."
  }
}

brand_id diverso da quello della chiave

{
  "error": {
    "code": "brand_mismatch",
    "message": "Il brand dichiarato non è quello a cui questa chiave è legata: la chiave scrive sotto un brand solo, e il campo brand_id può solo confermarlo."
  }
}

404

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio
{
  "error": {
    "code": "template_not_found",
    "message": "Template non trovato."
  }
}

409

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

Brand archiviato

{
  "error": {
    "code": "brand_archived",
    "message": "Il brand è archiviato: riattivalo prima di usarlo."
  }
}

Il brand non ha ancora un indirizzo mittente

{
  "error": {
    "code": "brand_sender_not_configured",
    "message": "Questo brand non ha ancora un indirizzo mittente: impostane uno, su un dominio verificato, prima di inviare in suo nome."
  }
}

413

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

Allegati oltre 7 MB in totale, o email oltre 10 MB

{
  "error": {
    "code": "attachments_too_large",
    "message": "Gli allegati superano 7 MB in totale (dimensione dopo la decodifica base64)."
  }
}

Corpo della richiesta troppo grande

{
  "error": {
    "code": "payload_too_large",
    "message": "Corpo della richiesta troppo grande."
  }
}

422

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio
{
  "error": {
    "code": "idempotency_key_body_mismatch",
    "message": "Questa Idempotency-Key è già stata usata con un corpo diverso."
  }
}

429

Intestazioni della risposta

  • Retry-After (integer)

    Secondi da attendere prima di riprovare (solo con attachments_backlog e server_busy).

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

Rate limit per chiave

{
  "error": {
    "code": "rate_limited",
    "message": "Troppe richieste, riprova più tardi."
  }
}

Troppe richieste con corpo grande in corso

{
  "error": {
    "code": "server_busy",
    "message": "Troppe richieste con corpo grande in corso: riprova fra qualche secondo."
  }
}

Troppi allegati in attesa di invio

{
  "error": {
    "code": "attachments_backlog",
    "message": "Hai troppi allegati in attesa di invio: riprova fra qualche secondo, quando quelli già accodati saranno partiti."
  }
}

500

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio
{
  "error": {
    "code": "internal_error",
    "message": "Errore interno."
  }
}

503

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio
{
  "error": {
    "code": "auth_unavailable",
    "message": "Verifica della chiave non disponibile."
  }
}

GET/email/{id}

Leggi lo stato del tuo invio

Autenticazione: una tra apiKey, sessionCookie

Parametri

idstring (uuid) · nel percorsoobbligatorio

Risposte

200

email_log_idstring (uuid)obbligatorio
statusstringobbligatorio
Valori ammessi: queued, sent, complained, undelivered
{
  "email_log_id": "9c4e2f1a-7d3b-4a5e-8f6c-1b2a3d4e5f6a",
  "status": "sent"
}

401

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

403

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

404

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

429

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

POST/contacts

Crea un contatto e avvia la conferma double opt-in

Autenticazione: una tra apiKey, sessionCookie

Corpo della richiesta · obbligatorio

emailstring (email)obbligatorio
namestringfacoltativo
brand_idstring (uuid)facoltativo
languagestringfacoltativo
Valori ammessi: it, en, es, de, fr

Risposte

201

204

400

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

401

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

403

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

409

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

429

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

POST/contacts/revoke

Registra la disiscrizione di un contatto

Autenticazione: una tra apiKey, sessionCookie

Corpo della richiesta · obbligatorio

emailstring (email)obbligatorio
brand_idstring (uuid)facoltativo

Risposte

204

400

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

401

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

403

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

409

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

POST/contacts/delete

Elimina un contatto

Autenticazione: una tra apiKey, sessionCookie

Corpo della richiesta · obbligatorio

emailstring (email)obbligatorio
brand_idstring (uuid)facoltativo

Risposte

204

400

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

401

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

403

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

409

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

GET/contacts/revocations

Scorri le revoche del tuo brand

Autenticazione: apiKey

Parametri

sincestring · nella queryfacoltativo
limitinteger · nella queryfacoltativo

Risposte

200

itemsarray di valoriobbligatorio
items[].emailstring (email)obbligatorio
items[].revoked_atstring (date-time)obbligatorio
items[].originstringobbligatorio
Valori ammessi: unsubscribe_link, console, api_key, undeclared, unknown
next_cursorstring | nullobbligatorio
has_morebooleanobbligatorio

400

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

401

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

403

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

409

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

429

errorobjectobbligatorio
error.codestringobbligatorio
error.messagestringobbligatorio

Eventi webhook

mailronix invia questo evento al tuo indirizzo; non è un endpoint che chiami tu. Il modo di verificare la firma è nella guida ai webhook.

Guida ai webhook

receiveMailronixEvent

Un evento del tuo account, consegnato al tuo endpoint

Parametri

Mailronix-Signaturestring · nell'intestazioneobbligatorio
Mailronix-Event-Idstring · nell'intestazioneobbligatorio
Mailronix-Delivery-Idstring · nell'intestazioneobbligatorio
Mailronix-Event-Typestring · nell'intestazioneobbligatorio
Valori ammessi: email.sent, email.delivered, email.bounced, email.complained, email.failed, email.suppressed, email.clicked, contact.confirmed, contact.unsubscribed, webhook.test

Corpo della richiesta · obbligatorio

idstringobbligatorio
typestringobbligatorio
Valori ammessi: email.sent, email.delivered, email.bounced, email.complained, email.failed, email.suppressed, email.clicked, contact.confirmed, contact.unsubscribed, webhook.test
api_versionstringobbligatorio
created_atstring (date-time)obbligatorio
brand_idstring | null (uuid)obbligatorio
dataobbligatorio

Esempi

Un rifiuto permanente

{
  "id": "evt_3f1a9c2e7b6d4e8f9a0b1c2d3e4f5a6b",
  "type": "email.bounced",
  "api_version": "2026-10-22",
  "created_at": "2026-10-22T14:03:11Z",
  "brand_id": "6f1d2c0e-8b1a-4c53-9a77-0d6a7b3a2c11",
  "data": {
    "email_log_id": "0b7c1e52-3f0a-4d3e-8a8e-5b1f2c9d4e60",
    "recipient": "[email protected]",
    "category": "transactional",
    "bounce_type": "permanent"
  }
}

Una disiscrizione di un indirizzo che non è un contatto

{
  "id": "evt_9c4e2a1b7d3f4a6e8b0c1d2e3f4a5b6c",
  "type": "contact.unsubscribed",
  "api_version": "2026-10-22",
  "created_at": "2026-10-22T14:07:42Z",
  "brand_id": "6f1d2c0e-8b1a-4c53-9a77-0d6a7b3a2c11",
  "data": {
    "contact_id": null,
    "email": "[email protected]"
  }
}

Risposte

2XX

3XX

4XX

5XX