Saltar al contenido principal

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.

Antes de empezar

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:

  1. Buscar disponibilidadGET /api/search
  2. CotizarGET /api/booking/price
  3. Elegir adicionalesGET /api/booking/additionals-price
  4. Crear la reservaPOST /api/booking/book
  5. PagarPOST /api/booking/pay
Estados de la reserva

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):

CampoTipoObligatorioDescripción
Fromdate-timeFecha y hora de retiro.
Todate-timeFecha y hora de devolución.
FromPlaceintID del lugar de entrega (de GET /api/places).
ToPlaceintNoID del lugar de devolución. Si se omite, se usa FromPlace.
CurrencyCodestringNoMoneda del cálculo (de GET /api/currencies).
CommercialAgreementCodestringNoCódigo de acuerdo comercial.
PromotionCodestringNoCódigo de promoción a aplicar.
DriverAgeintNoEdad del conductor (se valida contra los límites del tenant).
IlimitedKmboolNoSi 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"
Disponibilidad por modelo o por categoría

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):

CampoTipoObligatorioDescripción
ModelIdintModelo a cotizar (de un resultado de GET /api/search).
From / Todate-timeMismas fechas usadas en la búsqueda.
FromPlace / ToPlaceintSí / NoLugares de entrega y devolución.
AdditionalsarrayNoAdicionales a incluir en el cálculo (ID + cantidad).
PromotionintNoID de la promoción a aplicar.
CurrencyCodestringNoMoneda del cálculo.
DriverAgeintNoEdad 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):

CampoTipoObligatorioDescripción
FromDate / ToDatedate-timeMismas fechas de la reserva.
ModelIdintNo*Modelo elegido (si la disponibilidad es por modelo).
CategoryIdintNo*Categoría elegida (si es por categoría).
DeliveryPlaceId / ReturnPlaceIdintNoLugares de entrega y devolución.
CurrencyCodestringNoMoneda del cálculo.
PromotionintNoPromoción aplicada.
*Indicá 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"
}
]
CampoDescripción
IdIdentificador del adicional. Es el que se manda al crear la reserva.
Name / DescriptionNombre y detalle para mostrar.
Price / DailyPrice / IsPriceByDayPrecio total y por día; IsPriceByDay indica cuál aplica.
MaxQuantityPerBookingCantidad máxima que se puede agregar de ese adicional.
AvailableStockStock disponible para esas fechas.
IsRequiredSi es true, el adicional es obligatorio y debe ir sí o sí en la reserva.
Cómo agregarlos a 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:

CampoObligatorioDescripción
FromDate / ToDateRango del alquiler.
CustomerDatos del cliente (Name o Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress).
DeliveryPlace.IdLugar de entrega.
ReturnPlace.IdNoLugar de devolución (por defecto, el de entrega).
Car.Model o CategorySí (uno)Car.Model (Id o SIPP) si la disponibilidad es por modelo; Category (Id o Name) si es por categoría.
CurrencyMoneda ISO (ej. USD).
AdditionalsNoAdicionales elegidos en el paso 3 (Additional.Id + Quantity).
PriceNoPrecio esperado; se valida contra el calculado con 1% de tolerancia.
IsQuotationNotrue crea una cotización en estado Quoted.
PromotionCodeNoCódigo de promoción.
FullResponseNotrue 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 }
]
}'
Validación de precio

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.

Disponibilidad por categoría

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:

CampoObligatorioDescripción
BookingIdID de la reserva (del paso 4).
GatewayIdCódigo del gateway (ej. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD).
AmountMonto a pagar (> 0).
CurrencyCodeNoMoneda ISO.
TransactionIdNoID de la transacción en el gateway.
BillingInformationNoDatos 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.