Riferimento API

Integra enuchat nei tuoi sistemi usando l'API Tenant. Gestisci conversazioni, invia messaggi e accedi ai dati di fatturazione in modo programmatico.

Autenticazione

Tutte le richieste API vengono autenticate usando una chiave API inviata nell'header X-Api-Key.

Ottenere la tua chiave API

  1. Vai su Impostazioni → Chiavi API nel tuo pannello
  2. Clicca su Crea chiave API e dagli un nome
  3. Copia la chiave immediatamente — viene mostrata una sola volta
  4. Memorizzala in modo sicuro (variabile d'ambiente, gestore di segreti)

Effettuare richieste

Includi la chiave in ogni richiesta:

curl -H "X-Api-Key: tak_your_key_here" \
     https://api.enuchat.com/api/v1/tenant-api/widgets

Tutte le risposte sono JSON. Le risposte di successo hanno un campo data. Gli errori hanno un campo error con code e message.

Sicurezza: Le chiavi API sono hashate (SHA-256) nel nostro database. Non memorizziamo mai la chiave grezza. Tratta la tua chiave come una password — non comittarla nel codice o condividerla pubblicamente.

URL base

https://api.enuchat.com/api/v1/tenant-api

Tutti gli endpoint sottostanti sono relativi a questo URL base.

Endpoint

GET /widgets

Elenca tutti i widget del tuo account.

Risposta

{'{'}
  "data": [
{'{'}
      "id": "019d19c6-7e0b-...",
      "name": "Main Website Chat",
      "isActive": true,
      "aiEnabled": true,
      "translationEnabled": true,
      "primaryColor": "#2563eb",
      "position": "bottom-right"
    }
  ]
}

GET /conversations

Elenca conversazioni, ordinate per messaggio più recente.

Parametri query

ParametroTipoDescrizione
statusstringFiltra per stato: open, pending, closed
widgetIdstringFiltra per UUID widget
limitintegerRisultati massimi (default 20, max 100)
offsetintegerSalta N risultati

Esempio

curl -H "X-Api-Key: tak_..." \
     "https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"

Risposta

{'{'}
  "data": [
{'{'}
      "id": "019d6724-000e-...",
      "widgetId": "019d19c6-7e0b-...",
      "visitorId": "v-abc123",
      "visitorName": "John",
      "visitorEmail": "john{'@'}example.com",
      "visitorLanguage": "en",
      "status": "open",
      "assignedTo": null,
      "lastMessageAt": "2026-04-11T14:30:00+00:00",
      "startedAt": "2026-04-11T14:25:00+00:00"
    }
  ]
}

GET /conversations/{'{'}id}

Ottieni una conversazione con tutti i messaggi.

Parametri query

ParametroTipoDescrizione
limitintegerMessaggi massimi (default 50, max 200)

Risposta

{'{'}
  "data": {'{'}
    "id": "019d6724-000e-...",
    "visitorLanguage": "en",
    "status": "open",
    "messages": [
{'{'}
        "id": "019d6724-1234-...",
        "role": "visitor",
        "content": "Hello, how much does it cost?",
        "contentLanguage": "en",
        "translatedContent": "Cześć, ile to kosztuje?",
        "translatedLanguage": "pl",
        "isAutoReply": false,
        "createdAt": "2026-04-11T14:25:30+00:00"
      },
{'{'}
        "id": "019d6724-5678-...",
        "role": "ai",
        "content": "Our plans start at €19/month...",
        "isAutoReply": true,
        "createdAt": "2026-04-11T14:25:32+00:00"
      }
    ]
  }
}

POST /conversations/{'{'}id}/messages

Invia un messaggio a una conversazione. Il messaggio sarà consegnato al visitatore in tempo reale tramite il widget di chat.

Corpo richiesta

{'{'}
  "content": "Thanks for reaching out! We'll process your request.",
  "role": "system"
}
CampoTipoDescrizione
contentstringObbligatorio. Il testo del messaggio.
rolestringsystem (default) o operator

Risposta (201 Created)

{'{'}
  "data": {'{'}
    "id": "019d6725-abcd-...",
    "role": "system",
    "content": "Thanks for reaching out!",
    "createdAt": "2026-04-11T14:35:00+00:00"
  }
}

PATCH /conversations/{'{'}id}

Aggiorna lo stato o l'assegnazione di una conversazione.

Corpo richiesta

{'{'}
  "status": "closed"
}
CampoTipoDescrizione
statusstringopen, pending, o closed
assignedTostring|nullUUID operatore da assegnare, o null per rimuovere assegnazione

GET /billing/balance

Ottieni il tuo piano attuale e saldo crediti.

Risposta

{'{'}
  "data": {'{'}
    "plan": "pro",
    "creditBalance": 4500000,
    "totalCreditsAdded": 10000000
  }
}

Gestione degli errori

Gli errori restituiscono un codice di stato non-2xx con un corpo JSON:

{'{'}
  "error": {'{'}
    "code": "NOT_FOUND",
    "message": "Conversation not found."
  }
}
Stato HTTPSignificato
401Chiave API non valida, scaduta o mancante
400Corpo richiesta o parametri non validi
404Risorsa non trovata (o appartenente a un tenant diverso)
500Errore del server

Casi d'uso comuni

Integrazione CRM

Fai polling per nuove conversazioni e sincronizza i dati dei visitatori (nome, email, lingua) al tuo CRM. Usa l'ID conversazione come riferimento esterno.

Follow-up automatizzati

Dopo che una conversazione è chiusa, invia un messaggio di follow-up tramite l'API: «Grazie per la chat! C'è qualcos'altro in cui possiamo aiutare?»

Alternativa ai webhook

Finché i webhook in uscita non sono disponibili, fai polling dell'endpoint conversazioni periodicamente per rilevare nuovi messaggi o cambi di stato.

Operazioni di massa

Chiudi tutte le conversazioni più vecchie di 7 giorni, assegna conversazioni agli operatori in base a logica esterna, o esporta la cronologia delle conversazioni per analisi.

Limiti di tasso

L'API consente fino a 60 richieste al minuto per chiave API. Se superi questo limite, riceverai una risposta 429 Too Many Requests. Attendi e riprova con backoff esponenziale.

Pronto a integrare?

Crea il tuo account gratuito e genera una chiave API in pochi minuti.

Inizia gratis