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: ovPayTokenId
          in: query
          required: false
          schema:
            type: integer
          description: Filter by OV Pay token 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)
        - name: expand
          in: query
          schema:
            type: string
            enum: [none, notificationPreference, eventTypeChannel]
            default: none
          description: "Expand nested attributes. Possible values: `none`, `notificationPreference`, and `eventTypeChannel`."
      responses:
        "200":
          description: A list of notification subscriptions
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetNotificationSubscriptionsResponse"
              examples:
                emptyNotificationSubscriptionResponse:
                  summary: No notification subscriptions found
                  value:
                    notificationSubscriptions: []
                    href: null
                notificationSubscriptionResponse?expand=none:
                  summary: Return notification subscriptions without nested attributes (expand=none)
                  value:
                    notificationSubscriptions:
                      - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
                        notificationCategory:
                          notificationCategoryId: 1
                          name: Mijn Reizen
                          groupName: Onderweg
                        customerProfileId: 1337
                        ovPayTokenId: 42
                        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
                          groupName: Marketing
                        customerProfileId: 1338
                        ovPayTokenId: null
                        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
                notificationSubscriptionResponse?expand=notificationPreference:
                  summary: Return notification subscriptions with nested notification preferences (expand=notificationPreference)
                  value:
                    notificationSubscriptions:
                      - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
                        notificationCategory:
                          notificationCategoryId: 1
                          name: Mijn Reizen
                          groupName: Onderweg
                        customerProfileId: 1337
                        ovPayTokenId: 42
                        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
                        notificationPreferences:
                          - notificationPreferenceId: d4e5f6a7-b8c9-40d1-ef01-234567890abc
                            eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
                            resourceIdentifier: null
                          - notificationPreferenceId: e5f6a7b8-c9d0-41e2-f012-34567890abcd
                            eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d
                            resourceIdentifier: 44
                      - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd
                        notificationCategory:
                          notificationCategoryId: 2
                          name: Nieuwsbrief aanmelding
                          groupName: Marketing
                        customerProfileId: 1338
                        ovPayTokenId: null
                        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
                        notificationPreferences: []
                    href: null
                notificationSubscriptionResponse?expand=eventTypeChannel:
                  summary: Return notification subscriptions with nested event type channels (expand=eventTypeChannel)
                  value:
                    notificationSubscriptions:
                      - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
                        notificationCategory:
                          notificationCategoryId: 1
                          name: Mijn Reizen
                          groupName: Onderweg
                        customerProfileId: 1337
                        ovPayTokenId: 42
                        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
                        notificationPreferences:
                          - notificationPreferenceId: d4e5f6a7-b8c9-40d1-ef01-234567890abc
                            eventTypeChannel: 
                              eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
                              channel:
                                channelId: 1
                                name: push
                                resourceName: 
                                  resourceNameId: 8
                                  name: devices
                              isDefault: true
                              isMandatory: false
                            resourceIdentifier: null
                          - notificationPreferenceId: e5f6a7b8-c9d0-41e2-f012-34567890abcd
                            eventTypeChannelId: 
                              eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d
                              channel:
                                channelId: 2
                                name: email
                                resourceName: 
                                  resourceNameId: 4
                                  name: customers
                              isDefault: false
                              isMandatory: false
                            resourceIdentifier: 44
                      - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd
                        notificationCategory:
                          notificationCategoryId: 2
                          name: Nieuwsbrief aanmelding
                          groupName: Marketing
                        customerProfileId: 1338
                        ovPayTokenId: null
                        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
                        notificationPreferences: []
        "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
                  ovPayTokenId: 42
                  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}:
    parameters:
    - name: notificationSubscriptionId
      in: path
      required: true
      schema:
        type: string
        format: uuid
      example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
    patch:
      summary: Update a notification subscription by ID
      tags:
        - Notification Subscriptions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PatchNotificationSubscriptionRequest"
            examples:
              updateNotificationSubscriptionRequest:
                value:
                  ovPayTokenId: 43
      responses:
        "200":
          description: Notification subscription updated successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PatchNotificationSubscriptionResponse"
              examples:
                updateNotificationSubscriptionResponse:
                  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"
    delete:
      summary: Delete a notification subscription by ID
      tags:
        - Notification Subscriptions
      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"
  /notificationsubscriptions/{notificationSubscriptionId}/notificationpreferences:
    parameters:
      - name: notificationSubscriptionId
        in: path
        required: true
        schema:
          type: string
          format: uuid
        example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
    post:
      summary: Add a notification preference to a notification subscription
      tags:
        - Notification Preferences
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PostNotificationPreferenceRequest"
            examples:
              addNotificationPreferenceNotNull:
                summary: With non-null resource identifier
                value:
                  eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
                  resourceIdentifier: 44
              addNotificationPreferenceNull:
                summary: With null resource identifier
                value:
                  eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
                  resourceIdentifier: null
      responses:
        "201":
          description: Notification preference added successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PostNotificationPreferenceResponse"
              examples:
                addNotificationPreferenceResponse:
                  value:
                    notificationPreferenceId: d4e5f6a7-b8c9-40d1-ef01-234567890abc
        "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"
  /notificationpreferences/{notificationPreferenceId}:
    parameters:
      - name: notificationPreferenceId
        in: path
        required: true
        schema:
          type: string
          format: uuid
        example: d4e5f6a7-b8c9-40d1-ef01-234567890abc
    patch:
      summary: Update a notification preference by ID
      tags:
        - Notification Preferences
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PatchNotificationPreferenceRequest"
            examples:
              updateNotificationPreferenceRequest:
                value:
                  resourceIdentifier: 55
      responses:
        "200":
          description: Notification preference updated successfully
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PatchNotificationPreferenceResponse"
              examples:
                updateNotificationPreferenceResponse:
                  value:
                    notificationPreferenceId: d4e5f6a7-b8c9-40d1-ef01-234567890abc
        "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 preference by ID
      tags:
        - Notification Preferences
      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"
  /notificationcategories:
    get:
      tags:
        - Notification Categories
      summary: Get all notification categories.
      parameters:
        - name: notificationCategoryId
          in: query
          required: false
          schema:
            type: integer
          description: Filter by notification category ID
        - name: name
          in: query
          required: false
          schema:
            type: integer
          description: Filter by notification category name (case-insensitive, partial match)
        - name: groupName
          in: query
          required: false
          schema:
            type: integer
          description: Filter by notification category group name (case-insensitive, partial match)
        - 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:
                emptyNotificationCategoriesResponse:
                  summary: No notification categories found
                  value:
                    notificationCategories: []
                getNotifactionCategories?expand=none:
                  summary: Return all the notification categories without nested attributes (expand=none)
                  value:
                    notificationCategories:
                      - notificationCategoryId: 1
                        name: Mijn Reizen
                        groupName: Onderweg
                      - notificationCategoryId: 2
                        name: Nieuwsbrief aanmelding
                        groupName: Marketing
                      - notificationCategoryId: 3
                        name: Serviceberichten
                        groupName: Onderweg
                      - notificationCategoryId: 4
                        name: Producten
                        groupName: Onderweg
                      - notificationCategoryId: 5
                        name: Dragers
                        groupName: Onderweg
                getNotifactionCategories?expand=eventType:
                  summary: Return all the notification categories with nested event types (expand=eventType)
                  value:
                    notificationCategories:
                      - notificationCategoryId: 1
                        name: Mijn Reizen
                        groupName: Onderweg
                        eventTypes:
                          - eventTypeId: 1
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: TRIPS
                            subName: CKI
                            prettyName: Normal Check-in
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab
                              name: GBO_TRIPS
                              externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210
                          - eventTypeId: 2
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: TRIPS
                            subName: CKO
                            prettyName: Normal Check-out
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab
                              name: GBO_TRIPS
                              externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210
                          - eventTypeId: 3
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: TRIPS
                            subName: MISSING_CKI
                            prettyName: Missing Check-in
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab
                              name: GBO_TRIPS
                              externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210
                          - eventTypeId: 4
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: TRIPS
                            subName: MISSING_CKO
                            prettyName: Missing Check-out
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab
                              name: GBO_TRIPS
                              externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210
                      - notificationCategoryId: 2
                        name: Nieuwsbrief aanmelding
                        groupName: Marketing
                        eventTypes:
                          - eventTypeId: 5
                            eventOrigin:
                              eventOriginId: 6
                              name: Maileon
                            name: newsletter
                            subName: null
                            prettyName: HTM nieuwsbrief
                            optinRequired: false
                            originSubscription: null
                      - notificationCategoryId: 3
                        name: Serviceberichten
                        groupName: Onderweg
                        eventTypes:
                          - eventTypeId: 6
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: ACCOUNT
                            subName: MARKED
                            prettyName: PAD Markering
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc
                              name: GBO_ACCOUNT
                              externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f
                          - eventTypeId: 7
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: ACCOUNT
                            subName: AMEND
                            prettyName: PAD Aanvullen
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc
                              name: GBO_ACCOUNT
                              externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f
                      - notificationCategoryId: 4
                        name: Producten
                        groupName: Onderweg
                        eventTypes:
                          - eventTypeId: 8
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: PRODUCT
                            subName: ACTIVATE
                            prettyName: Product Geactiveerd
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: f1a2b3c4-d5e6-4789-abcd-3456789012de
                              name: GBO_PRODUCT
                              externalSubscriptionId: 12345678-90ab-cdef-1234-567890abcdef
                          - eventTypeId: 9
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: PRODUCT
                            subName: REFUND
                            prettyName: Product Beeindigd
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: f1a2b3c4-d5e6-4789-abcd-3456789012de
                              name: GBO_PRODUCT
                              externalSubscriptionId: 12345678-90ab-cdef-1234-567890abcdef
                      - notificationCategoryId: 5
                        name: Dragers
                        groupName: Onderweg
                        eventTypes:
                          - eventTypeId: 10
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: CARD
                            subName: EXPIRED
                            prettyName: Drager Verlopen
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: c3d4e5f6-a789-4bcd-ef01-4567890123de
                              name: GBO_CARD
                              externalSubscriptionId: 23456789-0abc-def1-2345-67890abcdef1
                          - eventTypeId: 11
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: CARD
                            subName: SUSPENDED
                            prettyName: Drager staat op de denylist
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: c3d4e5f6-a789-4bcd-ef01-4567890123de
                              name: GBO_CARD
                              externalSubscriptionId: 23456789-0abc-def1-2345-67890abcdef1                          
                getNotifactionCategories?expand=eventTypeChannel:
                  summary: Return all the notification categories with all nested attributes (expand=eventTypeChannel)
                  value:
                    notificationCategories:
                      - notificationCategoryId: 1
                        name: Mijn Reizen
                        groupName: Onderweg
                        eventTypes:
                          - eventTypeId: 1
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: TRIPS
                            subName: CKI
                            prettyName: Normal Check-in
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab
                              name: GBO_TRIPS
                              externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210
                            eventTypeChannels:
                              - eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                          - eventTypeId: 2
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: TRIPS
                            subName: CKO
                            prettyName: Normal Check-out
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab
                              name: GBO_TRIPS
                              externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210
                            eventTypeChannels:
                              - eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                          - eventTypeId: 3
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: TRIPS
                            subName: MISSING_CKI
                            prettyName: Missing Check-in
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab
                              name: GBO_TRIPS
                              externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210
                            eventTypeChannels:
                              - eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                          - eventTypeId: 4
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: TRIPS
                            subName: MISSING_CKO
                            prettyName: Missing Check-out
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab
                              name: GBO_TRIPS
                              externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210
                            eventTypeChannels:
                              - eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                      - notificationCategoryId: 2
                        name: Nieuwsbrief aanmelding
                        groupName: Marketing
                        eventTypes:
                          - eventTypeId: 5
                            eventOrigin:
                              eventOriginId: 6
                              name: Maileon
                            name: newsletter
                            subName: null
                            prettyName: HTM nieuwsbrief
                            optinRequired: false
                            originSubscription: null
                            eventTypeChannels:
                              - eventTypeChannelId: 447a1116-6cd7-4645-8c3d-43237b6186cd
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: true
                                isMandatory: false
                      - notificationCategoryId: 3
                        name: Serviceberichten
                        groupName: Onderweg
                        eventTypes:
                          - eventTypeId: 6
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: ACCOUNT
                            subName: MARKED
                            prettyName: PAD Markering
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc
                              name: GBO_ACCOUNT
                              externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f
                            eventTypeChannels:
                              - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                          - eventTypeId: 7
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: ACCOUNT
                            subName: AMEND
                            prettyName: PAD Aanvullen
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc
                              name: GBO_ACCOUNT
                              externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f
                            eventTypeChannels:
                              - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                      - notificationCategoryId: 4
                        name: Producten
                        groupName: Onderweg
                        eventTypes:
                          - eventTypeId: 8
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: PRODUCT
                            subName: ACTIVATE
                            prettyName: Product Geactiveerd
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: f1a2b3c4-d5e6-4789-abcd-3456789012de
                              name: GBO_PRODUCT
                              externalSubscriptionId: 12345678-90ab-cdef-1234-567890abcdef
                            eventTypeChannels:
                              - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                          - eventTypeId: 9
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: PRODUCT
                            subName: REFUND
                            prettyName: Product Beeindigd
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: f1a2b3c4-d5e6-4789-abcd-3456789012de
                              name: GBO_PRODUCT
                              externalSubscriptionId: 12345678-90ab-cdef-1234-567890abcdef
                            eventTypeChannels:
                              - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                      - notificationCategoryId: 5
                        name: Dragers
                        groupName: Onderweg
                        eventTypes:
                          - eventTypeId: 10
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: CARD
                            subName: EXPIRED
                            prettyName: Drager Verlopen
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: c3d4e5f6-a789-4bcd-ef01-4567890123de
                              name: GBO_CARD
                              externalSubscriptionId: 23456789-0abc-def1-2345-67890abcdef1
                            eventTypeChannels:
                              - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                isDefault: false
                                isMandatory: false
                          - eventTypeId: 11
                            eventOrigin:
                              eventOriginId: 1
                              name: GBO
                            name: CARD
                            subName: SUSPENDED
                            prettyName: Drager staat op de denylist
                            optinRequired: false
                            originSubscription:
                              originSubscriptionId: c3d4e5f6-a789-4bcd-ef01-4567890123de
                              name: GBO_CARD
                              externalSubscriptionId: 23456789-0abc-def1-2345-67890abcdef1
                            eventTypeChannels:
                              - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432
                                channel:
                                  channelId: 1
                                  name: push
                                  resourceName: 
                                    resourceNameId: 8
                                    name: devices
                                isDefault: true
                                isMandatory: false
                              - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2
                                channel:
                                  channelId: 2
                                  name: email
                                  resourceName: 
                                    resourceNameId: 4
                                    name: customers
                                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
                        resourceName:
                          resourceNameId: 8
                          name: devices
                      - channelId: 2
                        name: email
                        resourceName:
                          resourceNameId: 4
                          name: customers
                      - channelId: 3
                        name: sms
                        resourceName:
                          resourceNameId: 4
                          name: customers
                      - channelId: 4
                        name: mail
                        resourceName:
                          resourceNameId: 4
                          name: customers
        "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
                          groupName: Onderweg
                      - eventType:
                          eventTypeId: 16
                          eventOrigin:
                            eventOriginId: 1
                            name: GBO
                          name: Travel
                          subname: Missing CKI
                          prettyName: Checkin gemist
                          optInRequired: true
                        notificationCategory:
                          notificationCategoryId: 1
                          name: Mijn Reizen
                          groupName: Onderweg
        "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
                          resourceName:
                            resourceNameId: 8
                            name: devices
                        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
                          resourceName:
                            resourceNameId: 8
                            name: devices
                        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
        ovPayTokenId:
          type: integer
          example: 42
        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
    PatchNotificationSubscriptionRequest:
      type: object
      properties:
        ovPayTokenId:
          type: integer
          example: 43
    PatchNotificationSubscriptionResponse:
      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
    PostNotificationPreferenceRequest:
      type: object
      properties:
        eventTypeChannelId:
          type: string
          format: uuid
          example: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f
        resourceIdentifier:
          type: string
          format: uuid
          example: d4e5f678-49ab-bcde-2345-678901bcdef0
      required:
        - eventTypeChannelId
    PostNotificationPreferenceResponse:
      type: object
      properties:
        notificationPreferenceId:
          type: string
          format: uuid
          example: d4e5f678-49ab-bcde-2345-678901bcdef0
    PatchNotificationPreferenceRequest:
      type: object
      properties:
        resourceIdentifier:
          type: string
          format: uuid
          example: d4e5f678-49ab-bcde-2345-678901bcdef0
    PatchNotificationPreferenceResponse:
      type: object
      properties:
        notificationPreferenceId:
          type: string
          format: uuid
          example: d4e5f678-49ab-bcde-2345-678901bcdef0
    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
        originSubscription:
          type: object
          properties:
            originSubscriptionId:
              type: string
              format: uuid
              example: a1b2c3d4-e5f6-4789-abcd-1234567890ab
            name:
              type: string
              example: GBO_TRIPS
            externalSubscriptionId:
              type: string
              format: uuid
              example: fedcba98-7654-3210-fedc-ba9876543210
          required:
            - originSubscriptionId
            - name
            - externalSubscriptionId
        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
        resourceName:
          type: object
          properties:
            resourceNameId:
              type: integer
              example: 8
            name:
              type: string
              example: devices
          required:
            - resourceNameId
            - name
      required:
        - channelId
        - name
        - resourceName
    NotificationCategory:
      type: object
      properties:
        notificationCategoryId:
          type: integer
          example: 1
        name:
          type: string
          example: Mijn Reizen
        groupName:
          type: string
          example: Onderweg
        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: {}
