Rate limit
I limiti di frequenza di KrossBooking sono applicati per struttura (cioè perhotel_id), non per account o per IP: 10 richieste/min · 300/h · 5.000/giorno (negoziabili). Se superi la soglia, Kross restituisce HTTP 429 (Too Many Requests), che è anche error_code 16, indistinguibile da una “lista vuota” se non controlli lo status.
Il gateway mcp.mattone.co gestisce il backoff automatico in caso di 429, attendendo il tempo necessario prima di riprovare. Tuttavia, se i 429 si verificano in modo ricorrente, significa che la frequenza di polling configurata per quella struttura è troppo alta. In quel caso, riduci l’intervallo di polling nell’Admin della piattaforma o contatta il team tecnico per applicare il coalescing delle richieste parallele.
Trappole note
Filtri data ignorati server-side
Filtri data ignorati server-side
Alcuni endpoint di KrossBooking ignorano i filtri data inviati nella richiesta e restituiscono l’intero dataset disponibile, indipendentemente dal range specificato. Questo comportamento è silenzioso: la chiamata risponde con HTTP 200 ma i dati non sono filtrati.Come gestirlo: dopo ogni chiamata, valida sempre la risposta controllando il numero di record restituiti e verificando che le date siano coerenti con il range richiesto. Non assumere che il filtro sia stato applicato solo perché la chiamata ha avuto successo.
Endpoint disponibilità sbagliato
Endpoint disponibilità sbagliato
Per recuperare la disponibilità di una struttura, usa
GET /v5/calendar/get-availability, non get-calendar. I due endpoint esistono entrambi ma restituiscono dati diversi: get-calendar fornisce una vista del calendario che non è adatta per la logica di disponibilità usata da Conduit.Come gestirlo: verifica sempre che il flusso di disponibilità punti all’endpoint corretto. Se Conduit riporta disponibilità incoerente, questo è il primo posto dove controllare./apiv5 restituisce HTML di documentazione
/apiv5 restituisce HTML di documentazione
Il path
/apiv5 è l’interfaccia web della documentazione KrossBooking e restituisce HTML, non dati JSON. Qualsiasi chiamata effettuata a /apiv5/... otterrà una risposta HTML invece dei dati attesi, causando errori di parsing a valle.Come gestirlo: usa sempre il path /v5/... per tutte le chiamate API. Se ricevi una risposta inattesa con content-type text/html, controlla immediatamente il path usato.User-Agent browser richiesto
User-Agent browser richiesto
Alcuni endpoint KrossBooking richiedono un header
User-Agent che imiti un browser web. Le chiamate effettuate senza questo header, o con uno User-Agent da libreria HTTP standard, possono fallire con errori 403 o risposte vuote.Come gestirlo: il gateway mcp.mattone.co aggiunge automaticamente lo User-Agent corretto a tutte le richieste. Se stai testando direttamente un endpoint Kross fuori dal gateway (ad esempio con curl o Postman), aggiungi manualmente un header User-Agent di tipo browser per evitare questo problema.Errore 429: cache e coalescing
Errore 429: cache e coalescing
Se una struttura genera molte richieste in parallelo, ad esempio durante picchi di traffico o quando più flussi Conduit si attivano contemporaneamente, il gateway può accumulare 429 anche con una frequenza di polling apparentemente ragionevole.Come gestirlo: il gateway supporta il coalescing delle richieste parallele verso lo stesso
hotel_id: invece di inviare N richieste identiche, ne invia una sola e distribuisce la risposta a tutti i richiedenti. Questa funzionalità non è attiva di default, contatta il team tecnico per abilitarla per la struttura interessata.Parametri sconosciuti ignorati in silenzio
Parametri sconosciuti ignorati in silenzio
Kross ignora i parametri che non riconosce, senza errore. Es.: passare
status:"confirmed" a reservations/get-list non filtra, torna tutto. Il parametro corretto è cod_reservation_status:"CONF".Come gestirlo: usa i nomi di parametro esatti documentati e verifica il conteggio dei record. Non fidarti di un filtro solo perché la chiamata risponde 200.Formato disponibilità ostico
Formato disponibilità ostico
calendar/get-availability non torna un calendario giorno-per-giorno libero/occupato, ma tanti intervalli sovrapposti (“soggiorno da date_from a date_to”) con un contatore available (0/total). Va espanso in giorni singoli (bloccato se available===0).Come gestirlo: è esattamente la logica che incapsula il custom tool check-availability, il nativo Conduit legge male questo formato. Endpoint corretto = calendar/get-availability (calendar/get-calendar non esiste).