Reserva de ponta a ponta
Este guia percorre o fluxo completo para integrar uma reserva com a API da Rently:
buscar disponibilidade → cotar → escolher adicionais → criar → pagar. Cada passo indica o
endpoint real (método + path), os campos-chave e um exemplo de curl pronto para adaptar.
Convém ter carregado o contexto (idiomas, moedas, lugares e horários de atendimento) para saber quais reservas podem ser criadas. Ver Preparando o contexto.
Todos os endpoints exigem um token Bearer (OAuth2): envie o header
Authorization: Bearer {token} em cada request. O detalhe de cada operação está na
API Reference →.
Diagrama de sequência
Cliente API da Rently
│ │
│ 1. GET /api/search ─────────────────────► │ busca disponibilidade + preço
│ ◄──────────── List<Availability> ──────────┤
│ │
│ 2. GET /api/booking/price ──────────────► │ cota a opção escolhida
│ ◄──────────────── Booking ─────────────────┤
│ │
│ 3. GET /api/booking/additionals-price ──► │ adicionais disponíveis + preço
│ ◄──────────── List<AdditionalPriceItem> ───┤
│ │
│ 4. POST /api/booking/book ──────────────► │ cria a reserva (com adicionais)
│ ◄────────── BookingId / Booking ───────────┤ → Reserved
│ │
│ 5. POST /api/booking/pay ───────────────► │ registra o pagamento
│ ◄──────────────── Booking ─────────────────┤ Reserved → Confirmed
│ │
Resumo do fluxo:
- Buscar disponibilidade —
GET /api/search - Cotar —
GET /api/booking/price - Escolher adicionais —
GET /api/booking/additionals-price - Criar a reserva —
POST /api/booking/book - Pagar —
POST /api/booking/pay
Criando com IsQuotation=false (o habitual), a reserva fica em Reserved e, ao pagá-la, passa
a Confirmed. Você também pode criar uma cotação (IsQuotation=true, estado Quoted) se
só quiser persistir um orçamento; nesse caso, consulte a API Reference
para os passos de conversão.
Passo 1 — Buscar disponibilidade
GET /api/search busca carros disponíveis para um intervalo de datas e lugares de entrega e
devolução, e devolve cada opção com seu preço já calculado por modelo
(List<Availability>). Funciona também como cotação inicial.
Campos-chave (vão por query string):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
From | date-time | Sim | Data e hora de retirada. |
To | date-time | Sim | Data e hora de devolução. |
FromPlace | int | Sim | ID do lugar de entrega (de GET /api/places). |
ToPlace | int | Não | ID do lugar de devolução. Se omitido, usa-se FromPlace. |
CurrencyCode | string | Não | Moeda do cálculo (de GET /api/currencies). |
CommercialAgreementCode | string | Não | Código de acordo comercial. |
PromotionCode | string | Não | Código de promoção a aplicar. |
DriverAge | int | Não | Idade do condutor (validada contra os limites do tenant). |
IlimitedKm | bool | Não | Se omitido, devolve duas variantes por modelo (com e sem 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"
Conforme a configuração do tenant, a disponibilidade pode ser por modelo ou
por categoria. Isso determina qual identificador usar ao cotar e ao criar a reserva
(ModelId/Car.Model vs. CategoryId/Category). GET /api/search resolve isso internamente.
Passo 2 — Cotar a opção escolhida
GET /api/booking/price recalcula o preço total de uma configuração concreta (modelo +
datas + lugares). Devolve um objeto Booking com os preços detalhados, franquias e
promoções disponíveis. Pegue daqui o Price para enviá-lo (opcional) no passo de criação.
Campos-chave (por query string):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
ModelId | int | Sim | Modelo a cotar (de um resultado de GET /api/search). |
From / To | date-time | Sim | Mesmas datas usadas na busca. |
FromPlace / ToPlace | int | Sim / Não | Lugares de entrega e devolução. |
Additionals | array | Não | Adicionais a incluir no cálculo (ID + quantidade). |
Promotion | int | Não | ID da promoção a aplicar. |
CurrencyCode | string | Não | Moeda do cálculo. |
DriverAge | int | Não | Idade do condutor. |
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"
Passo 3 — Escolher adicionais
Antes de criar a reserva, consulte quais adicionais podem ser incluídos nessa configuração
(seguro, GPS, cadeirinha para crianças, condutor adicional, etc.) com seu preço já calculado para as
datas escolhidas. GET /api/booking/additionals-price devolve a lista
(List<AdditionalPriceItem>).
Campos-chave (por query string):
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
FromDate / ToDate | date-time | Sim | Mesmas datas da reserva. |
ModelId | int | Não* | Modelo escolhido (se a disponibilidade for por modelo). |
CategoryId | int | Não* | Categoria escolhida (se for por categoria). |
DeliveryPlaceId / ReturnPlaceId | int | Não | Lugares de entrega e devolução. |
CurrencyCode | string | Não | Moeda do cálculo. |
Promotion | int | Não | Promoção aplicada. |
ModelId ou CategoryId conforme o modo de trabalho do 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 da resposta descreve um adicional disponível:
[
{
"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 | Descrição |
|---|---|
Id | Identificador do adicional. É o que se envia ao criar a reserva. |
Name / Description | Nome e detalhe para exibição. |
Price / DailyPrice / IsPriceByDay | Preço total e por dia; IsPriceByDay indica qual se aplica. |
MaxQuantityPerBooking | Quantidade máxima que se pode incluir desse adicional. |
AvailableStock | Estoque disponível para essas datas. |
IsRequired | Se for true, o adicional é obrigatório e deve constar obrigatoriamente na reserva. |
No corpo do POST /api/booking/book (passo 4), passe os adicionais escolhidos no array
Additionals. Cada item referencia o Id do adicional e a quantidade:
"Additionals": [
{ "Additional": { "Id": 1 }, "Quantity": 1 },
{ "Additional": { "Id": 5 }, "Quantity": 2 }
]
Regras: a Quantity não pode ultrapassar MaxQuantityPerBooking, e os adicionais com
IsRequired=true devem ser incluídos. Para que o Price total coincida na validação
(ver passo 4), inclua os mesmos adicionais também ao cotar (passo 2).
Passo 4 — Criar a reserva
POST /api/booking/book cria a reserva. O corpo é um SaveBookingModel (os dados da
reserva mais alguns flags). Devolve BookingCreationResponse com BookingId e CustomerId,
ou o objeto Booking completo se você enviar FullResponse=true. Com IsQuotation=false, a reserva
fica no estado Reserved.
Campos-chave do corpo:
| Campo | Obrigatório | Descrição |
|---|---|---|
FromDate / ToDate | Sim | Intervalo do aluguel. |
Customer | Sim | Dados do cliente (Name ou Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress). |
DeliveryPlace.Id | Sim | Lugar de entrega. |
ReturnPlace.Id | Não | Lugar de devolução (por padrão, o de entrega). |
Car.Model ou Category | Sim (um) | Car.Model (Id ou SIPP) se a disponibilidade for por modelo; Category (Id ou Name) se for por categoria. |
Currency | Sim | Moeda ISO (ex. USD). |
Additionals | Não | Adicionais escolhidos no passo 3 (Additional.Id + Quantity). |
Price | Não | Preço esperado; é validado contra o calculado com 1% de tolerância. |
IsQuotation | Não | true cria uma cotação no estado Quoted. |
PromotionCode | Não | Código de promoção. |
FullResponse | Não | true devolve o Booking completo em vez de apenas os 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 }
]
}'
Se você enviar Price e ele diferir em mais de 1% do preço calculado pelo tarifário, a operação
falha com PriceMismatch (ErrorCode 4). Cote com os mesmos adicionais (passo 2) e use
esse preço, ou não envie Price e deixe a API calculá-lo.
Se o tenant trabalha por categoria, substitua o bloco Car por
"Category": { "Id": 1 } (ou "Category": { "Name": "..." }).
Passo 5 — Pagar
POST /api/booking/pay registra e concilia o pagamento conforme o gateway. Como a reserva está
Reserved, ao pagar passa a Confirmed. O corpo é um PayBookingModel.
Campos-chave do corpo:
| Campo | Obrigatório | Descrição |
|---|---|---|
BookingId | Sim | ID da reserva (do passo 4). |
GatewayId | Sim | Código do gateway (ex. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD). |
Amount | Sim | Valor a pagar (> 0). |
CurrencyCode | Não | Moeda ISO. |
TransactionId | Não | ID da transação no gateway. |
BillingInformation | Não | Dados de faturamento (conforme o 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 a reserva
A qualquer momento você pode consultar o estado, o saldo e os preços da reserva com
GET /api/booking/{bookingId}.
curl -G "https://{tenant}.rently.com.ar/api/booking/12345?language=es-AR" \
-H "Authorization: Bearer {token}"
Para listar os pagamentos registrados de uma reserva, use GET /api/bookingPayments/{bookingId}.
Próximos passos
- API Reference → — todos os endpoints com seus schemas, exemplos e o botão Try it.
- Uma vez confirmada a reserva, seguem os fluxos operacionais: self-check-in
(
PUT /api/selfcheckin), entrega e devolução, e incidentes e infrações.