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/servcieengine/x.x 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: getListNoProducts: summary: No products / Empty list description: No products value: { "Entries": [] } getListOneProductTouchpointId1: 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, "productCode": "312AB-WL", "productName": "HTM dagkaart", "productDescription": "Reis een dag met het openbaar vervoer bij HTM", "productCategory": { "productCategoryId": 6, "isTravelProduct": false, "name": "Barcode" }, "tokenTypes": null, "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://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", "method": "GET" } } } ] } getListOneProductTouchpointId3: 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, "productCode": "312AB-WL", "productName": "HTM dagkaart", "productDescription": "Reis een dag met het openbaar vervoer bij HTM", "productCategory": { "productCategoryId": 6, "isTravelProduct": false, "name": "Barcode" }, "tokenTypes": null, "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://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", "method": "GET" } } } ] } getListOneProductNoPriceTouchpointId3: 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, "productCode": 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.", "productCategory": { "productCategoryId": 3, "isTravelProduct": true, "name": "Afgekocht reisrecht" }, "tokenTypes": null, "sellableTouchpointIds": [ 4 ], "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://services.acc.api.htm.nl/abt/serviceengine/x.x/products/49", "method": "GET" } } } ] } getListMultipleProductsTouchpointId3: 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, "productCode": "312AB-WL", "productName": "HTM dagkaart", "productDescription": "Reis een dag met het openbaar vervoer bij HTM", "productCategory": { "productCategoryId": 6, "isTravelProduct": false, "name": "Barcode" }, "tokenTypes": null, "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://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", "method": "GET" } } }, { "productId": 4, "productCode": "30002-ML", "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://services.acc.api.htm.nl/abt/serviceengine/x.x/products/4", "method": "GET" } } } ] } '400': description: '400' content: application/json: schema: $ref: '#/components/schemas/400Response' '401': description: '401' content: application/json: schema: $ref: '#/components/schemas/401Response' '404': description: '404' content: application/json: schema: $ref: '#/components/schemas/404Response' '500': description: '500' content: application/json: schema: $ref: '#/components/schemas/500Response' /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. The response contains the full product tree, including all child products (`productVariants`) of the given productId. Touchpoints can only retrieve details for products that they are allowed to SELL at the time of the request (i.e. its touchpointId is included in the `sellableTouchPointIds` array in the products list response). A touchpoint can determine its own touchpointId by checking the `X-HTM-TOUCHPOINT-ID-HEADER` HTTP header. When a touchpoint tries to retrieve details for a product that it is not allowed to sell, a 403 error is thrown. 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: getDetailsTreeRegioVrijTouchpointId3: summary: Details of 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 (part of) its productVariants; the full tree would be too huge to be useful as an example. The full depth of the tree is included for the HL62 Reduced Fare Variant. value: { "productId": 49, "parentProductId": null, "productCode": null, "gboPackageTemplateId": null, "tapConnectProductCode": null, "productGroupMetadata": 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": null, "customerSegments": [ { "customerSegmentId": 2, "name": "Kind (4-11)" }, { "customerSegmentId": 3, "name": "Jongere (12-18)" }, { "customerSegmentId": 4, "name": "Volwassene (19-64)" }, { "customerSegmentId": 5, "name": "Oudere (65+)" } ], "productCategory": { "productCategoryId": 3, "isTravelProduct": true, "name": "Afgekocht reisrecht" }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile" }, "requiredProducts": null, "incompatibleProducts": null, "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 1, "customerDataItem": "birthname" }, { "mandatoryCustomerDataItemId": 2, "customerDataItem": "surname" }, { "mandatoryCustomerDataItemId": 3, "customerDataItem": "dateOfBirth" }, { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress" }, { "mandatoryCustomerDataItemId": 7, "customerDataItem": "ovPayToken" } ], "requiredGboPersonalAttributes": [ { "requiredGboPersonalAttributeId": 1, "name": "NAME" }, { "requiredGboPersonalAttributeId": 2, "name": "BIRTHDATE" }, { "requiredGboPersonalAttributeId": 3, "name": "PHOTO" } ], "tokenTypes": [ { "tokenTypeId": 1, "name": "EMV" } ], "paymentMoment": { "paymentMomentId": 1, "name": "prepaid" }, "serviceOptions": null, "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": 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": null, "sellingPrices": null } ], "purchasePrices": null, "productVariants": [ { "productId": 109, "parentProductId": 49, "productCode": null, "gboPackageTemplateId": null, "tapConnectProductCode": null, "productGroupMetadata": 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": null, "customerSegments": [ { "customerSegmentId": 2, "name": "Kind (4-11)" }, { "customerSegmentId": 3, "name": "Jongere (12-18)" }, { "customerSegmentId": 4, "name": "Volwassene (19-64)" }, { "customerSegmentId": 5, "name": "Oudere (65+)" } ], "productCategory": { "productCategoryId": 3, "isTravelProduct": true, "name": "Afgekocht reisrecht" }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile" }, "requiredProducts": null, "incompatibleProducts": null, "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 1, "customerDataItem": "birthname" }, { "mandatoryCustomerDataItemId": 2, "customerDataItem": "surname" }, { "mandatoryCustomerDataItemId": 3, "customerDataItem": "dateOfBirth" }, { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress" }, { "mandatoryCustomerDataItemId": 7, "customerDataItem": "ovPayToken" } ], "requiredGboPersonalAttributes": [ { "requiredGboPersonalAttributeId": 1, "name": "NAME" }, { "requiredGboPersonalAttributeId": 2, "name": "BIRTHDATE" }, { "requiredGboPersonalAttributeId": 3, "name": "PHOTO" } ], "tokenTypes": [ { "tokenTypeId": 1, "name": "EMV" } ], "paymentMoment": { "paymentMomentId": 1, "name": "prepaid" }, "serviceOptions": null, "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": 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": null, "sellingPrices": null } ], "purchasePrices": null, "productVariants": [ { "productId": 114, "parentProductId": 109, "productCode": null, "gboPackageTemplateId": "33629", "tapConnectProductCode": null, "productGroupMetadata": 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": null, "customerSegments": [ { "customerSegmentId": 2, "name": "Kind (4-11)" }, { "customerSegmentId": 3, "name": "Jongere (12-18)" }, { "customerSegmentId": 4, "name": "Volwassene (19-64)" }, { "customerSegmentId": 5, "name": "Oudere (65+)" } ], "productCategory": { "productCategoryId": 3, "isTravelProduct": true, "name": "Afgekocht reisrecht" }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile" }, "requiredProducts": null, "incompatibleProducts": null, "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 1, "customerDataItem": "birthname" }, { "mandatoryCustomerDataItemId": 2, "customerDataItem": "surname" }, { "mandatoryCustomerDataItemId": 3, "customerDataItem": "dateOfBirth" }, { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress" }, { "mandatoryCustomerDataItemId": 7, "customerDataItem": "ovPayToken" } ], "requiredGboPersonalAttributes": [ { "requiredGboPersonalAttributeId": 1, "name": "NAME" }, { "requiredGboPersonalAttributeId": 2, "name": "BIRTHDATE" }, { "requiredGboPersonalAttributeId": 3, "name": "PHOTO" } ], "tokenTypes": [ { "tokenTypeId": 1, "name": "EMV" } ], "paymentMoment": { "paymentMomentId": 1, "name": "prepaid" }, "serviceOptions": null, "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", "isRenewable": false, "sendInvoice": false, "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": null, "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", "internalPrice": 0.0000, "taxMetadata": { "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" } } ] } ], "purchasePrices": null, "productVariants": null }, { "productId": 115, "parentProductId": 109, "productCode": null, "gboPackageTemplateId": "33630", "tapConnectProductCode": null, "productGroupMetadata": 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": null, "customerSegments": [ { "customerSegmentId": 2, "name": "Kind (4-11)" }, { "customerSegmentId": 3, "name": "Jongere (12-18)" } ], "productCategory": { "productCategoryId": 3, "isTravelProduct": true, "name": "Afgekocht reisrecht" }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile" }, "requiredProducts": null, "incompatibleProducts": null, "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 1, "customerDataItem": "birthname" }, { "mandatoryCustomerDataItemId": 2, "customerDataItem": "surname" }, { "mandatoryCustomerDataItemId": 3, "customerDataItem": "dateOfBirth" }, { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress" }, { "mandatoryCustomerDataItemId": 7, "customerDataItem": "ovPayToken" } ], "requiredGboPersonalAttributes": [ { "requiredGboPersonalAttributeId": 1, "name": "NAME" }, { "requiredGboPersonalAttributeId": 2, "name": "BIRTHDATE" }, { "requiredGboPersonalAttributeId": 3, "name": "PHOTO" } ], "tokenTypes": [ { "tokenTypeId": 1, "name": "EMV" } ], "paymentMoment": { "paymentMomentId": 1, "name": "prepaid" }, "serviceOptions": null, "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": 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": null, "sellingPrices": [ { "sellingPriceId": 140, "amountExclTax": 8899, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+0:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", "internalPrice": 0.0000, "taxMetadata": { "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" } } ] } ], "purchasePrices": null, "productVariants": [ { "productId": 116, "parentProductId": 115, "productCode": "33630-ML", "gboPackageTemplateId": "33630", "tapConnectProductCode": null, "productGroupMetadata": { "productGroupMetadataId": "WIP", "productGroupCode": "WIP", "department": "WIP", "costCenter": "WIP", "costType": "WIP", "description": "Work in Progress - will follow later, when FIKO is implemented", "user": "WIP", "documentCode": "WIP", "timestampUpdated": "2024-09-03T15:07:53.470+00:00", "validFrom": "2024-08-01T00:00:00.000+00:00", "validUntil": "2025-08-01T00:00:00.000+00:00" }, "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": null, "customerSegments": [ { "customerSegmentId": 2, "name": "Kind (4-11)" }, { "customerSegmentId": 3, "name": "Jongere (12-18)" } ], "productCategory": { "productCategoryId": 3, "isTravelProduct": true, "name": "Afgekocht reisrecht" }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile" }, "requiredProducts": null, "incompatibleProducts": null, "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 1, "customerDataItem": "birthname" }, { "mandatoryCustomerDataItemId": 2, "customerDataItem": "surname" }, { "mandatoryCustomerDataItemId": 3, "customerDataItem": "dateOfBirth" }, { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress" }, { "mandatoryCustomerDataItemId": 7, "customerDataItem": "ovPayToken" } ], "requiredGboPersonalAttributes": [ { "requiredGboPersonalAttributeId": 1, "name": "NAME" }, { "requiredGboPersonalAttributeId": 2, "name": "BIRTHDATE" }, { "requiredGboPersonalAttributeId": 3, "name": "PHOTO" } ], "tokenTypes": [ { "tokenTypeId": 1, "name": "EMV" } ], "paymentMoment": { "paymentMomentId": 1, "name": "prepaid" }, "serviceOptions": null, "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": null, "sellingPrices": [ { "sellingPriceId": 141, "amountExclTax": 8899, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+0:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", "internalPrice": 0.0000, "taxMetadata": { "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" } } ] } ], "purchasePrices": null, "productVariants": null }, { "productId": 117, "parentProductId": 115, "productCode": "33630-MA", "gboPackageTemplateId": "33630", "tapConnectProductCode": null, "productGroupMetadata": { "productGroupMetadataId": "WIP", "productGroupCode": "WIP", "department": "WIP", "costCenter": "WIP", "costType": "WIP", "description": "Work in Progress - will follow later, when FIKO is implemented", "user": "WIP", "documentCode": "WIP", "timestampUpdated": "2024-09-03T15:07:53.470+00:00", "validFrom": "2024-08-01T00:00:00.000+00:00", "validUntil": "2025-08-01T00:00:00.000+00:00" }, "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": null, "customerSegments": [ { "customerSegmentId": 2, "name": "Kind (4-11)" }, { "customerSegmentId": 3, "name": "Jongere (12-18)" } ], "productCategory": { "productCategoryId": 3, "isTravelProduct": true, "name": "Afgekocht reisrecht" }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile" }, "requiredProducts": null, "incompatibleProducts": null, "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 1, "customerDataItem": "birthname" }, { "mandatoryCustomerDataItemId": 2, "customerDataItem": "surname" }, { "mandatoryCustomerDataItemId": 3, "customerDataItem": "dateOfBirth" }, { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress" }, { "mandatoryCustomerDataItemId": 7, "customerDataItem": "ovPayToken" } ], "requiredGboPersonalAttributes": [ { "requiredGboPersonalAttributeId": 1, "name": "NAME" }, { "requiredGboPersonalAttributeId": 2, "name": "BIRTHDATE" }, { "requiredGboPersonalAttributeId": 3, "name": "PHOTO" } ], "tokenTypes": [ { "tokenTypeId": 1, "name": "EMV" } ], "paymentMoment": { "paymentMomentId": 1, "name": "prepaid" }, "serviceOptions": null, "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": null, "sellingPrices": [ { "sellingPriceId": 142, "amountExclTax": 8899, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+0:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", "internalPrice": 0.0000, "taxMetadata": { "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" } } ] } ], "purchasePrices": null, "productVariants": null } ] } ] }, { "productId": 112, "parentProductId": 49, "productCode": null, "gboPackageTemplateId": null, "tapConnectProductCode": null, "productGroupMetadata": 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": null, "customerSegments": [ { "customerSegmentId": 2, "name": "Kind (4-11)" }, { "customerSegmentId": 3, "name": "Jongere (12-18)" }, { "customerSegmentId": 4, "name": "Volwassene (19-64)" }, { "customerSegmentId": 5, "name": "Oudere (65+)" } ], "productCategory": { "productCategoryId": 3, "isTravelProduct": true, "name": "Afgekocht reisrecht" }, "requiredCustomerLevel": { "requiredCustomerLevelId": 3, "name": "profile" }, "requiredProducts": null, "incompatibleProducts": null, "mandatoryCustomerDataItems": [ { "mandatoryCustomerDataItemId": 1, "customerDataItem": "birthname" }, { "mandatoryCustomerDataItemId": 2, "customerDataItem": "surname" }, { "mandatoryCustomerDataItemId": 3, "customerDataItem": "dateOfBirth" }, { "mandatoryCustomerDataItemId": 4, "customerDataItem": "emailAddress" }, { "mandatoryCustomerDataItemId": 7, "customerDataItem": "ovPayToken" } ], "requiredGboPersonalAttributes": [ { "requiredGboPersonalAttributeId": 1, "name": "NAME" }, { "requiredGboPersonalAttributeId": 2, "name": "BIRTHDATE" }, { "requiredGboPersonalAttributeId": 3, "name": "PHOTO" } ], "tokenTypes": [ { "tokenTypeId": 1, "name": "EMV" } ], "paymentMoment": { "paymentMomentId": 1, "name": "prepaid" }, "serviceOptions": null, "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", "isRenewable": false, "sendInvoice": false, "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": null, "sellingPrices": null } ], "purchasePrices": null, "productVariants": null } ] } '401': description: '401' content: application/json: schema: $ref: '#/components/schemas/401Response' '403': description: '403' content: application/json: schema: $ref: '#/components/schemas/403Response' examples: Not allowed to see product details: summary: Not allowed to see product details value: { "code": "403", "type": "Forbidden", "message": "Touchpoint not authorized to see product details", "description": "The touchpoint is currently not allowed to sell this product and thus can not see its details" } '404': description: '404' content: application/json: schema: $ref: '#/components/schemas/404Response' '500': description: '500' content: application/json: schema: $ref: '#/components/schemas/500Response' components: schemas: TaxMetadataResponse: type: object required: - taxMetadataId - taxCode - taxPercentageAmount properties: taxMetadataId: type: string format: uuid example: 501B17EF-36C4-4039-B92C-6517969B464E taxCode: type: string example: V09 taxPercentageAmount: type: integer example: 21 description: type: string example: BTW VERKOOP LAAG 9% 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 - taxMetadata - amountInclTax - fromInclusive - toInclusive - internalPrice properties: sellingPriceId: type: integer example: 1 amountExclTax: type: integer example: 750 taxMetadata: $ref: '#/components/schemas/TaxMetadataResponse' 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 - taxMetadata - amountInclTax - fromInclusive - toInclusive properties: purchasePriceId: type: integer example: 1 amountExclTax: type: integer example: 750 taxMetadata: $ref: '#/components/schemas/TaxMetadataResponse' 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 productCode: type: string example: 30901-WL 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/serviceengine/x.x/products/1 method: type: string example: GET ProductPayloadResponse: type: object required: - productId - productOwner - isRenewable - isSellableAtHtm - needsSolvencyCheckConsumer - needsSolvencyCheckBusiness properties: productId: type: integer example: 1 parentProductId: type: integer example: 1 productCode: type: string example: 30901-WL gboPackageTemplateId: type: string example: '30901' tapConnectProductCode: type: string example: 1234AB productGroupMetadata: type: object required: - productGroupMetadataId - productGroupCode - department - costCenter - costType - description - documentCode - user - timestampUpdated - validFrom properties: productGroupMetadataId: type: string format: uuid example: 501B17EF-36C4-4039-B92C-6517969B464E productGroupCode: type: string example: TBD department: type: string example: TBD costCenter: type: string example: TBD costType: type: string example: TBD description: type: string example: TBD documentCode: type: string example: TBD user: type: string example: TBD timestampUpdated: type: string format: date-time-offset example: '2024-09-03T10:01:34.000+00:00' validFrom: type: string format: date-time-offset example: '2024-09-03T10:01:34.000+00:00' validUntil: type: string format: date-time-offset example: '2024-09-03T10:01:34.000+00:00' 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) 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' 400Response: type: object properties: code: type: string example: '400' type: type: string message: type: string example: Bad Request description: type: string example: '''2023-02-01 00:00:00'' is not a valid Datetime' apiErrorCode: type: string example: htm.api.err.40xxx 401Response: type: object properties: code: type: string example: '401' type: type: string message: type: string example: Invalid Credentials description: type: string example: >- Invalid Credentials. Make sure you have provided the correct security credentials apiErrorCode: type: string example: htm.api.err.40xxx 403Response: type: object properties: code: type: string example: '403' type: type: string example: "Forbidden" message: type: string example: Retailer not authorized to access product details description: type: string example: The touchpoint is not part of a retailer that isallowed to access product details for this productId apiErrorCode: type: string example: htm.api.err.40xxx 404Response: type: object properties: code: type: string example: '404' type: type: string example: Status report message: type: string example: Not Found description: type: string example: The requested resource is not available. apiErrorCode: type: string example: htm.api.err.40xxx 500Response: type: object properties: code: type: string example: '500' type: type: string message: type: string example: Internal Server Error description: type: string apiErrorCode: type: string example: htm.api.err.40xxx