From a0ebde6ae230065fdf65bbb0aef18ac7d3f6b679 Mon Sep 17 00:00:00 2001 From: Herald Date: Tue, 23 Jun 2026 13:47:00 +0200 Subject: [PATCH 01/11] Added swagger for container notifications --- .../abt-container-notifications.yaml | 1841 +++++++++++++++++ .../container/abt-container-tokens.yaml | 143 ++ 2 files changed, 1984 insertions(+) create mode 100644 src/openapi/container/abt-container-notifications.yaml create mode 100644 src/openapi/container/abt-container-tokens.yaml diff --git a/src/openapi/container/abt-container-notifications.yaml b/src/openapi/container/abt-container-notifications.yaml new file mode 100644 index 0000000..9143c68 --- /dev/null +++ b/src/openapi/container/abt-container-notifications.yaml @@ -0,0 +1,1841 @@ +openapi: 3.0.1 +info: + title: ABT Container APIs for Notifications + description: >- + ABT Containere APIs for all HTM Notifications. These are NOT the CRUD APIs to access raw data in the database. + version: "1.0" +servers: + - url: https://services.acc.api.htm.nl/abt/container/1.0 +tags: + - name: Notification categories + description: >- + Service Engine APIs for all HTM Notifications metadata. To build content only. + - name: Notification subscriptions + description: >- + Service Engine APIs for the HTM Notification subscriptions for a user. + Contains the subscriptions on category level. + - name: Notification preferences + description: >- + Service Engine APIs for the HTM Notification preferences for a category for a user. + Contains a full list on event type channel level. +paths: + /customers/{customerProfileId}/notificationpreferences: + parameters: + - name: customerProfileId + in: path + schema: + type: integer + example: 123 + required: true + description: The identifier of the customer who wants to access their notification preferences + - name: deviceId + in: query + schema: + type: string + format: uuid + example: 7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b + required: false + description: | + Filter only notification preferences for this device id. Note that as a result, only eventTypeChannels that have resources for this device will be returned. + Also note that once the preferences are PUT back, the deviceId should be provided again to avoid overwriting other device preferences. + get: + tags: + - Notification preferences + summary: Get notification categories and optins references for that category that a touchpoint can show for a specific customer. + description: | + Get notification categories that a touchpoint can show and optins ( eventTypes) and channels (eventType_channels) for the optin for that category for a specific customer. + responses: + "200": + description: OK + content: + application/json: + examples: + noNotificationSubscriptions: + summary: Return no notification categories with subscriptions + value: { "notificationCategories": [] } + oneNotificationCategoryWithSubscription: + summary: Return one notification category with one subscription + value: + { + "notificationCategories": + [ + { + "notificationCategoryId": 2, + "name": "Nieuwsbrief aanmelding", + "groupName": "Marketing", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "af6305d3-f95d-42af-b22a-4181594d45dc", + "customerProfileId": 42, + "ovPayTokenId": null, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 1, + "name": "newsletter", + "subName": null, + "prettyName": "HTM Nieuwsbrief", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "29cfcde2-c2f9-4548-a65e-d7789e3decc2", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + } + oneNotificationSubscriptionFilteredByDeviceId: + summary: Return one notification category with one subscription, filtered for 'Mijn iPhone 12' + value: + { + "notificationCategories": + [ + { + "notificationCategoryId": 1, + "name": "Reizen", + "groupName": "Mijn passen", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "04ef3297-e0ff-4db6-90a4-6f0576ef4741", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 112, + "alias": "Mijn ING bankpas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 2, + "name": "GBO", + "subName": "CI", + "prettyName": "Normal Check-in", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "CO", + "prettyName": "Normal Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "a1b2c3d4-e5f6-4789-abcd-1234567890ab", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "MISSING_CO", + "prettyName": "Missing Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + } + multipleNotificationCategoriesWithSubscriptions: + summary: Return multiple notification categories with subscriptions for one customer, both push and mail + value: + { + "notificationCategories": + [ + { + "notificationCategoryId": 1, + "name": "Reizen", + "groupName": "Mijn passen", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "04ef3297-e0ff-4db6-90a4-6f0576ef4741", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 112, + "alias": "Mijn ING bankpas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 2, + "name": "GBO", + "subName": "CI", + "prettyName": "Normal Check-in", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "CO", + "prettyName": "Normal Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "a1b2c3d4-e5f6-4789-abcd-1234567890ab", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "MISSING_CO", + "prettyName": "Missing Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "c3d4e5f6-789a-4bcd-ef01-34567890abcd", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + { + "notificationSubscriptionId": "8469e00a-724a-4e72-b432-fb14c939c9d3", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 113, + "alias": "Mijn OV-pas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 2, + "name": "GBO", + "subName": "CI", + "prettyName": "Normal Check-in", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "CO", + "prettyName": "Normal Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "a1b2c3d4-e5f6-4789-abcd-1234567890ab", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "MISSING_CO", + "prettyName": "Missing Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "c3d4e5f6-789a-4bcd-ef01-34567890abcd", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + "notificationCategoryId": 4, + "name": "Producten", + "groupName": "Mijn passen", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "af6305d3-f95d-42af-b22a-4181594d45dc", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 112, + "alias": "Mijn ING bankpas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 8, + "name": "GBO", + "subName": "PRODUCT_ACTIVATED", + "prettyName": "Product Activated", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 9, + "name": "GBO", + "subName": "PRODUCT_REFUNDED", + "prettyName": "Product Refunded", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + ], + }, + { + "notificationSubscriptionId": "f2acafdc-0410-474f-8c8b-ba7c7b550f8e", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 113, + "alias": "Mijn OV-pas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 8, + "name": "GBO", + "subName": "PRODUCT_ACTIVATED", + "prettyName": "Product Activated", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 9, + "name": "GBO", + "subName": "PRODUCT_REFUNDED", + "prettyName": "Product Refunded", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + "notificationCategoryId": 2, + "name": "Nieuwsbrief aanmelding", + "groupName": "Marketing", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "af6305d3-f95d-42af-b22a-4181594d45dc", + "customerProfileId": 42, + "ovPayTokenId": null, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 1, + "name": "HTM", + "subName": "NEWSLETTER", + "prettyName": "HTM Nieuwsbrief", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "29cfcde2-c2f9-4548-a65e-d7789e3decc2", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + } + put: + tags: + - Notification preferences + summary: Get notification categories and optins references for that category that a touchpoint can show for a specific customer. + description: | + Get notification categories that a touchpoint can show and optins ( eventTypes) and channels (eventType_channels) for the optin for that category for a specific customer. + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + putMultipleSubscriptionsWithoutFilter: + summary: Put all notification categories with all subscriptions for a single customer, without filtering + value: + { + "notificationCategories": + [ + { + "notificationCategoryId": 1, + "name": "Reizen", + "groupName": "Mijn passen", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "04ef3297-e0ff-4db6-90a4-6f0576ef4741", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 112, + "alias": "Mijn ING bankpas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 2, + "name": "GBO", + "subName": "CI", + "prettyName": "Normal Check-in", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "CO", + "prettyName": "Normal Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "a1b2c3d4-e5f6-4789-abcd-1234567890ab", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "MISSING_CO", + "prettyName": "Missing Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "c3d4e5f6-789a-4bcd-ef01-34567890abcd", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + { + "notificationSubscriptionId": "8469e00a-724a-4e72-b432-fb14c939c9d3", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 113, + "alias": "Mijn OV-pas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 2, + "name": "GBO", + "subName": "CI", + "prettyName": "Normal Check-in", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "CO", + "prettyName": "Normal Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "a1b2c3d4-e5f6-4789-abcd-1234567890ab", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "MISSING_CO", + "prettyName": "Missing Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "c3d4e5f6-789a-4bcd-ef01-34567890abcd", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + "notificationCategoryId": 4, + "name": "Producten", + "groupName": "Mijn passen", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "af6305d3-f95d-42af-b22a-4181594d45dc", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 112, + "alias": "Mijn ING bankpas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 8, + "name": "GBO", + "subName": "PRODUCT_ACTIVATED", + "prettyName": "Product Activated", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 9, + "name": "GBO", + "subName": "PRODUCT_REFUNDED", + "prettyName": "Product Refunded", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + ], + }, + { + "notificationSubscriptionId": "f2acafdc-0410-474f-8c8b-ba7c7b550f8e", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 113, + "alias": "Mijn OV-pas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 8, + "name": "GBO", + "subName": "PRODUCT_ACTIVATED", + "prettyName": "Product Activated", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 9, + "name": "GBO", + "subName": "PRODUCT_REFUNDED", + "prettyName": "Product Refunded", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + "notificationCategoryId": 2, + "name": "Nieuwsbrief aanmelding", + "groupName": "Marketing", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "af6305d3-f95d-42af-b22a-4181594d45dc", + "customerProfileId": 42, + "ovPayTokenId": null, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 1, + "name": "HTM", + "subName": "NEWSLETTER", + "prettyName": "HTM Nieuwsbrief", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "29cfcde2-c2f9-4548-a65e-d7789e3decc2", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + } + putSingleSubscriptionFilteredByDeviceId: + summary: Put one notification category with one subscription, which is filtered for 'Mijn iPhone 12' + value: + { + "notificationCategories": + [ + { + "notificationCategoryId": 1, + "name": "Reizen", + "groupName": "Mijn passen", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "04ef3297-e0ff-4db6-90a4-6f0576ef4741", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 112, + "alias": "Mijn ING bankpas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 2, + "name": "GBO", + "subName": "CI", + "prettyName": "Normal Check-in", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "CO", + "prettyName": "Normal Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "a1b2c3d4-e5f6-4789-abcd-1234567890ab", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "MISSING_CO", + "prettyName": "Missing Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + } + responses: + "200": + description: OK + content: + application/json: + example: + { + "notificationCategories": + [ + { + "notificationCategoryId": 1, + "name": "Reizen", + "groupName": "Mijn passen", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "04ef3297-e0ff-4db6-90a4-6f0576ef4741", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 112, + "alias": "Mijn ING bankpas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 2, + "name": "GBO", + "subName": "CI", + "prettyName": "Normal Check-in", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "CO", + "prettyName": "Normal Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "a1b2c3d4-e5f6-4789-abcd-1234567890ab", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "MISSING_CO", + "prettyName": "Missing Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "c3d4e5f6-789a-4bcd-ef01-34567890abcd", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + { + "notificationSubscriptionId": "8469e00a-724a-4e72-b432-fb14c939c9d3", + "customerProfileId": 42, + "ovPayToken": + { "ovPayTokenId": 113, "alias": "Mijn OV-pas" }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 2, + "name": "GBO", + "subName": "CI", + "prettyName": "Normal Check-in", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "CO", + "prettyName": "Normal Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "a1b2c3d4-e5f6-4789-abcd-1234567890ab", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 3, + "name": "GBO", + "subName": "MISSING_CO", + "prettyName": "Missing Check-out", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": false, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "c3d4e5f6-789a-4bcd-ef01-34567890abcd", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + "notificationCategoryId": 4, + "name": "Producten", + "groupName": "Mijn passen", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "af6305d3-f95d-42af-b22a-4181594d45dc", + "customerProfileId": 42, + "ovPayToken": + { + "ovPayTokenId": 112, + "alias": "Mijn ING bankpas", + }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 8, + "name": "GBO", + "subName": "PRODUCT_ACTIVATED", + "prettyName": "Product Activated", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + { + "eventTypeId": 9, + "name": "GBO", + "subName": "PRODUCT_REFUNDED", + "prettyName": "Product Refunded", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + ], + }, + { + "notificationSubscriptionId": "f2acafdc-0410-474f-8c8b-ba7c7b550f8e", + "customerProfileId": 42, + "ovPayToken": + { "ovPayTokenId": 113, "alias": "Mijn OV-pas" }, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 8, + "name": "GBO", + "subName": "PRODUCT_ACTIVATED", + "prettyName": "Product Activated", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "912ef811-976d-4b8d-8e39-24496335d556", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": true, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": false, + }, + ], + }, + ], + }, + { + "eventTypeId": 9, + "name": "GBO", + "subName": "PRODUCT_REFUNDED", + "prettyName": "Product Refunded", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "b2c3d4e5-f678-49ab-cdef-234567890abc", + "channelId": 1, + "name": "push", + "isMandatory": true, + "resources": + [ + { + "resourceName": "devices", + "resourceIdentifier": "7b3379b8-fb12-41f5-94a8-0d3f0fbcf55b", + "alias": "Mijn iPhone 12", + "isActive": true, + }, + { + "resourceName": "devices", + "resourceIdentifier": "52ad19c1-f6f7-403d-b577-df7219aa6ab4", + "alias": "Mijn Pixel 9 Pro", + "isActive": false, + }, + ], + }, + { + "eventTypeChannelId": "f6789abc-def0-1234-5678-90abcdef1234", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + { + "notificationCategoryId": 2, + "name": "Nieuwsbrief aanmelding", + "groupName": "Marketing", + "notificationSubscriptions": + [ + { + "notificationSubscriptionId": "af6305d3-f95d-42af-b22a-4181594d45dc", + "customerProfileId": 42, + "ovPayTokenId": null, + "isActive": true, + "eventTypes": + [ + { + "eventTypeId": 1, + "name": "HTM", + "subName": "NEWSLETTER", + "prettyName": "HTM Nieuwsbrief", + "eventTypeChannels": + [ + { + "eventTypeChannelId": "29cfcde2-c2f9-4548-a65e-d7789e3decc2", + "channelId": 2, + "name": "email", + "isMandatory": false, + "resources": + [ + { + "resourceName": "customers", + "resourceIdentifier": "42", + "alias": "stasjo.van.bakel@htm.nl", + "isActive": true, + }, + ], + }, + ], + }, + ], + }, + ], + }, + ], + } +components: + schemas: + unavailable: + type: object diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml new file mode 100644 index 0000000..ee4dca2 --- /dev/null +++ b/src/openapi/container/abt-container-tokens.yaml @@ -0,0 +1,143 @@ +openapi: 3.0.1 +info: + title: Integraion layer APIs for token storage for ABT + description: >- + APIs that give business processes access to the security and authorization state of a token within the scope of HTM. In the backend this is connected to a container which handles the accessToken en refreshToken management. + version: "2.0" +servers: + - url: https://services.acc.api.htm.nl/abt/containertokens/1.0 +tags: + - name: tokens +paths: + /tokens/{xtat}/status: + parameters: + - name: xtat + in: path + schema: + type: string + example: uuid + required: true + description: The xTAT for the token for which the status needs to be checked + - name: customerProfileId + in: query + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile for which the request is being done, if customer has identified themselves + get: + tags: + - tokens + summary: Request the security and authorization status of an OV pas token + description: Request the security and authorization status of an OV pas token, if the customerProfileId has been supplied look in the customerToken DB otherwise check the AnonymousToken DB. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/TokenStatusResponse" + example: + isApproved: false + isSecured: false + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + Missing Parameters: + value: + status: 400 + title: Missing Mandatory Parameter + detail: Required parameter {0} is missing. + Invalid Parameters: + value: + status: 400 + title: Invalid Parameter + detail: Required parameter {0} is invalid. + "401": + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + Unauthorized: + value: + status: 401 + title: Unauthorized + detail: Invalid Access Token + "404": + description: Not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + TAT not found: + value: + status: 404 + title: Not Found + detail: TAT Account Not Found + "500": + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + example: + error: An unknown error has occurred +components: + schemas: + unavailable: + type: object + GenerateTatOutput: + type: object + properties: + uid: + type: string + description: >- + An uid IS A unique identifier THAT is associated with the + user. + recipient: + type: string + description: >- + A recipient IS A unique identifier THAT is associated with the + TAT owner. + key: + type: string + description: >- + A key IS a 32 character string THAT uniquely identifies the + OTP session. + ErrorResponse: + description: Default response when an invalid request has been sent + type: object + properties: + status: + type: integer + description: >- + A status IS An integer that represents the HTTP status code of the + response. + example: 400 + title: + type: string + description: A title IS A string that provides a brief summary of the error. + detail: + type: string + description: A detail IS A string that provides more details about the error. + TokenStatusResponse: + description: Default response when an invalid request has been sent + type: object + properties: + isSecured: + type: boolean + description: >- + Is the OVpas secured according to the GBO + example: False + isAuthorized: + type: boolean + description: >- + Does HTM have the authorization to access the secured the data of the OVpas + example: False \ No newline at end of file From 6e37b7c4fef3c314eafd6d2622bf43cc3dc955ae Mon Sep 17 00:00:00 2001 From: Herald Date: Tue, 23 Jun 2026 14:08:07 +0200 Subject: [PATCH 02/11] removed unused tags --- src/openapi/container/abt-container-notifications.yaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/openapi/container/abt-container-notifications.yaml b/src/openapi/container/abt-container-notifications.yaml index 9143c68..3ab27d0 100644 --- a/src/openapi/container/abt-container-notifications.yaml +++ b/src/openapi/container/abt-container-notifications.yaml @@ -7,13 +7,6 @@ info: servers: - url: https://services.acc.api.htm.nl/abt/container/1.0 tags: - - name: Notification categories - description: >- - Service Engine APIs for all HTM Notifications metadata. To build content only. - - name: Notification subscriptions - description: >- - Service Engine APIs for the HTM Notification subscriptions for a user. - Contains the subscriptions on category level. - name: Notification preferences description: >- Service Engine APIs for the HTM Notification preferences for a category for a user. From ebee1178ef69e29e46aecddeab10803682f9151a Mon Sep 17 00:00:00 2001 From: Herald Date: Tue, 23 Jun 2026 14:32:51 +0200 Subject: [PATCH 03/11] added container endpoint for creating token in vault --- .../container/abt-container-tokens.yaml | 142 +++++++++++++++--- 1 file changed, 119 insertions(+), 23 deletions(-) diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index ee4dca2..90458ee 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -3,7 +3,7 @@ info: title: Integraion layer APIs for token storage for ABT description: >- APIs that give business processes access to the security and authorization state of a token within the scope of HTM. In the backend this is connected to a container which handles the accessToken en refreshToken management. - version: "2.0" + version: "1.0" servers: - url: https://services.acc.api.htm.nl/abt/containertokens/1.0 tags: @@ -37,9 +37,107 @@ paths: application/json: schema: $ref: "#/components/schemas/TokenStatusResponse" + examples: + Not secured, not authorized : + summary: Not secured, not authorized + value: + { + "isAuthorized": false, + "isSecured": false + } + Secured, not authorized : + summary: Secured, not authorized + value: + { + "isAuthorized": true, + "isSecured": false + } + Secured and authorized : + summary: Secured and authorized + value: + { + "isAuthorized": true, + "isSecured": true + } + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + Missing Parameters: + value: + status: 400 + title: Missing Mandatory Parameter + detail: Required parameter {0} is missing. + Invalid Parameters: + value: + status: 400 + title: Invalid Parameter + detail: Required parameter {0} is invalid. + "401": + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + Unauthorized: + value: + status: 401 + title: Unauthorized + detail: Invalid Access Token + "404": + description: Not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + TAT not found: + value: + status: 404 + title: Not Found + detail: TAT Account Not Found + "500": + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" example: - isApproved: false - isSecured: false + error: An unknown error has occurred + /tokens: + parameters: + post: + tags: + - tokens + summary: Create a new token entry in the vault, if the customerProfileId has been supplied create in the customerToken DB otherwise in the AnonymousToken DB + description: Create a new token entry in the vault, if the customerProfileId has been supplied create in the customerToken DB otherwise in the AnonymousToken DB + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/CreateTokenBody" + examples: + token: + value: + { + "xTAT": "cf694905-7f76-4799-b0bc-490716921323", + "otpKey": "123456789123456789123456789abcde" + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "Ok" + } "400": description: Bad Request content: @@ -93,25 +191,7 @@ components: schemas: unavailable: type: object - GenerateTatOutput: - type: object - properties: - uid: - type: string - description: >- - An uid IS A unique identifier THAT is associated with the - user. - recipient: - type: string - description: >- - A recipient IS A unique identifier THAT is associated with the - TAT owner. - key: - type: string - description: >- - A key IS a 32 character string THAT uniquely identifies the - OTP session. - ErrorResponse: + ErrorResponse: description: Default response when an invalid request has been sent type: object properties: @@ -127,8 +207,24 @@ components: detail: type: string description: A detail IS A string that provides more details about the error. + CreateTokenBody: + description: Body for when the a new token entry is created + type: object + required: + - xTAT + properties: + xTAT: + type : string + description: >- + Unique identifier for the GBO transit account + example: 03071794-482a-4168-b60f-84669a9e6a76 + otpKey: + type : string + description: >- + Key used to validate the OTP at GBO + example: 123456789123456789123456789abcde TokenStatusResponse: - description: Default response when an invalid request has been sent + description: Response for when the status of a token is requested type: object properties: isSecured: From 937a0323ed84bf4f51ca6e87b01ed70f9a20aead Mon Sep 17 00:00:00 2001 From: Herald Date: Tue, 23 Jun 2026 14:47:22 +0200 Subject: [PATCH 04/11] added endpoints for the token vault --- .../container/abt-container-tokens.yaml | 152 ++++++++++++++++-- 1 file changed, 136 insertions(+), 16 deletions(-) diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index 90458ee..b3ae423 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -9,6 +9,83 @@ servers: tags: - name: tokens paths: + /tokens: + parameters: + post: + tags: + - tokens + summary: Create a new token entry in the vault + description: Create a new token entry in the vault, if the customerProfileId has been supplied create in the customerToken DB otherwise in the AnonymousToken DB + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/CreateTokenBody" + examples: + token: + value: + { + "xTAT": "cf694905-7f76-4799-b0bc-490716921323", + "otpKey": "123456789123456789123456789abcde" + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + "Ok" + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + Missing Parameters: + value: + status: 400 + title: Missing Mandatory Parameter + detail: Required parameter {0} is missing. + Invalid Parameters: + value: + status: 400 + title: Invalid Parameter + detail: Required parameter {0} is invalid. + "401": + description: Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + Unauthorized: + value: + status: 401 + title: Unauthorized + detail: Invalid Access Token + "404": + description: Not found + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + TAT not found: + value: + status: 404 + title: Not Found + detail: TAT Account Not Found + "500": + description: Internal server error + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + example: + error: An unknown error has occurred /tokens/{xtat}/status: parameters: - name: xtat @@ -108,36 +185,67 @@ paths: $ref: "#/components/schemas/ErrorResponse" example: error: An unknown error has occurred - /tokens: + /tokens/{xtat}/validate: parameters: - post: + - name: xtat + in: path + schema: + type: string + example: uuid + required: true + description: The xTAT for the token for which the status needs to be checked + - name: customerProfileId + in: query + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile for which the request is being done, if customer has identified themselves + patch: tags: - tokens - summary: Create a new token entry in the vault, if the customerProfileId has been supplied create in the customerToken DB otherwise in the AnonymousToken DB - description: Create a new token entry in the vault, if the customerProfileId has been supplied create in the customerToken DB otherwise in the AnonymousToken DB + summary: Validate the supplied OTP and secure and/or authorize the token + description: Validate the supplied OTP and secure and/or authorize the token if the customerProfileId has been supplied look in the customerToken DB otherwise check the AnonymousToken DB. requestBody: content: application/json: schema: - $ref: "#/components/schemas/CreateTokenBody" + $ref: "#/components/schemas/ValidateTokenBody" examples: token: value: { - "xTAT": "cf694905-7f76-4799-b0bc-490716921323", - "otpKey": "123456789123456789123456789abcde" + "otp": "1234564" } responses: - "201": - description: Created + "200": + description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "Ok" - } + $ref: "#/components/schemas/TokenStatusResponse" + examples: + Not secured, not authorized : + summary: Not secured, not authorized + value: + { + "isAuthorized": false, + "isSecured": false + } + Secured, not authorized : + summary: Secured, not authorized + value: + { + "isAuthorized": true, + "isSecured": false + } + Secured and authorized : + summary: Secured and authorized + value: + { + "isAuthorized": true, + "isSecured": true + } "400": description: Bad Request content: @@ -191,7 +299,7 @@ components: schemas: unavailable: type: object - ErrorResponse: + ErrorResponse: description: Default response when an invalid request has been sent type: object properties: @@ -212,6 +320,7 @@ components: type: object required: - xTAT + - otpKey properties: xTAT: type : string @@ -236,4 +345,15 @@ components: type: boolean description: >- Does HTM have the authorization to access the secured the data of the OVpas - example: False \ No newline at end of file + example: False + ValidateTokenBody: + description: Body for when the a token entry is validated + type: object + required: + - otp + properties: + otp: + type : string + description: >- + OTP to be used to secure the token and retrieve the JWT at GBO + example: 1234567 \ No newline at end of file From 00a98a6178fbef6354b0f765cac63cc32c6861e7 Mon Sep 17 00:00:00 2001 From: Herald Date: Wed, 24 Jun 2026 11:07:34 +0200 Subject: [PATCH 05/11] things --- src/openapi/container/abt-container-tokens.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index b3ae423..3e1b548 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -114,7 +114,7 @@ paths: application/json: schema: $ref: "#/components/schemas/TokenStatusResponse" - examples: + examples: Not secured, not authorized : summary: Not secured, not authorized value: From 75531b4fdcd821161ba7fc2f20c750898e0a15c1 Mon Sep 17 00:00:00 2001 From: Herald Date: Wed, 24 Jun 2026 11:12:19 +0200 Subject: [PATCH 06/11] fixed indentation --- src/openapi/container/abt-container-tokens.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index 3e1b548..f6756ad 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -1,4 +1,4 @@ -openapi: 3.0.1 +openapi: 3.0.3 info: title: Integraion layer APIs for token storage for ABT description: >- @@ -115,21 +115,21 @@ paths: schema: $ref: "#/components/schemas/TokenStatusResponse" examples: - Not secured, not authorized : + Not secured and not authorized : summary: Not secured, not authorized value: { "isAuthorized": false, "isSecured": false } - Secured, not authorized : + Secured and not authorized : summary: Secured, not authorized value: { "isAuthorized": true, "isSecured": false } - Secured and authorized : + Secured and authorized : summary: Secured and authorized value: { From 07e1dc91e3e105c906b27c364ebab73f2e160c1d Mon Sep 17 00:00:00 2001 From: Herald Date: Wed, 24 Jun 2026 11:30:18 +0200 Subject: [PATCH 07/11] added security to the container specs --- .../container/abt-container-notifications.yaml | 11 +++++++++++ src/openapi/container/abt-container-tokens.yaml | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/openapi/container/abt-container-notifications.yaml b/src/openapi/container/abt-container-notifications.yaml index 3ab27d0..41f0ff4 100644 --- a/src/openapi/container/abt-container-notifications.yaml +++ b/src/openapi/container/abt-container-notifications.yaml @@ -11,6 +11,8 @@ tags: description: >- Service Engine APIs for the HTM Notification preferences for a category for a user. Contains a full list on event type channel level. +security: + - oAuthSample: [profile] paths: /customers/{customerProfileId}/notificationpreferences: parameters: @@ -1829,6 +1831,15 @@ paths: ], } components: + securitySchemes: + oAuthSample: + type: oauth2 + description: This API uses OAuth 2 with the clientCredentials flow. [More info](https://api.example.com/docs/auth) + flows: + clientCredentials: # <---- OAuth flow( clientCredentials) + tokenUrl: https://identity.{{env}}.api.htm.nl/oauth2/token + scopes: + profile schemas: unavailable: type: object diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index f6756ad..dc5b48f 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -6,6 +6,8 @@ info: version: "1.0" servers: - url: https://services.acc.api.htm.nl/abt/containertokens/1.0 +security: + - oAuthSample: [profile] tags: - name: tokens paths: @@ -296,6 +298,15 @@ paths: example: error: An unknown error has occurred components: + securitySchemes: + oAuthSample: + type: oauth2 + description: This API uses OAuth 2 with the clientCredentials flow. [More info](https://api.example.com/docs/auth) + flows: + clientCredentials: # <---- OAuth flow( clientCredentials) + tokenUrl: https://identity.{{env}}.api.htm.nl/oauth2/token + scopes: + profile schemas: unavailable: type: object From 8e77863480d26a9824881c3ccb895024b1627167 Mon Sep 17 00:00:00 2001 From: Herald Date: Wed, 24 Jun 2026 11:40:19 +0200 Subject: [PATCH 08/11] simplified endpoint --- src/openapi/container/abt-container-tokens.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index dc5b48f..7c111da 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -187,7 +187,7 @@ paths: $ref: "#/components/schemas/ErrorResponse" example: error: An unknown error has occurred - /tokens/{xtat}/validate: + /tokens/{xtat}: parameters: - name: xtat in: path From 95bc19d7ffb790f6a8cf7f29e481ad3c2070b27d Mon Sep 17 00:00:00 2001 From: Herald Date: Wed, 24 Jun 2026 12:08:29 +0200 Subject: [PATCH 09/11] semantics --- .../container/abt-container-tokens.yaml | 117 +++++++++++------- 1 file changed, 73 insertions(+), 44 deletions(-) diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index 7c111da..a3843cd 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -1,8 +1,8 @@ openapi: 3.0.3 info: - title: Integraion layer APIs for token storage for ABT + title: Integration layer APIs for token storage for ABT description: >- - APIs that give business processes access to the security and authorization state of a token within the scope of HTM. In the backend this is connected to a container which handles the accessToken en refreshToken management. + APIs that give business processes access to the security and authorization state of a token within the scope of HTM. In the backend this is connected to a container which handles the accessToken en refreshToken management for an OVpas as given by GBO. version: "1.0" servers: - url: https://services.acc.api.htm.nl/abt/containertokens/1.0 @@ -12,7 +12,6 @@ tags: - name: tokens paths: /tokens: - parameters: post: tags: - tokens @@ -27,18 +26,12 @@ paths: token: value: { - "xTAT": "cf694905-7f76-4799-b0bc-490716921323", + "xTat": "cf694905-7f76-4799-b0bc-490716921323", "otpKey": "123456789123456789123456789abcde" } responses: "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - "Ok" + description: Created "400": description: Bad Request content: @@ -80,23 +73,39 @@ paths: status: 404 title: Not Found detail: TAT Account Not Found + "409": + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + TAT already exists: + value: + status: 409 + title: Conflict + detail: TAT Account Token already exists "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" - example: - error: An unknown error has occurred - /tokens/{xtat}/status: + examples: + Internal Server Error: + value: + status: 500 + title: Internal Server Error + detail: An unknown error has occurred + /tokens/{xTat}/status: parameters: - - name: xtat + - name: xTat in: path schema: type: string - example: uuid + example: 85dbeacc-b9aa-4d5b-bdec-9319010c597f required: true - description: The xTAT for the token for which the status needs to be checked + description: The xTat for the token for which the status needs to be checked - name: customerProfileId in: query schema: @@ -128,8 +137,8 @@ paths: summary: Secured, not authorized value: { - "isAuthorized": true, - "isSecured": false + "isAuthorized": false, + "isSecured": true } Secured and authorized : summary: Secured and authorized @@ -178,24 +187,28 @@ paths: value: status: 404 title: Not Found - detail: TAT Account Not Found + detail: TAT Account Not Found "500": description: Internal server error content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" - example: - error: An unknown error has occurred - /tokens/{xtat}: + examples: + Internal Server Error: + value: + status: 500 + title: Internal Server Error + detail: An unknown error has occurred + /tokens/{xTat}: parameters: - - name: xtat + - name: xTat in: path schema: type: string example: uuid required: true - description: The xTAT for the token for which the status needs to be checked + description: The xTat for the token for which the status needs to be checked - name: customerProfileId in: query schema: @@ -217,7 +230,7 @@ paths: token: value: { - "otp": "1234564" + "otp": "123456" } responses: "200": @@ -227,21 +240,21 @@ paths: schema: $ref: "#/components/schemas/TokenStatusResponse" examples: - Not secured, not authorized : + Not secured and not authorized : summary: Not secured, not authorized value: { "isAuthorized": false, "isSecured": false } - Secured, not authorized : + Secured and not authorized : summary: Secured, not authorized value: { - "isAuthorized": true, - "isSecured": false + "isAuthorized": false, + "isSecured": true } - Secured and authorized : + Secured and authorized : summary: Secured and authorized value: { @@ -264,7 +277,19 @@ paths: value: status: 400 title: Invalid Parameter - detail: Required parameter {0} is invalid. + detail: Required parameter {0} is invalid. + "422": + description: Unprocessable Entity + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + Validation failed: + value: + status: 422 + title: OTP validation failed + detail: The supplied OTP could not be validated "401": description: Unauthorized content: @@ -295,8 +320,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ErrorResponse" - example: - error: An unknown error has occurred + examples: + Internal Server Error: + value: + status: 500 + title: Internal Server Error + detail: An unknown error has occurred components: securitySchemes: oAuthSample: @@ -304,12 +333,10 @@ components: description: This API uses OAuth 2 with the clientCredentials flow. [More info](https://api.example.com/docs/auth) flows: clientCredentials: # <---- OAuth flow( clientCredentials) - tokenUrl: https://identity.{{env}}.api.htm.nl/oauth2/token + tokenUrl: https://identity.{env}.api.htm.nl/oauth2/token scopes: - profile + profile: "Access user profile" schemas: - unavailable: - type: object ErrorResponse: description: Default response when an invalid request has been sent type: object @@ -330,10 +357,10 @@ components: description: Body for when the a new token entry is created type: object required: - - xTAT + - xTat - otpKey properties: - xTAT: + xTat: type : string description: >- Unique identifier for the GBO transit account @@ -351,12 +378,12 @@ components: type: boolean description: >- Is the OVpas secured according to the GBO - example: False + example: false isAuthorized: type: boolean description: >- Does HTM have the authorization to access the secured the data of the OVpas - example: False + example: false ValidateTokenBody: description: Body for when the a token entry is validated type: object @@ -366,5 +393,7 @@ components: otp: type : string description: >- - OTP to be used to secure the token and retrieve the JWT at GBO - example: 1234567 \ No newline at end of file + OTP to be used to secure the token and retrieve the JWT at GBO + minLength: 6 + maxLength: 6 + example: 123456 \ No newline at end of file From 699c633a4ebda21407563d96326597f47e426bb8 Mon Sep 17 00:00:00 2001 From: Herald Date: Wed, 24 Jun 2026 14:07:21 +0200 Subject: [PATCH 10/11] changed name to securityTokens --- .../container/abt-container-tokens.yaml | 44 +++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index a3843cd..0348e57 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -9,21 +9,21 @@ servers: security: - oAuthSample: [profile] tags: - - name: tokens + - name: securitytokens paths: - /tokens: + /securitytokens: post: tags: - - tokens - summary: Create a new token entry in the vault - description: Create a new token entry in the vault, if the customerProfileId has been supplied create in the customerToken DB otherwise in the AnonymousToken DB + - securitytokens + summary: Create a new security token entry in the vault + description: Create a new security token entry in the vault, if the customerProfileId has been supplied create in the customerToken DB otherwise in the AnonymousToken DB requestBody: content: application/json: schema: - $ref: "#/components/schemas/CreateTokenBody" + $ref: "#/components/schemas/CreateSecurityTokenBody" examples: - token: + token details: value: { "xTat": "cf694905-7f76-4799-b0bc-490716921323", @@ -84,7 +84,7 @@ paths: value: status: 409 title: Conflict - detail: TAT Account Token already exists + detail: Security Token already exists "500": description: Internal server error content: @@ -97,7 +97,7 @@ paths: status: 500 title: Internal Server Error detail: An unknown error has occurred - /tokens/{xTat}/status: + /securitytokens/{xTat}/status: parameters: - name: xTat in: path @@ -105,7 +105,7 @@ paths: type: string example: 85dbeacc-b9aa-4d5b-bdec-9319010c597f required: true - description: The xTat for the token for which the status needs to be checked + description: The xTat of the OVpastoken for which the status needs to be checked - name: customerProfileId in: query schema: @@ -115,7 +115,7 @@ paths: description: The id of the customer Profile for which the request is being done, if customer has identified themselves get: tags: - - tokens + - securitytokens summary: Request the security and authorization status of an OV pas token description: Request the security and authorization status of an OV pas token, if the customerProfileId has been supplied look in the customerToken DB otherwise check the AnonymousToken DB. responses: @@ -124,7 +124,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/TokenStatusResponse" + $ref: "#/components/schemas/SecurityTokenStatusResponse" examples: Not secured and not authorized : summary: Not secured, not authorized @@ -200,7 +200,7 @@ paths: status: 500 title: Internal Server Error detail: An unknown error has occurred - /tokens/{xTat}: + /securitytokens/{xTat}: parameters: - name: xTat in: path @@ -208,7 +208,7 @@ paths: type: string example: uuid required: true - description: The xTat for the token for which the status needs to be checked + description: The xTat of the ovPastoken for which the status needs to be checked - name: customerProfileId in: query schema: @@ -218,14 +218,14 @@ paths: description: The id of the customer Profile for which the request is being done, if customer has identified themselves patch: tags: - - tokens + - securitytokens summary: Validate the supplied OTP and secure and/or authorize the token description: Validate the supplied OTP and secure and/or authorize the token if the customerProfileId has been supplied look in the customerToken DB otherwise check the AnonymousToken DB. requestBody: content: application/json: schema: - $ref: "#/components/schemas/ValidateTokenBody" + $ref: "#/components/schemas/SecurityValidateTokenBody" examples: token: value: @@ -238,7 +238,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/TokenStatusResponse" + $ref: "#/components/schemas/SecurityTokenStatusResponse" examples: Not secured and not authorized : summary: Not secured, not authorized @@ -353,8 +353,8 @@ components: detail: type: string description: A detail IS A string that provides more details about the error. - CreateTokenBody: - description: Body for when the a new token entry is created + CreateSecurityTokenBody: + description: Body for when the a new security token entry is created type: object required: - xTat @@ -370,7 +370,7 @@ components: description: >- Key used to validate the OTP at GBO example: 123456789123456789123456789abcde - TokenStatusResponse: + SecurityTokenStatusResponse: description: Response for when the status of a token is requested type: object properties: @@ -384,7 +384,7 @@ components: description: >- Does HTM have the authorization to access the secured the data of the OVpas example: false - ValidateTokenBody: + SecurityValidateTokenBody: description: Body for when the a token entry is validated type: object required: @@ -394,6 +394,4 @@ components: type : string description: >- OTP to be used to secure the token and retrieve the JWT at GBO - minLength: 6 - maxLength: 6 example: 123456 \ No newline at end of file From 42ff41baea294e231bd9080e8fd972415f703b4f Mon Sep 17 00:00:00 2001 From: Herald Date: Thu, 25 Jun 2026 10:54:24 +0200 Subject: [PATCH 11/11] fixed indentation and added customerProfileId in POST body --- src/openapi/container/abt-container-tokens.yaml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/openapi/container/abt-container-tokens.yaml b/src/openapi/container/abt-container-tokens.yaml index 0348e57..ac63ab0 100644 --- a/src/openapi/container/abt-container-tokens.yaml +++ b/src/openapi/container/abt-container-tokens.yaml @@ -27,7 +27,8 @@ paths: value: { "xTat": "cf694905-7f76-4799-b0bc-490716921323", - "otpKey": "123456789123456789123456789abcde" + "otpKey": "123456789123456789123456789abcde", + "customerProfileId": 12314 } responses: "201": @@ -125,7 +126,7 @@ paths: application/json: schema: $ref: "#/components/schemas/SecurityTokenStatusResponse" - examples: + examples: Not secured and not authorized : summary: Not secured, not authorized value: @@ -370,6 +371,11 @@ components: description: >- Key used to validate the OTP at GBO example: 123456789123456789123456789abcde + customerProfileId: + type : integer + description: >- + CustomerProfileId of the account requesting security or giving authorization + example: 123456 SecurityTokenStatusResponse: description: Response for when the status of a token is requested type: object