3383 lines
130 KiB
YAML
3383 lines
130 KiB
YAML
openapi: 3.0.1
|
|
info:
|
|
title: ABTProducts
|
|
description: >-
|
|
CRUD APIs for HTM products (based on the new domainmodel v2.2). Internal use
|
|
only; external touchpoints can get read-only, filtered access via the HTM
|
|
Service Engine, using a different endpoint.
|
|
version: '1.0'
|
|
servers:
|
|
- url: https://api.integratielaag.nl/abt/products/1.0
|
|
tags:
|
|
- name: ABTProducts CRUD
|
|
description: >-
|
|
Internal use only; external touchpoints can get read-only, filtered access
|
|
via the HTM Service Engine.
|
|
paths:
|
|
/products:
|
|
get:
|
|
tags:
|
|
- ABTProducts CRUD
|
|
summary: Get a list of all defined HTM products
|
|
description: |-
|
|
Get a list of all HTM products, without any filters. 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 (when a touchpoint HTTP header is present)
|
|
only products that have active sellingPeriods for touchpoints within the same
|
|
retailer as the calling retailer 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
|
|
}
|
|
getListOneProductNoSellingPeriodsNoTouchpointId:
|
|
summary: List containing one product without any SellingPeriods (no touchpointId in HTTP-headers)
|
|
description: All products are returned, even if they have no activesellingPeriods
|
|
value:
|
|
{
|
|
"Entries": [
|
|
{
|
|
"productId": 1,
|
|
"productCode": "30901-WL",
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"productCategory": {
|
|
"productCategoryId": 1,
|
|
"isTravelProduct": true,
|
|
"name": "Kortingsabonnement"
|
|
},
|
|
"tokenTypes": [
|
|
{
|
|
"tokenTypeId": 1,
|
|
"name": "EMV"
|
|
}
|
|
],
|
|
"sellableTouchPointIds": null,
|
|
"amountInclTax": null,
|
|
"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)
|
|
description: All products are returned, even if they have no active SellingPeriods
|
|
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,
|
|
3,
|
|
4
|
|
],
|
|
"amountInclTax": null,
|
|
"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
|
|
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"
|
|
}
|
|
],
|
|
"href": null
|
|
}
|
|
getListMultipleProductsWithPaginationNoTouchpointId:
|
|
summary: List containing multiple products with pagination (no touchpointId in HTTP-headers)
|
|
description: All products are returned, even if they have no active SellingPeriods
|
|
value:
|
|
{
|
|
"Entries": [
|
|
{
|
|
"productId": 1,
|
|
"productCode": "30901-WL",
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"productCategory": {
|
|
"productCategoryId": 1,
|
|
"isTravelProduct": true,
|
|
"name": "Kortingsabonnement"
|
|
},
|
|
"tokenTypes": [
|
|
{
|
|
"tokenTypeId": 1,
|
|
"name": "EMV"
|
|
}
|
|
],
|
|
"sellableTouchPointIds": null,
|
|
"amountInclTax": null,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
|
|
},
|
|
{
|
|
"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,
|
|
3,
|
|
4
|
|
],
|
|
"amountInclTax": null,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
|
|
},
|
|
{
|
|
"productId": 3,
|
|
"productCode": "30001-ML",
|
|
"productName": "HTM 20% korting",
|
|
"productDescription": "Reis een maand lang met 20% korting!",
|
|
"productCategory": {
|
|
"productCategoryId": 1,
|
|
"isTravelProduct": true,
|
|
"name": "Kortingsabonnement"
|
|
},
|
|
"tokenTypes": [
|
|
{
|
|
"tokenTypeId": 1,
|
|
"name": "EMV"
|
|
}
|
|
],
|
|
"sellableTouchPointIds": [
|
|
1,
|
|
2
|
|
],
|
|
"amountInclTax": null,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
|
|
},
|
|
{
|
|
"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": null,
|
|
"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
|
|
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"
|
|
},
|
|
{
|
|
"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"
|
|
}
|
|
],
|
|
"href": "https://api.htm.nl/products?pageNumber=2"
|
|
}
|
|
'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'
|
|
post:
|
|
tags:
|
|
- ABTProducts CRUD
|
|
summary: >-
|
|
Persist a new HTM product as defined in the request body, after
|
|
successful validation
|
|
description: >-
|
|
Persist a new HTM product as defined in the raw JSON request body, but
|
|
only after successful validation of the entire request body. When any
|
|
(subset of) validation fails, nothing is persisted in the underlying
|
|
database.
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CreateProductRequest'
|
|
examples:
|
|
postMinimalProduct:
|
|
summary: >-
|
|
Minimum request body (to be used as minimal parent-template
|
|
for hierarchical products)
|
|
value:
|
|
{
|
|
"productOwnerId": 1,
|
|
"isRenewable": false,
|
|
"isSellableAtHtm": false,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false
|
|
}
|
|
postGboProduct:
|
|
summary: Add new GBO product (non-renewable)
|
|
value:
|
|
{
|
|
"productCode": "30901-WL",
|
|
"gboPackageTemplateId": "30901",
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"validityPeriod": {
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM pilot 90% discount",
|
|
"description": "Travel with 90% discount during the first F&F pilot!"
|
|
}
|
|
],
|
|
"productOwnerId": 1,
|
|
"marketSegmentIds": [
|
|
1
|
|
],
|
|
"customerSegmentIds": [
|
|
2,
|
|
3,
|
|
4,
|
|
5
|
|
],
|
|
"productCategoryId": 1,
|
|
"requiredCustomerLevelId": 1,
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 1,
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItemIds": [
|
|
4,
|
|
5
|
|
],
|
|
"tokenTypeIds": [
|
|
1
|
|
],
|
|
"paymentMomentId": 1,
|
|
"validityDuration": "P7D",
|
|
"maxStartInFutureDuration": "P6W",
|
|
"isRenewable": false,
|
|
"sendInvoice": false,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"salesTouchpointId": 3,
|
|
"sellingPrices": [
|
|
{
|
|
"amountExclTax": 92,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 92.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"amountExclTax": 0,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
}
|
|
]
|
|
}
|
|
postGboProductMultiplePeriods:
|
|
summary: >-
|
|
Add new GBO product (non-renewable, multiple
|
|
sellingPeriods/prices per period)
|
|
value:
|
|
{
|
|
"productCode": "30901-WL",
|
|
"gboPackageTemplateId": "30901",
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"validityPeriod": {
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM pilot 90% discount",
|
|
"description": "Travel with 90% discount during the first F&F pilot!"
|
|
}
|
|
],
|
|
"productOwnerId": 1,
|
|
"marketSegmentIds": [
|
|
1
|
|
],
|
|
"customerSegmentIds": [
|
|
2,
|
|
3,
|
|
4,
|
|
5
|
|
],
|
|
"productCategoryId": 1,
|
|
"requiredCustomerLevelId": 1,
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 2,
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItemIds": [
|
|
4,
|
|
5
|
|
],
|
|
"tokenTypeIds": [
|
|
1
|
|
],
|
|
"paymentMomentId": 1,
|
|
"validityDuration": "P7D",
|
|
"maxStartInFutureDuration": "P6W",
|
|
"isRenewable": false,
|
|
"sendInvoice": false,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"salesTouchpointId": 3,
|
|
"sellingPrices": [
|
|
{
|
|
"amountExclTax": 92,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 92.0000
|
|
},
|
|
{
|
|
"amountExclTax": 101,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 110,
|
|
"fromInclusive": "2025-01-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"internalPrice": 101.0000
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"salesTouchpointId": 2,
|
|
"sellingPrices": [
|
|
{
|
|
"amountExclTax": 92,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 92.0000
|
|
},
|
|
{
|
|
"amountExclTax": 101,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 110,
|
|
"fromInclusive": "2025-01-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"internalPrice": 101.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"amountExclTax": 0,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999"
|
|
}
|
|
]
|
|
}
|
|
postGboPadProduct:
|
|
summary: >-
|
|
Add new GBO product (PAD required, renewable, serviceOptions,
|
|
forbiddenPaymentMethods)
|
|
value:
|
|
{
|
|
"productCode": "35301-MA",
|
|
"gboPackageTemplateId": "35301",
|
|
"productName": "HTM Regio Vrij DH73",
|
|
"productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
|
|
"validityPeriod": {
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM Regio Free DH73",
|
|
"description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area in the Rotterdam The Hague region."
|
|
}
|
|
],
|
|
"productOwnerId": 1,
|
|
"marketSegmentIds": [
|
|
1
|
|
],
|
|
"customerSegmentIds": [
|
|
2,
|
|
3,
|
|
4,
|
|
5
|
|
],
|
|
"productCategoryId": 3,
|
|
"requiredCustomerLevelId": 3,
|
|
"requiredProducts": [
|
|
{
|
|
"requiredProductId": 1,
|
|
"description": "Basisproduct nodig"
|
|
}
|
|
],
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 3,
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItemIds": [
|
|
3,
|
|
4,
|
|
5,
|
|
6
|
|
],
|
|
"requiredGboPersonalAttributeIds": [
|
|
1,
|
|
2,
|
|
3
|
|
],
|
|
"tokenTypeIds": [
|
|
1,
|
|
2,
|
|
3
|
|
],
|
|
"paymentMomentId": 1,
|
|
"serviceOptionIds": [
|
|
1,
|
|
2
|
|
],
|
|
"validityDuration": "P1M",
|
|
"maxStartInFutureDuration": "P6W",
|
|
"isRenewable": true,
|
|
"sendInvoice": true,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"salesTouchpointId": 3,
|
|
"forbiddenPaymentMethodIds": [
|
|
1
|
|
],
|
|
"sellingPrices": [
|
|
{
|
|
"amountExclTax": 5413,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 5900,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 5413.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"amountExclTax": 0,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
}
|
|
]
|
|
}
|
|
postGboProductSupplement:
|
|
summary: TODO - Add new GBO product (supplement with requirements)
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
postTapConnectProduct:
|
|
summary: TODO - Add new TapConnect product
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
postIbanMandate:
|
|
summary: TODO - Add new IBAN mandate (functional product)
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CreateOrUpdateProductResponse'
|
|
'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:
|
|
- ABTProducts CRUD
|
|
summary: Get full details of a single HTM product, specified by the productId
|
|
description: >-
|
|
Get full details of a single HTM product, specified by the productId,
|
|
without any filtering. External consumers can get access to a filtered
|
|
view via the HTM Service Engine, only receiving the information that is
|
|
allowed to be seen by the touchpointId of the consumer.
|
|
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:
|
|
getDetailsGboNonRenewable:
|
|
summary: GBO product (non-renewable)
|
|
value:
|
|
{
|
|
"productId": 1,
|
|
"parentProductId": null,
|
|
"productCode": "30901-WL",
|
|
"gboPackageTemplateId": "30901",
|
|
"tapConnectProductCode": null,
|
|
"productGroupMetadata": null,
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"validityPeriod": {
|
|
"validityPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+00:00"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM pilot 90% discount",
|
|
"description": "Travel with 90% discount during the first F&F pilot!"
|
|
}
|
|
],
|
|
"productOwner": {
|
|
"productOwnerId": 1,
|
|
"name": "Corneel Verstoep",
|
|
"organization": "HTM"
|
|
},
|
|
"marketSegments": [
|
|
{
|
|
"marketSegmentId": 1,
|
|
"name": "B2C"
|
|
}
|
|
],
|
|
"customerSegments": [
|
|
{
|
|
"customerSegmentId": 2,
|
|
"name": "Kind (4-11)"
|
|
},
|
|
{
|
|
"customerSegmentId": 3,
|
|
"name": "Jongere (12-17)"
|
|
},
|
|
{
|
|
"customerSegmentId": 4,
|
|
"name": "Volwassene (18-64)"
|
|
},
|
|
{
|
|
"customerSegmentId": 5,
|
|
"name": "Oudere (65+)"
|
|
}
|
|
],
|
|
"productCategory": {
|
|
"productCategoryId": 1,
|
|
"isTravelProduct": true,
|
|
"name": "Kortingsabonnement"
|
|
},
|
|
"requiredCustomerLevel": {
|
|
"requiredCustomerLevelId": 1,
|
|
"name": "anonymous"
|
|
},
|
|
"requiredProducts": null,
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 1,
|
|
"productName": "HTM pilot 90% korting",
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItems": [
|
|
{
|
|
"mandatoryCustomerDataItemId": 4,
|
|
"customerDataItem": "emailAddress"
|
|
},
|
|
{
|
|
"mandatoryCustomerDataItemId": 5,
|
|
"customerDataItem": "ovPayToken"
|
|
}
|
|
],
|
|
"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://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"sellingPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+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": 1,
|
|
"amountExclTax": 92,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"taxCode": "V09",
|
|
"taxPercentageAmount": 9,
|
|
"description": "BTW VERKOOP LAAG 9%"
|
|
},
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+00:00",
|
|
"internalPrice": 92.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"purchasePriceId": 1,
|
|
"amountExclTax": 0,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"taxCode": "V0",
|
|
"taxPercentageAmount": 0,
|
|
"description": "BTW VERKOOP NUL"
|
|
},
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+00:00"
|
|
}
|
|
],
|
|
"auditTrail": [
|
|
{
|
|
"auditTrailId": 2,
|
|
"action": "update",
|
|
"user": "api",
|
|
"timestamp": "2024-09-03T08:39:38.000+00:00"
|
|
},
|
|
{
|
|
"auditTrailId": 1,
|
|
"action": "insert",
|
|
"user": "api",
|
|
"timestamp": "2024-09-03T08:38:24.000+00:00"
|
|
}
|
|
]
|
|
}
|
|
getDetailsGboProductMultiplePeriods:
|
|
summary: GBO product (non-renewable, multiple sellingPeriods/prices per period)
|
|
value:
|
|
{
|
|
"productId": 2,
|
|
"parentProductId": null,
|
|
"productCode": "30901-WL",
|
|
"gboPackageTemplateId": "30901",
|
|
"tapConnectProductCode": null,
|
|
"productGroupMetadata": null,
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"validityPeriod": {
|
|
"validityPeriodId": 2,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2025-12-31T23:59:59.999+00:00"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM pilot 90% discount",
|
|
"description": "Travel with 90% discount during the first F&F pilot!"
|
|
}
|
|
],
|
|
"productOwner": {
|
|
"productOwnerId": 1,
|
|
"name": "Corneel Verstoep",
|
|
"organization": "HTM"
|
|
},
|
|
"marketSegments": [
|
|
{
|
|
"marketSegmentId": 1,
|
|
"name": "B2C"
|
|
}
|
|
],
|
|
"customerSegments": [
|
|
{
|
|
"customerSegmentId": 2,
|
|
"name": "Kind (4-11)"
|
|
},
|
|
{
|
|
"customerSegmentId": 3,
|
|
"name": "Jongere (12-17)"
|
|
},
|
|
{
|
|
"customerSegmentId": 4,
|
|
"name": "Volwassene (18-64)"
|
|
},
|
|
{
|
|
"customerSegmentId": 5,
|
|
"name": "Oudere (65+)"
|
|
}
|
|
],
|
|
"productCategory": {
|
|
"productCategoryId": 1,
|
|
"isTravelProduct": true,
|
|
"name": "Kortingsabonnement"
|
|
},
|
|
"requiredCustomerLevel": {
|
|
"requiredCustomerLevelId": 1,
|
|
"name": "anonymous"
|
|
},
|
|
"requiredProducts": null,
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 2,
|
|
"productName": "HTM pilot 90% korting",
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItems": [
|
|
{
|
|
"mandatoryCustomerDataItemId": 4,
|
|
"customerDataItem": "emailAddress"
|
|
},
|
|
{
|
|
"mandatoryCustomerDataItemId": 5,
|
|
"customerDataItem": "ovPayToken"
|
|
}
|
|
],
|
|
"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://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"sellingPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2025-12-31T23:59:59.999+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": 1,
|
|
"amountExclTax": 92,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"taxCode": "V09",
|
|
"taxPercentageAmount": 9,
|
|
"description": "BTW VERKOOP LAAG 9%"
|
|
},
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+00:00",
|
|
"internalPrice": 92.0000
|
|
},
|
|
{
|
|
"sellingPriceId": 2,
|
|
"amountExclTax": 101,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"taxCode": "V09",
|
|
"taxPercentageAmount": 9,
|
|
"description": "BTW VERKOOP LAAG 9%"
|
|
},
|
|
"amountInclTax": 110,
|
|
"fromInclusive": "2025-01-01T00:00:00.000+00:00",
|
|
"toInclusive": "2025-12-31T23:59:59.999+00:00",
|
|
"internalPrice": 101.0000
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"sellingPeriodId": 2,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2025-12-31T23:59:59.999+00:00",
|
|
"salesTouchpoint": {
|
|
"salesTouchpointId": 2,
|
|
"name": "SMP (Team Incident Masters)",
|
|
"isActive": false,
|
|
"retailer": {
|
|
"retailerId": 1000,
|
|
"name": "HTM interne 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": 3,
|
|
"amountExclTax": 92,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"taxCode": "V09",
|
|
"taxPercentageAmount": 9,
|
|
"description": "BTW VERKOOP LAAG 9%"
|
|
},
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+00:00",
|
|
"internalPrice": 92.0000
|
|
},
|
|
{
|
|
"sellingPriceId": 4,
|
|
"amountExclTax": 101,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"taxCode": "V09",
|
|
"taxPercentageAmount": 9,
|
|
"description": "BTW VERKOOP LAAG 9%"
|
|
},
|
|
"amountInclTax": 110,
|
|
"fromInclusive": "2025-01-01T00:00:00.000+00:00",
|
|
"toInclusive": "2025-12-31T23:59:59.999+00:00",
|
|
"internalPrice": 101.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"purchasePriceId": 1,
|
|
"amountExclTax": 0,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"taxCode": "V0",
|
|
"taxPercentageAmount": 0,
|
|
"description": "BTW VERKOOP NUL"
|
|
},
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2025-12-31T23:59:59.999+00:00"
|
|
}
|
|
],
|
|
"auditTrail": [
|
|
{
|
|
"auditTrailId": 2,
|
|
"action": "update",
|
|
"user": "api",
|
|
"timestamp": "2024-09-03T08:39:38.000+00:00"
|
|
},
|
|
{
|
|
"auditTrailId": 1,
|
|
"action": "insert",
|
|
"user": "api",
|
|
"timestamp": "2024-09-03T08:38:24.000+00:00"
|
|
}
|
|
]
|
|
}
|
|
getDetailsGboPadProduct:
|
|
summary: GBO product (PAD required, renewable, serviceOptions, forbiddenPaymentMethods)
|
|
value:
|
|
{
|
|
"productId": 3,
|
|
"parentProductId": null,
|
|
"productCode": "35301-MA",
|
|
"gboPackageTemplateId": "35301",
|
|
"tapConnectProductCode": null,
|
|
"productGroupMetadata": null,
|
|
"productName": "HTM Regio Vrij DH73",
|
|
"productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
|
|
"validityPeriod": {
|
|
"validityPeriodId": 3,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+00:00"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM Regio Free DH73",
|
|
"description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area in the Rotterdam The Hague region."
|
|
}
|
|
],
|
|
"productOwner": {
|
|
"productOwnerId": 1,
|
|
"name": "Corneel Verstoep",
|
|
"organization": "HTM"
|
|
},
|
|
"marketSegments": [
|
|
{
|
|
"marketSegmentId": 1,
|
|
"name": "B2C"
|
|
}
|
|
],
|
|
"customerSegments": [
|
|
{
|
|
"customerSegmentId": 2,
|
|
"name": "Kind (4-11)"
|
|
},
|
|
{
|
|
"customerSegmentId": 3,
|
|
"name": "Jongere (12-17)"
|
|
},
|
|
{
|
|
"customerSegmentId": 4,
|
|
"name": "Volwassene (18-64)"
|
|
},
|
|
{
|
|
"customerSegmentId": 5,
|
|
"name": "Oudere (65+)"
|
|
}
|
|
],
|
|
"productCategory": {
|
|
"productCategoryId": 3,
|
|
"isTravelProduct": true,
|
|
"name": "Afgekocht reisrecht"
|
|
},
|
|
"requiredCustomerLevel": {
|
|
"requiredCustomerLevelId": 3,
|
|
"name": "account"
|
|
},
|
|
"requiredProducts": null,
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 3,
|
|
"productName": "HTM Regio Vrij DH73",
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItems": [
|
|
{
|
|
"mandatoryCustomerDataItemId": 3,
|
|
"customerDataItem": "dateOfBirth"
|
|
},
|
|
{
|
|
"mandatoryCustomerDataItemId": 4,
|
|
"customerDataItem": "emailAddress"
|
|
},
|
|
{
|
|
"mandatoryCustomerDataItemId": 5,
|
|
"customerDataItem": "ovPayToken"
|
|
},
|
|
{
|
|
"mandatoryCustomerDataItemId": 6,
|
|
"customerDataItem": "directDebitMandate"
|
|
}
|
|
],
|
|
"requiredGboPersonalAttributes": [
|
|
{
|
|
"requiredGboPersonalAttributeId": 1,
|
|
"name": "NAME"
|
|
},
|
|
{
|
|
"requiredGboPersonalAttributeId": 2,
|
|
"name": "BIRTHDATE"
|
|
},
|
|
{
|
|
"requiredGboPersonalAttributeId": 3,
|
|
"name": "PHOTO"
|
|
}
|
|
],
|
|
"tokenTypes": [
|
|
{
|
|
"tokenTypeId": 1,
|
|
"name": "EMV"
|
|
},
|
|
{
|
|
"tokenTypeId": 2,
|
|
"name": "OVpas physical"
|
|
},
|
|
{
|
|
"tokenTypeId": 3,
|
|
"name": "OVpas digital"
|
|
}
|
|
],
|
|
"paymentMoment": {
|
|
"paymentMomentId": 1,
|
|
"name": "prepaid"
|
|
},
|
|
"serviceOptions": [
|
|
{
|
|
"serviceOptionId": 1,
|
|
"action": "cancellableTermAhead",
|
|
"description": "Per termijn vooruit opzegbaar"
|
|
},
|
|
{
|
|
"serviceOptionId": 2,
|
|
"action": "cancellableWithin14Days",
|
|
"description": "Binnen 14 dagen na aanschaf opzegbaar, met restitutie en herberekening ritten met product"
|
|
}
|
|
],
|
|
"validityDuration": "P1M",
|
|
"maxStartInFutureDuration": "P6W",
|
|
"isRenewable": true,
|
|
"sendInvoice": true,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"sellingPeriodId": 5,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+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": [
|
|
{
|
|
"forbiddenPaymentMethodId": 1,
|
|
"name": "Credit Card",
|
|
"issuer": "American Express"
|
|
}
|
|
],
|
|
"sellingPrices": [
|
|
{
|
|
"sellingPriceId": 5,
|
|
"amountExclTax": 5413,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"taxCode": "V09",
|
|
"taxPercentageAmount": 9,
|
|
"description": "BTW VERKOOP LAAG 9%"
|
|
},
|
|
"amountInclTax": 5900,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+00:00",
|
|
"internalPrice": 5413.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"purchasePriceId": 1,
|
|
"amountExclTax": 0,
|
|
"taxMetadata": {
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"taxCode": "V0",
|
|
"taxPercentageAmount": 0,
|
|
"description": "BTW VERKOOP NUL"
|
|
},
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
|
"toInclusive": "2024-12-31T23:59:59.999+00:00"
|
|
}
|
|
],
|
|
"auditTrail": [
|
|
{
|
|
"auditTrailId": 2,
|
|
"action": "update",
|
|
"user": "api",
|
|
"timestamp": "2024-09-03T08:39:38.000+00:00"
|
|
},
|
|
{
|
|
"auditTrailId": 1,
|
|
"action": "insert",
|
|
"user": "api",
|
|
"timestamp": "2024-09-03T08:38:24.000+00:00"
|
|
}
|
|
]
|
|
}
|
|
getDetailsGboProductSupplement:
|
|
summary: TODO - GBO product (supplement with requirements)
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
getDetailsTapConnectProduct:
|
|
summary: TODO - TapConnect product
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
getDetailsIbanMandate:
|
|
summary: TODO - IBAN mandate (functional product)
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
'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'
|
|
put:
|
|
tags:
|
|
- ABTProducts CRUD
|
|
summary: >-
|
|
Replace the entire product (as specified by the productId) with the
|
|
given raw JSON request body, after successful validation
|
|
description: >-
|
|
For nested JSON, including id's for reference tables indicates an update
|
|
of an existing reference - no id's indicates a new reference
|
|
parameters:
|
|
- name: productId
|
|
in: path
|
|
required: true
|
|
style: simple
|
|
description: The id of the product to replace/update
|
|
schema:
|
|
type: integer
|
|
example: 1
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UpdateProductRequest'
|
|
examples:
|
|
updateMinimalProduct:
|
|
summary: >-
|
|
Minimum request body (to be used as minimal parent-template
|
|
for hierarchical products)
|
|
value:
|
|
{
|
|
"productOwnerId": 1,
|
|
"isRenewable": false,
|
|
"isSellableAtHtm": false,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false
|
|
}
|
|
updateGboProduct:
|
|
summary: Update existing GBO product (non-renewable)
|
|
value:
|
|
{
|
|
"productCode": "30901-WL",
|
|
"gboPackageTemplateId": "30901",
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"validityPeriod": {
|
|
"validityPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM pilot 90% discount",
|
|
"description": "Travel with 90% discount during the first F&F pilot!"
|
|
}
|
|
],
|
|
"productOwnerId": 1,
|
|
"marketSegmentIds": [
|
|
1
|
|
],
|
|
"customerSegmentIds": [
|
|
2,
|
|
3,
|
|
4,
|
|
5
|
|
],
|
|
"productCategoryId": 1,
|
|
"requiredCustomerLevelId": 1,
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 1,
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItemIds": [
|
|
4,
|
|
5
|
|
],
|
|
"tokenTypeIds": [
|
|
1
|
|
],
|
|
"paymentMomentId": 1,
|
|
"validityDuration": "P7D",
|
|
"maxStartInFutureDuration": "P6W",
|
|
"isRenewable": false,
|
|
"sendInvoice": false,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"sellingPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"salesTouchpointId": 3,
|
|
"sellingPrices": [
|
|
{
|
|
"sellingPriceId": 1,
|
|
"amountExclTax": 92,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 92.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"purchasePriceId": 1,
|
|
"amountExclTax": 0,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
}
|
|
]
|
|
}
|
|
advancedUpdateGboProduct:
|
|
summary: >-
|
|
Advanced update (remove mandatoryCustomerDataItem references,
|
|
add new second sellingPeriod)
|
|
value:
|
|
{
|
|
"productCode": "30901-WL",
|
|
"gboPackageTemplateId": "30901",
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"validityPeriod": {
|
|
"validityPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM pilot 90% discount",
|
|
"description": "Travel with 90% discount during the first F&F pilot!"
|
|
}
|
|
],
|
|
"productOwnerId": 1,
|
|
"marketSegmentIds": [
|
|
1
|
|
],
|
|
"customerSegmentIds": [
|
|
2,
|
|
3,
|
|
4,
|
|
5
|
|
],
|
|
"productCategoryId": 1,
|
|
"requiredCustomerLevelId": 1,
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 1,
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItemIds": null,
|
|
"tokenTypeIds": [
|
|
1
|
|
],
|
|
"paymentMomentId": 1,
|
|
"validityDuration": "P7D",
|
|
"maxStartInFutureDuration": "P6W",
|
|
"isRenewable": false,
|
|
"sendInvoice": false,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"sellingPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"salesTouchpointId": 3,
|
|
"sellingPrices": [
|
|
{
|
|
"sellingPriceId": 1,
|
|
"amountExclTax": 92,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 92.0000
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"salesTouchpointId": 2,
|
|
"sellingPrices": [
|
|
{
|
|
"amountExclTax": 92,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 92.0000
|
|
},
|
|
{
|
|
"amountExclTax": 101,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 110,
|
|
"fromInclusive": "2025-01-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"internalPrice": 101.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"purchasePriceId": 1,
|
|
"amountExclTax": 0,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
}
|
|
]
|
|
}
|
|
updateGboProductMultiplePeriods:
|
|
summary: >-
|
|
Update existing GBO product (non-renewable, multiple
|
|
sellingPeriods/prices per period)
|
|
value:
|
|
{
|
|
"productCode": "30901-WL",
|
|
"gboPackageTemplateId": "30901",
|
|
"productName": "HTM pilot 90% korting",
|
|
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
|
"validityPeriod": {
|
|
"validityPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM pilot 90% discount",
|
|
"description": "Travel with 90% discount during the first F&F pilot!"
|
|
}
|
|
],
|
|
"productOwnerId": 1,
|
|
"marketSegmentIds": [
|
|
1
|
|
],
|
|
"customerSegmentIds": [
|
|
2,
|
|
3,
|
|
4,
|
|
5
|
|
],
|
|
"productCategoryId": 1,
|
|
"requiredCustomerLevelId": 1,
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 2,
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItemIds": [
|
|
4,
|
|
5
|
|
],
|
|
"tokenTypeIds": [
|
|
1
|
|
],
|
|
"paymentMomentId": 1,
|
|
"validityDuration": "P7D",
|
|
"maxStartInFutureDuration": "P6W",
|
|
"isRenewable": false,
|
|
"sendInvoice": false,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"sellingPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"salesTouchpointId": 3,
|
|
"sellingPrices": [
|
|
{
|
|
"sellingPriceId": 1,
|
|
"amountExclTax": 92,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 92.0000
|
|
},
|
|
{
|
|
"sellingPriceId": 2,
|
|
"amountExclTax": 101,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 110,
|
|
"fromInclusive": "2025-01-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"internalPrice": 101.0000
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"sellingPeriodId": 2,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"salesTouchpointId": 2,
|
|
"sellingPrices": [
|
|
{
|
|
"sellingPriceId": 3,
|
|
"amountExclTax": 92,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 100,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 92.0000
|
|
},
|
|
{
|
|
"sellingPriceId": 4,
|
|
"amountExclTax": 101,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 110,
|
|
"fromInclusive": "2025-01-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999",
|
|
"internalPrice": 101.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"purchasePriceId": 1,
|
|
"amountExclTax": 0,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2025-12-31T23:59:59.999"
|
|
}
|
|
]
|
|
}
|
|
updateGboPadProduct:
|
|
summary: >-
|
|
Update existing GBO product (PAD required, renewable,
|
|
serviceOptions, forbiddenPaymentMethods)
|
|
value:
|
|
{
|
|
"productCode": "35301-MA",
|
|
"gboPackageTemplateId": "35301",
|
|
"productName": "HTM Regio Vrij DH73",
|
|
"productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
|
|
"validityPeriod": {
|
|
"validityPeriodId": 3,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
},
|
|
"productTranslations": [
|
|
{
|
|
"language": "en",
|
|
"name": "HTM Regio Free DH73",
|
|
"description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area in the Rotterdam The Hague region."
|
|
}
|
|
],
|
|
"productOwnerId": 1,
|
|
"marketSegmentIds": [
|
|
1
|
|
],
|
|
"customerSegmentIds": [
|
|
2,
|
|
3,
|
|
4,
|
|
5
|
|
],
|
|
"productCategoryId": 3,
|
|
"requiredCustomerLevelId": 3,
|
|
"requiredProducts": [
|
|
{
|
|
"requiredProductId": 1,
|
|
"description": "Basisproduct nodig"
|
|
}
|
|
],
|
|
"incompatibleProducts": [
|
|
{
|
|
"incompatibleProductId": 3,
|
|
"description": "Kan niet combineren met zichzelf"
|
|
}
|
|
],
|
|
"mandatoryCustomerDataItemIds": [
|
|
3,
|
|
4,
|
|
5,
|
|
6
|
|
],
|
|
"requiredGboPersonalAttributeIds": [
|
|
1,
|
|
2,
|
|
3
|
|
],
|
|
"tokenTypeIds": [
|
|
1,
|
|
2,
|
|
3
|
|
],
|
|
"paymentMomentId": 1,
|
|
"serviceOptionIds": [
|
|
1,
|
|
2
|
|
],
|
|
"validityDuration": "P1M",
|
|
"maxStartInFutureDuration": "P6W",
|
|
"isRenewable": true,
|
|
"sendInvoice": true,
|
|
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
|
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
|
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
|
"isSellableAtHtm": true,
|
|
"needsSolvencyCheckConsumer": false,
|
|
"needsSolvencyCheckBusiness": false,
|
|
"sellingPeriods": [
|
|
{
|
|
"sellingPeriodId": 1,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"salesTouchpointId": 3,
|
|
"forbiddenPaymentMethodIds": [
|
|
1
|
|
],
|
|
"sellingPrices": [
|
|
{
|
|
"sellingPriceId": 1,
|
|
"amountExclTax": 5413,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
|
|
"amountInclTax": 5900,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999",
|
|
"internalPrice": 5413.0000
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"purchasePrices": [
|
|
{
|
|
"purchasePriceId": 1,
|
|
"amountExclTax": 0,
|
|
"taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
|
|
"amountInclTax": 0,
|
|
"fromInclusive": "2024-09-01T00:00:00.000",
|
|
"toInclusive": "2024-12-31T23:59:59.999"
|
|
}
|
|
]
|
|
}
|
|
updateGboProductSupplement:
|
|
summary: TODO - Update existing GBO product (supplement with requirements)
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
updateTapConnectProduct:
|
|
summary: TODO - Update existing TapConnect product
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
updateIbanMandate:
|
|
summary: TODO - Update existing IBAN mandate (functional product)
|
|
value:
|
|
{
|
|
"productName": "TODO"
|
|
}
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CreateOrUpdateProductResponse'
|
|
'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'
|
|
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
|
|
href:
|
|
type: string
|
|
format: uri
|
|
example: https://api.htm.nl/products?page=2
|
|
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
|