Skip to content

API reference

Every endpoint, field and response of the API, generated from the OpenAPI specification. To get started in five minutes, begin with the developer overview.

The specification is written in Italian, and this page reproduces it as it is, in every language of the site.

Developer overviewDownload the specification (openapi.yaml)

Specification version: 1.13.0

Overview

Production
https://api.mailronix.com
Local development
http://localhost:8080

Authentication

apiKeyType: http bearer

sessionCookieType: apiKey

Endpoints

POST/email/send

Invia un'email transazionale

Authentication: one of apiKey, sessionCookie

Parameters

Idempotency-Keystring · in the headeroptional

Request body · required

Variant 1: SendRequestDirect

fromstring (email)required
from_namestringoptional
Constraints: lunghezza minima 1; lunghezza massima 78
reply_tostring (email)optional
languagestringoptional
Allowed values: it, en, es, de, fr
attachmentsarray di valorioptional
Constraints: al massimo 5 elementi
attachments[].filenamestringrequired
Constraints: lunghezza minima 1; lunghezza massima 100
attachments[].content_typestringrequired
Allowed values: application/pdf, image/png, image/jpeg, image/gif, text/plain, text/csv, text/calendar
attachments[].contentstring (byte)required
tostring (email)required
subjectstringrequired
html_bodystringoptional
text_bodystringoptional
brand_idstring (uuid)optional
marketingbooleanoptional
Default: false

Variant 2: SendRequestTemplate

fromstring (email)required
from_namestringoptional
Constraints: lunghezza minima 1; lunghezza massima 78
reply_tostring (email)optional
languagestringoptional
Allowed values: it, en, es, de, fr
attachmentsarray di valorioptional
Constraints: al massimo 5 elementi
attachments[].filenamestringrequired
Constraints: lunghezza minima 1; lunghezza massima 100
attachments[].content_typestringrequired
Allowed values: application/pdf, image/png, image/jpeg, image/gif, text/plain, text/csv, text/calendar
attachments[].contentstring (byte)required
tostring (email)required
template_idstring (uuid)required
variablesobjectoptional
brand_idstring (uuid)optional
marketingbooleanoptional
Default: false

Examples

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"
  }
}

Responses

202

statusstringrequired
Allowed values: queued
email_log_idstring (uuid)required
{
  "status": "queued",
  "email_log_id": "9c4e2f1a-7d3b-4a5e-8f6c-1b2a3d4e5f6a"
}

400

errorobjectrequired
error.codestringrequired
error.messagestringrequired

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

errorobjectrequired
error.codestringrequired
error.messagestringrequired
{
  "error": {
    "code": "unauthenticated",
    "message": "Autenticazione richiesta."
  }
}

403

errorobjectrequired
error.codestringrequired
error.messagestringrequired

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

errorobjectrequired
error.codestringrequired
error.messagestringrequired
{
  "error": {
    "code": "template_not_found",
    "message": "Template non trovato."
  }
}

409

errorobjectrequired
error.codestringrequired
error.messagestringrequired

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

errorobjectrequired
error.codestringrequired
error.messagestringrequired

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

errorobjectrequired
error.codestringrequired
error.messagestringrequired
{
  "error": {
    "code": "idempotency_key_body_mismatch",
    "message": "Questa Idempotency-Key è già stata usata con un corpo diverso."
  }
}

429

Response headers

  • Retry-After (integer)

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

errorobjectrequired
error.codestringrequired
error.messagestringrequired

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

errorobjectrequired
error.codestringrequired
error.messagestringrequired
{
  "error": {
    "code": "internal_error",
    "message": "Errore interno."
  }
}

503

errorobjectrequired
error.codestringrequired
error.messagestringrequired
{
  "error": {
    "code": "auth_unavailable",
    "message": "Verifica della chiave non disponibile."
  }
}

GET/email/{id}

Leggi lo stato del tuo invio

Authentication: one of apiKey, sessionCookie

Parameters

idstring (uuid) · in the pathrequired

Responses

200

email_log_idstring (uuid)required
statusstringrequired
Allowed values: queued, sent, complained, undelivered
{
  "email_log_id": "9c4e2f1a-7d3b-4a5e-8f6c-1b2a3d4e5f6a",
  "status": "sent"
}

401

errorobjectrequired
error.codestringrequired
error.messagestringrequired

403

errorobjectrequired
error.codestringrequired
error.messagestringrequired

404

errorobjectrequired
error.codestringrequired
error.messagestringrequired

429

errorobjectrequired
error.codestringrequired
error.messagestringrequired

POST/contacts

Crea un contatto e avvia la conferma double opt-in

Authentication: one of apiKey, sessionCookie

Request body · required

emailstring (email)required
namestringoptional
brand_idstring (uuid)optional
languagestringoptional
Allowed values: it, en, es, de, fr

Responses

201

204

400

errorobjectrequired
error.codestringrequired
error.messagestringrequired

401

errorobjectrequired
error.codestringrequired
error.messagestringrequired

403

errorobjectrequired
error.codestringrequired
error.messagestringrequired

409

errorobjectrequired
error.codestringrequired
error.messagestringrequired

429

errorobjectrequired
error.codestringrequired
error.messagestringrequired

POST/contacts/revoke

Registra la disiscrizione di un contatto

Authentication: one of apiKey, sessionCookie

Request body · required

emailstring (email)required
brand_idstring (uuid)optional

Responses

204

400

errorobjectrequired
error.codestringrequired
error.messagestringrequired

401

errorobjectrequired
error.codestringrequired
error.messagestringrequired

403

errorobjectrequired
error.codestringrequired
error.messagestringrequired

409

errorobjectrequired
error.codestringrequired
error.messagestringrequired

POST/contacts/delete

Elimina un contatto

Authentication: one of apiKey, sessionCookie

Request body · required

emailstring (email)required
brand_idstring (uuid)optional

Responses

204

400

errorobjectrequired
error.codestringrequired
error.messagestringrequired

401

errorobjectrequired
error.codestringrequired
error.messagestringrequired

403

errorobjectrequired
error.codestringrequired
error.messagestringrequired

409

errorobjectrequired
error.codestringrequired
error.messagestringrequired

GET/contacts/revocations

Scorri le revoche del tuo brand

Authentication: apiKey

Parameters

sincestring · in the queryoptional
limitinteger · in the queryoptional

Responses

200

itemsarray di valorirequired
items[].emailstring (email)required
items[].revoked_atstring (date-time)required
items[].originstringrequired
Allowed values: unsubscribe_link, console, api_key, undeclared, unknown
next_cursorstring | nullrequired
has_morebooleanrequired

400

errorobjectrequired
error.codestringrequired
error.messagestringrequired

401

errorobjectrequired
error.codestringrequired
error.messagestringrequired

403

errorobjectrequired
error.codestringrequired
error.messagestringrequired

409

errorobjectrequired
error.codestringrequired
error.messagestringrequired

429

errorobjectrequired
error.codestringrequired
error.messagestringrequired

Webhook events

mailronix sends this event to your address; it is not an endpoint you call. How to verify the signature is in the webhook guide.

Webhook guide

receiveMailronixEvent

Un evento del tuo account, consegnato al tuo endpoint

Parameters

Mailronix-Signaturestring · in the headerrequired
Mailronix-Event-Idstring · in the headerrequired
Mailronix-Delivery-Idstring · in the headerrequired
Mailronix-Event-Typestring · in the headerrequired
Allowed values: email.sent, email.delivered, email.bounced, email.complained, email.failed, email.suppressed, email.clicked, contact.confirmed, contact.unsubscribed, webhook.test

Request body · required

idstringrequired
typestringrequired
Allowed values: email.sent, email.delivered, email.bounced, email.complained, email.failed, email.suppressed, email.clicked, contact.confirmed, contact.unsubscribed, webhook.test
api_versionstringrequired
created_atstring (date-time)required
brand_idstring | null (uuid)required
datarequired

Examples

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]"
  }
}

Responses

2XX

3XX

4XX

5XX