Skip to main content

End-to-end booking

This guide walks through the complete flow to integrate a booking with the Rently API: search availability → quote → choose additionals → create → pay. Each step indicates the actual endpoint (method + path), the key fields and a curl example ready to adapt.

Before you start

It's a good idea to have the context loaded (languages, currencies, places and attention schedules) to know which bookings can be created. See Preparing the context.

All endpoints require a Bearer token (OAuth2): send the header Authorization: Bearer {token} in each request. The details of each operation are in the API Reference →.

Sequence diagram

Client Rently API
│ │
│ 1. GET /api/search ─────────────────────► │ searches availability + price
│ ◄──────────── List<Availability> ──────────┤
│ │
│ 2. GET /api/booking/price ──────────────► │ quotes the chosen option
│ ◄──────────────── Booking ─────────────────┤
│ │
│ 3. GET /api/booking/additionals-price ──► │ available additionals + price
│ ◄──────────── List<AdditionalPriceItem> ───┤
│ │
│ 4. POST /api/booking/book ──────────────► │ creates the booking (with additionals)
│ ◄────────── BookingId / Booking ───────────┤ → Reserved
│ │
│ 5. POST /api/booking/pay ───────────────► │ records the payment
│ ◄──────────────── Booking ─────────────────┤ Reserved → Confirmed
│ │

Flow summary:

  1. Search availabilityGET /api/search
  2. QuoteGET /api/booking/price
  3. Choose additionalsGET /api/booking/additionals-price
  4. Create the bookingPOST /api/booking/book
  5. PayPOST /api/booking/pay
Booking statuses

Creating with IsQuotation=false (the usual case), the booking is left in Reserved and when paid it moves to Confirmed. You can also create a quotation (IsQuotation=true, Quoted status) if you only want to persist an estimate; in that case check the API Reference for the conversion steps.


Step 1 — Search availability

GET /api/search searches for available cars for a date range and delivery and return places, and returns each option with its price already calculated per model (List<Availability>). It also works as an initial quote.

Key fields (sent via query string):

FieldTypeRequiredDescription
Fromdate-timeYesPickup date and time.
Todate-timeYesReturn date and time.
FromPlaceintYesID of the delivery place (from GET /api/places).
ToPlaceintNoID of the return place. If omitted, FromPlace is used.
CurrencyCodestringNoCurrency of the calculation (from GET /api/currencies).
CommercialAgreementCodestringNoCommercial agreement code.
PromotionCodestringNoPromotion code to apply.
DriverAgeintNoDriver's age (validated against the tenant's limits).
IlimitedKmboolNoIf omitted, returns two variants per model (with and without unlimited km).
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"
Availability by model or by category

Depending on the tenant's configuration, availability can be by model or by category. That determines which identifier to use when quoting and when creating the booking (ModelId/Car.Model vs. CategoryId/Category). GET /api/search resolves it internally.


Step 2 — Quote the chosen option

GET /api/booking/price recalculates the total price of a specific configuration (model + dates + places). It returns a Booking object with the broken-down prices, deductibles and available promotions. Take the Price from here to send it (optionally) in the creation step.

Key fields (via query string):

FieldTypeRequiredDescription
ModelIdintYesModel to quote (from a GET /api/search result).
From / Todate-timeYesSame dates used in the search.
FromPlace / ToPlaceintYes / NoDelivery and return places.
AdditionalsarrayNoAdditionals to include in the calculation (ID + quantity).
PromotionintNoID of the promotion to apply.
CurrencyCodestringNoCurrency of the calculation.
DriverAgeintNoDriver's age.
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"

Step 3 — Choose additionals

Before creating the booking, check which additionals can be added to that configuration (insurance, GPS, child seat, additional driver, etc.) with their price already calculated for the chosen dates. GET /api/booking/additionals-price returns the list (List<AdditionalPriceItem>).

Key fields (via query string):

FieldTypeRequiredDescription
FromDate / ToDatedate-timeYesSame dates as the booking.
ModelIdintNo*Chosen model (if availability is by model).
CategoryIdintNo*Chosen category (if it is by category).
DeliveryPlaceId / ReturnPlaceIdintNoDelivery and return places.
CurrencyCodestringNoCurrency of the calculation.
PromotionintNoApplied promotion.
*Provide ModelId or CategoryId depending on how the tenant works.
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"

Each element of the response describes an available additional:

[
{
"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"
}
]
FieldDescription
IdThe additional's identifier. This is what is sent when creating the booking.
Name / DescriptionName and detail for display.
Price / DailyPrice / IsPriceByDayTotal and per-day price; IsPriceByDay indicates which one applies.
MaxQuantityPerBookingMaximum quantity of that additional that can be added.
AvailableStockAvailable stock for those dates.
IsRequiredIf true, the additional is required and must be included in the booking no matter what.
How to add them to the booking

In the body of the POST /api/booking/book (step 4), pass the chosen additionals in the Additionals array. Each item references the additional's Id and the quantity:

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

Rules: the Quantity cannot exceed MaxQuantityPerBooking, and additionals with IsRequired=true must be included. For the total Price to match in the validation (see step 4), include the same additionals when quoting too (step 2).


Step 4 — Create the booking

POST /api/booking/book creates the booking. The body is a SaveBookingModel (the booking data plus some flags). It returns BookingCreationResponse with BookingId and CustomerId, or the full Booking object if you send FullResponse=true. With IsQuotation=false the booking is left in Reserved status.

Key body fields:

FieldRequiredDescription
FromDate / ToDateYesRental range.
CustomerYesCustomer data (Name or Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress).
DeliveryPlace.IdYesDelivery place.
ReturnPlace.IdNoReturn place (by default, the delivery one).
Car.Model or CategoryYes (one)Car.Model (Id or SIPP) if availability is by model; Category (Id or Name) if by category.
CurrencyYesISO currency (e.g. USD).
AdditionalsNoAdditionals chosen in step 3 (Additional.Id + Quantity).
PriceNoExpected price; validated against the calculated one with 1% tolerance.
IsQuotationNotrue creates a quotation in Quoted status.
PromotionCodeNoPromotion code.
FullResponseNotrue returns the full Booking instead of just the 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 }
]
}'
Price validation

If you send Price and it differs by more than 1% from the price calculated by the rate plan, the operation fails with PriceMismatch (ErrorCode 4). Quote with the same additionals (step 2) and use that price, or don't send Price and let the API calculate it.

Availability by category

If the tenant works by category, replace the Car block with "Category": { "Id": 1 } (or "Category": { "Name": "..." }).


Step 5 — Pay

POST /api/booking/pay records and reconciles the payment according to the gateway. Since the booking is Reserved, paying moves it to Confirmed. The body is a PayBookingModel.

Key body fields:

FieldRequiredDescription
BookingIdYesBooking ID (from step 4).
GatewayIdYesGateway code (e.g. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD).
AmountYesAmount to pay (> 0).
CurrencyCodeNoISO currency.
TransactionIdNoTransaction ID in the gateway.
BillingInformationNoBilling data (depending on the 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"
}
}'

Querying the booking

At any time you can query the status, the balance and the prices of the booking with GET /api/booking/{bookingId}.

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

To list the recorded payments of a booking, use GET /api/bookingPayments/{bookingId}.

Next steps

  • API Reference → — all the endpoints with their schemas, examples and the Try it button.
  • Once the booking is confirmed, the operational flows continue: self-check-in (PUT /api/selfcheckin), delivery and return, and incidents and infractions.