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: Find one or more notification subscriptions tags: - Notification Subscriptions parameters: - name: notificationSubscriptionId in: query required: false schema: type: string format: uuid description: Filter by notification subscription ID - name: notificationCategoryId in: query required: false schema: type: integer description: Filter by notification category ID - name: customerProfileId in: query required: false schema: type: integer description: Filter by customer profile ID - name: isCurrentlyActive in: query required: false schema: type: boolean description: Filters if most recent subscription active is active/inactive - name: activityLimit in: query required: false schema: type: integer default: 1 description: Limit the number of subscription activities returned per subscription (default is 1) responses: "200": description: A list of notification subscriptions content: application/json: schema: $ref: "#/components/schemas/GetNotificationSubscriptionsResponse" examples: emptyNotificationSubscriptionResponse: value: notificationSubscriptions: [] href: null fullNotificationSubscriptionResponse: value: notificationSubscriptions: - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 notificationCategory: notificationCategoryId: 1 name: Mijn Reizen customerProfileId: 1337 subscriptionActivities: - subscriptionActivityId: 30b32657-1ba1-44e0-8868-4db807695387 user: "1001337" timestamp: "2025-10-02T15:00:00Z" isActive: true - subscriptionActivityId: f78bc171-a50e-4b88-88d3-a76585bffd54 user: "1001337" timestamp: "2025-10-02T14:00:00Z" isActive: false - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd notificationCategory: notificationCategoryId: 2 name: Nieuwsbrief aanmelding customerProfileId: 1338 subscriptionActivities: - subscriptionActivityId: 7fae0d2c-1e20-4f3e-b25d-fd8505a381c4 user: "1001338" timestamp: "2025-10-02T15:00:00Z" isActive: false - subscriptionActivityId: cb2fc1d3-f143-4dd7-8608-4538e5637e3a user: "1001338" timestamp: "2025-10-02T14:00:00Z" isActive: true href: null "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 tags: - Notification Subscriptions requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/PostNotificationSubscriptionRequest" examples: fullNotificationSubscriptionRequest: value: notificationCategoryId: 1 customerProfileId: 1337 subscriptionActivity: user: "1001337" timestamp: "2025-10-02T14:00:00Z" isActive: true responses: "201": description: Notification subscription created successfully content: application/json: schema: $ref: "#/components/schemas/PostNotificationSubscriptionResponse" examples: notificationSubscriptionResponse: value: notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 "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}: delete: summary: Delete 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 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" /notificationsubscriptions/{notificationSubscriptionId}/subscriptionactivities: post: summary: Add a subscription activity to a notification subscription 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/PostSubscriptionActivityRequest" examples: addSubscriptionActivityRequest: value: user: "1001337" timestamp: "2025-10-08T15:00:00Z" isActive: true responses: "201": description: Subscription activity added successfully content: application/json: schema: $ref: "#/components/schemas/PostSubscriptionActivityResponse" examples: addSubscriptionActivityResponse: value: subscriptionActivityId: 30b32657-1ba1-44e0-8868-4db807695387 "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: tags: - Notification Categories summary: Get all notification categories. parameters: - name: expand in: query schema: type: string enum: [none, eventType, eventTypeChannel] default: none description: "Expand nested attributes. Possible values: `none`, `eventType`, and `eventTypeChannel`." responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/GetNotificationCategoriesResponse" examples: getNotifactionCategories?expand=none: summary: Return all the notification categories without nested attributes (expand=none) value: notificationCategories: - notificationCategoryId: 1 name: Mijn Reizen - notificationCategoryId: 2 name: Nieuwsbrief aanmelding - notificationCategoryId: 3 name: Mijn Passen getNotifactionCategories?expand=eventType: summary: Return all the notification categories with nested event types (expand=eventType) value: notificationCategories: - notificationCategoryId: 1 name: Mijn Reizen eventTypes: - eventTypeId: 2 eventOrigin: eventOriginId: 1 name: GBO name: ALERTS, TRAVEL_SCHEME subName: CI prettyName: Check In optinRequired: false - eventTypeId: 3 eventOrigin: eventOriginId: 1 name: GBO name: ALERTS, PAD subName: null prettyName: Profielgegevens op de pas optinRequired: false - notificationCategoryId: 2 name: Nieuwsbrief aanmelding eventTypes: - eventTypeId: 1 eventOrigin: eventOriginId: 6 name: Maileon name: newsletter subName: null prettyName: HTM nieuwsbrief optinRequired: false - notificationCategoryId: 3 name: Mijn Passen eventTypes: - eventTypeId: 4 eventOrigin: eventOriginId: 1 name: GBO name: ALERTS, CARD subName: null prettyName: Mijn passen optinRequired: false - eventTypeId: 5 eventOrigin: eventOriginId: 1 name: GBO name: ALERTS, PAD subName: null prettyName: Profielgegevens op de pas optinRequired: false getNotifactionCategories?expand=eventTypeChannel: summary: Return all the notification categories with all nested attributes (expand=eventTypeChannel) value: notificationCategories: - notificationCategoryId: 1 name: Mijn Reizen eventTypes: - eventTypeId: 2 eventOrigin: eventOriginId: 1 name: GBO name: ALERTS, TRAVEL_SCHEME subName: CI prettyName: Check In optinRequired: false eventTypeChannels: - eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173 channel: channelId: 1 name: push isDefault: true isMandatory: false - eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d channel: channelId: 2 name: email isDefault: false isMandatory: false - eventTypeId: 3 eventOrigin: eventOriginId: 1 name: GBO name: ALERTS, PAD subName: null prettyName: Profielgegevens op de pas optinRequired: false eventTypeChannels: - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432 channel: channelId: 1 name: push isDefault: true isMandatory: false - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2 channel: channelId: 2 name: email isDefault: false isMandatory: false - notificationCategoryId: 2 name: Nieuwsbrief aanmelding eventTypes: - eventTypeId: 1 eventOrigin: eventOriginId: 6 name: Maileon name: newsletter subName: null prettyName: HTM nieuwsbrief optinRequired: false eventTypeChannels: - eventTypeChannelId: 447a1116-6cd7-4645-8c3d-43237b6186cd channel: channelId: 2 name: email isDefault: true isMandatory: false - notificationCategoryId: 3 name: Mijn Passen eventTypes: - eventTypeId: 4 eventOrigin: eventOriginId: 1 name: GBO name: ALERTS, CARD subName: null prettyName: Mijn passen optinRequired: false eventTypeChannels: - eventTypeChannelId: be07c7bb-714b-4637-acf5-a67025ad8e60 channel: channelId: 1 name: push isDefault: true isMandatory: false - eventTypeChannelId: 0c797b5a-ed34-494b-8c64-0a832830d392 channel: channelId: 2 name: email isDefault: false isMandatory: false - eventTypeId: 5 eventOrigin: eventOriginId: 1 name: GBO name: ALERTS, PAD subName: null prettyName: Profielgegevens op de pas optinRequired: false eventTypeChannels: - eventTypeChannelId: b910368f-c045-4e8e-b01d-bcbc78708bac channel: channelId: 1 name: push isDefault: true isMandatory: false - eventTypeChannelId: 93e773da-ba3b-48da-9a0e-ee478eaa752f channel: channelId: 2 name: email isDefault: false 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" /eventorigins: get: summary: Get all event origins deprecated: true tags: - References (not for MVP) parameters: - name: name in: query required: false schema: type: string description: Filter by event origin name (case-insensitive, partial match) responses: "200": description: A list of event origins content: application/json: schema: $ref: "#/components/schemas/GetEventOriginsResponse" examples: eventOriginsResponse: value: eventOrigins: - eventOriginId: 1 name: GBO - eventOriginId: 2 name: Website - eventOriginId: 3 name: Payt - eventOriginId: 4 name: Twikey - eventOriginId: 5 name: TapConnect - eventOriginId: 6 name: Maileon "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 deprecated: true tags: - References (not for MVP) parameters: - name: name in: query required: false schema: type: string description: Filter by channel name (case-insensitive, partial match) 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" /eventtypes: get: summary: Get all event types deprecated: true tags: - References (not for MVP) parameters: - name: name in: query required: false schema: type: string description: Filter by event type name (case-insensitive, partial match) responses: "200": description: A list of event types content: application/json: schema: $ref: "#/components/schemas/GetEventTypesResponse" examples: eventTypesResponse: value: eventTypes: - eventTypeId: 1 eventOrigin: eventOriginId: 6 name: Maileon name: newsletter subname: null prettyName: HTM nieuwsbrief optInRequired: false - eventTypeId: 15 eventOrigin: eventOriginId: 1 name: GBO name: Travel subname: Missing CKO prettyName: Checkout gemist optInRequired: true - eventTypeId: 16 eventOrigin: eventOriginId: 1 name: GBO name: Travel subname: Missing CKI prettyName: Checkin gemist optInRequired: true - eventTypeId: 25 eventOrigin: eventOriginId: 3 name: 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 deprecated: true tags: - References (not for MVP) parameters: - name: name in: query required: false schema: type: string description: Filter by event type category name (case-insensitive, partial match) 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 name: Travel subname: Missing CKO prettyName: Checkout gemist optInRequired: true notificationCategory: notificationCategoryId: 1 name: Mijn Reizen - eventType: eventTypeId: 16 eventOrigin: eventOriginId: 1 name: GBO name: Travel subname: Missing CKI prettyName: Checkin gemist optInRequired: true notificationCategory: notificationCategoryId: 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 deprecated: true tags: - References (not for MVP) parameters: - name: name in: query required: false schema: type: string description: Filter by event type channel name (case-insensitive, partial match) 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 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 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: type: object properties: notificationSubscriptions: type: array items: $ref: "#/components/schemas/NotificationSubscription" href: type: string required: - notificationSubscriptions - href NotificationSubscription: type: object properties: notificationSubscriptionId: type: string format: uuid example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 notificationCategory: $ref: "#/components/schemas/NotificationCategory" customerProfileId: type: integer example: 1337 subscriptionActivities: type: array items: type: object properties: subscriptionActivityId: type: string format: uuid example: 30b32657-1ba1-44e0-8868-4db807695387 user: type: string example: "1001337" timestamp: type: string format: date-time example: "2025-10-02T15:00:00Z" isActive: type: boolean example: true required: - subscriptionActivityId - user - timestamp - isActive required: - notificationSubscriptionId - notificationCategory - customerProfileId PostNotificationSubscriptionRequest: type: object properties: notificationCategoryId: type: integer example: 1 customerProfileId: type: integer example: 1337 subscriptionActivity: type: object properties: user: type: string example: "1001337" timestamp: type: string format: date-time example: "2025-10-02T15:00:00Z" isActive: type: boolean example: true required: - user - timestamp - isActive required: - notificationCategoryId - customerProfileId PostNotificationSubscriptionResponse: type: object properties: notificationSubscriptionId: type: string format: uuid example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 PostSubscriptionActivityRequest: type: object properties: user: type: string example: "1001337" timestamp: type: string format: date-time example: "2025-10-08T15:00:00Z" isActive: type: boolean example: true required: - user - timestamp - isActive PostSubscriptionActivityResponse: type: object properties: subscriptionActivityId: type: string format: uuid example: 30b32657-1ba1-44e0-8868-4db807695387 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: 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 eventTypeChannels: type: array items: $ref: "#/components/schemas/EventTypeChannel" required: - eventTypeId - eventOrigin - name - prettyName - optInRequired EventOrigin: type: object properties: eventOriginId: type: integer example: 1 name: type: string example: GBO required: - eventOriginId - name Channel: type: object properties: channelId: type: integer example: 1 name: type: string example: push required: - channelId - name NotificationCategory: type: object properties: notificationCategoryId: type: integer example: 1 name: type: string example: Mijn Reizen eventTypes: type: array items: $ref: "#/components/schemas/EventType" required: - notificationCategoryId - 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: {}