# Rentals

To use this capability, add `octo/rentals` to your `Octo-Capabilities` header.

Rentals adds duration selection for rental products and exposes rental metadata on product, option, and booking responses.

{% hint style="info" %}
Operations below use the `/octo` prefix.
{% endhint %}

## Rental Product Data

This capability extends product routes documented in [Products](https://docs.ventrata.com/octo-core/products):

* `GET /products`
* `GET /products/{productId}`

### Rental Duration Object

Used by `option.rentalDurations[]` and `booking.rentalDuration`.

Base product schema: [Products](https://docs.ventrata.com/octo-core/products).

{% hint style="info" %}
Always use ids returned by `option.rentalDurations[]`. Unsupported duration units return `INVALID_RENTAL_DURATION_ID`.
{% endhint %}

## Rental Availability

This capability extends availability routes documented in [Availability](https://docs.ventrata.com/octo-core/availability):

* `POST /availability`
* `POST /availability/calendar`
* `POST /availability/batch`
* `POST /availability/calendar/batch`

### Request Fields Added by Rentals

Base availability schema: [Availability](https://docs.ventrata.com/octo-core/availability).

{% hint style="info" %}
Rentals does not add new availability response fields. The selected duration is applied to availability and pricing calculation.
{% endhint %}

## Rental Booking

The same `rentalDurationId` request field is supported on all booking write routes that use `create_booking`:

* `POST /bookings`
* `PATCH /bookings/{uuid}`
* `POST /bookings/{uuid}/confirm`

### Request Field

Base booking schema: [Bookings](https://docs.ventrata.com/octo-core/bookings#endpoints).

### Added Booking Response Fields

These are additive response fields on the base booking schema from [Bookings](https://docs.ventrata.com/octo-core/bookings#endpoints).

{% hint style="info" %}
These booking fields are returned on booking write routes above and booking read/cancel/extend routes that serialize bookings (`GET /octo/bookings`, `GET /octo/bookings/:uuid`, `POST /octo/bookings/:uuid/cancel`, `POST /octo/bookings/:uuid/extend`).
{% endhint %}

## Schema Additions (JSON)

These are additive fragments showing only fields introduced by this capability.

### `AvailabilityBatchRequest`

```json
{
  "// ...rest of availability batch request object": "...",
  "rentalDurationId": "rental_duration_2h"
}
```

### `AvailabilityCalendarBatchRequest`

```json
{
  "// ...rest of availability calendar batch request object": "...",
  "rentalDurationId": "rental_duration_2h"
}
```

### `AvailabilityCalendarRequest`

```json
{
  "// ...rest of availability calendar request object": "...",
  "rentalDurationId": "rental_duration_2h"
}
```

### `AvailabilityRequest`

```json
{
  "// ...rest of availability request object": "...",
  "rentalDurationId": "rental_duration_2h"
}
```

### `Booking`

```json
{
  "// ...rest of booking object": "...",
  "rentalDurationId": "rental_duration_2h",
  "rentalDuration": {
    "id": "e7cc8bb4-8d1c-4848-8824-5dbedb718681",
    "duration": "2",
    "durationAmount": 220.0,
    "durationUnit": "HOUR",
    "title": "Summer Promotion",
    "description": "Morning departure with central pickup included."
  }
}
```

### `BookingWriteRequest`

```json
{
  "// ...rest of booking write request object": "...",
  "rentalDurationId": "rental_duration_2h"
}
```

### `Option`

```json
{
  "// ...rest of option object": "...",
  "rentalDurations": [
    {
      "id": "e7cc8bb4-8d1c-4848-8824-5dbedb718681",
      "title": "Summer Promotion",
      "duration": "2",
      "durationAmount": 220.0
    }
  ]
}
```

### `Product`

```json
{
  "// ...rest of product object": "...",
  "isRental": true
}
```
