Riferimento endpoint
Riferimento completo degli endpoint REST di Identity, Console, Billing e Booking con esempi di richiesta e risposta.
Riferimento operativo degli endpoint più usati, raggruppati per servizio. Tutti gli esempi usano il base
URL di produzione https://api.blupantheon.com; sostituiscilo con quello dell'ambiente in uso
(vedi Ambienti).
Idempotenza sulle scritture
Ogni endpoint POST, PUT, PATCH e DELETE accetta l'header Idempotency-Key con un valore
univoco generato dal client (consigliato un UUID v4). Se la stessa chiave viene riusata entro 24 ore
con un body identico, la piattaforma restituisce la risposta originale senza rieseguire l'operazione.
Se il body è diverso la risposta è 409 con codice DUPLICATE_REQUEST.
Identity
Prefisso /identity/v1. Gestisce autenticazione, utenti, ruoli, chiavi API e configurazione del tenant.
Login
/identity/v1/auth/loginPubblicoAutentica un utente con email e password e restituisce access token e refresh token.
Corpo della richiesta
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
email | string | Sì | — | Indirizzo email dell’utente, non sensibile alle maiuscole. |
password | string | Sì | — | Password in chiaro, trasmessa esclusivamente su TLS. |
tenantSlug | string | No | — | Obbligatorio solo se l’utente appartiene a più tenant. |
deviceName | string | No | — | Etichetta del dispositivo mostrata nell’elenco delle sessioni attive. |
curl -sS -X POST https://api.blupantheon.com/identity/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"mario.rossi@acme.it","password":"••••••••","tenantSlug":"acme"}'{
"type": "success",
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "rt_8c1d4f7a2b9e0563a1d8c47f2e9b0355",
"tokenType": "Bearer",
"expiresIn": 900,
"user": { "id": "usr_4a7b1e90", "email": "mario.rossi@acme.it", "roles": ["tenant_admin"] }
}Refresh
/identity/v1/auth/refreshPubblicoScambia un refresh token valido con una nuova coppia di token. Il token presentato viene invalidato.
{ "refreshToken": "rt_8c1d4f7a2b9e0563a1d8c47f2e9b0355" }{
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "rt_1f6b2e94d7c3a08516ba9e2f7c4d1088",
"tokenType": "Bearer",
"expiresIn": 900
}Logout
/identity/v1/auth/logoutBearer JWTRevoca la sessione corrente o tutte le sessioni attive. Accetta Idempotency-Key.
{ "refreshToken": "rt_1f6b2e94d7c3a08516ba9e2f7c4d1088", "allSessions": false }{ "revokedSessions": 1, "revokedAt": "2026-09-04T10:32:15.482Z" }Profilo corrente
/identity/v1/meBearer JWTRestituisce il profilo dell'utente o dell'applicazione associata alla credenziale usata.
curl -sS https://api.blupantheon.com/identity/v1/me \
-H "Authorization: Bearer bp_live_xxxxxxxxxxxxxxxx"{
"id": "usr_4a7b1e90",
"email": "mario.rossi@acme.it",
"firstName": "Mario",
"lastName": "Rossi",
"status": "active",
"roles": ["tenant_admin"],
"permissions": ["identity:users:read", "identity:users:write", "console:sessions:read"],
"tenant": { "id": "tnt_2b8e4f11", "slug": "acme", "name": "ACME S.p.A." },
"mfaEnabled": true,
"lastLoginAt": "2026-09-04T08:12:09.640Z",
"createdAt": "2025-11-14T09:21:03.117Z"
}Elenco utenti
/identity/v1/usersBearer JWTElenca gli utenti del tenant. Supporta paginazione a cursore, ricerca testuale e filtri di stato.
Parametri query
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
limit | number | No | 50 | Elementi per pagina, da 1 a 200. |
cursor | string | No | — | Cursore restituito dalla chiamata precedente. |
status | string | No | — | Filtra per stato: active, invited, disabled. |
role | string | No | — | Filtra per ruolo assegnato, ad esempio tenant_admin. |
q | string | No | — | Ricerca su nome, cognome ed email. Minimo 2 caratteri. |
sort | string | No | createdAt | Campo di ordinamento: createdAt, updatedAt, lastLoginAt, email. |
curl -sS "https://api.blupantheon.com/identity/v1/users?limit=50&status=active&sort=createdAt&order=desc" \
-H "Authorization: Bearer bp_live_xxxxxxxxxxxxxxxx"{
"data": [
{
"id": "usr_4a7b1e90",
"email": "mario.rossi@acme.it",
"firstName": "Mario",
"lastName": "Rossi",
"status": "active",
"roles": ["tenant_admin"],
"lastLoginAt": "2026-09-04T08:12:09.640Z",
"createdAt": "2025-11-14T09:21:03.117Z"
}
],
"pagination": { "nextCursor": "eyJpZCI6InVzcl80YTdiMWU5MCJ9", "hasMore": true, "total": 87 }
}Creazione utente
/identity/v1/usersBearer JWTCrea un utente e, se richiesto, invia l'invito via email. Accetta Idempotency-Key.
Corpo della richiesta
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
email | string | Sì | — | Indirizzo email univoco nel tenant. |
firstName | string | Sì | — | Nome, da 1 a 100 caratteri. |
lastName | string | Sì | — | Cognome, da 1 a 100 caratteri. |
roles | string[] | Sì | — | Ruoli da assegnare. Almeno un ruolo esistente nel tenant. |
sendInvitation | boolean | No | true | Se true invia l’email di invito con il link di attivazione. |
locale | string | No | it-IT | Lingua delle comunicazioni inviate all’utente. |
curl -sS -X POST https://api.blupantheon.com/identity/v1/users \
-H "Authorization: Bearer bp_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f1a2b8c-4d5e-4a90-b3c7-1e2f3a4b5c6d" \
-d '{
"email": "giulia.bianchi@acme.it",
"firstName": "Giulia",
"lastName": "Bianchi",
"roles": ["operator"],
"sendInvitation": true
}'{
"id": "usr_8d2c6f04",
"email": "giulia.bianchi@acme.it",
"firstName": "Giulia",
"lastName": "Bianchi",
"status": "invited",
"roles": ["operator"],
"invitationExpiresAt": "2026-09-11T10:32:15.482Z",
"createdAt": "2026-09-04T10:32:15.482Z"
}Aggiornamento utente
/identity/v1/users/{userId}Bearer JWTAggiorna i campi indicati. I campi omessi restano invariati. Accetta Idempotency-Key.
{
"firstName": "Giulia",
"lastName": "Bianchi Ferrari",
"roles": ["operator", "supervisor"]
}{
"id": "usr_8d2c6f04",
"email": "giulia.bianchi@acme.it",
"firstName": "Giulia",
"lastName": "Bianchi Ferrari",
"status": "active",
"roles": ["operator", "supervisor"],
"updatedAt": "2026-09-04T11:04:52.318Z"
}Disattivazione utente
/identity/v1/users/{userId}Bearer JWTDisattiva l'utente e revoca tutte le sue sessioni. L'operazione è reversibile dalla Console. Accetta Idempotency-Key.
{
"id": "usr_8d2c6f04",
"status": "disabled",
"revokedSessions": 3,
"disabledAt": "2026-09-04T11:20:07.905Z"
}Disattivazione, non cancellazione
La disattivazione conserva lo storico delle attività per finalità di audit. Per la cancellazione definitiva dei dati personali usa la procedura di esercizio dei diritti descritta nella sezione conformità: è un flusso separato e irreversibile.
Elenco ruoli
/identity/v1/rolesBearer JWTElenca i ruoli disponibili nel tenant con i permessi associati.
{
"data": [
{
"id": "rol_1a4c7e02",
"name": "tenant_admin",
"displayName": "Amministratore",
"system": true,
"permissions": ["identity:users:read", "identity:users:write", "console:*:*"],
"userCount": 3
},
{
"id": "rol_9b3e5d71",
"name": "operator",
"displayName": "Operatore",
"system": false,
"permissions": ["console:sessions:read", "console:sessions:write"],
"userCount": 24
}
],
"pagination": { "nextCursor": null, "hasMore": false, "total": 6 }
}Creazione chiave API
/identity/v1/api-keysBearer JWTCrea una chiave API. Il segreto completo è restituito una sola volta. Accetta Idempotency-Key.
Corpo della richiesta
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
name | string | Sì | — | Nome descrittivo del consumatore, ad esempio erp-sync-produzione. |
scopes | string[] | Sì | — | Permessi nel formato servizio:risorsa:azione. Non può superare i permessi del creatore. |
expiresAt | string | No | — | Data ISO 8601 di scadenza. Se omessa la chiave non scade. |
ipAllowlist | string[] | No | — | Elenco di indirizzi o reti CIDR autorizzati a usare la chiave. |
curl -sS -X POST https://api.blupantheon.com/identity/v1/api-keys \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 2c9f7a10-63b4-4f8e-9d15-0a7c3e5b8f42" \
-d '{
"name": "erp-sync-produzione",
"scopes": ["console:clients:read", "console:clients:write"],
"ipAllowlist": ["203.0.113.24/32"]
}'{
"id": "key_6d3f0a82",
"name": "erp-sync-produzione",
"prefix": "bp_live_xxxx",
"secret": "bp_live_xxxxxxxxxxxxxxxx",
"scopes": ["console:clients:read", "console:clients:write"],
"status": "active",
"createdAt": "2026-09-04T10:32:15.482Z"
}Revoca chiave API
/identity/v1/api-keys/{keyId}Bearer JWTRevoca immediatamente la chiave. L'operazione è irreversibile. Accetta Idempotency-Key.
{ "id": "key_6d3f0a82", "status": "revoked", "revokedAt": "2026-09-04T12:01:44.223Z" }Elenco tenant
/identity/v1/tenantsBearer JWTElenca i tenant a cui la credenziale ha accesso. Per la maggior parte degli utenti restituisce un solo elemento.
{
"data": [
{
"id": "tnt_2b8e4f11",
"slug": "acme",
"name": "ACME S.p.A.",
"status": "active",
"plan": "business",
"region": "eu-west",
"createdAt": "2025-11-14T09:18:55.402Z"
}
],
"pagination": { "nextCursor": null, "hasMore": false, "total": 1 }
}Impostazioni tenant
/identity/v1/tenants/{tenantId}/settingsBearer JWTAggiorna le impostazioni del tenant: sicurezza, localizzazione e criteri password. Accetta Idempotency-Key.
{
"defaultLocale": "it-IT",
"timezone": "Europe/Rome",
"security": {
"mfaRequired": true,
"sessionIdleTimeoutMinutes": 30,
"passwordMinLength": 12,
"ipAllowlist": ["203.0.113.0/24"]
}
}{
"tenantId": "tnt_2b8e4f11",
"defaultLocale": "it-IT",
"timezone": "Europe/Rome",
"security": {
"mfaRequired": true,
"sessionIdleTimeoutMinutes": 30,
"passwordMinLength": 12,
"ipAllowlist": ["203.0.113.0/24"]
},
"updatedAt": "2026-09-04T12:15:31.774Z"
}Console
Prefisso /console/v1. Conversazioni, anagrafiche, progetti, knowledge base e statistiche.
Elenco sessioni
/console/v1/sessionsAPI KeyElenca le conversazioni. Filtrabile per progetto, stato, canale e intervallo temporale.
Parametri query
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
projectId | string | No | — | Limita i risultati a un progetto, ad esempio bp_proj_7f3a9c21. |
status | string | No | — | Stato della sessione: open, closed, handover, abandoned. |
channel | string | No | — | Canale di origine: web, whatsapp, email, telegram, api. |
clientId | string | No | — | Limita i risultati alle sessioni di un cliente. |
createdAfter | string | No | — | Data ISO 8601 di inizio finestra, estremo escluso. |
createdBefore | string | No | — | Data ISO 8601 di fine finestra, estremo escluso. |
limit | number | No | 50 | Elementi per pagina, da 1 a 200. |
curl -sS -G "https://api.blupantheon.com/console/v1/sessions" \
-H "Authorization: Bearer bp_live_xxxxxxxxxxxxxxxx" \
--data-urlencode "projectId=bp_proj_7f3a9c21" \
--data-urlencode "status=open" \
--data-urlencode "limit=50"{
"data": [
{
"id": "sess_9f2c8d41",
"projectId": "bp_proj_7f3a9c21",
"clientId": "cli_5e1a7b30",
"channel": "web",
"status": "open",
"language": "it",
"messageCount": 14,
"startedAt": "2026-09-04T09:12:44.006Z",
"lastActivityAt": "2026-09-04T09:41:02.884Z"
}
],
"pagination": { "nextCursor": "eyJpZCI6InNlc3NfOWYyYzhkNDEifQ", "hasMore": true, "total": 1234 }
}Dettaglio sessione
/console/v1/sessions/{sessionId}API KeyRestituisce il dettaglio completo di una sessione, incluse metriche e metadati raccolti.
{
"id": "sess_9f2c8d41",
"projectId": "bp_proj_7f3a9c21",
"clientId": "cli_5e1a7b30",
"channel": "web",
"status": "open",
"language": "it",
"messageCount": 14,
"metrics": {
"durationSeconds": 1698,
"averageResponseMs": 1240,
"tokensUsed": 8412,
"satisfactionScore": 4
},
"metadata": { "sourceUrl": "https://www.acme.it/supporto", "utmCampaign": "settembre-2026" },
"tags": ["preventivo", "prima-linea"],
"startedAt": "2026-09-04T09:12:44.006Z",
"lastActivityAt": "2026-09-04T09:41:02.884Z"
}Messaggi di una sessione
/console/v1/sessions/{sessionId}/messagesAPI KeyElenca i messaggi in ordine cronologico. Consigliato order=asc per ricostruire la conversazione.
{
"data": [
{
"id": "msg_1c7e0b93",
"sessionId": "sess_9f2c8d41",
"role": "user",
"content": "Buongiorno, vorrei un preventivo per 50 licenze.",
"createdAt": "2026-09-04T09:12:44.301Z"
},
{
"id": "msg_4f9a2d18",
"sessionId": "sess_9f2c8d41",
"role": "assistant",
"content": "Certamente. Mi conferma la ragione sociale e la partita IVA?",
"citations": [{ "documentId": "doc_2e8b4c07", "title": "Listino 2026", "score": 0.87 }],
"createdAt": "2026-09-04T09:12:46.914Z"
}
],
"pagination": { "nextCursor": null, "hasMore": false, "total": 14 }
}Chiusura sessione
/console/v1/sessions/{sessionId}/closeAPI KeyChiude la conversazione e ne congela lo storico. Accetta Idempotency-Key.
{ "reason": "resolved", "note": "Preventivo inviato via email." }{
"id": "sess_9f2c8d41",
"status": "closed",
"reason": "resolved",
"closedAt": "2026-09-04T10:02:11.556Z"
}Richiesta di passaggio a operatore
/console/v1/sessions/{sessionId}/handoverAPI KeyTrasferisce la conversazione a un operatore umano e notifica la coda indicata. Accetta Idempotency-Key.
{
"queue": "vendite",
"priority": "high",
"reason": "Richiesta di sconto fuori listino",
"context": { "dealSize": "50 licenze" }
}{
"sessionId": "sess_9f2c8d41",
"handoverId": "hnd_7a3c5e01",
"status": "pending",
"queue": "vendite",
"position": 2,
"requestedAt": "2026-09-04T09:44:18.220Z"
}Clienti
/console/v1/clientsAPI KeyElenca le anagrafiche clienti del tenant, con filtri per stato e data di aggiornamento.
{
"data": [
{
"id": "cli_5e1a7b30",
"email": "mario.rossi@acme.it",
"firstName": "Mario",
"lastName": "Rossi",
"phoneNumber": "+390212345678",
"company": "ACME S.p.A.",
"status": "active",
"tags": ["cliente-storico"],
"createdAt": "2026-02-11T14:03:29.881Z",
"updatedAt": "2026-09-01T08:47:12.104Z"
}
],
"pagination": { "nextCursor": "eyJpZCI6ImNsaV81ZTFhN2IzMCJ9", "hasMore": true, "total": 4820 }
}/console/v1/clientsAPI KeyCrea un'anagrafica cliente. Accetta Idempotency-Key: usala per rendere sicure le importazioni massive.
{
"email": "mario.rossi@acme.it",
"firstName": "Mario",
"lastName": "Rossi",
"phoneNumber": "+390212345678",
"company": "ACME S.p.A.",
"externalId": "CRM-88213",
"tags": ["lead-inbound"]
}{
"id": "cli_5e1a7b30",
"email": "mario.rossi@acme.it",
"firstName": "Mario",
"lastName": "Rossi",
"externalId": "CRM-88213",
"status": "active",
"createdAt": "2026-09-04T10:32:15.482Z"
}/console/v1/clients/{clientId}API KeyAggiorna i campi indicati dell'anagrafica. Accetta Idempotency-Key.
{ "phoneNumber": "+390687654321", "tags": ["cliente-storico", "rinnovo-2027"] }{
"id": "cli_5e1a7b30",
"phoneNumber": "+390687654321",
"tags": ["cliente-storico", "rinnovo-2027"],
"updatedAt": "2026-09-04T11:11:02.640Z"
}/console/v1/clients/searchAPI KeyRicerca full text su nome, cognome, email, telefono, azienda e identificativo esterno.
curl -sS -G "https://api.blupantheon.com/console/v1/clients/search" \
-H "Authorization: Bearer bp_live_xxxxxxxxxxxxxxxx" \
--data-urlencode "q=acme" \
--data-urlencode "limit=20"{
"data": [
{ "id": "cli_5e1a7b30", "email": "mario.rossi@acme.it", "company": "ACME S.p.A.", "score": 0.94 }
],
"pagination": { "nextCursor": null, "hasMore": false, "total": 1 }
}Elenco progetti
/console/v1/projectsAPI KeyElenca i progetti configurati nel tenant, con stato di pubblicazione e canali attivi.
{
"data": [
{
"id": "bp_proj_7f3a9c21",
"name": "Assistenza clienti",
"slug": "assistenza-clienti",
"status": "published",
"channels": ["web", "whatsapp"],
"defaultLanguage": "it",
"createdAt": "2026-01-20T10:05:44.918Z"
}
],
"pagination": { "nextCursor": null, "hasMore": false, "total": 4 }
}Dettaglio progetto
/console/v1/projects/{projectId}API KeyRestituisce la configurazione completa del progetto: modello, comportamento, knowledge base collegate.
{
"id": "bp_proj_7f3a9c21",
"name": "Assistenza clienti",
"status": "published",
"model": { "provider": "azure-openai", "name": "gpt-4o", "temperature": 0.2 },
"dataStores": ["ds_3c8f1a60", "ds_7e2b9d45"],
"tools": ["booking.create", "crm.lookup"],
"handover": { "enabled": true, "queue": "vendite" },
"updatedAt": "2026-08-28T15:39:07.462Z"
}Knowledge base
/console/v1/data-storesAPI KeyElenca le knowledge base del tenant con conteggio documenti e spazio occupato.
{
"data": [
{
"id": "ds_3c8f1a60",
"name": "Documentazione prodotto",
"documentCount": 312,
"sizeBytes": 184320512,
"status": "ready",
"lastIndexedAt": "2026-09-03T22:14:51.309Z"
}
],
"pagination": { "nextCursor": null, "hasMore": false, "total": 3 }
}Caricamento documento
/console/v1/data-stores/{storeId}/documentsAPI KeyCarica un documento nella knowledge base. Richiesta multipart/form-data. Accetta Idempotency-Key.
curl -sS -X POST "https://api.blupantheon.com/console/v1/data-stores/ds_3c8f1a60/documents" \
-H "Authorization: Bearer bp_live_xxxxxxxxxxxxxxxx" \
-H "Idempotency-Key: 9e0b1c47-2f83-4d5a-8b16-7c4e2a9d5f30" \
-F "file=@listino-2026.pdf" \
-F 'metadata={"title":"Listino 2026","language":"it","tags":["listino"]}'{
"id": "doc_2e8b4c07",
"dataStoreId": "ds_3c8f1a60",
"title": "Listino 2026",
"fileName": "listino-2026.pdf",
"sizeBytes": 1843205,
"status": "processing",
"createdAt": "2026-09-04T10:32:15.482Z"
}Indicizzazione asincrona
Il documento è utilizzabile solo quando lo stato passa a ready. Attendi l'evento webhook
document.indexed invece di interrogare ripetutamente lo stato:
vedi Riferimento webhook.
Statistiche
/console/v1/statisticsAPI KeyRestituisce metriche aggregate su conversazioni, consumi e qualità in una finestra temporale.
Parametri query
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
from | string | Sì | — | Inizio della finestra in formato ISO 8601. |
to | string | Sì | — | Fine della finestra in formato ISO 8601. Massimo 366 giorni dall’inizio. |
granularity | string | No | day | Aggregazione dei punti: hour, day, week, month. |
projectId | string | No | — | Limita le metriche a un progetto. |
metrics | string | No | — | Elenco di metriche separate da virgola. Se omesso restituisce il set predefinito. |
{
"range": { "from": "2026-08-01T00:00:00Z", "to": "2026-09-01T00:00:00Z", "granularity": "day" },
"totals": {
"sessions": 4820,
"messages": 61204,
"handovers": 312,
"tokensUsed": 18420115,
"averageSatisfaction": 4.3,
"resolutionRate": 0.87
},
"series": [
{ "date": "2026-08-01", "sessions": 142, "messages": 1810, "handovers": 9 },
{ "date": "2026-08-02", "sessions": 118, "messages": 1503, "handovers": 6 }
]
}Billing
Prefisso /billing/v1. Abbonamento, consumi e documenti contabili del tenant.
Abbonamento
/billing/v1/subscriptionAPI KeyRestituisce piano attivo, ciclo di fatturazione e limiti inclusi.
{
"id": "sub_4b7e1a09",
"plan": "business",
"status": "active",
"billingCycle": "monthly",
"currentPeriodStart": "2026-09-01T00:00:00Z",
"currentPeriodEnd": "2026-10-01T00:00:00Z",
"price": { "amount": 49900, "currency": "EUR" },
"limits": { "seats": 25, "sessionsPerMonth": 20000, "storageGb": 100 },
"cancelAtPeriodEnd": false
}Fatture
/billing/v1/invoicesAPI KeyElenca le fatture emesse, dalla più recente. Il campo pdfUrl è un link firmato valido 15 minuti.
{
"data": [
{
"id": "inv_0f3d8b52",
"number": "2026/000418",
"status": "paid",
"issuedAt": "2026-09-01T06:00:00Z",
"dueAt": "2026-09-15T00:00:00Z",
"paidAt": "2026-09-01T06:04:33.117Z",
"total": { "amount": 60878, "currency": "EUR" },
"taxAmount": { "amount": 10978, "currency": "EUR" },
"pdfUrl": "https://files.blupantheon.com/invoices/inv_0f3d8b52.pdf?sig=..."
}
],
"pagination": { "nextCursor": null, "hasMore": false, "total": 11 }
}Consumi
/billing/v1/usageAPI KeyRestituisce i contatori di utilizzo del periodo corrente o di un periodo indicato.
{
"period": { "start": "2026-09-01T00:00:00Z", "end": "2026-10-01T00:00:00Z" },
"items": [
{ "metric": "sessions", "used": 4820, "included": 20000, "unit": "sessione" },
{ "metric": "tokens", "used": 18420115, "included": 50000000, "unit": "token" },
{ "metric": "storage", "used": 42, "included": 100, "unit": "GB" }
],
"overage": { "amount": 0, "currency": "EUR" },
"updatedAt": "2026-09-04T10:00:00Z"
}Profilo di fatturazione
/billing/v1/billing-profileBearer JWTAggiorna i dati di fatturazione del tenant. Sostituisce l'intero profilo. Accetta Idempotency-Key.
{
"legalName": "ACME S.p.A.",
"vatNumber": "IT01234567890",
"taxCode": "01234567890",
"sdiCode": "ABCDEFG",
"pec": "amministrazione@pec.acme.it",
"address": {
"line1": "Via Roma 12",
"city": "Milano",
"postalCode": "20121",
"province": "MI",
"country": "IT"
}
}{
"tenantId": "tnt_2b8e4f11",
"legalName": "ACME S.p.A.",
"vatNumber": "IT01234567890",
"sdiCode": "ABCDEFG",
"verified": true,
"updatedAt": "2026-09-04T12:22:48.903Z"
}Booking
Prefisso /booking/v1. Disponibilità e gestione degli appuntamenti.
Disponibilità
/booking/v1/availabilityAPI KeyRestituisce gli slot prenotabili per una risorsa o un servizio in un intervallo di date.
Parametri query
| Parametro | Tipo | Obblig. | Default | Descrizione |
|---|---|---|---|---|
serviceId | string | Sì | — | Servizio richiesto, ad esempio svc_1d9a4f70. |
from | string | Sì | — | Inizio dell’intervallo in formato ISO 8601. |
to | string | Sì | — | Fine dell’intervallo in formato ISO 8601. Massimo 90 giorni. |
resourceId | string | No | — | Limita la ricerca a una risorsa specifica, ad esempio un operatore. |
timezone | string | No | Europe/Rome | Fuso orario usato per calcolare gli orari di apertura. |
{
"serviceId": "svc_1d9a4f70",
"timezone": "Europe/Rome",
"slots": [
{ "start": "2026-09-08T09:00:00+02:00", "end": "2026-09-08T09:30:00+02:00", "resourceId": "res_5c2e8a13", "available": true },
{ "start": "2026-09-08T09:30:00+02:00", "end": "2026-09-08T10:00:00+02:00", "resourceId": "res_5c2e8a13", "available": false }
]
}Creazione prenotazione
/booking/v1/bookingsAPI KeyCrea una prenotazione su uno slot disponibile. Accetta Idempotency-Key: indispensabile per evitare doppie prenotazioni in caso di timeout.
{
"serviceId": "svc_1d9a4f70",
"resourceId": "res_5c2e8a13",
"start": "2026-09-08T09:00:00+02:00",
"clientId": "cli_5e1a7b30",
"notes": "Primo appuntamento conoscitivo",
"customFields": { "canale": "chat" }
}{
"id": "bkg_2a6f9c34",
"serviceId": "svc_1d9a4f70",
"resourceId": "res_5c2e8a13",
"clientId": "cli_5e1a7b30",
"status": "pending",
"start": "2026-09-08T07:00:00Z",
"end": "2026-09-08T07:30:00Z",
"confirmationCode": "ACME-4821",
"createdAt": "2026-09-04T10:32:15.482Z"
}Conferma prenotazione
/booking/v1/bookings/{bookingId}/confirmAPI KeyConferma una prenotazione in stato pending e invia la notifica al cliente. Accetta Idempotency-Key.
{
"id": "bkg_2a6f9c34",
"status": "confirmed",
"confirmedAt": "2026-09-04T10:35:02.771Z",
"notificationsSent": ["email", "sms"]
}Annullamento prenotazione
/booking/v1/bookings/{bookingId}API KeyAnnulla la prenotazione e libera lo slot. Accetta Idempotency-Key.
{ "reason": "client_request", "note": "Il cliente ha chiesto di rimandare." }{
"id": "bkg_2a6f9c34",
"status": "cancelled",
"reason": "client_request",
"cancelledAt": "2026-09-05T08:12:40.019Z"
}Elenco prenotazioni
/booking/v1/bookingsAPI KeyElenca le prenotazioni filtrabili per stato, servizio, risorsa, cliente e intervallo temporale.
curl -sS -G "https://api.blupantheon.com/booking/v1/bookings" \
-H "Authorization: Bearer bp_live_xxxxxxxxxxxxxxxx" \
--data-urlencode "status=confirmed" \
--data-urlencode "from=2026-09-08T00:00:00Z" \
--data-urlencode "to=2026-09-15T00:00:00Z" \
--data-urlencode "limit=100"{
"data": [
{
"id": "bkg_2a6f9c34",
"serviceId": "svc_1d9a4f70",
"clientId": "cli_5e1a7b30",
"status": "confirmed",
"start": "2026-09-08T07:00:00Z",
"end": "2026-09-08T07:30:00Z",
"confirmationCode": "ACME-4821"
}
],
"pagination": { "nextCursor": null, "hasMore": false, "total": 37 }
}