openapi: 3.0.1
info:
  title: Service Engine APIs for Products
  description: |-
    Service Engine APIs for HTM products. These are NOT the CRUD APIs to access raw data in the database.
    To be used by touchpoints to get information about HTM products they are allowed to see and/or sell.
  version: "1.0"
servers:
  - url: https://api.integratielaag.nl/abt/abtserviceengine/1.0
tags:
  - name: ServiceEngine Products
    description: |-
      To be used by touchpoints to get information about HTM products they are allowed to see and/or sell.
paths:
  /products:
    get:
      tags:
        - ServiceEngine Products
      summary: Get a list of all HTM products that a touchpoint is allowed to see and/or sell
      description: |-
        Get a list of all HTM products that refers to a given parentProductId (or without parent, if not specified), 
        and that the calling touchpoint is allowed to see and/or sell. \
        Essentially, this means that only products that have active sellingPeriods for touchpoints within the same 
        retailer as the calling touchpoint are returned. \
        Only a few details are returned per product - use the `GET /products/{productId}` endpoint
        to get more details. \
        Nb: touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2.
      parameters:
        - name: parentProductId
          in: query
          required: false
          description: |-
            Only return products that refer to the given parentProductId. \
            Returns parent-products (i.e. products with parentProductId = null) if left empty.
          schema:
            type: integer
            example: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductPayloadListResponse"
              examples:
                No products / Empty list:
                  summary: No products / Empty list
                  description: No products
                  value: { "Entries": [] }
                List containing one product with many null attributes:
                  summary: List containing one product with many null attributes
                  description: |-
                    Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \
                    **Empty lists/arrays show up as "[]", not as null!**
                  value:
                    {
                      "Entries":
                        [
                          {
                            "productId": 99,
                            "productName": null,
                            "productDescription": null,
                            "productCategory": null,
                            "tokenTypes": [],
                            "sellableTouchpointIds": [],
                            "amountInclTax": null,
                            "imageReference": null,
                            "productPageUrl": null,
                            "_links":
                              {
                                "get_details":
                                  {
                                    "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/99",
                                    "method": "GET",
                                  },
                              },
                          },
                        ],
                    }
                List containing one product with 4 currently active SellingPeriods (called by touchpointId 1):
                  summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1)
                  description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned
                  value:
                    {
                      "Entries":
                        [
                          {
                            "productId": 2,
                            "productName": "HTM dagkaart",
                            "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
                            "productCategory":
                              {
                                "productCategoryId": 6,
                                "isTravelProduct": false,
                                "name": "Barcode",
                              },
                            "tokenTypes": [],
                            "sellableTouchpointIds": [1, 2],
                            "amountInclTax": 300,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
                            "_links":
                              {
                                "get_details":
                                  {
                                    "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/2",
                                    "method": "GET",
                                  },
                              },
                          },
                        ],
                    }
                List containing one product with 4 currently active SellingPeriods (called by touchpointId 3):
                  summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3)
                  description: Only two sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - the price for touchpointId 3 is returned
                  value:
                    {
                      "Entries":
                        [
                          {
                            "productId": 2,
                            "productName": "HTM dagkaart",
                            "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
                            "productCategory":
                              {
                                "productCategoryId": 6,
                                "isTravelProduct": false,
                                "name": "Barcode",
                              },
                            "tokenTypes": [],
                            "sellableTouchpointIds": [3, 4],
                            "amountInclTax": 300,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
                            "_links":
                              {
                                "get_details":
                                  {
                                    "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/2",
                                    "method": "GET",
                                  },
                              },
                          },
                        ],
                    }
                List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4):
                  summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4)
                  description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product.
                  value:
                    {
                      "Entries":
                        [
                          {
                            "productId": 49,
                            "productName": "HTM Regio Vrij",
                            "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
                            "productCategory":
                              {
                                "productCategoryId": 3,
                                "isTravelProduct": true,
                                "name": "Afgekocht reisrecht",
                              },
                            "tokenTypes": [],
                            "sellableTouchpointIds": [3],
                            "amountInclTax": null,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
                            "_links":
                              {
                                "get_details":
                                  {
                                    "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/49",
                                    "method": "GET",
                                  },
                              },
                          },
                        ],
                    }
                List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4):
                  summary: List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4)
                  description: Product is returned
                  value:
                    {
                      "Entries":
                        [
                          {
                            "productId": 126,
                            "productName": "HTM-30001",
                            "productDescription": "Reis met 20% korting op je betaalpas bij HTM.",
                            "productCategory":
                              {
                                "productCategoryId": 1,
                                "isTravelProduct": true,
                                "name": "Kortingsabonnement",
                              },
                            "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                            "sellableTouchpointIds": [3, 4],
                            "amountInclTax": 300,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
                            "_links":
                              {
                                "get_details":
                                  {
                                    "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/126",
                                    "method": "GET",
                                  },
                              },
                          },
                        ],
                    }
                List containing multiple products (called by touchpointId 3):
                  summary: List containing multiple products (called by touchpointId 3)
                  description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned
                  value:
                    {
                      "Entries":
                        [
                          {
                            "productId": 2,
                            "productName": "HTM dagkaart",
                            "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
                            "productCategory":
                              {
                                "productCategoryId": 6,
                                "isTravelProduct": false,
                                "name": "Barcode",
                              },
                            "tokenTypes": [],
                            "sellableTouchpointIds": [3, 4],
                            "amountInclTax": 300,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
                            "_links":
                              {
                                "get_details":
                                  {
                                    "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/2",
                                    "method": "GET",
                                  },
                              },
                          },
                          {
                            "productId": 4,
                            "productName": "HTM 40% korting",
                            "productDescription": "Reis een maand lang met 40% korting!",
                            "productCategory":
                              {
                                "productCategoryId": 1,
                                "isTravelProduct": true,
                                "name": "Kortingsabonnement",
                              },
                            "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                            "sellableTouchpointIds": [3, 4],
                            "amountInclTax": 800,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
                            "_links":
                              {
                                "get_details":
                                  {
                                    "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/4",
                                    "method": "GET",
                                  },
                              },
                          },
                        ],
                    }
  /products/{productId}:
    get:
      tags:
        - ServiceEngine Products
      summary: Get more details for a single HTM product (including all child products), specified by the productId
      description: |-
        Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \
        Only information that is allowed to be seen by the calling touchpoint is returned - i.e. only currently
        active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices 
        for other touchpoints are thus filtered out. **Empty lists/arrays show up as "[]", not as null!**

        The response contains a product tree, including all child products (`productVariants`) of the given 
        productId that the touchpoint is allowed to see and/or sell.

        Touchpoints can only retrieve details for products that they are allowed to see and/or sell at the time of the request 
        (i.e. the product is returned in the products list response).
        Thus, productVariants that are not available to the calling touchpoint are not returned in the response.

        When no product exists for the given productId, a 404 Error response is returned.
      parameters:
        - name: productId
          in: path
          required: true
          style: simple
          description: Id of the product to get details for
          schema:
            type: integer
            example: 1
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProductPayloadResponse"
              examples:
                90% Discount F&F pilot product (called by touchpointId 3):
                  summary: 90% Discount F&F pilot product (called by touchpointId 3)
                  description: |-
                    All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\
                    Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned.

                    This product has no child products, so its `productVariants` array is empty.
                  value:
                    {
                      "productId": 24,
                      "parentProductId": null,
                      "fikoArticleNumber": "1234",
                      "gboPackageTemplateId": "30901",
                      "tapConnectProductCode": null,
                      "productName": "HTM 90% Korting",
                      "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!",
                      "validityPeriod":
                        {
                          "validityPeriodId": 144,
                          "fromInclusive": "2023-12-31T23:00:00.000+00:00",
                          "toInclusive": "2028-11-25T04:00:00.000+00:00",
                        },
                      "productTranslations":
                        [
                          {
                            "language": "en",
                            "name": "HTM 90% Discount",
                            "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!",
                          },
                        ],
                      "productOwner":
                        {
                          "productOwnerId": 17,
                          "name": "Corneel Verstoep",
                          "organization": "HTM",
                        },
                      "marketSegments":
                        [{ "marketSegmentId": 1, "name": "B2C" }],
                      "allowedGboAgeProfiles": [],
                      "customerSegments": [],
                      "productCategory":
                        {
                          "productCategoryId": 1,
                          "isTravelProduct": true,
                          "name": "Kortingsabonnement",
                        },
                      "requiredCustomerLevel":
                        { "requiredCustomerLevelId": 1, "name": "guest" },
                      "requiredProducts": [],
                      "incompatibleProducts": [],
                      "mandatoryCustomerDataItems": [],
                      "requiredGboPersonalAttributes": [],
                      "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                      "paymentMoment":
                        { "paymentMomentId": 1, "name": "prepaid" },
                      "serviceOptions": [],
                      "validityDuration": "P7D",
                      "maxStartInFutureDuration": "P6W",
                      "isRenewable": false,
                      "sendInvoice": false,
                      "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                      "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-90-korting",
                      "termsUrl": "https://web.acc.cloud.htm.nl/media/hkfak1dj/pv-pilotproduct.pdf",
                      "isSellableAtHtm": true,
                      "needsSolvencyCheckConsumer": false,
                      "needsSolvencyCheckBusiness": false,
                      "sellingPeriods":
                        [
                          {
                            "sellingPeriodId": 78,
                            "fromInclusive": "2024-09-30T23:00:00.000+00:00",
                            "toInclusive": "2028-11-17T23:00:00.000+00:00",
                            "salesTouchpoint":
                              {
                                "salesTouchpointId": 3,
                                "name": "Website (Perplex)",
                                "isActive": true,
                                "retailer":
                                  {
                                    "retailerId": 1001,
                                    "name": "HTM externe touchpoints",
                                    "street": "Koningin Julianaplein",
                                    "number": "10",
                                    "numberAddition": null,
                                    "postalCode": "2595 AA",
                                    "city": "Den Haag",
                                    "country": "Nederland",
                                    "emailAddress": "info@htm.nl",
                                    "phoneNumber": "070 374 9002",
                                    "taxId": "572309345923",
                                    "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                  },
                              },
                            "forbiddenPaymentMethods": [],
                            "sellingPrices":
                              [
                                {
                                  "sellingPriceId": 78,
                                  "amountExclTax": 92,
                                  "amountInclTax": 100,
                                  "fromInclusive": "2024-09-30T23:00:00.000+00:00",
                                  "toInclusive": "2028-11-17T23:00:00.000+00:00",
                                  "internalPrice": 0.0000,
                                  "taxCode": "V09",
                                  "taxPercentage": 9.0000,
                                },
                              ],
                          },
                        ],
                      "purchasePrices": [],
                      "productVariants": [],
                    }
                20% Discount product (called by touchpointId 4):
                  summary: 20% Discount product (called by touchpointId 4)
                  description: |-
                    All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\
                    Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned.

                    This product has two `productVariants`: a single month variant and a subscription variant.
                  value:
                    {
                      "productId": 126,
                      "parentProductId": null,
                      "fikoArticleNumber": "1234",
                      "gboPackageTemplateId": "30001",
                      "tapConnectProductCode": null,
                      "productName": "HTM 20% Korting",
                      "productDescription": "Reis met 20% korting op je betaalpas bij HTM.",
                      "validityPeriod":
                        {
                          "validityPeriodId": 236,
                          "fromInclusive": "2025-01-19T23:00:00.000+00:00",
                          "toInclusive": "2028-11-25T04:00:00.000+00:00",
                        },
                      "productTranslations":
                        [
                          {
                            "language": "en",
                            "name": "HTM 20% Discount",
                            "description": "Travel with 20% discount using your bank card with HTM.",
                          },
                        ],
                      "productOwner":
                        {
                          "productOwnerId": 17,
                          "name": "Corneel Verstoep",
                          "organization": "HTM",
                        },
                      "marketSegments":
                        [{ "marketSegmentId": 1, "name": "B2C" }],
                      "customerSegments": [],
                      "allowedGboAgeProfiles": [],
                      "productCategory":
                        {
                          "productCategoryId": 1,
                          "isTravelProduct": true,
                          "name": "Kortingsabonnement",
                        },
                      "requiredCustomerLevel":
                        { "requiredCustomerLevelId": 1, "name": "guest" },
                      "requiredProducts": [],
                      "incompatibleProducts": [],
                      "mandatoryCustomerDataItems":
                        [
                          {
                            "mandatoryCustomerDataItemId": 4,
                            "customerDataItem": "emailAddress",
                          },
                          {
                            "mandatoryCustomerDataItemId": 7,
                            "customerDataItem": "ovPayToken",
                          },
                        ],
                      "requiredGboPersonalAttributes": [],
                      "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                      "paymentMoment":
                        { "paymentMomentId": 1, "name": "prepaid" },
                      "serviceOptions": [],
                      "validityDuration": "P1M",
                      "maxStartInFutureDuration": "P6W",
                      "isRenewable": null,
                      "sendInvoice": null,
                      "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                      "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
                      "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
                      "isSellableAtHtm": true,
                      "needsSolvencyCheckConsumer": false,
                      "needsSolvencyCheckBusiness": false,
                      "sellingPeriods":
                        [
                          {
                            "sellingPeriodId": 172,
                            "fromInclusive": "2025-01-19T23:00:00.000+00:00",
                            "toInclusive": "2028-11-17T23:00:00.000+00:00",
                            "salesTouchpoint":
                              {
                                "salesTouchpointId": 4,
                                "name": "App (Infoplaza)",
                                "isActive": true,
                                "retailer":
                                  {
                                    "retailerId": 1001,
                                    "name": "HTM externe touchpoints",
                                    "street": "Koningin Julianaplein",
                                    "number": "10",
                                    "numberAddition": null,
                                    "postalCode": "2595 AA",
                                    "city": "Den Haag",
                                    "country": "Nederland",
                                    "emailAddress": "info@htm.nl",
                                    "phoneNumber": "070 374 9002",
                                    "taxId": "572309345923",
                                    "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                  },
                              },
                            "forbiddenPaymentMethods": [],
                            "sellingPrices": [],
                          },
                        ],
                      "purchasePrices": [],
                      "productVariants":
                        [
                          {
                            "productId": 119,
                            "parentProductId": 126,
                            "fikoArticleNumber": "1234",
                            "gboPackageTemplateId": "30001",
                            "tapConnectProductCode": null,
                            "productName": "HTM 20% Korting (losse maand)",
                            "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.",
                            "validityPeriod":
                              {
                                "validityPeriodId": 229,
                                "fromInclusive": "2025-01-19T23:00:00.000+00:00",
                                "toInclusive": "2028-11-25T04:00:00.000+00:00",
                              },
                            "productTranslations":
                              [
                                {
                                  "language": "en",
                                  "name": "HTM 20% Discount (single month)",
                                  "description": "Travel with 20% discount for a month using your bank card with HTM.",
                                },
                              ],
                            "productOwner":
                              {
                                "productOwnerId": 17,
                                "name": "Corneel Verstoep",
                                "organization": "HTM",
                              },
                            "marketSegments":
                              [{ "marketSegmentId": 1, "name": "B2C" }],
                            "customerSegments": [],
                            "allowedGboAgeProfiles": [],
                            "productCategory":
                              {
                                "productCategoryId": 1,
                                "isTravelProduct": true,
                                "name": "Kortingsabonnement",
                              },
                            "requiredCustomerLevel":
                              { "requiredCustomerLevelId": 1, "name": "guest" },
                            "requiredProducts": [],
                            "incompatibleProducts": [],
                            "mandatoryCustomerDataItems":
                              [
                                {
                                  "mandatoryCustomerDataItemId": 4,
                                  "customerDataItem": "emailAddress",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 7,
                                  "customerDataItem": "ovPayToken",
                                },
                              ],
                            "requiredGboPersonalAttributes": [],
                            "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                            "paymentMoment":
                              { "paymentMomentId": 1, "name": "prepaid" },
                            "serviceOptions": [],
                            "validityDuration": "P1M",
                            "maxStartInFutureDuration": "P6W",
                            "isRenewable": false,
                            "sendInvoice": false,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
                            "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
                            "isSellableAtHtm": true,
                            "needsSolvencyCheckConsumer": false,
                            "needsSolvencyCheckBusiness": false,
                            "sellingPeriods":
                              [
                                {
                                  "sellingPeriodId": 160,
                                  "fromInclusive": "2025-01-19T23:00:00.000+00:00",
                                  "toInclusive": "2028-11-17T23:00:00.000+00:00",
                                  "salesTouchpoint":
                                    {
                                      "salesTouchpointId": 4,
                                      "name": "App (Infoplaza)",
                                      "isActive": true,
                                      "retailer":
                                        {
                                          "retailerId": 1001,
                                          "name": "HTM externe touchpoints",
                                          "street": "Koningin Julianaplein",
                                          "number": "10",
                                          "numberAddition": null,
                                          "postalCode": "2595 AA",
                                          "city": "Den Haag",
                                          "country": "Nederland",
                                          "emailAddress": "info@htm.nl",
                                          "phoneNumber": "070 374 9002",
                                          "taxId": "572309345923",
                                          "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                        },
                                    },
                                  "forbiddenPaymentMethods": [],
                                  "sellingPrices":
                                    [
                                      {
                                        "sellingPriceId": 149,
                                        "amountExclTax": 276,
                                        "amountInclTax": 300,
                                        "fromInclusive": "2025-01-19T23:00:00.000+00:00",
                                        "toInclusive": "2028-11-17T23:00:00.000+00:00",
                                        "internalPrice": 0.0000,
                                        "taxCode": "V09",
                                        "taxPercentage": 9.0000,
                                      },
                                    ],
                                },
                              ],
                            "purchasePrices": [],
                            "productVariants": [],
                          },
                          {
                            "productId": 120,
                            "parentProductId": 126,
                            "fikoArticleNumber": "1234",
                            "gboPackageTemplateId": "30001",
                            "tapConnectProductCode": null,
                            "productName": "HTM 20% Korting (doorlopend abonnement)",
                            "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.",
                            "validityPeriod":
                              {
                                "validityPeriodId": 230,
                                "fromInclusive": "2025-01-19T23:00:00.000+00:00",
                                "toInclusive": "2028-11-25T04:00:00.000+00:00",
                              },
                            "productTranslations":
                              [
                                {
                                  "language": "en",
                                  "name": "HTM 20% Discount (subscription)",
                                  "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM.",
                                },
                              ],
                            "productOwner":
                              {
                                "productOwnerId": 17,
                                "name": "Corneel Verstoep",
                                "organization": "HTM",
                              },
                            "marketSegments":
                              [{ "marketSegmentId": 1, "name": "B2C" }],
                            "customerSegments": [],
                            "allowedGboAgeProfiles": [],
                            "productCategory":
                              {
                                "productCategoryId": 1,
                                "isTravelProduct": true,
                                "name": "Kortingsabonnement",
                              },
                            "requiredCustomerLevel":
                              { "requiredCustomerLevelId": 1, "name": "guest" },
                            "requiredProducts": [],
                            "incompatibleProducts": [],
                            "mandatoryCustomerDataItems":
                              [
                                {
                                  "mandatoryCustomerDataItemId": 4,
                                  "customerDataItem": "emailAddress",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 7,
                                  "customerDataItem": "ovPayToken",
                                },
                              ],
                            "requiredGboPersonalAttributes": [],
                            "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                            "paymentMoment":
                              { "paymentMomentId": 1, "name": "prepaid" },
                            "serviceOptions": [],
                            "validityDuration": "P1M",
                            "maxStartInFutureDuration": "P6W",
                            "isRenewable": true,
                            "sendInvoice": true,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
                            "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
                            "isSellableAtHtm": true,
                            "needsSolvencyCheckConsumer": false,
                            "needsSolvencyCheckBusiness": false,
                            "sellingPeriods":
                              [
                                {
                                  "sellingPeriodId": 159,
                                  "fromInclusive": "2025-01-19T23:00:00.000+00:00",
                                  "toInclusive": "2028-11-17T23:00:00.000+00:00",
                                  "salesTouchpoint":
                                    {
                                      "salesTouchpointId": 4,
                                      "name": "App (Infoplaza)",
                                      "isActive": true,
                                      "retailer":
                                        {
                                          "retailerId": 1001,
                                          "name": "HTM externe touchpoints",
                                          "street": "Koningin Julianaplein",
                                          "number": "10",
                                          "numberAddition": null,
                                          "postalCode": "2595 AA",
                                          "city": "Den Haag",
                                          "country": "Nederland",
                                          "emailAddress": "info@htm.nl",
                                          "phoneNumber": "070 374 9002",
                                          "taxId": "572309345923",
                                          "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                        },
                                    },
                                  "forbiddenPaymentMethods": [],
                                  "sellingPrices":
                                    [
                                      {
                                        "sellingPriceId": 148,
                                        "amountExclTax": 276,
                                        "amountInclTax": 300,
                                        "fromInclusive": "2025-01-19T23:00:00.000+00:00",
                                        "toInclusive": "2028-11-17T23:00:00.000+00:00",
                                        "internalPrice": 0.0000,
                                        "taxCode": "V09",
                                        "taxPercentage": 9.0000,
                                      },
                                    ],
                                },
                              ],
                            "purchasePrices": [],
                            "productVariants": [],
                          },
                        ],
                    }
                Regio Vrij product and (part of) its productVariants (called by touchpointId 3):
                  summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3)
                  description: |-
                    All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product 
                    and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example.

                    The full depth of the tree is included in the example for the HL62 Reduced Fare Variant.
                  value:
                    {
                      "productId": 49,
                      "parentProductId": null,
                      "fikoArticleNumber": "1234",
                      "gboPackageTemplateId": null,
                      "tapConnectProductCode": null,
                      "productName": "HTM Regio Vrij",
                      "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
                      "validityPeriod":
                        {
                          "validityPeriodId": 161,
                          "fromInclusive": "2024-11-30T23:00:00.000+00:00",
                          "toInclusive": "2099-12-30T23:00:00.000+00:00",
                        },
                      "productTranslations":
                        [
                          {
                            "language": "en",
                            "name": "HTM Regio Free",
                            "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region.",
                          },
                        ],
                      "productOwner":
                        {
                          "productOwnerId": 19,
                          "name": "MRDH",
                          "organization": "MRDH",
                        },
                      "marketSegments": [],
                      "customerSegments": [],
                      "allowedGboAgeProfiles":
                        [
                          {
                            "gboAgeProfileId": 1,
                            "name": "Baby/peuter (0 t/m 3 jaar)",
                            "ageFromInclusive": 0,
                            "ageToInclusive": 3,
                          },
                          {
                            "gboAgeProfileId": 2,
                            "name": "Kind (4 t/m 11 jaar)",
                            "ageFromInclusive": 4,
                            "ageToInclusive": 11,
                          },
                          {
                            "gboAgeProfileId": 3,
                            "name": "Jongere (12 t/m 18 jaar)",
                            "ageFromInclusive": 12,
                            "ageToInclusive": 18,
                          },
                          {
                            "gboAgeProfileId": 4,
                            "name": "Volwassene (19 t/m 64 jaar)",
                            "ageFromInclusive": 19,
                            "ageToInclusive": 64,
                          },
                          {
                            "gboAgeProfileId": 5,
                            "name": "Oudere (65 jaar of ouder)",
                            "ageFromInclusive": 65,
                            "ageToInclusive": 999,
                          },
                        ],
                      "productCategory":
                        {
                          "productCategoryId": 3,
                          "isTravelProduct": true,
                          "name": "Afgekocht reisrecht",
                        },
                      "requiredCustomerLevel":
                        { "requiredCustomerLevelId": 3, "name": "profile" },
                      "requiredProducts": [],
                      "incompatibleProducts": [],
                      "mandatoryCustomerDataItems":
                        [
                          {
                            "mandatoryCustomerDataItemId": 1,
                            "customerDataItem": "birthname",
                          },
                          {
                            "mandatoryCustomerDataItemId": 2,
                            "customerDataItem": "surname",
                          },
                          {
                            "mandatoryCustomerDataItemId": 3,
                            "customerDataItem": "dateOfBirth",
                          },
                          {
                            "mandatoryCustomerDataItemId": 4,
                            "customerDataItem": "emailAddress",
                          },
                          {
                            "mandatoryCustomerDataItemId": 7,
                            "customerDataItem": "ovPayToken",
                          },
                          {
                            "mandatoryCustomerDataItemId": 8,
                            "customerDataItem": "padBirthDate",
                          },
                        ],
                      "requiredGboPersonalAttributes":
                        [
                          {
                            "requiredGboPersonalAttributeId": 1,
                            "name": "NAME",
                          },
                          {
                            "requiredGboPersonalAttributeId": 2,
                            "name": "BIRTHDATE",
                          },
                          {
                            "requiredGboPersonalAttributeId": 3,
                            "name": "PHOTO",
                          },
                        ],
                      "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                      "paymentMoment":
                        { "paymentMomentId": 1, "name": "prepaid" },
                      "serviceOptions": [],
                      "validityDuration": "P1M",
                      "maxStartInFutureDuration": "P6W",
                      "isRenewable": null,
                      "sendInvoice": null,
                      "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                      "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
                      "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
                      "isSellableAtHtm": true,
                      "needsSolvencyCheckConsumer": false,
                      "needsSolvencyCheckBusiness": false,
                      "sellingPeriods":
                        [
                          {
                            "sellingPeriodId": 99,
                            "fromInclusive": "2024-11-30T23:00:00.000+00:00",
                            "toInclusive": "2099-12-30T23:00:00.000+00:00",
                            "salesTouchpoint":
                              {
                                "salesTouchpointId": 3,
                                "name": "Website (Perplex)",
                                "isActive": true,
                                "retailer":
                                  {
                                    "retailerId": 1001,
                                    "name": "HTM externe touchpoints",
                                    "street": "Koningin Julianaplein",
                                    "number": "10",
                                    "numberAddition": null,
                                    "postalCode": "2595 AA",
                                    "city": "Den Haag",
                                    "country": "Nederland",
                                    "emailAddress": "info@htm.nl",
                                    "phoneNumber": "070 374 9002",
                                    "taxId": "572309345923",
                                    "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                  },
                              },
                            "forbiddenPaymentMethods": [],
                            "sellingPrices": [],
                          },
                        ],
                      "purchasePrices": [],
                      "productVariants":
                        [
                          {
                            "productId": 109,
                            "parentProductId": 49,
                            "fikoArticleNumber": "1234",
                            "gboPackageTemplateId": "33615",
                            "tapConnectProductCode": null,
                            "productName": "HTM Regio Vrij - HL62",
                            "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
                            "validityPeriod":
                              {
                                "validityPeriodId": 219,
                                "fromInclusive": "2024-09-30T23:00:00.000+00:00",
                                "toInclusive": "2099-12-30T23:00:00.000+00:00",
                              },
                            "productTranslations":
                              [
                                {
                                  "language": "en",
                                  "name": "HTM Regio Free - HL62",
                                  "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
                                },
                              ],
                            "productOwner":
                              {
                                "productOwnerId": 19,
                                "name": "MRDH",
                                "organization": "MRDH",
                              },
                            "marketSegments": [],
                            "customerSegments": [],
                            "allowedGboAgeProfiles":
                              [
                                {
                                  "gboAgeProfileId": 1,
                                  "name": "Baby/peuter (0 t/m 3 jaar)",
                                  "ageFromInclusive": 0,
                                  "ageToInclusive": 3,
                                },
                                {
                                  "gboAgeProfileId": 2,
                                  "name": "Kind (4 t/m 11 jaar)",
                                  "ageFromInclusive": 4,
                                  "ageToInclusive": 11,
                                },
                                {
                                  "gboAgeProfileId": 3,
                                  "name": "Jongere (12 t/m 18 jaar)",
                                  "ageFromInclusive": 12,
                                  "ageToInclusive": 18,
                                },
                                {
                                  "gboAgeProfileId": 4,
                                  "name": "Volwassene (19 t/m 64 jaar)",
                                  "ageFromInclusive": 19,
                                  "ageToInclusive": 64,
                                },
                                {
                                  "gboAgeProfileId": 5,
                                  "name": "Oudere (65 jaar of ouder)",
                                  "ageFromInclusive": 65,
                                  "ageToInclusive": 999,
                                },
                              ],
                            "productCategory":
                              {
                                "productCategoryId": 3,
                                "isTravelProduct": true,
                                "name": "Afgekocht reisrecht",
                              },
                            "requiredCustomerLevel":
                              {
                                "requiredCustomerLevelId": 3,
                                "name": "profile",
                              },
                            "requiredProducts": [],
                            "incompatibleProducts": [],
                            "mandatoryCustomerDataItems":
                              [
                                {
                                  "mandatoryCustomerDataItemId": 1,
                                  "customerDataItem": "birthname",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 2,
                                  "customerDataItem": "surname",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 3,
                                  "customerDataItem": "dateOfBirth",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 4,
                                  "customerDataItem": "emailAddress",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 7,
                                  "customerDataItem": "ovPayToken",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 8,
                                  "customerDataItem": "padBirthDate",
                                },
                              ],
                            "requiredGboPersonalAttributes":
                              [
                                {
                                  "requiredGboPersonalAttributeId": 1,
                                  "name": "NAME",
                                },
                                {
                                  "requiredGboPersonalAttributeId": 2,
                                  "name": "BIRTHDATE",
                                },
                                {
                                  "requiredGboPersonalAttributeId": 3,
                                  "name": "PHOTO",
                                },
                              ],
                            "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                            "paymentMoment":
                              { "paymentMomentId": 1, "name": "prepaid" },
                            "serviceOptions": [],
                            "validityDuration": "P1M",
                            "maxStartInFutureDuration": "P6W",
                            "isRenewable": null,
                            "sendInvoice": null,
                            "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
                            "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
                            "isSellableAtHtm": true,
                            "needsSolvencyCheckConsumer": false,
                            "needsSolvencyCheckBusiness": false,
                            "sellingPeriods":
                              [
                                {
                                  "sellingPeriodId": 143,
                                  "fromInclusive": "2024-10-30T23:00:00.000+00:00",
                                  "toInclusive": "2029-12-30T23:00:00.000+00:00",
                                  "salesTouchpoint":
                                    {
                                      "salesTouchpointId": 3,
                                      "name": "Website (Perplex)",
                                      "isActive": true,
                                      "retailer":
                                        {
                                          "retailerId": 1001,
                                          "name": "HTM externe touchpoints",
                                          "street": "Koningin Julianaplein",
                                          "number": "10",
                                          "numberAddition": null,
                                          "postalCode": "2595 AA",
                                          "city": "Den Haag",
                                          "country": "Nederland",
                                          "emailAddress": "info@htm.nl",
                                          "phoneNumber": "070 374 9002",
                                          "taxId": "572309345923",
                                          "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                        },
                                    },
                                  "forbiddenPaymentMethods": [],
                                  "sellingPrices": [],
                                },
                              ],
                            "purchasePrices": [],
                            "productVariants":
                              [
                                {
                                  "productId": 114,
                                  "parentProductId": 109,
                                  "fikoArticleNumber": "1234",
                                  "gboPackageTemplateId": "33615",
                                  "tapConnectProductCode": null,
                                  "productName": "HTM Regio Vrij - Voltarief - HL62",
                                  "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
                                  "validityPeriod":
                                    {
                                      "validityPeriodId": 224,
                                      "fromInclusive": "2024-09-30T23:00:00.000+00:00",
                                      "toInclusive": "2099-12-30T23:00:00.000+00:00",
                                    },
                                  "productTranslations":
                                    [
                                      {
                                        "language": "en",
                                        "name": "HTM Regio Free - Full Fare - HL62",
                                        "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
                                      },
                                    ],
                                  "productOwner":
                                    {
                                      "productOwnerId": 19,
                                      "name": "MRDH",
                                      "organization": "MRDH",
                                    },
                                  "marketSegments": [],
                                  "customerSegments": [],
                                  "allowedGboAgeProfiles":
                                    [
                                      {
                                        "gboAgeProfileId": 1,
                                        "name": "Baby/peuter (0 t/m 3 jaar)",
                                        "ageFromInclusive": 0,
                                        "ageToInclusive": 3,
                                      },
                                      {
                                        "gboAgeProfileId": 4,
                                        "name": "Volwassene (19 t/m 64 jaar)",
                                        "ageFromInclusive": 19,
                                        "ageToInclusive": 64,
                                      },
                                      {
                                        "gboAgeProfileId": 5,
                                        "name": "Oudere (65 jaar of ouder)",
                                        "ageFromInclusive": 65,
                                        "ageToInclusive": 999,
                                      },
                                    ],
                                  "productCategory":
                                    {
                                      "productCategoryId": 3,
                                      "isTravelProduct": true,
                                      "name": "Afgekocht reisrecht",
                                    },
                                  "requiredCustomerLevel":
                                    {
                                      "requiredCustomerLevelId": 3,
                                      "name": "profile",
                                    },
                                  "requiredProducts": [],
                                  "incompatibleProducts": [],
                                  "mandatoryCustomerDataItems":
                                    [
                                      {
                                        "mandatoryCustomerDataItemId": 1,
                                        "customerDataItem": "birthname",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 2,
                                        "customerDataItem": "surname",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 3,
                                        "customerDataItem": "dateOfBirth",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 4,
                                        "customerDataItem": "emailAddress",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 7,
                                        "customerDataItem": "ovPayToken",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 8,
                                        "customerDataItem": "padBirthDate",
                                      },
                                    ],
                                  "requiredGboPersonalAttributes":
                                    [
                                      {
                                        "requiredGboPersonalAttributeId": 1,
                                        "name": "NAME",
                                      },
                                      {
                                        "requiredGboPersonalAttributeId": 2,
                                        "name": "BIRTHDATE",
                                      },
                                      {
                                        "requiredGboPersonalAttributeId": 3,
                                        "name": "PHOTO",
                                      },
                                    ],
                                  "tokenTypes":
                                    [{ "tokenTypeId": 1, "name": "EMV" }],
                                  "paymentMoment":
                                    { "paymentMomentId": 1, "name": "prepaid" },
                                  "serviceOptions": [],
                                  "validityDuration": "P1M",
                                  "maxStartInFutureDuration": "P6W",
                                  "isRenewable": null,
                                  "sendInvoice": null,
                                  "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                  "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij",
                                  "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
                                  "isSellableAtHtm": true,
                                  "needsSolvencyCheckConsumer": false,
                                  "needsSolvencyCheckBusiness": false,
                                  "sellingPeriods":
                                    [
                                      {
                                        "sellingPeriodId": 148,
                                        "fromInclusive": "2024-10-30T23:00:00.000+00:00",
                                        "toInclusive": "2029-12-30T23:00:00.000+00:00",
                                        "salesTouchpoint":
                                          {
                                            "salesTouchpointId": 3,
                                            "name": "Website (Perplex)",
                                            "isActive": true,
                                            "retailer":
                                              {
                                                "retailerId": 1001,
                                                "name": "HTM externe touchpoints",
                                                "street": "Koningin Julianaplein",
                                                "number": "10",
                                                "numberAddition": null,
                                                "postalCode": "2595 AA",
                                                "city": "Den Haag",
                                                "country": "Nederland",
                                                "emailAddress": "info@htm.nl",
                                                "phoneNumber": "070 374 9002",
                                                "taxId": "572309345923",
                                                "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                              },
                                          },
                                        "forbiddenPaymentMethods": [],
                                        "sellingPrices":
                                          [
                                            {
                                              "sellingPriceId": 139,
                                              "amountExclTax": 5412,
                                              "amountInclTax": 5900,
                                              "fromInclusive": "2024-12-31T23:00:00.000+00:00",
                                              "toInclusive": "2025-12-31T23:00:00.000+00:00",
                                              "taxCode": "V09",
                                              "taxPercentage": 9.0000,
                                            },
                                          ],
                                      },
                                    ],
                                  "purchasePrices": [],
                                  "productVariants": [],
                                },
                                {
                                  "productId": 115,
                                  "parentProductId": 109,
                                  "fikoArticleNumber": "1234",
                                  "gboPackageTemplateId": "33615",
                                  "tapConnectProductCode": null,
                                  "productName": "HTM Regio Vrij - Reductietarief - HL62",
                                  "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
                                  "validityPeriod":
                                    {
                                      "validityPeriodId": 225,
                                      "fromInclusive": "2024-09-30T23:00:00.000+00:00",
                                      "toInclusive": "2099-12-30T23:00:00.000+00:00",
                                    },
                                  "productTranslations":
                                    [
                                      {
                                        "language": "en",
                                        "name": "HTM Regio Free - Reduced Fare - HL62",
                                        "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
                                      },
                                    ],
                                  "productOwner":
                                    {
                                      "productOwnerId": 19,
                                      "name": "MRDH",
                                      "organization": "MRDH",
                                    },
                                  "marketSegments": [],
                                  "customerSegments": [],
                                  "allowedGboAgeProfiles":
                                    [
                                      {
                                        "gboAgeProfileId": 2,
                                        "name": "Kind (4 t/m 11 jaar)",
                                        "ageFromInclusive": 4,
                                        "ageToInclusive": 11,
                                      },
                                      {
                                        "gboAgeProfileId": 3,
                                        "name": "Jongere (12 t/m 18 jaar)",
                                        "ageFromInclusive": 12,
                                        "ageToInclusive": 18,
                                      },
                                    ],
                                  "productCategory":
                                    {
                                      "productCategoryId": 3,
                                      "isTravelProduct": true,
                                      "name": "Afgekocht reisrecht",
                                    },
                                  "requiredCustomerLevel":
                                    {
                                      "requiredCustomerLevelId": 3,
                                      "name": "profile",
                                    },
                                  "requiredProducts": [],
                                  "incompatibleProducts": [],
                                  "mandatoryCustomerDataItems":
                                    [
                                      {
                                        "mandatoryCustomerDataItemId": 1,
                                        "customerDataItem": "birthname",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 2,
                                        "customerDataItem": "surname",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 3,
                                        "customerDataItem": "dateOfBirth",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 4,
                                        "customerDataItem": "emailAddress",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 7,
                                        "customerDataItem": "ovPayToken",
                                      },
                                      {
                                        "mandatoryCustomerDataItemId": 8,
                                        "customerDataItem": "padBirthDate",
                                      },
                                    ],
                                  "requiredGboPersonalAttributes":
                                    [
                                      {
                                        "requiredGboPersonalAttributeId": 1,
                                        "name": "NAME",
                                      },
                                      {
                                        "requiredGboPersonalAttributeId": 2,
                                        "name": "BIRTHDATE",
                                      },
                                      {
                                        "requiredGboPersonalAttributeId": 3,
                                        "name": "PHOTO",
                                      },
                                    ],
                                  "tokenTypes":
                                    [{ "tokenTypeId": 1, "name": "EMV" }],
                                  "paymentMoment":
                                    { "paymentMomentId": 1, "name": "prepaid" },
                                  "serviceOptions": [],
                                  "validityDuration": "P1M",
                                  "maxStartInFutureDuration": "P6W",
                                  "isRenewable": null,
                                  "sendInvoice": null,
                                  "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                  "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
                                  "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
                                  "isSellableAtHtm": true,
                                  "needsSolvencyCheckConsumer": false,
                                  "needsSolvencyCheckBusiness": false,
                                  "sellingPeriods":
                                    [
                                      {
                                        "sellingPeriodId": 149,
                                        "fromInclusive": "2024-10-30T23:00:00.000+00:00",
                                        "toInclusive": "2029-12-30T23:00:00.000+00:00",
                                        "salesTouchpoint":
                                          {
                                            "salesTouchpointId": 3,
                                            "name": "Website (Perplex)",
                                            "isActive": true,
                                            "retailer":
                                              {
                                                "retailerId": 1001,
                                                "name": "HTM externe touchpoints",
                                                "street": "Koningin Julianaplein",
                                                "number": "10",
                                                "numberAddition": null,
                                                "postalCode": "2595 AA",
                                                "city": "Den Haag",
                                                "country": "Nederland",
                                                "emailAddress": "info@htm.nl",
                                                "phoneNumber": "070 374 9002",
                                                "taxId": "572309345923",
                                                "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                              },
                                          },
                                        "forbiddenPaymentMethods": [],
                                        "sellingPrices":
                                          [
                                            {
                                              "sellingPriceId": 140,
                                              "amountExclTax": 8899,
                                              "amountInclTax": 9700,
                                              "fromInclusive": "2024-12-31T23:00:00.000+00:00",
                                              "toInclusive": "2025-12-31T23:00:00.000+00:00",
                                              "internalPrice": 0.0000,
                                              "taxCode": "V09",
                                              "taxPercentage": 9.0000,
                                            },
                                          ],
                                      },
                                    ],
                                  "purchasePrices": [],
                                  "productVariants":
                                    [
                                      {
                                        "productId": 116,
                                        "parentProductId": 115,
                                        "fikoArticleNumber": "1234",
                                        "gboPackageTemplateId": "33615",
                                        "tapConnectProductCode": null,
                                        "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62",
                                        "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
                                        "validityPeriod":
                                          {
                                            "validityPeriodId": 226,
                                            "fromInclusive": "2024-09-30T23:00:00.000+00:00",
                                            "toInclusive": "2099-12-30T23:00:00.000+00:00",
                                          },
                                        "productTranslations":
                                          [
                                            {
                                              "language": "en",
                                              "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62",
                                              "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
                                            },
                                          ],
                                        "productOwner":
                                          {
                                            "productOwnerId": 19,
                                            "name": "MRDH",
                                            "organization": "MRDH",
                                          },
                                        "marketSegments": [],
                                        "customerSegments": [],
                                        "allowedGboAgeProfiles":
                                          [
                                            {
                                              "gboAgeProfileId": 2,
                                              "name": "Kind (4 t/m 11 jaar)",
                                              "ageFromInclusive": 4,
                                              "ageToInclusive": 11,
                                            },
                                            {
                                              "gboAgeProfileId": 3,
                                              "name": "Jongere (12 t/m 18 jaar)",
                                              "ageFromInclusive": 12,
                                              "ageToInclusive": 18,
                                            },
                                          ],
                                        "productCategory":
                                          {
                                            "productCategoryId": 3,
                                            "isTravelProduct": true,
                                            "name": "Afgekocht reisrecht",
                                          },
                                        "requiredCustomerLevel":
                                          {
                                            "requiredCustomerLevelId": 3,
                                            "name": "profile",
                                          },
                                        "requiredProducts": [],
                                        "incompatibleProducts": [],
                                        "mandatoryCustomerDataItems":
                                          [
                                            {
                                              "mandatoryCustomerDataItemId": 1,
                                              "customerDataItem": "birthname",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 2,
                                              "customerDataItem": "surname",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 3,
                                              "customerDataItem": "dateOfBirth",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 4,
                                              "customerDataItem": "emailAddress",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 7,
                                              "customerDataItem": "ovPayToken",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 8,
                                              "customerDataItem": "padBirthDate",
                                            },
                                          ],
                                        "requiredGboPersonalAttributes":
                                          [
                                            {
                                              "requiredGboPersonalAttributeId": 1,
                                              "name": "NAME",
                                            },
                                            {
                                              "requiredGboPersonalAttributeId": 2,
                                              "name": "BIRTHDATE",
                                            },
                                            {
                                              "requiredGboPersonalAttributeId": 3,
                                              "name": "PHOTO",
                                            },
                                          ],
                                        "tokenTypes":
                                          [{ "tokenTypeId": 1, "name": "EMV" }],
                                        "paymentMoment":
                                          {
                                            "paymentMomentId": 1,
                                            "name": "prepaid",
                                          },
                                        "serviceOptions": [],
                                        "validityDuration": "P1M",
                                        "maxStartInFutureDuration": "P6W",
                                        "isRenewable": false,
                                        "sendInvoice": false,
                                        "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                        "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
                                        "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
                                        "isSellableAtHtm": true,
                                        "needsSolvencyCheckConsumer": false,
                                        "needsSolvencyCheckBusiness": false,
                                        "sellingPeriods":
                                          [
                                            {
                                              "sellingPeriodId": 150,
                                              "fromInclusive": "2024-10-30T23:00:00.000+00:00",
                                              "toInclusive": "2029-12-30T23:00:00.000+00:00",
                                              "salesTouchpoint":
                                                {
                                                  "salesTouchpointId": 3,
                                                  "name": "Website (Perplex)",
                                                  "isActive": true,
                                                  "retailer":
                                                    {
                                                      "retailerId": 1001,
                                                      "name": "HTM externe touchpoints",
                                                      "street": "Koningin Julianaplein",
                                                      "number": "10",
                                                      "numberAddition": null,
                                                      "postalCode": "2595 AA",
                                                      "city": "Den Haag",
                                                      "country": "Nederland",
                                                      "emailAddress": "info@htm.nl",
                                                      "phoneNumber": "070 374 9002",
                                                      "taxId": "572309345923",
                                                      "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                                    },
                                                },
                                              "forbiddenPaymentMethods": [],
                                              "sellingPrices":
                                                [
                                                  {
                                                    "sellingPriceId": 141,
                                                    "amountExclTax": 8899,
                                                    "amountInclTax": 9700,
                                                    "fromInclusive": "2024-12-31T23:00:00.000+00:00",
                                                    "toInclusive": "2025-12-31T23:00:00.000+00:00",
                                                    "internalPrice": 0.0000,
                                                    "taxCode": "V09",
                                                    "taxPercentage": 9.0000,
                                                  },
                                                ],
                                            },
                                          ],
                                        "purchasePrices": [],
                                        "productVariants": [],
                                      },
                                      {
                                        "productId": 117,
                                        "parentProductId": 115,
                                        "fikoArticleNumber": "1234",
                                        "gboPackageTemplateId": "33615",
                                        "tapConnectProductCode": null,
                                        "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62",
                                        "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
                                        "validityPeriod":
                                          {
                                            "validityPeriodId": 227,
                                            "fromInclusive": "2024-09-30T23:00:00.000+00:00",
                                            "toInclusive": "2099-12-30T23:00:00.000+00:00",
                                          },
                                        "productTranslations":
                                          [
                                            {
                                              "language": "en",
                                              "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62",
                                              "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
                                            },
                                          ],
                                        "productOwner":
                                          {
                                            "productOwnerId": 19,
                                            "name": "MRDH",
                                            "organization": "MRDH",
                                          },
                                        "marketSegments": [],
                                        "customerSegments": [],
                                        "allowedGboAgeProfiles":
                                          [
                                            {
                                              "gboAgeProfileId": 2,
                                              "name": "Kind (4 t/m 11 jaar)",
                                              "ageFromInclusive": 4,
                                              "ageToInclusive": 11,
                                            },
                                            {
                                              "gboAgeProfileId": 3,
                                              "name": "Jongere (12 t/m 18 jaar)",
                                              "ageFromInclusive": 12,
                                              "ageToInclusive": 18,
                                            },
                                          ],
                                        "productCategory":
                                          {
                                            "productCategoryId": 3,
                                            "isTravelProduct": true,
                                            "name": "Afgekocht reisrecht",
                                          },
                                        "requiredCustomerLevel":
                                          {
                                            "requiredCustomerLevelId": 3,
                                            "name": "profile",
                                          },
                                        "requiredProducts": [],
                                        "incompatibleProducts": [],
                                        "mandatoryCustomerDataItems":
                                          [
                                            {
                                              "mandatoryCustomerDataItemId": 1,
                                              "customerDataItem": "birthname",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 2,
                                              "customerDataItem": "surname",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 3,
                                              "customerDataItem": "dateOfBirth",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 4,
                                              "customerDataItem": "emailAddress",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 7,
                                              "customerDataItem": "ovPayToken",
                                            },
                                            {
                                              "mandatoryCustomerDataItemId": 8,
                                              "customerDataItem": "padBirthDate",
                                            },
                                          ],
                                        "requiredGboPersonalAttributes":
                                          [
                                            {
                                              "requiredGboPersonalAttributeId": 1,
                                              "name": "NAME",
                                            },
                                            {
                                              "requiredGboPersonalAttributeId": 2,
                                              "name": "BIRTHDATE",
                                            },
                                            {
                                              "requiredGboPersonalAttributeId": 3,
                                              "name": "PHOTO",
                                            },
                                          ],
                                        "tokenTypes":
                                          [{ "tokenTypeId": 1, "name": "EMV" }],
                                        "paymentMoment":
                                          {
                                            "paymentMomentId": 1,
                                            "name": "prepaid",
                                          },
                                        "serviceOptions": [],
                                        "validityDuration": "P1M",
                                        "maxStartInFutureDuration": "P6W",
                                        "isRenewable": true,
                                        "sendInvoice": true,
                                        "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                        "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
                                        "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
                                        "isSellableAtHtm": true,
                                        "needsSolvencyCheckConsumer": false,
                                        "needsSolvencyCheckBusiness": false,
                                        "sellingPeriods":
                                          [
                                            {
                                              "sellingPeriodId": 151,
                                              "fromInclusive": "2024-10-30T23:00:00.000+00:00",
                                              "toInclusive": "2029-12-30T23:00:00.000+00:00",
                                              "salesTouchpoint":
                                                {
                                                  "salesTouchpointId": 3,
                                                  "name": "Website (Perplex)",
                                                  "isActive": true,
                                                  "retailer":
                                                    {
                                                      "retailerId": 1001,
                                                      "name": "HTM externe touchpoints",
                                                      "street": "Koningin Julianaplein",
                                                      "number": "10",
                                                      "numberAddition": null,
                                                      "postalCode": "2595 AA",
                                                      "city": "Den Haag",
                                                      "country": "Nederland",
                                                      "emailAddress": "info@htm.nl",
                                                      "phoneNumber": "070 374 9002",
                                                      "taxId": 572309345923,
                                                      "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                                    },
                                                },
                                              "forbiddenPaymentMethods": [],
                                              "sellingPrices":
                                                [
                                                  {
                                                    "sellingPriceId": 142,
                                                    "amountExclTax": 8899,
                                                    "amountInclTax": 9700,
                                                    "fromInclusive": "2024-12-31T23:00:00.000+00:00",
                                                    "toInclusive": "2025-12-31T23:00:00.000+00:00",
                                                    "internalPrice": 0.0000,
                                                    "taxCode": "V09",
                                                    "taxPercentage": 9.0000,
                                                  },
                                                ],
                                            },
                                          ],
                                        "purchasePrices": [],
                                        "productVariants": [],
                                      },
                                    ],
                                },
                              ],
                          },
                          {
                            "productId": 112,
                            "parentProductId": 49,
                            "fikoArticleNumber": "1234",
                            "gboPackageTemplateId": "33618",
                            "tapConnectProductCode": null,
                            "productName": "HTM Regio Vrij - HL65",
                            "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65",
                            "validityPeriod":
                              {
                                "validityPeriodId": 222,
                                "fromInclusive": "2024-09-30T23:00:00.000+00:00",
                                "toInclusive": "2099-12-30T23:00:00.000+00:00",
                              },
                            "productTranslations":
                              [
                                {
                                  "language": "en",
                                  "name": "HTM Regio Free - HL65",
                                  "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65",
                                },
                              ],
                            "productOwner":
                              {
                                "productOwnerId": 19,
                                "name": "MRDH",
                                "organization": "MRDH",
                              },
                            "marketSegments": [],
                            "customerSegments": [],
                            "allowedGboAgeProfiles":
                              [
                                {
                                  "gboAgeProfileId": 1,
                                  "name": "Baby/peuter (0 t/m 3 jaar)",
                                  "ageFromInclusive": 0,
                                  "ageToInclusive": 3,
                                },
                                {
                                  "gboAgeProfileId": 2,
                                  "name": "Kind (4 t/m 11 jaar)",
                                  "ageFromInclusive": 4,
                                  "ageToInclusive": 11,
                                },
                                {
                                  "gboAgeProfileId": 3,
                                  "name": "Jongere (12 t/m 18 jaar)",
                                  "ageFromInclusive": 12,
                                  "ageToInclusive": 18,
                                },
                                {
                                  "gboAgeProfileId": 4,
                                  "name": "Volwassene (19 t/m 64 jaar)",
                                  "ageFromInclusive": 19,
                                  "ageToInclusive": 64,
                                },
                                {
                                  "gboAgeProfileId": 5,
                                  "name": "Oudere (65 jaar of ouder)",
                                  "ageFromInclusive": 65,
                                  "ageToInclusive": 999,
                                },
                              ],
                            "productCategory":
                              {
                                "productCategoryId": 3,
                                "isTravelProduct": true,
                                "name": "Afgekocht reisrecht",
                              },
                            "requiredCustomerLevel":
                              {
                                "requiredCustomerLevelId": 3,
                                "name": "profile",
                              },
                            "requiredProducts": [],
                            "incompatibleProducts": [],
                            "mandatoryCustomerDataItems":
                              [
                                {
                                  "mandatoryCustomerDataItemId": 1,
                                  "customerDataItem": "birthname",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 2,
                                  "customerDataItem": "surname",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 3,
                                  "customerDataItem": "dateOfBirth",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 4,
                                  "customerDataItem": "emailAddress",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 7,
                                  "customerDataItem": "ovPayToken",
                                },
                                {
                                  "mandatoryCustomerDataItemId": 8,
                                  "customerDataItem": "padBirthDate",
                                },
                              ],
                            "requiredGboPersonalAttributes":
                              [
                                {
                                  "requiredGboPersonalAttributeId": 1,
                                  "name": "NAME",
                                },
                                {
                                  "requiredGboPersonalAttributeId": 2,
                                  "name": "BIRTHDATE",
                                },
                                {
                                  "requiredGboPersonalAttributeId": 3,
                                  "name": "PHOTO",
                                },
                              ],
                            "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
                            "paymentMoment":
                              { "paymentMomentId": 1, "name": "prepaid" },
                            "serviceOptions": [],
                            "validityDuration": "P1M",
                            "maxStartInFutureDuration": "P6W",
                            "isRenewable": null,
                            "sendInvoice": null,
                            "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                            "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij",
                            "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
                            "isSellableAtHtm": true,
                            "needsSolvencyCheckConsumer": false,
                            "needsSolvencyCheckBusiness": false,
                            "sellingPeriods":
                              [
                                {
                                  "sellingPeriodId": 146,
                                  "fromInclusive": "2024-10-30T23:00:00.000+00:00",
                                  "toInclusive": "2029-12-30T23:00:00.000+00:00",
                                  "salesTouchpoint":
                                    {
                                      "salesTouchpointId": 3,
                                      "name": "Website (Perplex)",
                                      "isActive": true,
                                      "retailer":
                                        {
                                          "retailerId": 1001,
                                          "name": "HTM externe touchpoints",
                                          "street": "Koningin Julianaplein",
                                          "number": "10",
                                          "numberAddition": null,
                                          "postalCode": "2595 AA",
                                          "city": "Den Haag",
                                          "country": "Nederland",
                                          "emailAddress": "info@htm.nl",
                                          "phoneNumber": "070 374 9002",
                                          "taxId": 572309345923,
                                          "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
                                        },
                                    },
                                  "forbiddenPaymentMethods": [],
                                  "sellingPrices": [],
                                },
                              ],
                            "purchasePrices": [],
                            "productVariants": [],
                          },
                        ],
                    }
        "404":
          description: "404"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rfc9457Response"
              examples:
                Non-existing productId:
                  summary: Non-existing productId
                  value:
                    {
                      "type": "https://www.htm.nl/api/v1/404Error",
                      "title": "Product not found.",
                      "detail": "No product found for productId: 1000.",
                      "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
                      "apiErrorCode": "htm.api.err.404.2",
                    }
components:
  schemas:
    GboAgeProfileResponse:
      type: object
      required:
        - gboAgeProfileId
        - name
        - ageFromInclusive
        - ageUntilInclusive
      properties:
        gboAgeProfileId:
          type: integer
          example: 1
        name:
          type: string
          example: Kind (4 t/m 11 jaar)
        ageFromInclusive:
          type: integer
          description: The minimum age that the GBO age profile applies to
          example: 4
        ageUntilInclusive:
          type: integer
          description: The maximum age that the GBO age profile applies to
          example: 11
    ProductTranslationResponse:
      type: object
      required:
        - language
      properties:
        language:
          type: string
          example: en
        name:
          type: string
          example: HTM F&F 90% korting
        description:
          type: string
          example: >-
            Travel with 90% discount for a week during the first HTM F&F OVpay
            pilot!
    SellingPriceResponse:
      type: object
      required:
        - sellingPriceId
        - amountExclTax
        - taxCode
        - taxPercentage
        - amountInclTax
        - fromInclusive
        - toInclusive
        - internalPrice
      properties:
        sellingPriceId:
          type: integer
          example: 1
        amountExclTax:
          type: integer
          example: 750
        taxCode:
          type: string
          example: "V09"
        taxPercentage:
          type: number
          example: 9.0000
        amountInclTax:
          type: integer
          example: 908
        fromInclusive:
          type: string
          format: date-time-offset
          example: "2022-03-01T00:00:00.000+00:00"
        toInclusive:
          type: string
          format: date-time-offset
          example: "2022-06-01T00:00:00.000+00:00"
        internalPrice:
          type: number
          example: 908.1234
    PurchasePriceResponse:
      type: object
      required:
        - purchasePriceId
        - amountExclTax
        - taxCode
        - taxPercentage
        - amountInclTax
        - fromInclusive
        - toInclusive
      properties:
        purchasePriceId:
          type: integer
          example: 1
        amountExclTax:
          type: integer
          example: 750
        taxCode:
          type: string
          example: "V09"
        taxPercentage:
          type: number
          example: 9.0000
        amountInclTax:
          type: integer
          example: 908
        fromInclusive:
          type: string
          format: date-time-offset
          example: "2022-03-01T00:00:00.000+00:00"
        toInclusive:
          type: string
          format: date-time-offset
          example: "2022-06-01T00:00:00.000+00:00"
    SalesTouchpointResponse:
      type: object
      required:
        - salesTouchpointId
        - name
        - isActive
        - retailer
      properties:
        salesTouchpointId:
          type: integer
          example: 1
        name:
          type: string
          example: HTM App
        isActive:
          type: boolean
          example: true
        retailer:
          type: object
          required:
            - retailerId
            - name
          properties:
            retailerId:
              type: integer
              example: 1001
            name:
              type: string
              example: HTM
            street:
              type: string
              example: Kon. Julianaplein
            number:
              type: string
              example: "10"
            numberAddition:
              type: string
              example: a
            postalCode:
              type: string
              example: 2595 AA
            city:
              type: string
              example: Den Haag
            country:
              type: string
              example: Nederland
            emailAddress:
              type: string
              format: email
              example: info@htm.nl
            phoneNumber:
              type: string
              example: "09004864636"
            taxId:
              type: string
              example: "09004864636"
            imageReference:
              type: string
              example: https://htm.azure.net/abt/retailers/htm.svg
    ProductPayloadListResponse:
      type: object
      required:
        - Entries
      properties:
        Entries:
          type: array
          items:
            type: object
            required:
              - productId
            properties:
              productId:
                type: integer
                example: 1
              productName:
                type: string
                example: HTM pilot 90% korting
              productDescription:
                type: string
                example: Reis met 90% korting gedurende de eerste F&F pilot!
              productCategory:
                type: object
                required:
                  - productCategoryId
                  - isTravelProduct
                  - name
                properties:
                  productCategoryId:
                    type: integer
                    example: 1
                  isTravelProduct:
                    type: boolean
                    example: true
                  name:
                    type: string
                    example: Kortingsabonnement
              tokenTypes:
                type: array
                items:
                  type: object
                  required:
                    - tokenTypeId
                    - name
                  properties:
                    tokenTypeId:
                      type: integer
                      example: 1
                    name:
                      type: string
                      example: EMV
              sellableTouchpointIds:
                type: array
                items:
                  type: integer
                  example: 3
              amountInclTax:
                type: number
                example: 100
              imageReference:
                type: string
                example: https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg
              productPageUrl:
                type: string
                format: uri
                example: https://www.htm.nl/nog-onbekende-product-pagina
              _links:
                type: object
                properties:
                  get_details:
                    type: object
                    properties:
                      href:
                        type: string
                        example: https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/1
                      method:
                        type: string
                        example: GET

    ProductPayloadResponse:
      type: object
      required:
        - productId
        - productOwner
        - isSellableAtHtm
      properties:
        productId:
          type: integer
          example: 1
        parentProductId:
          type: integer
          example: 1
        fikoArticleNumber:
          type: string
          description: The article number of the product in FIKO
          example: 1234
        gboPackageTemplateId:
          type: string
          example: "30901"
        tapConnectProductCode:
          type: string
          example: 1234AB
        productName:
          type: string
          example: HTM pilot 90% korting
        productDescription:
          type: string
          example: Reis met 90% korting gedurende de eerste F&F pilot!
        validityPeriod:
          type: object
          required:
            - validityPeriodId
            - fromInclusive
            - toInclusive
          properties:
            validityPeriodId:
              type: integer
              example: 1
            fromInclusive:
              type: string
              format: date-time-offset
              example: "2024-09-03T10:01:34.000+00:00"
            toInclusive:
              type: string
              format: date-time-offset
              example: "2024-09-03T23:59:59.999+00:00"
        productTranslations:
          type: array
          items:
            $ref: "#/components/schemas/ProductTranslationResponse"
        productOwner:
          type: object
          required:
            - productOwnerId
            - name
          properties:
            productOwnerId:
              type: integer
              example: 1
            name:
              type: string
              example: John Doe
            organization:
              type: string
              example: HTM
        marketSegmentse:
          type: array
          items:
            type: object
            required:
              - marketSegmentId
              - name
            properties:
              marketSegmentId:
                type: integer
                example: 1
              name:
                type: string
                example: B2C
        customerSegments:
          type: array
          items:
            type: object
            required:
              - customerSegmentId
              - name
            properties:
              customerSegmentId:
                type: integer
                example: 1
              name:
                type: string
                example: Kind (4-11)
        allowedGboAgeProfiles:
          type: array
          items:
            $ref: "#/components/schemas/GboAgeProfileResponse"
        productCategory:
          type: object
          required:
            - productCategoryId
            - name
            - isTravelProduct
          properties:
            productCategoryId:
              type: integer
              example: 1
            name:
              type: string
              example: Kortingsabonnement
            isTravelProduct:
              type: boolean
              example: true
        requiredCustomerLevel:
          type: object
          required:
            - requiredCustomerLevelId
            - name
          properties:
            requiredCustomerLevelId:
              type: integer
              example: 1
            name:
              type: string
              example: anonymous
        requiredProducts:
          type: array
          items:
            type: object
            required:
              - requiredProductId
              - productName
            properties:
              requiredProductId:
                type: integer
                example: 2
              productName:
                type: string
                example: Product name
              description:
                type: string
                description: Reason why the product is required
                example: Description
        incompatibleProducts:
          type: array
          items:
            type: object
            required:
              - incompatibleProductId
              - productName
            properties:
              incompatibleProductId:
                type: integer
                example: 4
              productName:
                type: string
                example: Product name
              description:
                type: string
                description: >-
                  Reason why the product is incompatible with the selected
                  product
                example: Description
        mandatoryCustomerDataItems:
          type: array
          items:
            type: object
            required:
              - mandatoryCustomerDataItemId
              - customerDataItem
            properties:
              mandatoryCustomerDataItemId:
                type: integer
                example: 3
              customerDataItem:
                type: string
                example: dateOfBirth
        requiredGboPersonalAttributes:
          type: array
          description: >-
            List of required GBO personal attributes (PAD) - should not be
            user-editable, but automatically populated by PMT backend, based on
            the selected gboPackageTemplateId (if any)
          items:
            type: object
            required:
              - requiredGboPersonalAttributeId
              - name
            properties:
              requiredGboPersonalAttributeId:
                type: integer
                example: 2
              name:
                type: string
                example: BIRTHDATE
        tokenTypes:
          type: array
          items:
            type: object
            required:
              - tokenTypeId
              - name
            properties:
              tokenTypeId:
                type: integer
                example: 1
              name:
                type: string
                example: EMV
        paymentMoment:
          type: object
          required:
            - paymentMomentId
            - name
          properties:
            paymentMomentId:
              type: integer
              example: 1
            name:
              type: string
              example: prepaid
        serviceOptions:
          type: array
          items:
            type: object
            required:
              - serviceOptionId
              - action
            properties:
              serviceOptionId:
                type: integer
                example: 1
              action:
                type: string
                example: cancellableTermAhead
              description:
                type: string
                example: Per termijn vooruit opzegbaar
        validityDuration:
          type: string
          format: duration
          example: P1M
        maxStartInFutureDuration:
          type: string
          format: duration
          example: P6W
        isRenewable:
          type: boolean
          example: true
        sendInvoice:
          type: boolean
          example: false
        imageReference:
          type: string
          format: uri
          example: https://htm.azure.net/abt/products/product_1.svg
        productPageUrl:
          type: string
          format: uri
          example: https://www.htm.nl/nog-onbekende-product-pagina
        termsUrl:
          type: string
          format: uri
          example: https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina
        isSellableAtHtm:
          type: boolean
          example: true
        needsSolvencyCheckConsumer:
          type: boolean
          example: false
        needsSolvencyCheckBusiness:
          type: boolean
          example: false
        sellingPeriods:
          type: array
          items:
            type: object
            required:
              - sellingPeriodId
              - fromInclusive
              - toInclusive
              - salesTouchpoint
            properties:
              sellingPeriodId:
                type: integer
                example: 1
              fromInclusive:
                type: string
                format: date-time-offset
                example: "2022-03-01T00:00:00.000+00:00"
              toInclusive:
                type: string
                format: date-time-offset
                example: "2022-06-01T00:00:00.000+00:00"
              salesTouchpoint:
                $ref: "#/components/schemas/SalesTouchpointResponse"
              forbiddenPaymentMethods:
                type: array
                items:
                  type: object
                  required:
                    - forbiddenPaymentMethodId
                    - name
                  properties:
                    forbiddenPaymentMethodId:
                      type: integer
                      example: 1
                    name:
                      type: string
                      example: Credit Card
                    issuer:
                      type: string
                      example: American Express
              sellingPrices:
                type: array
                items:
                  $ref: "#/components/schemas/SellingPriceResponse"
        purchasePrices:
          type: array
          items:
            $ref: "#/components/schemas/PurchasePriceResponse"
        auditTrail:
          type: array
          items:
            type: object
            required:
              - auditTrailId
              - action
              - user
              - timestamp
            properties:
              auditTrailId:
                type: integer
                example: 1
              action:
                type: string
                example: insert
              user:
                type: string
                example: username
              timestamp:
                type: string
                format: date-time-offset
                example: "2024-09-03T10:01:34.000+00:00"
    rfc9457Response:
      type: object
      properties:
        type:
          type: string
          format: url
          example: "https://www.htm.nl/api/v1/rfc9457Error"
        title:
          type: string
          description: "Short summary of the error."
          example: "The request is not valid."
        detail:
          type: string
          description: "More detailed descriptionof the error."
          example: "Some required parameters are missing."
        instance:
          type: string
          description: "Unique identifier to correlate this specific error with logging in other applications."
          example: "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c"
        additionalProperty1:
          type: string
          description: "Example of an additional property value to be used for error reporting."
          example: "additionalValue1"
        additionalProperty2:
          type: array
          description: "Example of an additional property array to be used for error reporting."
          items:
            type: string
            example:
              - "additionalValue2-1"
              - "additionalValue2-2"
