{"openapi":"3.0.0","paths":{"/api/v1/me":{"get":{"operationId":"MeController_me","parameters":[],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Me"],"summary":"Leggere tenant, scope e utente corrente","description":"Con API key user è null. Nessuno scope aggiuntivo oltre all'autenticazione.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":[]},"patch":{"operationId":"MeController_update","parameters":[],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tenant"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Me"],"summary":"Impostare la valuta del tenant","description":"Codice valuta supportato a tre lettere maiuscole. 409 se esistono periodi di prezzo: rimuoverli prima. Impostarla prima di configurare i prezzi.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeController_updateRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"defaultCurrency":"EUR"}}}}}}}},"/api/v1/api-keys":{"get":{"operationId":"ApiKeysController_list","parameters":[],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["ApiKeys"],"summary":"Elencare le chiavi tenant","description":"Restituisce soltanto metadati; mai hash o chiavi in chiaro.\n\nScope richiesti: api-keys:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["api-keys:read"]},"post":{"operationId":"ApiKeysController_create","parameters":[],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuedApiKey"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["ApiKeys"],"summary":"Creare una chiave tenant","description":"La chiave completa è restituita una sola volta. scopes omesso equivale a [\"*\"]. Non si possono assegnare scope superiori ai propri. La chiave copre tutto il tenant, non un singolo fornitore.\n\nScope richiesti: api-keys:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["api-keys:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeysController_createRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"name":"Gestionale","scopes":["catalog:read","availability:read","bookings:read"]}}}}}}}},"/api/v1/api-keys/{id}":{"delete":{"operationId":"ApiKeysController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["ApiKeys"],"summary":"Eliminare una chiave tenant","description":"Eliminazione immediata. Una API key non può eliminare sé stessa. Ruotare creando e verificando prima una chiave sostitutiva.\n\nScope richiesti: api-keys:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["api-keys:write"]}},"/api/v1/suppliers":{"get":{"operationId":"SuppliersController_list","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Suppliers"],"summary":"Elencare i fornitori","description":"Senza limit restituisce un array. Con limit (1–100) restituisce {items,total}; offset parte da 0 ed è ignorato senza limit. Non è un cursore di sincronizzazione. Esclude i fornitori archiviati; ordine per nome.\n\nScope richiesti: suppliers:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["suppliers:read"]},"post":{"operationId":"SuppliersController_create","parameters":[],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Supplier"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Suppliers"],"summary":"Creare un fornitore","description":"reference opzionale, derivata dal nome e univoca nel tenant. Se esplicita e già usata: 409. locale predefinito it-IT. Usare un fuso IANA, per esempio Europe/Rome.\n\nScope richiesti: suppliers:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["suppliers:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppliersController_createRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"name":"Operatore","timezone":"Europe/Rome","locale":"it-IT"}}}}}}}},"/api/v1/suppliers/{id}":{"get":{"operationId":"SuppliersController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Supplier"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Suppliers"],"summary":"Leggere un fornitore","description":"Scope richiesti: suppliers:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["suppliers:read"]},"patch":{"operationId":"SuppliersController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Supplier"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Suppliers"],"summary":"Modificare un fornitore","description":"PATCH parziale. null rimuove website, email, telephone o address. Modifiche a lingua, fuso e contatti si propagano ai prodotti.\n\nScope richiesti: suppliers:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["suppliers:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuppliersController_updateRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"name":"Operatore aggiornato","website":null}}}}}}},"delete":{"operationId":"SuppliersController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Suppliers"],"summary":"Archiviare un fornitore","description":"409 finché esistono prodotti, risorse o connessioni attive. Il fornitore viene archiviato, non cancellato fisicamente.\n\nScope richiesti: suppliers:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["suppliers:write"]}},"/api/v1/products":{"get":{"operationId":"CatalogController_listProducts","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"supplierId","in":"query","required":false,"schema":{"type":"string","minLength":1}},{"name":"search","in":"query","required":false,"schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Elencare il catalogo completo","description":"Senza limit restituisce un array. Con limit (1–100) restituisce {items,total}; offset parte da 0 ed è ignorato senza limit. Non è un cursore di sincronizzazione. Ordine per nome. Include opzioni, unità non ritirate, risorse richieste, periodi attivi e prezzi; include anche prodotti non ACTIVE.\n\nScope richiesti: catalog:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:read"]},"post":{"operationId":"CatalogController_createProduct","parameters":[],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Creare un prodotto","description":"status predefinito ACTIVE; per preparare il catalogo usare INACTIVE. reference derivata dal nome se omessa. metadata.directBooking=false abilita la richiesta di approvazione.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_createProductRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"supplierId":"supplier-id","name":"Tour di esempio","status":"INACTIVE"}}}}}}}},"/api/v1/products/{id}":{"get":{"operationId":"CatalogController_getProduct","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductDetail"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Leggere un prodotto e le sue opzioni","description":"Scope richiesti: catalog:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:read"]},"patch":{"operationId":"CatalogController_updateProduct","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Product"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Modificare un prodotto","description":"Risposta senza relazioni: usare GET per rileggere opzioni e foto. Cambiare il nome senza reference rigenera lo slug. timezone/locale null ripristinano l'eredità dal fornitore.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_updateProductRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"status":"ACTIVE"}}}}}}},"delete":{"operationId":"CatalogController_deleteProduct","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Eliminare un prodotto","description":"409 con prenotazioni attive o altri riferimenti che impediscono l'eliminazione. Le relazioni di catalogo vengono eliminate a cascata.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"]}},"/api/v1/options/{id}":{"get":{"operationId":"CatalogController_getOption","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptionDetail"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Leggere opzione, unità, risorse e periodi","description":"Scope richiesti: catalog:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:read"]},"patch":{"operationId":"CatalogController_updateOption","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Option"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Modificare un'opzione","description":"pricingPer si cambia con PUT pricing-periods. Impostare un'altra opzione predefinita prima di rimuovere isDefault dall'attuale. reference rigenerata quando cambia name.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_updateOptionRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"bookingCutoffMinutes":60}}}}}}},"delete":{"operationId":"CatalogController_deleteOption","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Eliminare un'opzione","description":"409 con prenotazioni attive. Se era predefinita, viene selezionata un'altra opzione.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"]}},"/api/v1/products/{id}/photos":{"post":{"operationId":"CatalogController_addPhoto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Photo"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Caricare una foto","description":"data è base64 senza prefisso data:. contentType: image/jpeg, image/png o image/webp. Massimo 14.000.000 caratteri base64 (circa 10 MB decodificati); limite corpo JSON: 15 MB.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_addPhotoRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"contentType":"image/png","data":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+aZ1sAAAAASUVORK5CYII="}}}}}}},"put":{"operationId":"CatalogController_reorderPhotos","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Riordinare tutte le foto","description":"ids deve contenere esattamente tutti gli id delle foto del prodotto, senza duplicati.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_reorderPhotosRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"ids":["photo-id"]}}}}}}}},"/api/v1/products/{id}/photos/{photoId}":{"put":{"operationId":"CatalogController_replacePhoto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"photoId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Photo"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Sostituire una foto","description":"Mantiene id e ordinamento. Stesso formato e limiti del caricamento.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_replacePhotoRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"contentType":"image/png","data":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+aZ1sAAAAASUVORK5CYII="}}}}}}},"delete":{"operationId":"CatalogController_deletePhoto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"photoId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Eliminare una foto","description":"Scope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"]},"get":{"operationId":"CatalogController_getPhotoFile","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"photoId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Byte dell'immagine.","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"}},"image/png":{"schema":{"type":"string","format":"binary"}},"image/webp":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Scaricare una foto pubblica","description":"Non richiede autenticazione. Restituisce i byte dell'immagine, non JSON. Non caricare documenti riservati.","security":[],"x-required-scopes":[]}},"/api/v1/products/{id}/options":{"post":{"operationId":"CatalogController_createOption","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Option"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Creare un'opzione","description":"La prima opzione è predefinita. durationMinutes predefinito 60, cutoff 0. reference generata dal nome. Le opzioni non hanno un campo status; lo stato vendibile è sul prodotto.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_createOptionRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"name":"Mattina","durationMinutes":60,"pricingPer":"UNIT"}}}}}}}},"/api/v1/options/{id}/units":{"post":{"operationId":"CatalogController_createUnit","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Creare un'unità prenotabile","description":"reference generata dal nome. Le tariffe UNIT/RESOURCE esistenti ricevono una voce a prezzo zero: aggiornare i prezzi prima di vendere. RESOURCE usa metadata.resourceId; restrictions.paxCount indica i posti per unità.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_createUnitRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"type":"ADULT","name":"Adulto","restrictions":{"paxCount":1}}}}}}}}},"/api/v1/units/{id}":{"patch":{"operationId":"CatalogController_updateUnit","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Modificare un'unità","description":"minAge ≤ maxAge e minQuantity ≤ maxQuantity se presenti. restrictions e metadata sostituiscono gli oggetti, non vengono uniti ricorsivamente.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogController_updateUnitRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"name":"Adulto aggiornato"}}}}}}},"delete":{"operationId":"CatalogController_deleteUnit","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Catalog"],"summary":"Rimuovere un'unità dal catalogo","description":"Con prenotazioni attive l'unità viene ritirata e resta nello storico; altrimenti viene eliminata. Le chiavi prezzo vengono aggiornate.\n\nScope richiesti: catalog:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["catalog:write"]}},"/api/v1/resources":{"get":{"operationId":"ResourcesController_list","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"supplierId","in":"query","required":false,"schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Elencare le risorse","description":"Senza limit restituisce un array. Con limit (1–100) restituisce {items,total}; offset parte da 0 ed è ignorato senza limit. Non è un cursore di sincronizzazione. Ordine per nome.\n\nScope richiesti: resources:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:read"]},"post":{"operationId":"ResourcesController_create","parameters":[],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resource"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Creare una risorsa","description":"Capacità totale in posti = quantity × capacityPerResource. La risorsa appartiene a un solo fornitore.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesController_createRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"supplierId":"supplier-id","name":"Posti tour","quantity":1,"capacityPerResource":10}}}}}}}},"/api/v1/resources/{id}":{"get":{"operationId":"ResourcesController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceDetail"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Leggere una risorsa e i collegamenti","description":"Scope richiesti: resources:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:read"]},"patch":{"operationId":"ResourcesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resource"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Modificare una risorsa","description":"Cambiare quantity o capacityPerResource aggiorna la capacità di tutti gli slot, sovrascrivendo anche gli override. 409 se la nuova capacità è inferiore al riservato.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesController_updateRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"quantity":2}}}}}}},"delete":{"operationId":"ResourcesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Eliminare una risorsa","description":"409 se inventario o opzioni la referenziano. Non esiste un endpoint di cancellazione degli slot inventario.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"]}},"/api/v1/options/{id}/resource-requirements":{"post":{"operationId":"ResourcesController_addRequirement","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Requirement"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Collegare o aggiornare una risorsa dell'opzione","description":"Risorsa e opzione devono appartenere allo stesso fornitore. Upsert per (optionId,resourceId). quantity predefinito 1; maxQuantity omesso/null usa tutto il pool. Omettere i valori li ripristina ai default anche in aggiornamento.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesController_addRequirementRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"resourceId":"resource-id","quantity":1,"maxQuantity":null}}}}}}}},"/api/v1/options/{optionId}/resource-requirements/{resourceId}":{"delete":{"operationId":"ResourcesController_removeRequirement","parameters":[{"name":"optionId","required":true,"in":"path","schema":{"type":"string"}},{"name":"resourceId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Scollegare una risorsa dall'opzione","description":"Scope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"]}},"/api/v1/options/{id}/availability-periods":{"get":{"operationId":"ResourcesController_availabilityPeriods","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityPeriodList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Elencare i periodi di disponibilità attivi","description":"Ordine per startMonthDay. Non usare i campi legacy prices/currency per leggere le tariffe.\n\nScope richiesti: availability:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["availability:read"]},"post":{"operationId":"ResourcesController_createAvailabilityPeriod","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityPeriod"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Aggiungere disponibilità ricorrente","description":"Ricorrenza annuale nel fuso del prodotto, altrimenti del fornitore. Date MM-DD inclusive, anche a cavallo d'anno; weekdays: 0 domenica–6 sabato; startTimes: HH:mm. Serve almeno una risorsa collegata. Non configura i prezzi: completare pricing-periods prima di vendere.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesController_createAvailabilityPeriodRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"startMonthDay":"01-01","endMonthDay":"12-31","weekdays":[0,1,2,3,4,5,6],"startTimes":["10:00"]}}}}}}}},"/api/v1/options/{optionId}/availability-periods/{periodId}":{"delete":{"operationId":"ResourcesController_removeAvailabilityPeriod","parameters":[{"name":"optionId","required":true,"in":"path","schema":{"type":"string"}},{"name":"periodId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Disattivare un periodo di disponibilità","description":"Il periodo resta nello storico con active=false; le prenotazioni esistenti non vengono annullate.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"]}},"/api/v1/availability-blocks":{"get":{"operationId":"ResourcesController_availabilityBlocks","parameters":[{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityBlockList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Elencare i blocchi che intersecano l'intervallo","description":"from ≤ to. Intersezione: startAt < to e endAt > from. Ordine per startAt.\n\nScope richiesti: availability:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["availability:read"]},"post":{"operationId":"ResourcesController_createAvailabilityBlock","parameters":[],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityBlock"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Bloccare le nuove prenotazioni di un prodotto","description":"startAt < endAt. Blocca partenze in [startAt,endAt); non cancella prenotazioni esistenti.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesController_createAvailabilityBlockRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"productId":"product-id","startAt":"2030-06-15T00:00:00Z","endAt":"2030-06-16T00:00:00Z"}}}}}}}},"/api/v1/availability-blocks/{id}":{"delete":{"operationId":"ResourcesController_removeAvailabilityBlock","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Rimuovere un blocco","description":"Scope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"]}},"/api/v1/options/{id}/pricing-periods":{"get":{"operationId":"ResourcesController_pricingPeriods","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingPeriodList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Leggere i periodi di prezzo","description":"Ordine per startMonthDay e createdAt. Valuta da GET /me.\n\nScope richiesti: availability:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["availability:read"]},"put":{"operationId":"ResourcesController_replacePricingPeriods","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingPeriodList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Sostituire modalità e intero calendario prezzi","description":"Ricorrenza annuale nel fuso del prodotto, altrimenti del fornitore. Date MM-DD inclusive, anche a cavallo d'anno; weekdays: 0 domenica–6 sabato; startTimes: HH:mm. Serve almeno una risorsa collegata. Operazione atomica e sostitutiva. UNIT/RESOURCE: una chiave per ogni unitId; BOOKING: sola chiave booking. Importi interi nelle unità minori. I periodi devono coprire la disponibilità ricorrente; nelle sovrapposizioni vince il prezzo massimo per chiave. Le fasce retailPriceTiers sono solo BOOKING: minQuantity ≤ maxQuantity; in sovrapposizione vince il prezzo massimo, senza fascia applicabile la quotazione fallisce. Gli id dei periodi vengono rigenerati.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesController_replacePricingPeriodsRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"pricingPer":"UNIT","periods":[{"startMonthDay":"01-01","endMonthDay":"12-31","weekdays":[0,1,2,3,4,5,6],"startTimes":["10:00"],"retailPrices":{"unit-id":2500}}]}}}}}}}},"/api/v1/resources/{id}/inventory":{"post":{"operationId":"ResourcesController_upsertInventory","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Impostare la capacità degli slot","description":"Upsert per (resourceId,startAt). Specificare capacity (posti totali) oppure quantity (numero risorse), mai entrambi; senza entrambi ripristina la capacità del pool. Non modifica reserved. endAt, se presente, deve essere dopo startAt. 409 sotto il riservato. Non inviare la disponibilità residua come capacità totale.\n\nScope richiesti: resources:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcesController_upsertInventoryRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"slots":[{"startAt":"2030-06-15T08:00:00Z","capacity":10}]}}}}}}},"get":{"operationId":"ResourcesController_inventory","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Resources"],"summary":"Leggere gli slot inventario","description":"from ≤ to; estremi inclusivi sulla partenza, ordine startAt. Non è un preventivo di disponibilità vendibile.\n\nScope richiesti: resources:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["resources:read"]}},"/api/v1/availability":{"get":{"operationId":"AvailabilityController_get","parameters":[{"name":"optionId","in":"query","required":true,"schema":{"type":"string","minLength":1}},{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Availability"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Availability"],"summary":"Calcolare la disponibilità operativa","description":"Intervallo inclusivo sulle partenze UTC. Può materializzare l'inventario ricorrente. Nessuna quotazione prezzi: leggere pricing-periods; il totale autorevole della prenotazione è pricingSnapshot. Questa API management ignora il booking cutoff nel flag available, ma POST bookings con startAt lo applica. Non riserva capacità.\n\nScope richiesti: availability:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["availability:read"]}},"/api/v1/bookings":{"get":{"operationId":"BookingsController_list","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["ON_HOLD","PENDING","CONFIRMED","CANCELLED","REJECTED","EXPIRED"]}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"supplierId","in":"query","required":false,"schema":{"type":"string","minLength":1}},{"name":"source","in":"query","required":false,"schema":{"type":"string","minLength":1}},{"name":"search","in":"query","required":false,"schema":{"type":"string","minLength":1}},{"name":"updatedSince","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BookingList"},{"$ref":"#/components/schemas/BookingChanges"}]}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Bookings"],"summary":"Elencare le prenotazioni","description":"Senza limit restituisce un array. Con limit (1–100) restituisce {items,total}; offset parte da 0 ed è ignorato senza limit. Non è un cursore di sincronizzazione. Ordine createdAt decrescente. from/to filtrano startAt, non updatedAt. search cerca nome/email cliente. source è api/v1 o il codice del canale/provider (anche per prenotazioni OCTO). Con updatedSince la risposta è {items,nextCursor}, ordinata per updatedAt/id; usa nextCursor fino a null.\n\nScope richiesti: bookings:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:read"]},"post":{"operationId":"BookingsController_create","parameters":[],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Bookings"],"summary":"Creare una prenotazione","description":"Esattamente uno tra startAt (UTC) e customStart (ora locale nel fuso del prodotto/fornitore). Almeno un'unità valida e quantità positive. idempotencyKey è nel JSON, univoca per tenant: il riuso restituisce la prenotazione esistente senza confrontare il payload, anche con risposta 201. Omettere status per rispettare metadata.directBooking: CONFIRMED normalmente, PENDING se false; ON_HOLD crea una riserva. customStart crea una partenza manuale e supera il booking cutoff; fornire retailPrices se manca una tariffa. expandCapacity=true autorizza un aumento della capacità. backdated richiede una sessione utente, con API key restituisce 403. endAt omesso può tornare null; il consumo usa la durata dell'opzione.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingsController_createRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"optionId":"option-id","startAt":"2030-06-15T08:00:00Z","unitItems":[{"unitId":"unit-id","quantity":2}],"status":"ON_HOLD","idempotencyKey":"gestionale:supplier:ordine-123","customer":{"firstName":"Ada","lastName":"Esempio","emailAddress":"ada@example.com"}}}}}}}}},"/api/v1/bookings/{id}":{"get":{"operationId":"BookingsController_get","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Bookings"],"summary":"Leggere una prenotazione","description":"Usare l'id interno, non uuid. Rileggere prima di PATCH per ottenere expectedUpdatedAt corrente.\n\nScope richiesti: bookings:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:read"]},"patch":{"operationId":"BookingsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Bookings"],"summary":"Modificare quantità, partenza o prezzi","description":"expectedUpdatedAt obbligatorio, da GET. Serve almeno uno tra startAt, customStart, unitItems, resourceItems, retailPrices, participants; startAt e customStart sono alternativi. unitItems sostituisce l'intera composizione. Stati ammessi: ON_HOLD non scaduto, PENDING, CONFIRMED. 409 per modifica concorrente, capacità insufficiente o canale di origine senza sottoscrizione BOOKING_UPDATE. L'API management supera i cutoff di prenotazione e cancellazione. Ricalcola prezzo e consumo atomicamente. Non consente di cambiare optionId, customer o notes.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingsController_updateRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"expectedUpdatedAt":"2030-06-01T12:00:00.000Z","unitItems":[{"unitId":"unit-id","quantity":3}]}}}}}}}},"/api/v1/bookings/{id}/confirm":{"post":{"operationId":"BookingsController_confirm","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Bookings"],"summary":"Confermare una riserva ON_HOLD","description":"Passa a CONFIRMED oppure PENDING se il prodotto richiede approvazione. Non è idempotente: una seconda conferma può dare 409. Dopo un timeout rileggere GET; rileggere anche prima del successivo PATCH.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"]}},"/api/v1/bookings/{id}/approve":{"post":{"operationId":"BookingsController_approve","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Bookings"],"summary":"Approvare una prenotazione PENDING","description":"Passa da PENDING a CONFIRMED; altri stati producono 409. Dopo un timeout rileggere GET prima di ritentare.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"]}},"/api/v1/bookings/{id}/reject":{"post":{"operationId":"BookingsController_reject","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Bookings"],"summary":"Rifiutare una prenotazione e liberare capacità","description":"Imposta REJECTED su una prenotazione attiva, con reason opzionale. Questa operazione management non applica il cancellation cutoff. Ripetere su uno stato finale produce 409; dopo un timeout rileggere GET.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingsController_rejectRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"reason":"Richiesta non approvata dal fornitore"}}}}}}}},"/api/v1/bookings/{id}/cancel":{"post":{"operationId":"BookingsController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Bookings"],"summary":"Cancellare una prenotazione e liberare capacità","description":"Imposta CANCELLED. Questa operazione management non applica il cancellation cutoff. Ripetere su CANCELLED o altri stati finali produce 409; dopo un timeout rileggere GET. Nessun rimborso o pagamento viene eseguito.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"]}},"/api/v1/sync-jobs":{"get":{"operationId":"SyncController_list","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["PENDING","RUNNING","RETRYING","SUCCEEDED","FAILED"]}},{"name":"provider","in":"query","required":false,"schema":{"type":"string"}},{"name":"supplierId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncJobList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Sync"],"summary":"Leggere gli ultimi job di sincronizzazione","description":"Massimo 200, createdAt decrescente; tentativi ordinati per numero. Non è una lista completa paginabile.\n\nScope richiesti: sync:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["sync:read"]}},"/api/v1/sync-jobs/{id}/retry":{"post":{"operationId":"SyncController_retry","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncRetried"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Sync"],"summary":"Accodare un nuovo tentativo per un job FAILED","description":"Clona l'evento di origine. 201 significa accodato, non consegnato. 400 se il job non è FAILED o l'evento non è più disponibile. Non è idempotente.\n\nScope richiesti: sync:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["sync:write"]}},"/api/v1/webhook-events/{id}/retry":{"post":{"operationId":"WebhookEventsController_retry","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Retried"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["WebhookEvents"],"summary":"Rielaborare un evento Viator ricevuto o fallito","description":"Solo provider VIATOR, stato RECEIVED/FAILED e tipo BookingRequest/BookingCancellationRequest. Non è un endpoint per sottoscrivere webhook.\n\nScope richiesti: sync:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["sync:write"]}},"/api/v1/webhooks/subscriptions":{"get":{"operationId":"ManagementWebhooksController_list","parameters":[],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagementWebhookSubscriptionList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["ManagementWebhooks"],"summary":"Elencare i webhook del gestionale","description":"Restituisce i webhook tenant-wide o del fornitore risolto dalla chiave. Gli header non vengono restituiti.\n\nScope richiesti: bookings:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:read"]},"post":{"operationId":"ManagementWebhooksController_create","parameters":[],"responses":{"201":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagementWebhookSubscription"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["ManagementWebhooks"],"summary":"Sottoscrivere gli aggiornamenti prenotazione","description":"Invia BOOKING_UPDATE per creazioni, conferme, modifiche e cancellazioni. supplierId omesso significa tutti i fornitori del tenant.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagementWebhooksController_createRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"url":"https://gestionale.example/webhooks/tako","supplierId":"supplier-id","headers":{"Authorization":"Bearer receiver-secret"}}}}}}}}},"/api/v1/webhooks/subscriptions/{id}":{"patch":{"operationId":"ManagementWebhooksController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagementWebhookSubscription"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Corpo JSON oltre il limite di 15 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["ManagementWebhooks"],"summary":"Modificare o riattivare un webhook","description":"ACTIVE azzera il contatore errori; gli header presenti sostituiscono quelli correnti.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagementWebhooksController_updateRequest"},"examples":{"standard":{"summary":"Sostituire gli id e le date con valori del proprio ambiente","value":{"status":"ACTIVE"}}}}}}},"delete":{"operationId":"ManagementWebhooksController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["ManagementWebhooks"],"summary":"Eliminare un webhook gestionale","description":"La rimozione è immediata.\n\nScope richiesti: bookings:write.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["bookings:write"]}},"/api/v1/audit-logs":{"get":{"operationId":"AuditController_list","parameters":[{"name":"entityType","in":"query","required":false,"schema":{"type":"string"}},{"name":"entityId","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operazione riuscita. Lo schema descrive il JSON restituito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditLogList"}}}},"400":{"description":"Validazione o regola di dominio non soddisfatta; correggere la richiesta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Credenziale assente, revocata, scaduta o non valida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Scope, ruolo o tipo di credenziale non consentito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Risorsa assente o non accessibile nel perimetro risolto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflitto di stato, capacità, versione o riferimenti; rileggere lo stato e correggere.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Errore interno. Prima di ripetere una mutazione verificarne l'esito.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"tags":["Audit"],"summary":"Leggere gli ultimi eventi di audit","description":"Massimo 200, timestamp decrescente. Filtri entityType/entityId; nessun cursore di sincronizzazione.\n\nScope richiesti: audit:read.","security":[{"tenantKey":[]},{"userSession":[]}],"x-required-scopes":["audit:read"]}}},"info":{"title":"Tako Management API","description":"API /api/v1 per gestionali, tenant e operatori. JSON; date ISO 8601 UTC; prezzi interi nelle unità minori della valuta. La chiave risolve il tenant: nessun X-Tenant-Id. I campi sconosciuti nelle richieste Zod vengono ignorati. I vincoli tra campi e di dominio sono descritti nelle singole operazioni e verificati dal server. Guide e reference navigabile sul sito documentazione. OCTO e Viator sono contratti distinti e non fanno parte di questa reference.","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"tenantKey":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Chiave tenant cm_live_…; non usare chiavi di connessione."}},"schemas":{"Supplier":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"timezone":{"type":"string"},"locale":{"type":"string"},"website":{"nullable":true,"type":"string"},"email":{"nullable":true,"type":"string"},"telephone":{"nullable":true,"type":"string"},"address":{"nullable":true,"type":"string"},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"deletedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","name","reference","createdAt","updatedAt","timezone","locale","website","email","telephone","address","metadata","deletedAt"]},"SupplierList":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"timezone":{"type":"string"},"locale":{"type":"string"},"website":{"nullable":true,"type":"string"},"email":{"nullable":true,"type":"string"},"telephone":{"nullable":true,"type":"string"},"address":{"nullable":true,"type":"string"},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"deletedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","name","reference","createdAt","updatedAt","timezone","locale","website","email","telephone","address","metadata","deletedAt"]}},{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"timezone":{"type":"string"},"locale":{"type":"string"},"website":{"nullable":true,"type":"string"},"email":{"nullable":true,"type":"string"},"telephone":{"nullable":true,"type":"string"},"address":{"nullable":true,"type":"string"},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"deletedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","name","reference","createdAt","updatedAt","timezone","locale","website","email","telephone","address","metadata","deletedAt"]}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","total"]}]},"Product":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"supplierId":{"type":"string"},"shortDescription":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"features":{"nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"shortDescription":{"type":"string"}},"required":["type","shortDescription"]}},"depositPercentage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationMinutesFrom":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationMinutesTo":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timezone":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"availabilityType":{"type":"string","enum":["START_TIME","OPENING_HOURS"]},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","tenantId","name","reference","createdAt","updatedAt","supplierId","shortDescription","description","features","depositPercentage","durationMinutesFrom","durationMinutesTo","timezone","locale","availabilityType","status","metadata"]},"ProductDetail":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"supplierId":{"type":"string"},"shortDescription":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"features":{"nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"shortDescription":{"type":"string"}},"required":["type","shortDescription"]}},"depositPercentage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationMinutesFrom":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationMinutesTo":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timezone":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"availabilityType":{"type":"string","enum":["START_TIME","OPENING_HOURS"]},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"productId":{"type":"string"},"isDefault":{"type":"boolean"},"durationMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pricingPer":{"nullable":true,"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"cancellationCutoffAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"cancellationCutoffUnit":{"type":"string"},"bookingCutoffMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"units":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"optionId":{"type":"string"},"type":{"type":"string","enum":["ADULT","YOUTH","CHILD","INFANT","FAMILY","SENIOR","STUDENT","MILITARY","OTHER"]},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"deletedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","name","reference","createdAt","updatedAt","optionId","type","requiredContactFields","restrictions","metadata","deletedAt"]}},"resourceRequirements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"resourceId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","tenantId","optionId","resourceId","quantity","maxQuantity"]}},"availabilityPeriods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"active":{"type":"boolean"},"pricingBasis":{"type":"string","description":"Campo legacy; leggere i prezzi da pricing-periods."},"currency":{"type":"string","description":"Campo legacy; la valuta corrente è tenant.defaultCurrency."},"prices":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","active","pricingBasis","currency","prices"]}},"pricingPeriods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"color":{"nullable":true,"type":"string"},"retailPrices":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"retailPriceTiers":{"nullable":true,"type":"array","items":{"type":"object","properties":{"minQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"required":["minQuantity","maxQuantity","retail"]}}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","color","retailPrices","retailPriceTiers"]}}},"required":["id","tenantId","name","reference","createdAt","updatedAt","productId","isDefault","durationMinutes","sortOrder","pricingPer","cancellationCutoffAmount","cancellationCutoffUnit","bookingCutoffMinutes","requiredContactFields","restrictions","metadata","units","resourceRequirements","availabilityPeriods","pricingPeriods"]}},"photos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contentType":{"type":"string"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","sortOrder","contentType","updatedAt"]}}},"required":["id","tenantId","name","reference","createdAt","updatedAt","supplierId","shortDescription","description","features","depositPercentage","durationMinutesFrom","durationMinutesTo","timezone","locale","availabilityType","status","metadata","options","photos"]},"ProductList":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"supplierId":{"type":"string"},"shortDescription":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"features":{"nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"shortDescription":{"type":"string"}},"required":["type","shortDescription"]}},"depositPercentage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationMinutesFrom":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationMinutesTo":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timezone":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"availabilityType":{"type":"string","enum":["START_TIME","OPENING_HOURS"]},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"productId":{"type":"string"},"isDefault":{"type":"boolean"},"durationMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pricingPer":{"nullable":true,"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"cancellationCutoffAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"cancellationCutoffUnit":{"type":"string"},"bookingCutoffMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"units":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"optionId":{"type":"string"},"type":{"type":"string","enum":["ADULT","YOUTH","CHILD","INFANT","FAMILY","SENIOR","STUDENT","MILITARY","OTHER"]},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"deletedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","name","reference","createdAt","updatedAt","optionId","type","requiredContactFields","restrictions","metadata","deletedAt"]}},"resourceRequirements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"resourceId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","tenantId","optionId","resourceId","quantity","maxQuantity"]}},"availabilityPeriods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"active":{"type":"boolean"},"pricingBasis":{"type":"string","description":"Campo legacy; leggere i prezzi da pricing-periods."},"currency":{"type":"string","description":"Campo legacy; la valuta corrente è tenant.defaultCurrency."},"prices":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","active","pricingBasis","currency","prices"]}},"pricingPeriods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"color":{"nullable":true,"type":"string"},"retailPrices":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"retailPriceTiers":{"nullable":true,"type":"array","items":{"type":"object","properties":{"minQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"required":["minQuantity","maxQuantity","retail"]}}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","color","retailPrices","retailPriceTiers"]}}},"required":["id","tenantId","name","reference","createdAt","updatedAt","productId","isDefault","durationMinutes","sortOrder","pricingPer","cancellationCutoffAmount","cancellationCutoffUnit","bookingCutoffMinutes","requiredContactFields","restrictions","metadata","units","resourceRequirements","availabilityPeriods","pricingPeriods"]}},"photos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contentType":{"type":"string"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","sortOrder","contentType","updatedAt"]}}},"required":["id","tenantId","name","reference","createdAt","updatedAt","supplierId","shortDescription","description","features","depositPercentage","durationMinutesFrom","durationMinutesTo","timezone","locale","availabilityType","status","metadata","options","photos"]}},{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"supplierId":{"type":"string"},"shortDescription":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"features":{"nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"shortDescription":{"type":"string"}},"required":["type","shortDescription"]}},"depositPercentage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationMinutesFrom":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"durationMinutesTo":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timezone":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"availabilityType":{"type":"string","enum":["START_TIME","OPENING_HOURS"]},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"options":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"productId":{"type":"string"},"isDefault":{"type":"boolean"},"durationMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pricingPer":{"nullable":true,"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"cancellationCutoffAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"cancellationCutoffUnit":{"type":"string"},"bookingCutoffMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"units":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"optionId":{"type":"string"},"type":{"type":"string","enum":["ADULT","YOUTH","CHILD","INFANT","FAMILY","SENIOR","STUDENT","MILITARY","OTHER"]},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"deletedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","name","reference","createdAt","updatedAt","optionId","type","requiredContactFields","restrictions","metadata","deletedAt"]}},"resourceRequirements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"resourceId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","tenantId","optionId","resourceId","quantity","maxQuantity"]}},"availabilityPeriods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"active":{"type":"boolean"},"pricingBasis":{"type":"string","description":"Campo legacy; leggere i prezzi da pricing-periods."},"currency":{"type":"string","description":"Campo legacy; la valuta corrente è tenant.defaultCurrency."},"prices":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","active","pricingBasis","currency","prices"]}},"pricingPeriods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"color":{"nullable":true,"type":"string"},"retailPrices":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"retailPriceTiers":{"nullable":true,"type":"array","items":{"type":"object","properties":{"minQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"required":["minQuantity","maxQuantity","retail"]}}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","color","retailPrices","retailPriceTiers"]}}},"required":["id","tenantId","name","reference","createdAt","updatedAt","productId","isDefault","durationMinutes","sortOrder","pricingPer","cancellationCutoffAmount","cancellationCutoffUnit","bookingCutoffMinutes","requiredContactFields","restrictions","metadata","units","resourceRequirements","availabilityPeriods","pricingPeriods"]}},"photos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contentType":{"type":"string"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","sortOrder","contentType","updatedAt"]}}},"required":["id","tenantId","name","reference","createdAt","updatedAt","supplierId","shortDescription","description","features","depositPercentage","durationMinutesFrom","durationMinutesTo","timezone","locale","availabilityType","status","metadata","options","photos"]}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","total"]}]},"Option":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"productId":{"type":"string"},"isDefault":{"type":"boolean"},"durationMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pricingPer":{"nullable":true,"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"cancellationCutoffAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"cancellationCutoffUnit":{"type":"string"},"bookingCutoffMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","tenantId","name","reference","createdAt","updatedAt","productId","isDefault","durationMinutes","sortOrder","pricingPer","cancellationCutoffAmount","cancellationCutoffUnit","bookingCutoffMinutes","requiredContactFields","restrictions","metadata"]},"OptionDetail":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"productId":{"type":"string"},"isDefault":{"type":"boolean"},"durationMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pricingPer":{"nullable":true,"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"cancellationCutoffAmount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"cancellationCutoffUnit":{"type":"string"},"bookingCutoffMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"units":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"optionId":{"type":"string"},"type":{"type":"string","enum":["ADULT","YOUTH","CHILD","INFANT","FAMILY","SENIOR","STUDENT","MILITARY","OTHER"]},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"deletedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","name","reference","createdAt","updatedAt","optionId","type","requiredContactFields","restrictions","metadata","deletedAt"]}},"resourceRequirements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"resourceId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","tenantId","optionId","resourceId","quantity","maxQuantity"]}},"availabilityPeriods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"active":{"type":"boolean"},"pricingBasis":{"type":"string","description":"Campo legacy; leggere i prezzi da pricing-periods."},"currency":{"type":"string","description":"Campo legacy; la valuta corrente è tenant.defaultCurrency."},"prices":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","active","pricingBasis","currency","prices"]}},"pricingPeriods":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"color":{"nullable":true,"type":"string"},"retailPrices":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"retailPriceTiers":{"nullable":true,"type":"array","items":{"type":"object","properties":{"minQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"required":["minQuantity","maxQuantity","retail"]}}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","color","retailPrices","retailPriceTiers"]}}},"required":["id","tenantId","name","reference","createdAt","updatedAt","productId","isDefault","durationMinutes","sortOrder","pricingPer","cancellationCutoffAmount","cancellationCutoffUnit","bookingCutoffMinutes","requiredContactFields","restrictions","metadata","units","resourceRequirements","availabilityPeriods","pricingPeriods"]},"Unit":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"name":{"type":"string"},"reference":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"optionId":{"type":"string"},"type":{"type":"string","enum":["ADULT","YOUTH","CHILD","INFANT","FAMILY","SENIOR","STUDENT","MILITARY","OTHER"]},"requiredContactFields":{"type":"array","items":{"type":"string"}},"restrictions":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"deletedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","name","reference","createdAt","updatedAt","optionId","type","requiredContactFields","restrictions","metadata","deletedAt"]},"Photo":{"type":"object","properties":{"id":{"type":"string"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contentType":{"type":"string"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","sortOrder","contentType","updatedAt"]},"PhotoList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contentType":{"type":"string"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","sortOrder","contentType","updatedAt"]}},"Resource":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"supplierId":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"capacityPerResource":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","supplierId","name","quantity","capacityPerResource","metadata","createdAt","updatedAt"]},"ResourceDetail":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"supplierId":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"capacityPerResource":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"requirements":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"resourceId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","tenantId","optionId","resourceId","quantity","maxQuantity"]}}},"required":["id","tenantId","supplierId","name","quantity","capacityPerResource","metadata","createdAt","updatedAt","requirements"]},"ResourceList":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"supplierId":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"capacityPerResource":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","supplierId","name","quantity","capacityPerResource","metadata","createdAt","updatedAt"]}},{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"supplierId":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"capacityPerResource":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","supplierId","name","quantity","capacityPerResource","metadata","createdAt","updatedAt"]}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","total"]}]},"Requirement":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"resourceId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","tenantId","optionId","resourceId","quantity","maxQuantity"]},"AvailabilityPeriod":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"active":{"type":"boolean"},"pricingBasis":{"type":"string","description":"Campo legacy; leggere i prezzi da pricing-periods."},"currency":{"type":"string","description":"Campo legacy; la valuta corrente è tenant.defaultCurrency."},"prices":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","active","pricingBasis","currency","prices"]},"AvailabilityPeriodList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"active":{"type":"boolean"},"pricingBasis":{"type":"string","description":"Campo legacy; leggere i prezzi da pricing-periods."},"currency":{"type":"string","description":"Campo legacy; la valuta corrente è tenant.defaultCurrency."},"prices":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","active","pricingBasis","currency","prices"]}},"PricingPeriodList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"optionId":{"type":"string"},"startMonthDay":{"type":"string"},"endMonthDay":{"type":"string"},"weekdays":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"startTimes":{"type":"array","items":{"type":"string"}},"label":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"color":{"nullable":true,"type":"string"},"retailPrices":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"retailPriceTiers":{"nullable":true,"type":"array","items":{"type":"object","properties":{"minQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."}},"required":["minQuantity","maxQuantity","retail"]}}},"required":["id","tenantId","optionId","startMonthDay","endMonthDay","weekdays","startTimes","label","createdAt","updatedAt","color","retailPrices","retailPriceTiers"]}},"InventoryList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"resourceId":{"type":"string"},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reserved":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","resourceId","startAt","endAt","capacity","reserved","createdAt","updatedAt"]}},"AvailabilityBlock":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"productId":{"type":"string"},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","productId","startAt","endAt","createdAt"]},"AvailabilityBlockList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"productId":{"type":"string"},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","productId","startAt","endAt","createdAt"]}},"Availability":{"type":"array","items":{"type":"object","properties":{"optionId":{"type":"string"},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"cutoffAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"maxUnits":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"manual":{"type":"boolean"},"available":{"type":"boolean"},"capacity":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"vacancies":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"resources":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"vacancies":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["resourceId","vacancies"]}}},"required":["optionId","startAt","endAt","cutoffAt","maxUnits","manual","available","capacity","vacancies"]}},"Booking":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"uuid":{"type":"string"},"supplierId":{"type":"string"},"sourceChannelConnectionId":{"nullable":true,"type":"string"},"productId":{"type":"string"},"optionId":{"type":"string"},"source":{"type":"string"},"externalId":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["ON_HOLD","PENDING","CONFIRMED","CANCELLED","REJECTED","EXPIRED"]},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expiresAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"customer":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"notes":{"nullable":true,"type":"string"},"cancellationReason":{"nullable":true,"type":"string"},"idempotencyKey":{"nullable":true,"type":"string"},"pricingSnapshot":{"nullable":true,"type":"object","properties":{"schemaVersion":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"pricingPer":{"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"currency":{"type":"string"},"currencyPrecision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"unitPricing":{"type":"array","items":{"type":"object","properties":{"unitId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"unitRetail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"name":{"type":"string"},"type":{"type":"string"},"paxCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["unitId","quantity","retail"]}}},"required":["schemaVersion","pricingPer","currency","currencyPrecision","retail","unitPricing"]},"resourceUsageSnapshot":{"nullable":true,"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"items":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"name":{"type":"string"},"capacityPlaces":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"resourceQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["resourceId","name","capacityPlaces"]}}},"required":["schemaVersion","items"]},"participants":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"unitItems":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"bookingId":{"type":"string"},"unitId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","bookingId","unitId","quantity","metadata"]}}},"required":["id","tenantId","uuid","supplierId","sourceChannelConnectionId","productId","optionId","source","externalId","status","startAt","endAt","expiresAt","customer","notes","cancellationReason","idempotencyKey","pricingSnapshot","resourceUsageSnapshot","participants","createdAt","updatedAt","unitItems"]},"BookingList":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"uuid":{"type":"string"},"supplierId":{"type":"string"},"sourceChannelConnectionId":{"nullable":true,"type":"string"},"productId":{"type":"string"},"optionId":{"type":"string"},"source":{"type":"string"},"externalId":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["ON_HOLD","PENDING","CONFIRMED","CANCELLED","REJECTED","EXPIRED"]},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expiresAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"customer":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"notes":{"nullable":true,"type":"string"},"cancellationReason":{"nullable":true,"type":"string"},"idempotencyKey":{"nullable":true,"type":"string"},"pricingSnapshot":{"nullable":true,"type":"object","properties":{"schemaVersion":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"pricingPer":{"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"currency":{"type":"string"},"currencyPrecision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"unitPricing":{"type":"array","items":{"type":"object","properties":{"unitId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"unitRetail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"name":{"type":"string"},"type":{"type":"string"},"paxCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["unitId","quantity","retail"]}}},"required":["schemaVersion","pricingPer","currency","currencyPrecision","retail","unitPricing"]},"resourceUsageSnapshot":{"nullable":true,"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"items":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"name":{"type":"string"},"capacityPlaces":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"resourceQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["resourceId","name","capacityPlaces"]}}},"required":["schemaVersion","items"]},"participants":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"unitItems":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"bookingId":{"type":"string"},"unitId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","bookingId","unitId","quantity","metadata"]}}},"required":["id","tenantId","uuid","supplierId","sourceChannelConnectionId","productId","optionId","source","externalId","status","startAt","endAt","expiresAt","customer","notes","cancellationReason","idempotencyKey","pricingSnapshot","resourceUsageSnapshot","participants","createdAt","updatedAt","unitItems"]}},{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"uuid":{"type":"string"},"supplierId":{"type":"string"},"sourceChannelConnectionId":{"nullable":true,"type":"string"},"productId":{"type":"string"},"optionId":{"type":"string"},"source":{"type":"string"},"externalId":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["ON_HOLD","PENDING","CONFIRMED","CANCELLED","REJECTED","EXPIRED"]},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expiresAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"customer":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"notes":{"nullable":true,"type":"string"},"cancellationReason":{"nullable":true,"type":"string"},"idempotencyKey":{"nullable":true,"type":"string"},"pricingSnapshot":{"nullable":true,"type":"object","properties":{"schemaVersion":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"pricingPer":{"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"currency":{"type":"string"},"currencyPrecision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"unitPricing":{"type":"array","items":{"type":"object","properties":{"unitId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"unitRetail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"name":{"type":"string"},"type":{"type":"string"},"paxCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["unitId","quantity","retail"]}}},"required":["schemaVersion","pricingPer","currency","currencyPrecision","retail","unitPricing"]},"resourceUsageSnapshot":{"nullable":true,"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"items":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"name":{"type":"string"},"capacityPlaces":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"resourceQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["resourceId","name","capacityPlaces"]}}},"required":["schemaVersion","items"]},"participants":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"unitItems":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"bookingId":{"type":"string"},"unitId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","bookingId","unitId","quantity","metadata"]}}},"required":["id","tenantId","uuid","supplierId","sourceChannelConnectionId","productId","optionId","source","externalId","status","startAt","endAt","expiresAt","customer","notes","cancellationReason","idempotencyKey","pricingSnapshot","resourceUsageSnapshot","participants","createdAt","updatedAt","unitItems"]}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","total"]}]},"BookingChanges":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"uuid":{"type":"string"},"supplierId":{"type":"string"},"sourceChannelConnectionId":{"nullable":true,"type":"string"},"productId":{"type":"string"},"optionId":{"type":"string"},"source":{"type":"string"},"externalId":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["ON_HOLD","PENDING","CONFIRMED","CANCELLED","REJECTED","EXPIRED"]},"startAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"endAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expiresAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"customer":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"notes":{"nullable":true,"type":"string"},"cancellationReason":{"nullable":true,"type":"string"},"idempotencyKey":{"nullable":true,"type":"string"},"pricingSnapshot":{"nullable":true,"type":"object","properties":{"schemaVersion":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"pricingPer":{"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"currency":{"type":"string"},"currencyPrecision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"unitPricing":{"type":"array","items":{"type":"object","properties":{"unitId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"unitRetail":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Importo nelle unità minori della valuta: EUR 1250 = 12,50 EUR."},"name":{"type":"string"},"type":{"type":"string"},"paxCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["unitId","quantity","retail"]}}},"required":["schemaVersion","pricingPer","currency","currencyPrecision","retail","unitPricing"]},"resourceUsageSnapshot":{"nullable":true,"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"items":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string"},"name":{"type":"string"},"capacityPlaces":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"resourceQuantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["resourceId","name","capacityPlaces"]}}},"required":["schemaVersion","items"]},"participants":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"unitItems":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"bookingId":{"type":"string"},"unitId":{"type":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."}},"required":["id","bookingId","unitId","quantity","metadata"]}}},"required":["id","tenantId","uuid","supplierId","sourceChannelConnectionId","productId","optionId","source","externalId","status","startAt","endAt","expiresAt","customer","notes","cancellationReason","idempotencyKey","pricingSnapshot","resourceUsageSnapshot","participants","createdAt","updatedAt","unitItems"]}},"nextCursor":{"nullable":true,"type":"string"}},"required":["items","nextCursor"]},"ManagementWebhookSubscription":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"supplierId":{"nullable":true,"type":"string"},"url":{"type":"string"},"notificationTypes":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["ACTIVE","DISABLED"]},"consecutiveFailures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"disabledReason":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","supplierId","url","notificationTypes","status","consecutiveFailures","disabledReason","createdAt","updatedAt"]},"ManagementWebhookSubscriptionList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"supplierId":{"nullable":true,"type":"string"},"url":{"type":"string"},"notificationTypes":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["ACTIVE","DISABLED"]},"consecutiveFailures":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"disabledReason":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","supplierId","url","notificationTypes","status","consecutiveFailures","disabledReason","createdAt","updatedAt"]}},"ApiKeyList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"lastUsedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expiresAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"revokedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","name","prefix","scopes","createdAt","lastUsedAt","expiresAt","revokedAt"]}},"IssuedApiKey":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"lastUsedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expiresAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"revokedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"key":{"type":"string","description":"Segreto restituito una sola volta alla creazione. Conservarlo prima di chiudere la risposta."}},"required":["id","name","prefix","scopes","createdAt","lastUsedAt","expiresAt","revokedAt","key"]},"Tenant":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"defaultCurrency":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","SUSPENDED"]}},"required":["id","name","defaultCurrency","status"]},"Me":{"type":"object","properties":{"tenant":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"defaultCurrency":{"type":"string"},"status":{"type":"string","enum":["ACTIVE","SUSPENDED"]}},"required":["id","name","defaultCurrency","status"]},"scopes":{"type":"array","items":{"type":"string"}},"user":{"nullable":true,"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"},"role":{"type":"string","enum":["ADMIN","PLATFORM","CHANNEL","SUPPLIER"]}},"required":["id","email","name","role"]}},"required":["tenant","scopes","user"]},"Deleted":{"type":"object","properties":{"deleted":{"type":"boolean","enum":[true]}},"required":["deleted"]},"Retried":{"type":"object","properties":{"retried":{"type":"boolean","enum":[true]}},"required":["retried"]},"SyncRetried":{"type":"object","properties":{"retried":{"type":"boolean","enum":[true]},"outboxEventId":{"type":"string"}},"required":["retried","outboxEventId"]},"SyncJobList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"supplierId":{"nullable":true,"type":"string"},"channelConnectionId":{"type":"string"},"provider":{"type":"string"},"type":{"type":"string"},"entityId":{"nullable":true,"type":"string"},"dedupKey":{"nullable":true,"type":"string"},"status":{"type":"string","enum":["PENDING","RUNNING","RETRYING","SUCCEEDED","FAILED"]},"correlationId":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"startedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"completedAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"attempts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"syncJobId":{"type":"string"},"attempt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string"},"errorCode":{"nullable":true,"type":"string"},"errorMessage":{"nullable":true,"type":"string"},"requestMetadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"responseMetadata":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","syncJobId","attempt","status","errorCode","errorMessage","requestMetadata","responseMetadata","createdAt"]}}},"required":["id","tenantId","supplierId","channelConnectionId","provider","type","entityId","dedupKey","status","correlationId","createdAt","startedAt","completedAt","attempts"]}},"AuditLogList":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tenantId":{"type":"string"},"actorType":{"type":"string","enum":["USER","API_KEY","SYSTEM"]},"actorId":{"nullable":true,"type":"string"},"source":{"type":"string"},"entityType":{"type":"string"},"entityId":{"type":"string"},"action":{"type":"string"},"before":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"after":{"description":"Valore JSON libero; non usare per dedurre campi strutturati non documentati."},"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","tenantId","actorType","actorId","source","entityType","entityId","action","before","after","timestamp"]}},"Error":{"type":"object","properties":{"statusCode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"error":{"type":"string"},"message":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"path":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"}]}},"message":{"type":"string"}},"required":["code","path","message"],"additionalProperties":{}}}]}},"required":["statusCode","message"]},"MeController_updateRequest":{"type":"object","properties":{"defaultCurrency":{"type":"string","pattern":"^[A-Z]{3}$"}},"required":["defaultCurrency"]},"ApiKeysController_createRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scopes":{"default":["*"],"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["name"]},"SuppliersController_createRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"reference":{"type":"string","pattern":"^[a-z0-9-]+$"},"timezone":{"type":"string","minLength":1},"locale":{"default":"it-IT","type":"string","minLength":2},"website":{"nullable":true,"type":"string","format":"uri"},"email":{"nullable":true,"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"telephone":{"nullable":true,"type":"string","minLength":1},"address":{"nullable":true,"type":"string","minLength":1},"metadata":{"type":"object","additionalProperties":{}}},"required":["name","timezone"]},"SuppliersController_updateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"reference":{"type":"string","pattern":"^[a-z0-9-]+$"},"timezone":{"type":"string","minLength":1},"locale":{"type":"string","minLength":2},"website":{"nullable":true,"type":"string","format":"uri"},"email":{"nullable":true,"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"telephone":{"nullable":true,"type":"string","minLength":1},"address":{"nullable":true,"type":"string","minLength":1},"metadata":{"type":"object","additionalProperties":{}}}},"CatalogController_createProductRequest":{"type":"object","properties":{"supplierId":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"reference":{"type":"string","pattern":"^[a-z0-9-]+$"},"shortDescription":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"features":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["INCLUSION","EXCLUSION","PREBOOKING_INFORMATION","ADDITIONAL_INFORMATION"]},"shortDescription":{"type":"string","minLength":1}},"required":["type","shortDescription"]}},"depositPercentage":{"type":"integer","minimum":0,"maximum":100},"durationMinutesFrom":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"durationMinutesTo":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"timezone":{"type":"string","minLength":1},"locale":{"type":"string","minLength":2},"availabilityType":{"type":"string","enum":["START_TIME","OPENING_HOURS"]},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]},"metadata":{"type":"object","additionalProperties":{}}},"required":["supplierId","name"]},"CatalogController_updateProductRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"reference":{"type":"string","pattern":"^[a-z0-9-]+$"},"shortDescription":{"nullable":true,"type":"string","minLength":1},"description":{"nullable":true,"type":"string","minLength":1},"features":{"nullable":true,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["INCLUSION","EXCLUSION","PREBOOKING_INFORMATION","ADDITIONAL_INFORMATION"]},"shortDescription":{"type":"string","minLength":1}},"required":["type","shortDescription"]}},"depositPercentage":{"type":"integer","minimum":0,"maximum":100},"durationMinutesFrom":{"nullable":true,"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"durationMinutesTo":{"nullable":true,"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"timezone":{"nullable":true,"type":"string","minLength":1},"locale":{"nullable":true,"type":"string","minLength":2},"availabilityType":{"type":"string","enum":["START_TIME","OPENING_HOURS"]},"status":{"type":"string","enum":["ACTIVE","INACTIVE"]},"metadata":{"type":"object","additionalProperties":{}}}},"CatalogController_updateOptionRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"isDefault":{"type":"boolean"},"durationMinutes":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":1440},"sortOrder":{"type":"integer","minimum":0,"maximum":9007199254740991},"cancellationCutoffAmount":{"type":"integer","minimum":0,"maximum":9007199254740991},"cancellationCutoffUnit":{"type":"string","enum":["minute","hour","day"]},"bookingCutoffMinutes":{"type":"integer","minimum":0,"maximum":4320},"requiredContactFields":{"type":"array","items":{"type":"string","enum":["firstName","lastName","emailAddress","phoneNumber","country","notes","locales","allowMarketing","postalCode"]}},"restrictions":{"type":"object","properties":{"minUnits":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991},"maxUnits":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["minUnits","maxUnits"]},"metadata":{"type":"object","additionalProperties":{}}}},"CatalogController_addPhotoRequest":{"type":"object","properties":{"contentType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"data":{"type":"string","maxLength":14000000,"format":"base64","contentEncoding":"base64","pattern":"^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$"}},"required":["contentType","data"]},"CatalogController_reorderPhotosRequest":{"type":"object","properties":{"ids":{"minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["ids"]},"CatalogController_replacePhotoRequest":{"type":"object","properties":{"contentType":{"type":"string","enum":["image/jpeg","image/png","image/webp"]},"data":{"type":"string","maxLength":14000000,"format":"base64","contentEncoding":"base64","pattern":"^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$"}},"required":["contentType","data"]},"CatalogController_createOptionRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"pricingPer":{"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"isDefault":{"type":"boolean"},"durationMinutes":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":1440},"sortOrder":{"type":"integer","minimum":0,"maximum":9007199254740991},"cancellationCutoffAmount":{"type":"integer","minimum":0,"maximum":9007199254740991},"cancellationCutoffUnit":{"type":"string","enum":["minute","hour","day"]},"bookingCutoffMinutes":{"type":"integer","minimum":0,"maximum":4320},"requiredContactFields":{"type":"array","items":{"type":"string","enum":["firstName","lastName","emailAddress","phoneNumber","country","notes","locales","allowMarketing","postalCode"]}},"restrictions":{"type":"object","properties":{"minUnits":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991},"maxUnits":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["minUnits","maxUnits"]},"metadata":{"type":"object","additionalProperties":{}}},"required":["name"]},"CatalogController_createUnitRequest":{"type":"object","properties":{"type":{"type":"string","enum":["ADULT","YOUTH","CHILD","INFANT","FAMILY","SENIOR","STUDENT","MILITARY","OTHER"]},"name":{"type":"string","minLength":1},"requiredContactFields":{"type":"array","items":{"type":"string","enum":["firstName","lastName","emailAddress","phoneNumber","country","notes","locales","allowMarketing","postalCode"]}},"restrictions":{"type":"object","properties":{"minAge":{"type":"integer","minimum":0,"maximum":9007199254740991},"maxAge":{"type":"integer","minimum":0,"maximum":9007199254740991},"idRequired":{"type":"boolean"},"minQuantity":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991},"paxCount":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"accompaniedBy":{"type":"array","items":{"type":"string"}}}},"metadata":{"type":"object","additionalProperties":{}}},"required":["type","name"]},"CatalogController_updateUnitRequest":{"type":"object","properties":{"type":{"type":"string","enum":["ADULT","YOUTH","CHILD","INFANT","FAMILY","SENIOR","STUDENT","MILITARY","OTHER"]},"name":{"type":"string","minLength":1},"requiredContactFields":{"type":"array","items":{"type":"string","enum":["firstName","lastName","emailAddress","phoneNumber","country","notes","locales","allowMarketing","postalCode"]}},"restrictions":{"type":"object","properties":{"minAge":{"type":"integer","minimum":0,"maximum":9007199254740991},"maxAge":{"type":"integer","minimum":0,"maximum":9007199254740991},"idRequired":{"type":"boolean"},"minQuantity":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991},"paxCount":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"accompaniedBy":{"type":"array","items":{"type":"string"}}}},"metadata":{"type":"object","additionalProperties":{}}}},"ResourcesController_createRequest":{"type":"object","properties":{"supplierId":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":0,"maximum":9007199254740991},"capacityPerResource":{"type":"integer","minimum":1,"maximum":9007199254740991},"metadata":{"type":"object","additionalProperties":{}}},"required":["supplierId","name","quantity","capacityPerResource"]},"ResourcesController_updateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":0,"maximum":9007199254740991},"capacityPerResource":{"type":"integer","minimum":1,"maximum":9007199254740991},"metadata":{"type":"object","additionalProperties":{}}}},"ResourcesController_addRequirementRequest":{"type":"object","properties":{"resourceId":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991},"maxQuantity":{"nullable":true,"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["resourceId"]},"ResourcesController_createAvailabilityPeriodRequest":{"type":"object","properties":{"startMonthDay":{"type":"string","pattern":"^\\d{2}-\\d{2}$"},"endMonthDay":{"type":"string","pattern":"^\\d{2}-\\d{2}$"},"weekdays":{"minItems":1,"type":"array","items":{"type":"integer","minimum":0,"maximum":6}},"startTimes":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"label":{"type":"string","maxLength":60}},"required":["startMonthDay","endMonthDay","weekdays","startTimes"]},"ResourcesController_createAvailabilityBlockRequest":{"type":"object","properties":{"productId":{"type":"string","minLength":1},"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"}},"required":["productId","startAt","endAt"]},"ResourcesController_replacePricingPeriodsRequest":{"type":"object","properties":{"pricingPer":{"type":"string","enum":["UNIT","RESOURCE","BOOKING"]},"periods":{"type":"array","items":{"type":"object","properties":{"startMonthDay":{"type":"string","pattern":"^\\d{2}-\\d{2}$"},"endMonthDay":{"type":"string","pattern":"^\\d{2}-\\d{2}$"},"weekdays":{"minItems":1,"type":"array","items":{"type":"integer","minimum":0,"maximum":6}},"startTimes":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"label":{"type":"string","maxLength":60},"color":{"type":"string","pattern":"^#[0-9a-f]{6}$"},"retailPrices":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991}},"retailPriceTiers":{"minItems":1,"type":"array","items":{"type":"object","properties":{"minQuantity":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"maxQuantity":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"retail":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["minQuantity","maxQuantity","retail"]}}},"required":["startMonthDay","endMonthDay","weekdays","startTimes","retailPrices"]}}},"required":["pricingPer","periods"]},"ResourcesController_upsertInventoryRequest":{"type":"object","properties":{"slots":{"minItems":1,"type":"array","items":{"type":"object","properties":{"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"capacity":{"type":"integer","minimum":0,"maximum":9007199254740991},"quantity":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["startAt"]}}},"required":["slots"]},"BookingsController_createRequest":{"type":"object","properties":{"optionId":{"type":"string","minLength":1},"startAt":{"type":"string","format":"date-time"},"customStart":{"type":"object","properties":{"localDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"localTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"required":["localDate","localTime"]},"retailPrices":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991}},"endAt":{"type":"string","format":"date-time"},"unitItems":{"type":"array","items":{"type":"object","properties":{"unitId":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["unitId","quantity"]}},"resourceItems":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["resourceId","quantity"]}},"participants":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991}},"customer":{"type":"object","additionalProperties":{}},"notes":{"type":"string","minLength":1},"idempotencyKey":{"type":"string","minLength":1},"status":{"type":"string","enum":["ON_HOLD","CONFIRMED"]},"expandCapacity":{"type":"boolean"},"backdated":{"type":"boolean"}},"required":["optionId","unitItems"],"oneOf":[{"required":["startAt"],"not":{"required":["customStart"]}},{"required":["customStart"],"not":{"required":["startAt"]}}]},"BookingsController_updateRequest":{"type":"object","properties":{"expectedUpdatedAt":{"type":"string","format":"date-time"},"startAt":{"type":"string","format":"date-time"},"customStart":{"type":"object","properties":{"localDate":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"localTime":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"required":["localDate","localTime"]},"pricingReferenceStartAt":{"type":"string","format":"date-time"},"retailPrices":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991}},"unitItems":{"minItems":1,"type":"array","items":{"type":"object","properties":{"unitId":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["unitId","quantity"]}},"resourceItems":{"type":"array","items":{"type":"object","properties":{"resourceId":{"type":"string","minLength":1},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991}},"required":["resourceId","quantity"]}},"participants":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":9007199254740991}}},"required":["expectedUpdatedAt"],"not":{"required":["startAt","customStart"]},"anyOf":[{"required":["startAt"]},{"required":["customStart"]},{"required":["unitItems"]},{"required":["resourceItems"]},{"required":["retailPrices"]},{"required":["participants"]}]},"BookingsController_rejectRequest":{"type":"object","properties":{"reason":{"type":"string","minLength":1}}},"ManagementWebhooksController_createRequest":{"type":"object","properties":{"supplierId":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"headers":{"type":"object","additionalProperties":{"type":"string","maxLength":2000}}},"required":["url"]},"ManagementWebhooksController_updateRequest":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"headers":{"type":"object","additionalProperties":{"type":"string","maxLength":2000}},"status":{"type":"string","enum":["ACTIVE","DISABLED"]}}}}}}