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.
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:
- Search availability —
GET /api/search - Quote —
GET /api/booking/price - Choose additionals —
GET /api/booking/additionals-price - Create the booking —
POST /api/booking/book - Pay —
POST /api/booking/pay
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):
| Field | Type | Required | Description |
|---|---|---|---|
From | date-time | Yes | Pickup date and time. |
To | date-time | Yes | Return date and time. |
FromPlace | int | Yes | ID of the delivery place (from GET /api/places). |
ToPlace | int | No | ID of the return place. If omitted, FromPlace is used. |
CurrencyCode | string | No | Currency of the calculation (from GET /api/currencies). |
CommercialAgreementCode | string | No | Commercial agreement code. |
PromotionCode | string | No | Promotion code to apply. |
DriverAge | int | No | Driver's age (validated against the tenant's limits). |
IlimitedKm | bool | No | If 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"
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):
| Field | Type | Required | Description |
|---|---|---|---|
ModelId | int | Yes | Model to quote (from a GET /api/search result). |
From / To | date-time | Yes | Same dates used in the search. |
FromPlace / ToPlace | int | Yes / No | Delivery and return places. |
Additionals | array | No | Additionals to include in the calculation (ID + quantity). |
Promotion | int | No | ID of the promotion to apply. |
CurrencyCode | string | No | Currency of the calculation. |
DriverAge | int | No | Driver'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):
| Field | Type | Required | Description |
|---|---|---|---|
FromDate / ToDate | date-time | Yes | Same dates as the booking. |
ModelId | int | No* | Chosen model (if availability is by model). |
CategoryId | int | No* | Chosen category (if it is by category). |
DeliveryPlaceId / ReturnPlaceId | int | No | Delivery and return places. |
CurrencyCode | string | No | Currency of the calculation. |
Promotion | int | No | Applied promotion. |
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"
}
]
| Field | Description |
|---|---|
Id | The additional's identifier. This is what is sent when creating the booking. |
Name / Description | Name and detail for display. |
Price / DailyPrice / IsPriceByDay | Total and per-day price; IsPriceByDay indicates which one applies. |
MaxQuantityPerBooking | Maximum quantity of that additional that can be added. |
AvailableStock | Available stock for those dates. |
IsRequired | If true, the additional is required and must be included in the booking no matter what. |
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:
| Field | Required | Description |
|---|---|---|
FromDate / ToDate | Yes | Rental range. |
Customer | Yes | Customer data (Name or Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress). |
DeliveryPlace.Id | Yes | Delivery place. |
ReturnPlace.Id | No | Return place (by default, the delivery one). |
Car.Model or Category | Yes (one) | Car.Model (Id or SIPP) if availability is by model; Category (Id or Name) if by category. |
Currency | Yes | ISO currency (e.g. USD). |
Additionals | No | Additionals chosen in step 3 (Additional.Id + Quantity). |
Price | No | Expected price; validated against the calculated one with 1% tolerance. |
IsQuotation | No | true creates a quotation in Quoted status. |
PromotionCode | No | Promotion code. |
FullResponse | No | true 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 }
]
}'
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.
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:
| Field | Required | Description |
|---|---|---|
BookingId | Yes | Booking ID (from step 4). |
GatewayId | Yes | Gateway code (e.g. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD). |
Amount | Yes | Amount to pay (> 0). |
CurrencyCode | No | ISO currency. |
TransactionId | No | Transaction ID in the gateway. |
BillingInformation | No | Billing 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.