Pular para o conteúdo principal

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.

Antes de começar

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:

  1. Buscar disponibilidadeGET /api/search
  2. CotarGET /api/booking/price
  3. Escolher adicionaisGET /api/booking/additionals-price
  4. Criar a reservaPOST /api/booking/book
  5. PagarPOST /api/booking/pay
Estados da reserva

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

CampoTipoObrigatórioDescrição
Fromdate-timeSimData e hora de retirada.
Todate-timeSimData e hora de devolução.
FromPlaceintSimID do lugar de entrega (de GET /api/places).
ToPlaceintNãoID do lugar de devolução. Se omitido, usa-se FromPlace.
CurrencyCodestringNãoMoeda do cálculo (de GET /api/currencies).
CommercialAgreementCodestringNãoCódigo de acordo comercial.
PromotionCodestringNãoCódigo de promoção a aplicar.
DriverAgeintNãoIdade do condutor (validada contra os limites do tenant).
IlimitedKmboolNãoSe 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"
Disponibilidade por modelo ou por categoria

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

CampoTipoObrigatórioDescrição
ModelIdintSimModelo a cotar (de um resultado de GET /api/search).
From / Todate-timeSimMesmas datas usadas na busca.
FromPlace / ToPlaceintSim / NãoLugares de entrega e devolução.
AdditionalsarrayNãoAdicionais a incluir no cálculo (ID + quantidade).
PromotionintNãoID da promoção a aplicar.
CurrencyCodestringNãoMoeda do cálculo.
DriverAgeintNãoIdade 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):

CampoTipoObrigatórioDescrição
FromDate / ToDatedate-timeSimMesmas datas da reserva.
ModelIdintNão*Modelo escolhido (se a disponibilidade for por modelo).
CategoryIdintNão*Categoria escolhida (se for por categoria).
DeliveryPlaceId / ReturnPlaceIdintNãoLugares de entrega e devolução.
CurrencyCodestringNãoMoeda do cálculo.
PromotionintNãoPromoção aplicada.
*Indique 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"
}
]
CampoDescrição
IdIdentificador do adicional. É o que se envia ao criar a reserva.
Name / DescriptionNome e detalhe para exibição.
Price / DailyPrice / IsPriceByDayPreço total e por dia; IsPriceByDay indica qual se aplica.
MaxQuantityPerBookingQuantidade máxima que se pode incluir desse adicional.
AvailableStockEstoque disponível para essas datas.
IsRequiredSe for true, o adicional é obrigatório e deve constar obrigatoriamente na reserva.
Como incluí-los 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:

CampoObrigatórioDescrição
FromDate / ToDateSimIntervalo do aluguel.
CustomerSimDados do cliente (Name ou Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress).
DeliveryPlace.IdSimLugar de entrega.
ReturnPlace.IdNãoLugar de devolução (por padrão, o de entrega).
Car.Model ou CategorySim (um)Car.Model (Id ou SIPP) se a disponibilidade for por modelo; Category (Id ou Name) se for por categoria.
CurrencySimMoeda ISO (ex. USD).
AdditionalsNãoAdicionais escolhidos no passo 3 (Additional.Id + Quantity).
PriceNãoPreço esperado; é validado contra o calculado com 1% de tolerância.
IsQuotationNãotrue cria uma cotação no estado Quoted.
PromotionCodeNãoCódigo de promoção.
FullResponseNãotrue 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 }
]
}'
Validação de preço

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.

Disponibilidade por categoria

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:

CampoObrigatórioDescrição
BookingIdSimID da reserva (do passo 4).
GatewayIdSimCódigo do gateway (ex. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD).
AmountSimValor a pagar (> 0).
CurrencyCodeNãoMoeda ISO.
TransactionIdNãoID da transação no gateway.
BillingInformationNãoDados 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.