DOCUMENTI/API REST~ 9 MIN DI LETTURA

REST · v1 · BEARER

Gestisci il tuo workspace
dal tuo codice.

L'API REST consente al tuo CRM, backend e-commerce, strumento di automazione o script di migrazione di inviare messaggi, elencare conversazioni e leggere contatti nel tuo workspace EasyLiveChat — usando una chiave con ambito tenant, non una password agente.

§ 00Cos'è l'API REST

EasyLiveChat espone una REST API su /api/v1/* in modo che codice esterno — il tuo backend, un'integrazione CRM, un flusso Zapier o n8n, uno script di migrazione — possa leggere e scrivere nel tuo workspace senza che un agente umano sia loggato. Ogni chiamata è autenticata con una chiave API creata nel dashboard e con ambito tenant.

Se hai mai chiamato l'API di Stripe, Slack o GitHub, funziona allo stesso modo: token segreto a lunga durata in un header Authorization, body di richiesta e risposta JSON, codici di stato HTTP prevedibili.

Una chiave API non porta mai 2FA o password — è proprio questo il senso. È una credenziale che incorpori in un altro software affinché agisca per conto del tuo tenant, solo con gli scope che gli concedi.

§ 01Disponibilità per piano

L'API REST è disponibile in ogni piano a pagamento ed è sbloccata durante la prova di 14 giorni. Nessuna fatturazione per chiamata.

Allo scadere della prova, l'API passa in sola lettura — le scritture restituiscono 402 finché il workspace non viene aggiornato. Le letture continuano a funzionare per non interrompere mai i tuoi export storici.

§ 02Autenticazione

Crea una chiave da https://app.livechattools.com/settings/api-keys. Scegli il set minimo di scope di cui l'integrazione ha davvero bisogno. Puoi revocare una chiave dalla stessa pagina in qualsiasi momento — smette di funzionare all'istante, senza alcun effetto sul dashboard o sui login mobile dei tuoi agenti.

Passa la chiave a ogni richiesta, come token Bearer o tramite x-api-key:

Authorization: Bearer plk_<your-key>
# — or, equivalently —
x-api-key: plk_<your-key>

Verifica che la chiave funzioni prima di collegarla a qualsiasi cosa — /me restituisce i tuoi scope e il tenant:

curl https://api.livechattools.com/api/v1/me \
  -H "Authorization: Bearer plk_<your-key>"

La chiave grezza è mostrata solo una volta alla creazione. Persa? Revocala e creane una nuova — non c'è modo di recuperare il valore originale.

§ 03Scope

Gli scope sono controllati a ogni richiesta. Una chiave con solo scope :read non può mutare dati per sbaglio — utile per dashboard di sola lettura, export BI o pipeline di analytics.

ScopePermette
conversations:readElencare e leggere conversazioni e i loro messaggi.
conversations:writeChiudere, riaprire o riassegnare conversazioni.
messages:readLeggere lo storico messaggi di una conversazione.
messages:writeInviare un nuovo messaggio come agente.
contacts:readElencare e cercare contatti.

Principio del minimo privilegio — chiavi separate per integrazione. Una chiave di sola lettura trapelata sulla tua pipeline di reporting è molto meno dannosa di un'unica chiave "fa-tutto" condivisa nello stack.

§ 04Endpoint

Ogni percorso è radicato in /api/v1. Le risposte sono JSON. I tempi sono ISO 8601 UTC.

GET /api/v1/me

Restituisce l'identità della chiave e il tenant. Nessuno scope richiesto — utile per testare la connessione.

curl https://api.livechattools.com/api/v1/me \
  -H "Authorization: Bearer plk_<key>"

{
  "apiKeyId": "ck...",
  "scopes": ["conversations:read","messages:write"],
  "tenant": { "id": "...", "name": "Acme", "slug": "acme", "planTier": "GROWTH" }
}

GET /api/v1/conversations

Elenca le conversazioni dalla più recente. Tutti i filtri sono opzionali.

  • ?status= OPEN · SNOOZED · CLOSED
  • ?channel= WIDGET · WHATSAPP · TELEGRAM · MESSENGER · INSTAGRAM
  • ?limit= 1–200, predefinito 50
  • ?cursor= id dell'ultima riga della pagina precedente
curl "https://api.livechattools.com/api/v1/conversations?status=OPEN&limit=50" \
  -H "Authorization: Bearer plk_<key>"

{
  "data": [
    { "id":"...", "sourceChannel":"WHATSAPP", "status":"OPEN",
      "lastMessagePreview":"hi there", "lastMessageAt":"..." }
  ],
  "nextCursor": "..."
}

GET /api/v1/conversations/:id

Recupera una conversazione con il contatto associato.

GET /api/v1/conversations/:id/messages

Storico messaggi paginato per una conversazione, più recenti prima.

curl "https://api.livechattools.com/api/v1/conversations/<id>/messages?limit=50" \
  -H "Authorization: Bearer plk_<key>"

POST /api/v1/conversations/:id/messages

Invia un messaggio in uscita in una conversazione. Viene smistato al canale corrispondente (widget, WhatsApp, Telegram, Messenger, Instagram) esattamente come farebbe la risposta di un agente umano.

curl -X POST "https://api.livechattools.com/api/v1/conversations/<id>/messages" \
  -H "Authorization: Bearer plk_<key>" \
  -H "Content-Type: application/json" \
  -d '{ "body": "Your order has shipped." }'

# → 201 Created
{ "message": { "id":"...", "senderType":"AGENT", "body":"Your order has shipped.", "createdAt":"..." } }

senderAgentId è opzionale — se omesso, il messaggio viene attribuito al primo OWNER o ADMIN attivo del workspace. Passa un id esplicito quando vuoi che un account bot specifico appaia nella conversazione.

PATCH /api/v1/conversations/:id

Aggiorna lo stato di una conversazione (OPEN · SNOOZED · CLOSED) o l'agente assegnato. Passa assignedAgentId: null per disassegnare.

curl -X PATCH "https://api.livechattools.com/api/v1/conversations/<id>" \
  -H "Authorization: Bearer plk_<key>" \
  -H "Content-Type: application/json" \
  -d '{ "status": "CLOSED" }'

GET /api/v1/contacts

Elenca i contatti del workspace. ?q= cerca per nome, email o telefono.

curl "https://api.livechattools.com/api/v1/contacts?q=acme" \
  -H "Authorization: Bearer plk_<key>"

§ 05Paginazione

Tutti gli endpoint di lista usano la paginazione a cursore. La forma della risposta è:

{
  "data": [ /* up to ?limit= rows */ ],
  "nextCursor": "<id of last row>"   // or null when there are no more
}

Per recuperare la pagina successiva, passa nextCursor come ?cursor= nella richiesta successiva. Quando nextCursor è null hai raggiunto la fine.

§ 06Errori

Gli errori restituiscono sempre un body JSON con un codice di errore e (dove utile) un messaggio leggibile. Lo stato HTTP rispecchia il significato:

StatoCodiceSignificato
401UNAUTHENTICATEDChiave mancante, malformata o revocata.
402TRIAL_EXPIREDProva scaduta — le scritture sono bloccate, le letture funzionano ancora.
403FORBIDDENLa chiave è valida ma manca lo scope richiesto da questo endpoint.
404NOT_FOUNDLa conversazione, il contatto o un'altra risorsa non esiste sul tuo tenant.
400INVALID_BODYAl body della richiesta mancano campi richiesti o ha tipi sbagliati.
429RATE_LIMITEDTroppe richieste — fermati e riprova dopo qualche secondo.

§ 07Webhook (compagni)

L'API REST è ottima per tirare e spingere secondo i tuoi tempi. Per le notifiche push quando succede qualcosa lato EasyLiveChat — un nuovo messaggio cliente, una conversazione chiusa, un agente che entra — configura webhook in uscita in Impostazioni → Webhook.

I messaggi inviati tramite POST /api/v1/conversations/:id/messages attivano anche il webhook message.created, quindi se hai un'integrazione che invia e un'altra che ascolta, vedrai i tuoi stessi invii rimbalzare attraverso il canale webhook.

§ 08Limiti di velocità

Ogni tenant ha fino a 240 richieste al minuto per path, condivise tra tutte le chiavi del tenant. Raggiungere il limite restituisce 429 con header Retry-After.

Se la tua integrazione ha legittimamente bisogno di un tetto più alto (import massivo, invio massivo), scrivi al supporto — lo alziamo per il tuo tenant.