From 5de1c15062dab1ad61eb3d3502933d83f591ae70 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 24 Mar 2025 11:19:43 +0100 Subject: [PATCH 1/7] Update ABTProducts CRUD --- .../PadpReferenceApi/.gitignore | 307 ++ src/openapi/products/products-crud-v2.4.yaml | 3347 +++++++++++++++++ 2 files changed, 3654 insertions(+) create mode 100644 src/dotnet/padp-reference-web/PadpReferenceApi/.gitignore create mode 100644 src/openapi/products/products-crud-v2.4.yaml diff --git a/src/dotnet/padp-reference-web/PadpReferenceApi/.gitignore b/src/dotnet/padp-reference-web/PadpReferenceApi/.gitignore new file mode 100644 index 0000000..bfc4102 --- /dev/null +++ b/src/dotnet/padp-reference-web/PadpReferenceApi/.gitignore @@ -0,0 +1,307 @@ +######################## +## ## +## CUSTOM IGNORE LIST ## +## ## +######################## + +# Ignore appsettings.json as it contains credentials - only the template should be shared! +appsettings.json + +# Also ignore pfx and pem files for the same reason +*.pfx +*.pem + + + + + + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +# VS Code +.vscode/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Typescript v1 declaration files +typings/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs \ No newline at end of file diff --git a/src/openapi/products/products-crud-v2.4.yaml b/src/openapi/products/products-crud-v2.4.yaml new file mode 100644 index 0000000..1d64415 --- /dev/null +++ b/src/openapi/products/products-crud-v2.4.yaml @@ -0,0 +1,3347 @@ +openapi: 3.0.1 +info: + title: ABTProducts + description: >- + CRUD APIs for HTM products (based on the new domainmodel v2.4). 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 that refer to a given parentProductId (or without parent, if not specified), without any other 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": [] + } + 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, + "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" + } + ] + } + 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, + "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" + } + ] + } + 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 and/or 4 (part of same retailer) are returned + value: + { + "Entries": [ + { + "productId": 2, + "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" + } + ] + } + getListMultipleProductsNoTouchpointId: + summary: List containing multiple products (no touchpointId in HTTP-headers) + description: All products are returned, even if they have no active SellingPeriods + value: + { + "Entries": [ + { + "productId": 1, + "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, + "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, + "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, + "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" + } + ] + } + getListMultipleProductsTuchpointId1: + summary: List containing multiple products (touchpointId 3 in HTTP-headers) + description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned + value: + { + "Entries": [ + { + "productId": 2, + "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, + "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" + } + ] + } + '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: + { + "fikoArticleNumber": "1234", + "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": [ + 6, + 7 + ], + "allowedGboAgeProfileIds": [ + 1, + 2 + ], + "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, + "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, + "fromInclusive": "2024-09-01T00:00:00.000", + "toInclusive": "2024-12-31T23:59:59.999", + "internalPrice": 92.0000 + } + ] + } + ], + "purchasePrices": [ + { + "amountExclTax": 0, + "amountInclTax": 0, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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: + { + "fikoArticleNumber": "1234", + "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": [ + 6, + 7 + ], + "allowedGboAgeProfileIds": [ + 1, + 2 + ], + "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: + { + "fikoArticleNumber": "1234", + "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": [ + 6, + 7 + ], + "allowedGboAgeProfileIds": [ + 1, + 2 + ], + "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, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "30901", + "tapConnectProductCode": 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": 6, + "name": "Student" + }, + { + "customerSegmentId": 7, + "name": "Ooievaarspas-gerechtigde" + } + ], + "allowedGboAgeProfiles": [ + { + "gboAgeProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageUntilInclusive": 11 + }, + { + "gboAgeProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageUntilInclusive": 18 + } + ], + "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, + "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "30901", + "tapConnectProductCode": 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": 6, + "name": "Student" + }, + { + "customerSegmentId": 7, + "name": "Ooievaarspas-gerechtigde" + } + ], + "allowedGboAgeProfiles": [ + { + "gboAgeProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageUntilInclusive": 11 + }, + { + "gboAgeProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageUntilInclusive": 18 + } + ], + "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, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "amountInclTax": 110, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "amountInclTax": 0, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "35301", + "tapConnectProductCode": 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": 6, + "name": "Student" + }, + { + "customerSegmentId": 7, + "name": "Ooievaarspas-gerechtigde" + } + ], + "allowedGboAgeProfiles": [ + { + "gboAgeProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageUntilInclusive": 11 + }, + { + "gboAgeProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageUntilInclusive": 18 + } + ], + "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, + "amountInclTax": 5900, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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: + { + "fikoArticleNumber": "1234", + "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": [ + 6, + 7 + ], + "allowedGboAgeProfileIds": [ + 1, + 2 + ], + "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, + "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, + "fromInclusive": "2024-09-01T00:00:00.000", + "toInclusive": "2024-12-31T23:59:59.999", + "internalPrice": 92.0000 + } + ] + } + ], + "purchasePrices": [ + { + "purchasePriceId": 1, + "amountExclTax": 0, + "amountInclTax": 0, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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: + { + "fikoArticleNumber": "1234", + "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": [ + 6, + 7 + ], + "allowedGboAgeProfileIds": [ + 1, + 2 + ], + "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, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, + "fromInclusive": "2024-09-01T00:00:00.000", + "toInclusive": "2024-12-31T23:59:59.999", + "internalPrice": 92.0000 + }, + { + "amountExclTax": 101, + "amountInclTax": 110, + "taxCode": "V09", + "taxPercentage": 9.0000, + "fromInclusive": "2025-01-01T00:00:00.000", + "toInclusive": "2025-12-31T23:59:59.999", + "internalPrice": 101.0000 + } + ] + } + ], + "purchasePrices": [ + { + "purchasePriceId": 1, + "amountExclTax": 0, + "amountInclTax": 0, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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: + { + "fikoArticleNumber": "1234", + "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": [ + 6, + 7 + ], + "allowedGboAgeProfileIds": [ + 1, + 2 + ], + "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, + "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, + "fromInclusive": "2024-09-01T00:00:00.000", + "toInclusive": "2024-12-31T23:59:59.999", + "internalPrice": 92.0000 + }, + { + "sellingPriceId": 2, + "amountExclTax": 101, + "amountInclTax": 110, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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, + "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, + "fromInclusive": "2024-09-01T00:00:00.000", + "toInclusive": "2024-12-31T23:59:59.999", + "internalPrice": 92.0000 + }, + { + "sellingPriceId": 4, + "amountExclTax": 101, + "amountInclTax": 110, + "taxCode": "V09", + "taxPercentage": 9.0000, + "fromInclusive": "2025-01-01T00:00:00.000", + "toInclusive": "2025-12-31T23:59:59.999", + "internalPrice": 101.0000 + } + ] + } + ], + "purchasePrices": [ + { + "purchasePriceId": 1, + "amountExclTax": 0, + "amountInclTax": 0, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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: + { + "fikoArticleNumber": "1234", + "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": [ + 6, + 7 + ], + "allowedGboAgeProfileIds": [ + 1, + 2 + ], + "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, + "amountInclTax": 5900, + "taxCode": "V09", + "taxPercentage": 9.0000, + "fromInclusive": "2024-09-01T00:00:00.000", + "toInclusive": "2024-12-31T23:59:59.999", + "internalPrice": 5413.0000 + } + ] + } + ], + "purchasePrices": [ + { + "purchasePriceId": 1, + "amountExclTax": 0, + "amountInclTax": 0, + "taxCode": "V09", + "taxPercentage": 9.0000, + "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: + GboAgeProfileResponse: + type: object + required: + - gboAgeProfileId + - name + - ageFromInclusive + - ageUntilInclusive + properties: + gboAgeProfileId: + type: integer + example: 1 + name: + type: string + example: Kind (4 t/m 11 jaar) + ageFromInclusive: + type: integer + description: The minimum age that the GBO age profile applies to + example: 4 + ageUntilInclusive: + type: integer + description: The maximum age that the GBO age profile applies to + example: 11 + 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 + - taxCode + - taxPercentage + - amountInclTax + - fromInclusive + - toInclusive + - internalPrice + properties: + sellingPriceId: + type: integer + example: 1 + amountExclTax: + type: integer + example: 750 + taxCode: + type: string + example: 'V09' + taxPercentage: + type: number + example: 9.0000 + 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 + - amountInclTax + - fromInclusive + - toInclusive + properties: + purchasePriceId: + type: integer + example: 1 + amountExclTax: + type: integer + example: 750 + taxCode: + type: string + example: 'V09' + taxPercentage: + type: number + example: 9.0000 + 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 + 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 + ProductPayloadResponse: + type: object + required: + - productId + - productOwner + - isRenewable + - isSellableAtHtm + - needsSolvencyCheckConsumer + - needsSolvencyCheckBusiness + properties: + productId: + type: integer + example: 1 + parentProductId: + type: integer + example: 1 + fikoArticleNumber: + type: string + description: The article number of the product in FIKO + example: 1234 + gboPackageTemplateId: + type: string + example: '30901' + tapConnectProductCode: + type: string + example: 1234AB + 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) + allowedGboAgeProfiles: + type: array + items: + type: object + $ref: '#/components/schemas/GboAgeProfileResponse' + 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 + fikoArticleNumber: + type: string + description: The article number of the product in FIKO + example: 1234 + 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 + 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 + allowedGboAgeProfileIds: + type: array + description: The IDs of the allowed GBO age profiles + 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 + - taxCode + - taxPercentage + - amountInclTax + - fromInclusive + - toInclusive + - internalPrice + properties: + amountExclTax: + type: integer + example: 750 + taxCode: + type: string + example: 'V09' + taxPercentage: + type: number + example: 9.0000 + 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 + - taxCode + - taxPercentage + - amountInclTax + - fromInclusive + - toInclusive + properties: + amountExclTax: + type: integer + example: 750 + taxCode: + type: string + example: 'V09' + taxPercentage: + type: number + example: 9.0000 + 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 + fikoArticleNumber: + type: string + description: The article number of the product in FIKO + example: 1234 + 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 + 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 + allowedGboAgeProfileIds: + type: array + description: The IDs of the allowed GBO age profiles + 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 + - amountInclTax + - taxCode + - taxPercentage + - 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 + amountInclTax: + type: integer + example: 908 + taxCode: + type: string + example: V09 + taxPercentage: + type: number + example: 9.0000 + 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 + - amountInclTax + - taxCode + - taxPercentage + - 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 + amountInclTax: + type: integer + example: 908 + taxCode: + type: string + example: V09 + taxPercentage: + type: number + example: 9.0000 + 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 From 6e01f688d8ee19175fe830ba3fe5360b97bf9fcd Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 24 Mar 2025 13:59:41 +0100 Subject: [PATCH 2/7] Remove old v2.2 CRUD YAML, add ProducReference CRUD YAML (Based on WSO2 export) with added GboAGeProfiles --- .../products/productreference-crud.yaml | 2643 +++++++++++++ src/openapi/products/products-crud-v2.2.yaml | 3372 ----------------- ...ucts-crud-v2.4.yaml => products-crud.yaml} | 0 3 files changed, 2643 insertions(+), 3372 deletions(-) create mode 100644 src/openapi/products/productreference-crud.yaml delete mode 100644 src/openapi/products/products-crud-v2.2.yaml rename src/openapi/products/{products-crud-v2.4.yaml => products-crud.yaml} (100%) diff --git a/src/openapi/products/productreference-crud.yaml b/src/openapi/products/productreference-crud.yaml new file mode 100644 index 0000000..eeb43b6 --- /dev/null +++ b/src/openapi/products/productreference-crud.yaml @@ -0,0 +1,2643 @@ +openapi: 3.0.1 +info: + title: ABTProductReference + description: >- + CRUD APIs for HTM product reference tables (based on the new domainmodel v2.4). + Internal use only; external touchpoints can get (some)) access via the HTM + Service Engine, using a different endpoint. + version: '1.0' +servers: + - url: https://api.integratielaag.nl/abt/productreference/1.0 +tags: + - name: ABTProductReference CRUD + description: >- + Internal use only; external touchpoints can get (some) access + via the HTM Service Engine. +paths: + /clientattributes: + get: + description: | + This method will get the list of all client attributes. + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/clientAttributesGetEntity' + description: A list of client attributes + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get all client attributes. + tags: + - ABTProductReference CRUD + post: + description: "This method will create a single client attribute. \n" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/clientAttributesPostEntity' + required: true + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a client attribute. + tags: + - ABTProductReference CRUD + /clientattributes/{clientAttributeId}: + delete: + description: "This method will delete the client attributes when provided the\n\ + clientAttributeId. \n" + parameters: + - explode: false + in: path + name: clientAttributeId + required: true + schema: + format: integer + type: integer + style: simple + responses: + "202": + description: Deleted record successfully + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Delete a client attribute. + tags: + - ABTProductReference CRUD + put: + description: "This method will update the client attributes when provided the\n\ + clientAttributesId. \n" + parameters: + - explode: false + in: path + name: clientAttributeId + required: true + schema: + format: integer + type: integer + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/clientAttributesPutEntity' + required: true + responses: + "202": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Modify a client attribute. + tags: + - ABTProductReference CRUD + /productowners: + get: + description: | + This method will get the list of all productowners. + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/productOwners' + description: A list of users + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get all productowners. + tags: + - ABTProductReference CRUD + post: + description: "This method will create a single productowner. \n" + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/productOwner' + required: true + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a productowners. + tags: + - ABTProductReference CRUD + delete: + description: "This method will delete the productOwner when provided the\nproductOwnerId.\ + \ \n" + parameters: + - explode: false + in: path + name: productOwnerId + required: true + schema: + format: integer + type: integer + style: simple + responses: + "202": + description: Deleted record successfully + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Delete a productowner. + tags: + - ABTProductReference CRUD + put: + description: "This method will update the productOwner when provided the\nproductOwnerId.\ + \ \n" + parameters: + - explode: false + in: path + name: productOwnerId + required: true + schema: + format: integer + type: integer + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/productOwner' + required: true + responses: + "202": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Modify a productowner. + tags: + - ABTProductReference CRUD + /productcategories: + get: + description: | + This method will get the list of productCategories + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/productCategories' + description: A list of users + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get all productcategories. + tags: + - ABTProductReference CRUD + post: + description: | + This method will create a single product category. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/productCategory' + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a product category. + tags: + - ABTProductReference CRUD + /productcategories/{productCategoryId}: + delete: + description: | + This method will delete the productCategory when provided the + productCategoryId. + parameters: + - explode: false + in: path + name: productCategoryId + required: true + schema: + format: integer + type: integer + style: simple + responses: + "202": + description: Deleted record successfully + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Delete a product category. + tags: + - ABTProductReference CRUD + put: + description: | + This method will update productCategory when provided the + productCategoryId. + parameters: + - explode: false + in: path + name: productCategoryId + required: true + schema: + format: integer + type: integer + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/productCategory' + required: true + responses: + "202": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Modify a product category. + tags: + - ABTProductReference CRUD + /customersegments: + get: + description: This method will get the list of customer segments. + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/customerSegments' + description: A list of users + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get all customer segments. + tags: + - ABTProductReference CRUD + post: + description: This method will create a single customer segment. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/customerSegment' + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a customer segment. + tags: + - ABTProductReference CRUD + /customersegments/{customerSegmentId}: + delete: + description: | + This method will delete a customer segment when provided the customerSegmentId. + parameters: + - explode: false + in: path + name: customerSegmentId + required: true + schema: + format: integer + type: integer + style: simple + responses: + "202": + description: Deleted record successfully + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Delete a customer segment. + tags: + - ABTProductReference CRUD + put: + description: | + This method will update a customer segment when provided the customerSegmentId. + parameters: + - explode: false + in: path + name: customerSegmentId + required: true + schema: + format: integer + type: integer + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/customerSegment' + required: true + responses: + "202": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Modify a customer segment. + tags: + - ABTProductReference CRUD + /marketsegments: + get: + description: This method will get the list of market segments. + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/marketSegments' + description: A list of users + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get all market segments. + tags: + - ABTProductReference CRUD + post: + description: This method will create a single market segment. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/marketSegment' + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a market segment. + tags: + - ABTProductReference CRUD + /marketsegments/{marketSegmentId}: + delete: + description: | + This method will delete a market segment when provided the marketSegmentId. + parameters: + - explode: false + in: path + name: marketSegmentId + required: true + schema: + format: integer + type: integer + style: simple + responses: + "202": + description: Deleted record successfully + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Delete a market segment. + tags: + - ABTProductReference CRUD + put: + description: | + This method will update a market segment when provided the marketSegmentId. + parameters: + - explode: false + in: path + name: marketSegmentId + required: true + schema: + format: integer + type: integer + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/marketSegment' + required: true + responses: + "202": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Modify a market segment. + tags: + - ABTProductReference CRUD + /paymentmoments: + get: + description: | + This method will retrieve the list of payment moments. + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/paymentMoments' + description: A list of payment moments + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of payment moments. + tags: + - ABTProductReference CRUD + /retailers: + get: + description: | + This method will retrieve the list of retailers. + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/retailers' + description: A list of retailers + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of retailers. + tags: + - ABTProductReference CRUD + post: + description: | + This method will create a new retailer. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/retailer' + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a retailer. + tags: + - ABTProductReference CRUD + /retailers/{retailerId}: + delete: + description: | + This method will delete a retailer when provided the retailerId. + parameters: + - explode: false + in: path + name: retailerId + required: true + schema: + format: integer + type: integer + style: simple + responses: + "202": + description: Deleted record successfully + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Delete a retailer. + tags: + - ABTProductReference CRUD + put: + description: | + This method will update a retailer when provided the retailerId. + parameters: + - explode: false + in: path + name: retailerId + required: true + schema: + format: integer + type: integer + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/retailer' + required: true + responses: + "202": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Update a retailer. + tags: + - ABTProductReference CRUD + /salestouchpoints: + get: + description: | + This method will get the list of sales touchpoints. It can also return + sales touchpoints based on retailerId. + parameters: + - description: retailerId + explode: true + in: query + name: retailerId + required: false + schema: + format: integer + type: integer + style: form + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/salesTouchpoints' + description: A list of users + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of salestouchpoints or a single salestouchpoints for a + given retailerId. + tags: + - ABTProductReference CRUD + post: + description: | + This method will create a new salestouchpoint. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/salesTouchpoint' + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a salestouchpoint. + tags: + - ABTProductReference CRUD + /salestouchpoints/{salesTouchpointId}: + delete: + description: | + This method will delete salesTouchpoint when provided the + salesTouchpointId. + parameters: + - explode: false + in: path + name: salesTouchpointId + required: true + schema: + format: integer + type: integer + style: simple + responses: + "202": + description: Deleted record successfully + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Delete a retailer. + tags: + - ABTProductReference CRUD + put: + description: | + This method will update sales touchpoints when provided the + salesTouchpointId. + parameters: + - explode: false + in: path + name: salesTouchpointId + required: true + schema: + format: integer + type: integer + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/salesTouchpoint' + required: true + responses: + "202": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Update a salestouchpoints. + tags: + - ABTProductReference CRUD + /serviceoptions: + get: + description: | + This method will retrieve the list of serviceoptions. + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/serviceOptions' + description: A list of users + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of serviceoptions. + tags: + - ABTProductReference CRUD + post: + description: | + This method will create a new serviceoptions. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/serviceOption' + responses: + "201": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a serviceoptions. + tags: + - ABTProductReference CRUD + /serviceoptions/{serviceOptionId}: + delete: + description: | + This method will delete serviceoptions when provided the + serviceoptionsId. + parameters: + - explode: false + in: path + name: serviceOptionId + required: true + schema: + format: integer + type: integer + style: simple + responses: + "202": + description: Deleted record successfully + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Delete a serviceoptions. + tags: + - ABTProductReference CRUD + put: + description: | + This method will create a new serviceoption. + parameters: + - explode: false + in: path + name: serviceOptionId + required: true + schema: + format: integer + type: integer + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/serviceOption' + required: true + responses: + "202": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes_post_201_response' + description: ok + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/_clientattributes__clientAttributeId__put_404_response' + description: Not Found + "409": + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + description: Conflict + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Create a serviceoption. + tags: + - ABTProductReference CRUD + /mandatorycustomerdataitems: + get: + description: | + This method will retrieve the list of mandatorycustomerdataitems. + responses: + "200": + content: + application/json: + example: + Entries: + - mandatoryCustomerDataItemId: 1 + customerDataItem: birthname + - mandatoryCustomerDataItemId: 2 + customerDataItem: surname + - mandatoryCustomerDataItemId: 3 + customerDataItem: dateOfBirth + - mandatoryCustomerDataItemId: 4 + customerDataItem: emailAddress + - mandatoryCustomerDataItemId: 5 + customerDataItem: address + - mandatoryCustomerDataItemId: 6 + customerDataItem: phone + - mandatoryCustomerDataItemId: 7 + customerDataItem: ovPayToken + schema: + $ref: '#/components/schemas/mandatoryCustomerDataItems' + description: A list of users + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of mandatorycustomerdataitems. + tags: + - ABTProductReference CRUD + /requiredcustomerlevels: + get: + description: | + This method will retrieve the list of requiredcustomerlevels. + responses: + "200": + content: + application/json: + example: + Entries: + - requiredCustomerLevelId: 1 + name: guest + - requiredCustomerLevelId: 2 + name: contact + - requiredCustomerLevelId: 3 + name: profile + schema: + $ref: '#/components/schemas/requiredCustomerLevels' + description: A list of users + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of requiredcustomerlevels. + tags: + - ABTProductReference CRUD + /forbiddenpaymentmethod: + get: + description: This method will retrieve the list of forbidden payments. + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/getforbiddenPaymentMethodList' + description: A list of forbidden payment methods + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of forbidden payments. + tags: + - ABTProductReference CRUD + /requiredgbopersonalattribute: + get: + description: | + This method will retrieve the list of required personal attribute. + parameters: [] + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/requiredGboPersonalAttributes' + description: A list of Required GBO personal attributes + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of required personal attribute . + tags: + - ABTProductReference CRUD + /gboageprofiles: + get: + description: | + This method will retrieve the list of GBO age profiles. + parameters: [] + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/GboAgeProfileList' + description: A list of GBO age profiles + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: Get the list of required personal attribute . + tags: + - ABTProductReference CRUD + /productreferences: + get: + description: gives list of all possible product reference values availbale + parameters: [] + responses: + "200": + content: + application/json: + example: + Entries: + clientAttributes: + type: array + items: + type: object + properties: + - clientAttributeId: 1 + clientId: htm + description: description + isActive: "true" + retailerId: 1 + salesTouchpointId: 2 + productOwners: + - productOwnerId: 123 + name: name + organization: org + productCategories: + - isTravelProduct: true + name: name + productCategoryId: 21 + customerSegments: + - name: name + customerSegmentId: 123 + marketSegments: + - name: name + marketSegmentId: 123 + paymentMoments: + - paymentMomentId: 123 + name: name + retailers: + - name: name + street: StreetName + number: "12" + numberAddition: E + postalCode: 2222 BV + city: Amsterdam + country: NL + emailAddress: sample@email.com + phoneNumber: "6123456789" + taxId: taxId + imageReference: imageReference + retailerId: 123 + salesTouchpoints: + - isActive: true + name: name + retailerId: 21 + salesTouchPointId: 123 + serviceOptions: + - action: action + description: description + serviceOptionId: 123 + mandatoryCustomerDataItems: + - mandatoryCustomerDataItemId: 123 + customerDataItem: customerDataItem + requiredCustomerLevels: + - requiredCustomerLevelId: 123 + name: requiredCustomerLevel + forbiddenPaymentMethods: + - forbiddenPaymentMethodId: 123 + name: requiredCustomerLevel + issuer: Kane + requiredGboPersonalAttributes: + - requiredGboPersonalAttributeId: 123 + name: requiredCustomerLevel + schema: + $ref: '#/components/schemas/_productreferences_get_200_response' + description: Successful retrieved list of all possible product reference + values + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + description: Bad Request + "401": + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + description: Unauthorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + description: Not Found + "500": + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + description: Internal Server Error + summary: List of all possible product reference values + tags: + - ABTProductReference CRUD +components: + schemas: + clientAttribute: + properties: + clientId: + example: htm + type: string + description: + example: description + type: string + isActive: + example: "true" + type: string + retailerId: + example: 1 + type: integer + salesTouchpointId: + example: 2 + type: integer + type: object + clientAttributesGetList: + items: + $ref: '#/components/schemas/clientAttributesGetList_inner' + type: array + clientAttributesGetEntity: + example: + Entries: + - clientId: htm + description: description + clientAttributeId: 1 + isActive: "true" + retailerId: 1 + salesTouchpointId: 2 + - clientId: htm + description: description + clientAttributeId: 1 + isActive: "true" + retailerId: 1 + salesTouchpointId: 2 + properties: + Entries: + items: + $ref: '#/components/schemas/clientAttributesGetList_inner' + type: array + type: object + clientAttributesPostEntity: + properties: + clientId: + example: htm + type: string + description: + example: description + type: string + isActive: + example: true + type: boolean + retailerId: + example: 1 + type: integer + salesTouchpointId: + example: 2 + type: integer + type: object + clientAttributesPutEntity: + properties: + description: + example: description + type: string + isActive: + example: true + type: boolean + retailerId: + example: 1 + type: integer + clientId: + example: retailer001 + type: string + salesTouchpointId: + example: 1 + type: integer + type: object + productOwner: + properties: + organization: + example: org + type: string + name: + example: name + type: string + type: object + productOwnerIdList: + items: + $ref: '#/components/schemas/productOwnerIdList_inner' + type: array + productOwners: + example: + Entries: + - productOwnerId: 123 + organization: org + name: name + - productOwnerId: 123 + organization: org + name: name + properties: + Entries: + items: + $ref: '#/components/schemas/productOwnerIdList_inner' + type: array + type: object + productCategory: + properties: + isTravelProduct: + example: true + type: boolean + name: + example: name + type: string + type: object + productCategoryIdList: + items: + $ref: '#/components/schemas/productCategoryIdList_inner' + type: array + productCategories: + example: + Entries: + - productCategoryId: 21 + name: name + isTravelProduct: true + - productCategoryId: 21 + name: name + isTravelProduct: true + properties: + Entries: + items: + $ref: '#/components/schemas/productCategoryIdList_inner' + type: array + type: object + customerSegment: + properties: + name: + example: name + type: string + type: object + customerSegmentIdList: + items: + $ref: '#/components/schemas/customerSegmentIdList_inner' + type: array + customerSegments: + example: + Entries: + - name: name + customerSegmentId: 123 + - name: name + customerSegmentId: 123 + properties: + Entries: + items: + $ref: '#/components/schemas/customerSegmentIdList_inner' + type: array + type: object + paymentMoment: + properties: + results: + $ref: '#/components/schemas/paymentMoment_results' + paymentMomentIdList: + items: + $ref: '#/components/schemas/paymentMoment_results' + type: array + paymentMoments: + example: + Entries: + - paymentMomentId: 123 + name: name + - paymentMomentId: 123 + name: name + properties: + Entries: + items: + $ref: '#/components/schemas/paymentMoment_results' + type: array + type: object + marketSegment: + properties: + name: + example: name + type: string + marketSegmentIdList: + items: + $ref: '#/components/schemas/marketSegmentIdList_inner' + type: array + marketSegments: + example: + Entries: + - name: name + marketSegmentId: 123 + - name: name + marketSegmentId: 123 + properties: + Entries: + items: + $ref: '#/components/schemas/marketSegmentIdList_inner' + type: array + type: object + retailer: + properties: + name: + example: name + type: string + street: + example: StreetName + type: string + number: + example: "12" + type: string + numberAddition: + example: E + type: string + postalCode: + example: 2222 BV + type: string + city: + example: Amsterdam + type: string + country: + example: NL + type: string + emailAddress: + example: sample@email.com + type: string + phoneNumber: + example: "6123456789" + type: string + taxId: + example: taxId + type: string + imageReference: + example: imageReference + type: string + retailerIdList: + items: + $ref: '#/components/schemas/retailerIdList_inner' + type: array + retailers: + example: + Entries: + - number: "12" + country: NL + emailAddress: sample@email.com + phoneNumber: "6123456789" + city: Amsterdam + street: StreetName + taxId: taxId + postalCode: 2222 BV + name: name + numberAddition: E + imageReference: imageReference + retailerId: 123 + - number: "12" + country: NL + emailAddress: sample@email.com + phoneNumber: "6123456789" + city: Amsterdam + street: StreetName + taxId: taxId + postalCode: 2222 BV + name: name + numberAddition: E + imageReference: imageReference + retailerId: 123 + properties: + Entries: + items: + $ref: '#/components/schemas/retailerIdList_inner' + type: array + type: object + salesTouchpoint: + properties: + isActive: + example: true + type: boolean + name: + example: name + type: string + retailerId: + example: 21 + type: integer + type: object + salesTouchpointIdList: + items: + $ref: '#/components/schemas/salesTouchpointIdList_inner' + type: array + salesTouchpoints: + example: + Entries: + - name: name + isActive: true + retailerId: 21 + salesTouchpointId: 123 + - name: name + isActive: true + retailerId: 21 + salesTouchpointId: 123 + properties: + Entries: + items: + $ref: '#/components/schemas/salesTouchpointIdList_inner' + type: array + type: object + serviceOption: + properties: + action: + example: action + type: string + description: + example: description + type: string + type: object + serviceOptionIdList: + items: + $ref: '#/components/schemas/serviceOptionIdList_inner' + type: array + serviceOptions: + example: + Entries: + - serviceOptionId: 123 + action: action + description: description + - serviceOptionId: 123 + action: action + description: description + properties: + Entries: + items: + $ref: '#/components/schemas/serviceOptionIdList_inner' + type: array + type: object + mandatoryCustomerDataItem: + properties: + customerDataItem: + example: customerDataItem + type: string + type: object + mandatoryCustomerDataItemIdList: + items: + $ref: '#/components/schemas/mandatoryCustomerDataItemIdList_inner' + type: array + mandatoryCustomerDataItems: + example: + Entries: + - mandatoryCustomerDataItemId: 1 + customerDataItem: birthname + - mandatoryCustomerDataItemId: 1 + customerDataItem: birthname + properties: + Entries: + items: + $ref: '#/components/schemas/mandatoryCustomerDataItemIdList_inner' + type: array + type: object + requiredCustomerLevelIdList: + items: + $ref: '#/components/schemas/requiredCustomerLevelIdList_inner' + type: array + requiredCustomerLevels: + example: + Entries: + - requiredCustomerLevelId: 123 + name: requiredCustomerLevel + - requiredCustomerLevelId: 123 + name: requiredCustomerLevel + properties: + Entries: + items: + $ref: '#/components/schemas/requiredCustomerLevelIdList_inner' + type: array + type: object + forbiddenPaymentMethodList: + items: + $ref: '#/components/schemas/forbiddenPaymentMethodList_inner' + type: array + getforbiddenPaymentMethodList: + example: + Entries: + - forbiddenPaymentMethodId: 123 + name: requiredCustomerLevel + issuer: Kane + - forbiddenPaymentMethodId: 123 + name: requiredCustomerLevel + issuer: Kane + properties: + Entries: + items: + $ref: '#/components/schemas/forbiddenPaymentMethodList_inner' + type: array + type: object + GetRequiredGboPersonalAttribute: + items: + $ref: '#/components/schemas/GetRequiredGboPersonalAttribute_inner' + type: array + requiredGboPersonalAttributes: + example: + Entries: + - name: NAME + requiredGboPersonalAttributeId: 1 + - name: BIRTHDATE + requiredGboPersonalAttributeId: 2 + - name: PHOTO + requiredGboPersonalAttributeId: 3 + properties: + Entries: + items: + $ref: '#/components/schemas/GetRequiredGboPersonalAttribute_inner' + type: array + type: object + GboAgeProfileList: + items: + $ref: '#/components/schemas/GboAgeProfile' + type: array + example: + Entries: + - gboAgeProfileId: 2 + name: Kind (4 t/m 11 jaar) + ageFromInclusive: 4 + ageToInclusive: 11 + - gboAgeProfileId: 3 + name: Jongere (12 t/m 18 jaar) + ageFromInclusive: 12 + ageToInclusive: 18 + GboAgeProfile: + type: object + required: + - gboAgeProfileId + - name + - ageFromInclusive + - ageToInclusive + properties: + gboAgeProfileId: + type: integer + example: 1 + name: + type: string + example: Kind (4 t/m 11 jaar) + ageFromInclusive: + type: integer + description: The minimum age that the GBO age profile applies to + example: 4 + ageToInclusive: + type: integer + description: The maximum age that the GBO age profile applies to + example: 11 + GetproductReferences: + properties: + Entries: + $ref: '#/components/schemas/GetproductReferences_Entries' + type: object + "400Response": + properties: + code: + example: "400" + type: string + type: + type: string + message: + example: Bad Request + type: string + description: + example: '''2023-02-01 00:00:00'' is not a valid Datetime' + type: string + type: object + "401Response": + properties: + code: + example: "900901" + type: string + type: + type: string + message: + example: Invalid Credentials + type: string + description: + example: Invalid Credentials. Make sure you have provided the correct security + credentials + type: string + type: object + "404Response": + properties: + code: + example: "404" + type: string + type: + example: Status report + type: string + message: + example: Not Found + type: string + description: + example: The requested resource is not available. + type: string + type: object + "404ResponseId": + properties: + error: + example: "No record found for id: 5" + type: string + type: object + "409Response": + properties: + error: + example: Entry already exists + type: string + type: object + "500Response": + properties: + code: + example: "500" + type: string + type: + type: string + message: + example: Internal Server Error + type: string + description: + type: string + type: object + _clientattributes_post_201_response: + example: + id: 1 + properties: + id: + example: 1 + type: integer + type: object + _clientattributes__clientAttributeId__put_404_response: + oneOf: + - $ref: '#/components/schemas/404ResponseId' + - $ref: '#/components/schemas/404Response' + _productreferences_get_200_response: + allOf: + - $ref: '#/components/schemas/GetproductReferences' + clientAttributesGetList_inner: + example: + clientId: htm + description: description + clientAttributeId: 1 + isActive: "true" + retailerId: 1 + salesTouchpointId: 2 + properties: + clientAttributeId: + example: 1 + type: integer + clientId: + example: htm + type: string + description: + example: description + type: string + isActive: + example: "true" + type: string + retailerId: + example: 1 + type: integer + salesTouchpointId: + example: 2 + type: integer + productOwnerIdList_inner: + example: + productOwnerId: 123 + organization: org + name: name + properties: + productOwnerId: + example: 123 + type: integer + name: + example: name + type: string + organization: + example: org + type: string + productCategoryIdList_inner: + example: + productCategoryId: 21 + name: name + isTravelProduct: true + properties: + isTravelProduct: + example: true + type: boolean + name: + example: name + type: string + productCategoryId: + example: 21 + type: integer + customerSegmentIdList_inner: + example: + name: name + customerSegmentId: 123 + properties: + name: + example: name + type: string + customerSegmentId: + example: 123 + type: integer + paymentMoment_results: + example: + paymentMomentId: 123 + name: name + properties: + paymentMomentId: + example: 123 + type: integer + name: + example: name + type: string + marketSegmentIdList_inner: + example: + name: name + marketSegmentId: 123 + properties: + name: + example: name + type: string + marketSegmentId: + example: 123 + type: integer + retailerIdList_inner: + example: + number: "12" + country: NL + emailAddress: sample@email.com + phoneNumber: "6123456789" + city: Amsterdam + street: StreetName + taxId: taxId + postalCode: 2222 BV + name: name + numberAddition: E + imageReference: imageReference + retailerId: 123 + properties: + name: + example: name + type: string + street: + example: StreetName + type: string + number: + example: "12" + type: string + numberAddition: + example: E + type: string + postalCode: + example: 2222 BV + type: string + city: + example: Amsterdam + type: string + country: + example: NL + type: string + emailAddress: + example: sample@email.com + type: string + phoneNumber: + example: "6123456789" + type: string + taxId: + example: taxId + type: string + imageReference: + example: imageReference + type: string + retailerId: + example: 123 + type: integer + salesTouchpointIdList_inner: + example: + name: name + isActive: true + retailerId: 21 + salesTouchpointId: 123 + properties: + isActive: + example: true + type: boolean + name: + example: name + type: string + retailerId: + example: 21 + type: integer + salesTouchpointId: + example: 123 + type: integer + serviceOptionIdList_inner: + example: + serviceOptionId: 123 + action: action + description: description + properties: + action: + example: action + type: string + description: + example: description + type: string + serviceOptionId: + example: 123 + type: integer + mandatoryCustomerDataItemIdList_inner: + example: + mandatoryCustomerDataItemId: 1 + customerDataItem: birthname + properties: + mandatoryCustomerDataItemId: + example: 1 + type: integer + customerDataItem: + example: birthname + type: string + requiredCustomerLevelIdList_inner: + example: + requiredCustomerLevelId: 123 + name: requiredCustomerLevel + properties: + requiredCustomerLevelId: + example: 123 + type: integer + name: + example: requiredCustomerLevel + type: string + forbiddenPaymentMethodList_inner: + example: + forbiddenPaymentMethodId: 123 + name: requiredCustomerLevel + issuer: Kane + properties: + forbiddenPaymentMethodId: + example: 123 + type: integer + name: + example: CreditCard + type: string + issuer: + example: American Express + type: string + type: object + GetRequiredGboPersonalAttribute_inner: + example: + requiredGboPersonalAttributeId: 1 + name: NAME + properties: + requiredGboPersonalAttributeId: + example: 1 + type: integer + name: + example: NAME + type: string + type: object + GetproductReferences_Entries: + oneOf: + - $ref: '#/components/schemas/clientAttributesGetEntity' + - $ref: '#/components/schemas/productOwners' + - $ref: '#/components/schemas/productCategories' + - $ref: '#/components/schemas/customerSegments' + - $ref: '#/components/schemas/marketSegments' + - $ref: '#/components/schemas/paymentMoments' + - $ref: '#/components/schemas/retailers' + - $ref: '#/components/schemas/salesTouchpoints' + - $ref: '#/components/schemas/serviceOptions' + - $ref: '#/components/schemas/mandatoryCustomerDataItems' + - $ref: '#/components/schemas/requiredCustomerLevels' + - $ref: '#/components/schemas/getforbiddenPaymentMethodList' + - $ref: '#/components/schemas/requiredGboPersonalAttributes' + - $ref: '#/components/schemas/GboAgeProfileList' \ No newline at end of file diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud-v2.2.yaml deleted file mode 100644 index dfdd8f1..0000000 --- a/src/openapi/products/products-crud-v2.2.yaml +++ /dev/null @@ -1,3372 +0,0 @@ -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 that refer to a given parentProductId (or without parent, if not specified), without any other 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": [] - } - 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" - } - ] - } - 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" - } - ] - } - 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 and/or 4 (part of same retailer) are returned - value: - { - "Entries": [ - { - "productId": 2, - "productCode": "312AB-WL", - "productName": "HTM dagkaart", - "productDescription": "Reis een dag met het openbaar vervoer bij HTM", - "productCategory": { - "productCategoryId": 6, - "isTravelProduct": false, - "name": "Barcode" - }, - "tokenTypes": null, - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" - } - ] - } - getListMultipleProductsNoTouchpointId: - summary: List containing multiple products (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" - } - ] - } - getListMultipleProductsTuchpointId1: - summary: List containing multiple products (touchpointId 3 in HTTP-headers) - description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - value: - { - "Entries": [ - { - "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" - } - ] - } - '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 - ProductPayloadResponse: - type: object - required: - - productId - - productOwner - - isRenewable - - isSellableAtHtm - - needsSolvencyCheckConsumer - - needsSolvencyCheckBusiness - properties: - productId: - type: integer - example: 1 - parentProductId: - type: integer - example: 1 - productCode: - type: string - example: 30901-WL - gboPackageTemplateId: - type: string - example: '30901' - tapConnectProductCode: - type: string - example: 1234AB - productGroupMetadata: - type: object - required: - - productGroupMetadataId - - productGroupCode - - department - - costCenter - - costType - - description - - documentCode - - user - - timestampUpdated - - validFrom - properties: - productGroupMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - productGroupCode: - type: string - example: TBD - department: - type: string - example: TBD - costCenter: - type: string - example: TBD - costType: - type: string - example: TBD - description: - type: string - example: TBD - documentCode: - type: string - example: TBD - user: - type: string - example: TBD - timestampUpdated: - type: string - format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' - validFrom: - type: string - format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' - validUntil: - type: string - format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' - productName: - type: string - example: HTM pilot 90% korting - productDescription: - type: string - example: Reis met 90% korting gedurende de eerste F&F pilot! - validityPeriod: - type: object - required: - - validityPeriodId - - fromInclusive - - toInclusive - properties: - validityPeriodId: - type: integer - example: 1 - fromInclusive: - type: string - format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' - toInclusive: - type: string - format: date-time-offset - example: '2024-09-03T23:59:59.999+00:00' - productTranslations: - type: array - items: - $ref: '#/components/schemas/ProductTranslationResponse' - productOwner: - type: object - required: - - productOwnerId - - name - properties: - productOwnerId: - type: integer - example: 1 - name: - type: string - example: John Doe - organization: - type: string - example: HTM - marketSegmentse: - type: array - items: - type: object - required: - - marketSegmentId - - name - properties: - marketSegmentId: - type: integer - example: 1 - name: - type: string - example: B2C - customerSegments: - type: array - items: - type: object - required: - - customerSegmentId - - name - properties: - customerSegmentId: - type: integer - example: 1 - name: - type: string - example: Kind (4-11) - productCategory: - type: object - required: - - productCategoryId - - name - - isTravelProduct - properties: - productCategoryId: - type: integer - example: 1 - name: - type: string - example: Kortingsabonnement - isTravelProduct: - type: boolean - example: true - requiredCustomerLevel: - type: object - required: - - requiredCustomerLevelId - - name - properties: - requiredCustomerLevelId: - type: integer - example: 1 - name: - type: string - example: anonymous - requiredProducts: - type: array - items: - type: object - required: - - requiredProductId - - productName - properties: - requiredProductId: - type: integer - example: 2 - productName: - type: string - example: Product name - description: - type: string - description: Reason why the product is required - example: Description - incompatibleProducts: - type: array - items: - type: object - required: - - incompatibleProductId - - productName - properties: - incompatibleProductId: - type: integer - example: 4 - productName: - type: string - example: Product name - description: - type: string - description: >- - Reason why the product is incompatible with the selected - product - example: Description - mandatoryCustomerDataItems: - type: array - items: - type: object - required: - - mandatoryCustomerDataItemId - - customerDataItem - properties: - mandatoryCustomerDataItemId: - type: integer - example: 3 - customerDataItem: - type: string - example: dateOfBirth - requiredGboPersonalAttributes: - type: array - description: >- - List of required GBO personal attributes (PAD) - should not be - user-editable, but automatically populated by PMT backend, based on - the selected gboPackageTemplateId (if any) - items: - type: object - required: - - requiredGboPersonalAttributeId - - name - properties: - requiredGboPersonalAttributeId: - type: integer - example: 2 - name: - type: string - example: BIRTHDATE - tokenTypes: - type: array - items: - type: object - required: - - tokenTypeId - - name - properties: - tokenTypeId: - type: integer - example: 1 - name: - type: string - example: EMV - paymentMoment: - type: object - required: - - paymentMomentId - - name - properties: - paymentMomentId: - type: integer - example: 1 - name: - type: string - example: prepaid - serviceOptions: - type: array - items: - type: object - required: - - serviceOptionId - - action - properties: - serviceOptionId: - type: integer - example: 1 - action: - type: string - example: cancellableTermAhead - description: - type: string - example: Per termijn vooruit opzegbaar - validityDuration: - type: string - format: duration - example: P1M - maxStartInFutureDuration: - type: string - format: duration - example: P6W - isRenewable: - type: boolean - example: true - sendInvoice: - type: boolean - example: false - imageReference: - type: string - format: uri - example: https://htm.azure.net/abt/products/product_1.svg - productPageUrl: - type: string - format: uri - example: https://www.htm.nl/nog-onbekende-product-pagina - termsUrl: - type: string - format: uri - example: https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina - isSellableAtHtm: - type: boolean - example: true - needsSolvencyCheckConsumer: - type: boolean - example: false - needsSolvencyCheckBusiness: - type: boolean - example: false - sellingPeriods: - type: array - items: - type: object - required: - - sellingPeriodId - - fromInclusive - - toInclusive - - salesTouchpoint - properties: - sellingPeriodId: - type: integer - example: 1 - fromInclusive: - type: string - format: date-time-offset - example: '2022-03-01T00:00:00.000+00:00' - toInclusive: - type: string - format: date-time-offset - example: '2022-06-01T00:00:00.000+00:00' - salesTouchpoint: - $ref: '#/components/schemas/SalesTouchpointResponse' - forbiddenPaymentMethods: - type: array - items: - type: object - required: - - forbiddenPaymentMethodId - - name - properties: - forbiddenPaymentMethodId: - type: integer - example: 1 - name: - type: string - example: Credit Card - issuer: - type: string - example: American Express - sellingPrices: - type: array - items: - $ref: '#/components/schemas/SellingPriceResponse' - purchasePrices: - type: array - items: - $ref: '#/components/schemas/PurchasePriceResponse' - auditTrail: - type: array - items: - type: object - required: - - auditTrailId - - action - - user - - timestamp - properties: - auditTrailId: - type: integer - example: 1 - action: - type: string - example: insert - user: - type: string - example: username - timestamp: - type: string - format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' - CreateProductRequest: - required: - - productOwnerId - - isRenewable - - isSellableAtHtm - - needsSolvencyCheckConsumer - - needsSolvencyCheckBusiness - type: object - properties: - parentProductId: - type: integer - description: The ID of the parent product (if any) - example: 1 - productCode: - type: string - description: The HTM-internal product code - example: 30901-WL - gboPackageTemplateId: - type: string - description: >- - The ID of the GBO SalesPackage that should be instantiated after - buying this product - example: '30901' - tapConnectProductCode: - type: string - description: >- - The productCode of the TapConnect product that should be issued - after buying this product - example: 1234AB - productGroupMetadataId: - type: string - format: uuid - description: The ID of the productGroupMetadata for administration in U4F - example: 501B17EF-36C4-4039-B92C-6517969B464E - productName: - type: string - description: The name of the product - example: Test product name - productDescription: - type: string - description: The description of the product - example: Test product description - validityPeriod: - required: - - fromInclusive - - toInclusive - type: object - description: The validity period of the product - properties: - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start of the validity - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end of the validity period - example: '2022-06-01T00:00:00.000' - productTranslations: - type: array - description: Translations of the product name and description - items: - type: object - required: - - language - - name - - description - properties: - language: - type: string - example: en - name: - type: string - example: HTM F&F 90% korting - description: - type: string - example: >- - Travel with 90% discount for a week during the first HTM F&F - OVpay pilot! - productOwnerId: - type: integer - description: The ID of the owner of the product - example: 1 - marketSegmentIds: - type: array - description: The IDs of the market segments that the product is targeted towards - items: - type: integer - example: 1 - customerSegmentIds: - type: array - description: >- - The IDs of the customer segments that the product is targeted - towards - items: - type: integer - example: 1 - productCategoryId: - type: integer - description: The ID of the category the product belongs to - example: 1 - requiredCustomerLevelId: - type: integer - description: >- - The ID of the required customer level to be allowed to purchase the - product - requiredProducts: - type: array - required: - - requiredProductId - description: >- - The IDs of products that should already be owned by the customer - (for travel products, the validity of the given productIds should - fully overlap on the customer's travel medium) - items: - type: object - properties: - requiredProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is required - example: Benodigd basisproduct - incompatibleProducts: - type: array - required: - - incompatibleProductId - description: >- - The IDs of products that can not be active at the same time as this - product (for travel products, none of the listed productIds should - have overlapping validity with this product on the customer's travel - medium) - items: - type: object - properties: - incompatibleProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is incompatible - example: Kan niet combineren met zichzelf - mandatoryCustomerDataItemIds: - type: array - description: >- - The IDs of the customer data items that should be filled in by the - customer - items: - type: integer - example: 1 - requiredGboPersonalAttributeIds: - type: array - description: >- - GBO specific; the IDs of the GBO Personal Attribute Data (PAD) - elements that should be present (or filled during the order flow) on - the customer's chosen travel medium. This attribute should not be - user-editable, but only be filled by PMT, based on the chosen - gboPackageTemplateId! - items: - type: integer - example: 1 - tokenTypeIds: - type: array - description: The IDs of the token types that the product can be instantiated on - items: - type: integer - example: 1 - paymentMomentId: - type: integer - description: The ID of the payment moment for the product - example: 1 - serviceOptionIds: - type: array - description: The IDs of the service options that are available for this product - items: - type: integer - example: 1 - validityDuration: - type: string - format: duration - description: >- - The validity duration of the product. Should only contain one single - unit of duration (D, W, M, Y) - example: P7D - maxStartInFutureDuration: - type: string - format: duration - description: >- - The maximum amount of time in the future allowed for the start of - the product validity. Should only contain one single unit of - duration (D, W, M, Y) - example: P6W - isRenewable: - type: boolean - description: Indicates if the product is renewable - example: false - sendInvoice: - type: boolean - description: >- - Indicates if an invoice should be sent to the customer after - ordering this product - example: false - imageReference: - type: string - format: uri - description: A reference/URL to the image of the product - example: https://www.htm.nl/nog-onbekende-productafbeelding - productPageUrl: - type: string - format: uri - description: >- - The URL of the product page, to be used by touchpoints which are not - allowed to sell the product, to redirect the customer. If the - product is sold via multiple touchpoints, this URL should point to - the preferred touchpoint for sales - example: https://www.htm.nl/nog-onbekende-productpagina - termsUrl: - type: string - format: uri - description: >- - The URL for the webpage or document containing terms for this - product - example: https://www.htm.nl/nog-onbekende-productvoorwaarden - isSellableAtHtm: - type: boolean - description: >- - Indicates if the product is sellable at HTM. If false, no - sellingPrices/Periods should be defined - this product may only be - used for tracking/reporting purposed, or internal use - needsSolvencyCheckConsumer: - type: boolean - description: >- - Indicates if a solvency check is required for consumers purchasing - the product - needsSolvencyCheckBusiness: - type: boolean - description: >- - Indicates if a solvency check is required for businesses purchasing - the product - sellingPeriods: - type: array - description: >- - The sellingPeriods of the product. Can contain multiple periods for - the same or different touchpoints, as long as there is no overlap - for the same touchpoint - items: - type: object - required: - - fromInclusive - - toInclusive - - salesTouchpointId - properties: - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2020-01-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2020-01-01T00:00:00.000' - salesTouchpointId: - type: integer - description: The ID of the touchpoint this period applies to - example: 1 - forbiddenPaymentMethodIds: - type: array - description: >- - The IDs of the payment methods that are not allowed to be used - for this touchpoint and period - items: - type: integer - example: 1 - sellingPrices: - type: array - description: >- - The sellingPrices of this product for the touchpoint defined - in this sellingPeriod. Can contain multiple prices, as long as - there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - - internalPrice - properties: - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the - price period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the - price period - example: '2022-06-01T00:00:00.000' - internalPrice: - type: number - example: 908.1234 - purchasePrices: - type: array - description: >- - The purchasePrices of the product. Can contain multiple prices, as - long as there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - properties: - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the price - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the price - period - example: '2022-06-01T00:00:00.000' - UpdateProductRequest: - required: - - productOwnerId - - isRenewable - - isSellableAtHtm - - needsSolvencyCheckConsumer - - needsSolvencyCheckBusiness - type: object - properties: - parentProductId: - type: integer - description: The ID of the parent product (if any) - example: 1 - productCode: - type: string - description: The HTM-internal product code - example: 30901-WL - gboPackageTemplateId: - type: string - description: >- - The ID of the GBO SalesPackage that should be instantiated after - buying this product - example: '30901' - tapConnectProductCode: - type: string - description: >- - The productCode of the TapConnect product that should be issued - after buying this product - example: 1234AB - productGroupMetadataId: - type: string - format: uuid - description: The ID of the productGroupMetadata for administration in U4F - example: 501B17EF-36C4-4039-B92C-6517969B464E - productName: - type: string - description: The name of the product - example: Test product name - productDescription: - type: string - description: The description of the product - example: Test product description - validityPeriod: - required: - - fromInclusive - - toInclusive - type: object - description: The validity period of the product - properties: - validityPeriodId: - type: integer - description: >- - Including a validityPeriodId will update the existing - validityPeriod for this product - if omitted, a new - validityPeriod will be created - example: 1 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start of the validity - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end of the validity period - example: '2022-06-01T00:00:00.000' - productTranslations: - type: array - description: Translations of the product name and description - items: - type: object - required: - - language - - name - - description - properties: - language: - type: string - example: en - name: - type: string - example: HTM F&F 90% korting - description: - type: string - example: >- - Travel with 90% discount for a week during the first HTM F&F - OVpay pilot! - productOwnerId: - type: integer - description: The ID of the owner of the product - example: 1 - marketSegmentIds: - type: array - description: The IDs of the market segments that the product is targeted towards - items: - type: integer - example: 1 - customerSegmentIds: - type: array - description: >- - The IDs of the customer segments that the product is targeted - towards - items: - type: integer - example: 1 - productCategoryId: - type: integer - description: The ID of the category the product belongs to - example: 1 - requiredCustomerLevelId: - type: integer - description: >- - The ID of the required customer level to be allowed to purchase the - product - requiredProducts: - type: array - required: - - requiredProductId - description: >- - The IDs of products that should already be owned by the customer - (for travel products, the validity of the given productIds should - fully overlap on the customer's travel medium) - items: - type: object - properties: - requiredProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is required - example: Benodigd basisproduct - incompatibleProducts: - type: array - required: - - incompatibleProductId - description: >- - The IDs of products that can not be active at the same time as this - product (for travel products, none of the listed productIds should - have overlapping validity with this product on the customer's travel - medium) - items: - type: object - properties: - incompatibleProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is incompatible - example: Kan niet combineren met zichzelf - mandatoryCustomerDataItemIds: - type: array - description: >- - The IDs of the customer data items that should be filled in by the - customer - items: - type: integer - example: 1 - requiredGboPersonalAttributeIds: - type: array - description: >- - GBO specific; the IDs of the GBO Personal Attribute Data (PAD) - elements that should be present (or filled during the order flow) on - the customer's chosen travel medium. This attribute should not be - user-editable, but only be filled by PMT, based on the chosen - gboPackageTemplateId! - items: - type: integer - example: 1 - tokenTypeIds: - type: array - description: The IDs of the token types that the product can be instantiated on - items: - type: integer - example: 1 - paymentMomentId: - type: integer - description: The ID of the payment moment for the product - example: 1 - serviceOptionIds: - type: array - description: The IDs of the service options that are available for this product - items: - type: integer - example: 1 - validityDuration: - type: string - format: duration - description: >- - The validity duration of the product. Should only contain one single - unit of duration (D, W, M, Y) - example: P7D - maxStartInFutureDuration: - type: string - format: duration - description: >- - The maximum amount of time in the future allowed for the start of - the product validity. Should only contain one single unit of - duration (D, W, M, Y) - example: P6W - isRenewable: - type: boolean - description: Indicates if the product is renewable - example: false - sendInvoice: - type: boolean - description: >- - Indicates if an invoice should be sent to the customer after - ordering this product - example: false - imageReference: - type: string - format: uri - description: A reference/URL to the image of the product - example: https://www.htm.nl/nog-onbekende-productafbeelding - productPageUrl: - type: string - format: uri - description: >- - The URL of the product page, to be used by touchpoints which are not - allowed to sell the product, to redirect the customer. If the - product is sold via multiple touchpoints, this URL should point to - the preferred touchpoint for sales - example: https://www.htm.nl/nog-onbekende-productpagina - termsUrl: - type: string - format: uri - description: >- - The URL for the webpage or document containing terms for this - product - example: https://www.htm.nl/nog-onbekende-productvoorwaarden - isSellableAtHtm: - type: boolean - description: >- - Indicates if the product is sellable at HTM. If false, no - sellingPrices/Periods should be defined - this product may only be - used for tracking/reporting purposed, or internal use - needsSolvencyCheckConsumer: - type: boolean - description: >- - Indicates if a solvency check is required for consumers purchasing - the product - needsSolvencyCheckBusiness: - type: boolean - description: >- - Indicates if a solvency check is required for businesses purchasing - the product - sellingPeriods: - type: array - description: >- - The sellingPeriods of the product. Can contain multiple periods for - the same or different touchpoints, as long as there is no overlap - for the same touchpoint - items: - type: object - required: - - fromInclusive - - toInclusive - - salesTouchpointId - properties: - sellingPeriodId: - type: integer - description: >- - Including a sellingPeriodId will update an existing - sellingPeriod for this product - if omitted, a new - sellingPeriod will be created - example: 1 - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2020-01-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2020-01-01T00:00:00.000' - salesTouchpointId: - type: integer - description: The ID of the touchpoint this period applies to - example: 1 - forbiddenPaymentMethodIds: - type: array - description: >- - The IDs of the payment methods that are not allowed to be used - for this touchpoint and period - items: - type: integer - example: 1 - sellingPrices: - type: array - description: >- - The sellingPrices of this product for the touchpoint defined - in this sellingPeriod. Can contain multiple prices, as long as - there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - - internalPrice - properties: - sellingPeriodId: - type: integer - description: >- - Including a sellingPriceId will update an existing - sellingPrice for this product - if omitted, a new - sellingPrice will be created - example: 1 - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the - period - example: '2022-06-01T00:00:00.000' - internalPrice: - type: number - example: 908.1234 - purchasePrices: - type: array - description: >- - The purchasePrices of the product. Can contain multiple prices, as - long as there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - properties: - purchasePriceId: - type: integer - description: >- - Including a purchasePriceId will update an existing - purchasePrice for this product - if omitted, a new - purchasePrice will be created - example: 1 - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2022-06-01T00:00:00.000' - CreateOrUpdateProductResponse: - type: object - properties: - productId: - type: integer - example: 22 - 400Response: - type: object - properties: - code: - type: string - example: '400' - type: - type: string - message: - type: string - example: Bad Request - description: - type: string - example: '''2023-02-01 00:00:00'' is not a valid Datetime' - apiErrorCode: - type: string - example: htm.api.err.40xxx - 401Response: - type: object - properties: - code: - type: string - example: '900901' - type: - type: string - message: - type: string - example: Invalid Credentials - description: - type: string - example: >- - Invalid Credentials. Make sure you have provided the correct - security credentials - apiErrorCode: - type: string - example: htm.api.err.40xxx - 403Response: - type: object - properties: - code: - type: string - example: '900901' - type: - type: string - message: - type: string - example: Retailer not authorized - description: - type: string - example: The retailer is not allowed to access resource for requested - apiErrorCode: - type: string - example: htm.api.err.40xxx touchpoint - 404Response: - type: object - properties: - code: - type: string - example: '404' - type: - type: string - example: Status report - message: - type: string - example: Not Found - description: - type: string - example: The requested resource is not available. - apiErrorCode: - type: string - example: htm.api.err.40xxx - 500Response: - type: object - properties: - code: - type: string - example: '500' - type: - type: string - message: - type: string - example: Internal Server Error - description: - type: string - apiErrorCode: - type: string - example: htm.api.err.40xxx diff --git a/src/openapi/products/products-crud-v2.4.yaml b/src/openapi/products/products-crud.yaml similarity index 100% rename from src/openapi/products/products-crud-v2.4.yaml rename to src/openapi/products/products-crud.yaml From acf2cf57e929c75f8a56b175226520bbbcf4602a Mon Sep 17 00:00:00 2001 From: Max Martens Date: Tue, 25 Mar 2025 16:16:14 +0100 Subject: [PATCH 3/7] SE products WIP --- src/openapi/products/SE-products-SE.yaml | 3377 +++++++++++----------- 1 file changed, 1678 insertions(+), 1699 deletions(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index 55f1f3f..81b6683 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -4,7 +4,7 @@ info: description: |- Service Engine APIs for HTM products. These are NOT the CRUD APIs to access raw data in the database. To be used by touchpoints to get information about HTM products they are allowed to see and/or sell. - version: '1.0' + version: "1.0" servers: - url: https://api.integratielaag.nl/abt/abtserviceengine/2.0 tags: @@ -30,252 +30,241 @@ paths: 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. + 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': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/ProductPayloadListResponse' + $ref: "#/components/schemas/ProductPayloadListResponse" examples: No products / Empty list: summary: No products / Empty list description: No products - value: - { - "Entries": [] - } + value: { "Entries": [] } List containing one product with many null attributes: summary: List containing one product with many null attributes description: |- - Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \ - **Empty lists/arrays show up as "[]", not as null!** + Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \ + **Empty lists/arrays show up as "[]", not as null!** value: { - "Entries": [ - { - "productId": 99, - "productCode": null, - "productName": null, - "productDescription": null, - "productCategory": null, - "tokenTypes": [], - "sellableTouchpointIds": [], - "amountInclTax": null, - "imageReference": null, - "productPageUrl": null, - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/99", - "method": "GET" - } - } - } - ] + "Entries": + [ + { + "productId": 99, + "productName": null, + "productDescription": null, + "productCategory": null, + "tokenTypes": [], + "sellableTouchpointIds": [], + "amountInclTax": null, + "imageReference": null, + "productPageUrl": null, + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/99", + "method": "GET", + }, + }, + }, + ], } List containing one product with 4 currently active SellingPeriods (called by touchpointId 1): summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1) description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned value: { - "Entries": [ - { - "productId": 2, - "productCode": "312AB-WL", - "productName": "HTM dagkaart", - "productDescription": "Reis een dag met het openbaar vervoer bij HTM", - "productCategory": { - "productCategoryId": 6, - "isTravelProduct": false, - "name": "Barcode" + "Entries": + [ + { + "productId": 2, + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": + { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode", + }, + "tokenTypes": [], + "sellableTouchpointIds": [1, 2], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", + "method": "GET", + }, + }, }, - "tokenTypes": [], - "sellableTouchpointIds": [ - 1, - 2 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", - "method": "GET" - } - } - } - ] + ], } List containing one product with 4 currently active SellingPeriods (called by touchpointId 3): summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3) description: Only two sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - the price for touchpointId 3 is returned value: { - "Entries": [ - { - "productId": 2, - "productCode": "312AB-WL", - "productName": "HTM dagkaart", - "productDescription": "Reis een dag met het openbaar vervoer bij HTM", - "productCategory": { - "productCategoryId": 6, - "isTravelProduct": false, - "name": "Barcode" + "Entries": + [ + { + "productId": 2, + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": + { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode", + }, + "tokenTypes": [], + "sellableTouchpointIds": [3, 4], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", + "method": "GET", + }, + }, }, - "tokenTypes": [], - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", - "method": "GET" - } - } - } - ] + ], } List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4): summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4) description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product. value: { - "Entries": [ - { - "productId": 49, - "productCode": null, - "productName": "HTM Regio Vrij", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" + "Entries": + [ + { + "productId": 49, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "tokenTypes": [], + "sellableTouchpointIds": [3], + "amountInclTax": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/49", + "method": "GET", + }, + }, }, - "tokenTypes": [], - "sellableTouchpointIds": [ - 3 - ], - "amountInclTax": null, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/49", - "method": "GET" - } - } - } - ] + ], } List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4): summary: List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4) description: Product is returned value: { - "Entries": [ - { - "productId": 126, - "productCode": null, - "productName": "HTM-30001", - "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" + "Entries": + [ + { + "productId": 126, + "productName": "HTM-30001", + "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", + "productCategory": + { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "sellableTouchpointIds": [3, 4], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/126", + "method": "GET", + }, + }, }, - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/126", - "method": "GET" - } - } - } - ] + ], } List containing multiple products (called by touchpointId 3): summary: List containing multiple products (called by touchpointId 3) description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: { - "Entries": [ - { - "productId": 2, - "productCode": "312AB-WL", - "productName": "HTM dagkaart", - "productDescription": "Reis een dag met het openbaar vervoer bij HTM", - "productCategory": { - "productCategoryId": 6, - "isTravelProduct": false, - "name": "Barcode" + "Entries": + [ + { + "productId": 2, + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": + { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode", + }, + "tokenTypes": [], + "sellableTouchpointIds": [3, 4], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", + "method": "GET", + }, + }, }, - "tokenTypes": [], - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", - "method": "GET" - } - } - }, - { - "productId": 4, - "productCode": "30002-ML", - "productName": "HTM 40% korting", - "productDescription": "Reis een maand lang met 40% korting!", - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" + { + "productId": 4, + "productName": "HTM 40% korting", + "productDescription": "Reis een maand lang met 40% korting!", + "productCategory": + { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "sellableTouchpointIds": [3, 4], + "amountInclTax": 800, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/4", + "method": "GET", + }, + }, }, - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 800, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/4", - "method": "GET" - } - } - } - ] + ], } /products/{productId}: get: @@ -286,7 +275,7 @@ paths: Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \ Only information that is allowed to be seen by the calling touchpoint is returned - i.e. only currently active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices - for other touchpoints are thus filtered out. + for other touchpoints are thus filtered out. **Empty lists/arrays show up as "[]", not as null!** The response contains a product tree, including all child products (`productVariants`) of the given productId that the touchpoint is allowed to see and/or sell. @@ -306,90 +295,69 @@ paths: type: integer example: 1 responses: - '200': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/ProductPayloadResponse' + $ref: "#/components/schemas/ProductPayloadResponse" examples: 90% Discount F&F pilot product (called by touchpointId 3): summary: 90% Discount F&F pilot product (called by touchpointId 3) description: |- - All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\ - Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned. + All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\ + Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned. - This product has no child products, so its `productVariants` array is empty. + This product has no child products, so its `productVariants` array is empty. value: { "productId": 24, "parentProductId": null, - "productCode": "HTM-30901-WL", + "fikoArticleNumber": "1234", "gboPackageTemplateId": "30901", "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" - }, "productName": "HTM 90% Korting", "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!", - "validityPeriod": { - "validityPeriodId": 144, - "fromInclusive": "2023-12-31T23:00:00.000+00:00", - "toInclusive": "2028-11-25T04:00:00.000+00:00" - }, - "productTranslations": [ + "validityPeriod": { - "language": "en", - "name": "HTM 90% Discount", - "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!" - } - ], - "productOwner": { - "productOwnerId": 17, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ + "validityPeriodId": 144, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM 90% Discount", + "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!", + }, + ], + "productOwner": { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": null, - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 1, - "name": "guest" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": null, - "requiredGboPersonalAttributes": null, - "tokenTypes": [ + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM", + }, + "marketSegments": + [{ "marketSegmentId": 1, "name": "B2C" }], + "allowedGboAgeProfiles": [], + "customerSegments": [], + "productCategory": { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 1, "name": "guest" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": [], + "requiredGboPersonalAttributes": [], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], "validityDuration": "P7D", "maxStartInFutureDuration": "P6W", "isRenewable": false, @@ -400,126 +368,118 @@ paths: "isSellableAtHtm": true, "needsSolvencyCheckConsumer": false, "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 78, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } + "sellingPeriods": + [ + { + "sellingPeriodId": 78, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 78, + "amountExclTax": 92, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ - { - "sellingPriceId": 78, - "amountExclTax": 92, - "amountInclTax": 100, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null + ], + "purchasePrices": [], + "productVariants": [], } 20% Discount product (called by touchpointId 4): summary: 20% Discount product (called by touchpointId 4) description: |- - All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ - Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned. + All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ + Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned. - This product has two `productVariants`: a single month variant and a subscription variant. + This product has two `productVariants`: a single month variant and a subscription variant. value: { "productId": 126, "parentProductId": null, - "productCode": "HTM-30001", + "fikoArticleNumber": "1234", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, - "productGroupMetadata": null, "productName": "HTM 20% Korting", "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", - "validityPeriod": { - "validityPeriodId": 236, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-25T04:00:00.000+00:00" - }, - "productTranslations": [ + "validityPeriod": { - "language": "en", - "name": "HTM 20% Discount", - "description": "Travel with 20% discount using your bank card with HTM." - } - ], - "productOwner": { - "productOwnerId": 17, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ - { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": null, - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 1, - "name": "guest" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" + "validityPeriodId": 236, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00", }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM 20% Discount", + "description": "Travel with 20% discount using your bank card with HTM.", + }, + ], + "productOwner": { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": null, - "tokenTypes": [ + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM", + }, + "marketSegments": + [{ "marketSegmentId": 1, "name": "B2C" }], + "customerSegments": [], + "allowedGboAgeProfiles": [], + "productCategory": { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 1, "name": "guest" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + ], + "requiredGboPersonalAttributes": [], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", "isRenewable": null, @@ -530,418 +490,397 @@ paths: "isSellableAtHtm": true, "needsSolvencyCheckConsumer": false, "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 172, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 4, - "name": "App (Infoplaza)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": null - } - ], - "purchasePrices": null, - "productVariants": [ - { - "productId": 119, - "parentProductId": 126, - "productCode": "HTM-30001-ML", - "gboPackageTemplateId": "30001", - "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" - }, - "productName": "HTM 20% Korting (losse maand)", - "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.", - "validityPeriod": { - "validityPeriodId": 229, + "sellingPeriods": + [ + { + "sellingPeriodId": 172, "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-25T04:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM 20% Discount (single month)", - "description": "Travel with 20% discount for a month using your bank card with HTM." - } - ], - "productOwner": { - "productOwnerId": 17, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ - { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": null, - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 1, - "name": "guest" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": null, - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 160, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "salesTouchpoint": { + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": + { "salesTouchpointId": 4, "name": "App (Infoplaza)", "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } + "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": [ + "forbiddenPaymentMethods": [], + "sellingPrices": [], + }, + ], + "purchasePrices": [], + "productVariants": + [ + { + "productId": 119, + "parentProductId": 126, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productName": "HTM 20% Korting (losse maand)", + "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.", + "validityPeriod": + { + "validityPeriodId": 229, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00", + }, + "productTranslations": + [ { - "sellingPriceId": 149, - "amountExclTax": 276, - "amountInclTax": 300, + "language": "en", + "name": "HTM 20% Discount (single month)", + "description": "Travel with 20% discount for a month using your bank card with HTM.", + }, + ], + "productOwner": + { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM", + }, + "marketSegments": + [{ "marketSegmentId": 1, "name": "B2C" }], + "customerSegments": [], + "gboAgeProfiles": [], + "productCategory": + { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 1, "name": "guest" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + ], + "requiredGboPersonalAttributes": [], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 160, "fromInclusive": "2025-01-19T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null - }, - { - "productId": 120, - "parentProductId": 126, - "productCode": "HTM-30001-MA", - "gboPackageTemplateId": "30001", - "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" + "salesTouchpoint": + { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 149, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], }, - "productName": "HTM 20% Korting (doorlopend abonnement)", - "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.", - "validityPeriod": { - "validityPeriodId": 230, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-25T04:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM 20% Discount (subscription)", - "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM." - } - ], - "productOwner": { - "productOwnerId": 17, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ - { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": null, - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 1, - "name": "guest" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": null, - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": true, - "sendInvoice": true, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 159, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 4, - "name": "App (Infoplaza)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } + { + "productId": 120, + "parentProductId": 126, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productName": "HTM 20% Korting (doorlopend abonnement)", + "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.", + "validityPeriod": + { + "validityPeriodId": 230, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00", }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ + "productTranslations": + [ { - "sellingPriceId": 148, - "amountExclTax": 276, - "amountInclTax": 300, + "language": "en", + "name": "HTM 20% Discount (subscription)", + "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM.", + }, + ], + "productOwner": + { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM", + }, + "marketSegments": + [{ "marketSegmentId": 1, "name": "B2C" }], + "customerSegments": [], + "allowedGboAgeProfiles": [], + "productCategory": + { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 1, "name": "guest" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + ], + "requiredGboPersonalAttributes": [], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 159, "fromInclusive": "2025-01-19T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null - } - ] - } + "salesTouchpoint": + { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 148, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], + }, + ], + } Regio Vrij product and (part of) its productVariants (called by touchpointId 3): summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3) - description: |- - All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product - and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example. + description: |- + All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product + and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example. - The full depth of the tree is included in the example for the HL62 Reduced Fare Variant. + The full depth of the tree is included in the example for the HL62 Reduced Fare Variant. value: { "productId": 49, "parentProductId": null, - "productCode": null, + "fikoArticleNumber": "1234", "gboPackageTemplateId": null, "tapConnectProductCode": null, - "productGroupMetadata": null, "productName": "HTM Regio Vrij", "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", - "validityPeriod": { - "validityPeriodId": 161, - "fromInclusive": "2024-11-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ + "validityPeriod": { - "language": "en", - "name": "HTM Regio Free", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region." - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" + "validityPeriodId": 161, + "fromInclusive": "2024-11-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region.", + }, + ], + "productOwner": { - "customerSegmentId": 3, - "name": "Jongere (12-18)" + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "gboAgeProfileId": 1, + "name": "Baby/peuter (0 t/m 3 jaar)", + "ageFromInclusive": 0, + "ageToInclusive": 3, + }, + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + { + "ageProfileId": 4, + "name": "Volwassene (19 t/m 64 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 64, + }, + { + "ageProfileId": 5, + "name": "Oudere (65 jaar of ouder)", + "ageFromInclusive": 65, + "ageToInclusive": 999, + }, + ], + "productCategory": { - "customerSegmentId": 4, - "name": "Volwassene (19-64)" + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", }, - { - "customerSegmentId": 5, - "name": "Oudere (65+)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": - [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 3, "name": "profile" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", "isRenewable": null, @@ -952,607 +891,185 @@ paths: "isSellableAtHtm": true, "needsSolvencyCheckConsumer": false, "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 99, - "fromInclusive": "2024-11-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": null - } - ], - "purchasePrices": null, - "productVariants": [ - { - "productId": 109, - "parentProductId": 49, - "productCode": null, - "gboPackageTemplateId": null, - "tapConnectProductCode": null, - "productGroupMetadata": null, - "productName": "HTM Regio Vrij - HL62", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 219, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - }, - { - "customerSegmentId": 4, - "name": "Volwassene (19-64)" - }, - { - "customerSegmentId": 5, - "name": "Oudere (65+)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": null, - "sendInvoice": null, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 143, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { + "sellingPeriods": + [ + { + "sellingPeriodId": 99, + "fromInclusive": "2024-11-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { "salesTouchpointId": 3, "name": "Website (Perplex)", "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, }, - "forbiddenPaymentMethods": null, - "sellingPrices": null - } - ], - "purchasePrices": null, - "productVariants": [ - { - "productId": 114, - "parentProductId": 109, - "productCode": null, - "gboPackageTemplateId": "33629", - "tapConnectProductCode": null, - "productGroupMetadata": null, - "productName": "HTM Regio Vrij - Voltarief - HL62", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 224, + "forbiddenPaymentMethods": [], + "sellingPrices": [], + }, + ], + "purchasePrices": [], + "productVariants": + [ + { + "productId": 109, + "parentProductId": 49, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": + { + "validityPeriodId": 219, "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" + "toInclusive": "2099-12-30T23:00:00.000+00:00", }, - "productTranslations": [ + "productTranslations": + [ { "language": "en", - "name": "HTM Regio Free - Full Fare - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } + "name": "HTM Regio Free - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, ], - "productOwner": { + "productOwner": + { "productOwnerId": 19, "name": "MRDH", - "organization": "MRDH" + "organization": "MRDH", }, - "marketSegments": null, - "customerSegments": [ + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ { - "customerSegmentId": 4, - "name": "Volwassene (19-64)" + "gboAgeProfileId": 1, + "name": "Baby/peuter (0 t/m 3 jaar)", + "ageFromInclusive": 0, + "ageToInclusive": 3, }, { - "customerSegmentId": 5, - "name": "Oudere (65+)" - } + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + { + "ageProfileId": 4, + "name": "Volwassene (19 t/m 64 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 64, + }, + { + "ageProfileId": 5, + "name": "Oudere (65 jaar of ouder)", + "ageFromInclusive": 65, + "ageToInclusive": 999, + }, ], - "productCategory": { + "productCategory": + { "productCategoryId": 3, "isTravelProduct": true, - "name": "Afgekocht reisrecht" + "name": "Afgekocht reisrecht", }, - "requiredCustomerLevel": { + "requiredCustomerLevel": + { "requiredCustomerLevelId": 3, - "name": "profile" + "name": "profile", }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ { "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" + "customerDataItem": "birthname", }, { "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" + "customerDataItem": "surname", }, { "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" + "customerDataItem": "dateOfBirth", }, { "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" + "customerDataItem": "emailAddress", }, { "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, ], - "requiredGboPersonalAttributes": [ + "requiredGboPersonalAttributes": + [ { "requiredGboPersonalAttributeId": 1, - "name": "NAME" + "name": "NAME", }, { "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" + "name": "BIRTHDATE", }, { "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } + "name": "PHOTO", + }, ], - "tokenTypes": [ + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": null, - "sendInvoice": null, - "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 148, + "sellingPeriodId": 143, "fromInclusive": "2024-10-30T23:00:00.000+00:00", "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ + "salesTouchpoint": { - "sellingPriceId": 139, - "amountExclTax": 5412, - "amountInclTax": 5900, - "fromInclusive": "2024-12-31T23:00:00.000+00:00", - "toInclusive": "2025-12-31T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null - }, - { - "productId": 115, - "parentProductId": 109, - "productCode": null, - "gboPackageTemplateId": "33630", - "tapConnectProductCode": null, - "productGroupMetadata": null, - "productName": "HTM Regio Vrij - Reductietarief - HL62", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 225, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free - Reduced Fare - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": null, - "sendInvoice": null, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 149, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ - { - "sellingPriceId": 140, - "amountExclTax": 8899, - "amountInclTax": 9700, - "fromInclusive": "2024-12-31T23:00:00.000+0:00", - "toInclusive": "2025-12-31T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": [ - { - "productId": 116, - "parentProductId": 115, - "productCode": "33630-ML", - "gboPackageTemplateId": "33630", - "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" - }, - "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 226, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 150, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", @@ -1564,158 +1081,820 @@ paths: "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ - { - "sellingPriceId": 141, - "amountExclTax": 8899, - "amountInclTax": 9700, - "fromInclusive": "2024-12-31T23:00:00.000+0:00", - "toInclusive": "2025-12-31T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": [], }, + ], + "purchasePrices": [], + "productVariants": + [ { - "productId": 117, - "parentProductId": 115, - "productCode": "33630-MA", - "gboPackageTemplateId": "33630", + "productId": 114, + "parentProductId": 109, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "33629", "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" - }, - "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62", + "productName": "HTM Regio Vrij - Voltarief - HL62", "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 227, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ + "validityPeriod": { - "language": "en", - "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" + "validityPeriodId": 224, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - Full Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, + ], + "productOwner": { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "gboAgeProfileId": 1, + "name": "Baby/peuter (0 t/m 3 jaar)", + "ageFromInclusive": 0, + "ageToInclusive": 3, + }, + { + "ageProfileId": 4, + "name": "Volwassene (19 t/m 64 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 64, + }, + { + "ageProfileId": 5, + "name": "Oudere (65 jaar of ouder)", + "ageFromInclusive": 65, + "ageToInclusive": 999, + }, + ], + "productCategory": { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", }, + "requiredCustomerLevel": { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" + "requiredCustomerLevelId": 3, + "name": "profile", }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": + [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", - "isRenewable": true, - "sendInvoice": true, + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 148, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 139, + "amountExclTax": 5412, + "amountInclTax": 5900, + "fromInclusive": "2024-12-31T23:00:00.000+00:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], + }, + { + "productId": 115, + "parentProductId": 109, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - Reductietarief - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": + { + "validityPeriodId": 225, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, + ], + "productOwner": + { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", + }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + ], + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "requiredCustomerLevel": + { + "requiredCustomerLevelId": 3, + "name": "profile", + }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": + [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", "isSellableAtHtm": true, "needsSolvencyCheckConsumer": false, "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ + "sellingPeriods": + [ + { + "sellingPeriodId": 149, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 140, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": + [ + { + "productId": 116, + "parentProductId": 115, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": + { + "validityPeriodId": 226, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, + ], + "productOwner": + { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", + }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + ], + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "requiredCustomerLevel": + { + "requiredCustomerLevelId": 3, + "name": "profile", + }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": + [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { + "paymentMomentId": 1, + "name": "prepaid", + }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 150, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 141, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], + }, + { + "productId": 117, + "parentProductId": 115, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": + { + "validityPeriodId": 227, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, + ], + "productOwner": + { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", + }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + ], + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "requiredCustomerLevel": + { + "requiredCustomerLevelId": 3, + "name": "profile", + }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": + [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { + "paymentMomentId": 1, + "name": "prepaid", + }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 151, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 142, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentaget": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], + }, + ], + }, + ], + }, + { + "productId": 112, + "parentProductId": 49, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - HL65", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65", + "validityPeriod": + { + "validityPeriodId": 222, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - HL65", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65", + }, + ], + "productOwner": + { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", + }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "gboAgeProfileId": 1, + "name": "Baby/peuter (0 t/m 3 jaar)", + "ageFromInclusive": 0, + "ageToInclusive": 3, + }, + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + { + "ageProfileId": 4, + "name": "Volwassene (19 t/m 64 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 64, + }, + { + "ageProfileId": 5, + "name": "Oudere (65 jaar of ouder)", + "ageFromInclusive": 65, + "ageToInclusive": 999, + }, + ], + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "requiredCustomerLevel": + { + "requiredCustomerLevelId": 3, + "name": "profile", + }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 146, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": { - "sellingPeriodId": 151, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", @@ -1727,187 +1906,24 @@ paths: "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ - { - "sellingPriceId": 142, - "amountExclTax": 8899, - "amountInclTax": 9700, - "fromInclusive": "2024-12-31T23:00:00.000+0:00", - "toInclusive": "2025-12-31T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null - } - ] - } - ] - }, - { - "productId": 112, - "parentProductId": 49, - "productCode": null, - "gboPackageTemplateId": null, - "tapConnectProductCode": null, - "productGroupMetadata": null, - "productName": "HTM Regio Vrij - HL65", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65", - "validityPeriod": { - "validityPeriodId": 222, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": [], + }, + ], + "purchasePrices": [], + "productVariants": [], }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free - HL65", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - }, - { - "customerSegmentId": 4, - "name": "Volwassene (19-64)" - }, - { - "customerSegmentId": 5, - "name": "Oudere (65+)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": null, - "sendInvoice": null, - "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 146, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": null - } - ], - "purchasePrices": null, - "productVariants": null - } - ] + ], } - '404': - description: '404' + "404": + description: "404" content: application/json: schema: - $ref: '#/components/schemas/rfc9457Response' + $ref: "#/components/schemas/rfc9457Response" examples: Non-existing productId: summary: Non-existing productId @@ -1917,30 +1933,32 @@ paths: "title": "Product not found.", "detail": "No product found for productId: 1000.", "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c", - "apiErrorCode": "htm.api.err.404.2" + "apiErrorCode": "htm.api.err.404.2", } components: schemas: - TaxMetadataResponse: + GboAgeProfileResponse: type: object required: - - taxMetadataId - - taxCode - - taxPercentageAmount + - gboAgeProfileId + - name + - ageFromInclusive + - ageUntilInclusive properties: - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - taxCode: - type: string - example: V09 - taxPercentageAmount: + gboAgeProfileId: type: integer - example: 21 - description: + example: 1 + name: type: string - example: BTW VERKOOP LAAG 9% + example: Kind (4 t/m 11 jaar) + ageFromInclusive: + type: integer + description: The minimum age that the GBO age profile applies to + example: 4 + ageUntilInclusive: + type: integer + description: The maximum age that the GBO age profile applies to + example: 11 ProductTranslationResponse: type: object required: @@ -1962,7 +1980,8 @@ components: required: - sellingPriceId - amountExclTax - - taxMetadata + - taxCode + - taxPercentage - amountInclTax - fromInclusive - toInclusive @@ -1974,19 +1993,23 @@ components: amountExclTax: type: integer example: 750 - taxMetadata: - $ref: '#/components/schemas/TaxMetadataResponse' + taxCode: + type: string + example: "V09" + taxPercentage: + type: number + example: 9.0000 amountInclTax: type: integer example: 908 fromInclusive: type: string format: date-time-offset - example: '2022-03-01T00:00:00.000+00:00' + 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' + example: "2022-06-01T00:00:00.000+00:00" internalPrice: type: number example: 908.1234 @@ -1995,7 +2018,8 @@ components: required: - purchasePriceId - amountExclTax - - taxMetadata + - taxCode + - taxPercentage - amountInclTax - fromInclusive - toInclusive @@ -2006,19 +2030,23 @@ components: amountExclTax: type: integer example: 750 - taxMetadata: - $ref: '#/components/schemas/TaxMetadataResponse' + taxCode: + type: string + example: "V09" + taxPercentage: + type: number + example: 9.0000 amountInclTax: type: integer example: 908 fromInclusive: type: string format: date-time-offset - example: '2022-03-01T00:00:00.000+00:00' + 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' + example: "2022-06-01T00:00:00.000+00:00" SalesTouchpointResponse: type: object required: @@ -2053,7 +2081,7 @@ components: example: Kon. Julianaplein number: type: string - example: '10' + example: "10" numberAddition: type: string example: a @@ -2072,10 +2100,10 @@ components: example: info@htm.nl phoneNumber: type: string - example: '09004864636' + example: "09004864636" taxId: type: string - example: '09004864636' + example: "09004864636" imageReference: type: string example: https://htm.azure.net/abt/retailers/htm.svg @@ -2094,9 +2122,6 @@ components: productId: type: integer example: 1 - productCode: - type: string - example: 30901-WL productName: type: string example: HTM pilot 90% korting @@ -2177,66 +2202,16 @@ components: parentProductId: type: integer example: 1 - productCode: + fikoArticleNumber: type: string - example: 30901-WL + description: The article number of the product in FIKO + example: 1234 gboPackageTemplateId: type: string - example: '30901' + 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 @@ -2256,15 +2231,15 @@ components: fromInclusive: type: string format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' + 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' + example: "2024-09-03T23:59:59.999+00:00" productTranslations: type: array items: - $ref: '#/components/schemas/ProductTranslationResponse' + $ref: "#/components/schemas/ProductTranslationResponse" productOwner: type: object required: @@ -2308,6 +2283,10 @@ components: name: type: string example: Kind (4-11) + allowedGboAgeProfiles: + type: array + items: + $ref: "#/components/schemas/GboAgeProfileResponse" productCategory: type: object required: @@ -2500,13 +2479,13 @@ components: fromInclusive: type: string format: date-time-offset - example: '2022-03-01T00:00:00.000+00:00' + 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' + example: "2022-06-01T00:00:00.000+00:00" salesTouchpoint: - $ref: '#/components/schemas/SalesTouchpointResponse' + $ref: "#/components/schemas/SalesTouchpointResponse" forbiddenPaymentMethods: type: array items: @@ -2527,11 +2506,11 @@ components: sellingPrices: type: array items: - $ref: '#/components/schemas/SellingPriceResponse' + $ref: "#/components/schemas/SellingPriceResponse" purchasePrices: type: array items: - $ref: '#/components/schemas/PurchasePriceResponse' + $ref: "#/components/schemas/PurchasePriceResponse" auditTrail: type: array items: @@ -2554,7 +2533,7 @@ components: timestamp: type: string format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' + example: "2024-09-03T10:01:34.000+00:00" rfc9457Response: type: object properties: @@ -2580,9 +2559,9 @@ components: example: "additionalValue1" additionalProperty2: type: array - description: "Example of an additional property array to be used for error reporting." + description: "Example of an additional property array to be used for error reporting." items: type: string example: - "additionalValue2-1" - - "additionalValue2-2" \ No newline at end of file + - "additionalValue2-2" From 62c1f3a8e63834ed19495a232f03bdcf9b648d49 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 31 Mar 2025 11:48:36 +0200 Subject: [PATCH 4/7] Finish SE and TP Swaggers --- src/openapi/products/SE-products-SE.yaml | 2 +- src/openapi/products/SE-products-TP.yaml | 3379 ++++++++--------- .../products/productreference-crud.yaml | 14 + 3 files changed, 1694 insertions(+), 1701 deletions(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index 81b6683..554e912 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -1738,7 +1738,7 @@ paths: "toInclusive": "2025-12-31T23:00:00.000+00:00", "internalPrice": 0.0000, "taxCode": "V09", - "taxPercentaget": 9.0000, + "taxPercentage": 9.0000, }, ], }, diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index fe42ee4..a1e316c 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -4,7 +4,7 @@ info: description: |- Service Engine APIs for HTM products. These are NOT the CRUD APIs to access raw data in the database. To be used by touchpoints to get information about HTM products they are allowed to see and/or sell. - version: '1.0' + version: "1.0" servers: - url: https://api.integratielaag.nl/abt/touchpoint/2.0 tags: @@ -30,252 +30,241 @@ paths: 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. + 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': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/ProductPayloadListResponse' + $ref: "#/components/schemas/ProductPayloadListResponse" examples: No products / Empty list: summary: No products / Empty list description: No products - value: - { - "Entries": [] - } + value: { "Entries": [] } List containing one product with many null attributes: summary: List containing one product with many null attributes description: |- - Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \ - **Empty lists/arrays show up as "[]", not as null!** + Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \ + **Empty lists/arrays show up as "[]", not as null!** value: { - "Entries": [ - { - "productId": 99, - "productCode": null, - "productName": null, - "productDescription": null, - "productCategory": null, - "tokenTypes": [], - "sellableTouchpointIds": [], - "amountInclTax": null, - "imageReference": null, - "productPageUrl": null, - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/99", - "method": "GET" - } - } - } - ] + "Entries": + [ + { + "productId": 99, + "productName": null, + "productDescription": null, + "productCategory": null, + "tokenTypes": [], + "sellableTouchpointIds": [], + "amountInclTax": null, + "imageReference": null, + "productPageUrl": null, + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/99", + "method": "GET", + }, + }, + }, + ], } List containing one product with 4 currently active SellingPeriods (called by touchpointId 1): summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1) description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned value: { - "Entries": [ - { - "productId": 2, - "productCode": "312AB-WL", - "productName": "HTM dagkaart", - "productDescription": "Reis een dag met het openbaar vervoer bij HTM", - "productCategory": { - "productCategoryId": 6, - "isTravelProduct": false, - "name": "Barcode" + "Entries": + [ + { + "productId": 2, + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": + { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode", + }, + "tokenTypes": [], + "sellableTouchpointIds": [1, 2], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", + "method": "GET", + }, + }, }, - "tokenTypes": [], - "sellableTouchpointIds": [ - 1, - 2 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", - "method": "GET" - } - } - } - ] + ], } List containing one product with 4 currently active SellingPeriods (called by touchpointId 3): summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3) description: Only two sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - the price for touchpointId 3 is returned value: { - "Entries": [ - { - "productId": 2, - "productCode": "312AB-WL", - "productName": "HTM dagkaart", - "productDescription": "Reis een dag met het openbaar vervoer bij HTM", - "productCategory": { - "productCategoryId": 6, - "isTravelProduct": false, - "name": "Barcode" + "Entries": + [ + { + "productId": 2, + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": + { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode", + }, + "tokenTypes": [], + "sellableTouchpointIds": [3, 4], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", + "method": "GET", + }, + }, }, - "tokenTypes": [], - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", - "method": "GET" - } - } - } - ] + ], } List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4): summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4) description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product. value: { - "Entries": [ - { - "productId": 49, - "productCode": null, - "productName": "HTM Regio Vrij", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" + "Entries": + [ + { + "productId": 49, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "tokenTypes": [], + "sellableTouchpointIds": [3], + "amountInclTax": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/49", + "method": "GET", + }, + }, }, - "tokenTypes": [], - "sellableTouchpointIds": [ - 3 - ], - "amountInclTax": null, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/49", - "method": "GET" - } - } - } - ] + ], } List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4): summary: List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4) description: Product is returned value: { - "Entries": [ - { - "productId": 126, - "productCode": null, - "productName": "HTM-30001", - "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" + "Entries": + [ + { + "productId": 126, + "productName": "HTM-30001", + "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", + "productCategory": + { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "sellableTouchpointIds": [3, 4], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/126", + "method": "GET", + }, + }, }, - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/126", - "method": "GET" - } - } - } - ] + ], } List containing multiple products (called by touchpointId 3): summary: List containing multiple products (called by touchpointId 3) description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: { - "Entries": [ - { - "productId": 2, - "productCode": "312AB-WL", - "productName": "HTM dagkaart", - "productDescription": "Reis een dag met het openbaar vervoer bij HTM", - "productCategory": { - "productCategoryId": 6, - "isTravelProduct": false, - "name": "Barcode" + "Entries": + [ + { + "productId": 2, + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": + { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode", + }, + "tokenTypes": [], + "sellableTouchpointIds": [3, 4], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", + "method": "GET", + }, + }, }, - "tokenTypes": [], - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 300, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", - "method": "GET" - } - } - }, - { - "productId": 4, - "productCode": "30002-ML", - "productName": "HTM 40% korting", - "productDescription": "Reis een maand lang met 40% korting!", - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" + { + "productId": 4, + "productName": "HTM 40% korting", + "productDescription": "Reis een maand lang met 40% korting!", + "productCategory": + { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "sellableTouchpointIds": [3, 4], + "amountInclTax": 800, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": + { + "get_details": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/4", + "method": "GET", + }, + }, }, - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "sellableTouchpointIds": [ - 3, - 4 - ], - "amountInclTax": 800, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "_links": { - "get_details": { - "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/4", - "method": "GET" - } - } - } - ] + ], } /products/{productId}: get: @@ -286,7 +275,7 @@ paths: Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \ Only information that is allowed to be seen by the calling touchpoint is returned - i.e. only currently active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices - for other touchpoints are thus filtered out. + for other touchpoints are thus filtered out. **Empty lists/arrays show up as "[]", not as null!** The response contains a product tree, including all child products (`productVariants`) of the given productId that the touchpoint is allowed to see and/or sell. @@ -306,90 +295,69 @@ paths: type: integer example: 1 responses: - '200': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/ProductPayloadResponse' + $ref: "#/components/schemas/ProductPayloadResponse" examples: 90% Discount F&F pilot product (called by touchpointId 3): summary: 90% Discount F&F pilot product (called by touchpointId 3) description: |- - All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\ - Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned. + All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\ + Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned. - This product has no child products, so its `productVariants` array is empty. + This product has no child products, so its `productVariants` array is empty. value: { "productId": 24, "parentProductId": null, - "productCode": "HTM-30901-WL", + "fikoArticleNumber": "1234", "gboPackageTemplateId": "30901", "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" - }, "productName": "HTM 90% Korting", "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!", - "validityPeriod": { - "validityPeriodId": 144, - "fromInclusive": "2023-12-31T23:00:00.000+00:00", - "toInclusive": "2028-11-25T04:00:00.000+00:00" - }, - "productTranslations": [ + "validityPeriod": { - "language": "en", - "name": "HTM 90% Discount", - "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!" - } - ], - "productOwner": { - "productOwnerId": 17, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ + "validityPeriodId": 144, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM 90% Discount", + "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!", + }, + ], + "productOwner": { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": null, - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 1, - "name": "guest" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": null, - "requiredGboPersonalAttributes": null, - "tokenTypes": [ + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM", + }, + "marketSegments": + [{ "marketSegmentId": 1, "name": "B2C" }], + "allowedGboAgeProfiles": [], + "customerSegments": [], + "productCategory": { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 1, "name": "guest" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": [], + "requiredGboPersonalAttributes": [], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], "validityDuration": "P7D", "maxStartInFutureDuration": "P6W", "isRenewable": false, @@ -400,126 +368,118 @@ paths: "isSellableAtHtm": true, "needsSolvencyCheckConsumer": false, "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 78, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } + "sellingPeriods": + [ + { + "sellingPeriodId": 78, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 78, + "amountExclTax": 92, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ - { - "sellingPriceId": 78, - "amountExclTax": 92, - "amountInclTax": 100, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null + ], + "purchasePrices": [], + "productVariants": [], } 20% Discount product (called by touchpointId 4): summary: 20% Discount product (called by touchpointId 4) description: |- - All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ - Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned. + All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ + Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned. - This product has two `productVariants`: a single month variant and a subscription variant. + This product has two `productVariants`: a single month variant and a subscription variant. value: { "productId": 126, "parentProductId": null, - "productCode": "HTM-30001", + "fikoArticleNumber": "1234", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, - "productGroupMetadata": null, "productName": "HTM 20% Korting", "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", - "validityPeriod": { - "validityPeriodId": 236, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-25T04:00:00.000+00:00" - }, - "productTranslations": [ + "validityPeriod": { - "language": "en", - "name": "HTM 20% Discount", - "description": "Travel with 20% discount using your bank card with HTM." - } - ], - "productOwner": { - "productOwnerId": 17, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ - { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": null, - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 1, - "name": "guest" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" + "validityPeriodId": 236, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00", }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM 20% Discount", + "description": "Travel with 20% discount using your bank card with HTM.", + }, + ], + "productOwner": { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": null, - "tokenTypes": [ + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM", + }, + "marketSegments": + [{ "marketSegmentId": 1, "name": "B2C" }], + "customerSegments": [], + "allowedGboAgeProfiles": [], + "productCategory": { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 1, "name": "guest" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + ], + "requiredGboPersonalAttributes": [], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", "isRenewable": null, @@ -530,418 +490,397 @@ paths: "isSellableAtHtm": true, "needsSolvencyCheckConsumer": false, "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 172, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 4, - "name": "App (Infoplaza)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": null - } - ], - "purchasePrices": null, - "productVariants": [ - { - "productId": 119, - "parentProductId": 126, - "productCode": "HTM-30001-ML", - "gboPackageTemplateId": "30001", - "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" - }, - "productName": "HTM 20% Korting (losse maand)", - "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.", - "validityPeriod": { - "validityPeriodId": 229, + "sellingPeriods": + [ + { + "sellingPeriodId": 172, "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-25T04:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM 20% Discount (single month)", - "description": "Travel with 20% discount for a month using your bank card with HTM." - } - ], - "productOwner": { - "productOwnerId": 17, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ - { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": null, - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 1, - "name": "guest" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": null, - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 160, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "salesTouchpoint": { + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": + { "salesTouchpointId": 4, "name": "App (Infoplaza)", "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } + "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": [ + "forbiddenPaymentMethods": [], + "sellingPrices": [], + }, + ], + "purchasePrices": [], + "productVariants": + [ + { + "productId": 119, + "parentProductId": 126, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productName": "HTM 20% Korting (losse maand)", + "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.", + "validityPeriod": + { + "validityPeriodId": 229, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00", + }, + "productTranslations": + [ { - "sellingPriceId": 149, - "amountExclTax": 276, - "amountInclTax": 300, + "language": "en", + "name": "HTM 20% Discount (single month)", + "description": "Travel with 20% discount for a month using your bank card with HTM.", + }, + ], + "productOwner": + { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM", + }, + "marketSegments": + [{ "marketSegmentId": 1, "name": "B2C" }], + "customerSegments": [], + "gboAgeProfiles": [], + "productCategory": + { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 1, "name": "guest" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + ], + "requiredGboPersonalAttributes": [], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 160, "fromInclusive": "2025-01-19T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null - }, - { - "productId": 120, - "parentProductId": 126, - "productCode": "HTM-30001-MA", - "gboPackageTemplateId": "30001", - "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" + "salesTouchpoint": + { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 149, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], }, - "productName": "HTM 20% Korting (doorlopend abonnement)", - "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.", - "validityPeriod": { - "validityPeriodId": 230, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-25T04:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM 20% Discount (subscription)", - "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM." - } - ], - "productOwner": { - "productOwnerId": 17, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ - { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": null, - "productCategory": { - "productCategoryId": 1, - "isTravelProduct": true, - "name": "Kortingsabonnement" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 1, - "name": "guest" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": null, - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": true, - "sendInvoice": true, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 159, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 4, - "name": "App (Infoplaza)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } + { + "productId": 120, + "parentProductId": 126, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productName": "HTM 20% Korting (doorlopend abonnement)", + "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.", + "validityPeriod": + { + "validityPeriodId": 230, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00", }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ + "productTranslations": + [ { - "sellingPriceId": 148, - "amountExclTax": 276, - "amountInclTax": 300, + "language": "en", + "name": "HTM 20% Discount (subscription)", + "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM.", + }, + ], + "productOwner": + { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM", + }, + "marketSegments": + [{ "marketSegmentId": 1, "name": "B2C" }], + "customerSegments": [], + "allowedGboAgeProfiles": [], + "productCategory": + { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement", + }, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 1, "name": "guest" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + ], + "requiredGboPersonalAttributes": [], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 159, "fromInclusive": "2025-01-19T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null - } - ] - } + "salesTouchpoint": + { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 148, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], + }, + ], + } Regio Vrij product and (part of) its productVariants (called by touchpointId 3): summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3) - description: |- - All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product - and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example. + description: |- + All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product + and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example. - The full depth of the tree is included in the example for the HL62 Reduced Fare Variant. + The full depth of the tree is included in the example for the HL62 Reduced Fare Variant. value: { "productId": 49, "parentProductId": null, - "productCode": null, + "fikoArticleNumber": "1234", "gboPackageTemplateId": null, "tapConnectProductCode": null, - "productGroupMetadata": null, "productName": "HTM Regio Vrij", "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", - "validityPeriod": { - "validityPeriodId": 161, - "fromInclusive": "2024-11-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ + "validityPeriod": { - "language": "en", - "name": "HTM Regio Free", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region." - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" + "validityPeriodId": 161, + "fromInclusive": "2024-11-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region.", + }, + ], + "productOwner": { - "customerSegmentId": 3, - "name": "Jongere (12-18)" + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "gboAgeProfileId": 1, + "name": "Baby/peuter (0 t/m 3 jaar)", + "ageFromInclusive": 0, + "ageToInclusive": 3, + }, + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + { + "ageProfileId": 4, + "name": "Volwassene (19 t/m 64 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 64, + }, + { + "ageProfileId": 5, + "name": "Oudere (65 jaar of ouder)", + "ageFromInclusive": 65, + "ageToInclusive": 999, + }, + ], + "productCategory": { - "customerSegmentId": 4, - "name": "Volwassene (19-64)" + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", }, - { - "customerSegmentId": 5, - "name": "Oudere (65+)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": - [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, + "requiredCustomerLevel": + { "requiredCustomerLevelId": 3, "name": "profile" }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", "isRenewable": null, @@ -952,607 +891,185 @@ paths: "isSellableAtHtm": true, "needsSolvencyCheckConsumer": false, "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 99, - "fromInclusive": "2024-11-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": null - } - ], - "purchasePrices": null, - "productVariants": [ - { - "productId": 109, - "parentProductId": 49, - "productCode": null, - "gboPackageTemplateId": null, - "tapConnectProductCode": null, - "productGroupMetadata": null, - "productName": "HTM Regio Vrij - HL62", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 219, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - }, - { - "customerSegmentId": 4, - "name": "Volwassene (19-64)" - }, - { - "customerSegmentId": 5, - "name": "Oudere (65+)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": null, - "sendInvoice": null, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 143, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { + "sellingPeriods": + [ + { + "sellingPeriodId": 99, + "fromInclusive": "2024-11-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { "salesTouchpointId": 3, "name": "Website (Perplex)", "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, }, - "forbiddenPaymentMethods": null, - "sellingPrices": null - } - ], - "purchasePrices": null, - "productVariants": [ - { - "productId": 114, - "parentProductId": 109, - "productCode": null, - "gboPackageTemplateId": "33629", - "tapConnectProductCode": null, - "productGroupMetadata": null, - "productName": "HTM Regio Vrij - Voltarief - HL62", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 224, + "forbiddenPaymentMethods": [], + "sellingPrices": [], + }, + ], + "purchasePrices": [], + "productVariants": + [ + { + "productId": 109, + "parentProductId": 49, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": + { + "validityPeriodId": 219, "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" + "toInclusive": "2099-12-30T23:00:00.000+00:00", }, - "productTranslations": [ + "productTranslations": + [ { "language": "en", - "name": "HTM Regio Free - Full Fare - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } + "name": "HTM Regio Free - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, ], - "productOwner": { + "productOwner": + { "productOwnerId": 19, "name": "MRDH", - "organization": "MRDH" + "organization": "MRDH", }, - "marketSegments": null, - "customerSegments": [ + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ { - "customerSegmentId": 4, - "name": "Volwassene (19-64)" + "gboAgeProfileId": 1, + "name": "Baby/peuter (0 t/m 3 jaar)", + "ageFromInclusive": 0, + "ageToInclusive": 3, }, { - "customerSegmentId": 5, - "name": "Oudere (65+)" - } + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + { + "ageProfileId": 4, + "name": "Volwassene (19 t/m 64 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 64, + }, + { + "ageProfileId": 5, + "name": "Oudere (65 jaar of ouder)", + "ageFromInclusive": 65, + "ageToInclusive": 999, + }, ], - "productCategory": { + "productCategory": + { "productCategoryId": 3, "isTravelProduct": true, - "name": "Afgekocht reisrecht" + "name": "Afgekocht reisrecht", }, - "requiredCustomerLevel": { + "requiredCustomerLevel": + { "requiredCustomerLevelId": 3, - "name": "profile" + "name": "profile", }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ { "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" + "customerDataItem": "birthname", }, { "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" + "customerDataItem": "surname", }, { "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" + "customerDataItem": "dateOfBirth", }, { "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" + "customerDataItem": "emailAddress", }, { "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, ], - "requiredGboPersonalAttributes": [ + "requiredGboPersonalAttributes": + [ { "requiredGboPersonalAttributeId": 1, - "name": "NAME" + "name": "NAME", }, { "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" + "name": "BIRTHDATE", }, { "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } + "name": "PHOTO", + }, ], - "tokenTypes": [ + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": null, - "sendInvoice": null, - "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 148, + "sellingPeriodId": 143, "fromInclusive": "2024-10-30T23:00:00.000+00:00", "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ + "salesTouchpoint": { - "sellingPriceId": 139, - "amountExclTax": 5412, - "amountInclTax": 5900, - "fromInclusive": "2024-12-31T23:00:00.000+00:00", - "toInclusive": "2025-12-31T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null - }, - { - "productId": 115, - "parentProductId": 109, - "productCode": null, - "gboPackageTemplateId": "33630", - "tapConnectProductCode": null, - "productGroupMetadata": null, - "productName": "HTM Regio Vrij - Reductietarief - HL62", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 225, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free - Reduced Fare - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": null, - "sendInvoice": null, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 149, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ - { - "sellingPriceId": 140, - "amountExclTax": 8899, - "amountInclTax": 9700, - "fromInclusive": "2024-12-31T23:00:00.000+0:00", - "toInclusive": "2025-12-31T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": [ - { - "productId": 116, - "parentProductId": 115, - "productCode": "33630-ML", - "gboPackageTemplateId": "33630", - "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" - }, - "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 226, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 150, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", @@ -1564,158 +1081,820 @@ paths: "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ - { - "sellingPriceId": 141, - "amountExclTax": 8899, - "amountInclTax": 9700, - "fromInclusive": "2024-12-31T23:00:00.000+0:00", - "toInclusive": "2025-12-31T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": [], }, + ], + "purchasePrices": [], + "productVariants": + [ { - "productId": 117, - "parentProductId": 115, - "productCode": "33630-MA", - "gboPackageTemplateId": "33630", + "productId": 114, + "parentProductId": 109, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "33629", "tapConnectProductCode": null, - "productGroupMetadata": { - "productGroupMetadataId": "WIP", - "productGroupCode": "WIP", - "department": "WIP", - "costCenter": "WIP", - "costType": "WIP", - "description": "Work in Progress - will follow later, when FIKO is implemented", - "user": "WIP", - "documentCode": "WIP", - "timestampUpdated": "2024-09-03T15:07:53.470+00:00", - "validFrom": "2024-08-01T00:00:00.000+00:00", - "validUntil": "2025-08-01T00:00:00.000+00:00" - }, - "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62", + "productName": "HTM Regio Vrij - Voltarief - HL62", "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", - "validityPeriod": { - "validityPeriodId": 227, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" - }, - "productTranslations": [ + "validityPeriod": { - "language": "en", - "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" + "validityPeriodId": 224, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - Full Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, + ], + "productOwner": { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "gboAgeProfileId": 1, + "name": "Baby/peuter (0 t/m 3 jaar)", + "ageFromInclusive": 0, + "ageToInclusive": 3, + }, + { + "ageProfileId": 4, + "name": "Volwassene (19 t/m 64 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 64, + }, + { + "ageProfileId": 5, + "name": "Oudere (65 jaar of ouder)", + "ageFromInclusive": 65, + "ageToInclusive": 999, + }, + ], + "productCategory": { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", }, + "requiredCustomerLevel": { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" + "requiredCustomerLevelId": 3, + "name": "profile", }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": + [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", - "isRenewable": true, - "sendInvoice": true, + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 148, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 139, + "amountExclTax": 5412, + "amountInclTax": 5900, + "fromInclusive": "2024-12-31T23:00:00.000+00:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], + }, + { + "productId": 115, + "parentProductId": 109, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - Reductietarief - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": + { + "validityPeriodId": 225, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, + ], + "productOwner": + { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", + }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + ], + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "requiredCustomerLevel": + { + "requiredCustomerLevelId": 3, + "name": "profile", + }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": + [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", "isSellableAtHtm": true, "needsSolvencyCheckConsumer": false, "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ + "sellingPeriods": + [ + { + "sellingPeriodId": 149, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 140, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": + [ + { + "productId": 116, + "parentProductId": 115, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": + { + "validityPeriodId": 226, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, + ], + "productOwner": + { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", + }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + ], + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "requiredCustomerLevel": + { + "requiredCustomerLevelId": 3, + "name": "profile", + }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": + [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { + "paymentMomentId": 1, + "name": "prepaid", + }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 150, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 141, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], + }, + { + "productId": 117, + "parentProductId": 115, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": + { + "validityPeriodId": 227, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62", + }, + ], + "productOwner": + { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", + }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + ], + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "requiredCustomerLevel": + { + "requiredCustomerLevelId": 3, + "name": "profile", + }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": + [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { + "paymentMomentId": 1, + "name": "prepaid", + }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 151, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": + [ + { + "sellingPriceId": 142, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxCode": "V09", + "taxPercentage": 9.0000, + }, + ], + }, + ], + "purchasePrices": [], + "productVariants": [], + }, + ], + }, + ], + }, + { + "productId": 112, + "parentProductId": 49, + "fikoArticleNumber": "1234", + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productName": "HTM Regio Vrij - HL65", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65", + "validityPeriod": + { + "validityPeriodId": 222, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + }, + "productTranslations": + [ + { + "language": "en", + "name": "HTM Regio Free - HL65", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65", + }, + ], + "productOwner": + { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH", + }, + "marketSegments": [], + "customerSegments": [], + "allowedGboAgeProfiles": + [ + { + "gboAgeProfileId": 1, + "name": "Baby/peuter (0 t/m 3 jaar)", + "ageFromInclusive": 0, + "ageToInclusive": 3, + }, + { + "ageProfileId": 2, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + { + "ageProfileId": 3, + "name": "Jongere (12 t/m 18 jaar)", + "ageFromInclusive": 12, + "ageToInclusive": 18, + }, + { + "ageProfileId": 4, + "name": "Volwassene (19 t/m 64 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 64, + }, + { + "ageProfileId": 5, + "name": "Oudere (65 jaar of ouder)", + "ageFromInclusive": 65, + "ageToInclusive": 999, + }, + ], + "productCategory": + { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht", + }, + "requiredCustomerLevel": + { + "requiredCustomerLevelId": 3, + "name": "profile", + }, + "requiredProducts": [], + "incompatibleProducts": [], + "mandatoryCustomerDataItems": + [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname", + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname", + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth", + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress", + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken", + }, + { + "mandatoryCustomerDataItemId": 8, + "customerDataItem": "padBirthDate", + }, + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME", + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE", + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO", + }, + ], + "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }], + "paymentMoment": + { "paymentMomentId": 1, "name": "prepaid" }, + "serviceOptions": [], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": + [ + { + "sellingPeriodId": 146, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-12-30T23:00:00.000+00:00", + "salesTouchpoint": { - "sellingPeriodId": 151, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": + { "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", @@ -1727,187 +1906,24 @@ paths: "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": [ - { - "sellingPriceId": 142, - "amountExclTax": 8899, - "amountInclTax": 9700, - "fromInclusive": "2024-12-31T23:00:00.000+0:00", - "toInclusive": "2025-12-31T23:00:00.000+00:00", - "internalPrice": 0.0000, - "taxMetadata": { - "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%" - } - } - ] - } - ], - "purchasePrices": null, - "productVariants": null - } - ] - } - ] - }, - { - "productId": 112, - "parentProductId": 49, - "productCode": null, - "gboPackageTemplateId": null, - "tapConnectProductCode": null, - "productGroupMetadata": null, - "productName": "HTM Regio Vrij - HL65", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65", - "validityPeriod": { - "validityPeriodId": 222, - "fromInclusive": "2024-09-30T23:00:00.000+00:00", - "toInclusive": "2099-12-30T23:00:00.000+00:00" + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + }, + }, + "forbiddenPaymentMethods": [], + "sellingPrices": [], + }, + ], + "purchasePrices": [], + "productVariants": [], }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free - HL65", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65" - } - ], - "productOwner": { - "productOwnerId": 19, - "name": "MRDH", - "organization": "MRDH" - }, - "marketSegments": null, - "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - }, - { - "customerSegmentId": 4, - "name": "Volwassene (19-64)" - }, - { - "customerSegmentId": 5, - "name": "Oudere (65+)" - } - ], - "productCategory": { - "productCategoryId": 3, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": null, - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 1, - "customerDataItem": "birthname" - }, - { - "mandatoryCustomerDataItemId": 2, - "customerDataItem": "surname" - }, - { - "mandatoryCustomerDataItemId": 3, - "customerDataItem": "dateOfBirth" - }, - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 7, - "customerDataItem": "ovPayToken" - } - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": null, - "sendInvoice": null, - "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij", - "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "sellingPeriodId": 146, - "fromInclusive": "2024-10-30T23:00:00.000+00:00", - "toInclusive": "2029-12-30T23:00:00.000+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": 10, - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": 572309345923, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": null, - "sellingPrices": null - } - ], - "purchasePrices": null, - "productVariants": null - } - ] + ], } - '404': - description: '404' + "404": + description: "404" content: application/json: schema: - $ref: '#/components/schemas/rfc9457Response' + $ref: "#/components/schemas/rfc9457Response" examples: Non-existing productId: summary: Non-existing productId @@ -1917,30 +1933,32 @@ paths: "title": "Product not found.", "detail": "No product found for productId: 1000.", "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c", - "apiErrorCode": "htm.api.err.404.2" + "apiErrorCode": "htm.api.err.404.2", } components: schemas: - TaxMetadataResponse: + GboAgeProfileResponse: type: object required: - - taxMetadataId - - taxCode - - taxPercentageAmount + - gboAgeProfileId + - name + - ageFromInclusive + - ageUntilInclusive properties: - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - taxCode: - type: string - example: V09 - taxPercentageAmount: + gboAgeProfileId: type: integer - example: 21 - description: + example: 1 + name: type: string - example: BTW VERKOOP LAAG 9% + example: Kind (4 t/m 11 jaar) + ageFromInclusive: + type: integer + description: The minimum age that the GBO age profile applies to + example: 4 + ageUntilInclusive: + type: integer + description: The maximum age that the GBO age profile applies to + example: 11 ProductTranslationResponse: type: object required: @@ -1962,7 +1980,8 @@ components: required: - sellingPriceId - amountExclTax - - taxMetadata + - taxCode + - taxPercentage - amountInclTax - fromInclusive - toInclusive @@ -1974,19 +1993,23 @@ components: amountExclTax: type: integer example: 750 - taxMetadata: - $ref: '#/components/schemas/TaxMetadataResponse' + taxCode: + type: string + example: "V09" + taxPercentage: + type: number + example: 9.0000 amountInclTax: type: integer example: 908 fromInclusive: type: string format: date-time-offset - example: '2022-03-01T00:00:00.000+00:00' + 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' + example: "2022-06-01T00:00:00.000+00:00" internalPrice: type: number example: 908.1234 @@ -1995,7 +2018,8 @@ components: required: - purchasePriceId - amountExclTax - - taxMetadata + - taxCode + - taxPercentage - amountInclTax - fromInclusive - toInclusive @@ -2006,19 +2030,23 @@ components: amountExclTax: type: integer example: 750 - taxMetadata: - $ref: '#/components/schemas/TaxMetadataResponse' + taxCode: + type: string + example: "V09" + taxPercentage: + type: number + example: 9.0000 amountInclTax: type: integer example: 908 fromInclusive: type: string format: date-time-offset - example: '2022-03-01T00:00:00.000+00:00' + 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' + example: "2022-06-01T00:00:00.000+00:00" SalesTouchpointResponse: type: object required: @@ -2053,7 +2081,7 @@ components: example: Kon. Julianaplein number: type: string - example: '10' + example: "10" numberAddition: type: string example: a @@ -2072,10 +2100,10 @@ components: example: info@htm.nl phoneNumber: type: string - example: '09004864636' + example: "09004864636" taxId: type: string - example: '09004864636' + example: "09004864636" imageReference: type: string example: https://htm.azure.net/abt/retailers/htm.svg @@ -2094,9 +2122,6 @@ components: productId: type: integer example: 1 - productCode: - type: string - example: 30901-WL productName: type: string example: HTM pilot 90% korting @@ -2156,7 +2181,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/1 + example: https://api.integratielaag.nl/abt/touchpoint/2.0/products/1 method: type: string example: GET @@ -2177,66 +2202,16 @@ components: parentProductId: type: integer example: 1 - productCode: + fikoArticleNumber: type: string - example: 30901-WL + description: The article number of the product in FIKO + example: 1234 gboPackageTemplateId: type: string - example: '30901' + 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 @@ -2256,15 +2231,15 @@ components: fromInclusive: type: string format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' + 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' + example: "2024-09-03T23:59:59.999+00:00" productTranslations: type: array items: - $ref: '#/components/schemas/ProductTranslationResponse' + $ref: "#/components/schemas/ProductTranslationResponse" productOwner: type: object required: @@ -2308,6 +2283,10 @@ components: name: type: string example: Kind (4-11) + allowedGboAgeProfiles: + type: array + items: + $ref: "#/components/schemas/GboAgeProfileResponse" productCategory: type: object required: @@ -2500,13 +2479,13 @@ components: fromInclusive: type: string format: date-time-offset - example: '2022-03-01T00:00:00.000+00:00' + 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' + example: "2022-06-01T00:00:00.000+00:00" salesTouchpoint: - $ref: '#/components/schemas/SalesTouchpointResponse' + $ref: "#/components/schemas/SalesTouchpointResponse" forbiddenPaymentMethods: type: array items: @@ -2527,11 +2506,11 @@ components: sellingPrices: type: array items: - $ref: '#/components/schemas/SellingPriceResponse' + $ref: "#/components/schemas/SellingPriceResponse" purchasePrices: type: array items: - $ref: '#/components/schemas/PurchasePriceResponse' + $ref: "#/components/schemas/PurchasePriceResponse" auditTrail: type: array items: @@ -2554,7 +2533,7 @@ components: timestamp: type: string format: date-time-offset - example: '2024-09-03T10:01:34.000+00:00' + example: "2024-09-03T10:01:34.000+00:00" rfc9457Response: type: object properties: @@ -2580,9 +2559,9 @@ components: example: "additionalValue1" additionalProperty2: type: array - description: "Example of an additional property array to be used for error reporting." + description: "Example of an additional property array to be used for error reporting." items: type: string example: - "additionalValue2-1" - - "additionalValue2-2" \ No newline at end of file + - "additionalValue2-2" diff --git a/src/openapi/products/productreference-crud.yaml b/src/openapi/products/productreference-crud.yaml index eeb43b6..15e6224 100644 --- a/src/openapi/products/productreference-crud.yaml +++ b/src/openapi/products/productreference-crud.yaml @@ -1566,6 +1566,8 @@ paths: customerDataItem: phone - mandatoryCustomerDataItemId: 7 customerDataItem: ovPayToken + - mandatoryCustomerDataItemId: 8 + customerDataItem: padBirthDate schema: $ref: '#/components/schemas/mandatoryCustomerDataItems' description: A list of users @@ -2281,6 +2283,10 @@ components: type: array example: Entries: + - gboAgeProfileId: 1 + name: Kind (0 t/m 3 jaar) + ageFromInclusive: 0 + ageToInclusive: 3 - gboAgeProfileId: 2 name: Kind (4 t/m 11 jaar) ageFromInclusive: 4 @@ -2289,6 +2295,14 @@ components: name: Jongere (12 t/m 18 jaar) ageFromInclusive: 12 ageToInclusive: 18 + - gboAgeProfileId: 4 + name: Volwassene (19 t/m 64 jaar) + ageFromInclusive: 19 + ageToInclusive: 64 + - gboAgeProfileId: 5 + name: Oudere (65 jaar of ouder) + ageFromInclusive: 65 + ageToInclusive: 999 GboAgeProfile: type: object required: From 6a74d553ff197f5bedba6a45a0920862941c9395 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 3 Apr 2025 12:47:25 +0200 Subject: [PATCH 5/7] Fix POST examples, add mandatoryCustomerDataItems shippingAddress and billingAddress --- .../products/productreference-crud.yaml | 4 ++++ src/openapi/products/products-crud.yaml | 21 ++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/openapi/products/productreference-crud.yaml b/src/openapi/products/productreference-crud.yaml index 15e6224..9897b43 100644 --- a/src/openapi/products/productreference-crud.yaml +++ b/src/openapi/products/productreference-crud.yaml @@ -1568,6 +1568,10 @@ paths: customerDataItem: ovPayToken - mandatoryCustomerDataItemId: 8 customerDataItem: padBirthDate + - mandatoryCustomerDataItemId: 9 + customerDataItem: shippingAddress + - mandatoryCustomerDataItemId: 10 + customerDataItem: billingAddress schema: $ref: '#/components/schemas/mandatoryCustomerDataItems' description: A list of users diff --git a/src/openapi/products/products-crud.yaml b/src/openapi/products/products-crud.yaml index 1d64415..493e49e 100644 --- a/src/openapi/products/products-crud.yaml +++ b/src/openapi/products/products-crud.yaml @@ -483,16 +483,18 @@ paths: "sellingPrices": [ { "amountExclTax": 92, - "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, "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, + "taxCode": "V09", + "taxPercentage": 9.0000, "fromInclusive": "2025-01-01T00:00:00.000", "toInclusive": "2025-12-31T23:59:59.999", "internalPrice": 101.0000 @@ -506,16 +508,18 @@ paths: "sellingPrices": [ { "amountExclTax": 92, - "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "amountInclTax": 100, + "taxCode": "V09", + "taxPercentage": 9.0000, "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, + "taxCode": "V09", + "taxPercentage": 9.0000, "fromInclusive": "2025-01-01T00:00:00.000", "toInclusive": "2025-12-31T23:59:59.999", "internalPrice": 101.0000 @@ -526,8 +530,9 @@ paths: "purchasePrices": [ { "amountExclTax": 0, - "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", "amountInclTax": 0, + "taxCode": "V09", + "taxPercentage": 9.0000, "fromInclusive": "2024-09-01T00:00:00.000", "toInclusive": "2025-12-31T23:59:59.999" } @@ -622,8 +627,9 @@ paths: "sellingPrices": [ { "amountExclTax": 5413, - "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "amountInclTax": 5900, + "taxCode": "V09", + "taxPercentage": 9.0000, "fromInclusive": "2024-09-01T00:00:00.000", "toInclusive": "2024-12-31T23:59:59.999", "internalPrice": 5413.0000 @@ -634,8 +640,9 @@ paths: "purchasePrices": [ { "amountExclTax": 0, - "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", "amountInclTax": 0, + "taxCode": "V09", + "taxPercentage": 9.0000, "fromInclusive": "2024-09-01T00:00:00.000", "toInclusive": "2024-12-31T23:59:59.999" } From 74347acf9dea276d6f0cf2e58296d6a1fb024488 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 3 Apr 2025 12:54:30 +0200 Subject: [PATCH 6/7] Fix productOwners PUT/DELETE --- src/openapi/products/productreference-crud.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/openapi/products/productreference-crud.yaml b/src/openapi/products/productreference-crud.yaml index 9897b43..dc0f9d7 100644 --- a/src/openapi/products/productreference-crud.yaml +++ b/src/openapi/products/productreference-crud.yaml @@ -275,6 +275,7 @@ paths: summary: Create a productowners. tags: - ABTProductReference CRUD + /productowners/{productOwnerId}: delete: description: "This method will delete the productOwner when provided the\nproductOwnerId.\ \ \n" From 5bb8694b25a3fa9359128d692d43dc13579bcca3 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 7 Apr 2025 12:07:12 +0200 Subject: [PATCH 7/7] Fixed number and taxId type in examples --- src/openapi/products/SE-products-SE.yaml | 40 ++++++++++----------- src/openapi/products/SE-products-TP.yaml | 44 ++++++++++++------------ 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index 554e912..759014d 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -384,14 +384,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -506,14 +506,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -608,14 +608,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -722,14 +722,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -907,14 +907,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1073,14 +1073,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1228,14 +1228,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1388,14 +1388,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1552,14 +1552,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1716,7 +1716,7 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", @@ -1898,7 +1898,7 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index a1e316c..163ee34 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -384,14 +384,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -506,14 +506,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -608,14 +608,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -722,14 +722,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -907,14 +907,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1073,14 +1073,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1228,14 +1228,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1388,14 +1388,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1552,14 +1552,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1716,14 +1716,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, }, @@ -1898,14 +1898,14 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": 10, + "number": "10", "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": 572309345923, + "taxId": "572309345923", "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", }, },