Aller au contenu principal

Réservation de bout en bout

Ce guide parcourt le flux complet pour intégrer une réservation avec l'API de Rently : rechercher la disponibilité → établir un devis → choisir les suppléments → créer → payer. Chaque étape indique l'endpoint réel (méthode + path), les champs clés et un exemple curl prêt à adapter.

Avant de commencer

Il convient d'avoir chargé le contexte (langues, devises, lieux et horaires d'ouverture) pour savoir quelles réservations peuvent être créées. Voir Préparer le contexte.

Tous les endpoints requièrent un token Bearer (OAuth2) : envoyez le header Authorization: Bearer {token} dans chaque requête. Le détail de chaque opération se trouve dans la API Reference →.

Diagramme de séquence

Client API de Rently
│ │
│ 1. GET /api/search ─────────────────────► │ recherche disponibilité + prix
│ ◄──────────── List<Availability> ──────────┤
│ │
│ 2. GET /api/booking/price ──────────────► │ établit le devis de l'option choisie
│ ◄──────────────── Booking ─────────────────┤
│ │
│ 3. GET /api/booking/additionals-price ──► │ suppléments disponibles + prix
│ ◄──────────── List<AdditionalPriceItem> ───┤
│ │
│ 4. POST /api/booking/book ──────────────► │ crée la réservation (avec suppléments)
│ ◄────────── BookingId / Booking ───────────┤ → Reserved
│ │
│ 5. POST /api/booking/pay ───────────────► │ enregistre le paiement
│ ◄──────────────── Booking ─────────────────┤ Reserved → Confirmed
│ │

Résumé du flux :

  1. Rechercher la disponibilitéGET /api/search
  2. Établir un devisGET /api/booking/price
  3. Choisir les supplémentsGET /api/booking/additionals-price
  4. Créer la réservationPOST /api/booking/book
  5. PayerPOST /api/booking/pay
États de la réservation

En créant avec IsQuotation=false (le cas habituel), la réservation reste à l'état Reserved et, une fois payée, passe à Confirmed. Vous pouvez aussi créer un devis (IsQuotation=true, état Quoted) si vous voulez seulement persister une estimation ; dans ce cas consultez l'API Reference pour les étapes de conversion.


Étape 1 — Rechercher la disponibilité

GET /api/search recherche les voitures disponibles pour une plage de dates et des lieux de livraison et de retour, et renvoie chaque option avec son prix déjà calculé par modèle (List<Availability>). Fonctionne aussi comme devis initial.

Champs clés (passés en query string) :

ChampTypeObligatoireDescription
Fromdate-timeOuiDate et heure de retrait.
Todate-timeOuiDate et heure de retour.
FromPlaceintOuiID du lieu de livraison (de GET /api/places).
ToPlaceintNonID du lieu de retour. S'il est omis, on utilise FromPlace.
CurrencyCodestringNonDevise du calcul (de GET /api/currencies).
CommercialAgreementCodestringNonCode d'accord commercial.
PromotionCodestringNonCode de promotion à appliquer.
DriverAgeintNonÂge du conducteur (validé par rapport aux limites du tenant).
IlimitedKmboolNonS'il est omis, renvoie deux variantes par modèle (avec et sans km illimité).
curl -G "https://{tenant}.rently.com.ar/api/search?language=es-AR" \
-H "Authorization: Bearer {token}" \
--data-urlencode "From=2026-07-01T10:00:00" \
--data-urlencode "To=2026-07-05T10:00:00" \
--data-urlencode "FromPlace=1" \
--data-urlencode "ToPlace=1" \
--data-urlencode "CurrencyCode=USD" \
--data-urlencode "DriverAge=30"
Disponibilité par modèle ou par catégorie

Selon la configuration du tenant, la disponibilité peut être par modèle ou par catégorie. Cela détermine quel identifiant utiliser lors du devis et de la création de la réservation (ModelId/Car.Model vs. CategoryId/Category). GET /api/search le résout en interne.


Étape 2 — Établir le devis de l'option choisie

GET /api/booking/price recalcule le prix total d'une configuration concrète (modèle + dates + lieux). Renvoie un objet Booking avec les prix détaillés, les franchises et les promotions disponibles. Récupérez de là le Price pour l'envoyer (facultatif) à l'étape de création.

Champs clés (en query string) :

ChampTypeObligatoireDescription
ModelIdintOuiModèle à coter (d'un résultat de GET /api/search).
From / Todate-timeOuiMêmes dates utilisées dans la recherche.
FromPlace / ToPlaceintOui / NonLieux de livraison et de retour.
AdditionalsarrayNonSuppléments à inclure dans le calcul (ID + quantité).
PromotionintNonID de la promotion à appliquer.
CurrencyCodestringNonDevise du calcul.
DriverAgeintNonÂge du conducteur.
curl -G "https://{tenant}.rently.com.ar/api/booking/price?language=es-AR" \
-H "Authorization: Bearer {token}" \
--data-urlencode "ModelId=1" \
--data-urlencode "From=2026-07-01T10:00:00" \
--data-urlencode "To=2026-07-05T10:00:00" \
--data-urlencode "FromPlace=1" \
--data-urlencode "ToPlace=1" \
--data-urlencode "CurrencyCode=USD" \
--data-urlencode "DriverAge=30"

Étape 3 — Choisir les suppléments

Avant de créer la réservation, consultez quels suppléments peuvent être ajoutés à cette configuration (assurance, GPS, siège enfant, conducteur additionnel, etc.) avec leur prix déjà calculé pour les dates choisies. GET /api/booking/additionals-price renvoie la liste (List<AdditionalPriceItem>).

Champs clés (en query string) :

ChampTypeObligatoireDescription
FromDate / ToDatedate-timeOuiMêmes dates que la réservation.
ModelIdintNon*Modèle choisi (si la disponibilité est par modèle).
CategoryIdintNon*Catégorie choisie (si elle est par catégorie).
DeliveryPlaceId / ReturnPlaceIdintNonLieux de livraison et de retour.
CurrencyCodestringNonDevise du calcul.
PromotionintNonPromotion appliquée.
*Indiquez ModelId ou CategoryId selon le mode de fonctionnement du tenant.
curl -G "https://{tenant}.rently.com.ar/api/booking/additionals-price?language=es-AR" \
-H "Authorization: Bearer {token}" \
--data-urlencode "ModelId=1" \
--data-urlencode "FromDate=2026-07-01T10:00:00" \
--data-urlencode "ToDate=2026-07-05T10:00:00" \
--data-urlencode "DeliveryPlaceId=1" \
--data-urlencode "ReturnPlaceId=1" \
--data-urlencode "CurrencyCode=USD"

Chaque élément de la réponse décrit un supplément disponible :

[
{
"Id": 1,
"Name": "Seguro full",
"Description": "Cobertura todo riesgo con franquicia reducida",
"Price": 80.0,
"DailyPrice": 20.0,
"IsPriceByDay": true,
"MaxQuantityPerBooking": 1,
"AvailableStock": 999,
"IsRequired": false,
"Currency": "USD"
}
]
ChampDescription
IdIdentifiant du supplément. C'est celui qui est envoyé lors de la création de la réservation.
Name / DescriptionNom et détail pour l'affichage.
Price / DailyPrice / IsPriceByDayPrix total et par jour ; IsPriceByDay indique lequel s'applique.
MaxQuantityPerBookingQuantité maximale que l'on peut ajouter de ce supplément.
AvailableStockStock disponible pour ces dates.
IsRequiredSi true, le supplément est obligatoire et doit impérativement figurer dans la réservation.
Comment les ajouter à la réservation

Dans le corps du POST /api/booking/book (étape 4), passez les suppléments choisis dans le tableau Additionals. Chaque item référence le Id du supplément et la quantité :

"Additionals": [
{ "Additional": { "Id": 1 }, "Quantity": 1 },
{ "Additional": { "Id": 5 }, "Quantity": 2 }
]

Règles : la Quantity ne peut pas dépasser MaxQuantityPerBooking, et les suppléments avec IsRequired=true doivent être inclus. Pour que le Price total coïncide lors de la validation (voir étape 4), incluez les mêmes suppléments aussi lors du devis (étape 2).


Étape 4 — Créer la réservation

POST /api/booking/book crée la réservation. Le corps est un SaveBookingModel (les données de la réservation plus quelques flags). Renvoie BookingCreationResponse avec BookingId et CustomerId, ou l'objet Booking complet si vous envoyez FullResponse=true. Avec IsQuotation=false la réservation reste à l'état Reserved.

Champs clés du corps :

ChampObligatoireDescription
FromDate / ToDateOuiPlage de la location.
CustomerOuiDonnées du client (Name ou Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress).
DeliveryPlace.IdOuiLieu de livraison.
ReturnPlace.IdNonLieu de retour (par défaut, celui de la livraison).
Car.Model ou CategoryOui (l'un)Car.Model (Id ou SIPP) si la disponibilité est par modèle ; Category (Id ou Name) si elle est par catégorie.
CurrencyOuiDevise ISO (ex. USD).
AdditionalsNonSuppléments choisis à l'étape 3 (Additional.Id + Quantity).
PriceNonPrix attendu ; validé par rapport au prix calculé avec 1% de tolérance.
IsQuotationNontrue crée un devis à l'état Quoted.
PromotionCodeNonCode de promotion.
FullResponseNontrue renvoie le Booking complet au lieu des seuls IDs.
curl -X POST "https://{tenant}.rently.com.ar/api/booking/book?language=es-AR" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"FullResponse": true,
"IsQuotation": false,
"Customer": {
"Name": "John Doe",
"DocumentId": "12345678",
"DocumentTypeId": 2,
"EmailAddress": "john.doe@example.com",
"Age": 30
},
"FromDate": "2026-07-01T10:00:00",
"ToDate": "2026-07-05T10:00:00",
"DeliveryPlace": { "Id": 1 },
"ReturnPlace": { "Id": 1 },
"Car": { "Model": { "Id": 1 } },
"Currency": "USD",
"Additionals": [
{ "Additional": { "Id": 1 }, "Quantity": 1 }
]
}'
Validation du prix

Si vous envoyez Price et qu'il diffère de plus de 1% du prix calculé par le tarif, l'opération échoue avec PriceMismatch (ErrorCode 4). Établissez le devis avec les mêmes suppléments (étape 2) et utilisez ce prix, ou n'envoyez pas Price et laissez l'API le calculer.

Disponibilité par catégorie

Si le tenant fonctionne par catégorie, remplacez le bloc Car par "Category": { "Id": 1 } (ou "Category": { "Name": "..." }).


Étape 5 — Payer

POST /api/booking/pay enregistre et rapproche le paiement selon le gateway. Comme la réservation est Reserved, lors du paiement elle passe à Confirmed. Le corps est un PayBookingModel.

Champs clés du corps :

ChampObligatoireDescription
BookingIdOuiID de la réservation (de l'étape 4).
GatewayIdOuiCode du gateway (ex. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD).
AmountOuiMontant à payer (> 0).
CurrencyCodeNonDevise ISO.
TransactionIdNonID de la transaction dans le gateway.
BillingInformationNonDonnées de facturation (selon le gateway).
curl -X POST "https://{tenant}.rently.com.ar/api/booking/pay?language=es-AR" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"BookingId": 12345,
"GatewayId": "STRIPE",
"Amount": 199.99,
"CurrencyCode": "USD",
"TransactionId": "TXN123",
"BillingInformation": {
"FirstName": "John",
"LastName": "Doe",
"DocumentTypeId": 1,
"DocumentId": "123456789",
"EmailAddress": "john.doe@example.com"
}
}'

Consulter la réservation

À tout moment vous pouvez consulter l'état, le solde et les prix de la réservation avec GET /api/booking/{bookingId}.

curl -G "https://{tenant}.rently.com.ar/api/booking/12345?language=es-AR" \
-H "Authorization: Bearer {token}"

Pour lister les paiements enregistrés d'une réservation, utilisez GET /api/bookingPayments/{bookingId}.

Prochaines étapes

  • API Reference → — tous les endpoints avec leurs schemas, exemples et le bouton Try it.
  • Une fois la réservation confirmée, se poursuivent les flux opérationnels : self-check-in (PUT /api/selfcheckin), livraison et retour, et incidents et infractions.