Prenotazione end-to-end
Questa guida percorre l'intero flusso per integrare una prenotazione con l'API di Rently:
cercare la disponibilità → preventivare → scegliere gli extra → creare → pagare. Ogni passo indica
l'endpoint reale (metodo + path), i campi chiave e un esempio di curl pronto da adattare.
Conviene avere caricato il contesto (lingue, valute, luoghi e orari di apertura) per sapere quali prenotazioni si possono creare. Vedi Preparazione del contesto.
Tutti gli endpoint richiedono un token Bearer (OAuth2): invia l'header
Authorization: Bearer {token} in ogni request. Il dettaglio di ogni operazione è nella
API Reference →.
Diagramma di sequenza
Cliente API di Rently
│ │
│ 1. GET /api/search ─────────────────────► │ cerca disponibilità + prezzo
│ ◄──────────── List<Availability> ──────────┤
│ │
│ 2. GET /api/booking/price ──────────────► │ preventiva l'opzione scelta
│ ◄──────────────── Booking ─────────────────┤
│ │
│ 3. GET /api/booking/additionals-price ──► │ extra disponibili + prezzo
│ ◄──────────── List<AdditionalPriceItem> ───┤
│ │
│ 4. POST /api/booking/book ──────────────► │ crea la prenotazione (con extra)
│ ◄────────── BookingId / Booking ───────────┤ → Reserved
│ │
│ 5. POST /api/booking/pay ───────────────► │ registra il pagamento
│ ◄──────────────── Booking ─────────────────┤ Reserved → Confirmed
│ │
Riepilogo del flusso:
- Cercare la disponibilità —
GET /api/search - Preventivare —
GET /api/booking/price - Scegliere gli extra —
GET /api/booking/additionals-price - Creare la prenotazione —
POST /api/booking/book - Pagare —
POST /api/booking/pay
Creando con IsQuotation=false (l'opzione abituale), la prenotazione resta in Reserved e al pagamento passa
a Confirmed. Puoi anche creare un preventivo (IsQuotation=true, stato Quoted) se
vuoi solo conservare un preventivo; in tal caso consulta la API Reference
per i passi di conversione.
Passo 1 — Cercare la disponibilità
GET /api/search cerca le auto disponibili per un intervallo di date e luoghi di consegna e
restituzione, e restituisce ogni opzione con il suo prezzo già calcolato per modello
(List<Availability>). Funziona anche come preventivo iniziale.
Campi chiave (vanno per query string):
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
From | date-time | Sì | Data e ora di ritiro. |
To | date-time | Sì | Data e ora di restituzione. |
FromPlace | int | Sì | ID del luogo di consegna (da GET /api/places). |
ToPlace | int | No | ID del luogo di restituzione. Se omesso, si usa FromPlace. |
CurrencyCode | string | No | Valuta del calcolo (da GET /api/currencies). |
CommercialAgreementCode | string | No | Codice di accordo commerciale. |
PromotionCode | string | No | Codice di promozione da applicare. |
DriverAge | int | No | Età del conducente (viene validata rispetto ai limiti del tenant). |
IlimitedKm | bool | No | Se omesso, restituisce due varianti per modello (con e senza km illimitati). |
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"
A seconda della configurazione del tenant, la disponibilità può essere per modello o
per categoria. Questo determina quale identificatore usare per preventivare e per creare la prenotazione
(ModelId/Car.Model vs. CategoryId/Category). GET /api/search lo risolve internamente.
Passo 2 — Preventivare l'opzione scelta
GET /api/booking/price ricalcola il prezzo totale di una configurazione concreta (modello +
date + luoghi). Restituisce un oggetto Booking con i prezzi dettagliati, franchigie e
promozioni disponibili. Prendi da qui il Price per inviarlo (facoltativo) nel passo di creazione.
Campi chiave (per query string):
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
ModelId | int | Sì | Modello da preventivare (da un risultato di GET /api/search). |
From / To | date-time | Sì | Stesse date usate nella ricerca. |
FromPlace / ToPlace | int | Sì / No | Luoghi di consegna e restituzione. |
Additionals | array | No | Extra da includere nel calcolo (ID + quantità). |
Promotion | int | No | ID della promozione da applicare. |
CurrencyCode | string | No | Valuta del calcolo. |
DriverAge | int | No | Età del conducente. |
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 — Scegliere gli extra
Prima di creare la prenotazione, consulta quali extra si possono aggiungere a quella configurazione
(assicurazione, GPS, seggiolino per bambini, conducente aggiuntivo, ecc.) con il prezzo già calcolato per le
date scelte. GET /api/booking/additionals-price restituisce la lista
(List<AdditionalPriceItem>).
Campi chiave (per query string):
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
FromDate / ToDate | date-time | Sì | Stesse date della prenotazione. |
ModelId | int | No* | Modello scelto (se la disponibilità è per modello). |
CategoryId | int | No* | Categoria scelta (se è per categoria). |
DeliveryPlaceId / ReturnPlaceId | int | No | Luoghi di consegna e restituzione. |
CurrencyCode | string | No | Valuta del calcolo. |
Promotion | int | No | Promozione applicata. |
ModelId o CategoryId a seconda di come lavora il 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"
Ogni elemento della risposta descrive un extra disponibile:
[
{
"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 | Descrizione |
|---|---|
Id | Identificatore dell'extra. È quello che si invia al momento di creare la prenotazione. |
Name / Description | Nome e dettaglio da mostrare. |
Price / DailyPrice / IsPriceByDay | Prezzo totale e giornaliero; IsPriceByDay indica quale si applica. |
MaxQuantityPerBooking | Quantità massima che si può aggiungere di quell'extra. |
AvailableStock | Stock disponibile per quelle date. |
IsRequired | Se è true, l'extra è obbligatorio e deve essere incluso necessariamente nella prenotazione. |
Nel corpo del POST /api/booking/book (passo 4), passa gli extra scelti nell'array
Additionals. Ogni item fa riferimento all'Id dell'extra e alla quantità:
"Additionals": [
{ "Additional": { "Id": 1 }, "Quantity": 1 },
{ "Additional": { "Id": 5 }, "Quantity": 2 }
]
Regole: la Quantity non può superare MaxQuantityPerBooking, e gli extra con
IsRequired=true devono essere inclusi. Affinché il Price totale coincida nella validazione
(vedi passo 4), includi gli stessi extra anche nel preventivo (passo 2).
Passo 4 — Creare la prenotazione
POST /api/booking/book crea la prenotazione. Il corpo è un SaveBookingModel (i dati della
prenotazione più alcuni flag). Restituisce BookingCreationResponse con BookingId e CustomerId,
oppure l'oggetto Booking completo se invii FullResponse=true. Con IsQuotation=false la prenotazione
resta in stato Reserved.
Campi chiave del corpo:
| Campo | Obbligatorio | Descrizione |
|---|---|---|
FromDate / ToDate | Sì | Intervallo del noleggio. |
Customer | Sì | Dati del cliente (Name o Firstname/Lastname, DocumentId, DocumentTypeId, Age, EmailAddress). |
DeliveryPlace.Id | Sì | Luogo di consegna. |
ReturnPlace.Id | No | Luogo di restituzione (per impostazione predefinita, quello di consegna). |
Car.Model o Category | Sì (uno) | Car.Model (Id o SIPP) se la disponibilità è per modello; Category (Id o Name) se è per categoria. |
Currency | Sì | Valuta ISO (es. USD). |
Additionals | No | Extra scelti nel passo 3 (Additional.Id + Quantity). |
Price | No | Prezzo atteso; viene validato rispetto a quello calcolato con l'1% di tolleranza. |
IsQuotation | No | true crea un preventivo in stato Quoted. |
PromotionCode | No | Codice di promozione. |
FullResponse | No | true restituisce il Booking completo invece dei soli ID. |
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 invii Price e differisce di più dell'1% dal prezzo calcolato dal tariffario, l'operazione
fallisce con PriceMismatch (ErrorCode 4). Preventiva con gli stessi extra (passo 2) e usa
quel prezzo, oppure non inviare Price e lascia che l'API lo calcoli.
Se il tenant lavora per categoria, sostituisci il blocco Car con
"Category": { "Id": 1 } (o "Category": { "Name": "..." }).
Passo 5 — Pagare
POST /api/booking/pay registra e riconcilia il pagamento secondo il gateway. Poiché la prenotazione è
Reserved, al pagamento passa a Confirmed. Il corpo è un PayBookingModel.
Campi chiave del corpo:
| Campo | Obbligatorio | Descrizione |
|---|---|---|
BookingId | Sì | ID della prenotazione (dal passo 4). |
GatewayId | Sì | Codice del gateway (es. STRIPE, ML, PL, TBANKCL, VOUCHER, BANKTRANSFER, CREDITCARD). |
Amount | Sì | Importo da pagare (> 0). |
CurrencyCode | No | Valuta ISO. |
TransactionId | No | ID della transazione nel gateway. |
BillingInformation | No | Dati di fatturazione (secondo il 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"
}
}'
Consultare la prenotazione
In qualsiasi momento puoi consultare lo stato, il saldo e i prezzi della prenotazione con
GET /api/booking/{bookingId}.
curl -G "https://{tenant}.rently.com.ar/api/booking/12345?language=es-AR" \
-H "Authorization: Bearer {token}"
Per elencare i pagamenti registrati di una prenotazione, usa GET /api/bookingPayments/{bookingId}.
Prossimi passi
- API Reference → — tutti gli endpoint con i loro schema, esempi e il pulsante Try it.
- Una volta confermata la prenotazione, proseguono i flussi operativi: self-check-in
(
PUT /api/selfcheckin), consegna e restituzione, e incidenti e infrazioni.