From 024e14f31c695c59ca3c93d18e931688a8d8bc26 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Wed, 5 Feb 2025 13:48:50 +0100 Subject: [PATCH] Remove some remaining pagination stuff, add Regio Vrij details example, add more explanation and example descriptions --- src/openapi/products/SE-products.yaml | 1970 +++++++++++------- src/openapi/products/products-crud-v2.2.yaml | 34 +- 2 files changed, 1213 insertions(+), 791 deletions(-) diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml index c76fc51..c939ff6 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products.yaml @@ -20,11 +20,11 @@ paths: 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. \ - 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. + Nb: touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2. parameters: - name: parentProductId in: query @@ -48,12 +48,44 @@ paths: description: No products value: { - "Entries": [], - "href": null + "Entries": [] + } + getListOneProductTouchpointId1: + summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1) + description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned + value: + { + "Entries": [ + { + "productId": 2, + "productCode": "312AB-WL", + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode" + }, + "tokenTypes": null, + "sellableTouchPointIds": [ + 1, + 2 + ], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", + "method": "GET" + } + } + } + ] } getListOneProductTouchpointId3: summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3) - description: Only products that have active sellingPeriods for touchpoint 3 are returned + 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": [ @@ -84,9 +116,41 @@ paths: } ] } - getListMultipleProductsWithPaginationTuchpointId1: - summary: List containing multiple products with pagination (called by touchpointId 3) - description: Only products that have active SellingPeriods for touchpoint 3 are returned + getListOneProductNoPriceTouchpointId3: + summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4) + description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product. + value: + { + "Entries": [ + { + "productId": 49, + "productCode": null, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "tokenTypes": null, + "sellableTouchpointIds": [ + 4 + ], + "amountInclTax": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/49", + "method": "GET" + } + } + } + ] + } + getListMultipleProductsTouchpointId3: + summary: List containing multiple products (called by touchpointId 3) + description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: { "Entries": [ @@ -175,11 +239,19 @@ paths: get: tags: - ServiceEngine Products - summary: Get full details of a single HTM product (including all child products), specified by the productId + summary: Get more details for 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. + Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \ + Only information that is allowed to be seen by the calling touchpoint is returned; i.e. only currently + active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices + for other touchpoints are thus filtered out. + + The response contains the full product tree, including all child products (`productVariants`) of the given productId. + + Touchpoints can only retrieve details for products that they are allowed to SELL at the time of the request (i.e. its touchpointId is included in the + `sellableTouchPointIds` array in the products list response). A touchpoint can determine its own touchpointId by checking the `X-HTM-TOUCHPOINT-ID-HEADER` HTTP header. + + When a touchpoint tries to retrieve details for a product that it is not allowed to sell, a 403 error is thrown. parameters: - name: productId in: path @@ -197,12 +269,1119 @@ paths: schema: $ref: '#/components/schemas/ProductPayloadResponse' examples: - WIP touchpoint-filtered response: - summary: WIP touchpoint-filtered response + getDetailsTreeRegioVrijTouchpointId3: + summary: Details of Regio Vrij product and (part of) its productVariants (called by touchpointId 3) + description: |- + All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product + and (part of) its productVariants; the full tree would be too huge to be useful as an example. + The full depth of the tree is included for the HL62 Reduced Fare Variant. value: { - "WIP": null + "productId": 49, + "parentProductId": null, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "validityPeriod": { + "validityPeriodId": 161, + "fromInclusive": "2024-11-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region." + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 99, + "fromInclusive": "2024-11-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": null, + "sellingPrices": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 109, + "parentProductId": 49, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 219, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 143, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": null, + "sellingPrices": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 114, + "parentProductId": 109, + "productCode": null, + "gboPackageTemplateId": "33629", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - Voltarief - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 224, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Full Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 148, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": null, + "sellingPrices": [ + { + "sellingPriceId": 139, + "amountExclTax": 5412, + "amountInclTax": 5900, + "fromInclusive": "2024-12-31T23:00:00.000+00:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 115, + "parentProductId": 109, + "productCode": null, + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - Reductietarief - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 225, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 149, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": null, + "sellingPrices": [ + { + "sellingPriceId": 140, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 116, + "parentProductId": 115, + "productCode": "33630-ML", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 226, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 150, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": null, + "sellingPrices": [ + { + "sellingPriceId": 141, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 117, + "parentProductId": 115, + "productCode": "33630-MA", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 227, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 151, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": null, + "sellingPrices": [ + { + "sellingPriceId": 142, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + ] + }, + { + "productId": 112, + "parentProductId": 49, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - HL65", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65", + "validityPeriod": { + "validityPeriodId": 222, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - HL65", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 146, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": null, + "sellingPrices": null + } + ], + "purchasePrices": null, + "productVariants": null + } + ] } + '401': + description: '401' + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '403': + description: '403' + content: + application/json: + schema: + $ref: '#/components/schemas/403Response' + examples: + Not allowed to see product details: + summary: Not allowed to see product details + value: + { + "code": "403", + "type": "Forbidden", + "message": "Touchpoint not authorized to see product details", + "description": "The touchpoint is currently not allowed to sell this product and thus can not see its details" + } + '404': + description: '404' + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: '500' + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' components: schemas: TaxMetadataResponse: @@ -839,754 +2018,6 @@ components: 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: @@ -1609,7 +2040,7 @@ components: properties: code: type: string - example: '900901' + example: '401' type: type: string message: @@ -1628,18 +2059,19 @@ components: properties: code: type: string - example: '900901' + example: '403' type: type: string + example: "Forbidden" message: type: string - example: Retailer not authorized + example: Retailer not authorized to access product details description: type: string - example: The retailer is not allowed to access resource for requested + example: The touchpoint is not part of a retailer that isallowed to access product details for this productId apiErrorCode: type: string - example: htm.api.err.40xxx touchpoint + example: htm.api.err.40xxx 404Response: type: object properties: 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: