ovpay/src/openapi/products/products-crud-v2.2.yaml
Max Martens 53aa8cc62c Typo
2024-12-16 17:25:09 +01:00

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