Merge branch 'develop' of https://git.integratielaag.nl/HTM/ovpay into features/OVPAY2294-vouchers-in-orders

This commit is contained in:
Mirjam Herald 2025-12-15 10:44:01 +01:00
commit 3ff55e5888
2 changed files with 502 additions and 13 deletions

View File

@ -492,8 +492,9 @@ paths:
"customerProfileId": 1, "customerProfileId": 1,
"ovPayTokenId": 1, "ovPayTokenId": 1,
"xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
"ovpasNumber": "",
"alias": "Mijn EMV pas",
"tokenType": { "tokenTypeId": 1, "name": "EMV" }, "tokenType": { "tokenTypeId": 1, "name": "EMV" },
"alias": "MyToken",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 2, "name": "Active" }, { "tokenStatusId": 2, "name": "Active" },
"expirationDate": "2028-02-01", "expirationDate": "2028-02-01",
@ -568,7 +569,8 @@ paths:
"ovPayTokenId": 1, "ovPayTokenId": 1,
"xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV34567",
"alias": "MyToken", "alias": "MyToken",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 2, "name": "Active" }, { "tokenStatusId": 2, "name": "Active" },
@ -650,7 +652,8 @@ paths:
"ovPayTokenId": 1, "ovPayTokenId": 1,
"xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV34567",
"alias": "MyToken", "alias": "MyToken",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 2, "name": "Active" }, { "tokenStatusId": 2, "name": "Active" },
@ -772,7 +775,8 @@ paths:
"ovPayTokenId": 1, "ovPayTokenId": 1,
"xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV34567",
"alias": "MyToken", "alias": "MyToken",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 2, "name": "Active" }, { "tokenStatusId": 2, "name": "Active" },
@ -869,7 +873,8 @@ paths:
"ovPayTokenId": 1, "ovPayTokenId": 1,
"xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV34567",
"alias": "MyToken", "alias": "MyToken",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 2, "name": "Active" }, { "tokenStatusId": 2, "name": "Active" },
@ -984,7 +989,8 @@ paths:
"ovPayTokenId": 1, "ovPayTokenId": 1,
"xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV34567",
"alias": "MyToken", "alias": "MyToken",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 2, "name": "Active" }, { "tokenStatusId": 2, "name": "Active" },
@ -1004,7 +1010,8 @@ paths:
"ovPayTokenId": 6, "ovPayTokenId": 6,
"xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV54567",
"alias": "MyToken", "alias": "MyToken",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 3, "name": "Replaced (*)" }, { "tokenStatusId": 3, "name": "Replaced (*)" },
@ -1025,7 +1032,8 @@ paths:
"ovPayTokenId": 13, "ovPayTokenId": 13,
"xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV34547",
"alias": "MyToken", "alias": "MyToken",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 4, "name": "On stock" }, { "tokenStatusId": 4, "name": "On stock" },
@ -1046,7 +1054,8 @@ paths:
"ovPayTokenId": 21, "ovPayTokenId": 21,
"xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV34831",
"alias": "Mijn OV Pas", "alias": "Mijn OV Pas",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 5, "name": "Suspended" }, { "tokenStatusId": 5, "name": "Suspended" },
@ -1067,7 +1076,8 @@ paths:
"ovPayTokenId": 28, "ovPayTokenId": 28,
"xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV34984",
"alias": "Mijn OV Pas", "alias": "Mijn OV Pas",
"tokenStatus": "tokenStatus":
{ {
@ -1091,7 +1101,8 @@ paths:
"ovPayTokenId": 115, "ovPayTokenId": 115,
"xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV54368",
"alias": "My retired token", "alias": "My retired token",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 1, "name": "Retired" }, { "tokenStatusId": 1, "name": "Retired" },
@ -1112,7 +1123,8 @@ paths:
"ovPayTokenId": 118, "ovPayTokenId": 118,
"xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
"tokenType": "tokenType":
{ "tokenTypeId": 2, "name": "OV-pas physical" }, { "tokenTypeId": 2, "name": "OV-pas physical" },
"ovpasNumber": "OV98263",
"alias": "My found token", "alias": "My found token",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 7, "name": "Renewed Active" }, { "tokenStatusId": 7, "name": "Renewed Active" },
@ -1216,7 +1228,7 @@ paths:
"xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
"tokenType": { "tokenTypeId": 1, "name": "EMV" }, "tokenType": { "tokenTypeId": 1, "name": "EMV" },
"lastDigits": null, "lastDigits": null,
"ovPasNumber": null, "ovpasNumber": null,
"alias": "Mijn token", "alias": "Mijn token",
"tokenStatus": "tokenStatus":
{ "tokenStatusId": 2, "name": "Active" }, { "tokenStatusId": 2, "name": "Active" },

View File

@ -0,0 +1,477 @@
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