Reserva de punta a punta
Esta guía recorre el flujo completo para integrar una reserva con la API de Rently:
buscar disponibilidad → cotizar → elegir adicionales → crear → pagar. Cada paso indica el
endpoint real (método + path), los campos clave y un ejemplo de curl listo para adaptar.
Conviene tener cargado el contexto (idiomas, monedas, lugares y horarios de atención) para saber qué reservas se pueden crear. Ver Preparando el contexto.
Todos los endpoints requieren un token Bearer (OAuth2): enviá el header
Authorization: Bearer {token} en cada request. El detalle de cada operación está en la
API Reference →.
Diagrama de secuencia
Cliente API de Rently
│ │
│ 1. GET /api/search ─────────────────────► │ busca disponibilidad + precio
│ ◄──────────── List<Availability> ──────────┤
│ │
│ 2. GET /api/booking/price ──────────────► │ cotiza la opción elegida
│ ◄──────────────── Booking ─────────────────┤
│ │
│ 3. GET /api/booking/additionals-price ──► │ adicionales disponibles + precio
│ ◄──────────── List<AdditionalPriceItem> ───┤
│ │
│ 4. POST /api/booking/book ──────────────► │ crea la reserva (con adicionales)
│ ◄────────── BookingId / Booking ───────────┤ → Reserved
│ │
│ 5. POST /api/booking/pay ───────────────► │ registra el pago
│ ◄──────────────── Booking ─────────────────┤ Reserved → Confirmed
│ │
Resumen del flujo:
- Buscar disponibilidad —
GET /api/search - Cotizar —
GET /api/booking/price - Elegir adicionales —
GET /api/booking/additionals-price - Crear la reserva —
POST /api/booking/book - Pagar —
POST /api/booking/pay
Creando con IsQuotation=false (lo habitual), la reserva queda en Reserved y al pagarla pasa
a Confirmed. También podés crear una cotización (IsQuotation=true, estado Quoted) si
solo querés persistir un presupuesto; en ese caso consultá la API Reference
para los pasos de conversión.
Paso 1 — Buscar disponibilidad
GET /api/search busca autos disponibles para un rango de fechas y lugares de entrega y
devolución, y devuelve cada opción con su precio ya calculado por modelo
(List<Availability>). Funciona también como cotización inicial.
Campos clave (van por query string):
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
From | date-time | Sí | Fecha y hora de retiro. |
To | date-time | Sí | Fecha y hora de devolución. |
FromPlace | int | Sí | ID del lugar de entrega (de GET /api/places). |
ToPlace | int | No | ID del lugar de devolución. Si se omite, se usa FromPlace. |
CurrencyCode | string | No | Moneda del cálculo (de GET /api/currencies). |
CommercialAgreementCode | string | No | Código de acuerdo comercial. |
PromotionCode | string | No | Código de promoción a aplicar. |
DriverAge | int | No | Edad del conductor (se valida contra los límites del tenant). |
IlimitedKm | bool | No | Si se omite, devuelve dos variantes por modelo (con y sin km ilimitado). |
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"
Según la configuración del tenant, la disponibilidad puede ser por modelo o
por categoría. Eso determina qué identificador usar al cotizar y al crear la reserva
(ModelId/Car.Model vs. CategoryId/Category). GET /api/search lo resuelve internamente.
Paso 2 — Cotizar la opción elegida
GET /api/booking/price recalcula el precio total de una configuración concreta (modelo +
fechas + lugares). Devuelve un objeto Booking con los precios desglosados, franquicias y
promociones disponibles. Tomá de acá el Price para enviarlo (opcional) en el paso de creación.
Campos clave (por query string):
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
ModelId | int | Sí | Modelo a cotizar (de un resultado de GET /api/search). |
From / To | date-time | Sí | Mismas fechas usadas en la búsqueda. |
FromPlace / ToPlace | int | Sí / No | Lugares de entrega y devolución. |
Additionals | array | No | Adicionales a incluir en el cálculo (ID + cantidad). |
Promotion | int | No | ID de la promoción a aplicar. |
CurrencyCode | string | No | Moneda del cálculo. |
DriverAge | int | No | Edad del conductor. |
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"
Paso 3 — Elegir adicionales
Antes de crear la reserva, consultá qué adicionales se pueden agregar a esa configuración
(seguro, GPS, silla para niños, conductor adicional, etc.) con su precio ya calculado para las
fechas elegidas. GET /api/booking/additionals-price devuelve la lista
(List<AdditionalPriceItem>).
Campos clave (por query string):
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
FromDate / ToDate | date-time | Sí | Mismas fechas de la reserva. |
ModelId | int | No* | Modelo elegido (si la disponibilidad es por modelo). |
CategoryId | int | No* | Categoría elegida (si es por categoría). |
DeliveryPlaceId / ReturnPlaceId | int | No | Lugares de entrega y devolución. |
CurrencyCode | string | No | Moneda del cálculo. |
Promotion | int | No | Promoción aplicada. |
ModelId o CategoryId según cómo trabaje el 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"
Cada elemento de la respuesta describe un adicional 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"
}
]
| Campo | Descripción |
|---|---|
Id | Identificador del adicional. Es el que se manda al crear la reserva. |
Name / Description | Nombre y detalle para mostrar. |
Price / DailyPrice / IsPriceByDay | Precio total y por día; IsPriceByDay indica cuál aplica. |
MaxQuantityPerBooking | Cantidad máxima que se puede agregar de ese adicional. |
AvailableStock | Stock disponible para esas fechas. |
IsRequired | Si es true, el adicional es obligatorio y debe ir sí o sí en la reserva. |
En el cuerpo del POST /api/booking/book (paso 4), pasá los adicionales elegidos en el array
Additionals. Cada item referencia el Id del adicional y la cantidad:
"Additionals": [
{ "Additional": { "Id": 1 }, "Quantity": 1 },
{ "Additional": { "Id": 5 }, "Quantity": 2 }
]
Reglas: la Quantity no puede superar MaxQuantityPerBooking, y los adicionales con
IsRequired=true deben incluirse. Para que el Price total coincida en la validación
(ver paso 4), incluí los mismos adicionales también al cotizar (paso 2).
Paso 4 — Crear la reserva
POST /api/booking/book crea la reserva. El cuerpo es un SaveBookingModel (los datos de la
reserva más algunos flags). Devuelve BookingCreationResponse con BookingId y CustomerId,
o el objeto Booking completo si enviás FullResponse=true. Con IsQuotation=false la reserva
queda en estado Reserved.
Campos clave del cuerpo:
| Campo | Obligatorio | Descripción |
|---|---|---|
FromDate / ToDate | Sí | Rango del alquiler. |
Customer | Sí | Datos del cliente (Name o Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress). |
DeliveryPlace.Id | Sí | Lugar de entrega. |
ReturnPlace.Id | No | Lugar de devolución (por defecto, el de entrega). |
Car.Model o Category | Sí (uno) | Car.Model (Id o SIPP) si la disponibilidad es por modelo; Category (Id o Name) si es por categoría. |
Currency | Sí | Moneda ISO (ej. USD). |
Additionals | No | Adicionales elegidos en el paso 3 (Additional.Id + Quantity). |
Price | No | Precio esperado; se valida contra el calculado con 1% de tolerancia. |
IsQuotation | No | true crea una cotización en estado Quoted. |
PromotionCode | No | Código de promoción. |
FullResponse | No | true devuelve el Booking completo en vez de solo los 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 enviás Price y difiere más de un 1% del precio calculado por el tarifario, la operación
falla con PriceMismatch (ErrorCode 4). Cotizá con los mismos adicionales (paso 2) y usá
ese precio, o no envíes Price y dejá que la API lo calcule.
Si el tenant trabaja por categoría, reemplazá el bloque Car por
"Category": { "Id": 1 } (o "Category": { "Name": "..." }).
Paso 5 — Pagar
POST /api/booking/pay registra y concilia el pago según el gateway. Como la reserva está
Reserved, al pagar pasa a Confirmed. El cuerpo es un PayBookingModel.
Campos clave del cuerpo:
| Campo | Obligatorio | Descripción |
|---|---|---|
BookingId | Sí | ID de la reserva (del paso 4). |
GatewayId | Sí | Código del gateway (ej. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD). |
Amount | Sí | Monto a pagar (> 0). |
CurrencyCode | No | Moneda ISO. |
TransactionId | No | ID de la transacción en el gateway. |
BillingInformation | No | Datos de facturación (según el 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"
}
}'
Consultar la reserva
En cualquier momento podés consultar el estado, el balance y los precios de la reserva con
GET /api/booking/{bookingId}.
curl -G "https://{tenant}.rently.com.ar/api/booking/12345?language=es-AR" \
-H "Authorization: Bearer {token}"
Para listar los pagos registrados de una reserva, usá GET /api/bookingPayments/{bookingId}.
Próximos pasos
- API Reference → — todos los endpoints con sus schemas, ejemplos y el botón Try it.
- Una vez confirmada la reserva, continúan los flujos operativos: self-check-in
(
PUT /api/selfcheckin), entrega y devolución, e incidentes e infracciones.