Base URL: https://api.intosend.com
Le API key si creano dal pannello IntoSend: Profilo → API Keys. Non è prevista creazione key via email/password su API pubblica.
Invia sempre la chiave completa nel formato ID|TOKEN:
Authorization: Bearer YOUR_ID|YOUR_TOKEN
`tenant_id` nei payload corrisponde all'ID tecnico dell'Account.
GET /api/v1/templates.POST /api/v1/conversations/start.window_24h_open su conversazione.messages/text o messages/media, altrimenti messages/template.POST /api/v1/messages/template/bulk./api/v1/contacts e /api/v1/groups./api/v1/campaigns e dettaglio destinatari.GET /api/v1/conversations/{id}/messages.Verifica token corrente e utente autenticato.
curl -s https://api.intosend.com/api/v1/me \ -H "Accept: application/json" \ -H "Authorization: Bearer YOUR_ID|YOUR_TOKEN"
Lista API keys dell'utente corrente.
Crea una nuova key (rotazione). Parametri: name, opzionali tenant_id, expires_at.
{"name":"CRM Key","tenant_id":6}
Revoca la key con cui stai facendo la chiamata.
Revoca una key specifica dell'utente.
Lista template disponibili. Supporta filtri: integration_id, status, per_page.
Dettaglio template. Campo chiave: requirements.
header_required: quante variabili header passare in header_textbody_required: quante variabili body passare in variablesbutton_required: quante variabili button passare in button_paramsheader_media_required: se serve header_media_urlLista contatti. Include flag disiscrizione e gruppi. Filtri: q, group_id, unsubscribed.
Crea o aggiorna un contatto singolo (opzionalmente associando gruppi).
{"phone_e164":"+393400000001","name":"Cliente Demo","group_ids":[1,2]}
Se non passi group_ids, il contatto viene comunque inserito automaticamente nel gruppo di sistema Tutti.
Import massivo contatti via csv o items[].
Crea gruppo contatti.
{"name":"Clienti VIP","description":"Segmento premium"}
Aggiunge contatti al gruppo usando contact_ids o items (telefono+nome).
Il gruppo Tutti viene gestito automaticamente: ogni contatto ne fa sempre parte.
Campagna al volo (equivalente bulk avanzato): crea campagna tracciabile con destinatari e stato.
Campagna standard da gruppi esistenti. Supporta valori default template (con placeholder {{name}} / {{phone}}).
Lista campagne con metriche: queued/sent/failed/skipped.
Dettaglio campagna con destinatari, errori e message_id.
Lista conversazioni con paginazione. Filtri: q, status, integration_id, per_page.
Apre (o recupera) conversazione per telefono + integrazione WhatsApp.
Body richiesto: whatsapp_integration_id, phone_e164. Opzionale: name.
{"whatsapp_integration_id":1,"phone_e164":"+393400000001","name":"Test CRM"}
Dettaglio conversazione. Campi utili: window_24h_open, window_24h_expires_at.
Timeline messaggi della conversazione. Paginazione cursor-based: per_page, cursor.
curl -s https://api.intosend.com/api/v1/conversations/11/messages \ -H "Accept: application/json" \ -H "Authorization: Bearer YOUR_ID|YOUR_TOKEN"
Invia testo libero (solo se window_24h_open=true).
{"text":"Ciao da CRM"}
Se finestra chiusa: risposta 422, usa template.
Invia media con link pubblico oppure file upload multipart (solo se window_24h_open=true).
{
"media_type": "image",
"media_url": "https://cdn.example.com/offerta.jpg",
"caption": "Offerta valida fino a domenica",
"filename": "offerta.jpg"
}
curl -X POST https://api.intosend.com/api/v1/conversations/11/messages/media \ -H "Authorization: Bearer YOUR_ID|YOUR_TOKEN" \ -H "Accept: application/json" \ -F "media_type=audio" \ -F "ptt=1" \ -F "media_file=@/percorso/vocale.ogg"
Tipi supportati: image, video, audio, document. Per audio puoi aggiungere "ptt": true (o ptt=1) per inviare come nota vocale.
Invia template. Usa i valori di requirements del template per comporre il body.
{
"template_id": 3,
"header_text": ["Mario"],
"variables": ["Andrea"],
"button_params": ["promo-2026"]
}
Invia un template a molti contatti in una sola chiamata. Ogni item può avere variabili personalizzate.
{
"whatsapp_integration_id": 1,
"template_id": 3,
"items": [
{
"phone_e164": "+393400000001",
"name": "Mario",
"header_text": ["Mario"],
"variables": ["Mario"],
"button_params": ["promo-mario"]
},
{
"phone_e164": "+393400000002",
"name": "Luca",
"header_text": ["Luca"],
"variables": ["Luca"],
"button_params": ["promo-luca"]
}
]
}
Risposta: crea una campagna e ritorna campaign_id + conteggi requested/queued/failed/skipped.
401 Unauthenticated: token mancante/non valido.403: token valido ma non autorizzato per account risorsa.422: payload invalido o finestra 24h chiusa per invio testo.429: rate limit raggiunto.Spec machine-readable disponibile su /openapi.json.