From f5bf3d62defa404a1d8acb9b2067264389074509 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 5 Sep 2025 16:17:31 +0200 Subject: [PATCH 01/12] OVPAY-2018 - Added endpoints and examples for Customer Devices. --- src/openapi/customers/customers-crud-v2.yaml | 269 +++++++++++++++++-- 1 file changed, 246 insertions(+), 23 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 322d118..c08ede4 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -278,6 +278,13 @@ paths: phoneTypeId: 2 name: Work isPreferred: false + devices: + - deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377" + externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848" + alias: "iPhone prive" + - deviceId: "d7683e89-b2ad-4e79-85b3-dbb42aad0325" + externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976" + alias: "iPhone zakelijk" ovChipcards: - ovChipCardId: 1 chipCardNumber: "1234123412341234" @@ -404,6 +411,13 @@ paths: phoneTypeId: 2 name: Work isPreferred: false + devices: + - deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377" + externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848" + alias: "iPhone prive" + - deviceId: "d7683e89-b2ad-4e79-85b3-dbb42aad0325" + externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976" + alias: "iPhone zakelijk" ovChipcards: - ovChipCardId: 1 chipCardNumber: "1234123412341234" @@ -543,6 +557,13 @@ paths: phoneTypeId: 2 name: Work isPreferred: false + devices: + - deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377" + externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848" + alias: "iPhone prive" + - deviceId: "d7683e89-b2ad-4e79-85b3-dbb42aad0325" + externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976" + alias: "iPhone zakelijk" ovChipcards: - ovChipCardId: 1 chipCardNumber: "1234123412341234" @@ -677,6 +698,13 @@ paths: phoneTypeId: 2 name: Work isPreferred: false + devices: + - deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377" + externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848" + alias: "iPhone prive" + - deviceId: "d7683e89-b2ad-4e79-85b3-dbb42aad0325" + externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976" + alias: "iPhone zakelijk" ovChipcards: - ovChipCardId: 1 chipCardNumber: "1234123412341234" @@ -823,6 +851,11 @@ paths: countryCode: "+31" phoneTypeId: 2 isPreferred: false + devices: + - externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848" + alias: "iPhone prive" + - externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976" + alias: "iPhone zakelijk" required: true responses: 201: @@ -1027,7 +1060,7 @@ paths: /customers/{customerProfileId}/addresses: post: tags: - - Customer address + - Addresses summary: Add a customer address description: >- @@ -1069,7 +1102,7 @@ paths: /addresses/{addressId}: patch: tags: - - Customer address + - Addresses summary: Edit a customer address description: >- @@ -1109,7 +1142,7 @@ paths: x-throttling-tier: Unlimited delete: tags: - - Customer address + - Addresses summary: Delete a customer address description: >- @@ -1132,8 +1165,8 @@ paths: /customers/{customerProfileId}/phones: post: tags: - - Customer phoneNumber - summary: Add a customer phonenumber + - Phones + summary: Add a customer phone description: >- parameters: @@ -1171,8 +1204,8 @@ paths: /phones/{phoneId}: patch: tags: - - Customer phoneNumber - summary: Edit a customer phonenumber + - Phones + summary: Edit a customer phone description: >- parameters: @@ -1213,7 +1246,7 @@ paths: x-throttling-tier: Unlimited delete: tags: - - Customer phoneNumber + - Phones summary: Delete a customer phone description: >- @@ -1233,12 +1266,202 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited + /devices: + get: + tags: + - Devices + summary: Find devices. + description: Find devices. + parameters: + - in: query + name: deviceId + schema: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + required: false + description: The id of the device. + - in: query + name: externalDeviceId + schema: + type: string + format: uuid + example: c5545584-04af-4c60-a955-d6a70baab848 + required: false + description: The external id of the device. + - in: query + name: alias + schema: + type: string + example: iPhone prive + required: false + description: The alias of the device. + - in: query + name: customerProfileId + schema: + type: integer + example: 1 + required: false + description: The id of the customer profile. + - name: sort + in: query + schema: + type: string + - name: offset + in: query + schema: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "devices": + [ + { + "deviceId": "5bedce29-af0c-4f3c-b182-2caa8a1f9377", + "externalDeviceId": "c5545584-04af-4c60-a955-d6a70baab848", + "alias": "iPhone prive", + "customerProfileId": 1 + }, + { + "deviceId": "d7683e89-b2ad-4e79-85b3-dbb42aad0325", + "externalDeviceId": "7122a988-a00a-417d-a5b4-da2d91354976", + "alias": "iPhone zakelijk", + "customerProfileId": 1 + } + ], + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/devices?offset=20", + "method": "GET", + }, + "prev": + { + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/devices", + "method": "GET", + }, + "next": + { + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/devices?offset=40", + "method": "GET", + }, + }, + } + /customers/{customerProfileId}/devices: + post: + tags: + - Devices + summary: Add a customer device + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + customerDevice: + value: + device: + externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848" + alias: "iPhone prive" + required: true + responses: + 201: + description: Successfully created a customer device + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /devices/{deviceId}: + patch: + tags: + - Devices + summary: Edit a customer device + description: >- + + parameters: + - name: deviceId + in: path + required: true + schema: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + updateDevice: + value: + device: + alias: "iPhone zakelijk" + required: true + responses: + 200: + description: Successfully modified a customer device + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - Devices + summary: Delete a customer device + description: >- + + parameters: + - name: deviceId + in: path + required: true + schema: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + responses: + 200: + description: Successfully deleted a customer device + content: + application/json: {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /ovpaytokens: get: tags: - - Ovpay Token - summary: Find ovpay tokens. - description: Find ovpay tokens. + - OVpay Tokens + summary: Find OVpay tokens. + description: Find OVpay tokens. parameters: - in: query name: ovPayTokenId @@ -1389,8 +1612,8 @@ paths: /customers/{customerProfileId}/ovpaytokens: post: tags: - - Ovpay Token - summary: Create a new ovpay token + - OVpay Tokens + summary: Create a new OVpay token description: >- parameters: @@ -1440,8 +1663,8 @@ paths: /ovpaytokens/{ovpaytokenId}: patch: tags: - - Ovpay Token - summary: Update an ovpay token + - OVpay Tokens + summary: Update an OVpay token description: >- parameters: @@ -1491,8 +1714,8 @@ paths: x-throttling-tier: Unlimited delete: tags: - - Ovpay Token - summary: Delete an ovpay token + - OVpay Tokens + summary: Delete an OVpay token description: >- parameters: @@ -1514,8 +1737,8 @@ paths: /customers/{customerProfileId}/ovchipcards: post: tags: - - Ovchipcard - summary: Create a new ovchipcard + - OV Chipcards + summary: Create a new OV chipcard description: >- parameters: @@ -1552,8 +1775,8 @@ paths: /ovchipcards/{ovchipcardId}: patch: tags: - - Ovchipcard - summary: Update an ovchipcard + - OV Chipcards + summary: Update an OV chipcard description: >- parameters: @@ -1587,8 +1810,8 @@ paths: x-throttling-tier: Unlimited delete: tags: - - Ovchipcard - summary: Delete an ovchipcard + - OV Chipcards + summary: Delete an OV chipcard description: >- parameters: From 11add823da6b39ec5753d82fa665af64347385a8 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 8 Sep 2025 12:02:15 +0200 Subject: [PATCH 02/12] OVPAY-2018 - Added schemas. --- src/openapi/customers/customers-crud-v2.yaml | 92 +++++++++++++++++--- 1 file changed, 79 insertions(+), 13 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index c08ede4..2bbaa38 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1281,6 +1281,13 @@ paths: example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 required: false description: The id of the device. + - in: query + name: customerProfileId + schema: + type: integer + example: 1 + required: false + description: The id of the customer profile. - in: query name: externalDeviceId schema: @@ -1296,13 +1303,6 @@ paths: example: iPhone prive required: false description: The alias of the device. - - in: query - name: customerProfileId - schema: - type: integer - example: 1 - required: false - description: The id of the customer profile. - name: sort in: query schema: @@ -1322,22 +1322,22 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" + $ref: "#/components/schemas/getDevicesResponse" example: { "devices": [ { + "customerProfileId": 1, "deviceId": "5bedce29-af0c-4f3c-b182-2caa8a1f9377", "externalDeviceId": "c5545584-04af-4c60-a955-d6a70baab848", "alias": "iPhone prive", - "customerProfileId": 1 }, { + "customerProfileId": 1, "deviceId": "d7683e89-b2ad-4e79-85b3-dbb42aad0325", "externalDeviceId": "7122a988-a00a-417d-a5b4-da2d91354976", "alias": "iPhone zakelijk", - "customerProfileId": 1 } ], "_links": @@ -1377,7 +1377,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" + $ref: "#/components/schemas/postCustomerDevice" examples: customerDevice: value: @@ -1391,7 +1391,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" + $ref: "#/components/schemas/getDevices" security: - default: [] x-auth-type: Application & Application User @@ -1415,7 +1415,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" + $ref: "#/components/schemas/patchCustomerDevice" examples: updateDevice: value: @@ -2402,6 +2402,10 @@ components: type: array items: $ref: "#/components/schemas/getPhones" + devices: + type: array + items: + $ref: "#/components/schemas/getDevices" getAddresses: type: object properties: @@ -2448,6 +2452,21 @@ components: type: integer name: type: string + getDevices: + type: object + properties: + deviceId: + type: string + format: uuid + externalDeviceId: + type: string + format: uuid + alias: + type: string + required: + - deviceId + - externalDeviceId + - alias getCustomerPreference: type: object properties: @@ -2552,6 +2571,17 @@ components: type: integer isPreferred: type: boolean + devicePostEntity: + required: + - externalDeviceId + - alias + type: object + properties: + externalDeviceId: + type: string + format: uuid + alias: + type: string defaultCustomerProfileResponse: type: object properties: @@ -2575,6 +2605,10 @@ components: type: array items: $ref: "#/components/schemas/postPhoneEntity" + devices: + type: array + items: + $ref: "#/components/schemas/devicePostEntity" postCustomerAddress: type: object properties: @@ -2801,6 +2835,38 @@ components: ovPayTokenId: type: integer example: 1 + getDevicesResponse: + type: object + properties: + devices: + type: array + items: + $ref: "#/components/schemas/getDeviceEntity" + getDeviceEntity: + type: object + properties: + deviceId: + type: string + format: uuid + customerProfileId: + type: integer + externalDeviceId: + type: string + format: uuid + alias: + type: string + required: + - deviceId + - customerProfileId + - externalDeviceId + - alias + postCustomerDevice: + $ref: "#/components/schemas/devicePostEntity" + patchCustomerDevice: + type: object + properties: + alias: + type: string ErrorResponse: type: object properties: From a2e81d0f43791ba06501bd0c70a278d1d8129a2f Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 9 Sep 2025 11:16:24 +0200 Subject: [PATCH 03/12] OVPAY-2018 - Added devices patch response. --- src/openapi/customers/customers-crud-v2.yaml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 2bbaa38..de34997 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1428,7 +1428,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" + $ref: "#/components/schemas/getDevices" + examples: + updateDeviceResponse: + value: + deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377" + externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976" + alias: "iPhone zakelijk" + security: - default: [] x-auth-type: Application & Application User From 3c7a9d3cb9763eeb46ef508b93f9e1f2ea03d1c8 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 9 Sep 2025 14:35:41 +0200 Subject: [PATCH 04/12] OVPAY-2018 - Added touch point endpoints. --- src/openapi/customers/SE-customers.yaml | 182 +++++++++++++++++++----- 1 file changed, 146 insertions(+), 36 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index f141616..37079cb 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -240,6 +240,18 @@ paths: "phoneTypeId": 2, "isPreferred": false } + ], + "devices": [ + { + "deviceTypeId": 1, + "deviceIdentifier": "123e4567-e89b-12d3-a456-426614174000", + "isPreferred": true + }, + { + "deviceTypeId": 2, + "deviceIdentifier": "987e6543-e21b-12d3-a456-426614174999", + "isPreferred": false + } ] } } @@ -327,6 +339,20 @@ paths: "phoneTypeId": 2, "isPreferred": false } + ], + "devices": [ + { + "deviceId": 1, + "deviceTypeId": 1, + "deviceIdentifier": "123e4567-e89b-12d3-a456-426614174000", + "isPreferred": true + }, + { + "deviceId": 2, + "deviceTypeId": 2, + "deviceIdentifier": "987e6543-e21b-12d3-a456-426614174999", + "isPreferred": false + } ] } } @@ -3293,6 +3319,89 @@ paths: }, ], } + /customers/devices: + post: + summary: Add a new device to a customer profile. + description: Add a new device to a customer profile. + tags: + - Devices + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Add a new device: + value: + { + "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", + "alias": "My iPhone 13", + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + New device added to customer profile: + value: + { + "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366", + "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", + "alias": "My iPhone 13", + } + /customers/devices/{deviceId}: + parameters: + - name: deviceId + in: path + required: true + style: simple + description: Id of the device to be deleted. + schema: + type: string + format: uuid + example: 0f0981bf-6d60-4b06-bc55-de1ba325f366 + patch: + summary: Update alias of a device in a customer profile. + description: Update alias of a device in a customer profile. + tags: + - Devices + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Update alias of a device: + value: + { + "alias": "My old iPhone 13", + } + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Device alias updated in customer profile: + value: + { + "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366", + "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", + "alias": "My old iPhone 13", + } + delete: + summary: Delete a device from a customer profile. + description: Delete a device from a customer profile. + tags: + - Devices + responses: + "200": + description: OK components: schemas: unavailable: @@ -3471,27 +3580,6 @@ components: country: type: string example: NL - _links: - type: object - properties: - self: - type: object - properties: - href: - type: string - example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/addresses/1 - method: - type: string - example: GET - delete_address: - type: object - properties: - href: - type: string - example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/addresses/1 - method: - type: string - example: DELETE phones: type: array items: @@ -3518,24 +3606,56 @@ components: countryCode: type: string example: "0031" + devices: + type: array + items: + type: object + properties: + deviceId: + type: integer + example: 1 + deviceType: + type: object + properties: + deviceTypeId: + type: integer + example: 1 + name: + type: string + example: iOS + pushToken: + type: string + example: abcdef123456 + isPreferred: + type: boolean + example: true _links: type: object properties: - self: + add_device: type: object properties: href: type: string - example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/phones/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices method: type: string - example: GET - delete_phone: + example: POST + edit_device: type: object properties: href: type: string - example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/phones/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices/1 + method: + type: string + example: PATCH + delete_device: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices/1 method: type: string example: DELETE @@ -3551,16 +3671,6 @@ components: method: type: string example: GET - create_customer_status: - type: object - description: ONLY ALLOWED FOR SMP - Create a new customer status - properties: - href: - type: string - example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/statuses - method: - type: string - example: POST partial_edit: type: object properties: From e4472a2ae759877ee9f823d7966777cea3323f2c Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 10 Sep 2025 11:16:42 +0200 Subject: [PATCH 05/12] OVPAY-973 - Added CRUD operations for NotificationSubscription. --- src/openapi/customers/notifications-crud.yaml | 760 ++++++++++++++++++ 1 file changed, 760 insertions(+) create mode 100644 src/openapi/customers/notifications-crud.yaml diff --git a/src/openapi/customers/notifications-crud.yaml b/src/openapi/customers/notifications-crud.yaml new file mode 100644 index 0000000..f6e4a62 --- /dev/null +++ b/src/openapi/customers/notifications-crud.yaml @@ -0,0 +1,760 @@ +openapi: '3.0.3' +info: + title: ABT Notifications CRUD APIs + version: '1.0' + description: CRUD APIs for ABT Notification tables. These are NOT the functional APIs from Service Engine. +servers: + - url: https://services.acc.api.htm.nl/abt/notifications/1.0 +paths: + /notificationsubscriptions: + get: + summary: Get all notification subscriptions + operationId: getAllNotificationSubscriptions + tags: + - Notification Subscriptions + parameters: + - name: notificationSubscriptionId + in: query + required: false + schema: + type: string + format: uuid + description: Filter by notification subscription ID + - name: eventTypeChannelId + in: query + required: false + schema: + type: string + format: uuid + description: Filter by event type channel ID + - name: eventTypeId + in: query + required: false + schema: + type: array + items: + type: integer + explode: false + description: Filter by event type IDs + - name: eventOriginId + in: query + required: false + schema: + type: array + items: + type: integer + description: Filter by event origin IDs + - name: channelId + in: query + required: false + schema: + type: array + items: + type: integer + description: Filter by channel IDs + - name: customerProfileId + in: query + required: false + schema: + type: integer + description: Filter by customer profile ID + - name: ovpayTokenId + in: query + required: false + schema: + type: integer + description: Filter by OVPay token ID + - name: deviceId + in: query + required: false + schema: + type: string + format: uuid + description: Filter by device ID + - name: createdAfter + in: query + required: false + schema: + type: string + format: date-time + description: Filter by creation date (after) + - name: createdBefore + in: query + required: false + schema: + type: string + format: date-time + description: Filter by creation date (before) + - name: updatedAfter + in: query + required: false + schema: + type: string + format: date-time + description: Filter by update date (after) + - name: updatedBefore + in: query + required: false + schema: + type: string + format: date-time + description: Filter by update date (before) + - name: isActive + in: query + required: false + schema: + type: boolean + description: Filter by active status + responses: + '200': + description: A list of notification subscriptions + content: + application/json: + schema: + $ref: '#/components/schemas/GetNotificationSubscriptionsResponse' + examples: + emptyNotificationSubscriptionResponse: + value: + notificationSubscriptions: [] + minimalNotificationSubscriptionResponse: + value: + notificationSubscriptions: + - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + eventTypeChannel: + eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + eventType: + eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + createdAt: '2025-10-01T12:00:00Z' + createdBy: system + isActive: true + - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd + eventTypeChannel: + eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5 + eventType: + eventTypeId: 16 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKI + prettyName: Checkin gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + createdAt: '2025-09-15T08:30:00Z' + createdBy: system + isActive: false + fullNotificationSubscriptionResponse: + value: + notificationSubscriptions: + - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + eventTypeChannel: + eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + eventType: + eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + customerProfileId: 1337 + ovpayTokenId: 42 + deviceId: 7122a988-a00a-417d-a5b4-da2d91354976 + createdAt: '2025-10-01T12:00:00Z' + createdBy: system + updatedAt: '2025-10-02T12:00:00Z' + updatedBy: user + isActive: true + - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd + eventTypeChannel: + eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5 + eventType: + eventTypeId: 16 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKI + prettyName: Checkin gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + customerProfileId: 1338 + ovpayTokenId: 43 + deviceId: c4b8e1f3-8f4e-4d2a-9f3e-1c2b3a4d5e6f + createdAt: '2025-09-15T08:30:00Z' + createdBy: system + updatedAt: '2025-09-16T09:45:00Z' + updatedBy: user + isActive: false + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' + post: + summary: Create a new notification subscription + operationId: createNotificationSubscription + tags: + - Notification Subscriptions + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PostNotificationSubscriptionRequest' + examples: + minimalNotificationSubscriptionRequest: + value: + eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + createdAt: '2025-10-01T12:00:00Z' + createdBy: system + isActive: true + fullNotificationSubscriptionRequest: + value: + eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + customerProfileId: 1337 + ovpayTokenId: 42 + deviceId: 7122a988-a00a-417d-a5b4-da2d91354976 + createdAt: '2025-10-01T12:00:00Z' + createdBy: system + isActive: true + responses: + '201': + description: Notification subscription created successfully + content: + application/json: + schema: + $ref: '#/components/schemas/PostNotificationSubscriptionResponse' + examples: + minimalNotificationSubscriptionResponse: + value: + notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + eventTypeChannel: + eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + eventType: + eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + createdAt: '2025-10-01T12:00:00Z' + createdBy: system + isActive: true + fullNotificationSubscriptionResponse: + value: + notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + eventTypeChannel: + eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + eventType: + eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + customerProfileId: 1337 + ovpayTokenId: 42 + deviceId: 7122a988-a00a-417d-a5b4-da2d91354976 + createdAt: '2025-10-01T12:00:00Z' + createdBy: system + isActive: true + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' + /notificationsubscriptions/{notificationSubscriptionId}: + patch: + summary: Update a notification subscription by ID + tags: + - Notification Subscriptions + parameters: + - name: notificationSubscriptionId + in: path + required: true + schema: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PatchNotificationSubscriptionRequest' + examples: + notificationSubscriptionRequest: + value: + updatedAt: '2025-10-01T12:00:00Z' + updatedBy: user + isActive: false + responses: + '200': + description: Notification subscription updated successfully + content: + application/json: + schema: + $ref: '#/components/schemas/PatchNotificationSubscriptionResponse' + examples: + minimalNotificationSubscriptionResponse: + value: + notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + eventTypeChannel: + eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + eventType: + eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + createdAt: '2025-10-01T12:00:00Z' + createdBy: system + updatedAt: '2025-10-02T12:00:00Z' + updatedBy: user + isActive: false + fullNotificationSubscriptionResponse: + value: + notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + eventTypeChannel: + eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + eventType: + eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + customerProfileId: 1337 + ovpayTokenId: 42 + deviceId: 7122a988-a00a-417d-a5b4-da2d91354976 + createdAt: '2025-10-01T12:00:00Z' + createdBy: system + updatedAt: '2025-10-02T12:00:00Z' + updatedBy: user + isActive: false + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' + delete: + summary: Delete a notification subscription by ID + operationId: deleteNotificationSubscription + tags: + - Notification Subscriptions + parameters: + - name: notificationSubscriptionId + in: path + required: true + schema: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + responses: + '204': + description: No content + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' +components: + schemas: + GetNotificationSubscriptionsResponse: + type: object + properties: + notificationSubscriptions: + type: array + items: + $ref: '#/components/schemas/NotificationSubscription' + required: + - notificationSubscriptions + NotificationSubscription: + type: object + properties: + notificationSubscriptionId: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + eventTypeChannel: + $ref: '#/components/schemas/EventTypeChannel' + customerProfileId: + type: integer + example: 1337 + ovpayTokenId: + type: integer + example: 42 + deviceId: + type: string + format: uuid + example: 7122a988-a00a-417d-a5b4-da2d91354976 + createdAt: + type: string + format: date-time + example: '2025-10-01T12:00:00Z' + createdBy: + type: string + example: system + updatedAt: + type: string + format: date-time + example: '2025-10-02T12:00:00Z' + updatedBy: + type: string + example: user + isActive: + type: boolean + example: true + required: + - notificationSubscriptionId + - eventTypeChannel + - createdAt + - createdBy + - isActive + PostNotificationSubscriptionRequest: + type: object + properties: + eventTypeChannelId: + type: string + format: uuid + example: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + customerProfileId: + type: integer + example: 1337 + ovpayTokenId: + type: integer + example: 42 + deviceId: + type: string + format: uuid + example: 7122a988-a00a-417d-a5b4-da2d91354976 + createdAt: + type: string + format: date-time + example: '2025-10-01T12:00:00Z' + createdBy: + type: string + example: system + isActive: + type: boolean + example: true + required: + - eventTypeChannelId + - createdAt + - createdBy + PostNotificationSubscriptionResponse: + $ref: '#/components/schemas/NotificationSubscription' + PatchNotificationSubscriptionRequest: + type: object + properties: + updatedAt: + type: string + format: date-time + example: '2025-10-01T12:00:00Z' + updatedBy: + type: string + example: user + isActive: + type: boolean + example: false + PatchNotificationSubscriptionResponse: + $ref: '#/components/schemas/NotificationSubscription' + EventTypeChannel: + type: object + properties: + eventTypeChannelId: + type: string + format: uuid + example: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + eventType: + $ref: '#/components/schemas/EventType' + channel: + $ref: '#/components/schemas/Channel' + isDefault: + type: boolean + example: true + isMandatory: + type: boolean + example: false + required: + - eventTypeChannelId + - eventType + - channel + - isDefault + - isMandatory + EventType: + type: object + properties: + eventTypeId: + type: integer + example: 15 + eventOrigin: + $ref: '#/components/schemas/EventOrigin' + name: + type: string + example: Travel + subname: + type: string + example: Missing CKO + prettyName: + type: string + example: Checkout gemist + optInRequired: + type: boolean + example: true + required: + - eventTypeId + - eventOrigin + - name + - prettyName + - optInRequired + EventOrigin: + type: object + properties: + eventOriginId: + type: integer + example: 1 + name: + type: string + example: GBO + description: + type: string + example: Events originated at GBO + required: + - eventOriginId + - name + Channel: + type: object + properties: + channelId: + type: integer + example: 1 + name: + type: string + example: push + required: + - channelId + - name + 400Response: + type: object + properties: + code: + type: string + example: '400' + type: + type: string + message: + type: string + example: Bad Request + description: + type: string + example: >- + 'Bad Request: Input parameters missing! Please fill in at least 1 + valid input parameter. + 401Response: + type: object + properties: + code: + type: string + example: '401' + type: + type: string + message: + type: string + example: Invalid Credentials + description: + type: string + example: >- + Invalid Credentials. Make sure you have provided the correct + security credentials + 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. + 500Response: + type: object + properties: + code: + type: string + example: '500' + type: + type: string + message: + type: string + example: Internal Server Error + description: + type: string + securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://services.acc.api.htm.nl/authorize + scopes: {} \ No newline at end of file From f4bbb0d2e2534af39483db8889cc5c9bb04c734e Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 10 Sep 2025 17:37:29 +0200 Subject: [PATCH 06/12] OVPAY-973 - Added HATEOAS, pagination and reference API's. --- src/openapi/customers/notifications-crud.yaml | 480 +++++++++++++++++- 1 file changed, 476 insertions(+), 4 deletions(-) diff --git a/src/openapi/customers/notifications-crud.yaml b/src/openapi/customers/notifications-crud.yaml index f6e4a62..3fbec93 100644 --- a/src/openapi/customers/notifications-crud.yaml +++ b/src/openapi/customers/notifications-crud.yaml @@ -8,8 +8,7 @@ servers: paths: /notificationsubscriptions: get: - summary: Get all notification subscriptions - operationId: getAllNotificationSubscriptions + summary: Find one or more notification subscriptions tags: - Notification Subscriptions parameters: @@ -116,6 +115,7 @@ paths: emptyNotificationSubscriptionResponse: value: notificationSubscriptions: [] + href: null minimalNotificationSubscriptionResponse: value: notificationSubscriptions: @@ -140,6 +140,13 @@ paths: createdAt: '2025-10-01T12:00:00Z' createdBy: system isActive: true + _links: + edit: + href: /notificationsubscriptions/5bedce29-af0c-4f3c-b182-2caa8a1f9377 + method: PATCH + delete: + href: /notificationsubscriptions/5bedce29-af0c-4f3c-b182-2caa8a1f9377 + method: DELETE - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd eventTypeChannel: eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5 @@ -161,6 +168,14 @@ paths: createdAt: '2025-09-15T08:30:00Z' createdBy: system isActive: false + _links: + edit: + href: /notificationsubscriptions/39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd + method: PATCH + delete: + href: /notificationsubscriptions/39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd + method: DELETE + href: null fullNotificationSubscriptionResponse: value: notificationSubscriptions: @@ -190,6 +205,13 @@ paths: updatedAt: '2025-10-02T12:00:00Z' updatedBy: user isActive: true + _links: + edit: + href: /notificationsubscriptions/5bedce29-af0c-4f3c-b182-2caa8a1f9377 + method: PATCH + delete: + href: /notificationsubscriptions/5bedce29-af0c-4f3c-b182-2caa8a1f9377 + method: DELETE - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd eventTypeChannel: eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5 @@ -216,6 +238,14 @@ paths: updatedAt: '2025-09-16T09:45:00Z' updatedBy: user isActive: false + _links: + edit: + href: /notificationsubscriptions/39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd + method: PATCH + delete: + href: /notificationsubscriptions/39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd + method: DELETE + href: null '400': description: Bad request content: @@ -246,7 +276,6 @@ paths: $ref: '#/components/schemas/500Response' post: summary: Create a new notification subscription - operationId: createNotificationSubscription tags: - Notification Subscriptions requestBody: @@ -472,7 +501,6 @@ paths: $ref: '#/components/schemas/500Response' delete: summary: Delete a notification subscription by ID - operationId: deleteNotificationSubscription tags: - Notification Subscriptions parameters: @@ -514,6 +542,388 @@ paths: schema: type: object $ref: '#/components/schemas/500Response' + /eventorigins: + get: + summary: Get all event origins + tags: + - References + responses: + '200': + description: A list of event origins + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventOriginsResponse' + examples: + eventOriginsResponse: + value: + eventOrigins: + - eventOriginId: 1 + name: GBO + description: Events originated at GBO + - eventOriginId: 2 + name: Website + description: Events originated at the website + - eventOriginId: 3 + name: Payt + description: Events originated at Payt + - eventOriginId: 4 + name: Twikey + description: Events originated at Twikey + - eventOriginId: 5 + name: TapConnect + description: Events originated at TapConnect + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' + /channels: + get: + summary: Get all channels + tags: + - References + responses: + '200': + description: A list of channels + content: + application/json: + schema: + $ref: '#/components/schemas/GetChannelsResponse' + examples: + channelsResponse: + value: + channels: + - channelId: 1 + name: push + - channelId: 2 + name: email + - channelId: 3 + name: sms + - channelId: 4 + name: mail + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' + /notificationcategories: + get: + summary: Get all notification categories + tags: + - References + responses: + '200': + description: A list of notification categories + content: + application/json: + schema: + $ref: '#/components/schemas/GetNotificationCategoriesResponse' + examples: + notificationCategoriesResponse: + value: + notificationCategories: + - notifcationCategoryId: 1 + name: Mijn Reizen + - notifcationCategoryId: 2 + name: Mijn Passen + - notifcationCategoryId: 3 + name: Service Alerts + - notifcationCategoryId: 4 + name: Service Berichten + - notifcationCategoryId: 5 + name: Mijn Betalingen + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' + /eventtypes: + get: + summary: Get all event types + tags: + - References + responses: + '200': + description: A list of event types + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventTypesResponse' + examples: + eventTypesResponse: + value: + eventTypes: + - eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + - eventTypeId: 16 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKI + prettyName: Checkin gemist + optInRequired: true + - eventTypeId: 25 + eventOrigin: + eventOriginId: 3 + name: Payt + description: Events originated at Payt + name: Payment + subname: Failed Payment + prettyName: Betaling mislukt + optInRequired: false + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' + /eventtypecategories: + get: + summary: Get all event type categories + tags: + - References + responses: + '200': + description: A list of event type categories + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventTypeCategoriesResponse' + examples: + eventTypeCategoriesResponse: + value: + eventTypeCategories: + - eventType: + eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + notificationCategory: + notifcationCategoryId: 1 + name: Mijn Reizen + - eventType: + eventTypeId: 16 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKI + prettyName: Checkin gemist + optInRequired: true + notificationCategory: + notifcationCategoryId: 1 + name: Mijn Reizen + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' + /eventtypechannels: + get: + summary: Get all event type channels + tags: + - References + responses: + '200': + description: A list of event type channels + content: + application/json: + schema: + $ref: '#/components/schemas/GetEventTypeChannelResponse' + examples: + eventTypeChannelsResponse: + value: + eventTypeChannels: + - eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + eventType: + eventTypeId: 15 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKO + prettyName: Checkout gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + - eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5 + eventType: + eventTypeId: 16 + eventOrigin: + eventOriginId: 1 + name: GBO + description: Events originated at GBO + name: Travel + subname: Missing CKI + prettyName: Checkin gemist + optInRequired: true + channel: + channelId: 1 + name: push + isDefault: true + isMandatory: false + '400': + description: Bad request + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/401Response' + '404': + description: Not found + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/404Response' + '500': + description: Internal server error + content: + application/json: + schema: + type: object + $ref: '#/components/schemas/500Response' components: schemas: GetNotificationSubscriptionsResponse: @@ -523,8 +933,11 @@ components: type: array items: $ref: '#/components/schemas/NotificationSubscription' + href: + type: string required: - notificationSubscriptions + - href NotificationSubscription: type: object properties: @@ -615,6 +1028,53 @@ components: example: false PatchNotificationSubscriptionResponse: $ref: '#/components/schemas/NotificationSubscription' + GetEventOriginsResponse: + type: object + properties: + eventOrigins: + type: array + items: + $ref: '#/components/schemas/EventOrigin' + GetChannelsResponse: + type: object + properties: + channels: + type: array + items: + $ref: '#/components/schemas/Channel' + GetNotificationCategoriesResponse: + type: object + properties: + notificationCategories: + type: array + items: + $ref: '#/components/schemas/NotificationCategory' + GetEventTypesResponse: + type: object + properties: + eventTypes: + type: array + items: + $ref: '#/components/schemas/EventType' + GetEventTypeCategoriesResponse: + type: object + properties: + eventTypeCategories: + type: array + items: + type: object + properties: + eventType: + $ref: '#/components/schemas/EventType' + notificationCategory: + $ref: '#/components/schemas/NotificationCategory' + GetEventTypeChannelResponse: + type: object + properties: + eventTypeChannels: + type: array + items: + $ref: '#/components/schemas/EventTypeChannel' EventTypeChannel: type: object properties: @@ -691,6 +1151,18 @@ components: required: - channelId - name + NotificationCategory: + type: object + properties: + notifcationCategoryId: + type: integer + example: 1 + name: + type: string + example: Mijn Reizen + required: + - notifcationCategoryId + - name 400Response: type: object properties: From cba1f2b4911635ea7ddc43a19634f9250c5149f9 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 1 Oct 2025 15:14:35 +0200 Subject: [PATCH 07/12] casing customer crud --- src/openapi/customers/customers-crud-v2.yaml | 26 ++++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 322d118..b555cc3 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1151,7 +1151,7 @@ paths: examples: customerPhone: value: - phone: + customerPhone: number: "0701112233" countryCode: "0031" phoneTypeId: 1 @@ -1408,7 +1408,7 @@ paths: examples: EMV token: value: - ovpaytoken: + ovPayToken: tokenTypeId: 1 xTat: 0115b0df-db38-4702-8811-6f7de00db3ac xBot: 71a88843-32b8-4d52-ac25-de2458c47775 @@ -1417,7 +1417,7 @@ paths: expirationDate: "2026-04-20T17:05:52.000+02:00" OVpas token physical: value: - ovpaytoken: + ovPayToken: tokenTypeId: 2 xTat: 0115b0df-db38-4702-8811-6f7de00db3ac xBot: 71a88843-32b8-4d52-ac25-de2458c47775 @@ -1428,7 +1428,7 @@ paths: required: true responses: 201: - description: Successfully created a customer ovpaytoken + description: Successfully created a customer ovPayToken content: application/json: schema: @@ -1445,7 +1445,7 @@ paths: description: >- parameters: - - name: ovpaytokenId + - name: ovPayTokenId in: path required: true schema: @@ -1459,28 +1459,28 @@ paths: examples: updateFullToken: value: - ovpaytoken: + ovPayToken: alias: "ING pas mobiel" tokenStatusId: 1 replacedByTokenId: 8 - lastdigits: 4563 + lastDigits: 4563 updateTokenAlias: value: - ovpaytoken: + ovPayToken: alias: "ING pas mobiel" updateTokenStatus to removed: value: - ovpaytoken: + ovPayToken: tokenStatusId: 6 replaceToken: value: - ovpaytoken: + ovPayToken: tokenStatusId: 3 replacedByTokenId: 8 required: true responses: 200: - description: Successfully updated a customer ovpaytoken + description: Successfully updated a customer ovPayToken content: application/json: schema: @@ -1496,7 +1496,7 @@ paths: description: >- parameters: - - name: ovpaytokenId + - name: ovPayTokenId in: path required: true schema: @@ -1504,7 +1504,7 @@ paths: example: 2 responses: 200: - description: Successfully deleted a customer ovpaytoken + description: Successfully deleted a customer ovPayToken content: application/json: {} security: From 87e98ed975f4aaf5089c5d589d0392225e73a3dc Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 1 Oct 2025 15:26:46 +0200 Subject: [PATCH 08/12] casing --- src/openapi/customers/customers-crud-v2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index b555cc3..9641b6b 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1437,7 +1437,7 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - /ovpaytokens/{ovpaytokenId}: + /ovpaytokens/{ovPayTokenId}: patch: tags: - Ovpay Token From ae7534c0b7940a7c3930c5386e7044353a4a7a66 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Thu, 2 Oct 2025 11:09:17 +0200 Subject: [PATCH 09/12] ovchipcard fix --- src/openapi/customers/customers-crud-v2.yaml | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 9641b6b..d0ad5ec 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -139,7 +139,7 @@ paths: schema: type: string example: "0123456789" - - name: ovChipcardAlias + - name: ovChipCardAlias in: query schema: type: string @@ -278,7 +278,7 @@ paths: phoneTypeId: 2 name: Work isPreferred: false - ovChipcards: + ovChipCards: - ovChipCardId: 1 chipCardNumber: "1234123412341234" validUntil: "2023-01-01" @@ -404,7 +404,7 @@ paths: phoneTypeId: 2 name: Work isPreferred: false - ovChipcards: + ovChipCards: - ovChipCardId: 1 chipCardNumber: "1234123412341234" validUntil: "2023-01-01" @@ -543,7 +543,7 @@ paths: phoneTypeId: 2 name: Work isPreferred: false - ovChipcards: + ovChipCards: - ovChipCardId: 1 chipCardNumber: "1234123412341234" validUntil: "2023-01-01" @@ -677,7 +677,7 @@ paths: phoneTypeId: 2 name: Work isPreferred: false - ovChipcards: + ovChipCards: - ovChipCardId: 1 chipCardNumber: "1234123412341234" validUntil: "2023-01-01" @@ -1529,18 +1529,18 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/ovChipcardEntity" + $ref: "#/components/schemas/ovChipCardEntity" examples: - ovChipcards: + ovChipCards: value: - ovChipcard: - chipCardNumber: "1234123412341234" + ovChipCard: + chipcardNumber: "1234123412341234" validUntil: "2027-01-01" alias: Mijn chipkaart required: true responses: 201: - description: Successfully created a customer ovchipcard + description: Successfully created a customer ovChipCard content: application/json: schema: @@ -1549,7 +1549,7 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - /ovchipcards/{ovchipcardId}: + /ovchipcards/{ovChipCardId}: patch: tags: - Ovchipcard @@ -1567,7 +1567,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/ovChipcardEntity" + $ref: "#/components/schemas/ovChipCardEntity" examples: updateOvChipCardAlias: value: @@ -1576,7 +1576,7 @@ paths: required: true responses: 200: - description: Successfully updated a customer ovchipcard + description: Successfully updated a customer ovChipCard content: application/json: schema: @@ -2267,7 +2267,7 @@ components: $ref: "#/components/schemas/getCustomerStatusInstance" person: $ref: "#/components/schemas/getPerson" - ovChipcards: + ovChipCards: type: array items: $ref: "#/components/schemas/getOvChipcards" @@ -2538,7 +2538,7 @@ components: type: string replacedByTokenId: type: integer - ovChipcardEntity: + ovChipCardEntity: type: object properties: ovChipCardId: From 328aea468b7694c40f8941b24a9cbfb1c215d764 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 3 Oct 2025 13:13:05 +0200 Subject: [PATCH 10/12] OVPAY-973 - Processed review remarks. --- src/openapi/customers/notifications-crud.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/openapi/customers/notifications-crud.yaml b/src/openapi/customers/notifications-crud.yaml index 3fbec93..8c54ff7 100644 --- a/src/openapi/customers/notifications-crud.yaml +++ b/src/openapi/customers/notifications-crud.yaml @@ -137,8 +137,13 @@ paths: name: push isDefault: true isMandatory: false + customerProfileId: null + ovpayTokenId: null + deviceId: null createdAt: '2025-10-01T12:00:00Z' createdBy: system + updatedAt: null + updatedBy: null isActive: true _links: edit: From d2176dfdc340832563ec62d89ba08be64dc4042a Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 3 Oct 2025 14:02:21 +0200 Subject: [PATCH 11/12] OVPAY-2018 - Processed review remarks. --- src/openapi/customers/SE-customers.yaml | 49 ++++++++++--------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 37079cb..3c8d039 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -243,14 +243,12 @@ paths: ], "devices": [ { - "deviceTypeId": 1, - "deviceIdentifier": "123e4567-e89b-12d3-a456-426614174000", - "isPreferred": true + "externalDeviceId": "123e4567-e89b-12d3-a456-426614174000", + "alias": "My iPhone", }, { - "deviceTypeId": 2, - "deviceIdentifier": "987e6543-e21b-12d3-a456-426614174999", - "isPreferred": false + "externalDeviceId": "987e6543-e21b-12d3-a456-426614174999", + "alias": "My iPad", } ] } @@ -342,16 +340,14 @@ paths: ], "devices": [ { - "deviceId": 1, - "deviceTypeId": 1, - "deviceIdentifier": "123e4567-e89b-12d3-a456-426614174000", - "isPreferred": true + "deviceId": "813afdd8-bf8c-4e26-bfda-4da79552bd38", + "externalDeviceId": "123e4567-e89b-12d3-a456-426614174000", + "alias": "My iPhone", }, { - "deviceId": 2, - "deviceTypeId": 2, - "deviceIdentifier": "987e6543-e21b-12d3-a456-426614174999", - "isPreferred": false + "deviceId": "4f4249a2-ac6c-44f9-b740-66e66b6f3c28", + "externalDeviceId": "987e6543-e21b-12d3-a456-426614174999", + "alias": "My iPad", } ] } @@ -3612,23 +3608,16 @@ components: type: object properties: deviceId: - type: integer - example: 1 - deviceType: - type: object - properties: - deviceTypeId: - type: integer - example: 1 - name: - type: string - example: iOS - pushToken: type: string - example: abcdef123456 - isPreferred: - type: boolean - example: true + format: uuid + example: 1 + externalDeviceId: + type: string + format: uuid + example: dee7d80e-9288-4508-a3ed-c067e619179f + alias: + type: string + example: My iPhone 13 _links: type: object properties: From c5a3b368857d279297069f2f6aa4043ec846125e Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 6 Oct 2025 10:55:52 +0200 Subject: [PATCH 12/12] OVPAY-1946 - Added bulk reject/return endpoints. --- src/openapi/fiko/fiko-crud.yaml | 211 +++++++++++++++++++++++++++++++- 1 file changed, 207 insertions(+), 4 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 81c5de9..c4309bf 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -657,8 +657,8 @@ paths: status: failed description: Validation XYZ failed. correlationId: null - ? List containing multiple transaction audit trails of one transaction item - : summary: List containing multiple audit trails of one transaction item + List containing multiple transaction audit trails of one transaction item: + summary: List containing multiple audit trails of one transaction item description: List containing multiple audit trail records of one transaction item (with id `d667d293-aa82-4c9e-9b10-77cffc9058a1`). value: "@odata.context": "$metadata#TransactionAuditTrail" @@ -703,8 +703,8 @@ paths: status: created description: Transaction created. correlationId: null - ? List containing multiple audit trails of different failed transactions - : summary: List containing multiple audit trails of different failed transactions + List containing multiple audit trails of different failed transactions: + summary: List containing multiple audit trails of different failed transactions description: List containing multiple audit trails of different failed transactions (status = failed). value: "@odata.context": "$metadata#TransactionAuditTrail" @@ -2979,6 +2979,164 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited + /transactionitems/reject: + post: + summary: Reject transaction items to source in bulk. + description: Reject transaction items to source in bulk. + tags: + - Bulk processing v2.2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsBulkRequestBody" + examples: + List of transaction item ids to reject: + summary: List of transaction item ids to reject to source + description: List of transaction item ids to reject to source. + value: + transactionItemIds: + - afce35b2-1dff-4ace-98d0-4b9ac405c87d + - b1c4f8e7-3f4e-4d2a-9c6e-2f5e6d7c8b9a + - c2d5e6f7-4g5h-5i6j-0k1l-3m4n5o6p7q8r + responses: + "202": + description: Accepted + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsPostResponseBody" + examples: + Array of transaction items accepted: + summary: Array of transaction item ids accepted + description: | + The array of transaction item ids was accepted successfully. + The transaction items will be processed asynchronously. + In the response body the consumer will find information on how to retrieve the processing status. + value: + startTime: 2025-02-14T05:32:47.0672237Z + status: Running + clientTrackingId: 08584620957189579629541919368CU00 + callbackurl: https://api.integratielaag.nl/transactionitems/reject/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c + retryAfter: 10 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /transactionitems/responsestatus/reject/{clientTrackingId}: + get: + tags: + - Bulk processing v2.2 + summary: Get the status of the transaction item bulk reject. + description: Get the status of the asynchronous transaction item bulk reject. + parameters: + - in: path + name: clientTrackingId + schema: + type: string + required: true + description: The clientTrackingId of the transaction item bulk reject. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsRejectResponseStatusGetResponseBody" + examples: + Batch successfully processed: + summary: Batch successfully processed + description: | + Body of a batch of transaction items that was successfully rejected. + A number of transaction items were rejected. + value: + summary: + rejected: 15 + total: 15 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /transactionitems/return: + post: + summary: Return transaction items to trx db in bulk. + description: Return transaction items to trx db in bulk. + tags: + - Bulk processing v2.2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsBulkRequestBody" + examples: + List of transaction item ids to reject: + summary: List of transaction item ids to return to trx db + description: List of transaction item ids to return to trx db. + value: + transactionItemIds: + - afce35b2-1dff-4ace-98d0-4b9ac405c87d + - b1c4f8e7-3f4e-4d2a-9c6e-2f5e6d7c8b9a + - c2d5e6f7-4g5h-5i6j-0k1l-3m4n5o6p7q8r + responses: + "202": + description: Accepted + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsPostResponseBody" + examples: + Array of transaction items accepted: + summary: Array of transaction item ids accepted + description: | + The array of transaction item ids was accepted successfully. + The transaction items will be processed asynchronously. + In the response body the consumer will find information on how to retrieve the processing status. + value: + startTime: 2025-02-14T05:32:47.0672237Z + status: Running + clientTrackingId: 08584620957189579629541919368CU00 + callbackurl: https://api.integratielaag.nl/transactionitems/return/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c + retryAfter: 10 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /transactionitems/responsestatus/return/{clientTrackingId}: + get: + tags: + - Bulk processing v2.2 + summary: Get the status of the transaction item bulk return. + description: Get the status of the asynchronous transaction item bulk return. + parameters: + - in: path + name: clientTrackingId + schema: + type: string + required: true + description: The clientTrackingId of the transaction item bulk return. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsReturnResponseStatusGetResponseBody" + examples: + Batch successfully processed: + summary: Batch successfully processed + description: | + Body of a batch of transaction items that was successfully returned to trx db. + A number of transaction items were returned to trx db. + value: + summary: + returned: 15 + total: 15 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited components: securitySchemes: default: @@ -4801,6 +4959,51 @@ components: transactionLineId: type: string example: fee907dd-e59d-44f5-a63b-bbdec38f79b7 + TransactionItemsBulkRequestBody: + type: object + properties: + transactionItemIds: + type: array + items: + type: string + format: uuid + example: 1ad109d3-fd7d-4b6f-872b-220d492f385f + required: + - transactionItemIds + TransactionItemsRejectResponseStatusGetResponseBody: + type: object + properties: + summary: + type: object + properties: + rejected: + type: integer + example: 3 + total: + type: integer + example: 3 + required: + - rejected + - total + required: + - summary + TransactionItemsReturnResponseStatusGetResponseBody: + type: object + properties: + summary: + type: object + properties: + returned: + type: integer + example: 3 + total: + type: integer + example: 3 + required: + - returned + - total + required: + - summary rfc9457: type: object properties: