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.
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 :
- Rechercher la disponibilité —
GET /api/search - Établir un devis —
GET /api/booking/price - Choisir les suppléments —
GET /api/booking/additionals-price - Créer la réservation —
POST /api/booking/book - Payer —
POST /api/booking/pay
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) :
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
From | date-time | Oui | Date et heure de retrait. |
To | date-time | Oui | Date et heure de retour. |
FromPlace | int | Oui | ID du lieu de livraison (de GET /api/places). |
ToPlace | int | Non | ID du lieu de retour. S'il est omis, on utilise FromPlace. |
CurrencyCode | string | Non | Devise du calcul (de GET /api/currencies). |
CommercialAgreementCode | string | Non | Code d'accord commercial. |
PromotionCode | string | Non | Code de promotion à appliquer. |
DriverAge | int | Non | Âge du conducteur (validé par rapport aux limites du tenant). |
IlimitedKm | bool | Non | S'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"
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) :
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
ModelId | int | Oui | Modèle à coter (d'un résultat de GET /api/search). |
From / To | date-time | Oui | Mêmes dates utilisées dans la recherche. |
FromPlace / ToPlace | int | Oui / Non | Lieux de livraison et de retour. |
Additionals | array | Non | Suppléments à inclure dans le calcul (ID + quantité). |
Promotion | int | Non | ID de la promotion à appliquer. |
CurrencyCode | string | Non | Devise du calcul. |
DriverAge | int | Non | Â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) :
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
FromDate / ToDate | date-time | Oui | Mêmes dates que la réservation. |
ModelId | int | Non* | Modèle choisi (si la disponibilité est par modèle). |
CategoryId | int | Non* | Catégorie choisie (si elle est par catégorie). |
DeliveryPlaceId / ReturnPlaceId | int | Non | Lieux de livraison et de retour. |
CurrencyCode | string | Non | Devise du calcul. |
Promotion | int | Non | Promotion appliquée. |
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"
}
]
| Champ | Description |
|---|---|
Id | Identifiant du supplément. C'est celui qui est envoyé lors de la création de la réservation. |
Name / Description | Nom et détail pour l'affichage. |
Price / DailyPrice / IsPriceByDay | Prix total et par jour ; IsPriceByDay indique lequel s'applique. |
MaxQuantityPerBooking | Quantité maximale que l'on peut ajouter de ce supplément. |
AvailableStock | Stock disponible pour ces dates. |
IsRequired | Si true, le supplément est obligatoire et doit impérativement figurer dans 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 :
| Champ | Obligatoire | Description |
|---|---|---|
FromDate / ToDate | Oui | Plage de la location. |
Customer | Oui | Données du client (Name ou Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress). |
DeliveryPlace.Id | Oui | Lieu de livraison. |
ReturnPlace.Id | Non | Lieu de retour (par défaut, celui de la livraison). |
Car.Model ou Category | Oui (l'un) | Car.Model (Id ou SIPP) si la disponibilité est par modèle ; Category (Id ou Name) si elle est par catégorie. |
Currency | Oui | Devise ISO (ex. USD). |
Additionals | Non | Suppléments choisis à l'étape 3 (Additional.Id + Quantity). |
Price | Non | Prix attendu ; validé par rapport au prix calculé avec 1% de tolérance. |
IsQuotation | Non | true crée un devis à l'état Quoted. |
PromotionCode | Non | Code de promotion. |
FullResponse | Non | true 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 }
]
}'
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.
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 :
| Champ | Obligatoire | Description |
|---|---|---|
BookingId | Oui | ID de la réservation (de l'étape 4). |
GatewayId | Oui | Code du gateway (ex. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD). |
Amount | Oui | Montant à payer (> 0). |
CurrencyCode | Non | Devise ISO. |
TransactionId | Non | ID de la transaction dans le gateway. |
BillingInformation | Non | Donné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.