diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml new file mode 100644 index 0000000..b2b6944 --- /dev/null +++ b/src/openapi/products/SE-products-SE.yaml @@ -0,0 +1,2550 @@ +openapi: 3.0.1 +info: + title: Service Engine APIs for Products + description: |- + Service Engine APIs for HTM products. These are NOT the CRUD APIs to access raw data in the database. + To be used by touchpoints to get information about HTM products they are allowed to see and/or sell. + version: '1.0' +servers: + - url: https://api.integratielaag.nl/abt/abtserviceengine/2.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 null, not as "[]"!** + value: + { + "Entries": [ + { + "productId": 99, + "productCode": null, + "productName": null, + "productDescription": null, + "productCategory": null, + "tokenTypes": null, + "sellableTouchPointIds": null, + "amountInclTax": null, + "imageReference": null, + "productPageUrl": null, + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.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, + "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://api.integratielaag.nl/abt/abtserviceengine/2.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, + "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://api.integratielaag.nl/abt/abtserviceengine/2.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, + "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://api.integratielaag.nl/abt/abtserviceengine/2.0/products/49", + "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, + "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://api.integratielaag.nl/abt/abtserviceengine/2.0/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://api.integratielaag.nl/abt/abtserviceengine/2.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. + + 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, + "productCode": "HTM-30901-WL", + "gboPackageTemplateId": "30901", + "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 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" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": null, + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "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": null, + "sellingPrices": [ + { + "sellingPriceId": 78, + "amountExclTax": 92, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + 20% Discount product (called by touchpointId 4): + summary: 20% Discount product (called by touchpointId 4) + description: |- + All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ + Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned. + + This product has two `productVariants`: a single month variant and a subscription variant. + value: + { + "productId": 126, + "parentProductId": null, + "productCode": "HTM-30001", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productGroupMetadata": 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": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "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": null, + "sellingPrices": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 119, + "parentProductId": 126, + "productCode": "HTM-30001-ML", + "gboPackageTemplateId": "30001", + "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 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": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "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-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": null, + "sellingPrices": [ + { + "sellingPriceId": 149, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 120, + "parentProductId": 126, + "productCode": "HTM-30001-MA", + "gboPackageTemplateId": "30001", + "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 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": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "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-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": null, + "sellingPrices": [ + { + "sellingPriceId": 148, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + Regio Vrij product and (part of) its productVariants (called by touchpointId 3): + summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3) + description: |- + All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product + and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example. + + The full depth of the tree is included in the example for the HL62 Reduced Fare Variant. + value: + { + "productId": 49, + "parentProductId": null, + "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": 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": 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": 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": 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": 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": 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": 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": 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": 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": 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": null, + "sellingPrices": null + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + '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: + 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/abtserviceengine/2.0/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' + 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" \ No newline at end of file diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml new file mode 100644 index 0000000..17305e4 --- /dev/null +++ b/src/openapi/products/SE-products-TP.yaml @@ -0,0 +1,2550 @@ +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/touchpoint/2.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 null, not as "[]"!** + value: + { + "Entries": [ + { + "productId": 99, + "productCode": null, + "productName": null, + "productDescription": null, + "productCategory": null, + "tokenTypes": null, + "sellableTouchPointIds": null, + "amountInclTax": null, + "imageReference": null, + "productPageUrl": null, + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.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, + "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://api.integratielaag.nl/abt/touchpoint/2.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, + "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://api.integratielaag.nl/abt/touchpoint/2.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, + "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://api.integratielaag.nl/abt/touchpoint/2.0/products/49", + "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, + "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://api.integratielaag.nl/abt/touchpoint/2.0/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://api.integratielaag.nl/abt/touchpoint/2.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. + + 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, + "productCode": "HTM-30901-WL", + "gboPackageTemplateId": "30901", + "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 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" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": null, + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "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": null, + "sellingPrices": [ + { + "sellingPriceId": 78, + "amountExclTax": 92, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + 20% Discount product (called by touchpointId 4): + summary: 20% Discount product (called by touchpointId 4) + description: |- + All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ + Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned. + + This product has two `productVariants`: a single month variant and a subscription variant. + value: + { + "productId": 126, + "parentProductId": null, + "productCode": "HTM-30001", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productGroupMetadata": 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": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "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": null, + "sellingPrices": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 119, + "parentProductId": 126, + "productCode": "HTM-30001-ML", + "gboPackageTemplateId": "30001", + "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 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": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "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-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": null, + "sellingPrices": [ + { + "sellingPriceId": 149, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 120, + "parentProductId": 126, + "productCode": "HTM-30001-MA", + "gboPackageTemplateId": "30001", + "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 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": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "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-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": null, + "sellingPrices": [ + { + "sellingPriceId": 148, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + Regio Vrij product and (part of) its productVariants (called by touchpointId 3): + summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3) + description: |- + All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product + and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example. + + The full depth of the tree is included in the example for the HL62 Reduced Fare Variant. + value: + { + "productId": 49, + "parentProductId": null, + "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": 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": 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": 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": 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": 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": 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": 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": 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": 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": 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": null, + "sellingPrices": null + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + '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: + 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/abtserviceengine/2.0/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' + 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" \ No newline at end of file diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml deleted file mode 100644 index c76fc51..0000000 --- a/src/openapi/products/SE-products.yaml +++ /dev/null @@ -1,1676 +0,0 @@ -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. \ - Only a few details are returned per product - use the `GET /products/{productId}` endpoint - to get more details. \ - In the examples, it can be seen that only products that have active sellingPeriods for touchpoints within the same - retailer as the calling touchpoint are returned. \ - 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": [], - "href": null - } - getListOneProductTouchpointId3: - summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3) - description: Only products that have active sellingPeriods for touchpoint 3 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" - } - } - } - ] - } - getListMultipleProductsWithPaginationTuchpointId1: - summary: List containing multiple products with pagination (called by touchpointId 3) - description: Only products that have active SellingPeriods for touchpoint 3 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 full details of a single HTM product (including all child products), specified by the productId - description: |- - Get full details of a single HTM product (including all child products), specified by the productId. \ - Touchpoints only receive information that is allowed to be seen by the touchpointId of the \ - consumer; i.e. only currently active selling periods and prices for the calling touchpoint are 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: - WIP touchpoint-filtered response: - summary: WIP touchpoint-filtered response - value: - { - "WIP": null - } -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' - CreateProductRequest: - required: - - productOwnerId - - isRenewable - - isSellableAtHtm - - needsSolvencyCheckConsumer - - needsSolvencyCheckBusiness - type: object - properties: - parentProductId: - type: integer - description: The ID of the parent product (if any) - example: 1 - productCode: - type: string - description: The HTM-internal product code - example: 30901-WL - gboPackageTemplateId: - type: string - description: >- - The ID of the GBO SalesPackage that should be instantiated after - buying this product - example: '30901' - tapConnectProductCode: - type: string - description: >- - The productCode of the TapConnect product that should be issued - after buying this product - example: 1234AB - productGroupMetadataId: - type: string - format: uuid - description: The ID of the productGroupMetadata for administration in U4F - example: 501B17EF-36C4-4039-B92C-6517969B464E - productName: - type: string - description: The name of the product - example: Test product name - productDescription: - type: string - description: The description of the product - example: Test product description - validityPeriod: - required: - - fromInclusive - - toInclusive - type: object - description: The validity period of the product - properties: - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start of the validity - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end of the validity period - example: '2022-06-01T00:00:00.000' - productTranslations: - type: array - description: Translations of the product name and description - items: - type: object - required: - - language - - name - - description - 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! - productOwnerId: - type: integer - description: The ID of the owner of the product - example: 1 - marketSegmentIds: - type: array - description: The IDs of the market segments that the product is targeted towards - items: - type: integer - example: 1 - customerSegmentIds: - type: array - description: >- - The IDs of the customer segments that the product is targeted - towards - items: - type: integer - example: 1 - productCategoryId: - type: integer - description: The ID of the category the product belongs to - example: 1 - requiredCustomerLevelId: - type: integer - description: >- - The ID of the required customer level to be allowed to purchase the - product - requiredProducts: - type: array - required: - - requiredProductId - description: >- - The IDs of products that should already be owned by the customer - (for travel products, the validity of the given productIds should - fully overlap on the customer's travel medium) - items: - type: object - properties: - requiredProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is required - example: Benodigd basisproduct - incompatibleProducts: - type: array - required: - - incompatibleProductId - description: >- - The IDs of products that can not be active at the same time as this - product (for travel products, none of the listed productIds should - have overlapping validity with this product on the customer's travel - medium) - items: - type: object - properties: - incompatibleProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is incompatible - example: Kan niet combineren met zichzelf - mandatoryCustomerDataItemIds: - type: array - description: >- - The IDs of the customer data items that should be filled in by the - customer - items: - type: integer - example: 1 - requiredGboPersonalAttributeIds: - type: array - description: >- - GBO specific; the IDs of the GBO Personal Attribute Data (PAD) - elements that should be present (or filled during the order flow) on - the customer's chosen travel medium. This attribute should not be - user-editable, but only be filled by PMT, based on the chosen - gboPackageTemplateId! - items: - type: integer - example: 1 - tokenTypeIds: - type: array - description: The IDs of the token types that the product can be instantiated on - items: - type: integer - example: 1 - paymentMomentId: - type: integer - description: The ID of the payment moment for the product - example: 1 - serviceOptionIds: - type: array - description: The IDs of the service options that are available for this product - items: - type: integer - example: 1 - validityDuration: - type: string - format: duration - description: >- - The validity duration of the product. Should only contain one single - unit of duration (D, W, M, Y) - example: P7D - maxStartInFutureDuration: - type: string - format: duration - description: >- - The maximum amount of time in the future allowed for the start of - the product validity. Should only contain one single unit of - duration (D, W, M, Y) - example: P6W - isRenewable: - type: boolean - description: Indicates if the product is renewable - example: false - sendInvoice: - type: boolean - description: >- - Indicates if an invoice should be sent to the customer after - ordering this product - example: false - imageReference: - type: string - format: uri - description: A reference/URL to the image of the product - example: https://www.htm.nl/nog-onbekende-productafbeelding - productPageUrl: - type: string - format: uri - description: >- - The URL of the product page, to be used by touchpoints which are not - allowed to sell the product, to redirect the customer. If the - product is sold via multiple touchpoints, this URL should point to - the preferred touchpoint for sales - example: https://www.htm.nl/nog-onbekende-productpagina - termsUrl: - type: string - format: uri - description: >- - The URL for the webpage or document containing terms for this - product - example: https://www.htm.nl/nog-onbekende-productvoorwaarden - isSellableAtHtm: - type: boolean - description: >- - Indicates if the product is sellable at HTM. If false, no - sellingPrices/Periods should be defined - this product may only be - used for tracking/reporting purposed, or internal use - needsSolvencyCheckConsumer: - type: boolean - description: >- - Indicates if a solvency check is required for consumers purchasing - the product - needsSolvencyCheckBusiness: - type: boolean - description: >- - Indicates if a solvency check is required for businesses purchasing - the product - sellingPeriods: - type: array - description: >- - The sellingPeriods of the product. Can contain multiple periods for - the same or different touchpoints, as long as there is no overlap - for the same touchpoint - items: - type: object - required: - - fromInclusive - - toInclusive - - salesTouchpointId - properties: - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2020-01-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2020-01-01T00:00:00.000' - salesTouchpointId: - type: integer - description: The ID of the touchpoint this period applies to - example: 1 - forbiddenPaymentMethodIds: - type: array - description: >- - The IDs of the payment methods that are not allowed to be used - for this touchpoint and period - items: - type: integer - example: 1 - sellingPrices: - type: array - description: >- - The sellingPrices of this product for the touchpoint defined - in this sellingPeriod. Can contain multiple prices, as long as - there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - - internalPrice - properties: - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the - price period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the - price period - example: '2022-06-01T00:00:00.000' - internalPrice: - type: number - example: 908.1234 - purchasePrices: - type: array - description: >- - The purchasePrices of the product. Can contain multiple prices, as - long as there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - properties: - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the price - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the price - period - example: '2022-06-01T00:00:00.000' - UpdateProductRequest: - required: - - productOwnerId - - isRenewable - - isSellableAtHtm - - needsSolvencyCheckConsumer - - needsSolvencyCheckBusiness - type: object - properties: - parentProductId: - type: integer - description: The ID of the parent product (if any) - example: 1 - productCode: - type: string - description: The HTM-internal product code - example: 30901-WL - gboPackageTemplateId: - type: string - description: >- - The ID of the GBO SalesPackage that should be instantiated after - buying this product - example: '30901' - tapConnectProductCode: - type: string - description: >- - The productCode of the TapConnect product that should be issued - after buying this product - example: 1234AB - productGroupMetadataId: - type: string - format: uuid - description: The ID of the productGroupMetadata for administration in U4F - example: 501B17EF-36C4-4039-B92C-6517969B464E - productName: - type: string - description: The name of the product - example: Test product name - productDescription: - type: string - description: The description of the product - example: Test product description - validityPeriod: - required: - - fromInclusive - - toInclusive - type: object - description: The validity period of the product - properties: - validityPeriodId: - type: integer - description: >- - Including a validityPeriodId will update the existing - validityPeriod for this product - if omitted, a new - validityPeriod will be created - example: 1 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start of the validity - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end of the validity period - example: '2022-06-01T00:00:00.000' - productTranslations: - type: array - description: Translations of the product name and description - items: - type: object - required: - - language - - name - - description - 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! - productOwnerId: - type: integer - description: The ID of the owner of the product - example: 1 - marketSegmentIds: - type: array - description: The IDs of the market segments that the product is targeted towards - items: - type: integer - example: 1 - customerSegmentIds: - type: array - description: >- - The IDs of the customer segments that the product is targeted - towards - items: - type: integer - example: 1 - productCategoryId: - type: integer - description: The ID of the category the product belongs to - example: 1 - requiredCustomerLevelId: - type: integer - description: >- - The ID of the required customer level to be allowed to purchase the - product - requiredProducts: - type: array - required: - - requiredProductId - description: >- - The IDs of products that should already be owned by the customer - (for travel products, the validity of the given productIds should - fully overlap on the customer's travel medium) - items: - type: object - properties: - requiredProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is required - example: Benodigd basisproduct - incompatibleProducts: - type: array - required: - - incompatibleProductId - description: >- - The IDs of products that can not be active at the same time as this - product (for travel products, none of the listed productIds should - have overlapping validity with this product on the customer's travel - medium) - items: - type: object - properties: - incompatibleProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is incompatible - example: Kan niet combineren met zichzelf - mandatoryCustomerDataItemIds: - type: array - description: >- - The IDs of the customer data items that should be filled in by the - customer - items: - type: integer - example: 1 - requiredGboPersonalAttributeIds: - type: array - description: >- - GBO specific; the IDs of the GBO Personal Attribute Data (PAD) - elements that should be present (or filled during the order flow) on - the customer's chosen travel medium. This attribute should not be - user-editable, but only be filled by PMT, based on the chosen - gboPackageTemplateId! - items: - type: integer - example: 1 - tokenTypeIds: - type: array - description: The IDs of the token types that the product can be instantiated on - items: - type: integer - example: 1 - paymentMomentId: - type: integer - description: The ID of the payment moment for the product - example: 1 - serviceOptionIds: - type: array - description: The IDs of the service options that are available for this product - items: - type: integer - example: 1 - validityDuration: - type: string - format: duration - description: >- - The validity duration of the product. Should only contain one single - unit of duration (D, W, M, Y) - example: P7D - maxStartInFutureDuration: - type: string - format: duration - description: >- - The maximum amount of time in the future allowed for the start of - the product validity. Should only contain one single unit of - duration (D, W, M, Y) - example: P6W - isRenewable: - type: boolean - description: Indicates if the product is renewable - example: false - sendInvoice: - type: boolean - description: >- - Indicates if an invoice should be sent to the customer after - ordering this product - example: false - imageReference: - type: string - format: uri - description: A reference/URL to the image of the product - example: https://www.htm.nl/nog-onbekende-productafbeelding - productPageUrl: - type: string - format: uri - description: >- - The URL of the product page, to be used by touchpoints which are not - allowed to sell the product, to redirect the customer. If the - product is sold via multiple touchpoints, this URL should point to - the preferred touchpoint for sales - example: https://www.htm.nl/nog-onbekende-productpagina - termsUrl: - type: string - format: uri - description: >- - The URL for the webpage or document containing terms for this - product - example: https://www.htm.nl/nog-onbekende-productvoorwaarden - isSellableAtHtm: - type: boolean - description: >- - Indicates if the product is sellable at HTM. If false, no - sellingPrices/Periods should be defined - this product may only be - used for tracking/reporting purposed, or internal use - needsSolvencyCheckConsumer: - type: boolean - description: >- - Indicates if a solvency check is required for consumers purchasing - the product - needsSolvencyCheckBusiness: - type: boolean - description: >- - Indicates if a solvency check is required for businesses purchasing - the product - sellingPeriods: - type: array - description: >- - The sellingPeriods of the product. Can contain multiple periods for - the same or different touchpoints, as long as there is no overlap - for the same touchpoint - items: - type: object - required: - - fromInclusive - - toInclusive - - salesTouchpointId - properties: - sellingPeriodId: - type: integer - description: >- - Including a sellingPeriodId will update an existing - sellingPeriod for this product - if omitted, a new - sellingPeriod will be created - example: 1 - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2020-01-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2020-01-01T00:00:00.000' - salesTouchpointId: - type: integer - description: The ID of the touchpoint this period applies to - example: 1 - forbiddenPaymentMethodIds: - type: array - description: >- - The IDs of the payment methods that are not allowed to be used - for this touchpoint and period - items: - type: integer - example: 1 - sellingPrices: - type: array - description: >- - The sellingPrices of this product for the touchpoint defined - in this sellingPeriod. Can contain multiple prices, as long as - there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - - internalPrice - properties: - sellingPeriodId: - type: integer - description: >- - Including a sellingPriceId will update an existing - sellingPrice for this product - if omitted, a new - sellingPrice will be created - example: 1 - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the - period - example: '2022-06-01T00:00:00.000' - internalPrice: - type: number - example: 908.1234 - purchasePrices: - type: array - description: >- - The purchasePrices of the product. Can contain multiple prices, as - long as there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - properties: - purchasePriceId: - type: integer - description: >- - Including a purchasePriceId will update an existing - purchasePrice for this product - if omitted, a new - purchasePrice will be created - example: 1 - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2022-06-01T00:00:00.000' - CreateOrUpdateProductResponse: - type: object - properties: - productId: - type: integer - example: 22 - 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: '900901' - 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: '900901' - type: - type: string - message: - type: string - example: Retailer not authorized - description: - type: string - example: The retailer is not allowed to access resource for requested - apiErrorCode: - type: string - example: htm.api.err.40xxx touchpoint - 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 diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud-v2.2.yaml index 3daa4ec..bea0651 100644 --- a/src/openapi/products/products-crud-v2.2.yaml +++ b/src/openapi/products/products-crud-v2.2.yaml @@ -50,8 +50,7 @@ paths: description: No products value: { - "Entries": [], - "href": null + "Entries": [] } getListOneProductNoSellingPeriodsNoTouchpointId: summary: List containing one product without any SellingPeriods (no touchpointId in HTTP-headers) @@ -80,8 +79,7 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": null + ] } getListOneProductNoTouchpointId: summary: List containing one product with 4 currently active SellingPeriods (no touchpointId in HTTP-headers) @@ -110,12 +108,11 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": null + ] } getListOneProductTouchpointId3: summary: List containing one product with 4 currently active SellingPeriods (touchpointId 3 in HTTP-headers) - description: Only products that have active sellingPeriods for touchpoint 3 are returned + description: Only products that have active sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: { "Entries": [ @@ -138,11 +135,10 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": null + ] } - getListMultipleProductsWithPaginationNoTouchpointId: - summary: List containing multiple products with pagination (no touchpointId in HTTP-headers) + getListMultipleProductsNoTouchpointId: + summary: List containing multiple products (no touchpointId in HTTP-headers) description: All products are returned, even if they have no active SellingPeriods value: { @@ -237,12 +233,11 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": "https://api.htm.nl/products?pageNumber=2" + ] } - getListMultipleProductsWithPaginationTuchpointId1: - summary: List containing multiple products with pagination (touchpointId 3 in HTTP-headers) - description: Only products that have active SellingPeriods for touchpoint 3 are returned + getListMultipleProductsTuchpointId1: + summary: List containing multiple products (touchpointId 3 in HTTP-headers) + description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: { "Entries": [ @@ -289,8 +284,7 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": "https://api.htm.nl/products?pageNumber=2" + ] } '400': description: '400' @@ -2147,10 +2141,6 @@ components: type: string format: uri example: https://www.htm.nl/nog-onbekende-product-pagina - href: - type: string - format: uri - example: https://api.htm.nl/products?page=2 ProductPayloadResponse: type: object required: