From 6c3a15134e3426b67e166356cfa25794976fef2e Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 30 Apr 2025 15:39:36 +0200 Subject: [PATCH 01/13] OVPAY-1742 - Added /compare endpoint. --- src/openapi/customers/SE-customers.yaml | 2559 ++++++++++++----------- 1 file changed, 1368 insertions(+), 1191 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index d814fc5..e181edb 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -4,7 +4,7 @@ info: description: >- Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database. To be used by touchpoints to get information about HTM customers. - version: '1.0' + version: "1.0" servers: - url: https://api.integratielaag.nl/v1/touchpoint tags: @@ -21,7 +21,7 @@ paths: description: Get a single customer profile based on search parameters. Only returns a profile if a single result matches the parameters; when multiple results are found, additional seach parameters are required to disambiguate. parameters: - name: customerProfileId - in: query + in: query schema: type: integer example: 1 @@ -44,7 +44,7 @@ paths: in: query schema: type: integer - example: 1 + example: 1 - name: birthname in: query schema: @@ -71,138 +71,134 @@ paths: in: query schema: type: string - example: Sesamestreet + example: Sesamestreet - name: addressHouseNumber in: query schema: type: integer - example: 1 + example: 1 - name: addressHouseNumberSuffix in: query schema: type: string - example: A + example: A - name: addressPostalCode in: query schema: type: string - example: 1234 AB + example: 1234 AB - name: addressCity in: query schema: type: string - example: The Hague + example: The Hague - name: addressCountry in: query schema: type: string - example: The Netherlands + example: The Netherlands - name: phoneNumber in: query schema: type: string - example: "0123456789" + example: "0123456789" - name: ovChipcardNumber in: query schema: type: integer - example: 0123456789 + example: 0123456789 - name: ovChipcardAlias in: query schema: type: string - example: My ovchipcard + example: My ovchipcard - name: ovPayTokenNumber in: query schema: type: integer - example: 0123456789 + example: 0123456789 - name: ovPayTokenAlias in: query schema: type: string - example: My Ov Pay Token + example: My Ov Pay Token - name: ovPayTokenXTat in: query schema: type: string - example: 180d04e0-a721-447e-a1d9-b416937b43bc + example: 180d04e0-a721-447e-a1d9-b416937b43bc - name: ovPayTokenXBot in: query schema: type: string example: e1307c73-676a-4d07-967b-6141276f7c7c responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/CustomersResponse' - '404': - description: No customer found - content: - application/json: - example: - { - "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers", - "apiErrorCode": "400.1", - "title": "Niet gevonden", - "detail": "Klant niet gevonden", - "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7", - "errors": [ - { - "subApiErrorCode": "0017" - } - ] - } - '409': - description: Multiple customers found - content: - application/json: - example: - { - "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers", - "apiErrorCode": "409.1", - "title": "Meer dan 1 klantprofiel gevonden", - "detail": "Meer dan 1 klantprofiel gevonden. Verfijn je zoekcriteria.", - "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7" - } + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + "404": + description: No customer found + content: + application/json: + example: + { + "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers", + "apiErrorCode": "400.1", + "title": "Niet gevonden", + "detail": "Klant niet gevonden", + "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7", + "errors": [{ "subApiErrorCode": "0017" }], + } + "409": + description: Multiple customers found + content: + application/json: + example: + { + "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers", + "apiErrorCode": "409.1", + "title": "Meer dan 1 klantprofiel gevonden", + "detail": "Meer dan 1 klantprofiel gevonden. Verfijn je zoekcriteria.", + "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7", + } /customers/tokens: get: - tags: + tags: - Customers parameters: - - name: X-HTM-JWT-AUTH-HEADER - in: header + - name: X-HTM-JWT-AUTH-HEADER + in: header schema: type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c required: false description: The JWT of a customer in case of touchpoint were customer logs in themselves - - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER - in: header + - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER + in: header schema: type: string example: feaaef83-a551-4283-8419-340b1ada3b55 required: false - description: The customerProfileId of a customer in the case of the SMP - - name: X-HTM-ROLE-HEADER - in: header + description: The customerProfileId of a customer in the case of the SMP + - name: X-HTM-ROLE-HEADER + in: header schema: type: string example: Customer required: false description: The role of the HTM employee in the case of the SMP - - name: ovPayTokenId - in: query + - name: ovPayTokenId + in: query schema: type: integer example: 1 required: false description: The ovpay token id of a specific customer token - - name: tokenTypeId - in: query + - name: tokenTypeId + in: query schema: type: array items: @@ -210,53 +206,53 @@ paths: explode: false description: Filter on tokentype. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital required: false - - name: xTat - in: query + - name: xTat + in: query schema: type: string example: 4c2d60e2-cd03-4c80-ae70-573a301f0bff required: false description: Filter on the xTat of a customer token - - name: xBot - in: query + - name: xBot + in: query schema: type: string example: 91641b54-056c-49ea-b598-ccde81d6c45a required: false description: Filter on the xBot of a customer token - - name: ovpasNumber - in: query + - name: ovpasNumber + in: query schema: type: string example: 56HYRTL required: false description: Filter on the OV pasNumber of a customer token of type OV Pas - - name: lastDigits - in: query + - name: lastDigits + in: query schema: type: string example: 1234 required: false description: Filter on the last digits of a customer token of type EMV - - name: tokenStatusId - in: query + - name: tokenStatusId + in: query schema: type: array items: type: integer explode: false description: Filter on token status. 1 = Retired, 2 = Active, 3 = Replaced (*), 4 = On Stock, 5 = Suspended, 6 = Removed by customer (*), 7 = Renewed Active - required: false - - name: expirationDate - in: query + required: false + - name: expirationDate + in: query schema: type: string format: date-time example: 2027-01-01T09:00:00Z required: false - description: Filter on the expirationDate of a customer token - - name: replacedByTokenId - in: query + description: Filter on the expirationDate of a customer token + - name: replacedByTokenId + in: query schema: type: integer example: 2 @@ -265,7 +261,7 @@ paths: summary: Get a list of all OvPayTokens for a certain customer. description: Get a list of all OvPayTokens for a certain customer, only returns the tokens for an identified customer through JWT or customerProfileId in the headers. responses: - '200': + "200": description: OK content: application/json: @@ -277,671 +273,702 @@ paths: description: Empty token list value: { - "ovPayTokens": [ - ], - _links: { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "GET" - } - } + "ovPayTokens": [], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "GET", + }, + }, } EMV without PAD: summary: EMV without PAD description: EMV without PAD value: { - "ovPayTokens": [ + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/tokenPersonalizations?ovpaytokenId=1", + "method": "POST", + }, + }, + }, + ], + _links: { - "customerProfileId": 1, - "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 1, - "name": "EMV" - }, - "alias": "MyToken", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 2, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", - "method": "GET" + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "GET", }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/tokenPersonalizations?ovpaytokenId=1", - "method": "POST" - } - } - } - ], - _links: { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "GET" - } - } + }, } OV pas without PAD: summary: OV pas without PAD description: OV pas without PAD value: { - "ovPayTokens": [ - { - "customerProfileId": 1, - "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "MyToken", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 2, - "autoReloadRegistration": null, - "ePurse": { - "e-PurseBalance": { - "currency": "EUR", - "amount": 350 + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": + { + "e-PurseBalance": + { "currency": "EUR", "amount": 350 }, + "status": "ACTIVE", + "originDate": "2019-07-16T11:00:00+02:00", + }, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "method": "POST", + }, }, - "status": "ACTIVE", - "originDate": "2019-07-16T11:00:00+02:00" }, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", - "method": "GET" + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "GET", }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "POST" - } - } - } - ], - _links: { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "GET" - } - } - } + }, + } OV pas with PAD and autoReload: summary: OV pas with PAD and autoReload description: OV pas with PAD and autoReload value: { - "ovPayTokens": [ - { - "customerProfileId": 1, - "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "MyToken", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 2, - "autoReloadRegistration": { - "autoReloadAmount": 500, - "retailerReferenceId": "abc", - "arrit": "425f7fc2-1103-4822-9c79-7c4aaa2fb6aa", - "autoReloadRegistrationStatus": "ACTIVE", - "autoReloadRegistrationStartDateTime": "2024-06-02T15:03:46Z" - }, - "ePurse": { - "e-PurseBalance": { - "currency": "EUR", - "amount": 350 + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": + { + "autoReloadAmount": 500, + "retailerReferenceId": "abc", + "arrit": "425f7fc2-1103-4822-9c79-7c4aaa2fb6aa", + "autoReloadRegistrationStatus": "ACTIVE", + "autoReloadRegistrationStartDateTime": "2024-06-02T15:03:46Z", + }, + "ePurse": + { + "e-PurseBalance": + { "currency": "EUR", "amount": 350 }, + "status": "ACTIVE", + "originDate": "2019-07-16T11:00:00+02:00", + }, + "personalAccountData": + { + "name": + { + "inaccuracyFlag": false, + "inaccuracyFlagReason": null, + "inaccuracyFlagSetCounter": 0, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "birthdate": + { + "inaccuracyFlag": false, + "inaccuracyFlagReason": null, + "inaccuracyFlagSetCounter": 0, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "photo": + { + "inaccuracyFlag": false, + "inaccuracyFlagReason": null, + "inaccuracyFlagSetCounter": 0, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "method": "GET", + }, + "update_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "method": "PUT", + }, }, - "status": "ACTIVE", - "originDate": "2019-07-16T11:00:00+02:00" }, - "personalAccountData":{ - "name": { - "inaccuracyFlag": false, - "inaccuracyFlagReason": null, - "inaccuracyFlagSetCounter": 0, - "isValidated": false, - "changeCounter": 0, - "maxUpdatesVerificationCount": 0, - "lastChangeDate": "2024-08-24T14:15:22Z" + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "GET", }, - "birthdate": { - "inaccuracyFlag": false, - "inaccuracyFlagReason": null, - "inaccuracyFlagSetCounter": 0, - "isValidated": false, - "changeCounter": 0, - "maxUpdatesVerificationCount": 0, - "lastChangeDate": "2024-08-24T14:15:22Z" - }, - "photo": { - "inaccuracyFlag": false, - "inaccuracyFlagReason": null, - "inaccuracyFlagSetCounter": 0, - "isValidated": false, - "changeCounter": 0, - "maxUpdatesVerificationCount": 0, - "lastChangeDate": "2024-08-24T14:15:22Z" - } - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", - "method": "GET" - }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", - "method": "GET" - }, - "update_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "PUT" - } - } - } - ], - _links: { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "GET" - } - } - } + }, + } OV pas with partial PAD: summary: OV pas with partial PAD description: OV pas with partial PAD value: { - "ovPayTokens": [ - { - "customerProfileId": 1, - "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "MyToken", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 2, - "autoReloadRegistration": null, - "ePurse": { - "e-PurseBalance": { - "currency": "EUR", - "amount": 350 + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": + { + "e-PurseBalance": + { "currency": "EUR", "amount": 350 }, + "status": "ACTIVE", + "originDate": "2019-07-16T11:00:00+02:00", + }, + "personalAccountData": + { + "name": null, + "birthdate": + { + "inaccuracyFlag": true, + "inaccuracyFlagReason": "Invalid birthdate", + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "photo": null, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "method": "GET", + }, + "update_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "method": "PUT", + }, }, - "status": "ACTIVE", - "originDate": "2019-07-16T11:00:00+02:00" }, - "personalAccountData":{ - "name": null, - "birthdate": { - "inaccuracyFlag": true, - "inaccuracyFlagReason": "Invalid birthdate", - "inaccuracyFlagSetCounter": 1, - "isValidated": false, - "changeCounter": 0, - "maxUpdatesVerificationCount": 0, - "lastChangeDate": "2024-08-24T14:15:22Z" + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "GET", }, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", - "method": "GET" - }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", - "method": "GET" - }, - "update_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "PUT" - } - } - } - ], - _links: { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "GET" - } - } - } + }, + } OV pas with invalid PAD: summary: OV pas with invalid PAD description: OV pas with invalid PAD value: { - "ovPayTokens": [ + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": + { + "e-PurseBalance": + { "currency": "EUR", "amount": 350 }, + "status": "ACTIVE", + "originDate": "2019-07-16T11:00:00+02:00", + }, + "personalAccountData": + { + "name": + { + "inaccuracyFlag": true, + "inaccuracyFlagReason": "T.B.D", + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "birthdate": + { + "inaccuracyFlag": true, + "inaccuracyFlagReason": "T.B.D", + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "photo": + { + "inaccuracyFlag": true, + "inaccuracyFlagReason": null, + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "method": "GET", + }, + "update_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "method": "PUT", + }, + }, + }, + ], + _links: { - "customerProfileId": 1, - "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "MyToken", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 2, - "autoReloadRegistration": null, - "ePurse": { - "e-PurseBalance": { - "currency": "EUR", - "amount": 350 - }, - "status": "ACTIVE", - "originDate": "2019-07-16T11:00:00+02:00" - }, - "personalAccountData":{ - "name": { - "inaccuracyFlag": true, - "inaccuracyFlagReason": "T.B.D", - "inaccuracyFlagSetCounter": 1, - "isValidated": false, - "changeCounter": 0, - "maxUpdatesVerificationCount": 0, - "lastChangeDate": "2024-08-24T14:15:22Z" - }, - "birthdate": { - "inaccuracyFlag": true, - "inaccuracyFlagReason": "T.B.D", - "inaccuracyFlagSetCounter": 1, - "isValidated": false, - "changeCounter": 0, - "maxUpdatesVerificationCount": 0, - "lastChangeDate": "2024-08-24T14:15:22Z" + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "GET", }, - "photo": { - "inaccuracyFlag": true, - "inaccuracyFlagReason": null, - "inaccuracyFlagSetCounter": 1, - "isValidated": false, - "changeCounter": 0, - "maxUpdatesVerificationCount": 0, - "lastChangeDate": "2024-08-24T14:15:22Z" - } - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", - "method": "GET" - }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", - "method": "GET" - }, - "update_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "PUT" - } - } - } - ], - _links: { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "GET" - } - } - } - Token list with every status for tokenTypeId = 2, role = KlantenService : - summary: Token list with every status for tokenTypeId = 2, role = KlantenService + }, + } + ? Token list with every status for tokenTypeId = 2, role = KlantenService + : summary: Token list with every status for tokenTypeId = 2, role = KlantenService description: Token list with every status for tokenTypeId = 2, role = KlantenService value: { - "ovPayTokens": [ + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 0, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + }, + { + "customerProfileId": 1, + "ovPayTokenId": 6, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 3, "name": "Replaced (*)" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + }, + { + "customerProfileId": 18, + "ovPayTokenId": 13, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 4, "name": "On stock" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + }, + { + "customerProfileId": 132, + "ovPayTokenId": 21, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "Mijn OV Pas", + "tokenStatus": + { "tokenStatusId": 5, "name": "Suspended" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 0, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + }, + { + "customerProfileId": 166, + "ovPayTokenId": 28, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "Mijn OV Pas", + "tokenStatus": + { + "tokenStatusId": 6, + "name": "Removed by customer (*)", + }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 0, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + }, + { + "customerProfileId": 166, + "ovPayTokenId": 115, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "My retired token", + "tokenStatus": + { "tokenStatusId": 1, "name": "Retired" }, + "expirationDate": "2025-02-01", + "replacedByTokenId": 0, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + }, + { + "customerProfileId": 1, + "ovPayTokenId": 118, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "My found token", + "tokenStatus": + { "tokenStatusId": 7, "name": "Renewed Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 0, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + }, + ], + _links: { - "customerProfileId": 1, - "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "MyToken", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 0, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData": { - "name": null, - "birthdate": null, - "photo": null, - } + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "GET", + }, }, - { - "customerProfileId": 1, - "ovPayTokenId": 6, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "MyToken", - "tokenStatus": { - "tokenStatusId": 3, - "name": "Replaced (*)" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 2, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData": { - "name": null, - "birthdate": null, - "photo": null - } - }, - { - "customerProfileId": 18, - "ovPayTokenId": 13, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "MyToken", - "tokenStatus": { - "tokenStatusId": 4, - "name": "On stock" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 2, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - } - }, - { - "customerProfileId": 132, - "ovPayTokenId": 21, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "Mijn OV Pas", - "tokenStatus": { - "tokenStatusId": 5, - "name": "Suspended" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 0, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData": { - "name": null, - "birthdate": null, - "photo": null, - } - }, - { - "customerProfileId": 166, - "ovPayTokenId": 28, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "Mijn OV Pas", - "tokenStatus": { - "tokenStatusId": 6, - "name": "Removed by customer (*)" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 0, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData": { - "name": null, - "birthdate": null, - "photo": null, - } - }, - { - "customerProfileId": 166, - "ovPayTokenId": 115, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "My retired token", - "tokenStatus": { - "tokenStatusId": 1, - "name": "Retired" - }, - "expirationDate": "2025-02-01", - "replacedByTokenId": 0, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData": { - "name": null, - "birthdate": null, - "photo": null, - } - }, - { - "customerProfileId": 1, - "ovPayTokenId": 118, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, - "alias": "My found token", - "tokenStatus": { - "tokenStatusId": 7, - "name": "Renewed Active" - }, - "expirationDate": "2028-02-01", - "replacedByTokenId": 0, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData": { - "name": null, - "birthdate": null, - "photo": null, - } - } - ], - _links: { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "GET" - } - } - } + } post: tags: - Customers - parameters: - - name: X-HTM-JWT-AUTH-HEADER - in: header + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header schema: type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c required: false description: The JWT of a customer in case of touchpoint were customer logs in themselves - - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER - in: header + - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER + in: header schema: type: string example: feaaef83-a551-4283-8419-340b1ada3b55 required: false - description: The customerProfileId of a customer in the case of the SMP - - name: X-HTM-ROLE-HEADER - in: header + description: The customerProfileId of a customer in the case of the SMP + - name: X-HTM-ROLE-HEADER + in: header schema: type: string example: Customer required: false summary: Create a new OV paytoken in the database for a given customer - description: Create a new OV paytoken for a customerProfile + description: Create a new OV paytoken for a customerProfile requestBody: content: application/json: schema: $ref: "#/components/schemas/unavailable" examples: - Add EMV token: + Add EMV token: summary: Add EMV token description: Add EMV token - value: + value: { - "ovPayToken": { - "tokenTypeId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 200, - "alias": "Mijn token" - } - } - Add OV pas physical token: + "ovPayToken": + { + "tokenTypeId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 200, + "alias": "Mijn token", + }, + } + Add OV pas physical token: summary: Add OV pas physical token description: Add OV pas physical token - value: + value: { - "ovPayToken": { - "tokenTypeId": 2, - "ovpasNumber": "OV34567", - "verificationCode": "211", - "alias": "Mijn token" - } - } + "ovPayToken": + { + "tokenTypeId": 2, + "ovpasNumber": "OV34567", + "verificationCode": "211", + "alias": "Mijn token", + }, + } responses: "201": description: Created @@ -950,172 +977,178 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Add EMV token: + Add EMV token: summary: Add EMV token description: Add EMV token - value: + value: { - "ovPayToken": { + "ovPayToken": + { "customerProfileId": 1, "ovPayTokenId": 1, - "tokenType": { - "tokenTypeId": 1, - "name": "EMV" - }, + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovPpasNumber": null, "alias": "Mijn token", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", "replacedByTokenId": 0, "autoReloadRegistration": null, "ePurse": null, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", - "method": "GET" + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "method": "POST", + }, + }, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "POST", }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "POST" - } - } }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "POST" - } - } } - Add OV pas physical token: + Add OV pas physical token: summary: Add EMV token description: Add EMV token - value: + value: { - "ovPayToken": { + "ovPayToken": + { "customerProfileId": 1, "ovPayTokenId": 1, - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, "lastDigits": null, "ovpasNumber": "OV34567", "alias": "Mijn token", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", "replacedByTokenId": 0, "autoReloadRegistration": null, - "ePurse": { - "e-PurseBalance": { - "currency": "EUR", - "amount": 00 - }, - "status": "INACTIVE", - "originDate": "2019-07-16T11:00:00+02:00" - }, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", - "method": "GET" + "ePurse": + { + "e-PurseBalance": + { "currency": "EUR", "amount": 00 }, + "status": "INACTIVE", + "originDate": "2019-07-16T11:00:00+02:00", }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "PATCH" + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "method": "POST", + }, + }, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "method": "POST", }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "POST" - } - } }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", - "method": "POST" - } - } } /customers/tokens/{ovpayTokenId}: post: tags: - Customers - parameters: - - name: X-HTM-JWT-AUTH-HEADER - in: header + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header schema: type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c required: false description: The JWT of a customer in case of touchpoint were customer logs in themselves - - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER - in: header + - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER + in: header schema: type: string example: feaaef83-a551-4283-8419-340b1ada3b55 required: false - description: The customerProfileId of a customer in the case of the SMP - - name: X-HTM-ROLE-HEADER - in: header + description: The customerProfileId of a customer in the case of the SMP + - name: X-HTM-ROLE-HEADER + in: header schema: type: string example: Customer - required: false + required: false - name: ovpayTokenId - in: path + in: path schema: type: integer example: 1 @@ -1128,39 +1161,36 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Replace with new EMV token: + Replace with new EMV token: summary: Replace with new token description: Replace with new token - value: + value: { - "ovPayToken": { - "newTokenId": null, - "tokenTypeId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 230, - "alias": "Nieuw token" - } + "ovPayToken": + { + "newTokenId": null, + "tokenTypeId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 230, + "alias": "Nieuw token", + }, } - Replace with existing EMV token: + Replace with existing EMV token: summary: Replace with existing token description: Replace with existing token - value: - { - "ovPayToken": { - "newTokenId": 10 - } - } - Replace with new OV pas token: + value: { "ovPayToken": { "newTokenId": 10 } } + Replace with new OV pas token: summary: Replace with new OV pas token description: Replace with new OV pas token - value: + value: { - "ovPayToken": { - "tokenTypeId": 2, - "ovpasNumber": "OV34567", - "verificationCode": "211", - "alias": "Mijn token" - } + "ovPayToken": + { + "tokenTypeId": 2, + "ovpasNumber": "OV34567", + "verificationCode": "211", + "alias": "Mijn token", + }, } responses: "201": @@ -1170,134 +1200,136 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Replace with new EMV token: + Replace with new EMV token: summary: Replace with new EMV token description: Replace with new EMV token - value: + value: { - "ovPayToken": { + "ovPayToken": + { "customerProfileId": 1, "ovPayTokenId": 5, - "tokenType": { - "tokenTypeId": 1, - "name": "EMV" - }, + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, "alias": "Mijn token", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", "replacedByTokenId": 0, "autoReloadRegistration": null, "ePurse": null, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", - "method": "GET" + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "method": "POST", + }, }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", - "method": "POST" - } - } - } + }, } - Replace with new OV pas token: + Replace with new OV pas token: summary: Replace with new OV pas token description: Replace with new OV pas token - value: + value: { - "ovPayToken": { + "ovPayToken": + { "customerProfileId": 1, "ovPayTokenId": 5, - "tokenType": { - "tokenTypeId": 2, - "name": "OV-pas physical" - }, + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, "lastDigits": null, - "ovpasNumber":"OV34567", + "ovpasNumber": "OV34567", "alias": "Mijn token", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", "replacedByTokenId": 0, "autoReloadRegistration": null, - "ePurse": { - "e-PurseBalance": { - "currency": "EUR", - "amount": 350 - }, - "status": "ACTIVE", - "originDate": "2024-07-16T11:00:00+02:00" - }, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", - "method": "GET" + "ePurse": + { + "e-PurseBalance": + { "currency": "EUR", "amount": 350 }, + "status": "ACTIVE", + "originDate": "2024-07-16T11:00:00+02:00", }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "PATCH" + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "method": "POST", + }, }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", - "method": "POST" - } - } - } + }, } - "200": + "200": description: Ok content: application/json: @@ -1307,89 +1339,90 @@ paths: Replace with existing EMV token: summary: Replace with existing EMV token description: Replace with existing EMV token - value: + value: { - "ovPayToken": { + "ovPayToken": + { "customerProfileId": 1, "ovPayTokenId": 10, - "tokenType": { - "tokenTypeId": 1, - "name": "EMV" - }, + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, "alias": "Mijn bestaandetoken", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", "replacedByTokenId": 0, "autoReloadRegistration": null, "ePurse": null, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=10", - "method": "GET" + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=10", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=10", + "method": "POST", + }, }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=10", - "method": "POST" - } - } - } - } + }, + } patch: tags: - Customers - parameters: - - name: X-HTM-JWT-AUTH-HEADER - in: header + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header schema: type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c required: false description: The JWT of a customer in case of touchpoint were customer logs in themselves - - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER - in: header + - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER + in: header schema: type: string example: feaaef83-a551-4283-8419-340b1ada3b55 required: false - description: The customerProfileId of a customer in the case of the SMP - - name: X-HTM-ROLE-HEADER - in: header + description: The customerProfileId of a customer in the case of the SMP + - name: X-HTM-ROLE-HEADER + in: header schema: type: string example: Customer - required: false + required: false - name: ovpayTokenId - in: path + in: path schema: type: integer example: 1 @@ -1402,33 +1435,21 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Update an OV pay token status: - summary: Update an OV pay token status + Update an OV pay token status: + summary: Update an OV pay token status description: Update an OV pay token status - value: - { - "ovPayToken": { - "tokenStatusId": 5 - } - } - Update an OV pay token alias: - summary: Update an OV pay token alias + value: { "ovPayToken": { "tokenStatusId": 5 } } + Update an OV pay token alias: + summary: Update an OV pay token alias description: Update an OV pay token alias - value: - { - "ovPayToken": { - "alias": "Mijn nieuwe tokennaam" - } - } - Update an OV pay token full: - summary: Update an OV pay token full + value: { "ovPayToken": { "alias": "Mijn nieuwe tokennaam" } } + Update an OV pay token full: + summary: Update an OV pay token full description: Update an OV pay token full - value: + value: { - "ovPayToken": { - "tokenStatusId": 5, - "alias": "Mijn verloren pas" - } + "ovPayToken": + { "tokenStatusId": 5, "alias": "Mijn verloren pas" }, } responses: "200": @@ -1438,212 +1459,215 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Update an OV pay token status: + Update an OV pay token status: summary: Update an OV pay token status description: Update an OV pay token status - value: + value: { - "ovPayToken": { + "ovPayToken": + { "customerProfileId": 1, "ovPayTokenId": 1, - "tokenType": { - "tokenTypeId": 1, - "name": "EMV" - }, + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, "alias": "Mijn token", - "tokenStatus": { - "tokenStatusId": 5, - "name": "Suspended" - }, + "tokenStatus": + { "tokenStatusId": 5, "name": "Suspended" }, "expirationDate": "2028-08-31T23:59:00+02:00", "replacedByTokenId": 0, "autoReloadRegistration": null, "ePurse": null, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", - "method": "GET" + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "method": "POST", + }, }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", - "method": "POST" - } - } - } - } - Update an OV pay token alias: + }, + } + Update an OV pay token alias: summary: Update an OV pay token alias description: Update an OV pay token alias - value: + value: { - "ovPayToken": { + "ovPayToken": + { "customerProfileId": 1, "ovPayTokenId": 1, - "tokenType": { - "tokenTypeId": 1, - "name": "EMV" - }, + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, "alias": "Mijn nieuwe tokennaam", - "tokenStatus": { - "tokenStatusId": 2, - "name": "Active" - }, + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", "replacedByTokenId": 0, "autoReloadRegistration": null, "ePurse": null, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", - "method": "GET" + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "method": "POST", + }, }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", - "method": "POST" - } - } - } + }, } - Update an OV pay token full: + Update an OV pay token full: summary: Update an OV pay token full description: Update an OV pay token full - value: + value: { - "ovPayToken": { + "ovPayToken": + { "customerProfileId": 1, "ovPayTokenId": 1, - "tokenType": { - "tokenTypeId": 1, - "name": "EMV" - }, + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, "alias": "Mijn verloren pas", - "tokenStatus": { - "tokenStatusId": 5, - "name": "Suspended" - }, + "tokenStatus": + { "tokenStatusId": 5, "name": "Suspended" }, "expirationDate": "2028-08-31T23:59:00+02:00", "replacedByTokenId": 0, "autoReloadRegistration": null, "ePurse": null, - "personalAccountData":{ - "name": null, - "birthdate": null, - "photo": null - }, - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", - "method": "GET" + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "method": "GET", + }, + "create_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "method": "POST", + }, }, - "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "PATCH" - }, - "replace_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST" - }, - "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "DELETE" - }, - "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", - "method": "GET" - }, - "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", - "method": "GET" - }, - "create_tokenPersonalization": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", - "method": "POST" - } - } - } + }, } delete: tags: - Customers - parameters: - - name: X-HTM-JWT-AUTH-HEADER - in: header + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header schema: type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c required: false description: The JWT of a customer in case of touchpoint were customer logs in themselves - - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER - in: header + - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER + in: header schema: type: string example: feaaef83-a551-4283-8419-340b1ada3b55 required: false - description: The customerProfileId of a customer in the case of the SMP - - name: X-HTM-ROLE-HEADER - in: header + description: The customerProfileId of a customer in the case of the SMP + - name: X-HTM-ROLE-HEADER + in: header schema: type: string example: Customer - required: false + required: false - name: ovpayTokenId - in: path + in: path schema: type: integer example: 1 @@ -1672,12 +1696,12 @@ paths: type: integer example: 1 responses: - '200': + "200": description: OK content: application/json: schema: - $ref: '#/components/schemas/OvPayTokenProductInstancesResponse' + $ref: "#/components/schemas/OvPayTokenProductInstancesResponse" examples: getEmptyProductInstances: summary: No product-instances found on token @@ -1687,38 +1711,196 @@ paths: summary: One non-renewable product-instance value: { - "productInstances": [ - { - "productId": 1, - "name": "HTM 90% Korting", - "status": "Active", - "isRenewable": true, - "productCategory": { - "productCategoryId": 1, - "name": "Kortingsabonnement" + "productInstances": + [ + { + "productId": 1, + "name": "HTM 90% Korting", + "status": "Active", + "isRenewable": true, + "productCategory": + { + "productCategoryId": 1, + "name": "Kortingsabonnement", + }, + "fromInclusive": "2024-11-25T13:25:00+01:00", + "untilInclusive": "2024-12-25T03:59:59+01:00", + "orderId": "501B17EF-36C4-4039-B92C-6517969B464E", + "orderLineId": "38B17EF-36C4-4039-B92C-4817969B464E", + "contractId": "56B17EF-C436-9043-B76C-481797WEB464F", + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances/1", + "method": "GET", + }, + "get_order": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/orders/501B17EF-36C4-4039-B92C-6517969B464E", + "method": "GET", + }, + "get_contract": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F", + "method": "GET", + }, + }, }, - "fromInclusive": "2024-11-25T13:25:00+01:00", - "untilInclusive": "2024-12-25T03:59:59+01:00", - "orderId": "501B17EF-36C4-4039-B92C-6517969B464E", - "orderLineId": "38B17EF-36C4-4039-B92C-4817969B464E", - "contractId": "56B17EF-C436-9043-B76C-481797WEB464F", - "_links": { - "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances/1", - "method": "GET" - }, - "get_order": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/orders/501B17EF-36C4-4039-B92C-6517969B464E", - "method": "GET" - }, - "get_contract": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F", - "method": "GET" - } - } - } - ] + ], } + /customers/tokens/{ovPayTokenId}/compare: + parameters: + - name: ovPayTokenId + in: path + required: true + style: simple + description: Id of the OVpay token for the LHS of the comparison. + schema: + type: integer + example: 1 + post: + summary: Compare attributes of two OVpay tokens. + description: |- + Compare the attributes of an existing OVpay token in the customer profile with the + attributes of a new OVpay token. This operation compares the following attributes: + - todo + tags: + - Customers + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Compare with an existing OVpay token: + value: { "ovPayTokenId": 2 } + Compare with an XBOT: + value: { "xbot": "e35977b2-52bb-48ef-aca8-297b2c1d5058" } + Compare with an XTAT: + value: { "xtat": "e35977b2-52bb-48ef-aca8-297b2c1d5058" } + Compare with SRID + amount: + value: + { "serviceReferenceId": "NLOV1234567ABCDEFG", "amount": 230 } + Compare with OVpas number + verification code: + value: { "ovpasNumber": "OV34567", "verificationCode": "1234" } + Complete reqeuest body (for development only): + value: + { + "ovPayTokenId": 2, + "xbot": "e35977b2-52bb-48ef-aca8-297b2c1d5058", + "xtat": "e35977b2-52bb-48ef-aca8-297b2c1d5058", + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 230, + "ovpasNumber": "OV34567", + "verificationCode": "1234", + } + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Comparison result for transferable token: + value: + { + "oldOvPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + }, + "newOvPayToken": + { + "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "expirationDate": "2028-02-01", + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + }, + "isTansferable": true, + "transferableObjects": + { + "tokenType": true, + "expirationDate": true, + "autoReloadRegistration": true, + "ePurse": true, + "personalAccountData": + { + "name": true, + "birthdate": true, + "photo": true, + }, + }, + "_links": + { + "transfer": + { + "href": "https://services.dev.api.htm.nl/abt/touchpoint/1.0/customers/tokens/1/transfer", + "method": "POST", + }, + }, + } + Comparison result for non-transferable token: + value: + { + "oldOvPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + }, + "newOvPayToken": + { + "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "expirationDate": "2028-02-01", + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + }, + "isTansferable": false, + "transferableObjects": + { + "tokenType": true, + "expirationDate": true, + "autoReloadRegistration": true, + "ePurse": false, + "personalAccountData": + { + "name": false, + "birthdate": false, + "photo": false, + }, + }, + "_links": {}, + } + components: schemas: unavailable: @@ -1771,7 +1953,7 @@ components: dateOfBirth: type: string format: date - example: '2023-02-01' + example: "2023-02-01" emailAddress: type: string format: email @@ -1850,7 +2032,7 @@ components: type: object properties: phoneTypeId: - type: integer + type: integer example: 1 name: type: string @@ -1895,8 +2077,8 @@ components: type: string example: GET create_customer_status: - type: object - description: ONLY ALLOWED FOR SMP - Create a new customer status + type: object + description: ONLY ALLOWED FOR SMP - Create a new customer status properties: href: type: string @@ -1930,7 +2112,7 @@ components: example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens method: type: string - example: POST + example: POST OvPayTokensResponse: type: object required: @@ -1944,7 +2126,7 @@ components: ovPayTokenId: type: integer example: 1 - tokenType: + tokenType: type: object properties: tokenTypeId: @@ -1968,7 +2150,7 @@ components: expirationDate: type: string format: date - example: '2023-02-01' + example: "2023-02-01" replacedByTokenId: type: integer example: 1 @@ -1983,7 +2165,7 @@ components: example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1 method: type: string - example: GET + example: GET partial_edit: type: object description: External touchpoints are only allowed to change alias - SMP can also change tokenStatus @@ -2041,12 +2223,12 @@ components: productId: type: integer example: 1 - name: + name: type: string example: HTM 90% Korting status: type: string - enum: [ "Active", "Ended", "Refunded" ] + enum: ["Active", "Ended", "Refunded"] example: Active isRenewable: type: boolean @@ -2060,7 +2242,7 @@ components: example: 1 name: type: string - example: Kortingsabonnement + example: Kortingsabonnement fromInclusive: type: string format: date-time-offset @@ -2068,7 +2250,7 @@ components: untilInclusive: type: string format: date-time-offset - description: >- + description: >- If not present, this product-instance represents a subscription/contract without a real end date. If present, it can be either the natural end date or the refund timestamp. example: "2024-12-25T03:59:59+01:00" orderId: @@ -2116,8 +2298,3 @@ components: method: type: string example: GET - - - - - From 14228a5d66fd247e12a2d8ab3ff770d6d9e06466 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 30 Apr 2025 15:42:00 +0200 Subject: [PATCH 02/13] OVPAY-1742 - Updated description for /compare endpoint. --- src/openapi/customers/SE-customers.yaml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index e181edb..53b13a9 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -1763,8 +1763,23 @@ paths: summary: Compare attributes of two OVpay tokens. description: |- Compare the attributes of an existing OVpay token in the customer profile with the - attributes of a new OVpay token. This operation compares the following attributes: - - todo + attributes of a new OVpay token. The new token can be passed using one of the following + methods: + + - Compare with an existing OVpay token + - Compare with an XBOT + - Compare with an XTAT + - Compare with SRID + amount + - Compare with OVpas number + verification code + + The comparison results are returned in the response body. Comparison is made on the following + attributes: + + - Token type + - Experation date + - Auto reload registration + - E-purse + - PAD (name, birthdate, photo) tags: - Customers requestBody: From 59db7d7323b042c2fb13d768b720c0e2e23d4899 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 30 Apr 2025 16:02:20 +0200 Subject: [PATCH 03/13] OVPAY-1742 - Added endpoint for transfer. --- src/openapi/customers/SE-customers.yaml | 164 +++++++++++++++++++++++- 1 file changed, 157 insertions(+), 7 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 53b13a9..7333668 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -1776,7 +1776,9 @@ paths: attributes: - Token type + - Token status (only if target token is known in the customer profile) - Experation date + - Instantiated GBO products - Auto reload registration - E-purse - PAD (name, birthdate, photo) @@ -1839,9 +1841,14 @@ paths: }, "newOvPayToken": { + "customerProfileId": null, + "ovPayTokenId": null, "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": null, + "tokenStatus": null, "expirationDate": "2028-02-01", + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -1851,15 +1858,13 @@ paths: "transferableObjects": { "tokenType": true, + "tokenStatus": true, "expirationDate": true, + "productInstances": true, "autoReloadRegistration": true, "ePurse": true, "personalAccountData": - { - "name": true, - "birthdate": true, - "photo": true, - }, + { "name": true, "birthdate": true, "photo": true }, }, "_links": { @@ -1891,19 +1896,26 @@ paths: }, "newOvPayToken": { + "customerProfileId": null, + "ovPayTokenId": null, "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": null, + "tokenStatus": null, "expirationDate": "2028-02-01", + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": { "name": null, "birthdate": null, "photo": null }, }, - "isTansferable": false, + "isTansferable": true, "transferableObjects": { "tokenType": true, + "tokenStatus": true, "expirationDate": true, + "productInstances": true, "autoReloadRegistration": true, "ePurse": false, "personalAccountData": @@ -1915,7 +1927,145 @@ paths: }, "_links": {}, } - + /customers/tokens/{ovPayTokenId}/transfer: + parameters: + - name: ovPayTokenId + in: path + required: true + style: simple + description: Id of the OVpay token for the LHS of the comparison. + schema: + type: integer + example: 1 + post: + summary: Transfer old OVpay token to new OVpay token. + description: |- + Transfers all products, e-purse and personal account data of an existing OVpay token + to a new OVpay token. The new token will also be persisted in the profile as a replacement + of the old token. + tags: + - Customers + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Transfer to an existing OVpay token: + value: { "ovPayTokenId": 2 } + Transfer to a new token by XTAT: + value: + { + "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "alias": "MyToken", + } + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + New token as a result of a succesful transfer: + value: + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": + { + "autoReloadAmount": 500, + "retailerReferenceId": "abc", + "arrit": "425f7fc2-1103-4822-9c79-7c4aaa2fb6aa", + "autoReloadRegistrationStatus": "ACTIVE", + "autoReloadRegistrationStartDateTime": "2024-06-02T15:03:46Z", + }, + "ePurse": + { + "e-PurseBalance": + { "currency": "EUR", "amount": 350 }, + "status": "ACTIVE", + "originDate": "2019-07-16T11:00:00+02:00", + }, + "personalAccountData": + { + "name": + { + "inaccuracyFlag": false, + "inaccuracyFlagReason": null, + "inaccuracyFlagSetCounter": 0, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "birthdate": + { + "inaccuracyFlag": false, + "inaccuracyFlagReason": null, + "inaccuracyFlagSetCounter": 0, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "photo": + { + "inaccuracyFlag": false, + "inaccuracyFlagReason": null, + "inaccuracyFlagSetCounter": 0, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "PATCH", + }, + "replace_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", + "method": "POST", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "method": "GET", + }, + "update_tokenPersonalization": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "method": "PUT", + }, + }, + } components: schemas: unavailable: From 079c16763ef52f0d83098b49d6747ee64504c082 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 30 Apr 2025 17:04:34 +0200 Subject: [PATCH 04/13] OVPAY-1742 - Added examples for unhappy flow. --- src/openapi/customers/SE-customers.yaml | 106 ++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 7333668..59269f4 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -345,6 +345,11 @@ paths: "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/tokenPersonalizations?ovpaytokenId=1", "method": "POST", }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "method": "POST", + }, }, }, ], @@ -1035,6 +1040,11 @@ paths: "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", "method": "POST", }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "method": "POST", + }, }, }, "_links": @@ -1258,6 +1268,11 @@ paths: "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", "method": "POST", }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "method": "POST", + }, }, }, } @@ -1394,6 +1409,11 @@ paths: "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=10", "method": "POST", }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "method": "POST", + }, }, }, } @@ -1517,6 +1537,11 @@ paths: "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", "method": "POST", }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "method": "POST", + }, }, }, } @@ -1578,6 +1603,11 @@ paths: "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", "method": "POST", }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "method": "POST", + }, }, }, } @@ -1639,6 +1669,11 @@ paths: "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", "method": "POST", }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "method": "POST", + }, }, }, } @@ -1927,6 +1962,77 @@ paths: }, "_links": {}, } + "404": + description: Not found + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Old token not found in profile: + value: + { + "type": "https://htm.nl/api/v1/probs/notfound", + "title": "The item you requested was not found.", + "detail": "The old token was not found in the customer profile.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "The old token was not found in the customer profile.", + "pointer": "#/0/ovPayTokenId", + "ovPayTokenId": 123, + }, + ], + } + New token not found in profile: + value: + { + "type": "https://htm.nl/api/v1/probs/notfound", + "title": "The item you requested was not found.", + "detail": "The new token was not found in the customer profile.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "The new token was not found in the customer profile.", + "pointer": "#/0/ovPayTokenId", + "ovPayTokenId": 123, + }, + ], + } + XTAT for new token not found in GBO: + value: + { + "type": "https://htm.nl/api/v1/probs/notfound", + "title": "The item you requested was not found.", + "detail": "The new token was not found in GBO:.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "XTAT for the new token was not found in GBO.", + "pointer": "#/0/xtat", + "xtat": "e35977b2-52bb-48ef-aca8-297b2c1d5058", + }, + ], + } + SRID for new token not found in GBO: + value: + { + "type": "https://htm.nl/api/v1/probs/notfound", + "title": "The item you requested was not found.", + "detail": "The new token was not found in GBO:.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "Service Reference ID for the new token was not found in GBO.", + "pointer": "#/0/serviceReferenceId", + "serviceReferenceId": "NLOV1234567ABCDEFG", + }, + ], + } /customers/tokens/{ovPayTokenId}/transfer: parameters: - name: ovPayTokenId From 946ba3f898ce97ace591bd23cc0a637fa4511136 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 2 May 2025 14:57:11 +0200 Subject: [PATCH 05/13] OVPAY-1742 - Added examples for unhappy transfer flow. --- src/openapi/customers/SE-customers.yaml | 160 +++++++++++++++++++++++- 1 file changed, 159 insertions(+), 1 deletion(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 59269f4..24e3b5a 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -2044,8 +2044,9 @@ paths: type: integer example: 1 post: - summary: Transfer old OVpay token to new OVpay token. + summary: "**INTEGRATIELAAG** Transfer old OVpay token to new OVpay token." description: |- + **Note that this is an integratielaag endpoint, not a service eninge endpoint!** Transfers all products, e-purse and personal account data of an existing OVpay token to a new OVpay token. The new token will also be persisted in the profile as a replacement of the old token. @@ -2172,6 +2173,163 @@ paths: }, }, } + "404": + description: Not found + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Old token not found in profile: + value: + { + "type": "https://htm.nl/api/v1/probs/notfound", + "title": "The item you requested was not found.", + "detail": "The old token was not found in the customer profile.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "The old token was not found in the customer profile.", + "pointer": "#/0/ovPayTokenId", + "ovPayTokenId": 123, + }, + ], + } + New token not found in profile: + value: + { + "type": "https://htm.nl/api/v1/probs/notfound", + "title": "The item you requested was not found.", + "detail": "The new token was not found in the customer profile.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "The new token was not found in the customer profile.", + "pointer": "#/0/ovPayTokenId", + "ovPayTokenId": 123, + }, + ], + } + XTAT for new token not found in GBO: + value: + { + "type": "https://htm.nl/api/v1/probs/notfound", + "title": "The item you requested was not found.", + "detail": "The new token was not found in GBO:.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "XTAT for the new token was not found in GBO.", + "pointer": "#/0/xtat", + "xtat": "e35977b2-52bb-48ef-aca8-297b2c1d5058", + }, + ], + } + SRID for new token not found in GBO: + value: + { + "type": "https://htm.nl/api/v1/probs/notfound", + "title": "The item you requested was not found.", + "detail": "The new token was not found in GBO:.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "Service Reference ID for the new token was not found in GBO.", + "pointer": "#/0/serviceReferenceId", + "serviceReferenceId": "NLOV1234567ABCDEFG", + }, + ], + } + "405": + description: Not allowed + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Old token is wrong token type: + value: + { + "type": "https://htm.nl/api/v1/probs/notallowed", + "title": "The transfer you requested was not allowed.", + "detail": "The old token has wrong token type.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "The old token has token type OV-pas physical.", + "pointer": "#/0/ovPayToken/tokenTypeId", + "tokenTypeId": 2, + }, + ], + } + Old token has wrong token status: + value: + { + "type": "https://htm.nl/api/v1/probs/notallowed", + "title": "The transfer you requested was not allowed.", + "detail": "The old token has wrong token status.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "The old token has token status replaced.", + "pointer": "#/0/ovPayToken/tokenStatusId", + "tokenStatusId": 4, + }, + ], + } + New token is expired: + value: + { + "type": "https://htm.nl/api/v1/probs/notallowed", + "title": "The transfer you requested was not allowed.", + "detail": "The new token is expired.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "The new token is expired.", + "pointer": "#/0/ovPayToken/expirationDate", + "experiationDate": 2022-01-01, + }, + ], + } + One or more GBO product instances not transferable: + value: + { + "type": "https://htm.nl/api/v1/probs/notallowed", + "title": "The transfer you requested was not allowed.", + "detail": "One or more GBO product instances are not transferable.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "One or more GBO product instances are not transferable", + "pointer": "#/0/ovPayToken/packageTemplateId", + "packageTemplateId": "33613", + }, + ], + } + One or more PAD attributes marked: + value: + { + "type": "https://htm.nl/api/v1/probs/notallowed", + "title": "The transfer you requested was not allowed.", + "detail": "One or more PAD attributes are not transferable.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "PAD attribute birthdate is marked on the old token", + "pointer": "#/0/ovPayToken/padAttributes/birthdate", + }, + ], + } components: schemas: unavailable: From d8f9706d7660f1d09aaf30944de8c4f5ac09aefe Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 2 May 2025 15:08:06 +0200 Subject: [PATCH 06/13] OVPAY-1742 - Added replace by XTAT example. --- src/openapi/customers/SE-customers.yaml | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 24e3b5a..1b2b370 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -1171,9 +1171,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Replace with new EMV token: - summary: Replace with new token - description: Replace with new token + Replace with new EMV token by SRID: + summary: Replace with new token by SRID + description: Replace with new token by service reference ID and amount. value: { "ovPayToken": @@ -1185,13 +1185,13 @@ paths: "alias": "Nieuw token", }, } - Replace with existing EMV token: - summary: Replace with existing token - description: Replace with existing token + Replace with existing EMV token from profile: + summary: Replace with existing token from profile + description: Replace with existing token from customer profile. value: { "ovPayToken": { "newTokenId": 10 } } Replace with new OV pas token: summary: Replace with new OV pas token - description: Replace with new OV pas token + description: Replace with new OV pas token by OV-pas number. value: { "ovPayToken": @@ -1202,6 +1202,17 @@ paths: "alias": "Mijn token", }, } + Replace with new token by XTAT: + summary: Replace with new token by XTAT + description: Replace with new token by XTAT. + value: + { + "ovPayToken": + { + "xtat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "alias": "Mijn token", + }, + } responses: "201": description: Created From c692718fbb07dce6b08ac68778c0e8eb8726e6ac Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 6 May 2025 14:28:40 +0200 Subject: [PATCH 07/13] OVPAY-1742 - Added PAD OTP and PAD email address to transfer request body. --- src/openapi/customers/SE-customers.yaml | 40 +++++++++++++++++++++---- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 1b2b370..00bb076 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -2069,13 +2069,43 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Transfer to an existing OVpay token: - value: { "ovPayTokenId": 2 } - Transfer to a new token by XTAT: + Transfer to an existing OVpay token without existing PAD: value: { - "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", - "alias": "MyToken", + "oldOvPayToken": { "padOtp": "123456" }, + "newOvPayToken": + { + "ovPayTokenId": 2, + "padEmailAddress": "jandevries@outlook.com", + }, + } + Transfer to an existing OVpay token with existing PAD: + value: + { + "oldOvPayToken": { "padOtp": "123456" }, + "newOvPayToken": { "ovPayTokenId": 2, "padOtp": "678901" }, + } + Transfer to a new token by XTAT without existing PAD: + value: + { + "oldOvPayToken": { "padOtp": "123456" }, + "newOvPayToken": + { + "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "alias": "MyToken", + "padEmailAddress": "jandevries@outlook.com", + }, + } + Transfer to a new token by XTAT with existing PAD: + value: + { + "oldOvPayToken": { "padOtp": "123456" }, + "newOvPayToken": + { + "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "alias": "MyToken", + "padOtp": "678901", + }, } responses: "200": From 499442b3d9b04200a38bdcd576d7464f9f8e2ab1 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 6 May 2025 15:02:22 +0200 Subject: [PATCH 08/13] OVPAY-1742 - Added examples for transferring existing tokens without PAD. --- src/openapi/customers/SE-customers.yaml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 00bb076..d215081 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -2069,7 +2069,23 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Transfer to an existing OVpay token without existing PAD: + Transfer of a token without PAD to an existing OVpay token: + value: + { + "oldOvPayToken": {}, + "newOvPayToken": { "ovPayTokenId": 2 }, + } + Transfer of a token without PAD to a new OVpay token by XTAT: + value: + { + "oldOvPayToken": {}, + "newOvPayToken": + { + "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "alias": "MyToken", + }, + } + Transfer of a token with PAD to an existing OVpay token without existing PAD: value: { "oldOvPayToken": { "padOtp": "123456" }, @@ -2079,13 +2095,13 @@ paths: "padEmailAddress": "jandevries@outlook.com", }, } - Transfer to an existing OVpay token with existing PAD: + Transfer of a token with PAD to an existing OVpay token with existing PAD: value: { "oldOvPayToken": { "padOtp": "123456" }, "newOvPayToken": { "ovPayTokenId": 2, "padOtp": "678901" }, } - Transfer to a new token by XTAT without existing PAD: + Transfer of a token with PAD to a new token by XTAT without existing PAD: value: { "oldOvPayToken": { "padOtp": "123456" }, @@ -2096,7 +2112,7 @@ paths: "padEmailAddress": "jandevries@outlook.com", }, } - Transfer to a new token by XTAT with existing PAD: + Transfer of a token with PAD to a new token by XTAT with existing PAD: value: { "oldOvPayToken": { "padOtp": "123456" }, From 8cced0cbd0ff5dffa982c4e99ece6aed69506a3d Mon Sep 17 00:00:00 2001 From: Max Martens Date: Fri, 9 May 2025 16:52:44 +0200 Subject: [PATCH 09/13] WIP --- src/openapi/customers/SE-customers.yaml | 632 ++++++++++++++---------- 1 file changed, 369 insertions(+), 263 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index d215081..d32e34f 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -145,7 +145,7 @@ paths: application/json: example: { - "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers", + "type": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers", "apiErrorCode": "400.1", "title": "Niet gevonden", "detail": "Klant niet gevonden", @@ -158,7 +158,7 @@ paths: application/json: example: { - "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers", + "type": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers", "apiErrorCode": "409.1", "title": "Meer dan 1 klantprofiel gevonden", "detail": "Meer dan 1 klantprofiel gevonden. Verfijn je zoekcriteria.", @@ -278,7 +278,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "GET", }, }, @@ -293,13 +293,13 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 2, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -312,42 +312,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/tokenPersonalizations?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", "method": "POST", }, "compare_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare", "method": "POST", }, }, @@ -357,7 +352,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "GET", }, }, @@ -372,14 +367,14 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 2, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": { @@ -398,37 +393,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", + "method": "POST", + }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/51compare", "method": "POST", }, }, @@ -438,7 +433,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "GET", }, }, @@ -453,14 +448,14 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 2, + "replacedByTokenId": null, "autoReloadRegistration": { "autoReloadAmount": 500, @@ -513,38 +508,38 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", "method": "GET", }, - "update_tokenPersonalization": + "update_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "PUT", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", + "method": "PATCH", + }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare", + "method": "POST", }, }, }, @@ -553,7 +548,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "GET", }, }, @@ -568,14 +563,14 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 2, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": { @@ -603,38 +598,38 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", "method": "GET", }, - "update_tokenPersonalization": + "update_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "PUT", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", + "method": "PATCH", + }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare", + "method": "POST", }, }, }, @@ -643,7 +638,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "GET", }, }, @@ -658,14 +653,14 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 1, - "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 2, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": { @@ -711,38 +706,38 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", "method": "GET", }, - "update_tokenPersonalization": + "update_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "PUT", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", + "method": "PATCH", + }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare", + "method": "POST", }, }, }, @@ -751,7 +746,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "GET", }, }, @@ -773,7 +768,7 @@ paths: "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -813,7 +808,7 @@ paths: "tokenStatus": { "tokenStatusId": 4, "name": "On stock" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 2, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -833,7 +828,7 @@ paths: "tokenStatus": { "tokenStatusId": 5, "name": "Suspended" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -856,7 +851,7 @@ paths: "name": "Removed by customer (*)", }, "expirationDate": "2028-02-01", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -876,7 +871,7 @@ paths: "tokenStatus": { "tokenStatusId": 1, "name": "Retired" }, "expirationDate": "2025-02-01", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -896,7 +891,7 @@ paths: "tokenStatus": { "tokenStatusId": 7, "name": "Renewed Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -911,7 +906,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "GET", }, }, @@ -991,6 +986,7 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 1, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovPpasNumber": null, @@ -998,7 +994,7 @@ paths: "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -1007,42 +1003,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", "method": "POST", }, "compare_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare", "method": "POST", }, }, @@ -1051,7 +1042,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "POST", }, }, @@ -1065,6 +1056,7 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 1, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "lastDigits": null, @@ -1073,7 +1065,7 @@ paths: "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": { @@ -1088,37 +1080,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", + "method": "POST", + }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare", "method": "POST", }, }, @@ -1127,7 +1119,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", "method": "POST", }, }, @@ -1230,6 +1222,7 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, @@ -1237,7 +1230,7 @@ paths: "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -1246,42 +1239,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", "method": "POST", - }, + }, "compare_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare", "method": "POST", }, }, @@ -1296,6 +1284,7 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "lastDigits": null, @@ -1304,7 +1293,7 @@ paths: "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": { @@ -1319,37 +1308,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", + "method": "POST", + }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare", "method": "POST", }, }, @@ -1371,6 +1360,7 @@ paths: { "customerProfileId": 1, "ovPayTokenId": 10, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, @@ -1378,7 +1368,7 @@ paths: "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -1387,42 +1377,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=10", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=10", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=10", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", "method": "POST", - }, + }, "compare_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/compare", "method": "POST", }, }, @@ -1498,7 +1483,8 @@ paths: "ovPayToken": { "customerProfileId": 1, - "ovPayTokenId": 1, + "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, @@ -1506,7 +1492,7 @@ paths: "tokenStatus": { "tokenStatusId": 5, "name": "Suspended" }, "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -1515,42 +1501,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", "method": "POST", - }, + }, "compare_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare", "method": "POST", }, }, @@ -1564,7 +1545,8 @@ paths: "ovPayToken": { "customerProfileId": 1, - "ovPayTokenId": 1, + "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, @@ -1572,7 +1554,7 @@ paths: "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -1581,42 +1563,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811", "method": "POST", - }, + }, "compare_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare", "method": "POST", }, }, @@ -1630,7 +1607,8 @@ paths: "ovPayToken": { "customerProfileId": 1, - "ovPayTokenId": 1, + "ovPayTokenId": 5, + "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "lastDigits": null, "ovpasNumber": null, @@ -1638,7 +1616,7 @@ paths: "tokenStatus": { "tokenStatusId": 5, "name": "Suspended" }, "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": 0, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -1647,42 +1625,37 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", "method": "GET", }, - "create_tokenPersonalization": + "add_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/e35977b2-52bb-48ef-aca8-297b2c1d5058", "method": "POST", - }, + }, "compare_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/compare", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare", "method": "POST", }, }, @@ -1778,17 +1751,17 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances/1", "method": "GET", }, "get_order": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/orders/501B17EF-36C4-4039-B92C-6517969B464E", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/orders/501B17EF-36C4-4039-B92C-6517969B464E", "method": "GET", }, "get_contract": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F", "method": "GET", }, }, @@ -1838,10 +1811,10 @@ paths: examples: Compare with an existing OVpay token: value: { "ovPayTokenId": 2 } - Compare with an XBOT: - value: { "xbot": "e35977b2-52bb-48ef-aca8-297b2c1d5058" } - Compare with an XTAT: - value: { "xtat": "e35977b2-52bb-48ef-aca8-297b2c1d5058" } + Compare with an xBOT: + value: { "xBot": "e35977b2-52bb-48ef-aca8-297b2c1d5058" } + Compare with an xTAT: + value: { "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058" } Compare with SRID + amount: value: { "serviceReferenceId": "NLOV1234567ABCDEFG", "amount": 230 } @@ -1851,8 +1824,8 @@ paths: value: { "ovPayTokenId": 2, - "xbot": "e35977b2-52bb-48ef-aca8-297b2c1d5058", - "xtat": "e35977b2-52bb-48ef-aca8-297b2c1d5058", + "xBot": "e35977b2-52bb-48ef-aca8-297b2c1d5058", + "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058", "serviceReferenceId": "NLOV1234567ABCDEFG", "amount": 230, "ovpasNumber": "OV34567", @@ -1866,20 +1839,20 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - Comparison result for transferable token: + Transferable token: value: { "oldOvPayToken": { "customerProfileId": 1, "ovPayTokenId": 1, - "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 2, + "replacedByTokenId": null, "autoReloadRegistration": null, "ePurse": null, "personalAccountData": @@ -1889,7 +1862,7 @@ paths: { "customerProfileId": null, "ovPayTokenId": null, - "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "alias": null, "tokenStatus": null, @@ -1921,14 +1894,14 @@ paths: }, }, } - Comparison result for non-transferable token: + Non-transferable token (marked PAD): value: { "oldOvPayToken": { "customerProfileId": 1, "ovPayTokenId": 1, - "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "alias": "MyToken", "tokenStatus": @@ -1938,13 +1911,44 @@ paths: "autoReloadRegistration": null, "ePurse": null, "personalAccountData": - { "name": null, "birthdate": null, "photo": null }, + { + "name": + { + "inaccuracyFlag": true, + "inaccuracyFlagReason": "T.B.D", + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "birthdate": + { + "inaccuracyFlag": true, + "inaccuracyFlagReason": "T.B.D", + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "photo": + { + "inaccuracyFlag": true, + "inaccuracyFlagReason": null, + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + } }, "newOvPayToken": { "customerProfileId": null, "ovPayTokenId": null, - "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "alias": null, "tokenStatus": null, @@ -1955,7 +1959,85 @@ paths: "personalAccountData": { "name": null, "birthdate": null, "photo": null }, }, - "isTansferable": true, + "isTansferable": false, + "transferableObjects": + { + "tokenType": true, + "tokenStatus": true, + "expirationDate": true, + "productInstances": true, + "autoReloadRegistration": true, + "ePurse": true, + "personalAccountData": + { + "name": false, + "birthdate": false, + "photo": false, + }, + }, + "_links": {}, + } + Non-transferable token (different age profile): + value: + { + "oldOvPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": + { + "inaccuracyFlag": false, + "inaccuracyFlagReason": "T.B.D", + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "photo": null + } + }, + "newOvPayToken": + { + "customerProfileId": null, + "ovPayTokenId": null, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": null, + "tokenStatus": null, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": + { + "inaccuracyFlag": false, + "inaccuracyFlagReason": "T.B.D", + "inaccuracyFlagSetCounter": 1, + "isValidated": false, + "changeCounter": 0, + "maxUpdatesVerificationCount": 0, + "lastChangeDate": "2024-08-24T14:15:22Z", + }, + "photo": null + } + }, + "isTansferable": false, "transferableObjects": { "tokenType": true, @@ -1966,13 +2048,36 @@ paths: "ePurse": false, "personalAccountData": { - "name": false, + "name": true, "birthdate": false, - "photo": false, + "photo": true, }, }, "_links": {}, } + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + New token already present in other customer profile: + value: + { + "type": "https://htm.nl/api/v1/probs/badrequest", + "title": "Bad Request", + "detail": "New token already present in other customer profile.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "New token already present in other customer profile.", + "pointer": "#/0/ovPayTokenId", + "ovPayTokenId": 2, + }, + ], + } "404": description: Not found content: @@ -1992,7 +2097,7 @@ paths: { "detail": "The old token was not found in the customer profile.", "pointer": "#/0/ovPayTokenId", - "ovPayTokenId": 123, + "ovPayTokenId": 1, }, ], } @@ -2008,7 +2113,7 @@ paths: { "detail": "The new token was not found in the customer profile.", "pointer": "#/0/ovPayTokenId", - "ovPayTokenId": 123, + "ovPayTokenId": 2, }, ], } @@ -2142,7 +2247,7 @@ paths: "alias": "MyToken", "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2028-02-01", - "replacedByTokenId": 2, + "replacedByTokenId": null, "autoReloadRegistration": { "autoReloadAmount": 500, @@ -2195,39 +2300,40 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", "method": "GET", }, "partial_edit": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "PATCH", }, - "replace_token": - { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", - "method": "POST", - }, "delete_token": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", "method": "DELETE", }, "get_productinstances": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", "method": "GET", }, "get_trips": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", "method": "GET", }, - "update_tokenPersonalization": + "update_personal-data": { - "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1", - "method": "PUT", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/e7fa3392-646b-40e2-95a6-c417dc0b0969", + "method": "PATCH", }, + "compare_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare", + "method": "POST", + }, + }, } "404": @@ -2490,7 +2596,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/addresses/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/addresses/1 method: type: string example: GET @@ -2499,7 +2605,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/addresses/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/addresses/1 method: type: string example: DELETE @@ -2537,7 +2643,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/phones/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/phones/1 method: type: string example: GET @@ -2546,7 +2652,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/phones/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/phones/1 method: type: string example: DELETE @@ -2558,7 +2664,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers method: type: string example: GET @@ -2568,7 +2674,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/statuses + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/statuses method: type: string example: POST @@ -2577,7 +2683,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers method: type: string example: PATCH @@ -2586,7 +2692,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens method: type: string example: GET @@ -2595,7 +2701,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens method: type: string example: POST @@ -2648,7 +2754,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1 method: type: string example: GET @@ -2658,7 +2764,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1 method: type: string example: PATCH @@ -2667,7 +2773,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/replace method: type: string example: POST @@ -2676,7 +2782,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1 + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1 method: type: string example: DELETE @@ -2685,7 +2791,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances method: type: string example: GET @@ -2694,7 +2800,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips method: type: string example: GET @@ -2760,7 +2866,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances method: type: string example: GET @@ -2770,7 +2876,7 @@ components: href: type: string description: Always present for any HTM product-instance - example: https://api.integratielaag.nl/abt/1.0/touchpoint/orders/501B17EF-36C4-4039-B92C-6517969B464E + example: https://api.integratielaag.nl/abt/touchpoint/1.0/orders/501B17EF-36C4-4039-B92C-6517969B464E method: type: string example: GET @@ -2780,7 +2886,7 @@ components: href: type: string description: Only present for subscriptions/contracts - example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F method: type: string example: GET From 35edfa4c4f74bebffc12189a44f982af5673991e Mon Sep 17 00:00:00 2001 From: Max Martens Date: Fri, 9 May 2025 16:56:33 +0200 Subject: [PATCH 10/13] WIP 2 --- src/openapi/customers/SE-customers.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index d32e34f..e1177f9 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -1155,8 +1155,8 @@ paths: type: integer example: 1 required: true - summary: Replace an OV paytoken with another - description: Replace an OV paytoken in the database for a given customer with another token + summary: Replace an OVpay token with another (+ transfer products) + description: Transfer products from one OVpay token to antother, and replace the tokens in the database requestBody: content: application/json: @@ -1796,11 +1796,12 @@ paths: - Token type - Token status (only if target token is known in the customer profile) - - Experation date + - Expiry date - Instantiated GBO products - Auto reload registration - E-purse - PAD (name, birthdate, photo) + - Age profile tags: - Customers requestBody: From aba341d14bc21cdabf00aa7898d5394f3b3b10a1 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Fri, 9 May 2025 17:01:03 +0200 Subject: [PATCH 11/13] Add two more examples (non transferable products and unsupported token type combination) --- src/openapi/customers/SE-customers.yaml | 96 +++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index e1177f9..63a655e 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -1895,6 +1895,102 @@ paths: }, }, } + Non-transferable token (products not compatible on new token): + value: + { + "oldOvPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + }, + "newOvPayToken": + { + "customerProfileId": null, + "ovPayTokenId": null, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": null, + "tokenStatus": null, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + }, + "isTansferable": false, + "transferableObjects": + { + "tokenType": true, + "tokenStatus": true, + "expirationDate": true, + "productInstances": false, + "autoReloadRegistration": true, + "ePurse": true, + "personalAccountData": + { "name": true, "birthdate": true, "photo": true }, + }, + "_links": {}, + } + Non-transferable token (unsupported token type combination): + value: + { + "oldOvPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + }, + "newOvPayToken": + { + "customerProfileId": null, + "ovPayTokenId": null, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": null, + "tokenStatus": null, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + }, + "isTansferable": false, + "transferableObjects": + { + "tokenType": false, + "tokenStatus": true, + "expirationDate": true, + "productInstances": true, + "autoReloadRegistration": true, + "ePurse": true, + "personalAccountData": + { "name": true, "birthdate": true, "photo": true }, + }, + "_links": {}, + } Non-transferable token (marked PAD): value: { From b7ff9055e5e6687ecb261d05e4377069853a2395 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Fri, 9 May 2025 17:19:18 +0200 Subject: [PATCH 12/13] Finish /transfer spec, add schema for request body for /compare and /transfer --- src/openapi/customers/SE-customers.yaml | 119 +++++++++++++++++++++--- 1 file changed, 105 insertions(+), 14 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 63a655e..be828a7 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -1808,7 +1808,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" + $ref: "#/components/schemas/CompareRequest" examples: Compare with an existing OVpay token: value: { "ovPayTokenId": 2 } @@ -2259,8 +2259,8 @@ paths: post: summary: "**INTEGRATIELAAG** Transfer old OVpay token to new OVpay token." description: |- - **Note that this is an integratielaag endpoint, not a service eninge endpoint!** - Transfers all products, e-purse and personal account data of an existing OVpay token + **Note that this is an integratielaag endpoint, not a Service Engine endpoint!** + First transfers all personal account data (if present), then all products, of an existing OVpay token to a new OVpay token. The new token will also be persisted in the profile as a replacement of the old token. tags: @@ -2269,21 +2269,25 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" + $ref: "#/components/schemas/TransferRequest" examples: Transfer of a token without PAD to an existing OVpay token: value: { "oldOvPayToken": {}, - "newOvPayToken": { "ovPayTokenId": 2 }, + "newOvPayToken": + { + "ovPayTokenId": 2, + "alias": "MyToken" + } } - Transfer of a token without PAD to a new OVpay token by XTAT: + Transfer of a token without PAD to a new OVpay token by xTAT: value: { "oldOvPayToken": {}, "newOvPayToken": { - "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "alias": "MyToken", }, } @@ -2295,15 +2299,21 @@ paths: { "ovPayTokenId": 2, "padEmailAddress": "jandevries@outlook.com", + "alias": "MyToken", }, } Transfer of a token with PAD to an existing OVpay token with existing PAD: value: { "oldOvPayToken": { "padOtp": "123456" }, - "newOvPayToken": { "ovPayTokenId": 2, "padOtp": "678901" }, + "newOvPayToken": + { + "ovPayTokenId": 2, + "padOtp": "678901", + "alias": "MyToken" + }, } - Transfer of a token with PAD to a new token by XTAT without existing PAD: + Transfer of a token with PAD to a new token by xTAT without existing PAD with e-mail verification by OTP: value: { "oldOvPayToken": { "padOtp": "123456" }, @@ -2312,15 +2322,17 @@ paths: "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", "alias": "MyToken", "padEmailAddress": "jandevries@outlook.com", + "padOtp": "678901", }, } - Transfer of a token with PAD to a new token by XTAT with existing PAD: + Transfer of a token with PAD to a new token by SRID and amount, with existing PAD: value: { "oldOvPayToken": { "padOtp": "123456" }, "newOvPayToken": { - "xtat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 230, "alias": "MyToken", "padOtp": "678901", }, @@ -2452,7 +2464,7 @@ paths: { "detail": "The old token was not found in the customer profile.", "pointer": "#/0/ovPayTokenId", - "ovPayTokenId": 123, + "ovPayTokenId": 1, }, ], } @@ -2468,7 +2480,7 @@ paths: { "detail": "The new token was not found in the customer profile.", "pointer": "#/0/ovPayTokenId", - "ovPayTokenId": 123, + "ovPayTokenId": 2, }, ], } @@ -2555,7 +2567,7 @@ paths: { "detail": "The new token is expired.", "pointer": "#/0/ovPayToken/expirationDate", - "experiationDate": 2022-01-01, + "experiationDate": "2022-01-01", }, ], } @@ -2594,6 +2606,85 @@ components: schemas: unavailable: type: object + CompareRequest: + type: object + properties: + ovPayTokenId: + type: integer + example: 1 + description: When new token is already present in customer profile + xBOT: + type: string + format: uuid + example: "91641b54-056c-49ea-b598-ccde81d6c45a" + xTAT: + type: string + format: uuid + example: "4c2d60e2-cd03-4c80-ae70-573a301f0bff" + serviceReferenceId: + type: string + example: "NLOV1234567ABCDEFG" + description: When provided, amount is also required + amount: + type: integer + example: 100 + description: When provided, serviceReferenceId is also required + ovpasNumber: + type: string + example: "OV34567" + description: When provided, verificationCode is also required + verificationCode: + type: string + example: "1234" + description: When provided, ovpasNumber is also required + TransferRequest: + type: object + required: + - oldOvPayToken + - newOvPayToken + properties: + oldOvPayToken: + type: object + properties: + padOtp: + type: string + pattern: ^[0-9]{6}$ + example: "023456" + newOvPayToken: + type: object + properties: + ovPayTokenId: + type: integer + example: 1 + description: When new token is already present in customer profile + xBOT: + type: string + format: uuid + example: "91641b54-056c-49ea-b598-ccde81d6c45a" + xTAT: + type: string + format: uuid + example: "4c2d60e2-cd03-4c80-ae70-573a301f0bff" + serviceReferenceId: + type: string + example: "NLOV1234567ABCDEFG" + description: When provided, amount is also required + amount: + type: integer + example: 100 + description: When provided, serviceReferenceId is also required + padOtp: + type: string + pattern: ^[0-9]{6}$ + example: "123456" + description: Can be xTAT-based OTP (for existing PAD), or email-based OTP (for new PAD). In the latter case, padEmailAddress should be the same address as used for the OTP! + padEmailAddress: + type: string + format: email + example: 8Z9dG@example.com + alias: + type: string + example: MyNewToken CustomersResponse: type: object properties: From d280bfbad573106844047121eea014a9584e5cfd Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 12 May 2025 09:59:02 +0200 Subject: [PATCH 13/13] OVPAY-1742 - Fixed typo. --- src/openapi/customers/SE-customers.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index be828a7..df0854b 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -2567,7 +2567,7 @@ paths: { "detail": "The new token is expired.", "pointer": "#/0/ovPayToken/expirationDate", - "experiationDate": "2022-01-01", + "expiriationDate": "2022-01-01", }, ], }