Documentazione interattiva · Portale sviluppatori · Specifica OpenAPI · EN · FR · DE · IT · PT · ES
URL di base : https://api.mailpro.com/sms
L'API SMS Mailpro™ consente di gestire in modo programmatico gli elenchi di contatti telefonici, i numeri di telefono e di inviare SMS in blocco o singoli.
Ogni endpoint accetta tre metodi di autenticazione. Utilizza quello più adatto al tuo stack.
POST /token, senza scope.> I metodi legacy Bearer JWT e id_client+api_key continuano a funzionare invariati e non sono soggetti a verifica di scope. Solo gli access token OAuth 2.0 sono sottoposti ai controlli di scope per endpoint mostrati in ciascuna operazione di seguito.
Mailpro gestisce un unico authorization server OAuth 2.0 per tutte le sue API, su una superficie indipendente dalla versione: https://api.mailpro.com/oauth/. Non esiste un endpoint OAuth per versione: il token si ottiene da /oauth/token e lo stesso token funziona su questa API SMS, sull'API CRM v3 e sull'API Email v2. Quali endpoint può chiamare è determinato dagli scope del token, non dall'URL di base dell'API. Issuer (claim iss): https://api.mailpro.com/oauth/.
| Endpoint | URL |
|---|---|
| Authorize | GET https://api.mailpro.com/oauth/authorize |
| Token / Refresh | POST https://api.mailpro.com/oauth/token |
| JWKS | GET https://api.mailpro.com/oauth/.well-known/jwks |
| Discovery | GET https://api.mailpro.com/oauth/.well-known/openid-configuration |
Grant supportati: authorization_code + PKCE (S256, obbligatorio), client_credentials, refresh_token (con rotazione). TTL dell'access token: 20 min; refresh token: 30 giorni (sliding, monouso); auth code: 60 s.
Quickstart — ottenere un token e chiamare questa API (sostituisci i segnaposto; non committare mai un segreto reale):
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=sms:send sms:read"
Quindi chiama questa API con Authorization: Bearer ACCESS_TOKEN. Lo stesso token funziona sulle API CRM v3 ed Email v2. Un token privo dello scope richiesto da un endpoint riceve 403 insufficient_scope. Per la procedura completa del flusso e il catalogo degli scope, consulta la documentazione dell'API CRM v3 › Autenticazione. Scope rilevanti per SMS: sms:send, sms:read, sms:contacts:read, sms:contacts:write, account:read.
Authorization: Bearer <access_token>
Ottieni un token tramite POST /token (codifica form, grant OAuth2 password):
POST https://api.mailpro.com/sms/token
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=YOUR_USERNAME&password=YOUR_API_KEY
Lo stesso token è valido anche sull'API CRM v3 e sull'API Email v2: ti autentichi una sola volta e puoi chiamare qualsiasi API. I token sono validi per 30 giorni per impostazione predefinita; utilizza grant_type=refresh_token per rinnovarli senza dover ripetere l'autenticazione. Non hanno scope: preferisci OAuth 2.0 per le integrazioni installabili.
Due credenziali:
| Parametro | Tipo | Descrizione |
|---|---|---|
id_client | integer | Il tuo ID cliente Mailpro numerico, disponibile in Impostazioni → Accesso API |
api_key | string | La tua chiave API (formato GUID), disponibile in Impostazioni → Accesso API |
Inviale in uno di questi modi — scegline uno solo:
id_client: 12345 e api_key: a1b2c3d4-…. Gli URL vengono registrati nei log di web server, CDN e proxy, quindi una chiave nella query string può finire nei log di accesso. Gli header non vengono registrati.?id_client=12345&api_key=…. Mantenuto per compatibilità con le integrazioni esistenti. Passa agli header appena possibile.Se fornisci le credenziali in più punti, l'header ha la precedenza.
Per i token emessi via OAuth, ogni gruppo di endpoint richiede uno scope (i metodi di autenticazione legacy ne sono esenti). Ogni operazione indica il proprio scope sotto Authorization. Riepilogo:
| Endpoint | Scope richiesto |
|---|---|
/send/* (invio in blocco, singolo, pianificazione) | sms:send |
/history/list, /credit/get | sms:read |
/phone/list, /list/list | sms:contacts:read |
/phone/{add,edit,del}, /list/{edit,del}, /import/upload | sms:contacts:write |
/account/limits | account:read |
> POST /list/add (creazione di una lista) è attualmente raggiungibile da qualsiasi token valido — non è ancora sottoposto a verifica di scope. Il rifiuto per scope mancante sugli endpoint sottoposti a verifica restituisce 403 con { "error": "insufficient_scope", "required_scope": "…" }.
Tutti gli endpoint supportano json (predefinito) e xml. Specifica il formato nell'URL:
/credit/get.json/credit/get.xmlI nomi dei campi nelle risposte sono in PascalCase (TotalCredits, FirstName, …), mentre i parametri di richiesta sono in snake_case (id_client, address_book_id, …). Gli endpoint di elenco racchiudono le loro righe in un array Items.
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).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.
Un SMS costa crediti del paese × numero di parti.
Crediti del paese — ogni paese di destinazione ha un prezzo di 1, 2 o 3 crediti, in base al prefisso internazionale del numero. L'invio a un numero il cui prefisso non è tariffato viene rifiutato con un 400.
Numero di parti — un messaggio più lungo di un SMS viene suddiviso dall'operatore e ogni parte viene addebitata. Il limite dipende dai caratteri utilizzati:
| Alfabeto | Messaggio singolo | Per parte se suddiviso |
|---|---|---|
| GSM-7 (latino standard) | 160 caratteri | 153 caratteri |
| Unicode (accenti oltre GSM-7, cirillico, emoji, …) | 70 caratteri | 67 caratteri |
Un singolo carattere fuori dal GSM-7 fa passare tutto il messaggio in Unicode; così un emoji può portare un messaggio di 160 caratteri da 1 a 3 parti. I caratteri ^ { } [ ] ~ | \ e € contano due ciascuno, anche se sono GSM-7.
*Esempio:* un messaggio di 300 caratteri in latino standard = 2 parti; inviato a un paese da 2 crediti, costa 2 × 2 = 4 crediti per destinatario.
I numeri di telefono vengono normalizzati automaticamente. Puoi inviarli in molti formati: spazi, trattini, punti, barre, 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 — formato E.164 internazionale | 0612345678 — formato nazionale (con 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 — solo cifre | 1234567 — troppo corto (< 8 cifre) |
Regole:
+, 00 oppure nessun prefisso0)-, punto ., barra /, parentesi ( ), underscore _, NBSP=, ;, + all'interno del numero, ecc.) → rifiutato41794849980)| HTTP | Codice | Significato |
|---|---|---|
| 400 | 103 | Input malformato — parametro obbligatorio mancante o non valido |
| 202 | 202 | Credito SMS insufficiente |
| 401 | id_client / api_key non validi | |
| 500 | 500 | Errore interno |
Mailpro™ può notificare il tuo server in tempo reale quando si verificano eventi SMS sul tuo account (un SMS viene consegnato, un SMS fallisce, il tuo saldo crediti è basso, ecc.). Stile Stripe: il tuo URL riceve una POST firmata 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 /webhooks. La risposta contiene un secret mostrato una sola volta (stile Stripe / GitHub): conservalo.secret (snippet di seguito).> ⏱ Ritardo di attivazione — dopo aver creato, aggiornato o eliminato un webhook, la modifica impiega fino a 10 minuti per propagarsi su tutti i server API Mailpro. Durante tale finestra gli eventi potrebbero non corrispondere ancora alla tua nuova sottoscrizione (oppure potrebbero ancora corrispondere a una appena rimossa). È il tempo necessario per aggiornare la cache in memoria delle sottoscrizioni su ogni istanza API.
Tutti gli eventi condividono un envelope comune:
{
"id": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
"type": "sms.queued",
"created": 1748194800,
"apiVersion": "sms",
"account": { "id": 12345, "name": "ACME Corp" },
"data": {
"messageId": 12345,
"to": "41791234567",
"queuedAt": "2026-05-27T14:32:12.0123456Z",
"scheduledAt": "2026-05-27T14:32:12.0123456Z",
"parts": 1
}
}
| Campo | Formato | Descrizione |
|---|---|---|
id | evt_ + 32 hex | ID univoco dell'evento — da usare come chiave di idempotenza dal tuo lato. |
type | <dominio>.<verbo> | Tipo di evento canonico. |
created | secondi Unix UTC | Incluso nella firma HMAC. |
apiVersion | "sms" per gli eventi emessi da POST /sms/send/add_single; "v3" per gli eventi emessi da POST /v3/Sms/SingleSMS; "watcher" per gli eventi guidati dalla DLR emessi dal worker. | Quale componente Mailpro ha pubblicato l'evento. |
account.id | int | Il tuo ID cliente Mailpro (= id_client). |
account.name | string | Il nome del tuo account (utile per il debug lato client). |
data | object | Payload dell'evento — la forma dipende da type (vedi catalogo di seguito). |
Vengono effettivamente emessi solo gli eventi elencati di seguito. Le forme sono il JSON letterale inviato dalla piattaforma: rispetta esattamente questi nomi di campo durante il parsing.
| Evento | Trigger | Forma di data |
|---|---|---|
ping | Test tramite POST /webhooks/{id}/test | { message } |
sms.queued | POST /sms/send/add_single o POST /v3/Sms/SingleSMS accettato nella coda di invio Mailpro | { messageId: int, to: string, queuedAt: ISO-8601, scheduledAt: ISO-8601, parts: int } |
sms.delivered | DLR con codice operatore 004 o 008 (codici di successo) | { messageId: int, phone: string, stateCode: string, dlrDate: datetime } |
sms.failed | DLR con qualsiasi altro codice operatore (timeout, non consegnato, rifiutato, in blacklist, …) | { messageId: int, phone: string, stateCode: string, dlrDate: datetime } |
credits.sms.low | Il saldo crediti SMS è sceso sotto la soglia di avviso (worker CreditsLowWatcher) | { remaining: int, threshold: int, alertedAt: ISO-8601 } |
> Nota — non esiste un evento sms.sent. La DLR dell'operatore è l'unico feedback che la piattaforma riceve tra "queued" e "delivered/failed", quindi l'evento successivo a sms.queued sarà sms.delivered (successo) oppure sms.failed (errore). La maggior parte dei messaggi raggiunge l'operatore in pochi secondi e ottiene una DLR in pochi minuti; le condizioni della rete mobile possono occasionalmente estendere questo intervallo a ore.
> Denominazione dei campi — sms.queued usa to (la destinazione così come inviata dal chiamante dell'API, dopo normalizzazione). sms.delivered / sms.failed usano phone (la destinazione restituita dall'operatore nella DLR). In pratica le cifre saranno le stesse, ma i nomi differiscono perché gli eventi provengono da percorsi di codice diversi.
Sottoscriviti a tutti gli eventi di questa API passando ["*"] nell'array events.
Ogni POST include un header X-Mailpro-Signature:
X-Mailpro-Signature: t=1748194800,v1=7f9ac2b6e4d1c8a3...
X-Mailpro-Event-Id: evt_8f3a9b2c4d1e5f6789abcdef01234567
X-Mailpro-Event-Type: sms.delivered
X-Mailpro-Attempt: 1
Per verificare:
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 | Ritardo 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 disattivato automaticamente (isActive: false) e ricevi una email di notifica. Riattivalo con PUT /webhooks/{id} una volta corretto il tuo endpoint.
Consideriamo il tuo webhook come consegnato con successo solo se restituisci uno stato in 200–299. Qualsiasi 3xx/4xx/5xx o un timeout (> 10 s) viene conteggiato come fallimento e attiva nuovi tentativi. Se il tuo endpoint è definitivamente fuori servizio, restituisci esplicitamente 410 Gone: i tentativi continueranno comunque, ma il motivo del fallimento sarà più chiaro nel tuo 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 cronologia consegne | 30 giorni |
Ottieni un token JWT Bearer per autenticare tutte le altre chiamate API. L'endpoint SMS /token è un redirect 307 verso l'issuer canonico /v3/token — il tuo client HTTP segue il redirect in modo trasparente (il metodo POST e il body sono preservati).
/tokenOttieni l'access token (redirect 307 verso /v3/token)
Ottiene un token JWT Bearer usando le credenziali client Mailpro. Passa l'access_token restituito come Authorization: Bearer <token> in tutte le richieste successive. Lo stesso token è valido anche sulle API CRM v3 e Email v2.
> ⚙ Dettaglio implementativo — POST /sms/token è un 307 Temporary > Redirect verso POST /v3/token (configurato a livello di rewrite IIS in > web.config). HTTP 307 preserva sia il metodo (POST) sia il > body della richiesta, quindi qualsiasi client HTTP conforme agli standard segue > il redirect in modo trasparente — continui a fare POST verso /sms/token e ottieni > un JWT valido. Non c'è alcuna logica di emissione token duplicata; l'API > SMS non emette mai token in proprio.
| Tipo di grant | Caso d'uso |
|---|---|
password | Integrazione standard — username + API key |
refresh_token | Rinnova un access token in scadenza senza ri-autenticarsi |
client_credentials | Server-to-server con solo il client ID |
Usa grant_type=refresh_token per rinnovare l'access token senza ri-autenticarti. Conserva i token lato server (Vault, variabili d'ambiente); non incorporarli mai nel JS del browser o nei binari delle app mobile. Consulta la nota di sicurezza completa nella documentazione /token dell'API CRM v3.
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
grant_type | string: password, refresh_token, client_credentials | sì | |
username | string | Il tuo username Mailpro (email). Obbligatorio per il grant password. | |
password | string | La tua API key Mailpro (formato GUID). Obbligatoria per il grant password. | |
refresh_token | string | Refresh token precedente. Obbligatorio per il grant refresh_token. | |
client_id | string | Il tuo ID client Mailpro (intero). Obbligatorio per il grant client_credentials. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Token emesso con successo. Restituito da POST /v3/token dopo il
seguimento trasparente del 307 — il tuo client HTTP vede un normale 200 con
la stessa forma di body che riceverebbe direttamente dall'endpoint
token v3.
|
307 | Redirect temporaneo verso POST /v3/token, emesso dalla regola di rewrite
IIS in web.config. I client HTTP conformi agli standard lo seguono
automaticamente e preservano il metodo POST originale + il body del form.
Visibile solo ai client che disabilitano esplicitamente il seguimento dei redirect
(es. curl --max-redirs 0).
|
400 | Credenziali non valide o tipo di grant 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."
}
Controlla il saldo dei crediti SMS, la quota API mensile e lo stato dell'account.
/account/limits.{format}Ottieni la quota API mensile
Restituisce la quota mensile di richieste API per il client autenticato.
Calcolo della quota: il limite è calibrato sui crediti dell'abbonamento email (tipicamente subscription_credits × 5). Per un piano da 10.000 email/mese, questo produce un budget mensile di 50.000 richieste. Reset alla data di anniversario dell'abbonamento (non il 1° del mese di calendario).
Cosa consuma crediti:
v2, v3 o sms.Cosa è GRATUITO (non consuma crediti):
/health.401, 403 o 429.La quota è condivisa tra tutte e 3 le API Mailpro (v2, v3, sms) — un client = un budget mensile sull'intera piattaforma. Gli invii SMS consumano in aggiunta il saldo crediti SMS dedicato (GET /credit/get.{format}).
Scope OAuth : account:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Risposte
| Codice | Descrizione |
|---|---|
200 | Snapshot della quota |
401 | Credenziali non valide |
404 | Nessun record di quota trovato (account appena creato; la riga sarà creata alla prima richiesta autenticata). |
Esempio 200
{
"monthlyLimit": 50000,
"remaining": 32847,
"used": 17153,
"isFree": false,
"remainedSendsForFree": null
}
Invia messaggi SMS — un singolo SMS transazionale a un destinatario, oppure una campagna bulk a un'intera lista di contatti.
/send/add.{format}Invia SMS bulk a una lista di contatti
Invia un messaggio SMS a tutti i numeri di telefono in una lista di contatti. Supporta la pianificazione: imposta scheduled_time su una data futura per inviare in seguito, oppure ometterlo per inviare immediatamente.
Consumo dei crediti: i crediti vengono detratti al momento dell'invio. I messaggi lunghi (>160 caratteri GSM-7) vengono suddivisi in più parti, ciascuna delle quali costa crediti aggiuntivi.
La risposta restituisce { "Error": "Insufficient Credit", "Code": 202 } se l'account ha crediti insufficienti.
Scope OAuth : sms:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
message | string | sì | Testo del messaggio SMS. Mantienilo sotto i 160 caratteri per un SMS in singola parte. I caratteri al di fuori dell'alfabeto GSM-7 (es. cinese, arabo, emoji) commutano la codifica in Unicode, riducendo il limite a 70 caratteri per parte. |
to | integer | sì | ID della lista di contatti a cui inviare (da /list/list) |
scheduled_time | string (date-time) | Pianifica l'invio per una data/ora futura (ISO 8601). Ometti o lascia vuoto per inviare immediatamente. | |
shorten_urls | boolean | Imposta true per sostituire ogni link del messaggio con un link breve https://mailp.ro/m/...: meno caratteri, quindi a volte meno parti di SMS fatturate. Un link che non può essere abbreviato resta invariato. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Invio SMS bulk creato con successo |
202 | Crediti SMS insufficienti |
400 | Campo obbligatorio mancante |
401 | Credenziali non valide |
Esempio 200
{
"Id": 6001,
"Message": "Flash sale today only — 30% off all orders. Shop now at mailpro.com/shop",
"ScheduledTime": "2026-04-20T10:00:00",
"To": [
"42"
]
}
Esempio 202
{
"Error": "Insufficient Credit",
"Code": 202
}
Esempio 400
{
"Error": "Malformed Input",
"Code": 103
}
/send/add_single.{format}Invia un singolo SMS (GET)
Invia un singolo SMS a un destinatario tramite una richiesta GET. Utile per integrazioni semplici dove POST non è disponibile. Credenziali e messaggio vengono passati come parametri della query string.
Nota: evita di usare GET per messaggi sensibili — i parametri della query appaiono nei log del server. Preferisci invece POST /send/add_single.
Scope OAuth : sms:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
to | query | string | sì | Numero di telefono del destinatario. Accetta +41…, 0041… o 41… con o senza separatori. Consulta Formato del numero di telefono nella descrizione dell'API. |
message | query | string | sì | Testo del messaggio SMS (max 160 caratteri per la codifica standard) |
scheduled_time | query | string (date-time) | Pianifica l'invio (ISO 8601). Ometti per inviare immediatamente. | |
shorten_urls | query | boolean | Imposta true per sostituire ogni link del messaggio con un link breve https://mailp.ro/m/...: meno caratteri, quindi a volte meno parti di SMS fatturate. Un link che non può essere abbreviato resta invariato. |
Risposte
| Codice | Descrizione |
|---|---|
200 | SMS inviato (o pianificato) con successo |
202 | Crediti SMS insufficienti |
400 | Parametro obbligatorio mancante |
401 | Credenziali non valide |
Esempio 200
{
"Id": 5001,
"Message": "Your appointment is confirmed for tomorrow at 10:00.",
"ScheduledTime": "2026-04-15T09:00:00",
"To": "0041791234567",
"Charge": "1"
}
/send/add_single.{format}Invia un singolo SMS
Invia un singolo messaggio SMS a un numero di telefono destinatario. Supporta la pianificazione tramite scheduled_time.
Consumo dei crediti: i crediti vengono detratti al momento dell'invio. Il campo Charge nella risposta indica quanti crediti sono stati consumati.
La risposta restituisce { "Error": "Insufficient Credit", "Code": 202 } se l'account ha crediti insufficienti.
Scope OAuth : sms:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
message | string | sì | Testo del messaggio SMS |
to | string | sì | Numero di telefono del destinatario. Accetta +41…, 0041… o 41… con o senza separatori. Consulta Formato del numero di telefono nella descrizione dell'API. |
scheduled_time | string (date-time) | Pianifica l'invio per un'ora futura. Ometti per inviare immediatamente. | |
shorten_urls | boolean | Imposta true per sostituire ogni link del messaggio con un link breve https://mailp.ro/m/...: meno caratteri, quindi a volte meno parti di SMS fatturate. Un link che non può essere abbreviato resta invariato. |
Risposte
| Codice | Descrizione |
|---|---|
200 | SMS inviato (o pianificato) con successo |
202 | Crediti SMS insufficienti |
400 | Campo obbligatorio mancante |
401 | Credenziali non valide |
Esempio 200
{
"Id": 5001,
"Message": "Your verification code is 8472. Valid for 10 minutes.",
"ScheduledTime": "2026-04-15T14:30:00",
"To": "0041791234567",
"Charge": "1"
}
Esempio 202
{
"Error": "Insufficient Credit",
"Code": 202
}
Esempio 400
{
"Error": "Malformed Input",
"Code": 103
}
/send/list.{format}Elenca le campagne SMS
Restituisce l'elenco delle campagne SMS (invii bulk) dell'account. Paginazione tramite gli header NumberOfRecords e PageNumber.
Usa type_to per filtrare per tipo di invio:
0 (default) — invii bulk verso una lista1 — invii individuali singoliScope OAuth : sms:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
type_to | query | integer: 0, 1 | Filtro per tipo di invio:
- 0 (default) — invii bulk verso una lista di contatti
- 1 — invii individuali a singolo numero
|
Risposte
| Codice | Descrizione |
|---|---|
200 | Elenco delle campagne SMS restituito con successo |
401 | Credenziali non valide |
Esempio 200
[
{
"Id": 5001,
"Message": "Your verification code is 8472",
"ScheduledTime": "2026-04-15T09:00:00",
"To": "41791234567"
}
]
/send/del.{format}Annulla o elimina un invio SMS
Annulla un invio SMS in attesa pianificato, oppure elimina un invio completato dallo storico. Solo gli invii pianificati nel futuro possono essere annullati. Gli invii in corso non possono essere fermati.
Scope OAuth : sms:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
id_send | integer | sì | ID dell'invio SMS da annullare o eliminare (da /send/list) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Invio SMS annullato o eliminato con successo |
400 | id_send mancante |
401 | Credenziali non valide |
500 | Eliminazione fallita (invio non trovato o già processato) |
Esempio 200
{
"Result": "OK"
}
Esempio 500
{
"Error": "Delete failed",
"Code": 500
}
/send/scheduled.{format}Elenca i miei invii SMS pianificati
Restituisce gli invii SMS (singoli o campagne) pianificati per una data futura che non sono ancora stati spediti. Utile prima di chiamare /cancel o /reschedule.
I record sono ordinati per scheduled_time crescente.
Scope OAuth : sms:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
id_client | query | integer | sì | |
api_key | query | string | sì | |
NumberOfRecords | header | integer | Elementi per pagina — 5.000 predefiniti e al massimo (vedi Paginazione). Header HTTP o parametro di query. | |
PageNumber | header | integer | Numero di pagina (a partire da 1) per le risposte paginate. Inviato come header HTTP. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Elenco degli invii SMS pianificati |
401 | Credenziali non valide |
Esempio 200
[
{
"Id": 9001,
"Message": "Black Friday: 30% off until midnight.",
"ScheduledTime": "2026-11-27T12:00:00",
"To": "+33671234567"
}
]
/send/{id_send}/cancel.{format}Annulla un invio SMS pianificato
Annulla un SMS pianificato che non è ancora stato spedito. Se l'invio è già stato processato (o non esiste / appartiene a un altro client), restituisce 409 Conflict.
Scope OAuth : sms:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
id_send | path | integer | sì |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | |
api_key | string | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Invio annullato |
401 | Credenziali non valide |
409 | Già spedito o non trovato |
Esempio 200
{
"Result": "OK",
"Cancelled": 9001
}
Esempio 409
{
"error": "conflict",
"message": "Send not found, not owned by client, or already dispatched."
}
/send/{id_send}/reschedule.{format}Riprogramma un invio SMS pianificato
Aggiorna la data pianificata di un SMS programmato che non è ancora stato spedito. La nuova data deve essere nel futuro e entro 90 giorni.
Nome del campo data: l'API accetta scheduled_time (primario) così come gli alias legacy PlanDate, date_planned e DatePlanned. Fornisci uno qualsiasi di essi — viene usato il primo non null.
Scope OAuth : sms:send
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
id_send | path | integer | sì |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | |
api_key | string | sì | |
scheduled_time | string (date-time) | Nome del campo primario. | |
PlanDate | string (date-time) | Alias legacy accettato per retrocompatibilità. | |
date_planned | string (date-time) | Alias legacy accettato per retrocompatibilità. | |
DatePlanned | string (date-time) | Alias legacy accettato per retrocompatibilità. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Invio riprogrammato |
400 | scheduled_time mancante o non valido |
401 | Credenziali non valide |
409 | Già spedito, non trovato o nuova data fuori intervallo |
Esempio 200
{
"Result": "OK",
"Id": 9001,
"NewScheduledTime": "2026-12-31T14:30:00"
}
Esempio 409
{
"error": "conflict",
"message": "Reschedule failed — send not found, already dispatched, or new date out of range."
}
Gestisci le liste di contatti SMS. Una lista di contatti raggruppa numeri di telefono per l'invio bulk. Puoi creare fino a 1.000 liste per account (stesso limite sulle tre API Mailpro e nell'app).
/list/list.{format}Elenca le liste di contatti telefonici
Restituisce tutte le liste di contatti SMS dell'account. Usa i valori Id restituiti per inviare campagne SMS bulk o aggiungere numeri di telefono.
Scope OAuth : sms:contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Risposte
| Codice | Descrizione |
|---|---|
200 | Liste telefoniche restituite con successo |
401 | Credenziali non valide |
Esempio 200
{
"Items": [
{
"AddressBookId": 42,
"Name": "Newsletter subscribers",
"TotalNumberPhones": 1547
},
{
"AddressBookId": 43,
"Name": "Loyalty program",
"TotalNumberPhones": 823
}
]
}
/list/add.{format}Crea una lista di contatti
Crea una nuova lista di contatti SMS con il nome indicato. La lista parte vuota — aggiungi i numeri di telefono con POST /phone/add. Massimo 1.000 liste per account (stesso limite sulle tre API Mailpro e nell'app). Restituisce HTTP 422 se il limite è raggiunto.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
name | string | sì | Nome visualizzato per la nuova lista di contatti |
Risposte
| Codice | Descrizione |
|---|---|
200 | Lista di contatti creata con successo |
400 | Campo obbligatorio mancante (name) |
401 | Credenziali non valide |
Esempio 200
{
"Id": 44,
"Name": "Spring campaign 2026",
"NumberPhones": 0
}
Esempio 400
{
"Error": "Malformed Input",
"Code": 103
}
/list/edit.{format}Rinomina una lista di contatti
Aggiorna il nome visualizzato di una lista di contatti SMS esistente. I numeri di telefono presenti nella lista non vengono modificati.
Scope OAuth : sms:contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
address_book_id | integer | sì | ID della lista di contatti da rinominare (da /list/list) |
name | string | sì | Nuovo nome visualizzato per la lista di contatti |
Risposte
| Codice | Descrizione |
|---|---|
200 | Lista di contatti rinominata con successo |
400 | Campo obbligatorio mancante |
401 | Credenziali non valide |
/list/del.{format}Elimina una lista di contatti
Elimina definitivamente una lista di contatti SMS e tutti i numeri di telefono che contiene. Questa azione non può essere annullata.
Scope OAuth : sms:contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
address_book_id | integer | sì | ID della lista di contatti da eliminare |
Risposte
| Codice | Descrizione |
|---|---|
200 | Lista di contatti eliminata con successo |
400 | address_book_id mancante |
401 | Credenziali non valide |
Gestisci i singoli numeri di telefono all'interno di una lista di contatti — aggiungi, aggiorna e rimuovi voci.
/phone/list.{format}Elenca i numeri di telefono in una lista di contatti
Restituisce un elenco paginato dei numeri di telefono in una specifica lista di contatti. Usa address_book_id per specificare quale lista recuperare. Paginazione: NumberOfRecords e PageNumber (5.000 per pagina per impostazione predefinita, pagina 1).
Scope OAuth : sms:contacts:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
address_book_id | query | integer | sì | ID della lista di contatti da cui recuperare i numeri di telefono |
NumberOfRecords | header | integer | Elementi per pagina — 5.000 predefiniti e al massimo (vedi Paginazione). Header HTTP o parametro di query. | |
PageNumber | header | integer | Numero di pagina (a partire da 1) per le risposte paginate. Inviato come header HTTP. | |
SortByName | header | boolean | Imposta a true per ordinare i risultati alfabeticamente per nome. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Numeri di telefono restituiti con successo |
401 | Credenziali non valide |
Esempio 200
{
"Items": [
{
"Id": 1001,
"Number": "41791234567",
"FirstName": "Alice",
"LastName": "Dupont"
},
{
"Id": 1002,
"Number": "33612345678",
"FirstName": "Bob",
"LastName": "Martin"
}
]
}
/phone/add.{format}Aggiungi numero/i di telefono a una lista
Aggiunge uno o più numeri di telefono a una lista di contatti.
Numero singolo: usa il campo number.
Import bulk: usa il campo phone_list con i numeri separati da punto e virgola: +41791234567;+33612345678;0049301234567
I numeri di telefono accettano il formato +, 00 o quello puro — consulta Formato del numero di telefono nella descrizione dell'API per l'elenco completo degli input accettati / rifiutati. I numeri duplicati vengono saltati silenziosamente a meno che non sia impostato force=1.
Scope OAuth : sms:contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
address_book_id | integer | sì | ID della lista di contatti a cui aggiungere il/i numero/i |
number | string | Singolo numero di telefono. Accetta +41…, 0041… o 41… con o senza
separatori (spazi, trattini, punti, barre, parentesi). Consulta
Formato del numero di telefono nella descrizione dell'API.
Usa questo OPPURE phone_list — non entrambi.
| |
phone_list | string | Elenco di numeri di telefono separati da punto e virgola per l'import bulk.
Usa questo OPPURE number — non entrambi.
Esempio: 0041791234567;0033612345678
| |
firstname | string | Nome del contatto (opzionale, solo per numero singolo) | |
lastname | string | Cognome del contatto (opzionale, solo per numero singolo) | |
force | integer: 0, 1 | Imposta a 1 per aggiungere un numero anche se in precedenza era stato disiscritto o esiste già.
Default: 0 (i duplicati vengono saltati).
|
Risposte
| Codice | Descrizione |
|---|---|
200 | Numero/i di telefono aggiunto/i con successo |
400 | Campo obbligatorio mancante |
401 | Credenziali non valide |
Esempio 200
{
"Id": 1003,
"Number": "0041791234567",
"FirstName": "Alice",
"LastName": "Dupont"
}
/phone/edit.{format}Aggiorna una voce di numero di telefono
Aggiorna il numero di telefono e/o i dettagli del contatto di una voce esistente. Usa number_id (da /phone/list) per identificare la voce da aggiornare. Vengono aggiornati solo i campi forniti nella richiesta.
Scope OAuth : sms:contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
number_id | integer | sì | ID della voce del numero di telefono da aggiornare (da /phone/list) |
number | string | Nuovo numero di telefono. Accetta +41…, 0041… o 41… con o senza separatori. Consulta Formato del numero di telefono nella descrizione dell'API. | |
firstname | string | Nuovo nome per il contatto | |
lastname | string | Nuovo cognome per il contatto |
Risposte
| Codice | Descrizione |
|---|---|
200 | Voce del numero di telefono aggiornata con successo |
400 | number_id mancante |
401 | Credenziali non valide |
/phone/del.{format}Rimuovi un numero di telefono da una lista
Rimuove definitivamente una specifica voce di numero di telefono dalla sua lista di contatti. Usa number_id (da /phone/list) per identificare la voce.
Scope OAuth : sms:contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (application/x-www-form-urlencoded)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_client | integer | sì | Il tuo ID client Mailpro |
api_key | string | sì | La tua API key (GUID) |
number_id | integer | sì | ID della voce del numero di telefono da eliminare (da /phone/list) |
Risposte
| Codice | Descrizione |
|---|---|
200 | Numero di telefono rimosso con successo |
400 | number_id mancante |
401 | Credenziali non valide |
Controlla il saldo residuo dei crediti SMS per il tuo account (separato dalla quota mensile di richieste API — vedi /account/limits).
/credit/get.{format}Ottieni il saldo dei crediti SMS
Restituisce il saldo corrente dei crediti SMS per il tuo account. I crediti SMS vengono consumati al momento dell'invio. Un SMS standard (≤160 caratteri GSM-7) costa 1 credito. I messaggi più lunghi o con caratteri speciali possono costare di più.
> Nota: questo restituisce il tuo saldo crediti di invio SMS, non la tua quota di richieste API. > Per la quota API vedi GET /account/limits.{format}.
Scope OAuth : sms:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Risposte
| Codice | Descrizione |
|---|---|
200 | Saldo crediti restituito con successo |
401 | Credenziali non valide |
Esempio 200
{
"TotalCredits": 5000
}
Esplora il log completo delle campagne SMS passate.
/history/list.{format}Elenca lo storico degli invii SMS
Restituisce un log paginato di tutte le campagne SMS passate inviate da questo account. I risultati sono ordinati per data decrescente (più recenti per primi). Paginazione: NumberOfRecords e PageNumber (header o query, 5.000 per pagina per impostazione predefinita).
Scope OAuth : sms:read
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Risposte
| Codice | Descrizione |
|---|---|
200 | Lista dello storico restituita con successo |
401 | Credenziali non valide |
Esempio 200
{
"Items": [
{
"Id": 583294,
"DateSent": "2026-07-17T18:56:39.813",
"Message": "Your verification code is 8472",
"Charge": 3,
"Parts": 1
}
]
}
Carica un file CSV o XLSX per importare numeri di telefono in una lista di contatti in modalità bulk. Il file viene accodato per l'elaborazione asincrona — traccia il completamento tramite l'ImportJobId restituito o tramite il callback opzionale webhook_url.
/import/upload.{format}Carica un file di numeri di telefono (CSV / XLSX) per l'import bulk
Carica un file CSV o XLSX per importare numeri di telefono in una lista di contatti. Il file viene memorizzato e accodato per l'elaborazione asincrona — l'endpoint restituisce immediatamente un ImportJobId.
Tipo di richiesta: multipart/form-data
Campi del form obbligatori:
id_client (intero) — il tuo ID client Mailproapi_key (stringa) — la tua API keyid_list (intero) — ID della lista di contatti di destinazionefile (binario) — il file CSV o XLSX da caricareOpzionale:
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:
Phone o PhoneNumber — case-insensitive)+41791234567Scope OAuth : sms:contacts:write
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
format | path | string: json, xml | sì | Formato della risposta |
Corpo della richiesta (multipart/form-data)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
id_list | integer (int64) | sì | ID della lista di contatti di destinazione |
file | string (binary) | sì | File CSV o XLSX (UTF-8, max 50 MB) |
webhook_url | string (uri) | URL di callback invocato al termine dell'elaborazione |
Risposte
| Codice | Descrizione |
|---|---|
200 | File accettato e accodato |
400 | Nessun file caricato o id_list mancante |
401 | Credenziali non valide |
500 | Errore del server o dello storage |
Esempio 200
{
"Result": "OK",
"ImportJobId": 15,
"InternalName": "230575-20260420142616-phones.csv"
}
Sottoscrivi il tuo server alle notifiche di eventi SMS in tempo reale. Mailpro invia in POST un payload JSON firmato HMAC al tuo URL non appena l'evento sottoscritto accade. Consulta la sezione "Webhook" nell'introduzione per il catalogo completo degli eventi, l'envelope del payload, gli snippet di verifica della firma e la policy di retry.
/webhooksElenca i webhook
Restituisce ogni webhook configurato sull'account autenticato.
Risposte
| Codice | Descrizione |
|---|---|
200 | Array di webhook |
401 | Credenziali non valide |
Esempio 200
{
"items": [
{
"id": 14,
"url": "https://example.com/hooks/mailpro",
"description": "Integrazione Slack",
"is_active": true,
"created_at": "2026-07-01T21:09:52.43",
"updated_at": "2026-07-21T18:56:08.02",
"last_delivery_at": "2026-07-21T18:56:07.653",
"last_delivery_status": 200,
"consecutive_failures": 0,
"events": [
"sms.delivered",
"sms.failed"
]
}
],
"total": 1
}
/webhooksCrea un webhook
Crea una nuova sottoscrizione webhook. La risposta contiene un secret che viene mostrato una sola volta — conservalo immediatamente, lato server. Usalo 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 a cui sottoscriversi (vedi catalogo sopra). Usa ["*"] per sottoscriverti a tutti gli eventi di questa API. |
description | string |
Esempio
{
"url": "https://example.com/hooks/mailpro",
"events": [
"sms.delivered",
"sms.failed"
],
"description": "Integrazione Slack"
}
Risposte
| Codice | Descrizione |
|---|---|
201 | Webhook creato — secret restituito solo qui |
400 | URL, elenco eventi non valido o limite superato |
401 | Credenziali non valide |
Esempio 201
{
"id": 42,
"url": "https://example.com/hooks/mailpro",
"events": [
"sms.delivered",
"sms.failed"
],
"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"
}
/webhooks/{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 |
/webhooks/{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 riabilitare un webhook disabilitato automaticamente una volta che il tuo endpoint è stato corretto. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Webhook aggiornato |
400 | Payload non valido |
404 | Webhook non trovato |
/webhooks/{id}Elimina un webhook
Elimina definitivamente il webhook e tutto il suo storico di consegne.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
204 | Eliminato |
404 | Webhook non trovato |
/webhooks/{id}/testInvia un evento di test
Accoda un evento ping immediato (o qualsiasi altro tipo di evento tramite il campo eventType nel body) verso il tuo endpoint. Utile per verificare la raggiungibilità e la verifica della firma prima di basarsi su eventi reali.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Corpo della richiesta (application/json)
| Nome | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
eventType | string |
Esempio
{
"eventType": "ping"
}
Risposte
| Codice | Descrizione |
|---|---|
202 | Evento accodato per la spedizione |
404 | Webhook non trovato |
Esempio 202
{
"deliveryId": 1234,
"eventId": "evt_8f3a9b2c4d1e5f6789abcdef01234567",
"eventType": "ping"
}
/webhooks/{id}/rotate-secretRuota il segreto HMAC
Genera un nuovo segreto HMAC e invalida immediatamente quello vecchio. Il nuovo segreto viene restituito una sola volta nella risposta — conservalo. Ogni consegna da questo momento in poi sarà firmata con il nuovo segreto.
Usalo se sospetti che il tuo segreto sia stato compromesso.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
200 | Nuovo segreto (visibile una sola volta) |
404 | Webhook non trovato |
Esempio 200
{
"secret": "whsec_XyzA9876BcdE5432FghI1098JklM7654NopQ"
}
/webhooks/{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, conteggi dei retry, messaggi di errore.
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | |
limit | query | integer | ||
cursor | query | integer (int64) | Cursore di paginazione (= ultimo ID di consegna visto). Restituisce le consegne con id < cursor. |
Risposte
| Codice | Descrizione |
|---|---|
200 | Array di tentativi di consegna (più recenti per primi) |
404 | Webhook non trovato |
/webhooks/{id}/deliveries/{deliveryId}/replayRiproduci una consegna
Accoda un nuovo tentativo di consegna con lo stesso payload dell'originale. Utile per ri-scatenare una consegna fallita dopo aver corretto il tuo endpoint. Viene creata una NUOVA riga Webhook_Delivery (l'originale viene preservata per audit). La riproduzione segue la policy di retry standard (stesso schedule di backoff, stessa regola di auto-disabilitazione a 10 fallimenti).
Parametri
| Nome | Dove | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|---|
id | path | integer (int64) | sì | |
deliveryId | path | integer (int64) | sì |
Risposte
| Codice | Descrizione |
|---|---|
202 | Riproduzione accodata |
404 | Webhook o consegna non trovati |