IntoSend API Documentation

Base URL: https://api.intosend.com

Autenticazione

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.

Flusso Consigliato

Endpoint Reference

GET/api/v1/me

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"

GET/api/v1/auth/tokens

Lista API keys dell'utente corrente.

POST/api/v1/auth/tokens

Crea una nuova key (rotazione). Parametri: name, opzionali tenant_id, expires_at.

{"name":"CRM Key","tenant_id":6}

DELETE/api/v1/auth/tokens/current

Revoca la key con cui stai facendo la chiamata.

DELETE/api/v1/auth/tokens/{token}

Revoca una key specifica dell'utente.

GET/api/v1/templates

Lista template disponibili. Supporta filtri: integration_id, status, per_page.

GET/api/v1/templates/{template}

Dettaglio template. Campo chiave: requirements.

  • header_required: quante variabili header passare in header_text
  • body_required: quante variabili body passare in variables
  • button_required: quante variabili button passare in button_params
  • header_media_required: se serve header_media_url

GET/api/v1/contacts

Lista contatti. Include flag disiscrizione e gruppi. Filtri: q, group_id, unsubscribed.

POST/api/v1/contacts

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.

POST/api/v1/contacts/import

Import massivo contatti via csv o items[].

POST/api/v1/groups

Crea gruppo contatti.

{"name":"Clienti VIP","description":"Segmento premium"}

POST/api/v1/groups/{group}/contacts

Aggiunge contatti al gruppo usando contact_ids o items (telefono+nome).

Il gruppo Tutti viene gestito automaticamente: ogni contatto ne fa sempre parte.

POST/api/v1/campaigns/instant

Campagna al volo (equivalente bulk avanzato): crea campagna tracciabile con destinatari e stato.

POST/api/v1/campaigns/standard

Campagna standard da gruppi esistenti. Supporta valori default template (con placeholder {{name}} / {{phone}}).

GET/api/v1/campaigns

Lista campagne con metriche: queued/sent/failed/skipped.

GET/api/v1/campaigns/{campaign}

Dettaglio campagna con destinatari, errori e message_id.

GET/api/v1/conversations

Lista conversazioni con paginazione. Filtri: q, status, integration_id, per_page.

POST/api/v1/conversations/start

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

GET/api/v1/conversations/{conversation}

Dettaglio conversazione. Campi utili: window_24h_open, window_24h_expires_at.

GET/api/v1/conversations/{conversation}/messages

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"

POST/api/v1/conversations/{conversation}/messages/text

Invia testo libero (solo se window_24h_open=true).

{"text":"Ciao da CRM"}

Se finestra chiusa: risposta 422, usa template.

POST/api/v1/conversations/{conversation}/messages/media

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.

POST/api/v1/conversations/{conversation}/messages/template

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

POST/api/v1/messages/template/bulk

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.

Errori Comuni

OpenAPI JSON

Spec machine-readable disponibile su /openapi.json.