Configurare e utilizzare l'API REST
Interrogare gli appuntamenti liberi e prenotare appuntamenti, direttamente dalla Sua applicazione.
L'API lavora con JSON e viene richiamata tramite l'indirizzo https://example.com/api.
La procedura di prenotazione è composta da sei chiamate che si basano l'una sull'altra: calendario, motivo appuntamento, giorno, ora, campi del modulo e infine la prenotazione.
Tutte le chiamate avvengono dal Suo server, non dal browser dei Suoi clienti.
Passo 1: attivare l'API e generare il token
Alla consegna l'API è disattivata. La attivi nell'area di amministrazione.
- Faccia clic nella navigazione su Configurazione.
- Faccia clic nella sottonavigazione su Impostazioni generali.
- Faccia clic nell'elenco su Interfaccia.
- Attivi API attivare. La modifica viene salvata subito.
- Faccia clic su Genera nuovo token per creare il token di accesso dell'interfaccia.
- Copi subito il token mostrato e lo conservi in un luogo sicuro, non viene mostrato una seconda volta.
Schermate
Faccia clic nella navigazione su Configurazione
1
Faccia clic nella sottonavigazione su Impostazioni generali
2
Faccia clic nell'elenco su Interfaccia
3
Attivi API attivare. La modifica viene salvata subito
4
Faccia clic su Genera nuovo token per creare il token di accesso dell'interfaccia
5
Copi subito il token mostrato e lo conservi in un luogo sicuro, non viene mostrato una seconda volta
6
Il token inizia con apm_, seguito da 64 caratteri, e viene mostrato una sola volta. Nel sistema viene salvato esclusivamente un hash, il token stesso non è più leggibile in seguito.
C'è esattamente un token per installazione: se genera un nuovo token, quello precedente perde subito validità.
Il token va inviato a ogni chiamata nell'intestazione della richiesta:
Authorization: Bearer apm_suo-token
Passo 2: verificare la connessione e interrogare i calendari
Con la prima chiamata verifica la connessione e ottiene i numeri dei Suoi calendari appuntamenti.
curl -H "Authorization: Bearer apm_suo-token" \
https://example.com/api/schedules
Risposta:
{
"data": [
{ "id": 1, "name": "Sede principale" },
{ "id": 2, "name": "Filiale" }
]
}
L'id del calendario desiderato si usa in tutte le altre chiamate come parametro schedule.
Passo 3: interrogare i motivi appuntamento
curl -H "Authorization: Bearer apm_suo-token" \
"https://example.com/api/reasons?schedule=1"
Risposta:
{
"data": [
{
"id": 1,
"name": "Colloquio di consulenza",
"description": "Consulenza standard",
"duration": 1800
},
{
"id": 2,
"name": "Appuntamento di controllo",
"description": "",
"duration": 900
}
]
}
duration è la durata in secondi (1800 secondi corrispondono a 30 minuti).
L'id si usa poi come parametro reason. Se per un calendario non sono configurati motivi appuntamento, data è vuoto.
Passo 4: interrogare i giorni con appuntamenti liberi
curl -H "Authorization: Bearer apm_suo-token" \
"https://example.com/api/days?schedule=1&reason=1"
Risposta:
{
"data": ["2026-05-23", "2026-05-24", "2026-05-26"]
}
Vengono restituiti solo i giorni in cui è libero almeno un orario appuntamento. Fin dove arriva l'elenco nel futuro lo determinano le impostazioni del Suo calendario appuntamenti.
Passo 5: interrogare gli orari liberi di un giorno
curl -H "Authorization: Bearer apm_suo-token" \
"https://example.com/api/slots?schedule=1&reason=1&day=2026-05-23"
Risposta:
{
"data": [
"2026-05-23 09:00:00",
"2026-05-23 09:30:00",
"2026-05-23 10:00:00"
]
}
Gli orari sono orari locali della Sua installazione, il formato è sempre AAAA-MM-GG HH:MM:SS.
Passo 6: interrogare i campi del modulo della prenotazione
Quali campi servono per una prenotazione lo stabilisce Lei stesso nel pianificatore appuntamenti. Interroghi quindi sempre i campi invece di inserirli in modo fisso nel Suo programma.
Lo spazio nel parametro slot deve essere codificato come %20.
curl -H "Authorization: Bearer apm_suo-token" \
"https://example.com/api/forms?schedule=1&reason=1&slot=2026-05-23%2009:00:00"
Risposta:
{
"data": {
"first_name": {
"form_type": "textbox",
"input_type": "text",
"label": "Nome",
"required": true,
"value": ""
},
"last_name": {
"form_type": "textbox",
"input_type": "text",
"label": "Cognome",
"required": true,
"value": ""
},
"email": {
"form_type": "textbox",
"input_type": "email",
"label": "Indirizzo e-mail",
"required": false,
"value": ""
}
}
}
Tutti i campi con "required": true devono essere compilati al momento della prenotazione. Il campo password non viene mai restituito dall'API.
Passo 7: prenotare l'appuntamento
La prenotazione è l'unica chiamata con il metodo POST. L'intestazione deve contenere Content-Type: application/json.
In submission inserisce i valori relativi ai nomi dei campi del passo 6.
curl -X POST https://example.com/api/bookings \
-H "Authorization: Bearer apm_suo-token" \
-H "Content-Type: application/json" \
-d '{
"schedule": 1,
"reason": 1,
"slot": "2026-05-23 09:00:00",
"submission": {
"first_name": "Hans",
"last_name": "Pitt",
"email": "hans.pitt@example.com"
}
}'
Risposta in caso di successo (stato 201):
{
"booking_id": 142,
"booking_details_id": "a3f8c2d1e5b6",
"user_id": 87,
"slot": "2026-05-23T09:00:00Z"
}
booking_id: il numero dell'appuntamento per la Sua documentazionebooking_details_id: l'identificativo con cui il Suo cliente può consultare i dettagli del proprio appuntamentouser_id: il record cliente creato con la prenotazioneslot: l'inizio dell'appuntamento, qui in UTC secondo ISO 8601
L'appuntamento è così registrato nel pianificatore appuntamenti. Le e-mail di notifica vengono inviate come per ogni altra prenotazione.
Messaggi di errore
Anche gli errori vengono restituiti come JSON, per esempio {"error":"Unauthorized"}.
- 400 Invalid request:
scheduleoreasonnon è un numero,slotnon ha il formatoAAAA-MM-GG HH:MM:SSoppure mancasubmission. - 400 Invalid JSON: i dati inviati non sono JSON valido.
- 400 Required field empty: manca un campo obbligatorio del passo 6. Il campo interessato è indicato in
field. - 401 Unauthorized: il token manca, è errato oppure è stato sostituito da uno nuovo. Alcuni server rimuovono l'intestazione
Authorization; in caso di dubbio chieda al Suo provider. - 404 Schedule/Reason/Day/Slot not found: il numero richiesto, il giorno o l'ora non è (più) disponibile.
- 404 Not found: l'indirizzo è errato oppure un parametro manca o ha un formato errato. I parametri mancanti generano quindi non l'errore 400, ma 404.
- 415 Unsupported Media Type: nella prenotazione manca
Content-Type: application/json. - 429 Too Many Requests: è stato raggiunto il limite di 300 richieste al minuto. L'intestazione
Retry-Afterindica il tempo di attesa in secondi. - 500 Failed to create user/appointment: l'appuntamento non è stato salvato.
- 503 API disabled: l'API non è attivata (vedi passo 1).
- 503 Not configured: l'installazione non è ancora completata.
Note
- L'ordine delle chiamate è vincolante: ogni chiamata fornisce il dato che serve alla successiva.
- Gli orari vengono inviati in ora locale, la risposta della prenotazione contiene l'appuntamento in UTC.
- Tra l'interrogazione di un orario libero e la prenotazione, l'appuntamento può essere occupato da qualcun altro. In questo caso (errore 404 Slot not found) interroghi di nuovo gli orari liberi.
- Calendari e motivi appuntamento cambiano di rado e possono essere memorizzati nella cache. I giorni e gli orari liberi andrebbero interrogati ogni volta.
- L'API è pensata per la comunicazione tra server. Non vengono inviate intestazioni CORS, quindi una chiamata direttamente dal browser non è possibile. Il token non deve essere inserito in un sito web o in un'app.
- Ogni prenotazione crea un record cliente. Gli appuntamenti creati tramite l'API si riconoscono nel pianificatore dalla fonte
api. - Al momento non sono compresi: la cancellazione e lo spostamento di appuntamenti, la lettura degli appuntamenti esistenti e l'output suddiviso in pagine. Per le segnalazioni automatiche a sistemi esterni utilizzi il modulo Webhooks.
- Il riferimento tecnico completo con tutti i parametri, i codici di stato e gli schemi si trova in Riferimento API REST, la descrizione leggibile dalle macchine secondo OpenAPI 3.1 come openapi.json. Entrambi i file si trovano anche nella Sua installazione, sotto
https://example.com/api/docs.htmlehttps://example.com/api/openapi.json.
Torna alla panoramica: Modulo "API (interfaccia)".