# Content

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

This capability extends the Supplier, Destination, Category, Product, Option, Unit, Item, Availability and Booking schemas with additional content fields. When used with `octo/cart` it also extends Order responses.

{% hint style="warning" %}
The content provided by this endpoint belongs to the supplier, so please make sure you have their express permission before using it online.
{% endhint %}

* `itinerary.type`: Enum with one of the following values:
  * `START`: The starting or meeting location.
  * `POI`: A point of interest visited en route.
  * `EVENT`: An event that happens, for example `Lunch` or `Shopping Break`.
  * `END`: The ending or final location.
* `itinerary.travelTime`: The travel time required to get to this location.
* `itinerary.duration`: How much time is spent on this itinerary item.

The following helper objects are also used by this capability:

* `notice`: `id`, `title`, `shortDescription`, `coverImageUrl`
* `tourGroup`: `id`, `internalName`, `title`, `shortDescription`, `icon`
* `fare`: `id`, `internalName`, `title`, `shortDescription`, `fareGroup`
* `fareGroup`: `id`, `internalName`, `title`, `shortDescription`
* `point`: `id`, `internalName`, `title`, `shortDescription`, `pointGroup`
* `pointGroup`: `id`, `internalName`, `title`, `shortDescription`
* `font`: `id`, `name`, `normalTtfUrl`, `boldTtfUrl`, `italicTtfUrl`, `boldItalicTtfUrl`

When `octo/extras` is also enabled, each `extra` object includes:

* `title`
* `shortDescription`
* `coverImageUrl`
* `duration`
* `durationAmount`
* `durationUnit`

## Products

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

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

This capability extends the `GET /products` endpoint with additional content filtering parameters.

## Booking and Order Parameters

`termsAccepted` is supported by content capability as an input field and response field.

### Booking Endpoints

`termsAccepted` can be sent in the request body for these routes:

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

Base booking schema: [Bookings](https://docs.ventrata.com/octo-core/bookings#endpoints). This page documents only the `termsAccepted` addition.

### Order Endpoints (with `octo/cart`)

`termsAccepted` can be sent in the request body for these routes:

* `POST /orders`
* `PATCH /orders/{orderId}`
* `PATCH /orders/{orderId}/preview`
* `POST /orders/{orderId}/confirm`

It is accepted:

* At the order root (`termsAccepted`) and applies to all standalone bookings in the order.
* Inside nested booking payloads (`bookings[].termsAccepted`) when creating/updating bookings through order requests.

If both are supplied, the order-level `termsAccepted` value takes precedence.

Base order schema: [Multi-Booking Cart](https://docs.ventrata.com/capabilities/cart).

## Schema Additions (JSON)

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

### `Booking`

```json
{
  "// ...rest of booking object": "...",
  "termsAccepted": true
}
```

### `BookingWriteRequest`

```json
{
  "// ...rest of booking write request object": "...",
  "termsAccepted": true
}
```

### `Gift`

```json
{
  "// ...rest of gift object": "...",
  "termsAccepted": true
}
```

### `GiftCreateRequest`

```json
{
  "// ...rest of gift create request object": "...",
  "termsAccepted": true
}
```

### `Option`

```json
{
  "// ...rest of option object": "...",
  "itinerary": [
    {
      "name": "Morning City Tour",
      "type": "STANDARD",
      "description": "Morning departure with central pickup included.",
      "address": "123 Main St, San Francisco, CA"
    }
  ]
}
```

### `Order`

```json
{
  "// ...rest of order object": "...",
  "termsAccepted": true
}
```

### `OrderCreateRequest`

```json
{
  "// ...rest of order create request object": "...",
  "termsAccepted": true
}
```

### `OrderUpdateRequest`

```json
{
  "// ...rest of order update request object": "...",
  "termsAccepted": true
}
```
