Octo extra capabilities

Extra capabilities: 

This Api implements to extra octo capabilities:

1. Octo/pricing

This API implements the optional pricing capability defined by Octo.
To activate the optional pricing capability you need to add octo/pricing to your Octo-Capabilities header.
This header can be added via the authentication in this swagger.

Examples/Changes to existing components On the Product component this will be added:

{
    // ...rest of Product object
    "defaultCurrency": "USD",
    "availableCurrencies": ["USD", "EUR", "GBP"],
    "pricingPer": "UNIT" // "UNIT" or "BOOKING"
}

In our case we only use pricingPer = "UNIT", so our info will be added to the Unit component.

{
    {
        // ...rest of the Unit object
        "pricingFrom": [
          {
            "original": 4500,
            "retail": 4500,
            "net": 3500,
            "currency": "USD",
            "currencyPrecision": 2,
            "includedTaxes": [
              {
                "name": "VAT 10",
                "retail": 800,
                "net": 500
              }
            ]
          },
          {
            "original": 4000,
            "retail": 4000,
            "net": 3000,
            "currency": "GBP",
            "currencyPrecision": 2,
            "includedTaxes": [
              {
                "name": "VAT 10",
                "retail": 700,
                "net": 400
              }
            ]
          }
          // ...etc...
        ]
      }
}

Will be added to the availability calendar component like this:

{
    // ...standard availability stuff...
    "unitPricingFrom": [
      {
        "unitId": "unit_adult123",
        "original": 4500,
        "retail": 4500,
        "net": 3500,
        "currency": "USD",
        "currencyPrecision": 2,
        "includedTaxes": [
          {
            "name": "VAT 10",
            "retail": 700,
            "net": 400
          }
        ]
      },
      {
        "unitId": "unit_child321",
        "original": 4200,
        "retail": 4200,
        "net": 3200,
        "currency": "USD",
        "currencyPrecision": 2,
        "includedTaxes": [
          {
            "name": "VAT 10",
            "retail": 800,
            "net": 500
          }
        ]
      }
    ]
  }

If you pass the units to the request then we will give the total pricing for the selection under the pricingFrom field

[
    {
      "localDate": "2020-07-01",
      "status": "AVAILABLE",
      "capacity": 24,
      "openingHours": [],
      "unitPricingFrom": [
        ...Like exaple above...
      ],
      "pricingFrom": {
        "original": 9985,
        "retail": 9985,
        "net": 7488,
        "currency": "USD",
        "currencyPrecision": 2,
        "includedTaxes": [
          {
            "name": "VAT 10",
            "retail": 800,
            "net": 500
          }
        ]
      }
    }
  ]

Will be added to the availability check component like this, (the field name is now without the From suffix) :

{
    "
    ...standard availability stuff.. 
    "unitPricing": [
      {
        "unitId": "unit_adult123",
        "original": 4500,
        "retail": 4500,
        "net": 3500,
        "currency": "USD",
        "currencyPrecision": 2,
        "includedTaxes": [
          {
            "name": "VAT 10",
            "retail": 700,
            "net": 400
          }
        ]
      },
      {
        "unitId": "unit_child321",
        "original": 4200,
        "retail": 4200,
        "net": 3200,
        "currency": "USD",
        "currencyPrecision": 2,
        "includedTaxes": [
          {
            "name": "VAT 10",
            "retail": 800,
            "net": 500
          }
        ]
      }
    ]
  }

If you pass the units to the request then we will give the total pricing for the selection under the pricingFrom field (the field name is now without the From suffix):

[
    {
      "localDate": "2020-07-01",
      "status": "AVAILABLE",
      "capacity": 24,
      "openingHours": [],
      "unitPricing": [
        ...Like exaple above...
      ],
      "pricing": {
        "original": 9985,
        "retail": 9985,
        "net": 7488,
        "currency": "USD",
        "currencyPrecision": 2,
        "includedTaxes": [
          {
            "name": "VAT 10",
            "retail": 800,
            "net": 500
          }
        ]
      }
    }
  ]

Will be added to the booking component like this, (the field name is now without the From suffix):

"pricing": {
    "original": 8800,
    "retail": 8800,
    "net": 5500,
    "currency": "EUR",
    "currencyPrecision": 2,
    "includedTaxes": [
      {
        "name": "VAT 10",
        "retail": 800,
        "net": 500
      }
    ]
  }

2. Octo/resources

This extra capability does not need an extra header, as it is automatically added when a channel is seated. If a channel is seated, the bestAvaialable seats are chosen automatically and the resource alloction is returned in the response. 

A small list of terms that might need clarification:

  • resource object => Corresponds with a Tickoweb seating category

  • paxCount => The amouny of seats you want to allocate.

  • SeatIds => The unique id’s of the selected seats.



The resource allocation will be added to a booking component like this:

"resourceAllocations": [
        {
            "resourceGroupId": "e58c9cec-1683-4d41-a9b6-7acf4276ab96",
            "resourceGroup": {
                "id": "57554de6-7edc-4602-b64d-c01211524a39",
                "title": "Hall, Country",
                "split": false 
            },
            "resourceId": 2,
            "resource": {
                "id": 2,
                "title": "Balcon",
                "seating": true,
                "seats": [
                    {
                        "id": "D2-3-1",
                        "title": "D2-3-1",
                        "column": "1",
                        "row": "3" 
                    },
                    {
                        "id": "D2-3-2",
                        "title": "D2-3-2",
                        "column": "2",
                        "row": "3" 
                    }
                ] 
            },
            "paxCount": 2,
            "seatIds": [
                "D2-3-1",
                "D2-3-2"
            ],
            "seats": [
                {
                    "id": "D2-3-1",
                    "title": "D2-3-1",
                    "column": "1",
                    "row": "3" 
                },
                {
                    "id": "D2-3-2",
                    "title": "D2-3-2",
                    "column": "2",
                    "row": "3" 
                }
            ] 
        } 
    ]