Passa al contenuto principale

Errori e paginazione

Questa guida descrive come l'API di Rently comunica gli errori (struttura JSON e codici), cosa significano i codici di stato HTTP più comuni, e come scorrere risposte paginate con i parametri offset e limit.

Tutti gli esempi presuppongono che tu abbia già ottenuto un token Bearer. Consulta la guida di autenticazione per il dettaglio del flusso. L'header di autorizzazione si invia in ogni chiamata:

Authorization: Bearer {token}

Formato degli errori

Quando una richiesta non può essere completata per un errore di business o di validazione, l'API risponde con un corpo JSON con la seguente struttura:

CampoTipoDescrizione
ErrorMessagestring (nullable)Messaggio leggibile che descrive l'errore.
ErrorCodeintegerCodice numerico che identifica il tipo di errore (vedi tabella dei codici).
Idstring (nullable)Identificatore di correlazione per tracciare l'errore nel supporto.
note

ErrorCode viene serializzato sempre come numero intero, non come testo. Per esempio, 1 corrisponde a CustomerNotFound.

Esempio di risposta di errore

{
"ErrorMessage": "The requested resource was not found",
"ErrorCode": 1,
"Id": "0HMVB9A2K3C4D-00000001"
}
suggerimento

Salva il valore di Id nei tuoi log. È l'identificatore di correlazione che permette al supporto di Rently di individuare la traccia esatta della richiesta fallita.

Codici di errore (ErrorCode)

La tabella seguente elenca tutti i codici di errore che l'API può restituire:

CodeNameDescription
0NoErrorNessun errore verificatosi.
1CustomerNotFoundIl customer richiesto non è stato trovato nel sistema.
2CarNotFoundIl car richiesto non è stato trovato nel sistema.
3CarNotAvailableIl car richiesto non è disponibile per le date specificate.
4PriceMismatchIl prezzo calcolato non corrisponde al prezzo previsto.
5CustomerDataNotValidI dati del customer forniti non sono validi.
6LanguageNotSupportedLa lingua richiesta non è supportata dal sistema.
7InsuficientPermissionsL'utente non dispone di permessi sufficienti per eseguire l'operazione.
8BookingNotFoundForCustomerNessun booking è stato trovato per il customer specificato.
9BookingStatusNotAllowCancelLo stato attuale del booking non consente la cancellazione.
10CreditCardNotAvailableLa carta di credito non è disponibile per l'uso.
11GatewayNotSupportedIl gateway di pagamento richiesto non è supportato.
12InfractionNotFoundL'infraction richiesta non è stata trovata.
13InvlaidDatesLe date fornite non sono valide.
14UnquotedReserveLa prenotazione non è stata quotata.
15MaxDayForQuotedReserveÈ stato superato il numero massimo di giorni per una prenotazione quotata.
21TariffNotFoundLa tariffa richiesta non è stata trovata.
22BookingNotFoundIl booking richiesto non è stato trovato.
23ReturnPlaceNotFoundIl luogo di restituzione specificato non è stato trovato.
24PromotionNotFoundLa promozione richiesta non è stata trovata.
25DeliveryPlaceNotFoundIl luogo di consegna specificato non è stato trovato.
26BookingStatusNotAllowUpdateLo stato attuale del booking non consente aggiornamenti.
27IlimitedKmNotEnabledL'opzione chilometri illimitati non è abilitata.
28LimitedKmNotEnabledL'opzione chilometri limitati non è abilitata.
29MinimunDaysOfBookingNotReachedNon è stato raggiunto il numero minimo di giorni per il booking.
30MaxDaysOfBookingReachedÈ stato superato il numero massimo di giorni per il booking.
31AdditionalNotFoundL'elemento aggiuntivo richiesto non è stato trovato.
32AdditionalMaxQuantityExceededÈ stata superata la quantità massima per l'elemento aggiuntivo.
33DateFromForBookingNotEnabledLa data di inizio del booking non è abilitata.
34DriverAgeNotAllowedL'età del conducente non rientra nell'intervallo consentito.
35BookingVersionErrorÈ presente una discrepanza di versione con il booking.
36BookingAlreadyDeliveredIl booking è già stato consegnato.
37BookingAlreadyReturnedIl booking è già stato restituito.
38BookingNeedsToCompleteDepositIl booking richiede un deposito per essere completato.
39InvalidCarKilometersIl valore dei chilometri del car non è valido.
40BookingStatusNotAllowDeliveryLo stato attuale del booking non consente la consegna.
41DriverLicenseInvalidLa patente di guida non è valida.
42BookingStatusNotAllowReturnLo stato attuale del booking non consente la restituzione.
43NotificationRelatedEntityNotFoundL'entità correlata alla notifica non è stata trovata.
44NotificationReceiverAddressInvalidL'indirizzo del destinatario della notifica non è valido.
45MailNotificationDisabledLe notifiche via mail sono disabilitate.
46ReturnPlaceNotAllowedForDeliveryPlaceIl luogo di restituzione non è consentito per il luogo di consegna specificato.
47BookingOutOfOfficeHoursNotAllowedIl booking al di fuori dell'orario d'ufficio non è consentito.
48NotificationNotFoundLa notifica richiesta non è stata trovata.
49BlockedCustomerToBookAl customer è impedito di effettuare booking.
50MustHaveAtLeastOneInsuranceLa configurazione del sistema richiede la selezione di almeno un'assicurazione durante la creazione o la modifica di un booking.
51InvalidCommercialAgreementL'accordo commerciale non è valido.
60AppProtocolNotFoundIl protocollo dell'applicazione non è stato trovato.
61ServiceTypeInvalidIl tipo di servizio non è valido.
62ServiceStatusInvalidLo stato del servizio non è valido.
63ServiceDatesInvalidsLe date del servizio non sono valide.
64ServiceProviderNotFoundIl fornitore del servizio non è stato trovato.
65ServiceCanNotCreateIl servizio non può essere creato.
66ServiceCanNotEditIl servizio non può essere modificato.
67ServiceNotFoundIl servizio richiesto non è stato trovato.
68CarLocationInvalidDriverLa posizione del car ha un conducente non valido.
69ReturnPlaceIsCurrentPlaceErrorIl luogo di restituzione coincide con il luogo attuale.
70CarIsNotFreeIl car non è disponibile per l'operazione richiesta.
71CarTransferErrorSi è verificato un errore durante il trasferimento del car.
72InvalidCarGasolineIl livello di carburante del car non è valido.
73CannotDeliverBookingWithBalanceImpossibile consegnare un booking con un saldo in sospeso.
74PlaceDoesNotAcceptCustomAddressesIl luogo non accetta indirizzi personalizzati.
75PlaceCantOperatesLikePickUpIl luogo non può operare come punto di ritiro.
76PlaceCantOperatesLikeDropOffIl luogo non può operare come punto di riconsegna.
77CannotPayQuoteImpossibile pagare la quotazione.
80FeatureNotEnabledLa funzionalità richiesta non è abilitata.
98ModelNotValidIl model non è valido.
99UnknownSi è verificato un errore sconosciuto.
100MissingCurrencyCodeIl codice valuta è mancante.
101TotalGreaterThanZeroL'importo totale deve essere maggiore di zero.
102InfractionAlreadyExistsL'atto di infraction o la violazione esiste già nel sistema.
103InvalidIncidentTypeIl tipo di incident non è valido
104InvalidIncidentDateLa data dell'incident non è valida
105SettingNotFoundUn'impostazione richiesta non è stata trovata
106BookingBrandNotFoundBooking Brand non trovato
107BookingCannotBeUncancelled
108RateAlreadyExistsUn tasso con il codice indicato esiste già e non sono stati richiesti aggiornamenti.
499Timeout
1100MappingAlreadyExists
1101ModelNotExists
1102CompanyCodeNotFound
1103CommercialAgreementNotSupportedL'accordo commerciale non è supportato.
1104CommercialAgreementRequired
1105InfractionNoticeNotFoundL'InfractionNotice citato non è stato riconosciuto per l'inquilino.
1106InfractionNoticeDismissedL'InfractionNotice citato è archiviato e non può essere collegato.
1107InfractionNoticeContextMismatchIl contesto dell'infrazione (auto, data, prenotazione o autista) non corrisponde all'InfractionNotice.
1108InfractionNoticeMainAlreadyLinkedL'InfractionNotice ha già collegato una violazione principale.
1109InfractionNoticeNicAlreadyLinkedL'InfractionNotice ha già collegato un'infrazione NIC (penale per non identificazione del conducente).
1110InfractionNoticeInfractionAlreadyLinkedL'infrazione è già collegata a un diverso InfractionNotice.
warning

I valori numerici non sono contigui: l'enumerazione salta posizioni (per esempio, da 15 a 21). Mappa i tuoi retry e messaggi a partire dal valore esatto e non assumere intervalli consecutivi.

Codici di stato HTTP

L'API utilizza un insieme limitato di codici di stato. Tieni presente che i fallimenti di autenticazione vengono riportati come 403 (l'API non restituisce 401).

StatoSignificatoCorpo
200 OKLa richiesta è stata elaborata correttamente.Payload della risorsa o risultato paginato.
400 Bad RequestErrore di business o di validazione (Api Error).JSON con ErrorMessage, ErrorCode e Id.
403 ForbiddenUtente non autenticato o senza permessi per l'endpoint.Senza corpo.
404 Not FoundLa risorsa richiesta non esiste.Senza corpo.
note

Un 403 può significare sia che il token non è valido o è assente, sia che l'utente autenticato non ha il permesso richiesto per quell'endpoint. Verifica prima l'header Authorization e poi i permessi dell'utente.

Come gestire gli errori

  • 200 → elabora la risposta normalmente.
  • 400 → leggi ErrorCode per decidere l'azione (correggere i dati, ripreventivare, ecc.) e mostra ErrorMessage all'operatore.
  • 403 → controlla che il token sia valido, in corso di validità e corrisponda allo stesso tenant; conferma che l'utente abbia i permessi.
  • 404 → l'identificatore usato non corrisponde ad alcuna risorsa; valida gli ID prima di riprovare.

Paginazione

Gli endpoint che restituiscono liste (per esempio GET /api/bookings/list, GET /api/customers o GET /api/cars) usano la paginazione tramite offset e limit.

Parametri di query

ParametroTipoDefaultDescrizione
offsetinteger0Punto di partenza della pagina. Deve essere >= 0.
limitinteger30Quantità massima di elementi per pagina. Viene troncata a un massimo di 100.
note

Se invii un limit maggiore di 100, l'API lo tronca automaticamente a 100. Un offset negativo viene normalizzato a 0.

Forma del risultato

Le risposte paginate condividono la stessa struttura PagedResult:

CampoTipoDescrizione
OffsetintegerOffset applicato a questa pagina.
LimitintegerLimite applicato a questa pagina.
TotalintegerTotale di elementi disponibili in tutte le pagine.
Resultsarray (nullable)Elementi della pagina corrente.
NextOffsetintegerOffset da usare per richiedere la pagina successiva.

Esempio di risposta paginata

{
"Offset": 0,
"Limit": 30,
"Total": 2,
"Results": [
{ "Id": 1 },
{ "Id": 2 }
],
"NextOffset": 0
}

Esempio di richiesta

curl "https://{tenant}.rently.com.ar/api/customers?offset=0&limit=30&language=es-AR" \
-H "Authorization: Bearer {token}"

Come scorrere tutte le pagine

Per iterare sull'intero elenco, usa NextOffset di ogni risposta come offset della richiesta successiva. L'iterazione termina quando Results contiene meno elementi di Limit.

# Pagina 1
curl "https://{tenant}.rently.com.ar/api/bookings/list?offset=0&limit=30&language=es-AR" \
-H "Authorization: Bearer {token}"

# Pagina 2: usare il NextOffset restituito dalla pagina precedente
curl "https://{tenant}.rently.com.ar/api/bookings/list?offset={NextOffset}&limit=30&language=es-AR" \
-H "Authorization: Bearer {token}"
suggerimento

Per l'iterazione, usa Results.Count < Limit come condizione di fine invece di confrontare con Total. Questo funziona in modo coerente con entrambi gli stili di paginazione dell'API.

warning

In GET /api/bookings/list il parametro offset funziona come cursore per Id, non come quantità di record da saltare. Passa sempre 0 nella prima chiamata (a prescindere dalla direzione di ordinamento) e, nelle successive, il valore di NextOffset restituito dalla risposta precedente. Non costruire l'offset manualmente sommando le dimensioni delle pagine.