{"openapi":"3.1.0","info":{"title":"OKsitiweb – API prenotazioni per assistenti AI","version":"1.0.0","description":"Consulta servizi e disponibilità, prenota e annulla appuntamenti per conto dell'utente (con la sua conferma e accettazione della privacy). Server MCP equivalente su https:\/\/prenotazioni.oksitiweb.it\/mcp.","contact":{"email":"info@oksitiweb.it"}},"servers":[{"url":"https:\/\/prenotazioni.oksitiweb.it"}],"paths":{"\/api\/agent\/v1\/services":{"get":{"operationId":"listServices","summary":"Servizi prenotabili","responses":{"200":{"description":"Elenco servizi"},"503":{"description":"Errore","content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}}}}},"\/api\/agent\/v1\/availability":{"get":{"operationId":"checkAvailability","summary":"Orari liberi","parameters":[{"name":"service_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"mode","in":"query","schema":{"type":"string","enum":["office","onsite","audio_call","video_call"]}},{"name":"address","in":"query","description":"Obbligatorio per mode=onsite","schema":{"type":"string"}}],"responses":{"200":{"description":"Slot HH:MM"},"422":{"description":"Errore","content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}}}}},"\/api\/agent\/v1\/bookings":{"post":{"operationId":"createBooking","summary":"Prenota (richiede conferma dell'utente e privacy_accepted=true)","parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string"}},{"name":"X-Agent-Name","in":"header","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["service_id","date","time","mode","name","email","privacy_accepted"],"properties":{"service_id":{"type":"integer"},"date":{"type":"string","format":"date"},"time":{"type":"string","example":"10:30"},"mode":{"type":"string","enum":["office","onsite","audio_call","video_call"]},"address":{"type":"string"},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"notes":{"type":"string"},"privacy_accepted":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Ripetizione idempotente"},"201":{"description":"Creata (cancel_token, payment_url se a pagamento)"},"409":{"description":"Errore","content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Errore","content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}},"429":{"description":"Errore","content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}}}}},"\/api\/agent\/v1\/bookings\/{id}":{"get":{"operationId":"getBooking","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cancel_token","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Stato"},"404":{"description":"Errore","content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}}}}},"\/api\/agent\/v1\/bookings\/{id}\/cancel":{"post":{"operationId":"cancelBooking","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["cancel_token"],"properties":{"cancel_token":{"type":"string"}}}}}},"responses":{"200":{"description":"Annullata"},"404":{"description":"Errore","content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Errore","content":{"application\/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}