ovpay/src/openapi/customers/notifications-crud.yaml

1221 lines
41 KiB
YAML

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
notifcationCategory:
notifcationCategoryId: 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
_links:
self:
href: /notificationsubscriptions?notificationSubscriptionId=5bedce29-af0c-4f3c-b182-2caa8a1f9377
method: GET
add_activity:
href: /notificationsubscriptions/5bedce29-af0c-4f3c-b182-2caa8a1f9377/subscriptionactivities
method: POST
delete:
href: /notificationsubscriptions/5bedce29-af0c-4f3c-b182-2caa8a1f9377
method: DELETE
- notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd
notifcationCategory:
notifcationCategoryId: 2
name: Mijn Passen
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
_links:
self:
href: /notificationsubscriptions?notificationSubscriptionId=39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd
method: GET
add_activity:
href: /notificationsubscriptions/39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd/subscriptionactivities
method: POST
delete:
href: /notificationsubscriptions/39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd
method: DELETE
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:
notifcationCategoryId: 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: Nieuwsbrief
- notificationCategoryId: 2
name: Mijn Reizen
- 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: Nieuwsbrief
eventTypes:
- eventTypeId: 1
eventOrigin:
eventOriginId: 6
name: Maileon
name: HTM nieuwsbrief
subName: ""
prettyName: HTM nieuwsbrief
optinRequired: false
- notificationCategoryId: 2
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: 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: Nieuwsbrief
eventTypes:
- eventTypeId: 1
eventOrigin:
eventOriginId: 6
name: Maileon
name: HTM nieuwsbrief
subName: ""
prettyName: HTM nieuwsbrief
optinRequired: false
eventTypeChannels:
- eventTypeChannelId: 447a1116-6cd7-4645-8c3d-43237b6186cd
channel:
channelId: 2
name: email
isDefault: true
isMandatory: false
- notificationCategoryId: 2
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: 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
description: Events originated at GBO
- eventOriginId: 2
name: Website
description: Events originated at the website
- eventOriginId: 3
name: Payt
description: Events originated at Payt
- eventOriginId: 4
name: Twikey
description: Events originated at Twikey
- eventOriginId: 5
name: TapConnect
description: Events originated at TapConnect
"400":
description: Bad request
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/400Response"
"401":
description: Unauthorized
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/401Response"
"404":
description: Not found
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/404Response"
"500":
description: Internal server error
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/500Response"
/channels:
get:
summary: Get all channels
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: 15
eventOrigin:
eventOriginId: 1
name: GBO
description: Events originated at GBO
name: Travel
subname: Missing CKO
prettyName: Checkout gemist
optInRequired: true
- eventTypeId: 16
eventOrigin:
eventOriginId: 1
name: GBO
description: Events originated at GBO
name: Travel
subname: Missing CKI
prettyName: Checkin gemist
optInRequired: true
- eventTypeId: 25
eventOrigin:
eventOriginId: 3
name: Payt
description: Events originated at Payt
name: Payment
subname: Failed Payment
prettyName: Betaling mislukt
optInRequired: false
"400":
description: Bad request
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/400Response"
"401":
description: Unauthorized
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/401Response"
"404":
description: Not found
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/404Response"
"500":
description: Internal server error
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/500Response"
/eventtypecategories:
get:
summary: Get all event type categories
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
description: Events originated at GBO
name: Travel
subname: Missing CKO
prettyName: Checkout gemist
optInRequired: true
notificationCategory:
notifcationCategoryId: 1
name: Mijn Reizen
- eventType:
eventTypeId: 16
eventOrigin:
eventOriginId: 1
name: GBO
description: Events originated at GBO
name: Travel
subname: Missing CKI
prettyName: Checkin gemist
optInRequired: true
notificationCategory:
notifcationCategoryId: 1
name: Mijn Reizen
"400":
description: Bad request
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/400Response"
"401":
description: Unauthorized
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/401Response"
"404":
description: Not found
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/404Response"
"500":
description: Internal server error
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/500Response"
/eventtypechannels:
get:
summary: Get all event type channels
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
description: Events originated at GBO
name: Travel
subname: Missing CKO
prettyName: Checkout gemist
optInRequired: true
channel:
channelId: 1
name: push
isDefault: true
isMandatory: false
- eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5
eventType:
eventTypeId: 16
eventOrigin:
eventOriginId: 1
name: GBO
description: Events originated at GBO
name: Travel
subname: Missing CKI
prettyName: Checkin gemist
optInRequired: true
channel:
channelId: 1
name: push
isDefault: true
isMandatory: false
"400":
description: Bad request
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/400Response"
"401":
description: Unauthorized
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/401Response"
"404":
description: Not found
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/404Response"
"500":
description: Internal server error
content:
application/json:
schema:
type: object
$ref: "#/components/schemas/500Response"
components:
schemas:
GetNotificationSubscriptionsResponse:
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
notifcationCategory:
$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
- notifcationCategory
- customerProfileId
PostNotificationSubscriptionRequest:
type: object
properties:
notifcationCategoryId:
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:
- notifcationCategoryId
- 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
description:
type: string
example: Events originated at GBO
required:
- eventOriginId
- name
Channel:
type: object
properties:
channelId:
type: integer
example: 1
name:
type: string
example: push
required:
- channelId
- name
NotificationCategory:
type: object
properties:
notifcationCategoryId:
type: integer
example: 1
name:
type: string
example: Mijn Reizen
eventTypes:
type: array
items:
$ref: "#/components/schemas/EventType"
required:
- notifcationCategoryId
- 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: {}