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://services.acc.api.htm.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": 5, "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": 5, "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": 2, "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": 5, "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, "layerInfo": 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": null, "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.\ The top-level parent contains `LayerInfo` to communicate what differentiates the underlying product-variants.\ When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product. value: { "productId": 126, "parentProductId": null, "layerInfo": { "layerInfoId": 1, "choiceKey": "isRenewable", "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", "isCustomChoice": false, }, "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, "layerInfo": null, "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": null, "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, "layerInfo": null, "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": null, "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.\ Each non-leaf-node product contains `LayerInfo` to communicate what differentiates the underlying product-variants.\ When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product. value: { "productId": 49, "parentProductId": null, "layerInfo": { "layerInfoId": 2, "choiceKey": "regio", "choiceLabel": "Kies de gewenste regio", "isCustomChoice": true, }, "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": 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": 2, "isTravelProduct": true, "name": "Afgekocht reisrecht", }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile" }, "requiredProducts": [], "incompatibleProducts": [], "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress", }, { "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, "layerInfo": { "layerInfoId": 3, "choiceKey": "allowedGboAgeProfiles", "choiceLabel": "Wat is uw geboortedatum?", "isCustomChoice": false, }, "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": 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": 2, "isTravelProduct": true, "name": "Afgekocht reisrecht", }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile", }, "requiredProducts": [], "incompatibleProducts": [], "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress", }, { "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, "layerInfo": { "layerInfoId": 1, "choiceKey": "isRenewable", "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", "isCustomChoice": false, }, "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": 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": 2, "isTravelProduct": true, "name": "Afgekocht reisrecht", }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile", }, "requiredProducts": [], "incompatibleProducts": [], "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress", }, { "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": null, "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, "layerInfo": { "layerInfoId": 1, "choiceKey": "isRenewable", "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", "isCustomChoice": false, }, "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": 2, "isTravelProduct": true, "name": "Afgekocht reisrecht", }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile", }, "requiredProducts": [], "incompatibleProducts": [], "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress", }, { "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": null, "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, "layerInfo": null, "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": 2, "isTravelProduct": true, "name": "Afgekocht reisrecht", }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile", }, "requiredProducts": [], "incompatibleProducts": [], "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress", }, { "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": null, "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, "layerInfo": null, "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": 2, "isTravelProduct": true, "name": "Afgekocht reisrecht", }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile", }, "requiredProducts": [], "incompatibleProducts": [], "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress", }, { "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": null, "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, "layerInfo": { "layerInfoId": 3, "choiceKey": "allowedGboAgeProfiles", "choiceLabel": "Wat is uw geboortedatum?", "isCustomChoice": false, }, "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": 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": 2, "isTravelProduct": true, "name": "Afgekocht reisrecht", }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile", }, "requiredProducts": [], "incompatibleProducts": [], "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress", }, { "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: LayerInfoResponse: type: object description: >- Gives information on the choice that the customer has to make, to enable the touchpoint to proceed further "down the product-tree" by selecting (PATCH-ing) the correct product-variant. LayerInfo is not a mandatory product-attribute, but it should always be present on all products for which there are underlying products, i.e. for which `GET /products?parentProductId=...` returns a non-empty list. When no LayerInfo is present, the touchpoint can conclude that the product is a final fulfillable product. \ **PMT should ensure that all non-leaf-node products (i.e. products that have underlying products) have a `layerInfoId` referenced. If a product is found to be in violation of this rule, its attribtue `isValid` should be set to `false`.** required: - layerInfoId - choiceKey - choiceLabel - isCustomChoice properties: layerInfoId: example: 1 type: integer choiceKey: example: isRenewable type: string description: >- Contains the JSON Key of the product-attribute that the customer has to make some choice on (determined by PMT), so that te correct product-variant (one of the direct child-products) can be selected by the touchpoint. For some decisions (like region), there is no product attribute, and thus `isCustomChoice` will be set to `true`, and `choiceKey` can then be set to any string on which touchpoints can also trigger behaviour if desired (think "region picker tool"). Therefore, reuse of `choiceKeys` should be the goal, so touchoints can keep their triggers simple and prevent duplication of similar `choiceKeys` to trigger the same behaviour. choiceLabel: example: Kies voor een doorlopend abonnement of een enkele termijn type: string description: >- Contains a human-readable label for the choice that the customer has to make - this label should be something that is easy to understand for the customer. Only one label (and thus, one language) is supported; label translations should be handled by the touchpoint. isCustomChoice: example: false type: boolean description: >- Indicates if the choice is a custom choice. If `false`, the PMT should validate that the `choiceKey` is a differentiating attribute for the underlying product-variants. When the attribute denoted by the `choiceKey` is the same for all underlying variants, PMT validation will fail and the product will become invalid (`isValid == false`) until either the underlying products are updated, or a `LayerInfo` with `isCustomChoice == true` is configured. 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 layerInfo: $ref: '#/components/schemas/LayerInfoResponse' 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"