Compare commits

..

2 Commits

11 changed files with 934 additions and 2656 deletions

View File

@ -28,33 +28,10 @@ public final class Helpers {
return new JSONObject(string).get("alertId").toString();
}
public static String getTripId(String string) throws IOException {
return new JSONObject(string).get("tripId").toString();
}
public static String getXbot(String string) throws IOException {
return new JSONObject(string).get("xbot").toString();
}
public static void getTripDetails(String tripId, String xbot, String gboBearerToken) throws Exception {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, DummyX509TrustManager.getDummyArray(), new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
URL url = new URL("https://api.sbx.idbt.translink.nl/api/v3/id-media/tokens/xbot/" + xbot + "/trips/details/" + tripId);
URLConnection con = url.openConnection();
HttpURLConnection http = (HttpURLConnection)con;
http.setRequestMethod("GET");
http.setDoOutput(true);
http.setRequestProperty("Authorization", "Bearer " + gboBearerToken);
http.connect();
try(InputStream is = http.getInputStream()) {
String response = new String(is.readAllBytes(), StandardCharsets.UTF_8);
LOGGER.info("GBO API 8659 trip details response for xBOT " + xbot + " and tripId " + tripId + ": \n" + new JSONObject(response).toString(2));
}
}
public static void getAlertDetails(String alertId, String xBot, String gboBearerToken) throws Exception {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, DummyX509TrustManager.getDummyArray(), new java.security.SecureRandom());
@ -71,7 +48,7 @@ public final class Helpers {
try(InputStream is = http.getInputStream()) {
String response = new String(is.readAllBytes(), StandardCharsets.UTF_8);
LOGGER.info("GBO API 8851 alert details response for xBOT " + xBot + " and alertId " + alertId + ": \n" + new JSONObject(response).toString(2));
LOGGER.info("GBO API 8851 alert details response for xBOT " + xBot + ": \n" + new JSONObject(response).toString(2));
}
}

View File

@ -16,28 +16,14 @@ public class RabbitConnector {
private static final Logger LOGGER = LoggerFactory.getLogger(RabbitConnector.class);
// TRIPS
// SubscriptionId = 3e246de5-d3ad-468f-834b-1aaebf52244c
// Use API 9853 to manually add xBOT to queue
private static final String QUEUE_NAME = "BEID_3.TRIPS";
private static final String USER_NAME = "BEID_3_TRIPS_HlTT";
private static final String PASSWORD = "xJR4C8hIqhHQw0sn";
// ALERTS
// SubscriptionId = 17c8100b-88a2-4cef-b40d-8dca4f93d311
// Use API 9853 to manually add xBOT to queue
// private static final String QUEUE_NAME = "BEID_3.ALERTS";
// private static final String USER_NAME = "BEID_3_ALERTS_nZs3";
// private static final String PASSWORD = "VyubhPnczKgTB2zJ";
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setVirtualHost("/");
factory.setAutomaticRecoveryEnabled(true);
factory.setPort(443);
factory.setHost("not.sbx.idbt.translink.nl");
factory.setUsername(USER_NAME);
factory.setPassword(PASSWORD);
factory.setUsername("BEID_3_ALERTS_nZs3");
factory.setPassword("VyubhPnczKgTB2zJ");
factory.useSslProtocol("TLSv1.2");
factory.setExceptionHandler(new ForgivingExceptionHandler());
Map<String, Object> configs = factory.getClientProperties();
@ -47,7 +33,7 @@ public class RabbitConnector {
Channel channel = connection.createChannel();
DeliverCallback deliverCallback = initDeliverCallback(channel);
AMQP.Queue.DeclareOk queue = channel.queueDeclarePassive(QUEUE_NAME);
AMQP.Queue.DeclareOk queue = channel.queueDeclarePassive("BEID_3.ALERTS");
LOGGER.info(
"Declared queue: " + queue.getQueue() + ", consumer count: " + queue.getConsumerCount() + ", message count: " +
queue.getMessageCount());
@ -66,39 +52,17 @@ public class RabbitConnector {
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
LOGGER.info("Successfully acknowledged message with delivery tag: " + delivery.getEnvelope().getDeliveryTag());
if (QUEUE_NAME.equals("BEID_3.TRIPS")) {
getTripDetails(message);
} else if (QUEUE_NAME.equals("BEID_3.ALERTS")) {
getAlertDetails(message);
LOGGER.info("Getting alert details via GBO API 8851...");
try {
String alertId = Helpers.getAlertId(message);
String xBot = Helpers.getXbot(message);
String gboBearerToken = Helpers.getGboBearerToken();
Helpers.getAlertDetails(alertId, xBot, gboBearerToken);
} catch (Exception e) {
throw new RuntimeException(e);
}
};
}
private static void getAlertDetails(String message) {
try {
String alertId = Helpers.getAlertId(message);
String xBot = Helpers.getXbot(message);
String gboBearerToken = Helpers.getGboBearerToken();
LOGGER.info("Getting alert details for xBOT {} and alertId {} via GBO API 8851...", xBot, alertId);
Helpers.getAlertDetails(alertId, xBot, gboBearerToken);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static void getTripDetails(String message) {
try {
String tripId = Helpers.getTripId(message);
String xBot = Helpers.getXbot(message);
String gboBearerToken = Helpers.getGboBearerToken();
LOGGER.info("Getting trip details for xBOT {} and tripId {} via GBO API 8659...", xBot, tripId);
Helpers.getTripDetails(tripId, xBot, gboBearerToken);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

View File

@ -597,13 +597,9 @@ paths:
schema:
$ref: "#/components/schemas/unavailable"
examples:
Empty list:
summary: Empty list
description: List all contract payments for a debtor with no payments.
value: { "contractPayments": [] }
Successful direct debit:
summary: Successful direct debit
description: One payment for a debtor with a successful direct debit.
List all contract payments for a single debtor:
summary: List all contract payments for a single debtor
description: List all contract payments for single debtor with debtor number 'D123456'.
value:
{
"contractPayments":
@ -611,9 +607,8 @@ paths:
{
"paymentId": "151845776",
"totalAmount": "26.62",
"paymentMethod": "Automatische incasso",
"paymentMethod": "Twikey",
"paymentDate": "2024-09-12",
"iban": "NL25INGB******1337",
"invoice":
{
"invoiceId": "147722263",
@ -630,192 +625,23 @@ paths:
},
},
},
],
}
Direct debit reversal:
summary: Direct debit reversal
description: One payment for a debtor with a reversed direct debit.
value:
{
"contractPayments":
[
{
"paymentId": "151845776",
"totalAmount": "-26.62",
"paymentMethod": "Stornering",
"paymentId": "151845851",
"totalAmount": "45.21",
"paymentMethod": "Twikey",
"paymentDate": "2024-09-12",
"iban": "NL25INGB******1337",
"invoice":
{
"invoiceId": "147722263",
"invoiceNumber": "F2024-0001",
"invoiceId": "147722266",
"invoiceNumber": "F2024-0002",
"description": "HTM Maandkorting 20%",
"publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
"publicLink": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a/i/dp5h1i5cuu94nopiolkdst3u17vkmzo",
},
"_links":
{
"get_contractdetails":
{
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
"method": "GET",
},
},
},
],
}
iDEAL payment:
summary: iDEAL payment
description: One payment for a debtor with an iDEAL payment.
value:
{
"contractPayments":
[
{
"paymentId": "151845776",
"totalAmount": "26.62",
"paymentMethod": "iDEAL",
"paymentDate": "2024-09-12",
"iban": "NL25INGB******1337",
"invoice":
{
"invoiceId": "147722263",
"invoiceNumber": "F2024-0001",
"description": "HTM Maandkorting 20%",
"publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
},
"_links":
{
"get_contractdetails":
{
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
"method": "GET",
},
},
},
],
}
Bank transfer:
summary: Bank transfer
description: One payment for a debtor with a bank transfer.
value:
{
"contractPayments":
[
{
"paymentId": "151845776",
"totalAmount": "26.62",
"paymentMethod": "Overboeking",
"paymentDate": "2024-09-12",
"iban": "NL25INGB******1337",
"invoice":
{
"invoiceId": "147722263",
"invoiceNumber": "F2024-0001",
"description": "HTM Maandkorting 20%",
"publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
},
"_links":
{
"get_contractdetails":
{
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
"method": "GET",
},
},
},
],
}
List of four payments for one invoice:
summary: List of four payments for one invoice
description: Four payments for a debtor for one invoice; a direct debit, a direct debit reversal, a bank transfer and an iDEAL payment.
value:
{
"contractPayments":
[
{
"paymentId": "151845776",
"totalAmount": "26.62",
"paymentMethod": "Automatische incasso",
"paymentDate": "2024-09-12",
"iban": "NL25INGB******1337",
"invoice":
{
"invoiceId": "147722263",
"invoiceNumber": "F2024-0001",
"description": "HTM Maandkorting 20%",
"publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
},
"_links":
{
"get_contractdetails":
{
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
"method": "GET",
},
},
},
{
"paymentId": "151845776",
"totalAmount": "-26.62",
"paymentMethod": "Stornering",
"paymentDate": "2024-09-12",
"iban": "NL25INGB******1337",
"invoice":
{
"invoiceId": "147722263",
"invoiceNumber": "F2024-0001",
"description": "HTM Maandkorting 20%",
"publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
},
"_links":
{
"get_contractdetails":
{
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
"method": "GET",
},
},
},
{
"paymentId": "151845777",
"totalAmount": "10.00",
"paymentMethod": "Overboeking",
"paymentDate": "2024-09-13",
"iban": "NL25INGB******1337",
"invoice":
{
"invoiceId": "147722263",
"invoiceNumber": "F2024-0001",
"description": "HTM Maandkorting 20%",
"publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
},
"_links":
{
"get_contractdetails":
{
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
"method": "GET",
},
},
},
{
"paymentId": "151845778",
"totalAmount": "16.62",
"paymentMethod": "iDEAL",
"paymentDate": "2024-09-14",
"iban": "NL25INGB******1337",
"invoice":
{
"invoiceId": "147722263",
"invoiceNumber": "F2024-0001",
"description": "HTM Maandkorting 20%",
"publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
},
"_links":
{
"get_contractdetails":
{
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/7b2f8c1a-3d9d-4c2d-960e-4471e8e28b6a",
"method": "GET",
},
},

File diff suppressed because it is too large Load Diff

View File

@ -264,8 +264,7 @@ paths:
- name: emailAddress
in: query
schema:
type: string
format: email
type: integer
example: john.doe@mymailprovider.com
required: false
description: The emailadress of the customer in the case of anonymous opt-ins
@ -410,25 +409,47 @@ paths:
schema:
$ref: "#/components/schemas/unavailable"
examples:
Create notificationSubscription anonymous:
Create notificationSubscription anonymous active:
value:
{
"emailAddress": "anonymous@mymailprovider.com",
"notificationCategoryId": 1
"notificationCategoryId": 1,
"isActive": True,
}
Create notificationSubscription anonymous inactive:
value:
{
"emailAddress": "anonymous@mymailprovider.com",
"notificationCategoryId": 1,
"isActive": False,
}
Create notificationSubscription account active:
value: { "notificationCategoryId": 2 }
value: { "notificationCategoryId": 2, "isActive": True }
Create notificationSubscription account inactive:
value: { "notificationCategoryId": 2, "isActive": False }
responses:
"201":
description: Created
content:
application/json:
examples:
Create notificationSubscription anonymous:
summary: Return the created notification for an anonymous user inactive by default.
Create notificationSubscription anonymous active:
summary: Return the created notification for an anonymous user active
value:
{
"notificationSubscriptionId": "e112f26e-37fa-4bde-8def-9977cd1d50ae",
"notificationCategory":
{
"notificationCategoryId": 2,
"name": "Nieuwsbrief aanmelding",
},
"isActive": True,
}
Create notificationSubscription anonymous inactive:
summary: Return the created notification for an anonymous user inactive
value:
{
"notificationSubscriptionId": "d51081fd-c48d-4111-8de4-ac5db7d47ecb",
"notificationCategory":
{
"notificationCategoryId": 2,
@ -445,6 +466,15 @@ paths:
{ "notificationCategoryId": 2, "name": "Nieuwsbrief aanmelding" },
"isActive": True,
}
Create notificationSubscription account inactive:
summary: Return the created notification for an anonymous user inactive
value:
{
"notificationSubscriptionId": "0dfc0ac9-c221-4493-8828-9dfa79ad9061",
"notificationCategory":
{ "notificationCategoryId": 2, "name": "Nieuwsbrief aanmelding" },
"isActive": False,
}
"405":
description: Method not allowed, ook als een notificatie aangemaakt wordt voor een account maar op een anonieme manier benadert wordt.
content:
@ -469,9 +499,9 @@ paths:
patch:
tags:
- Notification subscriptions
summary: Update a notificationSubscription for a customer.
summary: Update a notificationSubscription for a customer (account or private).
description: |
Update a notificationSubscription for a customer.
Update a notificationSubscription for a customer (account or private).
parameters:
- name: X-HTM-JWT-AUTH-HEADER
in: header
@ -502,6 +532,14 @@ paths:
example: e112f26e-37fa-4bde-8def-9977cd1d50ae
required: true
description: The id of the notificationSubscription you want to update
- name: emailAddress
in: query
schema:
type: string
format: email
example: john.doe@mymailprovider.com
required: false
description: The emailadress of the customer in the case of anonymous opt-ins
requestBody:
content:
application/json:
@ -542,26 +580,6 @@ paths:
},
"isActive": True,
}
"405":
description: Method not allowed,wanneer het account emailadres niet geverifieerd is.
content:
application/json:
example:
{
"type": "https://api.integratielaag.nl/abt/touchpoint/2.0/notifications",
"title": "Methode niet toegestaan",
"detail": "",
"instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
"errors":
[
{
"code": "405",
"detail": null,
"path": null,
"parameter": null,
},
],
}
components:
schemas:
unavailable:

View File

@ -31,12 +31,6 @@ paths:
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
@ -50,13 +44,6 @@ paths:
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
@ -66,21 +53,17 @@ paths:
$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)
fullNotificationSubscriptionResponse:
value:
notificationSubscriptions:
- notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
notificationCategory:
notificationCategoryId: 1
name: Mijn Reizen
groupName: Mijn Passen
customerProfileId: 1337
ovPayTokenId: 42
subscriptionActivities:
- subscriptionActivityId: 30b32657-1ba1-44e0-8868-4db807695387
user: "1001337"
@ -94,9 +77,7 @@ paths:
notificationCategory:
notificationCategoryId: 2
name: Nieuwsbrief aanmelding
groupName: Marketing
customerProfileId: 1338
ovPayTokenId: null
subscriptionActivities:
- subscriptionActivityId: 7fae0d2c-1e20-4f3e-b25d-fd8505a381c4
user: "1001338"
@ -107,113 +88,6 @@ paths:
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: Mijn Passen
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: Mijn Passen
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:
@ -301,71 +175,18 @@ paths:
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
parameters:
- name: notificationSubscriptionId
in: path
required: true
schema:
type: string
format: uuid
example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
responses:
"204":
description: No content
@ -461,196 +282,12 @@ paths:
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:
@ -672,48 +309,35 @@ paths:
notificationCategories:
- notificationCategoryId: 1
name: Mijn Reizen
groupName: Mijn Passen
- notificationCategoryId: 2
name: Nieuwsbrief aanmelding
groupName: Marketing
- notificationCategoryId: 3
name: Serviceberichten
groupName: Mijn Passen
name: Mijn Passen
getNotifactionCategories?expand=eventType:
summary: Return all the notification categories with nested event types (expand=eventType)
value:
notificationCategories:
- notificationCategoryId: 1
name: Mijn Reizen
groupName: Mijn Passen
eventTypes:
- eventTypeId: 2
eventOrigin:
eventOriginId: 1
name: GBO
name: TRIPS
subName: CKI
prettyName: Normal Check-in
name: ALERTS, TRAVEL_SCHEME
subName: CI
prettyName: Check In
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: PAD
subName: AMEND
prettyName: PAD Wijzigen/Aanvullen
name: ALERTS, PAD
subName: null
prettyName: Profielgegevens op de pas
optinRequired: false
originSubscription:
originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc
name: GBO_PAD
externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f
- notificationCategoryId: 2
name: Nieuwsbrief aanmelding
groupName: Marketing
eventTypes:
- eventTypeId: 1
eventOrigin:
@ -723,108 +347,76 @@ paths:
subName: null
prettyName: HTM nieuwsbrief
optinRequired: false
originSubscription: null
- notificationCategoryId: 3
name: Serviceberichten
groupName: Mijn Passen
name: Mijn Passen
eventTypes:
- eventTypeId: 4
eventOrigin:
eventOriginId: 1
name: GBO
name: PRODUCT
subName: ACTIVATE
prettyName: Product Geactiveerd
name: ALERTS, CARD
subName: null
prettyName: Mijn passen
optinRequired: false
originSubscription:
originSubscriptionId: f1a2b3c4-d5e6-4789-abcd-3456789012de
name: GBO_PRODUCT
externalSubscriptionId: 12345678-90ab-cdef-1234-567890abcdef
- eventTypeId: 5
eventOrigin:
eventOriginId: 1
name: GBO
name: PAD
subName: MARK
prettyName: PAD Markering
name: ALERTS, PAD
subName: null
prettyName: Profielgegevens op de pas
optinRequired: false
originSubscription:
originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc
name: GBO_PAD
externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f
getNotifactionCategories?expand=eventTypeChannel:
summary: Return all the notification categories with all nested attributes (expand=eventTypeChannel)
value:
notificationCategories:
- notificationCategoryId: 1
name: Mijn Reizen
groupName: Mijn Passen
eventTypes:
- eventTypeId: 2
eventOrigin:
eventOriginId: 1
name: GBO
name: TRIPS
subName: CKI
prettyName: Normal Check-in
name: ALERTS, TRAVEL_SCHEME
subName: CI
prettyName: 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: 3
eventOrigin:
eventOriginId: 1
name: GBO
name: PAD
subName: AMEND
prettyName: PAD Wijzigen/Aanvullen
name: ALERTS, PAD
subName: null
prettyName: Profielgegevens op de pas
optinRequired: false
originSubscription:
originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc
name: GBO_PAD
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: 2
name: Nieuwsbrief aanmelding
groupName: Marketing
eventTypes:
- eventTypeId: 1
eventOrigin:
@ -834,81 +426,56 @@ paths:
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: Mijn Passen
name: Mijn Passen
eventTypes:
- eventTypeId: 4
eventOrigin:
eventOriginId: 1
name: GBO
name: PRODUCT
subName: ACTIVATE
prettyName: Product Geactiveerd
name: ALERTS, CARD
subName: null
prettyName: Mijn passen
optinRequired: false
originSubscription:
originSubscriptionId: f1a2b3c4-d5e6-4789-abcd-3456789012de
name: GBO_PRODUCT
externalSubscriptionId: 12345678-90ab-cdef-1234-567890abcdef
eventTypeChannels:
- eventTypeChannelId: be07c7bb-714b-4637-acf5-a67025ad8e60
channel:
channelId: 1
name: push
resourceName:
resourceNameId: 8
name: devices
isDefault: true
isMandatory: false
- eventTypeChannelId: 0c797b5a-ed34-494b-8c64-0a832830d392
channel:
channelId: 2
name: email
resourceName:
resourceNameId: 4
name: customers
isDefault: false
isMandatory: false
- eventTypeId: 5
eventOrigin:
eventOriginId: 1
name: GBO
name: PAD
subName: MARK
prettyName: PAD Markering
name: ALERTS, PAD
subName: null
prettyName: Profielgegevens op de pas
optinRequired: false
originSubscription:
originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc
name: GBO_PAD
externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f
eventTypeChannels:
- eventTypeChannelId: b910368f-c045-4e8e-b01d-bcbc78708bac
channel:
channelId: 1
name: push
resourceName:
resourceNameId: 8
name: devices
isDefault: true
isMandatory: false
- eventTypeChannelId: 93e773da-ba3b-48da-9a0e-ee478eaa752f
channel:
channelId: 2
name: email
resourceName:
resourceNameId: 4
name: customers
isDefault: false
isMandatory: false
"400":
@ -1029,24 +596,12 @@ paths:
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:
@ -1195,7 +750,6 @@ paths:
notificationCategory:
notificationCategoryId: 1
name: Mijn Reizen
groupName: Mijn Passen
- eventType:
eventTypeId: 16
eventOrigin:
@ -1208,7 +762,6 @@ paths:
notificationCategory:
notificationCategoryId: 1
name: Mijn Reizen
groupName: Mijn Passen
"400":
description: Bad request
content:
@ -1274,9 +827,6 @@ paths:
channel:
channelId: 1
name: push
resourceName:
resourceNameId: 8
name: devices
isDefault: true
isMandatory: false
- eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5
@ -1292,9 +842,6 @@ paths:
channel:
channelId: 1
name: push
resourceName:
resourceNameId: 8
name: devices
isDefault: true
isMandatory: false
"400":
@ -1415,24 +962,6 @@ components:
type: string
format: uuid
example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
PatchNotificationSubscriptionRequest:
type: object
properties:
notificationCategoryId:
type: integer
example: 1
customerProfileId:
type: integer
example: 1337
required:
- notificationCategoryId
PatchNotificationSubscriptionResponse:
type: object
properties:
notificationSubscriptionId:
type: string
format: uuid
example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
PostSubscriptionActivityRequest:
type: object
properties:
@ -1457,40 +986,6 @@ components:
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:
@ -1581,24 +1076,6 @@ components:
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:
@ -1630,22 +1107,9 @@ components:
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:
@ -1655,9 +1119,6 @@ components:
name:
type: string
example: Mijn Reizen
groupName:
type: string
example: Mijn Passen
eventTypes:
type: array
items:

View File

@ -2999,12 +2999,8 @@ paths:
transactionItems:
- transactionItemId: d8ee7035-fa3d-400e-9ad5-4fe8c4c73eb7
status: returned to src
aggregationReference: null
accountingSystemReference: null
- transactionItemId: 88910e83-4b1e-4fde-ab13-bd8bb60cbcd3
status: returned to src
aggregationReference: null
accountingSystemReference: null
List of transactions items to return:
summary: List of transaction items to return to transaction database
description: List of transaction items to return to transaction database in bulk.
@ -3012,12 +3008,8 @@ paths:
transactionItems:
- transactionItemId: eacb9bdc-c6b5-4277-942b-cebb102944f5
status: returned to trx-db
aggregationReference: null
accountingSystemReference: null
- transactionItemId: 2f361bfb-9df0-4e0f-af7c-7b9be3e7bc61
status: returned to trx-db
aggregationReference: null
accountingSystemReference: null
responses:
"202":
description: Accepted
@ -3069,32 +3061,10 @@ paths:
Body of a batch of transaction items that was successfully patched.
A number of transaction items were patched.
value:
startTime: 2025-02-14T05:32:47.067Z
status: Finished
clientTrackingId: 08584620957189579629541919368CU00
summary:
created: 0
updated: 15
total: 15
"202":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/GetResponseStatus"
examples:
Batch is still being processed:
summary: Batch is still being processed
description: |
Batch is still being processed
value:
startTime: 2025-02-14T05:32:47.067Z
status: Running
clientTrackingId: 08584620957189579629541919368CU00
summary:
created: 0
updated: 0
total: 0
security:
- default: []
x-auth-type: Application & Application User
@ -3119,10 +3089,8 @@ paths:
processingFailures:
- processingFailureId: d8ee7035-fa3d-400e-9ad5-4fe8c4c73eb7
resolved: true
change: Configuratie aangepast voor artikelnummer 1337.
- processingFailureId: 88910e83-4b1e-4fde-ab13-bd8bb60cbcd3
resolved: true
change: Configuratie aangepast voor artikelnummer 1337.
responses:
"202":
description: Accepted
@ -3174,32 +3142,10 @@ paths:
Body of a batch of processing failures that was successfully patched.
A number of processing failures were patched.
value:
startTime: 2025-02-14T05:32:47.067Z
status: Finished
clientTrackingId: 08584620957189579629541919368CU00
summary:
created: 0
updated: 15
total: 15
"202":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/GetResponseStatus"
examples:
Batch is still being processed:
summary: Batch is still being processed
description: |
Batch is still being processed
value:
startTime: 2025-02-14T05:32:47.067Z
status: Running
clientTrackingId: 08584620957189579629541919368CU00
summary:
created: 0
updated: 0
total: 0
security:
- default: []
x-auth-type: Application & Application User

View File

@ -5,12 +5,6 @@ info:
description: CRUD APIs for ABT Orders database. These are NOT the functional APIs from Service Engine.
servers:
- url: https://services.acc.api.htm.nl/abt/abtorder/1.0
tags:
- name: Order
- name: Order Line
- name: Payment
- name: Customer
- name: Order Voucher
paths:
/orders:
get:
@ -56,14 +50,6 @@ paths:
example: 1
required: false
description: The id of the touch point where the order was initiated.
- in: query
name: deviceId
schema:
type: string
format: uuid
example: "7a28bd54-7ca9-499a-a722-d15ab858ab99"
required: false
description: The id of the device used to place the order.
- in: query
name: languageId
schema:
@ -112,14 +98,6 @@ paths:
explode: false
required: false
description: Filter on most recent order status. 1 = concept, 2 = awaitingPayment, 3 = pendingPayment, 4 = paid, 5 = delivered, 6 = cancelled.
- in: query
name: issuedVoucherId
schema:
type: string
format: uuid
example: "b0a9f3c9-9b92-4f8c-b78d-6129be7218a6"
required: false
description: Filter on applied issuedVoucherId for the order.
responses:
"200":
description: OK
@ -141,7 +119,6 @@ paths:
"touchPointId": 1,
"name": "Perplex"
},
"deviceId": "42e77532-d831-41da-b07a-7edb9bb7f004",
"language":
{
"languageId": 1,
@ -171,30 +148,6 @@ paths:
"description": "Betaling in behandeling",
},
],
"orderVouchers": [
{
"orderVoucherId": "399bd3b3-9721-4f09-a936-d64637de1621",
"issuedVoucher":{
"issuedVoucherId": "a0996218-bc5e-4826-9020-cda98a32838d",
"voucherCode": "Voucher1234",
"purchasedProductId": 31,
"fromInclusive": "2025-03-22T08:55:00",
"untillInclusive": "2026-03-22T08:55:00"
},
"orderLineId": null
},
{
"orderVoucherId": "f6c7ac42-1811-4e4d-82af-53e18fe16110",
"issuedVoucher":{
"issuedVoucherId": "54668baf-4905-4e9a-af02-09c170f295ed",
"voucherCode": "Voucher124",
"purchasedProductId": 35,
"fromInclusive": "2025-03-22T08:55:00",
"untillInclusive": "2026-03-22T08:55:00"
},
"orderLineId": "7a7a9d1a-3fc8-4058-a28b-082860aaa311"
}
],
"orderLines":
[
{
@ -374,22 +327,19 @@ paths:
"customerProfileId": 1337,
"totalAmount": 121,
"touchPointId": 1,
"deviceId": "b8ca9fdf-0bb9-4e49-b48d-41e395563377",
"languageId": 1,
"createdOn": "2024-03-22T09:00:00",
"order_OrderStatus":
[
{
"orderStatusId": 1,
"createdOn": "2024-03-22T08:55:00",
"description": "Concept order",
"orderStatusId": 4,
"createdOn": "2024-03-22T09:00:00",
"description": "Order succesvol betaald",
},
],
"orderVouchers":
[
{
"issuedVoucherId": "e81b2197-a6c2-45b6-9560-8ce8442e8604",
"orderLineId": "97824d2e-5189-456d-b6da-4cca511a7685"
"orderStatusId": 3,
"createdOn": "2024-03-22T08:55:00",
"description": "Betaling in behandeling",
},
],
"orderLines":
@ -440,6 +390,57 @@ paths:
],
},
],
"payments":
[
{
"createdOn": "2024-03-22T09:00:00",
"amountDebit": 121,
"paymentMethodId": 1,
"touchPointId": 1,
"isRefund": false,
"htmPaymentReference": "HTM-1234",
"pspPaymentReference": "Buckaroo-1234",
"paymentStatuses":
[
{
"createdOn": "2024-03-22T09:00:00",
"statusCode": "190",
"statusDescription": "Success",
"statusSubCode": "S001",
"statusSubDescription": "PaymentSuccessFul",
},
],
"mandateInput":
{
"directDebitMandateTypeId": 1,
"createdOn": "2024-03-22T09:00:00",
"bic": "RABONL2U",
"iban": "NL44RABO0123456789",
"ascription": "J. de Vries",
"place": "Den Haag",
},
},
],
"orderCustomer":
{
"birthname": "Jan",
"surname": "Vries",
"prefix": "de",
"emailAddress": "jandevries@outlook.com",
"dateOfBirth": "1970-01-01",
"orderCustomerAddresses":
[
{
"addressTypeId": 1,
"street": "Kon. Julianaplein",
"houseNumber": 10,
"houseNumberSuffix": "a",
"postalCode": "2595 AA",
"city": "Den Haag",
"country": "NL",
},
],
},
}
responses:
"201":
@ -486,7 +487,6 @@ paths:
"touchPointId": 1,
"name": "Perplex"
},
"deviceId": null,
"language":
{
"languageId": 1,
@ -512,7 +512,6 @@ paths:
"description": "Betaling in behandeling",
},
],
"orderVouchers": null,
"orderLines":
[
{
@ -659,7 +658,6 @@ paths:
example:
{
"customerProfileId": 1337,
"deviceId": "fe68e624-b75f-48ca-a179-d5f86a8ab7d5",
"totalAmount": 121,
"languageId": 1,
"lastUpdatedOn": "2024-03-22T09:00:00",
@ -680,7 +678,6 @@ paths:
responses:
"200":
description: OK
/orders/{orderId}/statuses:
parameters:
- in: path
@ -718,143 +715,6 @@ paths:
{
"order_orderStatusId": "b9cf0096-4211-4be6-ac21-7bc34bc8e066",
}
/orders/{orderId}/ordervouchers:
parameters:
- in: path
name: orderId
schema:
type: string
format: uuid
example: d1dd439b-6072-4b97-89c9-724268865b93
required: true
description: The id of the order to process.
post:
summary: Add an order voucher.
description: Add an order voucher.
tags:
- Order Voucher
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
{
"issuedVoucherId": "eec6af41-1a60-49f6-a92e-440054a92f13",
"orderLineId": "7a9d6e15-7c5c-421d-9ea9-00b9bb6dbe67"
}
responses:
"201":
description: Created
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
{
"orderVoucherId": "b9cf0096-4211-4be6-ac21-7bc34bc8e066",
}
/ordervouchers:
parameters:
- in: query
name: orderVoucherId
schema:
type: string
format: uuid
example: d1dd439b-6072-4b97-89c9-724268865b93
required: false
description: The id of the orderVoucher you are looking for.
- in: query
name: orderId
schema:
type: string
example: 90c926b9-3178-4757-acca-34cff66b980c
required: false
description: The id of the order
- in: query
name: orderLineId
schema:
type: string
example: 9e3363c8-e776-4675-b108-99b8c2e38eb6
required: false
description: The id of the orderLine
get:
summary: Find vouchers on the order
description: Find vouchers on the order
tags:
- Order Voucher
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
[
{
"orderVoucherId": "19ef6882-8eda-43bf-b48e-9b4ff8745a50",
"issuedVoucher":{
"issuedVoucherId": "54668baf-4905-4e9a-af02-09c170f295ed",
"voucherCode": "Voucher124",
"purchasedProductId": 35,
"fromInclusive": "2025-03-22T08:55:00",
"untillInclusive": "2026-03-22T08:55:00"
},
"orderId": "f59e4769-53a0-4156-8991-6f9119ba629f",
"orderLineId": "eeb86071-4f59-405d-b2be-7d7a77044bfa"
}
]
/ordervouchers/{ordervoucherId}:
parameters:
- in: path
name: ordervoucherId
schema:
type: string
format: uuid
example: d1dd439b-6072-4b97-89c9-724268865b93
required: true
description: The id of the order to process.
patch:
summary: Update an order voucher.
description: Update an order voucher.
tags:
- Order Voucher
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
{
"issuedVoucherId": "eec6af41-1a60-49f6-a92e-440054a92f13",
"orderLineId": "7a9d6e15-7c5c-421d-9ea9-00b9bb6dbe67"
}
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
{
"orderVoucherId": "b9cf0096-4211-4be6-ac21-7bc34bc8e066",
}
delete:
summary: Delete an order voucher.
description: Delete an order voucher.
tags:
- Order Voucher
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
{}
/orders/{orderId}/orderlines:
parameters:
- in: path
@ -1984,7 +1844,6 @@ paths:
"touchPointId": 1,
"name": "Perplex"
},
"deviceId": null,
"isRefund": false,
"htmPaymentReference": "HTM-1234",
"pspPaymentReference": "Buckaroo-1234",

View File

@ -426,18 +426,21 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "invalid",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "A valid mandate is required before purchasing this product.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
],
"validationErrors":
[
{
"code": "STARTDATE_TOO_FAR_IN_FUTURE",
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].validFrom",
"parameter": null,
"type": "ERROR",
},
],
},
@ -688,18 +691,21 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "invalid",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "A valid mandate is required before purchasing this product.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
],
"validationErrors":
[
{
"code": "STARTDATE_TOO_FAR_IN_FUTURE",
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].validFrom",
"parameter": null,
"type": "ERROR",
},
],
},
@ -715,23 +721,17 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
"type": "https://htm.nl/api/v1/probs/validationerror",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
"detail": "One or more required attributes are missing or invalid.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"ovPayTokenId": 123,
"productId": 2,
},
{
"detail": "Combination of product and token type is not valid.",
"pointer": "#/1/ovPayTokenId",
"ovPayTokenId": 123,
"productId": 3,
"code": "REQUIRED_ATTRIBUTE_MISSING",
"detail": "One ore more required attributes are missing.",
"pointer": "$.orderLines[0].productId",
"parameter": null,
},
],
}
@ -926,18 +926,21 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "invalid",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "A valid mandate is required before purchasing this product.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
],
"validationErrors":
[
{
"code": "STARTDATE_TOO_FAR_IN_FUTURE",
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].validFrom",
"parameter": null,
"type": "ERROR",
},
],
},
@ -1118,18 +1121,21 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "invalid",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "A valid mandate is required before purchasing this product.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
],
"validationErrors":
[
{
"code": "STARTDATE_TOO_FAR_IN_FUTURE",
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].validFrom",
"parameter": null,
"type": "ERROR",
},
],
},
@ -1248,8 +1254,7 @@ paths:
},
],
"validationResult": null,
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
],
"payments":
@ -1528,18 +1533,21 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "invalid",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "A valid mandate is required before purchasing this product.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
],
"validationErrors":
[
{
"code": "STARTDATE_TOO_FAR_IN_FUTURE",
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].validFrom",
"parameter": null,
"type": "ERROR",
},
],
},
@ -1555,23 +1563,17 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
"type": "https://htm.nl/api/v1/probs/validationerror",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
"detail": "One or more required attributes are missing or invalid.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"ovPayTokenId": 123,
"productId": 2,
},
{
"detail": "Combination of product and token type is not valid.",
"pointer": "#/1/ovPayTokenId",
"ovPayTokenId": 123,
"productId": 3,
"code": "REQUIRED_ATTRIBUTE_MISSING",
"detail": "One ore more required attributes are missing.",
"pointer": "$.orderLines[0].productId",
"parameter": null,
},
],
}
@ -1591,7 +1593,7 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
"type": "https://htm.nl/api/v1/probs/validationerror",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "The order can not be deleted.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
@ -1834,14 +1836,16 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "preliminary",
"additionalRemarks":
"validations":
[
{
"code": "PRODUCT_CHOICE_REQUIRED",
"parameter": "orderline.productId",
"detail": "The chosen product is not a leaf node product. Please choose one of its child products.",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].productId",
"parameter": null,
"type": "REMARK",
},
],
"validationErrors": [],
},
],
"payments": [],
@ -2008,22 +2012,30 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "preliminary",
"additionalRemarks":
"validations":
[
{
"code": "PERSONALACCOUNTDATA_BIRTHDATE_REQUIRED",
"parameter": "personalaccountdata.birthdate",
"detail": "Personal account data birthdate is required for this product.",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].customerTokens[0].personalAccountData.birthdate",
"parameter": null,
"type": "REMARK",
},
{
"code": "TOKEN_REQUIRED",
"detail": "A valid customer token is required before purchasing this product.",
"path": null,
"parameter": "customerToken",
"type": "REMARK",
},
{
"code": "VALIDFROM_REQUIRED",
"parameter": "orderline.validFrom",
"detail": "A valid 'valid from' date is required for this product.",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].validFrom",
"parameter": null,
"type": "REMARK",
},
],
"validationErrors": [],
},
],
"payments": [],
@ -2037,23 +2049,17 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
"type": "https://htm.nl/api/v1/probs/validationerror",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
"detail": "One or more required attributes are missing or invalid.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"ovPayTokenId": 123,
"productId": 2,
},
{
"detail": "Combination of product and token type is not valid.",
"pointer": "#/1/ovPayTokenId",
"ovPayTokenId": 123,
"productId": 3,
"code": "REQUIRED_ATTRIBUTE_MISSING",
"detail": "One ore more required attributes are missing.",
"pointer": "$.orderLines[0].productId",
"parameter": null,
},
],
}
@ -2176,18 +2182,23 @@ paths:
"customerTokens": [],
"orderAccountingStatuses": [],
"validationResult": "preliminary",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "A valid mandate is required before purchasing this product.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
{
"code": "CUSTOMERTOKEN_REQUIRED",
"detail": "A valid customer token is required before purchasing this product.",
"path": null,
"parameter": "customerTokenId",
"type": "REMARK",
},
],
"validationErrors": [],
},
],
"payments": [],
@ -2201,17 +2212,17 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
"type": "https://htm.nl/api/v1/probs/validationerror",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "The start date of the product is not allowed. See errors for more details.",
"detail": "One or more required attributes are missing or invalid.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"ovPayTokenId": 123,
"productId": 2,
"code": "REQUIRED_ATTRIBUTE_MISSING",
"detail": "One ore more required attributes are missing.",
"pointer": "$.orderLines[0].productId",
"parameter": null,
},
],
}
@ -2275,17 +2286,17 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
"type": "https://htm.nl/api/v1/probs/validationerror",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
"detail": "One or more required attributes are missing or invalid.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"detail": "Product requires product with productId=2",
"pointer": "#/1/orderLine",
"orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d",
"productId": 3,
"code": "REQUIRED_ATTRIBUTE_MISSING",
"detail": "One ore more required attributes are missing.",
"pointer": "$.orderLines[0].productId",
"parameter": null,
},
],
}
@ -2506,14 +2517,16 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "preliminary",
"additionalRemarks":
"validations":
[
{
"code": "PERSONALACCOUNTDATA_BIRTHDATE_REQUIRED",
"parameter": "personalaccountdata.birthdate",
"detail": "Personal account data birthdate is required for this product.",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].customerTokens[0].personalAccountData.birthdate",
"parameter": null,
"type": "REMARK",
},
],
"validationErrors": [],
},
],
"payments": [],
@ -2721,8 +2734,7 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "valid",
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
],
"payments": [],
@ -2810,14 +2822,16 @@ paths:
"customerTokens": [],
"orderAccountingStatuses": [],
"validationResult": "preliminary",
"additionalRemarks":
"validations":
[
{
"code": "CUSTOMERTOKEN_REQUIRED",
"detail": "A valid customer token is required before purchasing this product.",
"path": null,
"parameter": "customerTokenId",
"type": "REMARK",
},
],
"validationErrors": [],
},
],
"payments": [],
@ -3037,8 +3051,7 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "valid",
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
],
"payments": [],
@ -3251,12 +3264,14 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "invalid",
"additionalRemarks": [],
"validationErrors":
"validations":
[
{
"code": "PERSONAL_ACCOUNT_DATA_AGE_PROFILE_MISMATCH",
"detail": "Product is for gboAgeProfile 19-65, given gboAgeProfile is 12-19",
"pointer": "#/customerTokens/878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e/personalAccountData/birthdate",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].customerTokens[?(@.customerTokenId=='878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e')].ovPayToken.personalAccountData.birthdate",
"parameter": null,
"type": "ERROR",
},
],
},
@ -3436,8 +3451,7 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "valid",
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
],
"payments": [],
@ -3596,8 +3610,7 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "valid",
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
{
"orderLineId": "2cb04b38-e9a8-465a-a273-261c55a21b71",
@ -3645,8 +3658,7 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "valid",
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
],
"payments":
@ -3883,8 +3895,7 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "valid",
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
],
"payments":
@ -4080,18 +4091,21 @@ paths:
},
],
"validationResult": "invalid",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "A valid mandate is required before purchasing this product.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
],
"validationErrors":
[
{
"code": "STARTDATE_TOO_FAR_IN_FUTURE",
"detail": "Startdate of this product should be at most 60 days in the future.",
"pointer": "#/0/startDate",
"path": "$.orders[?(@.orderId=='1e441d7d-50d6-4006-aca7-5e87e2f218df')].orderLines[?(@.orderLineId=='cccada2c-d5ea-48ab-b4be-f590e16b5468')].validFrom",
"parameter": null,
"type": "ERROR",
},
],
},
@ -4415,8 +4429,7 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "valid",
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
],
"payments": [],
@ -4662,8 +4675,7 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "valid",
"additionalRemarks": [],
"validationErrors": [],
"validations": [],
},
],
"payments": [],
@ -4911,14 +4923,16 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "preliminary",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "Direct debit mandate is required for this order.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
],
"validationErrors": [],
},
],
"payments": [],
@ -5166,14 +5180,16 @@ paths:
],
"orderAccountingStatuses": [],
"validationResult": "preliminary",
"additionalRemarks":
"validations":
[
{
"code": "MANDATE_REQUIRED",
"detail": "A valid mandate is required before purchasing this product.",
"path": null,
"parameter": "directDebitMandateId",
"type": "REMARK",
},
],
"validationErrors": [],
},
],
"payments": [],
@ -5286,17 +5302,17 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
"type": "https://htm.nl/api/v1/probs/validationerror",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
"detail": "One or more required attributes are missing or invalid.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"detail": "Product requires product with productId=2",
"pointer": "#/1/orderLine",
"orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d",
"productId": 3,
"code": "REQUIRED_ATTRIBUTE_MISSING",
"detail": "One ore more required attributes are missing.",
"pointer": "$.orderLines[0].productId",
"parameter": null,
},
],
}
@ -5410,21 +5426,37 @@ paths:
summary: Missing parameter(s)
value:
{
"type": "https://www.htm.nl/api/v1/400Error",
"title": "Missing parameter(s)",
"detail": "At least one of the following parameters must be present: birthDate, ovPayTokenId, customerTokenId, (serviceReferenceId and amount), (ovpasNumber and verificationCode)",
"instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
"apiErrorCode": "htm.api.err.400.2",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "One or more required parameters are missing or invalid.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"code": "REQUIRED_PARAMETER_MISSING",
"detail": "One ore more required parameters are missing.",
"pointer": null,
"parameter": "birthdate, ovPayTokenId, customerTokenId",
},
],
}
Invalid date format:
summary: Invalid date format
value:
{
"type": "https://www.htm.nl/api/v1/400Error",
"title": "Invalid input",
"detail": "The given birthDate is not a valid Date format",
"instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
"apiErrorCode": "htm.api.err.400.3",
"type": "https://htm.nl/api/v1/probs/400/badrequest",
"title": "Your request is not valid.",
"detail": "One or more parameters have an invalid format.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"code": "INVALID_PARAMETER_FORMAT",
"detail": "The given birthdate is not a valid Date format.",
"pointer": null,
"parameter": "birthdate",
},
],
}
"404":
description: Not found
@ -5437,11 +5469,19 @@ paths:
summary: No birthdate present in PAD of OVpay token
value:
{
"type": "https://www.htm.nl/api/v1/404Error",
"title": "Missing birthdate in PAD",
"detail": "There is no birthdate present in the PAD of the OVpay token, or there is no PAD present at all",
"instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
"apiErrorCode": "htm.api.err.404.1",
"type": "https://htm.nl/api/v1/probs/404/notfound",
"title": "Missing birthdate in PAD.",
"detail": "There is no birthdate present in the PAD of the OVpay token, or there is no PAD present at all.",
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
"errors":
[
{
"code": "MISSING_BIRTHDATE_IN_PAD",
"detail": "Missing birthdate in PAD.",
"pointer": null,
"parameter": "birthdate",
},
],
}
components:
securitySchemes:

View File

@ -243,6 +243,143 @@ paths:
],
"href": null,
}
post:
tags:
- Purchased Product
summary: Create a new purchased product.
description: Create a new purchased product.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
examples:
Create Purchased GBO Product:
value:
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "408eefa9-b393-4bb3-8439-b2e51833abc7",
},
{
"resourceNameId": 2,
"resourceIdentifier": "f809a6e1-1c8d-4f8e-8a6e-0d0b1e1e1e1e",
},
],
"purchasedGboProducts":
[
{
"salesTimestamp": "2024-10-04T12:34:56.000",
"refundTimestamp": "2024-10-04T12:34:56.000",
"fromInclusive": "2024-10-04T12:34:56.000",
"untilInclusive": "2024-10-04T12:34:56.000",
"packageTemplateId": "30003",
"xBot": "f15efe6f-7353-4968-b134-60ba6fc2da8b",
"xTat": "42efebf7-132e-4ee0-9cbb-4037a9a54ad8",
"xSpit": "d67b2f72-918a-4e6c-957d-a39ed9c9e16b",
"customerTokenId": "b6492322-c458-4857-9ac3-a109c1887b9f",
"ovPayTokenId": 13,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"createdBy": "someuser",
"lastUpdatedBy": null,
},
],
"purchasedTapconnectTickets": [],
"issuedVouchers": [],
}
Create Purchased TapConnet Ticket:
value:
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "408eefa9-b393-4bb3-8439-b2e51833abc7",
},
{
"resourceNameId": 2,
"resourceIdentifier": "f809a6e1-1c8d-4f8e-8a6e-0d0b1e1e1e1e",
},
],
"purchasedGboProducts": [],
"purchasedTapconnectTickets":
[
{
"issuedAt": "2024-10-04T12:34:56.000",
"activatedAt": "2024-10-04T12:34:56.000",
"cancelledAt": null,
"ticketReference": "KJj43nejhbTxhr897287",
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"createdBy": "user",
"lastUpdatedBy": "user",
},
],
"issuedVouchers": [],
}
Create Issued Voucher:
value:
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "408eefa9-b393-4bb3-8439-b2e51833abc7",
},
{
"resourceNameId": 2,
"resourceIdentifier": "f809a6e1-1c8d-4f8e-8a6e-0d0b1e1e1e1e",
},
],
"purchasedGboProducts": [],
"purchasedTapconnectTickets": [],
"issuedVouchers":
[
{
"voucherCode": "VOUCHER123",
"voucherStatusInstances":
[
{
"voucherStatusId": 1,
"createdOn": "2024-10-04T12:34:56.000",
},
],
"voucherClaims":
[
{
"mandatoryCustomerDataItemId": 8,
"value": "1999-12-31",
},
{
"mandatoryCustomerDataItemId": 4,
"value": "vlad.harkonnen@househarkonnen.net",
},
],
},
],
}
responses:
"201":
description: Created
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
{ "purchasedProductId": "a9b3dea5-fb8a-4b1e-9fe6-90cad31c0cfd" }
/purchasedproducts/{purchasedProductId}:
parameters:
- in: path
@ -1009,8 +1146,6 @@ paths:
"value": "vlad.harkonnen@househarkonnen.net",
},
],
"fromInclusive": "2024-10-04T12:34:56.000",
"untilInclusive": "2025-10-04T12:34:56.000",
}
responses:
"201":
@ -1106,8 +1241,6 @@ paths:
"value": "vlad.harkonnen@househarkonnen.net",
},
],
"fromInclusive": "2024-10-04T12:34:56.000",
"untilInclusive": "2025-10-04T12:34:56.000",
},
],
}
@ -1169,444 +1302,6 @@ paths:
{ "voucherStatusId": 5, "name": "Expired" },
],
}
/purchasedproducts/bulk:
post:
tags:
- Bulk processing
summary: Create one or more purchased product(s) in bulk.
description: Create a new purchased product.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
examples:
Create Single Purchased GBO Product:
value:
{
"purchasedProducts":
[
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "408eefa9-b393-4bb3-8439-b2e51833abc7",
},
{
"resourceNameId": 2,
"resourceIdentifier": "f809a6e1-1c8d-4f8e-8a6e-0d0b1e1e1e1e",
},
],
"purchasedGboProducts":
[
{
"salesTimestamp": "2024-10-04T12:34:56.000",
"refundTimestamp": "2024-10-04T12:34:56.000",
"fromInclusive": "2024-10-04T12:34:56.000",
"untilInclusive": "2024-10-04T12:34:56.000",
"packageTemplateId": "30003",
"xBot": "f15efe6f-7353-4968-b134-60ba6fc2da8b",
"xTat": "42efebf7-132e-4ee0-9cbb-4037a9a54ad8",
"xSpit": "d67b2f72-918a-4e6c-957d-a39ed9c9e16b",
"customerTokenId": "b6492322-c458-4857-9ac3-a109c1887b9f",
"ovPayTokenId": 13,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"createdBy": "someuser",
"lastUpdatedBy": null,
},
],
"purchasedTapconnectTickets": [],
"issuedVouchers": [],
},
],
}
Create Single Purchased TapConnet Ticket:
value:
{
"purchasedProducts":
[
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "408eefa9-b393-4bb3-8439-b2e51833abc7",
},
{
"resourceNameId": 2,
"resourceIdentifier": "f809a6e1-1c8d-4f8e-8a6e-0d0b1e1e1e1e",
},
],
"purchasedGboProducts": [],
"purchasedTapconnectTickets":
[
{
"issuedAt": "2024-10-04T12:34:56.000",
"activatedAt": "2024-10-04T12:34:56.000",
"cancelledAt": null,
"ticketReference": "KJj43nejhbTxhr897287",
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"createdBy": "user",
"lastUpdatedBy": "user",
},
],
"issuedVouchers": [],
},
],
}
Create Single Issued Voucher:
value:
{
"purchasedProducts":
[
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "408eefa9-b393-4bb3-8439-b2e51833abc7",
},
{
"resourceNameId": 2,
"resourceIdentifier": "f809a6e1-1c8d-4f8e-8a6e-0d0b1e1e1e1e",
},
],
"purchasedGboProducts": [],
"purchasedTapconnectTickets": [],
"issuedVouchers":
[
{
"voucherCode": "VOUCHER123",
"voucherStatusInstances":
[
{
"voucherStatusId": 1,
"createdOn": "2024-10-04T12:34:56.000",
},
],
"voucherClaims":
[
{
"mandatoryCustomerDataItemId": 8,
"value": "1999-12-31",
},
{
"mandatoryCustomerDataItemId": 4,
"value": "vlad.harkonnen@househarkonnen.net",
},
],
},
],
},
],
}
Create Multiple Issued Vouchers:
value:
{
"purchasedProducts":
[
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "408eefa9-b393-4bb3-8439-b2e51833abc7",
},
{
"resourceNameId": 2,
"resourceIdentifier": "f809a6e1-1c8d-4f8e-8a6e-0d0b1e1e1e1e",
},
],
"purchasedGboProducts": [],
"purchasedTapconnectTickets": [],
"issuedVouchers":
[
{
"voucherCode": "VOUCHER123",
"voucherStatusInstances":
[
{
"voucherStatusId": 1,
"createdOn": "2024-10-04T12:34:56.000",
},
],
"voucherClaims":
[
{
"mandatoryCustomerDataItemId": 8,
"value": "1999-12-31",
},
{
"mandatoryCustomerDataItemId": 4,
"value": "vlad.harkonnen@househarkonnen.net",
},
],
},
],
},
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "7ce32f9b-52f0-4e80-a527-0c6184b57f52",
},
{
"resourceNameId": 2,
"resourceIdentifier": "02047745-f03e-4c00-8e1b-8dc5c86a786e",
},
],
"purchasedGboProducts": [],
"purchasedTapconnectTickets": [],
"issuedVouchers":
[
{
"voucherCode": "VOUCHER123",
"voucherStatusInstances":
[
{
"voucherStatusId": 1,
"createdOn": "2024-10-04T12:34:56.000",
},
],
"voucherClaims":
[
{
"mandatoryCustomerDataItemId": 8,
"value": "1940-01-18",
},
{
"mandatoryCustomerDataItemId": 4,
"value": "valdemar.hoskanner@househarkonnen.net",
},
],
},
],
},
{
"productId": 11,
"createdOn": "2024-10-04T12:34:56.000",
"lastUpdatedOn": "2024-10-04T12:34:56.000",
"purchasedProductResources":
[
{
"resourceNameId": 1,
"resourceIdentifier": "7c71ec8a-3326-451f-9464-3e36d10260e3",
},
{
"resourceNameId": 2,
"resourceIdentifier": "73c7a805-2edf-4616-a04c-267e88e0931c",
},
],
"purchasedGboProducts": [],
"purchasedTapconnectTickets": [],
"issuedVouchers":
[
{
"voucherCode": "VOUCHER123",
"voucherStatusInstances":
[
{
"voucherStatusId": 1,
"createdOn": "2024-10-04T12:34:56.000",
},
],
"voucherClaims":
[
{
"mandatoryCustomerDataItemId": 8,
"value": "2016-06-08",
},
{
"mandatoryCustomerDataItemId": 4,
"value": "alia.artreides@housearteides.net",
},
],
},
],
},
],
}
responses:
"202":
description: Accepted
content:
application/json:
schema:
$ref: "#/components/schemas/BulkResponseBody"
examples:
Array of purchased products accepted:
summary: Array of purchased products accepted
description: |
The array of purchased products was accepted successfully.
The purchased products will be processed asynchronously.
In the response body the consumer will find information on how to retrieve the processing status.
value:
startTime: 2025-02-14T05:32:47.0672237Z
status: Running
clientTrackingId: 08584620957189579629541919368CU00
callbackurl: https://api.integratielaag.nl/purchasedproducts/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
retryAfter: 10
summary: null
/purchasedproducts/bulk/{clientTrackingId}:
get:
tags:
- Bulk processing
summary: Get the status of the purchased products bulk post.
description: Get the status of the asynchronous purchased products bulk post.
parameters:
- in: path
name: clientTrackingId
schema:
type: string
required: true
description: The clientTrackingId of the purchased products bulk post.
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/BulkResponseBody"
examples:
Batch successfully processed:
summary: Batch successfully processed
description: |
Body of a batch of purchased products that was successfully created.
A number of purchased products were created.
value:
startTime: "2025-02-14T05:32:47.067Z"
status: "Finished"
clientTrackingId: "08584620957189579629541919368CU00"
callbackurl: https://api.integratielaag.nl/purchasedproducts/bulk/responsestatus/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
retryAfter: 0
summary:
created: 13
updated: 0
total: 13
/voucherstatusinstances/bulk:
post:
summary: Post voucher status instances in bulk.
description: Post voucher status instances in bulk.
tags:
- Bulk processing
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
examples:
List of issued vouchers to set status to revoked:
summary: List of issued vouchers to set status to revoked
description: List of issued vouchers to set status to revoked
value:
{
"voucherStatusInstances":
[
{
"issuedVoucherId": "8a63552f-faf5-43f3-b22d-bebc976a8a5e",
"voucherStatusId": 4,
"createdOn": "2024-10-04T12:34:56.000",
},
{
"issuedVoucherId": "a9ff40ec-2940-413a-9957-dfd471c4caf3",
"voucherStatusId": 4,
"createdOn": "2024-10-04T12:34:56.000",
},
{
"issuedVoucherId": "9e7363e6-beaa-4c38-9ed6-c8afed459bd5",
"voucherStatusId": 4,
"createdOn": "2024-10-04T12:34:56.000",
},
{
"issuedVoucherId": "9d7332d6-1949-4c20-aa99-d87096b035fa",
"voucherStatusId": 4,
"createdOn": "2024-10-04T12:34:56.000",
},
{
"issuedVoucherId": "43ca757b-8370-4cb0-92b9-717948383d5e",
"voucherStatusId": 4,
"createdOn": "2024-10-04T12:34:56.000",
},
],
}
responses:
"202":
description: Accepted
content:
application/json:
schema:
$ref: "#/components/schemas/BulkResponseBody"
examples:
Array of issued vouchers accepted:
summary: Array of issued vouchers status instances accepted
description: |
The array of issued vouchers status instances was accepted successfully.
The issued vouchers status instances will be processed asynchronously.
In the response body the consumer will find information on how to retrieve the processing status.
value:
startTime: 2025-02-14T05:32:47.0672237Z
status: Running
clientTrackingId: 08584620957189579629541919368CU00
callbackurl: https://api.integratielaag.nl/voucherstatusinstances/bulk/responsestatus/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
retryAfter: 10
summary: null
/voucherstatusinstances/bulk/responsestatus/{clientTrackingId}:
get:
tags:
- Bulk processing
summary: Get the status of the voucher status instances bulk post.
description: Get the status of the asynchronous voucher status instances bulk post.
parameters:
- in: path
name: clientTrackingId
schema:
type: string
required: true
description: The clientTrackingId of the voucher status instances bulk post.
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/BulkResponseBody"
examples:
Batch successfully processed:
summary: Batch successfully processed
description: |
Body of a batch of voucher status instances that was successfully created.
A number of voucher status instances were created.
value:
startTime: "2025-02-14T05:32:47.067Z"
status: "Finished"
clientTrackingId: "08584620957189579629541919368CU00"
callbackurl: https://api.integratielaag.nl/voucherstatusinstances/bulk/responsestatus/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
retryAfter: 0
summary:
created: 5
updated: 0
total: 5
components:
securitySchemes:
bearerToken:
@ -1616,56 +1311,6 @@ components:
schemas:
unavailable:
type: object
BulkResponseBody:
type: object
properties:
startTime:
type: string
format: date-time
example: 2025-02-14T05:32:47.0672237Z
status:
type: string
example: Running
clientTrackingId:
type: string
example: 08584620957189579629541919368CU00
callbackurl:
type: string
format: uri
example: https://services.api.htm.nl/purchasedproducts/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
retryAfter:
type: integer
example: 10
summary:
$ref: "#/components/schemas/summaryBody"
required:
- startTime
- status
- clientTrackingId
- callbackurl
- retryAfter
- summary
summaryBody:
type: object
properties:
summary:
type: object
properties:
created:
type: integer
example: 15
updated:
type: integer
example: 2
total:
type: integer
example: 17
required:
- created
- total
- updated
required:
- summary
rfc9457:
type: object
properties:

View File

@ -1,477 +0,0 @@
openapi: 3.0.1
info:
title: TapConnect
description: >-
Welcome to the TapConnect Issuing API documentation. These pages describe the endpoints available within TapConnect. Please note that for historical reasons, Date/times are always in the "Europe/Amsterdam" timezone. The endpoints in this document are grouped as follows:
- **Export endpoints**: Export related endpoints return information about events related to tickets that have been issued. This can be used for Business Intelligence purposes or for financial record keeping.
- **Product endpoints**: Product related endpoints return information about products that are available to you as a sales partner and the details of each of these products.
- **Ticket endpoints**: Ticket related endpoints allow you to manage tickets throughout their lifecycle. This includes ticket creation, retrieving ticket information, or retrieving the barcode for a ticket.
- **Journey endpoints**: Used to calculate the price of a journey and to issue a ticket for that journey using the external fare calculation engine.
For more information on TapConnect please visit [https://tapconnect.io](https://tapconnect.io) or [https://documentation.tapconnect.io](https://documentation.tapconnect.io).
version: '1.0'
servers:
- url: https://services.acc.api.htm.nl/tapconnect/1.0
tags:
- name: Export
description: >-
Export data that can be used to generate reports about issued tickets
and related information
paths:
/v5/ticket-events-export:
get:
summary: Elastic Search ticket events export
description: "Exports ticket events data from Elastic Search.\n\nBoth parameters\
\ are a string, and they have to represent a date. Consider the list of valid\
\ formats below:\n1. 2021 - searches for all events in a year\n2. 2021-02\
\ - searches for all events in a month\n3. 2021-02-02 - searches for all events\
\ in a day\n4. 2021-02-02T12 - searches for all events in a specific hour\n\
5. 2021-02-02T12:00 - searches for all events in a specific minute\n6. 2021-02-02T12:00:00\
\ - searches for all events in a specific second\n\nIf an error occur, the\
\ last element returned will be a message with \"An error occurred on Elasticsearch\"\
\ and it \nmeans that not all the results are returned.\n_Keep in mind that\
\ the above timestamps would also be accepted as Zulu: 2021-02-02T11:00:00Z\
\ (winter time)_\n"
parameters:
- explode: true
in: query
name: start
required: true
description: The date to be considered as the interval starting date
schema:
example: 2021-02-01T00:00:00
type: string
style: form
- explode: true
in: query
name: end
required: true
description: The date to be considered as the interval ending date
schema:
example: 2021-02-02T00:00:00
type: string
style: form
responses:
"200":
content:
application/json:
schema:
$ref: '#/components/schemas/v5_ticket_events_export_response'
description: Returns a JSON chunked array of ticket events exported from elastic search.
"400":
description: |
The request could not be validated. The request body or parameters contain incomplete or incorrect parameters. The body of the response will contain information about the problem.
"401":
description: |
Unauthorized call, you are not authorized to call this endpoint with the api key provided in the Authorization header. Please verify that your api key is correct and/or if you are authorized to call this endpoint.
"403":
description: |
Unauthorized call, you are not authorized to call this endpoint with the api key provided in the Authorization header. Please verify that your api key is correct and/or if you are authorized to call this endpoint.
"404":
description: |
The requested URL does not exist, or the requested object was not found.
"406":
description: |
The request was not accepted by the server. The body of the response will contain information about the problem.
tags:
- Export
components:
schemas:
v5_ticket_events_export_response:
type: array
items:
anyOf:
- $ref: '#/components/schemas/ActivateTicketEvent'
- $ref: '#/components/schemas/CreateBarcodeEvent'
- $ref: '#/components/schemas/CreateTicketEvent'
- $ref: '#/components/schemas/TapEvent'
- $ref: '#/components/schemas/InspectTicketEvent'
- $ref: '#/components/schemas/NotifyEvent'
ActivateTicketEvent:
properties:
eventId:
example: 1
type: number
eventType:
example: ACTIVATE_TICKET
type: string
occurredAt:
example: 2021-06-07T08:42:00.791992000Z
type: string
receivedAt:
example: 2021-06-07T08:42:00.791992000Z
type: string
timeToDie:
example: 2445836980
type: number
operators:
items:
example: HTM
type: string
type: array
createdBy:
example: HTM
type: string
definedBy:
example: HTM
type: string
ticketId:
example: hkbu3415fbidswd803nfdg7
type: string
validityStart:
example: 2021-06-06T22:00:00.000000000Z
type: string
validityEnd:
example: 2021-06-07T23:40:00.000000000Z
type: string
validityType:
example: FIXED
type: string
CreateBarcodeEvent:
properties:
eventId:
example: 2
type: number
eventType:
example: CREATE_BARCODE
type: string
occurredAt:
example: 2021-06-07T08:42:01.629279000Z
type: string
receivedAt:
example: 2021-06-07T08:42:01.629279000Z
type: string
timeToDie:
example: 2445836980
type: number
operators:
items:
example: HTM
type: string
type: array
createdBy:
example: HTM
type: string
definedBy:
example: HTM
type: string
ticketId:
example: 2huCpR99LHjGfiq8ZJoF
type: string
barcodeSignatureKeyId:
example: TCT07
type: string
barcodeValidityStart:
example: 2021-06-06T22:00:00.000000000Z
type: string
barcodeValidityEnd:
example: 2021-06-07T23:40:00.000000000Z
type: string
CreateTicketEvent:
properties:
eventId:
example: 0
type: number
eventType:
example: CREATE_TICKET
type: string
occurredAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
receivedAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
reportedAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
timeToDie:
example: 2445836980
type: number
operators:
items:
example: HTM
type: string
type: array
createdBy:
example: HTM
type: string
definedBy:
example: HTM
type: string
ticketId:
example: 344BEuHcFkEChOPm06sY
type: string
serviceId:
example: HTM-0987-7477-0993
type: string
productName:
example: HTM Kinder Dagkaart
type: string
productCode:
example: "303"
type: string
productValidityPeriodUnit:
example: "DAYS"
type: string
productValidityPeriod:
example: 1
type: number
lifespanStart:
example: 2021-06-07
type: string
lifespanEnd:
example: 2021-06-08
type: string
language:
example: NL
type: string
salesChannelId:
example: "9999"
type: string
salesChannelName:
example: HTM App
type: string
startStation:
example: Haarlem
type: string
endStation:
example: Leiden Centraal
type: string
barcodeType:
example: UIC
type: string
validityType:
example: FIXED
type: string
refundable:
example: true
type: boolean
priceInCents:
example: 150,
type: number
numberOfAdults:
example: 1
type: number
numberOfChildren:
example: 0
type: number
roundToBusinessDay:
example: true
type: boolean
modalities:
example: ["BUS", "TRAM"]
type: array
items:
example: BUS
type: string
TapEvent:
properties:
eventId:
example: 5
type: number
eventType:
example: TAP
type: string
occurredAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
receivedAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
timeToDie:
example: 2445836980
type: number
validationAction:
example: CHECK_OUT
type: string
validationResult:
example: Approved
type: string
tapId:
example: a9aea0ae-52de-42cd-a2f1-93b80d9af389
type: string
operators:
items:
example: HTM
type: string
type: array
createdBy:
example: HTM
type: string
definedBy:
example: HTM
type: string
ticketId:
example: hkbu3415fbidswd803nfdg7
type: string
modality:
example: BUS
type: string
line:
example: "25"
type: string
trip:
example: "240"
type: string
vehicle:
example: "1512"
type: string
deviceId:
example: "13513A"
type: string
deviceType:
example: VBS
type: string
lastStopId:
example: "3409"
type: string
lastStopName:
example: Gramsbergenlaan
type: string
nextStopId:
example: "3409"
type: string
nextStopName:
example: Gramsbergenlaan
type: string
location:
type: object
properties:
lat:
example: 52.00089453333333
type: number
lon:
example: 4.004570666666667
type: number
InspectTicketEvent:
properties:
eventId:
example: 3
type: number
eventType:
example: INSPECT_TICKET
type: string
occurredAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
receivedAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
timeToDie:
example: 2445836980
type: number
operators:
items:
example: HTM
type: string
type: array
createdBy:
example: HTM
type: string
definedBy:
example: HTM
type: string
ticketId:
example: uv1hzvrRd7Xd1Fs9vTxi
type: string
modality:
example: BUS
type: string
deviceId:
example: 6959bd00eaec8e68
type: string
deviceType:
example: IBS
type: string
validationResult:
example: Approved
type: string
NotifyEvent:
properties:
eventId:
example: 1185
type: number
eventType:
example: NOTIFY
type: string
occurredAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
receivedAt:
example: 2021-06-07T08:42:00.790992000Z
type: string
timeToDie:
example: 2445836980
type: number
tapId:
example: a9aea0ae-52de-42cd-a2f1-93b80d9af389
type: string
sequence:
example: 2
type: number
tapResponseTimeMillis:
example: 402
type: number
validationAction:
example: CHECK_OUT
type: string
validationMethod:
example: ONLINE
type: string
validationResult:
example: Approved
type: string
operators:
items:
example: HTM
type: string
type: array
createdBy:
example: HTM
type: string
definedBy:
example: HTM
type: string
modality:
example: TRAM
type: string
line:
example: "3"
type: string
trip:
example: "692"
type: string
vehicle:
example: "4058"
type: string
deviceId:
example: "13A886"
type: string
deviceType:
example: VBS
type: string
lastStopId:
example: "2005"
type: string
lastStopName:
example: Fahrenheitstraat
type: string
nextStopId:
example: "2011"
type: string
nextStopName:
example: Valkenbosplein
type: string
ticketId:
example: hkbu3415fbidswd803nfdg7
type: string
location:
type: object
properties:
lat:
example: 52.001300283333336
type: number
lon:
example: 4.004586633333333
type: number