Documentazione interattiva · Portale sviluppatori · Specifica OpenAPI · EN · FR · DE · IT · PT · ES
URL di base : https://api.mailpro.com/v3
L'API CRM Mailpro™ v3 consente di gestire programmaticamente contatti, liste, tag, campi personalizzati, template email e campagne — e di inviare sia email marketing in massa sia email transazionali individuali, nonché SMS.
Tutti gli endpoint (eccetto POST /token e gli endpoint OAuth) accettano tre metodi di autenticazione. Utilizzate quello più adatto al vostro stack.
POST /token. Assomiglia a OAuth ma è legato a un'unica credenziale account e non è associato ad alcun ambito.> Il Bearer JWT legacy e IdClient+ApiKey non sono soggetti a controllo degli > ambiti — conservano accesso completo a ogni endpoint che potevano già > raggiungere. Soltanto gli access token OAuth 2.0 sono soggetti ai controlli > di ambito per endpoint mostrati per ciascuna operazione qui di seguito (un > token privo dell'ambito riceve 403 insufficient_scope).
Mailpro gestisce un unico authorization server OAuth 2.0 per tutte le sue API, esposto su un'unica superficie neutra rispetto alla versione: https://api.mailpro.com/oauth/. Un solo server, un solo token — il medesimo access token funziona su CRM v3, Email v2 e SMS. Gli endpoint che un token può chiamare sono determinati dagli scope del token, non dall'URL base dell'API chiamata. Non esiste un endpoint OAuth per ciascuna versione (nessun /v3/oauth, /v2/oauth o /sms/oauth).
| Endpoint | URL |
|---|---|
| Authorize | GET https://api.mailpro.com/oauth/authorize |
| Token / Refresh | POST https://api.mailpro.com/oauth/token |
| JWKS (verifica firme) | GET https://api.mailpro.com/oauth/.well-known/jwks |
| Discovery | GET https://api.mailpro.com/oauth/.well-known/openid-configuration |
Issuer (la claim iss su ogni token): https://api.mailpro.com/oauth/.
Grant supportati
authorization_code + PKCE (code_challenge_method=S256 è obbligatorio) — il flusso di consenso via browser "Connect Mailpro". Restituisce un access token e un refresh token rotativo.client_credentials — da macchina a macchina (M2M), senza utente. Restituisce solo un access token.refresh_token — scambia un refresh token per una nuova coppia access/refresh. I refresh token ruotano: ogni utilizzo invalida il precedente.Durata dei token
| Token | TTL |
|---|---|
| Access token (RS256 JWT) | 20 minuti |
| Refresh token (scorrevole, monouso) | 30 giorni |
| Authorization code | 60 secondi |
Authorization Code + PKCE — passo dopo passo
code_verifier (43–128 caratteri casuali) e code_challenge = base64url(sha256(code_verifier)). GET https://api.mailpro.com/oauth/authorize
?response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=https://yourapp.example.com/callback
&scope=contacts:read contacts:write
&state=RANDOM_CSRF_TOKEN
&code_challenge=CODE_CHALLENGE
&code_challenge_method=S256
?code=…&state=…. Verificate state (protezione CSRF). POST https://api.mailpro.com/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=AUTH_CODE
&redirect_uri=https://yourapp.example.com/callback
&client_id=YOUR_CLIENT_ID&code_verifier=CODE_VERIFIER
{ "access_token": "eyJ…", "token_type": "Bearer",
"expires_in": 1200, "refresh_token": "…" }
Authorization: Bearer ACCESS_TOKEN.grant_type=refresh_token e memorizzate il nuovo refresh token (il vecchio è ormai inutilizzabile).client_credentials
POST https://api.mailpro.com/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET&scope=contacts:read email:send
Il medesimo access token OAuth è accettato anche dalle API Email v2 (api.mailpro.com/v2) e SMS (api.mailpro.com/sms) — autenticatevi una sola volta, chiamate qualsiasi API. Catalogo completo degli scope: vedere Scope OAuth 2.0 qui di seguito.
Il modo più rapido per provare OAuth è il grant client_credentials (server-to-server, senza browser, senza utente). Vi serve una coppia client_id / client_secret (rivolgetevi al vostro referente Mailpro, oppure createne una in Impostazioni → Accesso API). Sostituite i segnaposto qui sotto — non commitate mai un secret reale.
1. Ottenete un access token
curl -X POST https://api.mailpro.com/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "scope=contacts:read"
{ "access_token": "eyJhbGciOiJSUzI1Ni…", "token_type": "Bearer",
"expires_in": 1200 }
2. Chiamate un endpoint di risorsa con il token
curl https://api.mailpro.com/v3/List \
-H "Authorization: Bearer eyJhbGciOiJSUzI1Ni…"
Il medesimo token funziona anche su Email v2 (…/v2/…) e SMS (…/sms/…) — purché disponga dello scope richiesto da ciascun endpoint. Un token privo dello scope necessario viene rifiutato con 403 insufficient_scope.
"Connect Mailpro" interattivo (authorization_code + PKCE) — quando agite per conto di un *utente* (Zapier/Make/n8n, app partner): reindirizzate l'utente a GET https://api.mailpro.com/oauth/authorize con response_type=code, client_id, redirect_uri, scope, state, code_challenge e code_challenge_method=S256; l'utente fornisce il consenso; scambiate il code restituito su POST https://api.mailpro.com/oauth/token con il code_verifier corrispondente. Procedura dettagliata completa qui sopra; scope nella sezione Scope OAuth 2.0 qui di seguito.
> I token sono JWT RS256 — gli access token vivono 20 minuti, i > refresh token 30 giorni (scorrevoli, monouso: ogni refresh ruota il > token). Verificate le firme rispetto al JWKS disponibile su > https://api.mailpro.com/oauth/.well-known/jwks e validate lo scope di > ogni richiesta confrontandolo con la matrice degli scope qui di seguito.
Authorization: Bearer <access_token>
Ottenete un token tramite POST /token (vedi qui di seguito). Valido per 30 giorni per impostazione predefinita; utilizzate grant_type=refresh_token per rinnovarlo senza riautenticarvi. Più semplice da configurare, ma legato a un'unica credenziale account e impossibile da delimitare ad uno scope o affidare a terze parti — preferite OAuth 2.0 per qualsiasi integrazione installabile.
Inviate il vostro client ID e la chiave API come header HTTP (consigliato) oppure come parametri di query:
IdClient: 12345
ApiKey: a1b2c3d4-e5f6-7890-abcd-ef1234567890
Le stesse credenziali delle API v2 / SMS — copia-incolla da Impostazioni → Accesso API. Nessuna fase di scambio token. La forma con header è raccomandata perché gli URL vengono registrati nei log di IIS / Cloudflare / proxy.
POST /token
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=YOUR_USERNAME&password=YOUR_API_KEY
username — il vostro username Mailpro (email)password — la vostra chiave API (GUID), reperibile in Impostazioni → Accesso APIPOST /token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=YOUR_CLIENT_ID
> Il token emesso da POST /v3/token è valido anche sull'API Email v2 > (api.mailpro.com/v2) e sull'API SMS (api.mailpro.com/sms). > Autenticatevi una sola volta, chiamate qualsiasi API.
Quando la vostra applicazione richiede un access token OAuth dichiara un insieme di scope — autorizzazioni che definiscono esattamente cosa il token può fare. L'utente vede una descrizione in linguaggio naturale di ciascuno scope richiesto sulla schermata di consenso. Gli scope sono separati da spazi nel parametro scope (scope=contacts:read email:send). Richiedete solo ciò di cui avete bisogno.
Gli scope seguono il formato <resource>:<action> e sono gerarchicamente indipendenti — contacts:write non implica contacts:read; richiedete entrambi se necessario.
| Scope | Permette di |
|---|---|
contacts:read | Visualizzare i vostri contatti, liste, tag, segmenti e campi personalizzati. |
contacts:write | Creare, modificare ed eliminare i vostri contatti, liste, tag e campi personalizzati. |
email:send | Inviare email transazionali e di campagna per vostro conto. |
email:read | Visualizzare statistiche di consegna, aperture, click e cronologia bounce. |
email:templates:read | Visualizzare i vostri template email (oggetto, HTML, corpo plain-text). |
email:templates:write | Creare, modificare ed eliminare i vostri template email. |
sms:send | Inviare SMS transazionali e di campagna per vostro conto. |
sms:read | Visualizzare il saldo crediti SMS e la cronologia messaggi. |
sms:contacts:read | Visualizzare la vostra rubrica SMS. |
sms:contacts:write | Creare, modificare ed eliminare voci nella vostra rubrica SMS. |
webhooks:manage | Sottoscrivere, modificare e rimuovere endpoint webhook per il vostro account. |
account:read | Visualizzare i crediti, i limiti e lo stato dell'abbonamento del vostro account. |
I controlli sugli scope sono attivi e applicati per ciascun endpoint per i token emessi via OAuth (l'autenticazione legacy è esente). Ogni operazione in questo riferimento elenca lo scope richiesto sotto Authorization. Sintesi per la superficie CRM v3:
| Endpoint | Scope richiesto |
|---|---|
GET /Contact/{id}, GET /List, GET /List/{id}, GET /List/{id}/Contact, GET /List/{listId}/Unsubscribers, GET /Tag, GET /Tag/{id}, GET /Tag/{id}/Contact, GET /Segment, verifica appartenenza al segmento | contacts:read |
POST /Contact, POST /Contact/Multiple, PUT/DELETE /Contact/{id}, aggiungere/rimuovere un tag o una lista su un contatto, POST/PUT/DELETE /List, POST/PUT/DELETE /Tag | contacts:write |
> Gli endpoint di questa specifica non elencati qui sopra (ad esempio > GET /Field, le campagne, l'invio transazionale, l'invio SMS, i template > di messaggio, le informazioni sull'account) sono attualmente raggiungibili > con qualunque token valido — non sono ancora soggetti al controllo degli > scope sulla superficie CRM v3. Le API Email v2 e SMS limitano inoltre i > propri endpoint di invio / template / contatti / account (consultate le > rispettive specifiche).
Il rifiuto per scope insufficiente restituisce 403 con { "error": "insufficient_scope", "required_scope": "…" } (RFC 6750 §3.1).
Stessa regola sulle tre API Mailpro (Email v2, CRM v3, SMS): 5.000 elementi per pagina, per impostazione predefinita e al massimo.
numberOfRecords — elementi per pagina. Assente, 0 o oltre 5.000 = 5.000.pageNumber — numero di pagina a partire da 1 (predefinito 1).includeBodyHTML=true) restituiscono 10 elementi per pagina per impostazione predefinita.200 con un elenco vuoto []. 404 significa che la risorsa stessa (elenco, tag, segmento, campagna…) non esiste.Parametri sconosciuti: vengono ignorati, mai rifiutati. Quando una richiesta contiene un parametro che l'API non riconosce, la risposta include X-Ignored-Parameters (i nomi) e X-Documentation (un link a questa pagina), così un errore di battitura non passa inosservato.
Le violazioni delle regole di business restituiscono HTTP 406 con un corpo JSON:
{ "Message": "Contact cannot be created. Email cannot be empty." }
Motivi 406 più comuni:
Email cannot be empty — l'email è obbligatoriaEmail has an invalid format — non è un indirizzo email validoA contact already exist with the same Email — violazione di unicità emailThe email address was unsubscribed permanently — indirizzo presente nella blacklistThe email address has identified has a hard bounce — l'indirizzo ha generato un bounceThe email address has identified has a spam trap — rilevata una spam trapAt least one List is necessary — i contatti devono appartenere ad almeno una listaOne or more lists have reached the contact limit — massimo 1M di contatti per listaInvalid Phone Number — errore di formato del numero di telefonoInvalid country code for Phone Number — prefisso paese non supportatoLength exceeded for Phone Number (12) — numero di telefono troppo lungo| Codice | Significato |
|---|---|
400 | Richiesta malformata (JSON non valido, messaggio oltre il limite di parti SMS) |
401 | Credenziali mancanti, non valide o scadute |
402 | Crediti insufficienti per effettuare l'invio |
403 | Consentito dalle tue credenziali, ma rifiutato — account bloccato per l'invio di SMS |
404 | L'oggetto referenziato non esiste (contatto, lista, tag, campo, campagna) |
406 | Violazione di una regola di business del contatto (vedi l'elenco sopra) |
422 | Input rifiutato dalla validazione, o limite dell'account raggiunto |
> Modifica: alcuni di questi casi restituivano in precedenza 404. I crediti > insufficienti restituiscono ora 402, gli errori di validazione e i limiti > dell'account restituiscono 422, e un account bloccato per gli SMS > restituisce 403. 404 è ora usato solo per «questo oggetto non esiste», in > modo coerente con l'API SMS. Se la tua integrazione si basa su 404 per questi > casi, aggiornala con i codici sopra.
I numeri di telefono vengono normalizzati automaticamente. Potete inviarli in molti formati — spazi, trattini, punti, slash, parentesi, underscore e spazi non separabili vengono rimossi prima della validazione. Qualsiasi altro carattere (lettere, apostrofi, =, ;, ecc.) rende il numero non valido.
| Valido | Non valido |
|---|---|
+41794849980 — E.164 internazionale | 0612345678 — formato nazionale (0 iniziale) |
0041 79 484 99 80 — prefisso 00 + spazi | 41'794'849'80 — apostrofi (non rimossi) |
+33 6-12-34-56-78 — + con trattini | tel=0041794849980 — caratteri extra |
41794849980 — sole cifre | 1234567 — troppo corto (< 8 cifre) |
Regole:
+, 00, oppure nessun prefisso0)-, punto ., slash /, parentesi ( ), underscore _, NBSP=, ;, + all'interno del numero, ecc.) → rifiutato41794849980)Specifiche v3 per Contact: il campo phone_number di un Contact è attualmente limitato a 12 cifre dopo la normalizzazione (contro 15 per gli endpoint SMS autonomi). I numeri provenienti da paesi come Germania (13), Brasile (13) o Italia per i mobili (12–13) possono essere rifiutati su /v3/Contact con Length exceeded for Phone Number (12). Questo vincolo legacy potrebbe essere allentato in una futura release.
| Risorsa | Limite |
|---|---|
| Tag per account | 1.000 |
| Liste per account | 1.000 |
| Campi personalizzati per account | 50 |
| Richieste API mensili per account | 50.000 (5× crediti email del piano) |
Ogni email inviata singolarmente (POST /Send/Mail, la Email API v2, il relay SMTP o un'automazione) riceve un identificativo. Può essere seguita finché il server del destinatario non la accetta o la rifiuta. Le campagne non sono coperte qui: usate le statistiche.
POST /Send/Mail contiene id_single_send.email.delivered ed email.bounced inviano lo stato finale al vostro server non appena è noto, senza alcuna interrogazione.GET /Send/{id}/Status restituisce lo stato attuale (tabella sotto).status | Significato | Finale? |
|---|---|---|
queued | Accettata, in attesa di invio. | no |
scheduled | Pianificata per più tardi (date_planned). | no |
sent | Consegnata dai nostri server, ancora nessuna risposta dal server del destinatario. | no |
delivered | Accettata dal server del destinatario (diag_code = la sua risposta SMTP). | sì |
bounced | Rifiutata. bounce_type: hard = indirizzo non valido o rifiuto definitivo; soft = rifiuto dopo nuovi tentativi (casella piena, server irraggiungibile…). | sì |
not_found | Identificativo sconosciuto o che non appartiene al vostro account. | sì |
Interrogare senza andare in loop
delivered compare circa 5 minuti dopo la consegna.Retry-After (i secondi da attendere), e la chiamata non conta nella vostra quota.scheduled: inutile interrogare prima di date_planned.Gli stati sono conservati per 365 giorni.
Mailpro™ può notificare il vostro server in tempo reale quando determinati eventi si verificano sul vostro account (la creazione di un contatto, la consegna di un'email, il completamento di una campagna, ecc.). Stile Stripe — il vostro URL riceve una POST firmata in HMAC-SHA256 non appena l'evento si verifica.
Ogni evento inviato al vostro webhook conta come 1 richiesta nella vostra quota di richieste API.
POST /Webhook. La risposta contiene un secret mostrato una sola volta (stile Stripe / GitHub) — conservatelo.secret (snippet qui di seguito).> ⏱ Ritardo di attivazione — dopo la creazione, l'aggiornamento o > l'eliminazione di un webhook, la modifica impiega fino a 10 minuti per > propagarsi su tutti i server API Mailpro. Durante questo intervallo gli > eventi potrebbero non corrispondere ancora alla vostra nuova > sottoscrizione (oppure potrebbero ancora corrispondere a una appena > rimossa). È il tempo necessario per aggiornare la cache delle > sottoscrizioni in memoria su ogni istanza API.
Tutti gli eventi condividono un envelope comune:
{
"id": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
"type": "contact.created",
"created": 1748194800,
"apiVersion": "v3",
"account": { "id": 12345, "name": "ACME Corp" },
"data": { "id": "...", "email": "[email protected]", "...": "..." }
}
| Campo | Formato | Descrizione |
|---|---|---|
id | evt_ + 32 hex | ID univoco dell'evento — da utilizzare come chiave di idempotenza dal vostro lato. |
type | <domain>.<verb> | Tipo di evento canonico (ad esempio email.delivered, contact.created). |
created | Secondi Unix UTC | Incluso nella firma HMAC. |
apiVersion | "v3" | Quale API Mailpro ha pubblicato l'evento. |
account.id | int | Il vostro client ID Mailpro. |
account.name | string | Il nome del vostro account (utile per il debug lato client). |
data | object | Payload dell'evento — la forma dipende dal type (vedi catalogo qui di seguito). |
| Evento | Trigger | Forma di data |
|---|---|---|
ping | Test tramite POST /Webhook/{id}/test | { message } |
contact.created | POST /Contact | { id, email, firstName, lastName, createdAt } |
contact.updated | PUT /Contact/{id} | { id, email, firstName, lastName, updatedAt, changes } |
contact.deleted | DELETE /Contact/{id} | { id, email, deletedAt } |
list.contact_added | Contatto aggiunto a una lista | { listId, listName, contactId, contactEmail, addedAt } |
list.contact_removed | Contatto rimosso da una lista | { listId, listName, contactId, contactEmail, removedAt } |
tag.applied | Tag applicato a un contatto | { tag, contactId, contactEmail, appliedAt } |
tag.removed | Tag rimosso | { tag, contactId, contactEmail, removedAt } |
segment.matched | Un contatto entra in un segmento | { segmentId, segmentName, contactId, contactEmail, matchedAt } |
email.processed | Invio accettato dalla pipeline | { messageId, email, campaignId, processedAt } |
email.delivered | Un'email singola è stata accettata dal server del destinatario — API v2/v3, SMTP o Automation (non le campagne). Emesso dal flusso di consegna PowerMTA. | { messageId, email, idSending, sendingType, diagCode, deliveredAt } |
email.opened | Tracking pixel attivato | { messageId, email, campaignId, openedAt, ip, userAgent } |
email.clicked | Click su link tracciato | { messageId, email, campaignId, clickedAt, url, ip, userAgent } |
email.bounced | Bounce hard o soft | { messageId, email, campaignId, bouncedAt, bounceType, reason } |
email.spam_report | Reclamo FBL | { messageId, email, campaignId, reportedAt } |
email.unsubscribed | Click sul link di opt-out | { messageId, email, campaignId, unsubscribedAt } |
email.dropped | Rifiutata prima dell'invio | { messageId, email, campaignId, droppedAt, reason } |
campaign.started | La spedizione ha inizio | { campaignId, name, totalRecipients, startedAt } |
campaign.finished | Tutti i destinatari elaborati | { campaignId, name, totalSent, totalFailed, finishedAt } |
import.started | Job di import avviato | { importId, fileName, totalRows, startedAt } |
import.progress | Al 25/50/75% | { importId, fileName, processedRows, totalRows, progressPct } |
import.completed | Import riuscito | { importId, fileName, totalRows, addedCount, updatedCount, errorCount, completedAt } |
import.failed | Errore fatale durante l'import | { importId, fileName, errorMessage, failedAt } |
Sottoscrivete tutti gli eventi di questa API passando ["*"] nell'array events.
Ogni POST trasporta un header X-Mailpro-Signature:
X-Mailpro-Signature: t=1748194800,v1=7f9ac2b6e4d1c8a3...
X-Mailpro-Event-Id: evt_8f3a9b2c4d1e5f6789abcdef01234567
X-Mailpro-Event-Type: contact.created
X-Mailpro-Attempt: 1
Per verificarla:
t e v1 dall'header.|now - t| > 300 (finestra di protezione anti-replay di 5 minuti).expected = hex(HMAC_SHA256(secret, t + "." + raw_body)).v1 con expected (crypto.timingSafeEqual, hash_equals, CryptographicOperations.FixedTimeEquals) — mai con ==.const crypto = require('crypto');
function verifyMailproSignature(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(',').map(p => p.split('=')));
if (Math.abs(Date.now() / 1000 - parseInt(parts.t)) > 300) return false;
const expected = crypto
.createHmac('sha256', secret)
.update(parts.t + '.' + rawBody)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(parts.v1, 'hex'),
Buffer.from(expected, 'hex'));
}
function verifyMailproSignature(string $rawBody, string $header, string $secret): bool {
parse_str(str_replace(',', '&', $header), $p);
if (abs(time() - (int)$p['t']) > 300) return false;
$expected = hash_hmac('sha256', $p['t'] . '.' . $rawBody, $secret);
return hash_equals($expected, $p['v1']);
}
import hmac, hashlib, time
def verify_mailpro_signature(raw_body: bytes, header: str, secret: str) -> bool:
parts = dict(p.split('=') for p in header.split(','))
t = int(parts['t'])
if abs(time.time() - t) > 300:
return False
expected = hmac.new(
secret.encode(),
f"{t}.".encode() + raw_body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, parts['v1'])
using System.Security.Cryptography;
using System.Text;
static bool VerifyMailproSignature(string rawBody, string header, string secret) {
var parts = header.Split(',')
.Select(p => p.Split('='))
.ToDictionary(a => a[0], a => a[1]);
var t = long.Parse(parts["t"]);
if (Math.Abs(DateTimeOffset.UtcNow.ToUnixTimeSeconds() - t) > 300) return false;
using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes($"{t}.{rawBody}"));
var expected = Convert.ToHexString(hash).ToLowerInvariant();
return CryptographicOperations.FixedTimeEquals(
Encoding.UTF8.GetBytes(expected),
Encoding.UTF8.GetBytes(parts["v1"]));
}
| Tentativo | Attesa prima del successivo |
|---|---|
| 1 → 2 | 10 secondi |
| 2 → 3 | 1 minuto |
| 3 → 4 | 5 minuti |
| 4 → 5 | 30 minuti |
| 5 → 6 | 2 ore |
| 6 → 7 | 6 ore |
| 7 | abbandonato (consegna contrassegnata come failed) |
Dopo 10 fallimenti consecutivi sullo stesso webhook, questo viene disabilitato automaticamente (isActive: false) e ricevete un'email di notifica. Riattivatelo con PUT /Webhook/{id} una volta corretto il vostro endpoint.
Consideriamo il vostro webhook andato a buon fine solo se restituite uno stato compreso tra 200 e 299. Qualsiasi 3xx/4xx/5xx o un timeout (> 10 s) viene conteggiato come fallimento e attiva i retry. Se il vostro endpoint è definitivamente fuori servizio, restituite esplicitamente 410 Gone — i retry avvengono comunque ma la causa del fallimento risulta più chiara nel vostro log di consegna.
| Limite | Valore |
|---|---|
| Webhook per account | 20 |
| Eventi sottoscritti per webhook | 50 |
| Dimensione massima del payload | 256 KB |
| Timeout HTTP per tentativo | 10 secondi |
| Conservazione della cronologia di consegna | 30 giorni |
Ottieni un token JWT Bearer per autenticare tutte le altre chiamate API. L'endpoint del token accetta più tipi di concessione: password, refresh_token, client_credentials e integrazioni di terze parti (zapier, automateio, microsoft-flow).
/tokenOttieni token di accesso
Ottiene un token JWT Bearer utilizzando le credenziali client. Passa l'access_token restituito come Authorization: Bearer <token> in tutte le richieste successive.
| Tipo di concessione | Caso d'uso |
|---|---|
password | Integrazione standard — username + chiave API |
refresh_token | Rinnova un token di accesso in scadenza senza autenticarsi di nuovo |
client_credentials | Server-to-server con solo ID client |
zapier / automateio / microsoft-flow | Integrazioni con piattaforme di terze parti |
Utilizza grant_type=refresh_token per ottenere un nuovo token di accesso senza autenticarsi di nuovo — il tuo SDK dovrebbe farlo automaticamente quando il token di accesso si avvicina alla scadenza (strategia tipica: rinnova quando rimangono meno di 24 h).
Anche con una durata di 30 giorni, chiunque ottenga un access_token può impersonare il tuo account fino alla scadenza. Conserva i token in un archivio segreto lato server (Vault, AWS Secrets Manager, Azure Key Vault, variabili d'ambiente su un host rinforzato). Mai incorporare un token in:
Se un token viene divulgato, revocalo tramite le impostazioni del tuo account Mailpro e richiedine uno nuovo.
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
grant_type | string: password, refresh_token, client_credentials, zapier, automateio, microsoft-flow | sì | Tipo di concessione di autenticazione |
username | string | Il tuo username Mailpro (email). Obbligatorio per la concessione password. | |
password | string | La tua chiave API Mailpro (formato GUID). Obbligatoria per la concessione password. | |
refresh_token | string | Refresh token precedente. Obbligatorio per la concessione refresh_token. | |
client_id | string | Il tuo ID client Mailpro (intero). Obbligatorio per la concessione client_credentials. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Token emesso con successo |
400 | Credenziali non valide o tipo di concessione non supportato |
Esempio 200
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 31535999,
"userName": "12345",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"application": null
}
Esempio 400
{
"error": "invalid_grant",
"error_description": "The username or password is incorrect."
}
Recupera il profilo dell'account, il saldo dei crediti e i dettagli dell'abbonamento.
/Account/MeOttieni dettagli dell'account
Restituisce i dettagli del profilo e le impostazioni dell'account Mailpro autenticato.
Risposte
| Codice | Descrizione |
|---|---|
200 | Dettagli dell'account restituiti con successo |
401 | Token non valido o scaduto |
/Account/CreditsOttieni saldo crediti
Restituisce il saldo dei crediti email e SMS rimanenti per l'account.
Risposte
| Codice | Descrizione |
|---|---|
200 | Saldo crediti restituito con successo |
401 | Token non valido o scaduto |
Esempio 200
{
"email_credits": 48500,
"sms_credits": 1200
}
/Account/SubscriptionEndDateOttieni data di scadenza dell'abbonamento
Restituisce la data di scadenza dell'attuale abbonamento Mailpro.
Risposte
| Codice | Descrizione |
|---|---|
200 | Data di scadenza dell'abbonamento restituita con successo |
401 | Token non valido o scaduto |
/Account/LimitsOttieni quota API mensile
Restituisce la quota mensile di richieste API per il client autenticato.
Calcolo della quota: il limite è calibrato a partire dai crediti dell'abbonamento email (tipicamente subscription_credits × 5). Per un piano da 10.000 email/mese, ciò produce un budget mensile di 50.000 richieste. La mappatura esatta è impostata dal job di fatturazione alla registrazione dell'abbonamento e azzerata alla data di anniversario dell'abbonamento (non il 1° del mese di calendario).
Cosa consuma crediti:
v2, v3 o sms (ogni chiamata = 1 credito, indipendentemente dal risultato — sia le 2xx sia la maggior parte degli errori business 4xx vengono conteggiati).contact.created inviato al tuo webhook sottoscritto = 1 credito oltre alla chiamata API che l'ha attivato).Cosa è GRATUITO (non consuma crediti):
/health (monitoraggio).401 (fallimento auth), 403 (vietato) o 429 (rate limit superato).Risposte
| Codice | Descrizione |
|---|---|
200 | Istantanea della quota |
401 | Token non valido o scaduto |
404 | Nessun record di quota trovato per questo account (account appena creato che non ha mai effettuato una chiamata API; la riga verrà creata alla prima richiesta autenticata). |
CRUD completo per i contatti CRM. I contatti memorizzano un indirizzo email, un numero di telefono opzionale, valori di campi personalizzati e appartengono a una o più Liste. Possono anche essere etichettati con Tag. Gli ID dei contatti sono UUID.
/ContactCrea un contatto
Crea un nuovo contatto CRM con campi personalizzati opzionali, assegnazioni a liste e tag.
Obbligatori:
email — deve essere univoco nell'accountlists — è obbligatoria almeno una assegnazione a una listaI numeri di telefono accettano +41…, 0041… o 41… con o senza separatori (massimo 12 cifre su Contact — vedi Formato del numero di telefono nella descrizione dell'API).
I campi personalizzati sono identificati dal loro id (da GET /Field). I valori vengono validati rispetto al tipo del campo.
Scope OAuth : contacts:write
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email | string | sì | Indirizzo email del contatto (obbligatorio, deve essere univoco) |
phone_number | string | Numero di telefono — accetta +41…, 0041… o 41… con o senza separatori.
Deve iniziare con un prefisso internazionale valido. Massimo 12 cifre su Contact (vedi
Formato del numero di telefono nella descrizione dell'API per le regole complete).
| |
lists | array of ListRef | sì | Liste a cui assegnare questo contatto. È richiesta almeno una lista. |
tags | array of TagRef | Tag da assegnare a questo contatto (opzionale) | |
custom_fields | array of FieldValue | Valori dei campi personalizzati per questo contatto (opzionale) |
Esempio
{
"email": "[email protected]",
"phone_number": "+41791234567",
"lists": [
{
"id": 101
}
],
"tags": [
{
"id": 5
}
],
"custom_fields": [
{
"id": 1,
"value": "Alice"
},
{
"id": 2,
"value": "Dupont"
}
]
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatto creato con successo |
400 | Formato email non valido |
401 | Token non valido o scaduto |
406 | Violazione di una regola business (vedi descrizione per l'elenco completo) |
Esempio 406
{
"Message": "Contact cannot be created. A contact already exist with the same Email"
}
/Contact/MultipleImporta contatti (in blocco)
Crea fino a 1.000 contatti in una singola richiesta per un'importazione in blocco efficiente. La risposta include un elenco dei contatti creati con successo e un elenco di errori per i contatti che non è stato possibile creare (es. email duplicata, dati non validi).
Nota: le liste e i tag utilizzati nelle importazioni in blocco non devono essere collegati ad alcun flusso di lavoro di automazione attivo. In tal caso, l'intera importazione viene rifiutata con HTTP 406.
Scope OAuth : contacts:write
Corpo della richiesta (application/json)
Esempio
[
{
"email": "[email protected]",
"lists": [
{
"id": 101
}
],
"custom_fields": [
{
"id": 1,
"value": "Alice"
}
]
},
{
"email": "[email protected]",
"lists": [
{
"id": 101
}
],
"custom_fields": [
{
"id": 1,
"value": "Bob"
}
]
}
]
Risposte
| Codice | Descrizione |
|---|---|
200 | Importazione in blocco completata (controlla l'array errors per i fallimenti parziali) |
400 | Input non valido |
401 | Token non valido o scaduto |
406 | Violazione di una regola business (es. conflitto di automazione, limite di lista raggiunto) |
Esempio 200
{
"Added": [
{
"Email": "[email protected]",
"Id": "550e8400-e29b-41d4-a716-446655440000"
},
{
"Email": "[email protected]",
"Id": "660e8400-e29b-41d4-a716-446655440001"
}
],
"Errors": []
}
/Contact/{id}Ottieni un contatto
Restituisce i dettagli di un contatto specifico. Utilizza includeTags=true per restituire anche i tag assegnati al contatto. Utilizza includeLists=true per restituire anche le liste a cui appartiene il contatto.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | string (uuid) | sì | UUID del contatto (da POST /Contact o GET /List/{id}/Contact) |
includeTags | query | boolean | Imposta a true per includere le assegnazioni di tag del contatto nella risposta | |
includeLists | query | boolean | Imposta a true per includere le appartenenze alle liste del contatto nella risposta |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatto restituito con successo |
401 | Token non valido o scaduto |
404 | Contatto non trovato |
Esempio 200
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"email": "[email protected]",
"phone_number": "41791234567",
"custom_fields": [
{
"id": 1,
"value": "Alice"
},
{
"id": 2,
"value": "Dupont"
}
],
"tags": [
{
"id": 5
}
],
"lists": [
{
"id": 101
}
]
}
/Contact/{id}Aggiorna un contatto
Aggiorna l'email, il numero di telefono, i campi personalizzati, le assegnazioni a liste e i tag di un contatto. Il corpo della richiesta sostituisce i dati correnti del contatto — includi tutte le liste e i tag a cui vuoi che il contatto rimanga assegnato.
Obbligatori nel corpo: email e almeno una voce lists.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | string (uuid) | sì | UUID del contatto |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email | string | sì | Indirizzo email del contatto (obbligatorio, deve essere univoco) |
phone_number | string | Numero di telefono — accetta +41…, 0041… o 41… con o senza separatori.
Deve iniziare con un prefisso internazionale valido. Massimo 12 cifre su Contact (vedi
Formato del numero di telefono nella descrizione dell'API per le regole complete).
| |
lists | array of ListRef | sì | Liste a cui assegnare questo contatto. È richiesta almeno una lista. |
tags | array of TagRef | Tag da assegnare a questo contatto (opzionale) | |
custom_fields | array of FieldValue | Valori dei campi personalizzati per questo contatto (opzionale) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatto aggiornato con successo |
401 | Token non valido o scaduto |
404 | Contatto non trovato |
422 | Errore di validazione (formato email, numero di telefono, incompatibilità del tipo di valore del campo) |
Esempio 200
{
"Result": "Successful operation"
}
/Contact/{id}Elimina un contatto
Elimina definitivamente un contatto dal CRM.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | string (uuid) | sì | UUID del contatto |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatto eliminato con successo |
401 | Token non valido o scaduto |
404 | Contatto non trovato |
/Contact/{id}/ActivityAttività di un contatto su 90 giorni
Email ricevute, aperte e cliccate, client di posta preferito e ultime campagne del contatto.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | string (uuid) | sì | GUID del contatto |
Risposte
| Codice | Descrizione |
|---|---|
200 | Attività restituita |
401 | Token non valido o scaduto |
404 | Il contatto richiesto non esiste |
Esempio 200
{
"period_days": 90,
"email_received": 12,
"email_opened": 7,
"email_clicked": 2,
"favorite_email_client": "Gmail",
"last_campaigns": [
{
"id": 5001,
"name": "Spring Sale 2026",
"date": "2026-10-01T09:00:00"
}
]
}
/Contact/{id}/Tag/{tagid}Aggiungi tag al contatto
Assegna un tag a un contatto. Se il tag è già assegnato, l'operazione è inefficace.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | string (uuid) | sì | UUID del contatto |
tagid | path | integer (int64) | sì | ID del tag (da GET /Tag) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Tag assegnato con successo |
401 | Token non valido o scaduto |
404 | Contatto o tag non trovato |
/Contact/{id}/Tag/{tagid}Rimuovi tag dal contatto
Rimuove l'assegnazione di un tag da un contatto.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | string (uuid) | sì | UUID del contatto |
tagid | path | integer (int64) | sì | ID del tag |
Risposte
| Codice | Descrizione |
|---|---|
200 | Tag rimosso con successo |
401 | Token non valido o scaduto |
404 | Contatto o tag non trovato |
/Contact/{id}/List/{listid}Aggiungi contatto alla lista
Aggiunge un contatto a una lista specifica. Restituisce HTTP 404 se il contatto era precedentemente disiscritto da questa lista.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | string (uuid) | sì | UUID del contatto |
listid | path | integer (int64) | sì | ID della lista (da GET /List) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatto aggiunto alla lista con successo |
401 | Token non valido o scaduto |
404 | Contatto, lista non trovata oppure contatto disiscritto da questa lista |
/Contact/{id}/List/{listid}Rimuovi contatto dalla lista
Rimuove un contatto da una lista specifica. Il contatto stesso non viene eliminato.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | string (uuid) | sì | UUID del contatto |
listid | path | integer (int64) | sì | ID della lista |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatto rimosso dalla lista con successo |
401 | Token non valido o scaduto |
404 | Contatto o lista non trovata |
Gestisci le liste di contatti. Le liste raggruppano i contatti per campagne e segmentazione. Massimo 1.000 liste per account (stesso limite sulle tre API Mailpro e nell'app). Massimo 1.000.000 di contatti per lista.
/ListElenca le liste di contatti
Restituisce tutte le liste di contatti per l'account. Filtra per nome o data di creazione. Ordina alfabeticamente con sortByName=true. Includi il conteggio totale dei contatti per lista con includeTotalContacts=true.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
name | query | string | Filtra per nome della lista (corrispondenza parziale) | |
dateCreationFrom | query | string (date-time) | Filtra per data di creazione (da, ISO 8601) | |
dateCreationTo | query | string (date-time) | Filtra per data di creazione (a, ISO 8601) | |
numberOfRecords | query | integer | Elementi per pagina — 5.000 predefiniti e al massimo | |
pageNumber | query | integer | Numero di pagina con base 1 | |
sortByName | query | boolean | Imposta a true per ordinare alfabeticamente per nome | |
includeTotalContacts | query | boolean | Imposta a true per includere il conteggio total_contacts in ogni risultato |
Risposte
| Codice | Descrizione |
|---|---|
200 | Liste restituite con successo |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id": 101,
"name": "Newsletter subscribers",
"total_contacts": 4521,
"date_creation": "2025-01-15T10:30:00"
}
]
/ListCrea una lista di contatti
Crea una nuova lista di contatti. Massimo 1.000 liste per account.
Scope OAuth : contacts:write
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome visualizzato per la lista |
Esempio
{
"name": "Spring Campaign 2026"
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Lista creata con successo |
401 | Token non valido o scaduto |
406 | Limite di liste (1.000) raggiunto |
Esempio 200
{
"id": 102,
"name": "Spring Campaign 2026",
"date_creation": "2026-04-14T12:00:00"
}
/List/{id}Ottieni una lista di contatti
Restituisce i dettagli di una lista di contatti specifica.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID della lista |
Risposte
| Codice | Descrizione |
|---|---|
200 | Lista restituita con successo |
401 | Token non valido o scaduto |
404 | Lista non trovata |
/List/{id}Aggiorna una lista di contatti
Rinomina una lista di contatti esistente.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID della lista |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome visualizzato per la lista |
Esempio
{
"name": "Newsletter subscribers — Europe"
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Lista aggiornata con successo |
401 | Token non valido o scaduto |
404 | Lista non trovata |
/List/{id}Elimina una lista di contatti
Elimina definitivamente una lista di contatti. I contatti stessi non vengono eliminati — viene rimossa solo la loro appartenenza a questa lista. Le liste utilizzate da flussi di lavoro di automazione attivi non possono essere eliminate.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID della lista |
Risposte
| Codice | Descrizione |
|---|---|
200 | Lista eliminata con successo |
401 | Token non valido o scaduto |
404 | Lista non trovata |
406 | La lista è utilizzata da un flusso di lavoro di automazione attivo |
/List/{id}/ContactElenca i contatti in una lista
Restituisce i contatti appartenenti a una lista specifica. Filtra per email o data di aggiunta. Includi i tag e le appartenenze alle liste con i flag corrispondenti.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID della lista |
email | query | string | Filtra per email (corrispondenza parziale) | |
numberOfRecords | query | integer | Elementi per pagina — 5.000 predefiniti e al massimo | |
pageNumber | query | integer | ||
sortByEmail | query | boolean | Ordina alfabeticamente per email | |
includeTags | query | boolean | Includi le assegnazioni di tag nei risultati | |
includeLists | query | boolean | Includi le appartenenze alle liste nei risultati |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatti restituiti con successo |
401 | Token non valido o scaduto |
404 | Lista non trovata o nessun contatto corrisponde ai criteri |
/List/{listId}/UnsubscribersElenca i disiscritti
Restituisce i contatti che si sono disiscritti da una lista specifica.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
listId | path | integer (int64) | sì | ID della lista |
Risposte
| Codice | Descrizione |
|---|---|
200 | Disiscritti restituiti con successo |
401 | Token non valido o scaduto |
404 | Lista non trovata |
Gestisci i tag per l'etichettatura e la segmentazione dei contatti. I tag sono etichette piatte (es. "VIP", "Churned", "B2B"). Massimo 1.000 tag per account.
/TagElenca i tag
Restituisce tutti i tag per l'account.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
name | query | string | Filtra per nome (corrispondenza parziale) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer | ||
sortByName | query | boolean |
Risposte
| Codice | Descrizione |
|---|---|
200 | Tag restituiti con successo |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id": 5,
"name": "VIP customers"
},
{
"id": 6,
"name": "Newsletter openers"
}
]
/TagCrea un tag
Crea un nuovo tag. Massimo 1.000 tag per account.
Scope OAuth : contacts:write
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome visualizzato per il tag |
Esempio
{
"name": "VIP customers"
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Tag creato con successo |
401 | Token non valido o scaduto |
406 | Limite di tag (1.000) raggiunto |
/Tag/{id}Ottieni un tag
Restituisce un tag specifico tramite il suo ID.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID del tag |
Risposte
| Codice | Descrizione |
|---|---|
200 | Tag restituito con successo |
401 | Token non valido o scaduto |
404 | Tag non trovato |
/Tag/{id}Aggiorna un tag
Rinomina un tag esistente.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome visualizzato per il tag |
Esempio
{
"name": "VIP customers — updated"
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Tag aggiornato con successo |
401 | Token non valido o scaduto |
404 | Tag non trovato |
/Tag/{id}Elimina un tag
Elimina definitivamente un tag. Il tag viene rimosso da tutti i contatti. I tag utilizzati da flussi di lavoro di automazione attivi non possono essere eliminati.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Tag eliminato con successo |
401 | Token non valido o scaduto |
404 | Tag non trovato |
406 | Il tag è utilizzato da un flusso di lavoro di automazione attivo |
/Tag/{id}/ContactElenca i contatti con un tag
Restituisce i contatti a cui è stato assegnato un tag specifico.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID del tag |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatti restituiti con successo |
401 | Token non valido o scaduto |
404 | Tag non trovato |
Gestisci i campi personalizzati dei contatti. I campi ti permettono di memorizzare dati aggiuntivi su ogni contatto (es. nome, città, livello di fedeltà). Massimo 50 campi per account. Tipi di campo: text, number, date.
/FieldElenca i campi personalizzati
Restituisce tutti i campi personalizzati dei contatti definiti per l'account. Utilizza i valori id restituiti durante la creazione o l'aggiornamento dei contatti.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
name | query | string | Filtra per nome del campo | |
idFieldType | query | integer | Filtra per ID del tipo di campo | |
numberOfRecords | query | integer | ||
pageNumber | query | integer | ||
sortByName | query | boolean |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campi personalizzati restituiti con successo |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id": 1,
"name": "first_name",
"personalisation_key": "first_name",
"field_type": "text"
},
{
"id": 2,
"name": "last_name",
"personalisation_key": "last_name",
"field_type": "text"
}
]
/FieldCrea un campo personalizzato
Crea un nuovo campo personalizzato per i contatti. Massimo 50 campi per account. Utilizza l'id restituito quando assegni valori ai contatti.
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome visualizzato del campo |
id_field_type | integer | sì | ID del tipo di campo (tipi disponibili tramite GET /Field/Types):
- 1 = testo
- 2 = numero intero
- 3 = data e ora
- 4 = sì / no
- 12 = numero decimale
|
personalize_key | string | sì | Chiave di variabile del modello, per inserire il campo in un messaggio |
sort | integer | Ordine di visualizzazione (da 0 a 255). Obbligatorio per modificare un campo (PUT /Field/{id}). |
Esempio
{
"name": "First name",
"id_field_type": 1,
"personalize_key": "first_name"
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Campo creato con successo |
401 | Token non valido o scaduto |
406 | Limite di campi (50) raggiunto |
/Field/TypesElenca i tipi di campo
Restituisce gli identificatori dei tipi di campo disponibili da utilizzare durante la creazione di un campo personalizzato. Tipi comuni: 1 = text, 2 = number, 3 = date.
Risposte
| Codice | Descrizione |
|---|---|
200 | Tipi di campo restituiti con successo |
401 | Token non valido o scaduto |
/Field/{id}Ottieni un campo personalizzato
Restituisce la definizione e i metadati di un campo personalizzato specifico.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID del campo |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campo restituito con successo |
401 | Token non valido o scaduto |
404 | Campo non trovato |
/Field/{id}Aggiorna un campo personalizzato
Aggiorna il nome o la chiave di personalizzazione di un campo personalizzato.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | sì | Nome visualizzato del campo |
id_field_type | integer | sì | ID del tipo di campo (tipi disponibili tramite GET /Field/Types):
- 1 = testo
- 2 = numero intero
- 3 = data e ora
- 4 = sì / no
- 12 = numero decimale
|
personalize_key | string | sì | Chiave di variabile del modello, per inserire il campo in un messaggio |
sort | integer | Ordine di visualizzazione (da 0 a 255). Obbligatorio per modificare un campo (PUT /Field/{id}). |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campo aggiornato con successo |
401 | Token non valido o scaduto |
404 | Campo non trovato |
/Field/{id}Elimina un campo personalizzato
Elimina definitivamente un campo personalizzato e rimuove il suo valore da tutti i contatti. Questa azione non può essere annullata.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campo eliminato con successo |
401 | Token non valido o scaduto |
404 | Campo non trovato |
Visualizza le statistiche delle campagne e gestisci le campagne programmate. Le campagne possono essere modificate o eliminate fino a 5 minuti prima dell'orario di invio programmato.
/CampaignElenca le campagne
Restituisce un elenco paginato delle campagne email per l'account.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campagne restituite con successo |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id": 8001,
"title": "Spring Newsletter April 2026",
"date_planned": "2026-04-20T09:00:01",
"count_open": 1823,
"count_sent": 4521,
"count_click": 342,
"count_badmail": 12,
"count_unsubscription": 8,
"count_clicking_users": 289,
"count_complaints": 1,
"spam_trap": 0,
"deliverability_score": 98
}
]
/Campaign/{id}Ottieni una campagna
Restituisce la configurazione e il riepilogo delle statistiche di una campagna specifica.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campagna restituita con successo |
401 | Token non valido o scaduto |
404 | Campagna non trovata |
/Campaign/{id}Aggiorna una campagna
Aggiorna il titolo o la data di invio di una campagna programmata. Le campagne possono essere modificate solo fino a 5 minuti prima dell'orario di invio programmato.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
campaign_title | string | Nome visualizzato per la campagna | |
date_planned | string (date-time) | Orario di invio programmato (ISO 8601). Ometti per inviare immediatamente. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campagna aggiornata con successo |
401 | Token non valido o scaduto |
404 | Campagna non trovata |
/Campaign/{id}Elimina una campagna
Annulla ed elimina definitivamente una campagna tramite il suo identificatore.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campagna eliminata con successo |
401 | Token non valido o scaduto |
404 | Campagna non trovata |
/Campaign/ScheduledElenca le mie campagne programmate
Restituisce le campagne con date_planned nel futuro che non sono ancora state inviate. Ordinate per date_planned crescente.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Elenco delle campagne programmate |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id": 5001,
"id_client": 12345,
"subject": "Spring Sale 2026",
"date_planned": "2026-05-01T09:00:00",
"title": "Spring Sale",
"id_campaign": 7001,
"id_list": 101,
"id_segment": null,
"number_email": 1250
}
]
/Campaign/{id}/CancelAnnulla una campagna programmata
Annulla una campagna programmata nel futuro. Restituisce 409 Conflict se la campagna è già stata inviata o non esiste.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campagna annullata |
401 | Token non valido o scaduto |
409 | Già inviata o non trovata |
Esempio 200
{
"result": "ok",
"cancelled": 5001
}
/Campaign/{id}/RescheduleRiprogramma una campagna programmata
Aggiorna la data di invio pianificata di una campagna programmata. La nuova data deve essere nel futuro ed entro 90 giorni.
Nome del campo nel corpo: l'API accetta date_planned (snake_case, primario) nonché gli alias legacy PlanDate e scheduled_time. Fornisci uno qualsiasi di essi — viene utilizzato il primo non-null.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
date_planned | string (date-time) | Nome del campo primario. | |
PlanDate | string (date-time) | Alias legacy accettato per retrocompatibilità. | |
scheduled_time | string (date-time) | Alias legacy accettato per retrocompatibilità. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Campagna riprogrammata |
400 | Data mancante — fornisci uno tra date_planned / PlanDate / scheduled_time |
401 | Token non valido o scaduto |
409 | Già inviata |
Esempio 200
{
"result": "ok",
"id": 5001,
"date_planned": "2026-12-31T14:30:00"
}
/Campaign/{id}/ByHourStatistiche per ora
Restituisce la suddivisione oraria di aperture e clic per la campagna.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Statistiche orarie restituite con successo |
401 | Token non valido o scaduto |
/Campaign/{id}/ByDayStatistiche per giorno
Restituisce la suddivisione giornaliera di aperture e clic per la campagna.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Statistiche giornaliere restituite con successo |
401 | Token non valido o scaduto |
/Campaign/{id}/OpeningsElenca le aperture email
Restituisce un elenco paginato dei contatti che hanno aperto l'email della campagna.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | |
email | query | string | Filtra per email del destinatario | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Elenco aperture restituito con successo |
401 | Token non valido o scaduto |
/Campaign/{id}/ClicksElenca i clic sui link
Restituisce un elenco paginato dei contatti che hanno cliccato un link nella campagna.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | |
email | query | string | ||
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Elenco clic restituito con successo |
401 | Token non valido o scaduto |
/Campaign/{id}/HardBouncesElenca gli hard bounce
Restituisce gli indirizzi email che hanno subito hard bounce durante questa campagna.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | |
email | query | string | ||
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Elenco hard bounce restituito con successo |
401 | Token non valido o scaduto |
/Campaign/{id}/LinksElenca i link tracciati
Restituisce i dati sulle prestazioni dei clic per ogni link tracciato nella campagna.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | |
link | query | string | Filtra per URL del link (corrispondenza parziale) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Statistiche dei link restituite con successo |
401 | Token non valido o scaduto |
/Campaign/{id}/OSStatistiche per OS / dispositivo
Restituisce la suddivisione di aperture e clic per sistema operativo e tipo di dispositivo.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Statistiche OS restituite con successo |
401 | Token non valido o scaduto |
/Campaign/{id}/EmailClientsStatistiche per client email
Restituisce la suddivisione delle aperture per client email (Gmail, Outlook, Apple Mail…).
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Statistiche del client email restituite con successo |
401 | Token non valido o scaduto |
/Campaign/{id}/CountriesStatistiche per paese
Restituisce la distribuzione geografica di aperture e clic.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Statistiche per paese restituite con successo |
401 | Token non valido o scaduto |
Invia campagne email in blocco (a liste di contatti) e singole email transazionali. Le campagne possono essere programmate o inviate immediatamente.
/Send/MailInvia email transazionale
Invia un'email transazionale una tantum a un singolo destinatario.
Destinatario: fornisci email (indirizzo inline) O id_contact (contatto CRM) — non entrambi. L'uso di id_contact abilita la personalizzazione automatica con i valori dei campi personalizzati del contatto.
Contenuto: fornisci body_html (HTML inline) O id_message (modello salvato) — non entrambi. Se sono forniti entrambi, id_message ha la precedenza.
Obbligatori: id_sender_email, subject e uno tra (email o id_contact), e uno tra (body_html o id_message).
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_sender_email | integer | ID dell'indirizzo email del mittente (da GET /SenderEmail). Obbligatorio. | |
email | string | Indirizzo email del destinatario (inline). Fornisci questo OPPURE id_contact.
Se vengono forniti entrambi, id_contact ha la precedenza.
La parte locale (prima della @) accetta lettere, cifre e . _ - + —
incluso il sub-addressing RFC 5322 (user+tag@domain, es. Gmail, Fastmail,
Proton). Gli altri caratteri speciali consentiti dalla RFC 5322
(es. ! # $ % & ' * / = ? ^ { | } ~) e le parti locali tra virgolette non
sono accettati.
| |
id_contact | string (uuid) | ID del contatto CRM destinatario. Fornisci questo O email.
L'uso di id_contact abilita la personalizzazione con i valori dei campi personalizzati del contatto.
| |
subject | string | Oggetto dell'email (massimo 255 caratteri). Obbligatorio. | |
body_html | string | Contenuto HTML inline. Fornisci questo O id_message.
Se entrambi sono indicati, id_message ha la precedenza.
| |
id_message | integer | ID di un modello di messaggio salvato (da GET /Message).
Fornisci questo O body_html.
| |
reply_to | string | Indirizzo di risposta (predefinito all'indirizzo del mittente) | |
fields | array of FieldValue | Campi di personalizzazione personalizzati (usati solo con email inline, non con id_contact) | |
date_planned | string (date-time) | Programma l'invio per un orario futuro. Ometti per inviare immediatamente. | |
attachments | array of EmailAttachment | Allegati facoltativi (max 5). Ogni elemento è un oggetto con un filename e un content codificato in Base64. Limiti: 10 MB per file e 15 MB in totale, misurati dopo la decodifica Base64. Tipi accettati: PDF, Word, Excel, PowerPoint, immagini (JPG, PNG, GIF, WebP), ZIP, CSV, TXT — i file eseguibili e gli script vengono rifiutati. Fatturazione: l'invio mantiene il suo credito abituale, più 1 credito ogni 512 KB di allegati oltre i primi 512 KB (gli allegati ≤ 512 KB non aggiungono nulla). | |
keep_in_my_files | boolean | false (predefinito): gli allegati servono solo per questo invio — sono archiviati fuori dal tuo
account, non contano nella tua quota di archiviazione e vengono eliminati automaticamente dopo
35 giorni. true: gli allegati vengono anche conservati nei file del tuo account (cartella
Secure/Files/Sending/api) e contano nella tua quota di archiviazione.
|
Esempio
{
"id_sender_email": 201,
"email": "[email protected]",
"subject": "Your order #12345 has shipped",
"body_html": "<p>Hello {{first_name}}, your order is on its way!</p>",
"reply_to": "[email protected]",
"fields": [
{
"id": 1,
"value": "Alice"
}
],
"attachments": [
{
"filename": "invoice.pdf",
"content": "JVBERi0xLjQKJVBERi0xLjQK..."
}
]
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Email inviata o programmata con successo |
400 | Formato email non valido o campo obbligatorio mancante |
401 | Token non valido o scaduto |
404 | Mittente, messaggio o contatto non trovato; oppure destinatario disiscritto |
422 | Errore di validazione (oggetto troppo lungo, body e message entrambi vuoti, ecc.) |
Esempio 200
{
"message": "Successful operation",
"id_single_send": 8001
}
Esempio 404
{
"Message": "Not enough credit available"
}
/Send/{id}/StatusOttieni lo stato di consegna di un'email transazionale
Restituisce lo stato di consegna attuale di un'email transazionale inviata con POST /Send/Mail. Passa l'id_single_send restituito da quella chiamata.
Valori possibili: delivered (accettata dal server del destinatario, vedi diag_code), bounced (rifiutata — bounce_type: hard indirizzo non valido o rifiuto definitivo, soft rifiuto dopo nuovi tentativi), sent (consegnata al server di posta, ancora nessuna risposta), scheduled (non ancora inviata, date_planned nel futuro) e queued (in attesa di invio). delivered e bounced sono finali: smettete di interrogare. Ogni email ha uno stato finale al più tardi 48 ore dopo l'invio; interrogate al massimo ogni 15 minuti (ogni chiamata conta nella vostra quota API) oppure usate i webhook email.delivered / email.bounced. Solo il cliente che ha inviato l'email può leggerne lo stato — qualsiasi altro id restituisce 404.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | L'id_single_send restituito da POST /Send/Mail. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Stato di consegna attuale |
401 | Token non valido o scaduto |
404 | Nessun invio transazionale trovato con questo id per questo cliente |
Esempio 200
{
"id_single_send": 8001,
"email": "[email protected]",
"status": "delivered",
"date_planned": "2026-04-15T14:30:00",
"status_date": "2026-04-15T14:30:07",
"diag_code": "2.0.0 (success)",
"bounce_type": null
}
/Send/CampaignInvia campagna email
Invia una campagna email in blocco a una o più liste di contatti.
Obbligatori:
id_message — il modello da inviare (da GET /Message)id_sender_email — l'indirizzo del mittente (da GET /SenderEmail)lists — almeno una lista di contatti targetcampaign_title — etichetta per il tracciamento delle statisticheSegmento: opzionalmente filtra i destinatari tramite un segmento salvato (id_segment). Il segmento filtra i contatti all'interno delle liste specificate.
Programmazione: imposta date_planned a una data/ora ISO 8601 futura. Le campagne possono essere modificate o annullate fino a 5 minuti prima dell'orario programmato.
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_message | integer | sì | ID del modello di messaggio da utilizzare (da GET /Message) |
id_sender_email | integer | sì | ID dell'indirizzo del mittente (da GET /SenderEmail) |
id_email_reply_to | integer | ID dell'indirizzo del mittente di risposta (da GET /SenderEmail). Deve essere uno degli indirizzi mittente del tuo account, altrimenti la richiesta viene rifiutata. Predefinito: id_sender_email. | |
lists | array of ListRef | sì | Liste di contatti target (almeno una richiesta) |
id_segment | integer | Filtra i destinatari tramite un segmento salvato (opzionale) | |
campaign_title | string | sì | Nome visualizzato per questa campagna (massimo 150 caratteri) |
date_planned | string (date-time) | Orario di invio programmato (ISO 8601). Ometti per inviare immediatamente. | |
id_automation | integer | Collega questo invio a un flusso di lavoro di automazione (opzionale) |
Esempio
{
"id_message": 501,
"id_sender_email": 201,
"lists": [
{
"id": 101
}
],
"campaign_title": "Spring Newsletter April 2026",
"date_planned": "2026-04-20T09:00:00"
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Campagna programmata o inviata con successo |
401 | Token non valido o scaduto |
402 | Crediti insufficienti |
404 | Messaggio, mittente, lista o segmento non trovato; oppure crediti insufficienti |
422 | Titolo della campagna vuoto o troppo lungo (massimo 150 caratteri) |
Esempio 200
{
"Message": "Successful operation. Campaigns can be edited or deleted until 5 minutes prior to send.",
"IdCampaign": 8001
}
/SendElenca gli invii programmati
Restituisce l'elenco delle campagne email in attesa di essere inviate (programmate, non ancora elaborate).
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
subjectMessage | query | string | Filtra per oggetto (corrispondenza parziale) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Invii in attesa restituiti con successo |
401 | Token non valido o scaduto |
/Send/{id}Annulla un invio programmato
Annulla ed elimina un invio email programmato che non è ancora stato elaborato. Non è possibile annullare gli invii attualmente in fase di elaborazione.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID dell'invio (da GET /Send) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Invio programmato annullato con successo |
401 | Token non valido o scaduto |
404 | Invio programmato non trovato |
/Send/Mail/ScheduledElenca le email singole pianificate
Restituisce le email singole inviate con POST /Send/Mail e una data futura, non ancora partite. Le campagne sono elencate da GET /Campaign/Scheduled.
Scope OAuth : email:send
Risposte
| Codice | Descrizione |
|---|---|
200 | Email pianificate restituite |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id_single_send": 880123,
"email": "[email protected]",
"subject": "Your invoice",
"date_planned": "2026-12-01T09:00:00"
}
]
/Send/Mail/{id}/CancelAnnulla un'email singola pianificata
Annulla l'email finché non è partita.
Scope OAuth : email:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | id_single_send restituito da POST /Send/Mail |
Risposte
| Codice | Descrizione |
|---|---|
200 | Email annullata |
401 | Token non valido o scaduto |
409 | Invio non trovato o già partito |
Esempio 200
{
"result": "ok",
"cancelled": 880123
}
/Send/Mail/{id}/RescheduleRipianifica un'email singola pianificata
Cambia la data di invio. La nuova data deve essere futura ed entro 90 giorni. È accettato anche POST.
Scope OAuth : email:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | id_single_send restituito da POST /Send/Mail |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
date_planned | string (date-time) | sì | Nuova data di invio (ISO 8601) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Email ripianificata |
400 | Data mancante |
401 | Token non valido o scaduto |
409 | Invio non trovato, già partito o data fuori dai limiti |
Esempio 200
{
"result": "ok",
"id": 880123,
"date_planned": "2026-12-15T09:00:00"
}
Gestisci gli indirizzi email mittenti convalidati. Solo gli indirizzi verificati possono essere usati come From.
/SenderEmailElenca gli indirizzi mittente
Restituisce gli indirizzi email mittenti validati configurati per l'account.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Indirizzi mittente restituiti con successo |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id": 201,
"email": "[email protected]",
"sender_name": "Your Company Newsletter",
"is_validated": true
}
]
/SenderEmailAggiungi un indirizzo mittente
Aggiunge l'indirizzo con gli stessi controlli dell'applicazione e gli invia un'email di convalida. È utilizzabile dopo aver cliccato il link in quell'email. Un account può avere fino a 25 mittenti, convalidati o in attesa.
Scope OAuth : email:templates:write
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email | string | sì | Indirizzo del mittente |
sender_name | string | sì | Nome mostrato ai destinatari |
Risposte
| Codice | Descrizione |
|---|---|
200 | Indirizzo aggiunto. domain_has_mx è false quando il dominio non ha un record MX. |
400 | email o sender_name mancante |
401 | Token non valido o scaduto |
422 | Indirizzo rifiutato: non valido, già tra i mittenti dell'account, dominio di posta pubblico, nome vietato o limite di 25 raggiunto. Il messaggio indica il motivo. |
503 | Temporaneamente non disponibile, riprova |
Esempio 200
{
"result": "ok",
"confirmation_sent": true,
"domain_has_mx": true
}
/SenderEmail/{id}/ResendValidationInvia di nuovo l'email di convalida
Per un indirizzo ancora in attesa di convalida.
Scope OAuth : email:templates:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer | sì | id_sender_email da GET /SenderEmail |
Risposte
| Codice | Descrizione |
|---|---|
200 | Email inviata di nuovo |
401 | Token non valido o scaduto |
404 | Mittente non trovato |
409 | Questo mittente è già convalidato |
503 | Temporaneamente non disponibile, riprova |
Esempio 200
{
"result": "ok",
"confirmation_sent": true
}
/SenderEmail/{id}/AuthenticationControlla il dominio di un mittente (SPF, DKIM, DMARC, MX)
Controlla il dominio in tempo reale nel DNS e restituisce i record da pubblicare. Sola lettura. Il DKIM si attiva nell'applicazione: dkim_settings_url apre la schermata giusta.
Scope OAuth : email:templates:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer | sì | id_sender_email da GET /SenderEmail |
Risposte
| Codice | Descrizione |
|---|---|
200 | Stato del dominio. spf.recommended_record è costruito a partire dal tuo record attuale: pubblicalo solo se spf.change_needed è true. |
401 | Token non valido o scaduto |
404 | Mittente non trovato |
503 | Temporaneamente non disponibile, riprova |
Esempio 200
{
"domain": "example.com",
"spf": {
"valid": true,
"record": "v=spf1 include:spf.mailpro.com -all",
"recommended_record": "v=spf1 include:spf.mailpro.com -all",
"change_needed": false
},
"dkim": {
"valid": true,
"records": [
{
"host": "key._domainkey.example.com",
"value": "v=DKIM1;k=rsa;p=MIIBIjANBgkq...",
"validated": true
}
]
},
"dmarc": {
"valid": true,
"record": "v=DMARC1; p=quarantine"
},
"mx": {
"valid": true,
"record": "mail.example.com"
},
"dkim_settings_url": "https://app.mailpro.com/dkim/list?d=example.com"
}
Sfoglia il registro degli invii email e SMS passati.
/History/EmailElenca lo storico degli invii email
Restituisce il registro degli invii email passati per l'account.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
subjectMessage | query | string | Filtra per oggetto (corrispondenza parziale) | |
idCampaign | query | integer | Filtra per ID campagna | |
includeBodyHTML | query | boolean | Includi il corpo HTML completo nella risposta (più lento) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Storico email restituito con successo |
401 | Token non valido o scaduto |
/History/SMSElenca lo storico degli invii SMS
Restituisce il registro degli invii SMS passati per l'account.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
dateSend | query | string (date-time) | Filtra da questa data (ISO 8601) | |
dateSendEnd | query | string (date-time) | Filtra fino a questa data (ISO 8601) | |
phoneNumber | query | string | Filtra per telefono del destinatario (parziale) | |
type | query | integer | Filtro per tipo di SMS | |
statusCode | query | integer | Filtro per codice di stato DLR | |
sortByStatus | query | boolean | ||
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Storico SMS restituito con successo |
401 | Token non valido o scaduto |
Gestisci i segmenti dinamici — regole di filtro salvate che selezionano automaticamente i contatti in base ai valori dei campi, al comportamento o all'appartenenza alla lista.
/SegmentElenca i segmenti
Restituisce tutti i segmenti dinamici salvati per l'account.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Segmenti restituiti con successo |
401 | Token non valido o scaduto |
/Segment/{id}/ContactElenca i contatti di un segmento
Con id_list, restituisce solo i contatti di quella lista presenti nel segmento: quelli che una campagna lista + segmento raggiungerebbe. Il totale è nell'intestazione X-Total-Count.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID del segmento |
id_list | query | integer (int64) | Limita a questa lista (facoltativo) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatti restituiti |
401 | Token non valido o scaduto |
404 | Segmento o lista non trovati |
/Segment/{id}/CountConta i contatti di un segmento
Solo il numero, per conoscere in anticipo la dimensione di un invio. Con id_list, conta solo i contatti di quella lista presenti nel segmento.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID del segmento |
id_list | query | integer (int64) | Limita a questa lista (facoltativo) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Numero di contatti |
401 | Token non valido o scaduto |
404 | Segmento o lista non trovati |
Esempio 200
{
"total": 1250
}
/Segment/{id}/contact/{contactId}/checkVerifica se un contatto corrisponde a un segmento
Verifica se un contatto specifico (tramite GUID) corrisponde attualmente alle regole di un determinato segmento. Utile per attivare la logica di automazione su richiesta.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID del segmento |
contactId | path | string (uuid) | sì | GUID del contatto |
Risposte
| Codice | Descrizione |
|---|---|
200 | Restituisce il risultato della corrispondenza |
401 | Token non valido o scaduto |
404 | Segmento o contatto non trovato |
Invia messaggi SMS a singoli contatti o a intere liste di contatti. Utilizza il campo phone_number di ogni contatto.
/Sms/SingleSMSInvia singolo SMS
Invia un singolo SMS direttamente a un numero di telefono. Utilizzalo per messaggi transazionali (OTP, conferme d'ordine, avvisi). Il numero di telefono accetta +41…, 0041… o 41… con o senza separatori — vedi Formato del numero di telefono nella descrizione dell'API per gli input accettati / rifiutati.
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
phone_number | string | sì | Numero di telefono del destinatario — accetta +41…, 0041… o 41… con o senza separatori. Vedi Formato del numero di telefono nella descrizione dell'API. |
message | string | sì | Testo del messaggio SMS (massimo 160 caratteri per la codifica standard) |
date_planned | string (date-time) | Programma l'invio. Ometti per inviare immediatamente. |
Esempio
{
"phone_number": "+41791234567",
"message": "Your verification code is 9473. Valid for 10 minutes."
}
Risposte
| Codice | Descrizione |
|---|---|
200 | SMS inviato o programmato con successo |
401 | Token non valido o scaduto |
422 | Formato del numero di telefono non valido |
/Sms/CampaignInvia campagna SMS
Invia un messaggio SMS al campo phone_number di tutti i contatti in una o più liste. I contatti senza un numero di telefono vengono saltati.
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
lists | array of ListRef | sì | Liste di contatti target (utilizza il campo phone_number di ogni contatto) |
message | string | sì | Testo del messaggio SMS |
date_planned | string (date-time) | Programma l'invio. Ometti per inviare immediatamente. |
Esempio
{
"lists": [
{
"id": 101
}
],
"message": "Flash sale today — 20% off. Shop at mailpro.com",
"date_planned": "2026-04-20T10:00:00"
}
Risposte
| Codice | Descrizione |
|---|---|
200 | Campagna SMS inviata o programmata con successo |
401 | Token non valido o scaduto |
/SmsElenca lo storico SMS
Restituisce il registro degli invii SMS (sia singoli che di campagna) per l'account.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Storico SMS restituito con successo |
401 | Token non valido o scaduto |
/Sms/{id}Annulla un SMS programmato
Annulla un invio SMS programmato in attesa.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | ID dell'invio SMS |
Risposte
| Codice | Descrizione |
|---|---|
200 | SMS programmato annullato con successo |
401 | Token non valido o scaduto |
404 | Invio SMS non trovato |
/Sms/ScheduledElenca gli invii SMS programmati
Restituisce gli invii SMS con una date_planned futura (non ancora inviati), ordinati per data crescente.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Invii SMS programmati restituiti con successo |
401 | Token non valido o scaduto |
/Sms/{id}/CancelAnnulla un SMS programmato
Annulla un invio SMS programmato solo se non è ancora stato inviato.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer | sì | ID dell'invio SMS |
Risposte
| Codice | Descrizione |
|---|---|
200 | SMS programmato annullato con successo |
401 | Token non valido o scaduto |
409 | Invio SMS non trovato, non di proprietà del client o già inviato |
/Sms/{id}/RescheduleRiprogramma un SMS programmato
Aggiorna la data di invio pianificata di un SMS programmato. La nuova data deve essere nel futuro ed entro 90 giorni. Fallisce se l'SMS è già stato inviato.
Nome del campo nel corpo: l'API accetta date_planned (snake_case, primario) nonché gli alias legacy PlanDate e scheduled_time. Fornisci uno qualsiasi di essi.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer | sì | ID dell'invio SMS |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
date_planned | string (date-time) | Nome del campo primario. | |
PlanDate | string (date-time) | Alias legacy accettato per retrocompatibilità. | |
scheduled_time | string (date-time) | Alias legacy accettato per retrocompatibilità. |
Risposte
| Codice | Descrizione |
|---|---|
200 | SMS programmato riprogrammato con successo |
400 | Data mancante — fornisci uno tra date_planned / PlanDate / scheduled_time |
401 | Token non valido o scaduto |
409 | Riprogrammazione fallita (non trovato, già inviato o data fuori intervallo) |
Organizza i modelli di messaggio in cartelle.
/FolderListElenca le cartelle delle liste
Restituisce le cartelle utilizzate per organizzare le liste di contatti.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
name | query | string | Filtra per nome della cartella (parziale) | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Cartelle delle liste restituite con successo |
401 | Token non valido o scaduto |
/FolderList/{id}Ottieni una singola cartella di liste
Restituisce i dettagli di una cartella di liste tramite il suo ID.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer | sì | ID della cartella |
Risposte
| Codice | Descrizione |
|---|---|
200 | Cartella restituita con successo |
401 | Token non valido o scaduto |
404 | Cartella non trovata |
/FolderMessageElenca le cartelle dei messaggi
Restituisce le cartelle utilizzate per organizzare i modelli di messaggi email.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
name | query | string | Filtra per nome della cartella | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Cartelle dei messaggi restituite con successo |
401 | Token non valido o scaduto |
Carica un file CSV o XLSX per importare contatti in una lista in blocco. Il file viene messo in coda per l'elaborazione asincrona — traccia il completamento tramite l'import_job_id restituito o tramite il callback opzionale webhook_url.
/Import/UploadCarica un file di contatti (CSV / XLSX) per l'importazione in blocco
Carica un file CSV o XLSX per importare contatti in una lista. Il file viene memorizzato e messo in coda per l'elaborazione asincrona — l'endpoint restituisce immediatamente un import_job_id.
Tipo di richiesta: multipart/form-data
Campi del modulo obbligatori:
id_list (intero) — ID della lista di destinazionefile (binario) — il file CSV o XLSX da caricarejson_match_fields (stringa, JSON) — quale colonna del file va in quale campo del contatto. email_position = colonna dell'e-mail, numerata da 0 (obbligatorio), phone_position = colonna del numero di cellulare o -1, fields = ID degli altri campi (vedi GET /Field), fields_position = colonna di ciascuno di essi, update_fields = aggiornare i contatti esistenti. Corrispondenza assente o non valida: risposta 400, nessuna importazione viene creata.Opzionali:
webhook_url (stringa) — URL HTTPS chiamato al termine dell'elaborazione. Riceve un payload JSON con lo stato finale (success / failed) e i conteggi delle righe importate / saltate / non valide.Formato del file:
UTF-8json_match_fieldsCorpo della richiesta (multipart/form-data)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_list | integer (int64) | sì | ID della lista di destinazione |
file | string (binary) | sì | File CSV o XLSX (UTF-8, max 50 MB) |
json_match_fields | string | sì | Corrispondenza JSON tra le colonne del file e i campi del contatto |
webhook_url | string (uri) | URL di callback invocato al termine dell'elaborazione |
Risposte
| Codice | Descrizione |
|---|---|
200 | File accettato e messo in coda |
400 | Nessun file caricato, id_list mancante, oppure json_match_fields assente / non valido |
401 | Token non valido o scaduto |
500 | Errore del server o dell'archiviazione |
Esempio 200
{
"result": "OK",
"import_job_id": 14,
"internal_name": "230575-20260420142615-contacts.csv"
}
Sottoscrivi il tuo server alle notifiche di eventi in tempo reale. Mailpro effettua un POST di un payload JSON firmato HMAC al tuo URL non appena si verifica l'evento sottoscritto. Consulta la sezione "Webhooks" nell'introduzione per il catalogo completo degli eventi, lo schema del payload, gli snippet di verifica della firma e la politica di retry.
/WebhookElenca i webhook
Restituisce ogni webhook configurato sull'account autenticato.
Risposte
| Codice | Descrizione |
|---|---|
200 | Array di webhook |
401 | Token non valido o scaduto |
/WebhookCrea un webhook
Crea una nuova sottoscrizione webhook. La risposta contiene un secret che viene mostrato solo una volta — memorizzalo immediatamente, lato server. Utilizzalo per verificare la firma HMAC di ogni payload in arrivo.
Limiti: massimo 20 webhook per account, massimo 50 eventi per webhook.
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
url | string (uri) | sì | Endpoint HTTPS (HTTP rifiutato in produzione) |
events | array of string | sì | Elenco dei tipi di evento da sottoscrivere (vedi catalogo sopra). Usa ["*"] per sottoscrivere tutti gli eventi di questa API. |
description | string | Descrizione libera per il tuo riferimento |
Esempio
{
"url": "https://example.com/hooks/mailpro",
"events": [
"email.delivered",
"email.bounced",
"contact.created"
],
"description": "Integrazione Slack"
}
Risposte
| Codice | Descrizione |
|---|---|
201 | Webhook creato — il secret viene restituito solo qui |
400 | URL non valido, elenco eventi o limite superato |
401 | Token non valido o scaduto |
Esempio 201
{
"id": 42,
"url": "https://example.com/hooks/mailpro",
"events": [
"email.delivered",
"email.bounced",
"contact.created"
],
"description": "Integrazione Slack",
"isActive": true,
"consecutiveFailures": 0,
"autoDisabledAt": null,
"autoDisabledReason": null,
"createdAt": "2026-05-25T10:00:00Z",
"updatedAt": "2026-05-25T10:00:00Z",
"secret": "whsec_AbcD1234EfgH5678IjkL9012MnoP3456QrsT"
}
/Webhook/{id}Ottieni un webhook
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Il webhook |
404 | Webhook non trovato |
/Webhook/{id}Aggiorna un webhook
Aggiornamento parziale — vengono modificati solo i campi inviati.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
url | string (uri) | ||
events | array of string | ||
description | string | ||
isActive | boolean | Imposta true per riattivare un webhook disabilitato automaticamente una volta corretto il tuo endpoint. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Webhook aggiornato |
400 | Payload non valido |
404 | Webhook non trovato |
/Webhook/{id}Elimina un webhook
Elimina definitivamente il webhook e l'intero storico delle consegne.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
204 | Eliminato |
404 | Webhook non trovato |
/Webhook/{id}/testInvia un evento di test
Mette in coda un evento ping immediato (o qualsiasi altro tipo di evento tramite il campo eventType nel corpo) verso il tuo endpoint. Utile per verificare la raggiungibilità e la verifica della firma prima di affidarsi agli eventi reali.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
eventType | string | Sovrascrivi il tipo di evento (deve essere sottoscritto da questo webhook). ping funziona sempre. |
Esempio
{
"eventType": "ping"
}
Risposte
| Codice | Descrizione |
|---|---|
202 | Evento messo in coda per la spedizione |
404 | Webhook non trovato |
Esempio 202
{
"deliveryId": 1234,
"eventId": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
"eventType": "ping"
}
/Webhook/{id}/rotate-secretRuota il secret HMAC
Genera un nuovo secret HMAC e invalida immediatamente quello vecchio. Il nuovo secret viene restituito una sola volta nella risposta — memorizzalo. Ogni consegna da questo momento in poi sarà firmata con il nuovo secret.
Utilizzalo se sospetti che il tuo secret sia stato compromesso.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Nuovo secret (visibile una sola volta) |
404 | Webhook non trovato |
Esempio 200
{
"secret": "whsec_XyzA9876BcdE5432FghI1098JklM7654NopQ"
}
/Webhook/{id}/deliveriesElenca i tentativi di consegna
Restituisce lo storico dei tentativi di spedizione per questo webhook (retention di 30 giorni). Utile per il debug — quali eventi sono stati inviati, codici di stato ricevuti, numero di tentativi, messaggi di errore.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | |
limit | query | integer | ||
cursor | query | integer (int64) | Cursor di paginazione (= ultimo ID di consegna visto). Restituisce le consegne con id < cursor. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Array dei tentativi di consegna (dal più recente) |
404 | Webhook non trovato |
/Webhook/{id}/deliveries/{deliveryId}/replayRinvia una consegna
Mette in coda un nuovo tentativo di consegna con lo stesso payload dell'originale. Utile per riattivare una consegna fallita dopo aver corretto il tuo endpoint. Viene creata una NUOVA riga Webhook_Delivery (l'originale viene preservata per audit). Il replay segue la politica di retry standard (10s → 1min → 5min → 30min → 2h → 6h → 24h, poi abbandonato).
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | |
deliveryId | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
202 | Replay messo in coda |
404 | Webhook o consegna non trovato |
Bounce e disiscritti dell'account: elencare, aggiungere, rimuovere.
/Suppression/BouncesElenca i bounce dell'account
Prima i più recenti. Il totale è nell'intestazione X-Total-Count.
Scope OAuth : email:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
type | query | string: hard, soft | hard o soft | |
source | query | string | Origine del bounce: list, contact, api o smtp | |
email | query | string | Indirizzo esatto | |
dateFrom | query | string (date-time) | A partire da questa data | |
dateTo | query | string (date-time) | Fino a questa data | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Bounce restituiti |
400 | type deve essere hard o soft |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id": 5521,
"source": "contact",
"type": "hard",
"email": "[email protected]",
"date": "2026-10-12T08:30:00",
"diag_code": "550 5.1.1 User unknown",
"id_list": 101
}
]
/Suppression/Bounces/{id}Rimuovi un bounce
source e type sono obbligatori, come restituiti da GET /Suppression/Bounces: un id da solo non è univoco.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | id del bounce |
source | query | string | sì | list, contact, api o smtp |
type | query | string: hard, soft | sì | hard o soft |
Risposte
| Codice | Descrizione |
|---|---|
200 | Bounce rimosso |
400 | source o type mancante |
401 | Token non valido o scaduto |
404 | Bounce non trovato |
Esempio 200
{
"result": "ok",
"id": 5521,
"restored": false
}
/Suppression/Bounces/{id}/RestoreRimetti nelle sue liste un contatto in hard bounce
Solo per un hard bounce con origine contact.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | id del bounce |
Risposte
| Codice | Descrizione |
|---|---|
200 | Contatto rimesso in lista |
401 | Token non valido o scaduto |
404 | Hard bounce di un contatto non trovato o indirizzo non più attivo |
Esempio 200
{
"result": "ok",
"id": 5521,
"restored": true
}
/Suppression/UnsubscribersElenca i disiscritti dell'account
Prima i più recenti. Il totale è nell'intestazione X-Total-Count.
Scope OAuth : contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
source | query | string | Origine della disiscrizione: contact, list, smtp, api o api3 | |
email | query | string | Indirizzo esatto | |
dateFrom | query | string (date-time) | A partire da questa data | |
dateTo | query | string (date-time) | Fino a questa data | |
numberOfRecords | query | integer | ||
pageNumber | query | integer |
Risposte
| Codice | Descrizione |
|---|---|
200 | Disiscritti restituiti |
401 | Token non valido o scaduto |
Esempio 200
[
{
"id": 9012,
"source": "api3",
"email": "[email protected]",
"date": "2026-10-20T16:05:00",
"list_name": null,
"comment": "Asked by phone"
}
]
/Suppression/UnsubscribersAggiungi un disiscritto
Senza id_list, l'indirizzo viene disiscritto per tutto l'account. Con id_list, solo da quella lista di disiscrizione.
Scope OAuth : contacts:write
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
email | string | sì | Indirizzo da disiscrivere |
comment | string | Commento libero | |
id_list | integer (int64) | Lista di disiscrizione dell'account (facoltativo) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Fatto. already_unsubscribed è true quando l'indirizzo era già disiscritto. |
400 | È richiesto un indirizzo valido |
401 | Token non valido o scaduto |
404 | id_list non è una lista di disiscrizione di questo account |
Esempio 200
{
"result": "ok",
"already_unsubscribed": false
}
/Suppression/Unsubscribers/{id}Rimuovi un disiscritto
source è obbligatorio, come restituito da GET /Suppression/Unsubscribers: un id da solo non è univoco.
Scope OAuth : contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | id del disiscritto |
source | query | string | sì | contact, list, smtp, api o api3 |
Risposte
| Codice | Descrizione |
|---|---|
200 | Disiscritto rimosso |
400 | source è obbligatorio |
401 | Token non valido o scaduto |
404 | Disiscritto non trovato |
Esempio 200
{
"result": "ok",
"removed": 9012
}