Zum Hauptinhalt springen

Fehler und Paginierung

Dieser Leitfaden beschreibt, wie die Rently API Fehler kommuniziert (JSON-Struktur und Codes), was die häufigsten HTTP-Statuscodes bedeuten und wie Sie paginierte Antworten mit den Parametern offset und limit durchlaufen.

Alle Beispiele setzen voraus, dass Sie bereits ein Bearer-Token erlangt haben. Den genauen Ablauf finden Sie im Authentifizierungsleitfaden. Der Autorisierungsheader wird bei jedem Aufruf gesendet:

Authorization: Bearer {token}

Fehlerformat

Wenn eine Anfrage aufgrund eines Geschäfts- oder Validierungsfehlers nicht abgeschlossen werden kann, antwortet die API mit einem JSON-Body folgender Struktur:

FeldTypBeschreibung
ErrorMessagestring (nullable)Lesbare Meldung, die den Fehler beschreibt.
ErrorCodeintegerNumerischer Code, der den Fehlertyp identifiziert (siehe Code-Tabelle).
Idstring (nullable)Korrelations-ID, um den Fehler beim Support nachzuverfolgen.
Hinweis

ErrorCode wird stets als Ganzzahl serialisiert, nicht als Text. Zum Beispiel entspricht 1 dem Wert CustomerNotFound.

Beispiel einer Fehlerantwort

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

Speichern Sie den Wert von Id in Ihren Logs. Es ist die Korrelations-ID, mit der der Rently-Support die genaue Trace der fehlgeschlagenen Anfrage finden kann.

Fehlercodes (ErrorCode)

Die folgende Tabelle listet alle Fehlercodes auf, die die API zurückgeben kann:

CodeNameDescription
0NoErrorEs ist kein Fehler aufgetreten.
1CustomerNotFoundDer angeforderte Kunde wurde im System nicht gefunden.
2CarNotFoundDas angeforderte Fahrzeug wurde im System nicht gefunden.
3CarNotAvailableDas angeforderte Fahrzeug ist für die angegebenen Daten nicht verfügbar.
4PriceMismatchDer berechnete Preis stimmt nicht mit dem erwarteten Preis überein.
5CustomerDataNotValidDie bereitgestellten Kundendaten sind ungültig.
6LanguageNotSupportedDie angeforderte Sprache wird vom System nicht unterstützt.
7InsuficientPermissionsDer Benutzer verfügt nicht über ausreichende Berechtigungen, um den Vorgang auszuführen.
8BookingNotFoundForCustomerFür den angegebenen Kunden wurde keine Buchung gefunden.
9BookingStatusNotAllowCancelDer aktuelle Buchungsstatus lässt keine Stornierung zu.
10CreditCardNotAvailableDie Kreditkarte steht nicht zur Verfügung.
11GatewayNotSupportedDas angeforderte Zahlungs-Gateway wird nicht unterstützt.
12InfractionNotFoundDer angeforderte Verstoß wurde nicht gefunden.
13InvlaidDatesDie angegebenen Daten sind ungültig.
14UnquotedReserveFür die Reservierung wurde noch kein Angebot erstellt.
15MaxDayForQuotedReserveDie maximale Anzahl an Tagen für eine angebotene Reservierung wurde überschritten.
21TariffNotFoundDer angeforderte Tarif wurde nicht gefunden.
22BookingNotFoundDie angeforderte Buchung wurde nicht gefunden.
23ReturnPlaceNotFoundDer angegebene Rückgabeort wurde nicht gefunden.
24PromotionNotFoundDie angeforderte Aktion wurde nicht gefunden.
25DeliveryPlaceNotFoundDer angegebene Übergabeort wurde nicht gefunden.
26BookingStatusNotAllowUpdateDer aktuelle Buchungsstatus lässt keine Aktualisierungen zu.
27IlimitedKmNotEnabledDie Option für unbegrenzte Kilometer ist nicht aktiviert.
28LimitedKmNotEnabledDie Option für begrenzte Kilometer ist nicht aktiviert.
29MinimunDaysOfBookingNotReachedDie Mindestanzahl an Tagen für eine Buchung wurde nicht erreicht.
30MaxDaysOfBookingReachedDie maximale Anzahl an Tagen für eine Buchung wurde überschritten.
31AdditionalNotFoundDas angeforderte Zusatzangebot wurde nicht gefunden.
32AdditionalMaxQuantityExceededDie maximale Menge für das Zusatzangebot wurde überschritten.
33DateFromForBookingNotEnabledDas Startdatum für die Buchung ist nicht zulässig.
34DriverAgeNotAllowedDas Alter des Fahrers liegt nicht innerhalb des zulässigen Bereichs.
35BookingVersionErrorEs liegt eine Versionskonflikt mit der Buchung vor.
36BookingAlreadyDeliveredDie Buchung wurde bereits übergeben.
37BookingAlreadyReturnedDie Buchung wurde bereits zurückgegeben.
38BookingNeedsToCompleteDepositFür die Buchung ist eine Kaution erforderlich, um sie abzuschließen.
39InvalidCarKilometersDer Kilometerstand des Fahrzeugs ist ungültig.
40BookingStatusNotAllowDeliveryDer aktuelle Buchungsstatus lässt keine Übergabe zu.
41DriverLicenseInvalidDer Führerschein des Fahrers ist ungültig.
42BookingStatusNotAllowReturnDer aktuelle Buchungsstatus lässt keine Rückgabe zu.
43NotificationRelatedEntityNotFoundDie zugehörige Entität der Benachrichtigung wurde nicht gefunden.
44NotificationReceiverAddressInvalidDie Adresse des Benachrichtigungsempfängers ist ungültig.
45MailNotificationDisabledE-Mail-Benachrichtigungen sind deaktiviert.
46ReturnPlaceNotAllowedForDeliveryPlaceDer Rückgabeort ist für den angegebenen Übergabeort nicht zulässig.
47BookingOutOfOfficeHoursNotAllowedBuchungen außerhalb der Öffnungszeiten sind nicht zulässig.
48NotificationNotFoundDie angeforderte Benachrichtigung wurde nicht gefunden.
49BlockedCustomerToBookDer Kunde ist für Buchungen gesperrt.
50MustHaveAtLeastOneInsuranceDie Systemkonfiguration erfordert, dass beim Erstellen oder Bearbeiten einer Buchung mindestens eine Versicherung ausgewählt wird.
51InvalidCommercialAgreementDie Geschäftsvereinbarung ist ungültig.
60AppProtocolNotFoundDas Anwendungsprotokoll wurde nicht gefunden.
61ServiceTypeInvalidDer Diensttyp ist ungültig.
62ServiceStatusInvalidDer Dienststatus ist ungültig.
63ServiceDatesInvalidsDie Dienstdaten sind ungültig.
64ServiceProviderNotFoundDer Dienstanbieter wurde nicht gefunden.
65ServiceCanNotCreateDer Dienst kann nicht erstellt werden.
66ServiceCanNotEditDer Dienst kann nicht bearbeitet werden.
67ServiceNotFoundDer angeforderte Dienst wurde nicht gefunden.
68CarLocationInvalidDriverDer Fahrzeugstandort hat einen ungültigen Fahrer.
69ReturnPlaceIsCurrentPlaceErrorDer Rückgabeort ist mit dem aktuellen Ort identisch.
70CarIsNotFreeDas Fahrzeug ist für den angeforderten Vorgang nicht verfügbar.
71CarTransferErrorBeim Fahrzeugtransfer ist ein Fehler aufgetreten.
72InvalidCarGasolineDer Kraftstoffstand des Fahrzeugs ist ungültig.
73CannotDeliverBookingWithBalanceEine Buchung mit offenem Saldo kann nicht übergeben werden.
74PlaceDoesNotAcceptCustomAddressesDer Ort akzeptiert keine benutzerdefinierten Adressen.
75PlaceCantOperatesLikePickUpDer Ort kann nicht als Übergabeort fungieren.
76PlaceCantOperatesLikeDropOffDer Ort kann nicht als Rückgabeort fungieren.
77CannotPayQuoteDas Angebot kann nicht bezahlt werden.
80FeatureNotEnabledDie angeforderte Funktion ist nicht aktiviert.
98ModelNotValidDas Modell ist ungültig.
99UnknownEs ist ein unbekannter Fehler aufgetreten.
100MissingCurrencyCodeDer Währungscode fehlt.
101TotalGreaterThanZeroDer Gesamtbetrag muss größer als null sein.
102InfractionAlreadyExistsDer Verstoßbescheid oder die Ordnungswidrigkeit existiert bereits im System.
103InvalidIncidentTypeDer Vorfalltyp ist ungültig
104InvalidIncidentDateDas Vorfalldatum ist ungültig
105SettingNotFoundEine erforderliche Einstellung wurde nicht gefunden
106BookingBrandNotFoundBooking Brand nicht gefunden
107BookingCannotBeUncancelled
108RateAlreadyExistsEine Rate mit dem angegebenen Code existiert bereits und Updates wurden nicht angefordert.
499Timeout
1100MappingAlreadyExists
1101ModelNotExists
1102CompanyCodeNotFound
1103CommercialAgreementNotSupportedDie Geschäftsvereinbarung wird nicht unterstützt.
1104CommercialAgreementRequired
1105InfractionNoticeNotFoundDie referenzierte InfractionNotice wurde für den Mieter nicht gefunden.
1106InfractionNoticeDismissedDie referenzierte InfractionNotice wird abgelehnt und kann nicht verknüpft werden.
1107InfractionNoticeContextMismatchDer Kontext der Verstöße (Auto, Datum, Buchung oder Fahrer) stimmt nicht mit der InfractionNotice überein.
1108InfractionNoticeMainAlreadyLinkedDer InfractionNotice hat bereits einen Hauptverstoß verknüpft.
1109InfractionNoticeNicAlreadyLinkedDie InjurisdictionNotice hat bereits eine NIC (Fahrer-Nicht-Identifikationsstrafe) verknüpft.
1110InfractionNoticeInfractionAlreadyLinkedDer Verstoß ist bereits mit einem anderen InfractionNotice verknüpft.
Warnung

Die numerischen Werte sind nicht zusammenhängend: Die Enumeration überspringt Positionen (zum Beispiel von 15 zu 21). Ordnen Sie Ihre Wiederholungen und Meldungen anhand des genauen Werts zu und gehen Sie nicht von fortlaufenden Bereichen aus.

HTTP-Statuscodes

Die API verwendet einen begrenzten Satz von Statuscodes. Beachten Sie, dass Authentifizierungsfehler als 403 gemeldet werden (die API gibt kein 401 zurück).

StatusBedeutungBody
200 OKDie Anfrage wurde erfolgreich verarbeitet.Payload der Ressource oder paginiertes Ergebnis.
400 Bad RequestGeschäfts- oder Validierungsfehler (Api Error).JSON mit ErrorMessage, ErrorCode und Id.
403 ForbiddenBenutzer nicht authentifiziert oder keine Berechtigung für den Endpunkt.Ohne Body.
404 Not FoundDie angefragte Ressource existiert nicht.Ohne Body.
Hinweis

Ein 403 kann sowohl bedeuten, dass das Token ungültig oder nicht vorhanden ist, als auch, dass der authentifizierte Benutzer nicht die für diesen Endpunkt erforderliche Berechtigung hat. Prüfen Sie zuerst den Header Authorization und danach die Berechtigungen des Benutzers.

So behandeln Sie Fehler

  • 200 → verarbeiten Sie die Antwort normal.
  • 400 → lesen Sie ErrorCode, um die Aktion zu bestimmen (Daten korrigieren, neu kalkulieren usw.), und zeigen Sie ErrorMessage dem Bediener an.
  • 403 → prüfen Sie, ob das Token gültig, aktuell und zum selben Mandanten gehörig ist; stellen Sie sicher, dass der Benutzer die Berechtigung hat.
  • 404 → die verwendete Kennung entspricht keiner Ressource; validieren Sie die IDs, bevor Sie es erneut versuchen.

Paginierung

Endpunkte, die Listen zurückgeben (zum Beispiel GET /api/bookings/list, GET /api/customers oder GET /api/cars), verwenden Paginierung über offset und limit.

Query-Parameter

ParameterTypDefaultBeschreibung
offsetinteger0Startpunkt der Seite. Muss >= 0 sein.
limitinteger30Maximale Anzahl der Elemente pro Seite. Wird auf maximal 100 beschnitten.
Hinweis

Senden Sie ein limit größer als 100, beschneidet die API es automatisch auf 100. Ein negatives offset wird auf 0 normalisiert.

Form des Ergebnisses

Paginierte Antworten teilen dieselbe Struktur PagedResult:

FeldTypBeschreibung
OffsetintegerAuf diese Seite angewendetes Offset.
LimitintegerAuf diese Seite angewendetes Limit.
TotalintegerGesamtzahl der über alle Seiten verfügbaren Elemente.
Resultsarray (nullable)Elemente der aktuellen Seite.
NextOffsetintegerOffset, das zum Anfordern der nächsten Seite zu verwenden ist.

Beispiel einer paginierten Antwort

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

Beispiel einer Anfrage

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

So durchlaufen Sie alle Seiten

Um eine vollständige Liste zu durchlaufen, verwenden Sie das NextOffset jeder Antwort als offset der folgenden Anfrage. Die Iteration endet, wenn Results weniger Elemente als Limit liefert.

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

# Seite 2: das von der vorherigen Seite zurückgegebene NextOffset verwenden
curl "https://{tenant}.rently.com.ar/api/bookings/list?offset={NextOffset}&limit=30&language=es-AR" \
-H "Authorization: Bearer {token}"
Tipp

Achten Sie für die Iteration auf Results.Count < Limit als Abbruchbedingung, statt gegen Total zu vergleichen. Das funktioniert konsistent mit beiden Paginierungsstilen der API.

Warnung

Bei GET /api/bookings/list funktioniert der Parameter offset als Cursor nach Id, nicht als Anzahl zu überspringender Datensätze. Übergeben Sie beim ersten Aufruf immer 0 (unabhängig von der Sortierrichtung) und bei den folgenden den Wert von NextOffset, den die vorherige Antwort zurückgegeben hat. Konstruieren Sie das offset nicht manuell durch Aufsummieren von Seitengrößen.