{"openapi":"3.1.0","info":{"title":"SportsArena AI Booking Assistant API","description":"API ufficiale di SportsArena per la ricerca e prenotazione vocale di campi sportivi (Tennis, Padel, Beach Volley, Calcio a 5) da parte di assistenti AI (ChatGPT, Claude, Siri, agenti autonomi).","version":"1.0.0"},"servers":[{"url":"https://www.sportarena.app/api/ai","description":"Server SportsArena"}],"paths":{"/search":{"post":{"operationId":"searchAvailableCourts","summary":"Cerca campi sportivi disponibili","description":"Cerca campi liberi per sport, data, orario e località testuale (es. 'Roma sud', 'Milano Bicocca') o coordinate.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["sport","date","time"],"properties":{"sport":{"type":"string","description":"Nome dello sport o disciplina ('tennis', 'padel', 'beachVolley', 'calcetto', '5-a-side', 'fútbol 5', 'foot à 5', 'Kleinfeldfußball', 'calcio a 8', 'calcio', 'basket', 'pallavolo', ecc.). Riconosce automaticamente 5 lingue: IT, EN, ES, FR, DE."},"date":{"type":"string","description":"Data in formato ISO YYYY-MM-DD (es. '2026-09-09')"},"time":{"type":"string","description":"Orario preferito HH:mm (es. '10:00')"},"locationText":{"type":"string","description":"Località, quartiere o città in qualsiasi lingua (es. 'Roma sud', 'Rome EUR', 'München', 'Madrid centro', 'Paris')"},"latitude":{"type":"number","format":"double","description":"Latitudine opzionale (se già nota)"},"longitude":{"type":"number","format":"double","description":"Longitudine opzionale (se già nota)"},"radiusKm":{"type":"number","description":"Raggio di ricerca in km (default 15)"},"durationMinutes":{"type":"integer","description":"Durata in minuti (default 90)"},"toleranceHours":{"type":"integer","description":"Flessibilità oraria in ore +/- (default 2)"},"language":{"type":"string","description":"Lingua preferita per le risposte: 'it', 'en', 'es', 'fr', 'de' (opzionale)"}}}}}},"responses":{"200":{"description":"Elenco delle sedi con slot disponibili, prezzi e ID campo.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/book":{"post":{"operationId":"createCourtBooking","summary":"Prenota un campo sportivo","description":"Crea la prenotazione per un campo selezionato. Se l'email corrisponde a un account registrato viene collegata al suo profilo; altrimenti viene registrata come ospite.","security":[{"ApiKeyAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["fieldId","startTime","endTime","customerName","customerEmail"],"properties":{"fieldId":{"type":"integer","description":"ID del campo da prenotare"},"sport":{"type":"string","description":"Sport del campo ('tennis', 'padel', 'beachVolley', 'calcetto', '5-a-side', ecc.)"},"startTime":{"type":"string","format":"date-time","description":"Inizio ISO (es. '2026-09-09T10:00:00Z')"},"endTime":{"type":"string","format":"date-time","description":"Fine ISO (es. '2026-09-09T11:30:00Z')"},"customerName":{"type":"string","description":"Nome e cognome di chi prenota"},"customerEmail":{"type":"string","format":"email","description":"Email per conferma e associazione account"},"customerPhone":{"type":"string","description":"Recapito telefonico"},"notes":{"type":"string","description":"Note facoltative"},"language":{"type":"string","description":"Lingua del messaggio di conferma: 'it', 'en', 'es', 'fr', 'de' (opzionale)"}}}}}},"responses":{"200":{"description":"Conferma della prenotazione con numero ID e dettagli","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"X-Ai-ApiKey","description":"Chiave segreta per autorizzare la creazione di prenotazioni."}}}}