From c1fbc0dc90bacd4faf38e855278ffd542933c2c5 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Tue, 27 Jan 2026 16:34:51 +0100 Subject: [PATCH 01/11] touchpoint V2 endpoints customer total --- src/openapi/customers/SE-customers-v2.yaml | 4545 ++++++++++++++++++++ 1 file changed, 4545 insertions(+) create mode 100644 src/openapi/customers/SE-customers-v2.yaml diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml new file mode 100644 index 0000000..7532a6d --- /dev/null +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -0,0 +1,4545 @@ +openapi: 3.0.1 +info: + title: Service Engine APIs for Customers + 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: "2.0" +servers: + - url: https://services.acc.api.htm.nl/abt/touchpoint/2.0 +tags: + - name: Customers + 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. +paths: + /customers: + get: + tags: + - Customers + summary: Get a customer profile based on search parameters + description: | + Get a profile based on search parameters. Only returns a profile if a single result matches for a customer + the parameters; when multiple results are found, additional search parameters are required to disambiguate. If role is klantenservice, multiple customers can be returned. + parameters: + - name: customerProfileId + in: query + schema: + type: integer + example: 1 + - name: customerNumber + in: query + schema: + type: integer + example: 1000001 + - name: customerStatusId + in: query + schema: + type: integer + example: 1 + - name: debtorNumber + in: query + schema: + type: integer + example: 100001 + - name: debtorStatusId + in: query + schema: + type: integer + example: 1 + - name: birthname + in: query + schema: + type: string + example: John + - name: surname + in: query + schema: + type: string + example: Doe + - name: emailAddress + in: query + schema: + type: string + format: email + example: john.doe@mymailprovider.com + - name: dateOfBirth + in: query + schema: + type: string + format: date + example: "2000-01-01" + - name: addressStreet + in: query + schema: + type: string + example: Sesamestreet + - name: addressHouseNumber + in: query + schema: + type: integer + example: 1 + - name: addressHouseNumberSuffix + in: query + schema: + type: string + example: A + - name: addressPostalCode + in: query + schema: + type: string + example: 1234 AB + - name: addressCity + in: query + schema: + type: string + example: The Hague + - name: addressCountry + in: query + schema: + type: string + example: The Netherlands + - name: phoneNumber + in: query + schema: + type: string + example: "0123456789" + - name: ovChipcardNumber + in: query + schema: + type: integer + example: 0123456789 + - name: ovChipcardAlias + in: query + schema: + type: string + example: My ovchipcard + - name: ovPayTokenNumber + in: query + schema: + type: integer + example: 0123456789 + - name: ovPayTokenAlias + in: query + schema: + type: string + example: My Ov Pay Token + - name: ovPayTokenXTat + in: query + schema: + type: string + 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/CustomersResponseList" + "404": + description: No customer found + content: + application/json: + example: + { + "type": "https://api.integratielaag.nl/abt/touchpoint/1.0/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/touchpoint/1.0/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", + } + post: + tags: + - Customers + parameters: + - 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, in this case the call can only be done through the SMP + summary: Create a customer profile. + description: Create a customer profile in the ABT database with status ACTIVE and debtorStatus Inactive with a start date based on the timestamp of this post call. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + minimalCustomerProfile: + value: + { "person": { "emailAddress": "j.jansen@hatseflats.nl" } } + fullCustomerProfile: + value: + { + "customerPreference": { "languageId": 1 }, + "person": + { + "birthname": "Jan", + "surname": "Jansen", + "prefix": "dhr", + "suffix": "jr", + "dateOfBirth": "1970-01-01", + "emailAddress": "j.jansen@hatseflats.nl", + "addresses": + [ + { + "street": "Laan van Meerdervoort", + "houseNumber": 5, + "houseNumberSuffix": "B", + "postalCode": "2500AA", + "city": "Den Haag", + "country": "NL", + "addressTypeId": 1, + }, + { + "street": "Beeklaan", + "houseNumber": 30, + "houseNumberSuffix": "B", + "postalCode": "2500AA", + "city": "Den Haag", + "country": "NL", + "addressTypeId": 2, + }, + ], + "phones": + [ + { + "number": "6123456789", + "countryCode": "0031", + "phoneTypeId": 1, + "isPreferred": true, + }, + { + "number": "7012345678", + "countryCode": "0031", + "phoneTypeId": 2, + "isPreferred": false, + }, + ], + "devices": + [ + { + "externalDeviceId": "123e4567-e89b-12d3-a456-426614174000", + "alias": "My iPhone", + }, + { + "externalDeviceId": "987e6543-e21b-12d3-a456-426614174999", + "alias": "My iPad", + }, + ], + }, + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + patch: + tags: + - Customers + 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 + 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 + schema: + type: string + example: Customer + required: false + description: The role of the HTM employee in the case of the SMP + summary: Update a customer profile + description: Update a customer profile based on the sub from the JWT, or customerProfileId in case of SMP + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + patchCustomer: + value: + { + "person": + { + "birthname": "Jan", + "surname": "Jansen", + "prefix": "dhr", + "suffix": "jr", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressId": 2, + "street": "Laan van Meerdervoort", + "houseNumber": 5, + "postalCode": "2500AA", + "city": "Den Haag", + "country": "NL", + }, + { + "addressId": 1, + "street": "Beeklaan", + "houseNumber": 30, + "houseNumberSuffix": "B", + "postalCode": "2500AA", + "city": "Den Haag", + "country": "NL", + "addressTypeId": 2, + }, + ], + "phones": + [ + { + "phoneId": 1, + "number": "6123456789", + "countryCode": "0031", + "phoneTypeId": 1, + "isPreferred": true, + }, + { + "phoneId": 2, + "number": "7012345678", + "countryCode": "0031", + "phoneTypeId": 2, + "isPreferred": false, + }, + ], + "devices": + [ + { + "deviceId": "813afdd8-bf8c-4e26-bfda-4da79552bd38", + "externalDeviceId": "123e4567-e89b-12d3-a456-426614174000", + "alias": "My iPhone", + }, + { + "deviceId": "4f4249a2-ac6c-44f9-b740-66e66b6f3c28", + "externalDeviceId": "987e6543-e21b-12d3-a456-426614174999", + "alias": "My iPad", + }, + ], + }, + } + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + /customers/customerStatusInstances: + post: + tags: + - Customers + summary: Create a new customer status element (only for SMP) + description: >- + + parameters: + - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER + in: header + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/customerStatusEntity" + examples: + customerStatus: + value: + customerStatus: + customerStatusId: 2 + required: true + responses: + 201: + description: Successfully created a customer Status + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerProfileId}/customerPreferences: + post: + tags: + - Customers + summary: Create a customer preference element for a language for instance + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/customerPreferencesEntity" + examples: + customerPreference: + value: + customerPreference: + languageId: 1 + required: true + responses: + 201: + description: Successfully created a customer preference + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customerPreferences/{customerPreferenceId}: + patch: + tags: + - Customers + summary: Update a customer preference element, for example the language preference + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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: customerPreferenceId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/customerPreferencesEntity" + examples: + customerPreference: + value: + customerPreference: + languageId: 1 + required: true + responses: + 200: + description: Successfully modified a customer preference + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/addresses: + post: + tags: + - Customers + summary: Add a customer address + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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 + + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/postCustomerAddress" + examples: + customerAddress: + value: + customerAddress: + addressTypeId: 1 + street: Sesamstraat + houseNumber: 1 + houseNumberSuffix: A + postalCode: 1234 AB + city: Den Haag + country: NL + required: true + responses: + 201: + description: Successfully created a customer address + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/addresses/{addressId}: + patch: + tags: + - Customers + summary: Edit a customer address + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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: addressId + in: path + required: true + schema: + type: integer + example: 2 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/patchCustomerAddress" + examples: + fullAddress: + value: + address: + street: Sesamstraat + houseNumber: 1 + houseNumberSuffix: A + postalCode: 1234 AB + city: Den Haag + country: NL + required: true + responses: + 200: + description: Successfully modified a customer Address + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - Customers + summary: Delete a customer address + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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: addressId + in: path + required: true + schema: + type: integer + example: 2 + responses: + 200: + description: Successfully deleted a customer Address + content: + application/json: {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/phones: + post: + tags: + - Customers + summary: Add a customer phone + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/phoneEntity" + examples: + customerPhone: + value: + customerPhone: + number: "0701112233" + countryCode: "0031" + phoneTypeId: 1 + isPreferred: true + required: true + responses: + 201: + description: Successfully created a customer phonenumber + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/phones/{phoneId}: + patch: + tags: + - Customers + summary: Edit a customer phone + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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: phoneId + in: path + required: true + schema: + type: integer + example: 2 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/phoneEntity" + examples: + updateFullPhoneEntity: + value: + phone: + phoneTypeId: 2 + number: "0701112233" + countryCode: "0031" + isPreferred: false + updatePhoneTypeId: + value: + phone: + phoneTypeId: 2 + required: true + responses: + 200: + description: Successfully modified a customer phonenumber + content: + application/json: + schema: + $ref: "#/components/schemas/CustomersResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - Customers + summary: Delete a customer phone + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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: phoneId + in: path + required: true + schema: + type: integer + example: 2 + responses: + 200: + description: Successfully deleted a customer phonenumber + content: + application/json: {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/billingInformations: + get: + tags: + - Customers + summary: Find billing information for customer + description: >- + + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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 + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + getBillingInformationSingleSpecificCustomer: + summary: Get singel billing information entity for a specific customers + description: >- + Found one billing information for this customer + value: + { + "billingInformations": + [ + { + "billingInformationId": 1, + "customerProfileId": 1, + "iban": "NL••••••••••••1234", + "ascription": "J. Doe", + "alias": null, + "created": "2024-10-20T17:05:52.000", + }, + ], + } + /customers/directdebitmandates: + get: + tags: + - Customers + summary: Find direct debit mandates. + description: Find direct debit mandates. + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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 + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + getDirectDebitMandateForCustomer: + value: + { + "directDebitMandates": + [ + { + "directDebitMandateId": 71, + "customerProfileId": 12, + "billingInformationId": 51, + "directDebitMandateType": + { + "directDebitMandateTypeId": 1, + "name": "import", + "description": "import", + }, + "created": "2024-03-22T08:55:00", + "mandateReference": "CORE01", + "mandateState": "SIGNED", + "updateTimestamp": "2024-03-22T08:55:00", + }, + ], + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates", + "method": "GET", + }, + "next": + { + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=20", + "method": "GET", + }, + }, + } + /customers/tokens: + get: + tags: + - Customers + 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 + 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 + schema: + type: string + example: Customer + required: false + description: The role of the HTM employee in the case of the SMP + - 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 + schema: + type: array + items: + type: integer + explode: false + description: Filter on tokentype. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital + required: false + - 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 + schema: + type: string + example: 91641b54-056c-49ea-b598-ccde81d6c45a + required: false + description: Filter on the xBot of a customer token + - 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 + schema: + type: string + example: 1234 + required: false + description: Filter on the last digits of a customer token of type EMV + - 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 + 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 + schema: + type: integer + example: 2 + required: false + description: Filter on the replacedByTokenId of a customer token + 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": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Empty token list: + summary: Empty token list + description: Empty token list + value: + { + "ovPayTokens": [], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", + "method": "GET", + }, + }, + } + EMV without PAD: + summary: EMV without PAD + description: EMV without PAD + value: + { + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "ovpasNumber": "", + "alias": "Mijn EMV pas", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/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": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV34567", + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "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, + }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/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": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV34567", + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "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", + }, + }, + "gboAgeProfile": + { + "gboAgeProfileId": 1, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", + "method": "GET", + }, + "update_personal-data": + { + "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", + }, + }, + }, + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/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": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV34567", + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "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, + }, + "gboAgeProfile": + { + "gboAgeProfileId": 1, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", + "method": "GET", + }, + "update_personal-data": + { + "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", + }, + }, + }, + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", + "method": "GET", + }, + }, + } + OV pas with invalid PAD: + summary: OV pas with invalid PAD + description: OV pas with invalid PAD + value: + { + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV34567", + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "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", + }, + }, + "gboAgeProfile": + { + "gboAgeProfileId": 1, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", + "method": "GET", + }, + "update_personal-data": + { + "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", + }, + }, + }, + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/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 + description: Token list with every status for tokenTypeId = 2, role = KlantenService + value: + { + "ovPayTokens": + [ + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV34567", + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "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" }, + "ovpasNumber": "OV54567", + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 3, "name": "Replaced (*)" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "gboAgeProfile": null, + }, + { + "customerProfileId": 18, + "ovPayTokenId": 13, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV34547", + "alias": "MyToken", + "tokenStatus": + { "tokenStatusId": 4, "name": "On stock" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "gboAgeProfile": null, + }, + { + "customerProfileId": 132, + "ovPayTokenId": 21, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV34831", + "alias": "Mijn OV Pas", + "tokenStatus": + { "tokenStatusId": 5, "name": "Suspended" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "gboAgeProfile": null, + }, + { + "customerProfileId": 166, + "ovPayTokenId": 28, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV34984", + "alias": "Mijn OV Pas", + "tokenStatus": + { + "tokenStatusId": 6, + "name": "Removed by customer (*)", + }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "gboAgeProfile": null, + }, + { + "customerProfileId": 166, + "ovPayTokenId": 115, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV54368", + "alias": "My retired token", + "tokenStatus": + { "tokenStatusId": 1, "name": "Retired" }, + "expirationDate": "2025-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "gboAgeProfile": null, + }, + { + "customerProfileId": 1, + "ovPayTokenId": 118, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "ovpasNumber": "OV98263", + "alias": "My found token", + "tokenStatus": + { "tokenStatusId": 7, "name": "Renewed Active" }, + "expirationDate": "2028-02-01", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { + "name": null, + "birthdate": null, + "photo": null, + }, + "gboAgeProfile": null, + }, + ], + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", + "method": "GET", + }, + }, + } + post: + tags: + - Customers + 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 + 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 + 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 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Add EMV token: + summary: Add EMV token + description: Add EMV token + value: + { + "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: + { + "ovPayToken": + { + "tokenTypeId": 2, + "ovpasNumber": "OV34567", + "verificationCode": "211", + "alias": "Mijn token", + }, + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Add EMV token: + summary: Add EMV token + description: Add EMV token + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "lastDigits": null, + "ovpasNumber": null, + "alias": "Mijn token", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", + "method": "POST", + }, + }, + } + Add OV pas physical token: + summary: Add OV pas physical token + description: Add OV pas physical token + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 1, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "lastDigits": null, + "ovpasNumber": "OV34567", + "alias": "Mijn token", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "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 }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens", + "method": "POST", + }, + }, + } + /customers/tokens/{ovpayTokenId}: + post: + tags: + - Customers + 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 + 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 + schema: + type: string + example: Customer + required: false + - name: ovpayTokenId + in: path + schema: + type: integer + example: 1 + required: true + summary: Replace an OVpay token with another (+ transfer products) - V1 (for touch point) + description: | + Transfer products from one OVpay token to another, and replace the tokens in the database. + This endpoint is for touch point usage and will be replaced by `/customers/tokens/{ovpayTokenId}/transfer`. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + 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": + { + "newTokenId": null, + "tokenTypeId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 230, + "alias": "Nieuw 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 by OV-pas number. + value: + { + "ovPayToken": + { + "tokenTypeId": 2, + "ovpasNumber": "OV34567", + "verificationCode": "211", + "alias": "Mijn token", + }, + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Replace with new EMV token: + summary: Replace with new EMV token + description: Replace with new EMV token + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "lastDigits": null, + "ovpasNumber": null, + "alias": "Mijn token", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + } + Replace with new OV pas token: + summary: Replace with new OV pas token + description: Replace with new OV pas token + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "lastDigits": null, + "ovpasNumber": "OV34567", + "alias": "Mijn token", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "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 }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + } + "200": + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Replace with existing EMV token: + summary: Replace with existing EMV token + description: Replace with existing EMV token + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 10, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "lastDigits": null, + "ovpasNumber": null, + "alias": "Mijn bestaande token", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=10", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/trips", + "method": "GET", + }, + "add_personal-data": + { + "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/10/compare", + "method": "POST", + }, + }, + }, + } + patch: + tags: + - Customers + 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 + 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 + schema: + type: string + example: Customer + required: false + - name: ovpayTokenId + in: path + schema: + type: integer + example: 1 + required: true + summary: Edit an existing OV paytoken + description: Edit an existing OV paytoken in the database for a given customer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + 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 + 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 + description: Update an OV pay token full + value: + { + "ovPayToken": + { "tokenStatusId": 5, "alias": "Mijn verloren pas" }, + } + responses: + "200": + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Update an OV pay token status: + summary: Update an OV pay token status + description: Update an OV pay token status + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "lastDigits": null, + "ovpasNumber": null, + "alias": "Mijn token", + "tokenStatus": + { "tokenStatusId": 5, "name": "Suspended" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + } + Update an OV pay token alias: + summary: Update an OV pay token alias + description: Update an OV pay token alias + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "lastDigits": null, + "ovpasNumber": null, + "alias": "Mijn nieuwe tokennaam", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + } + Update an OV pay token full: + summary: Update an OV pay token full + description: Update an OV pay token full + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 5, + "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "lastDigits": null, + "ovpasNumber": null, + "alias": "Mijn verloren pas", + "tokenStatus": + { "tokenStatusId": 5, "name": "Suspended" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", + "method": "GET", + }, + "add_personal-data": + { + "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/touchpoint/1.0/customers/tokens/5/compare", + "method": "POST", + }, + }, + }, + } + delete: + tags: + - Customers + 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 + 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 + schema: + type: string + example: Customer + required: false + - name: ovpayTokenId + in: path + schema: + type: integer + example: 1 + required: true + summary: Delete an existing OV paytoken + description: Delete an existing OV paytoken for a given customer + responses: + "200": + description: Ok + /customers/tokens/{ovpayTokenId}/replace: + post: + tags: + - Token Replace v2 + 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 + 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 + schema: + type: string + example: Customer + required: false + - name: ovpayTokenId + in: path + schema: + type: integer + example: 1 + required: true + summary: |- + NOT TO BE CALLED BY TOUCHPOINTS - Replace an OVpay token with another (+ transfer products) - V2 + description: |- + **NOTE: This endpoint is for usage by integratielaag only. Touchpoints should use + `/customers/tokens/{ovpayTokenId}/transfer` instead.**\ + Transfer products from one OVpay token to another, and replace the tokens in the database. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Replace with new token by XTAT: + summary: Replace with new token by XTAT + description: | + Replace with new token by XTAT. Note however the consumer provides an XTAT to identify + the new token, this token could still be an existing token linked to the customer profile. This should + be checked beforehand. + value: + { + "ovPayToken": + { + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "alias": "Mijn token", + }, + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Replace with new EMV token: + summary: Replace with new EMV token + description: Replace with new EMV token + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "lastDigits": null, + "ovpasNumber": null, + "alias": "Mijn token", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + } + Replace with new OV pas token: + summary: Replace with new OV pas token + description: Replace with new OV pas token + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 5, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "lastDigits": null, + "ovpasNumber": "OV34567", + "alias": "Mijn token", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "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 }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", + "method": "GET", + }, + "add_personal-data": + { + "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", + }, + }, + }, + } + "200": + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Replace with existing EMV token: + summary: Replace with existing EMV token + description: Replace with existing EMV token + value: + { + "ovPayToken": + { + "customerProfileId": 1, + "ovPayTokenId": 10, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "lastDigits": null, + "ovpasNumber": null, + "alias": "Mijn bestaande token", + "tokenStatus": + { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2028-08-31T23:59:00+02:00", + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=10", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/trips", + "method": "GET", + }, + "add_personal-data": + { + "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/10/compare", + "method": "POST", + }, + }, + }, + } + /customers/tokens/{ovPayTokenId}/productinstances: + get: + tags: + - Customers + summary: Get a list of all HTM products instantiated on the given OvPayToken + description: |- + Get a list of all HTM products instantiated on the given OvPayToken. + Only HTM products are returned; GBO does not allow HTM to get information on non-HTM product-instances. + Where relevant, operations to be performed are returned as HATEOAS links per product-instance. + parameters: + - name: ovPayTokenId + in: path + required: true + style: simple + description: Id of the OvPayToken to get product-instances for. + schema: + type: integer + example: 1 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/OvPayTokenProductInstancesResponse" + examples: + getEmptyProductInstances: + summary: No product-instances found on token + value: + productInstances: [] + getSingleProductInstance: + summary: One non-renewable product-instance + value: + { + "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/touchpoint/1.0/customers/tokens/1/productinstances/1", + "method": "GET", + }, + "get_order": + { + "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/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F", + "method": "GET", + }, + }, + }, + ], + } + /customers/tokens/{ovPayTokenId}/compare: + 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 + 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 + schema: + type: string + example: Customer + required: false + - 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. 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 + - Token status (only if target token is known in the customer profile) + - Expiry date + - Instantiated GBO products + - Auto reload registration + - E-purse + - PAD (name, birthdate, photo) + - Age profile + tags: + - Customers + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/CompareRequest" + examples: + Compare with an existing OVpay token: + value: { "ovPayTokenId": 1 } + 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 request body (for development only): + value: + { + "ovPayTokenId": 1, + "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: + 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", + "productInstances": [], + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": 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", + "productInstances": [], + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + }, + "isTransferable": true, + "transferableObjects": + { + "tokenType": true, + "tokenStatus": true, + "expirationDate": true, + "productInstances": true, + "autoReloadRegistration": true, + "ePurse": true, + "personalAccountData": + { "name": true, "birthdate": true, "photo": true }, + "gboAgeProfile": true, + }, + "_links": + { + "transfer_token": + { + "href": "https://services.dev.api.htm.nl/abt/touchpoint/1.0/customers/tokens/1/transfer", + "method": "POST", + }, + }, + } + 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", + "productInstances": + [ + { + "productId": 1, + "name": "HTM 90% Korting EMV", + "status": "Active", + "isRenewable": true, + "productCategory": + { + "productCategoryId": 1, + "name": "Kortingsabonnement", + }, + "fromInclusive": "2025-11-25T13:25:00+01:00", + "untilInclusive": "2025-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/touchpoint/1.0/customers/tokens/1/productinstances/1", + "method": "GET", + }, + "get_order": + { + "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/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F", + "method": "GET", + }, + }, + }, + ], + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + }, + "newOvPayToken": + { + "customerProfileId": null, + "ovPayTokenId": null, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "alias": null, + "tokenStatus": null, + "expirationDate": "2028-02-01", + "productInstances": [], + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + }, + "isTransferable": false, + "transferableObjects": + { + "tokenType": true, + "tokenStatus": true, + "expirationDate": true, + "productInstances": false, + "autoReloadRegistration": true, + "ePurse": true, + "personalAccountData": + { "name": true, "birthdate": true, "photo": true }, + "gboAgeProfile": 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", + "productInstances": [], + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": 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", + "productInstances": [], + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + }, + "isTransferable": false, + "transferableObjects": + { + "tokenType": false, + "tokenStatus": true, + "expirationDate": true, + "productInstances": true, + "autoReloadRegistration": true, + "ePurse": true, + "personalAccountData": + { "name": true, "birthdate": true, "photo": true }, + "gboAgeProfile": true, + }, + "_links": {}, + } + Non-transferable token (marked PAD): + 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", + "productInstances": [], + "replacedByTokenId": 2, + "autoReloadRegistration": null, + "ePurse": null, + "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", + }, + }, + "gboAgeProfile": + { + "gboAgeProfileId": 1, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + }, + "newOvPayToken": + { + "customerProfileId": null, + "ovPayTokenId": null, + "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": null, + "tokenStatus": null, + "expirationDate": "2028-02-01", + "productInstances": [], + "replacedByTokenId": null, + "autoReloadRegistration": null, + "ePurse": null, + "personalAccountData": + { "name": null, "birthdate": null, "photo": null }, + "gboAgeProfile": null, + }, + "isTransferable": false, + "transferableObjects": + { + "tokenType": true, + "tokenStatus": true, + "expirationDate": true, + "productInstances": true, + "autoReloadRegistration": true, + "ePurse": true, + "personalAccountData": + { + "name": false, + "birthdate": false, + "photo": false, + }, + "gboAgeProfile": true, + }, + "_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", + "productInstances": [], + "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, + }, + "gboAgeProfile": + { + "gboAgeProfileId": 1, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + }, + "newOvPayToken": + { + "customerProfileId": null, + "ovPayTokenId": null, + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "tokenType": { "tokenTypeId": 1, "name": "EMV" }, + "alias": null, + "tokenStatus": null, + "expirationDate": "2028-02-01", + "productInstances": [], + "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, + }, + "gboAgeProfile": + { + "gboAgeProfileId": 4, + "name": "Kind (19 t/m 65 jaar)", + "ageFromInclusive": 19, + "ageToInclusive": 65, + }, + }, + "isTransferable": false, + "transferableObjects": + { + "tokenType": true, + "tokenStatus": true, + "expirationDate": true, + "productInstances": true, + "autoReloadRegistration": true, + "ePurse": false, + "personalAccountData": + { "name": true, "birthdate": false, "photo": true }, + "gboAgeProfile": false, + }, + "_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: + 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": 1, + }, + ], + } + 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": 2, + }, + ], + } + 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: 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 + 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 + schema: + type: string + example: Customer + required: false + - name: ovPayTokenId + in: path + required: true + style: simple + description: Id of the OVpay token from which data will be transferred. + schema: + type: integer + example: 1 + post: + summary: "Transfer old OVpay token to new OVpay token." + description: |- + **Note that this directly calls the integratielaag and not the Service Engine!** + 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. This call is asynchronous, and progress can be monitored using the + `/customers/tokens/transfer/responsestatus/*` endpoint. + tags: + - Token Replace v2 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/TransferRequest" + examples: + Transfer from a token without PAD to a new token: + summary: Transfer from a token without PAD to a new token + description: | + Transfer of a token without PAD to a new OVpay token. Note the new token in the request is always + identified by xTAT, regardless if the new token already exists in the customer profile. If the new + token does not exist in the customer profile, the user needs to provide an alias for the new token, + and it will be created in the customer profile. + value: + { + "oldOvPayToken": {}, + "newOvPayToken": + { + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "alias": "My new token", + }, + } + Transfer from a token with PAD to a new token without existing PAD: + summary: Transfer from a token with PAD to a new token without existing PAD + description: | + Transfer of a token with PAD to a new token by xTAT without existing PAD. Note how this request is + different, since it has an e-mail address on which the new PAD should be created. This request may + optionally provide an OTP for verification of th provided email address. + Also note the new token in the request is always identified by xTAT, regardless if the new token + already exists in the customer profile. If the new token does not exist in the customer profile, the + user needs to provide an alias for the new token, and it will be created in the customer profile. + value: + { + "oldOvPayToken": { "padOtp": "123456" }, + "newOvPayToken": + { + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "alias": "My new token", + "padEmailAddress": "jandevries@outlook.com", + "padOtp": "678901", + }, + } + Transfer from a token with PAD to a new token with existing PAD: + summary: Transfer from a token with PAD to a new token with existing PAD + description: | + Transfer of a token with PAD to a new token by xTAT with existing PAD. + Note that the new token in the request is always identified by xTAT, regardless if the new token + already exists in the customer profile. If the new token does not exist in the customer profile, the + user needs to provide an alias for the new token, and it will be created in the customer profile. + value: + { + "oldOvPayToken": { "padOtp": "123456" }, + "newOvPayToken": + { + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "alias": "My new token", + "padOtp": "678901", + }, + } + Complete request body (for development only): + summary: Complete request body (for development only) + description: | + Complete request body (for development only). + value: + { + "oldOvPayToken": { "padOtp": "123456" }, + "newOvPayToken": + { + "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969", + "alias": "My new token", + "padEmailAddress": "jandevries@outlook.com", + "padOtp": "678901", + }, + } + responses: + "202": + description: Accepted + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Transfer of token started: + description: | + The transfer of the token was started successfully. The data of the token will be transferred + asynchronously. In the response body the consumer will find information on how to retrieve the + processing status. + value: + { + "startTime": "2025-02-14T05:32:47.067Z", + "status": "Running", + "clientTrackingId": "08584620957189579629541919368CU00", + "callbackurl": "https://api.integratielaag.nl/customers/tokens/transfer/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c", + "retryAfter": 10, + } + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Request body validation error: + value: + { + "type": "https://htm.nl/api/v1/probs/validation", + "title": "Validation error", + "detail": "The request body is not valid.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": + [ + { + "detail": "The old token is required.", + "pointer": "#/oldOvPayToken", + }, + { + "detail": "The new token is required.", + "pointer": "#/newOvPayToken", + }, + ], + } + /customers/tokens/transfer/responsestatus/{clientTrackingId}: + parameters: + - in: path + name: clientTrackingId + schema: + type: string + required: true + description: The clientTrackingId of the token transfer request. + get: + tags: + - Token Replace v2 + summary: "Get the status of the initiated token transfer process (POST)." + description: | + **Note that this directly calls the integratielaag and not the Service Engine!** Get the status of the + asynchronous token transfer processing. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + New token as a result of a successful transfer: + description: | + The transfer of the token was processed successfully. The response body shows the details of the new + token to which the data was transferred. + value: + { + "customerProfileId": 1, + "ovPayTokenId": 2, + "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": + { + "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", + }, + }, + "gboAgeProfile": + { + "gboAgeProfileId": 1, + "name": "Kind (4 t/m 11 jaar)", + "ageFromInclusive": 4, + "ageToInclusive": 11, + }, + "_links": + { + "self": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "method": "GET", + }, + "partial_edit": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "PATCH", + }, + "delete_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1", + "method": "DELETE", + }, + "get_productinstances": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances", + "method": "GET", + }, + "get_trips": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips", + "method": "GET", + }, + "update_personal-data": + { + "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", + }, + }, + } + "202": + description: Accepted + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Token transfer in progress: + description: | + The transfer of the token is still in progress. The response body shows the details of the + processing status. + value: + { + "startTime": "2025-02-14T05:32:47.067Z", + "status": "Running", + "clientTrackingId": "08584620957189579629541919368CU00", + } + "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": 1, + }, + ], + } + 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": 2, + }, + ], + } + 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", + }, + ], + } + "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", + "expirationDate": "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", + }, + ], + } + /customers/devices: + post: + summary: Add a new device to a customer profile. + description: Add a new device to a customer profile. + tags: + - Devices + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Add a new device: + value: + { + "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", + "alias": "My iPhone 13", + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + New device added to customer profile: + value: + { + "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366", + "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", + "alias": "My iPhone 13", + } + /customers/devices/{deviceId}: + parameters: + - name: deviceId + in: path + required: true + style: simple + description: Id of the device to be deleted. + schema: + type: string + format: uuid + example: 0f0981bf-6d60-4b06-bc55-de1ba325f366 + patch: + summary: Update alias of a device in a customer profile. + description: Update alias of a device in a customer profile. + tags: + - Devices + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Update alias of a device: + value: { "alias": "My old iPhone 13" } + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Device alias updated in customer profile: + value: + { + "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366", + "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", + "alias": "My old iPhone 13", + } + delete: + summary: Delete a device from a customer profile. + description: Delete a device from a customer profile. + tags: + - Devices + responses: + "200": + description: OK +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 + CustomersResponseList: + type: object + properties: + customers: + type: array + items: + $ref: "#/components/schemas/CustomersResponse" + CustomersResponse: + type: object + properties: + customerProfileId: + type: integer + example: 1 + customerPreference: + $ref: "#/components/schemas/getCustomerPreference" + customerNumber: + type: integer + example: 1000001 + customerStatus: + type: object + properties: + customerStatusId: + type: integer + example: 1 + name: + type: string + example: Active + debtorNumber: + type: string + example: DB100001 + debtorStatus: + type: object + properties: + debtorStatusId: + type: integer + example: 1 + name: + type: string + example: Active + person: + type: object + properties: + prefix: + type: string + example: Mr + birthname: + type: string + example: John + surname: + type: string + example: Doe + suffix: + type: string + example: Jr. + dateOfBirth: + type: string + format: date + example: "2023-02-01" + emailAddress: + type: string + format: email + example: 4j2dD@example.com + addresses: + type: array + items: + type: object + properties: + addressId: + type: integer + example: 1 + addressType: + type: object + properties: + addressTypeId: + type: integer + example: 1 + name: + type: string + example: Shipping + street: + type: string + example: Appelstraat + houseNumber: + type: integer + example: 1 + houseNumberSuffix: + type: string + example: BS + postalCode: + type: string + example: 1234AB + city: + type: string + example: Den Haag + country: + type: string + example: NL + phones: + type: array + items: + type: object + properties: + phoneId: + type: integer + example: 1 + isPreferred: + type: boolean + example: true + phoneType: + type: object + properties: + phoneTypeId: + type: integer + example: 1 + name: + type: string + example: Home + number: + type: string + example: "0123456789" + countryCode: + type: string + example: "0031" + devices: + type: array + items: + type: object + properties: + deviceId: + type: string + format: uuid + example: 1 + externalDeviceId: + type: string + format: uuid + example: dee7d80e-9288-4508-a3ed-c067e619179f + alias: + type: string + example: My iPhone 13 + _links: + type: object + properties: + add_device: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices + method: + type: string + example: POST + edit_device: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices/1 + method: + type: string + example: PATCH + delete_device: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices/1 + method: + type: string + example: DELETE + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers + method: + type: string + example: GET + partial_edit: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers + method: + type: string + example: PATCH + get_tokens: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens + method: + type: string + example: GET + create_token: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens + method: + type: string + example: POST + customerPreferencesEntity: + type: object + properties: + customerPreferenceId: + type: integer + languageId: + type: integer + customerStatusEntity: + type: object + properties: + customerStatusId: + type: integer + OvPayTokensResponse: + type: object + required: + - ovPayTokens + properties: + ovPayTokens: + type: array + items: + type: object + properties: + ovPayTokenId: + type: integer + example: 1 + tokenType: + type: object + properties: + tokenTypeId: + type: integer + example: 1 + name: + type: string + example: EMV + alias: + type: string + example: MyToken + tokenStatus: + type: object + properties: + tokenStatusId: + type: integer + example: 1 + name: + type: string + example: Active + expirationDate: + type: string + format: date + example: "2023-02-01" + replacedByTokenId: + type: integer + example: 1 + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1 + method: + type: string + example: GET + partial_edit: + type: object + description: External touchpoints are only allowed to change alias - SMP can also change tokenStatus + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1 + method: + type: string + example: PATCH + replace_token: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/replace + method: + type: string + example: POST + delete_token: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1 + method: + type: string + example: DELETE + get_productinstances: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances + method: + type: string + example: GET + get_trips: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips + method: + type: string + example: GET + OvPayTokenProductInstancesResponse: + type: object + properties: + productInstances: + type: array + items: + type: object + properties: + productId: + type: integer + example: 1 + name: + type: string + example: HTM 90% Korting + status: + type: string + enum: ["Active", "Ended", "Refunded"] + example: Active + isRenewable: + type: boolean + example: true + productCategory: + type: object + description: The category of the originating HTM product definition + properties: + productCategoryId: + type: integer + example: 1 + name: + type: string + example: Kortingsabonnement + fromInclusive: + type: string + format: date-time-offset + example: "2024-11-25T13:25:00+01:00" + untilInclusive: + type: string + format: date-time-offset + 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: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + orderLineId: + type: string + format: uuid + example: 38B17EF-36C4-4039-B92C-4817969B464E + contractId: + type: string + format: uuid + example: 56B17EF-C436-9043-B76C-481797WEB464F + description: Only present for subscriptions/contracts + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances + method: + type: string + example: GET + get_order: + type: object + properties: + href: + type: string + description: Always present for any HTM product-instance + example: https://api.integratielaag.nl/abt/touchpoint/1.0/orders/501B17EF-36C4-4039-B92C-6517969B464E + method: + type: string + example: GET + get_contract: + type: object + properties: + href: + type: string + description: Only present for subscriptions/contracts + example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F + method: + type: string + example: GET + getCustomerPreference: + type: object + properties: + language: + $ref: "#/components/schemas/getCustomerLanguage" + getCustomerLanguage: + type: object + properties: + languageId: + type: integer + name: + type: string + ietfCode: + type: string + iso639Code: + type: string + postCustomerAddress: + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + addressType: + type: integer + patchCustomerAddress: + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + addressType: + type: integer + postPhoneEntity: + required: + - countryCode + - number + - phoneTypeId + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + phoneEntity: + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + \ No newline at end of file From 14817cc621d3d084df89067176f772f377904fa6 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Tue, 27 Jan 2026 17:10:08 +0100 Subject: [PATCH 02/11] fixed security semenantic error --- src/openapi/customers/SE-customers-v2.yaml | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index 7532a6d..d0258e4 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -399,11 +399,9 @@ paths: application/json: schema: $ref: "#/components/schemas/CustomersResponse" - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - /customers/{customerProfileId}/customerPreferences: + /customers/customerPreferences: post: tags: - Customers @@ -450,8 +448,6 @@ paths: application/json: schema: $ref: "#/components/schemas/CustomersResponse" - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited /customerPreferences/{customerPreferenceId}: @@ -507,8 +503,6 @@ paths: application/json: schema: $ref: "#/components/schemas/CustomersResponse" - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited /customers/addresses: @@ -565,8 +559,6 @@ paths: application/json: schema: $ref: "#/components/schemas/CustomersResponse" - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited /customers/addresses/{addressId}: @@ -627,8 +619,6 @@ paths: application/json: schema: $ref: "#/components/schemas/CustomersResponse" - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited delete: @@ -670,8 +660,6 @@ paths: description: Successfully deleted a customer Address content: application/json: {} - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited /customers/phones: @@ -724,8 +712,6 @@ paths: application/json: schema: $ref: "#/components/schemas/CustomersResponse" - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited /customers/phones/{phoneId}: @@ -788,8 +774,6 @@ paths: application/json: schema: $ref: "#/components/schemas/CustomersResponse" - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited delete: @@ -831,8 +815,6 @@ paths: description: Successfully deleted a customer phonenumber content: application/json: {} - security: - - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited /customers/billingInformations: From 5838b14ac5801b6e5b4f1530a113f86dbb0c0136 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 09:44:32 +0100 Subject: [PATCH 03/11] added GET on devices --- src/openapi/customers/SE-customers-v2.yaml | 83 +++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index d0258e4..b943409 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -1977,7 +1977,7 @@ paths: type: integer example: 1 required: true - summary: Replace an OVpay token with another (+ transfer products) - V1 (for touch point) + summary: Replace an OVpay token with another (+ transfer products) - V2 (for touch point) description: | Transfer products from one OVpay token to another, and replace the tokens in the database. This endpoint is for touch point usage and will be replaced by `/customers/tokens/{ovpayTokenId}/transfer`. @@ -3881,6 +3881,87 @@ paths: ], } /customers/devices: + get: + summary: Retrieve devices for a customer profile. + description: Retrieve devices for a customer profile. + tags: + - Devices + 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 + schema: + type: integer + example: 323 + required: false + description: The id of the customer Profile + - 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: deviceId + in: query + schema: + type: string + format: uuid + example: 3fc3e1d2-cbca-4c67-9210-77601301fd75 + - name: externalDeviceId + in: query + schema: + type: string + example: dsafdefaere5435255 + - name: customerProfileId + in: query + schema: + type: integer + example: 1 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + One device found: + value: + { + "devices": + [ + { + "customerProfileId": 1, + "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366", + "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", + "alias": "My iPhone 13" + } + ] + } + Multiple devices found: + value: + { + "devices": + [ + { + "deviceId": "5bedce29-af0c-4f3c-b182-2caa8a1f9377", + "externalDeviceId": "c5545584-04af-4c60-a955-d6a70baab848", + "alias": "iPhone prive", + }, + { + "deviceId": "d7683e89-b2ad-4e79-85b3-dbb42aad0325", + "externalDeviceId": "7122a988-a00a-417d-a5b4-da2d91354976", + "alias": "iPhone zakelijk", + } + ] + } post: summary: Add a new device to a customer profile. description: Add a new device to a customer profile. From 1f51eaadc6388cafdb0deae13cb2759396b439fa Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 09:47:21 +0100 Subject: [PATCH 04/11] something --- src/openapi/customers/SE-customers-v2.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index b943409..b0e847d 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -3882,8 +3882,8 @@ paths: } /customers/devices: get: - summary: Retrieve devices for a customer profile. - description: Retrieve devices for a customer profile. + summary: Retrieve devices for a customer. + description: Retrieve devices for a customer. tags: - Devices parameters: From ba314674a3c1123e46f59992634abace9d479f83 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 09:48:20 +0100 Subject: [PATCH 05/11] misplaced customerprofileId --- src/openapi/customers/SE-customers-v2.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index b0e847d..e1bd4ba 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -3938,7 +3938,6 @@ paths: "devices": [ { - "customerProfileId": 1, "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366", "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", "alias": "My iPhone 13" From baee1e86227dc94b29a19a4bfd77d9f9f29bcc6a Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 09:53:01 +0100 Subject: [PATCH 06/11] misplaced customerprofileId --- src/openapi/customers/SE-customers-v2.yaml | 28 +++++++------------- src/openapi/customers/customers-crud-v2.yaml | 6 ++--- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index e1bd4ba..2d2753b 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -864,7 +864,6 @@ paths: [ { "billingInformationId": 1, - "customerProfileId": 1, "iban": "NL••••••••••••1234", "ascription": "J. Doe", "alias": null, @@ -876,8 +875,8 @@ paths: get: tags: - Customers - summary: Find direct debit mandates. - description: Find direct debit mandates. + summary: Find direct debit mandates for a customer. + description: Find direct debit mandates for a customer. parameters: - name: X-HTM-JWT-AUTH-HEADER in: header @@ -915,8 +914,14 @@ paths: [ { "directDebitMandateId": 71, - "customerProfileId": 12, - "billingInformationId": 51, + "billingInformationId": + { + "billingInformationId": 15, + "iban": "NL••••••••••••1234", + "ascription": "J. Doe", + "alias": null, + "created": "2024-10-20T17:05:52.000", + }, "directDebitMandateType": { "directDebitMandateTypeId": 1, @@ -929,19 +934,6 @@ paths: "updateTimestamp": "2024-03-22T08:55:00", }, ], - "_links": - { - "self": - { - "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates", - "method": "GET", - }, - "next": - { - "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=20", - "method": "GET", - }, - }, } /customers/tokens: get: diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 71c95ea..c53a82f 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -964,7 +964,7 @@ paths: post: tags: - Customer - summary: Create a new customer status element + summary: Create a new customer status element (only for SMP) description: >- parameters: @@ -996,7 +996,7 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - /customers/{customerProfileId}/customerPreferences: + /customers/customerPreferences: post: tags: - Customer @@ -1006,10 +1006,10 @@ paths: parameters: - name: customerProfileId in: path + required: true schema: type: integer example: 1 - required: true requestBody: content: application/json: From 007cf4bdef5113d9832163989fcff4222e4ded93 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 09:55:23 +0100 Subject: [PATCH 07/11] added customerprofileId to device response --- src/openapi/customers/SE-customers-v2.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index 2d2753b..b892ad6 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -3930,6 +3930,7 @@ paths: "devices": [ { + "customerProfileId": 1, "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366", "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f", "alias": "My iPhone 13" @@ -3942,11 +3943,13 @@ paths: "devices": [ { + "customerProfileId": 1, "deviceId": "5bedce29-af0c-4f3c-b182-2caa8a1f9377", "externalDeviceId": "c5545584-04af-4c60-a955-d6a70baab848", "alias": "iPhone prive", }, { + "customerProfileId": 1, "deviceId": "d7683e89-b2ad-4e79-85b3-dbb42aad0325", "externalDeviceId": "7122a988-a00a-417d-a5b4-da2d91354976", "alias": "iPhone zakelijk", From 43bf7bfff3c38e620ee72264fc7dce010a4e6337 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 10:02:56 +0100 Subject: [PATCH 08/11] lowercase paths --- src/openapi/customers/SE-customers-v2.yaml | 274 +-------------------- 1 file changed, 3 insertions(+), 271 deletions(-) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index b892ad6..9b5c322 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -359,7 +359,7 @@ paths: application/json: schema: $ref: "#/components/schemas/CustomersResponse" - /customers/customerStatusInstances: + /customers/customerstatusinstances: post: tags: - Customers @@ -401,7 +401,7 @@ paths: $ref: "#/components/schemas/CustomersResponse" x-auth-type: Application & Application User x-throttling-tier: Unlimited - /customers/customerPreferences: + /customers/customerpreferences: post: tags: - Customers @@ -450,7 +450,7 @@ paths: $ref: "#/components/schemas/CustomersResponse" x-auth-type: Application & Application User x-throttling-tier: Unlimited - /customerPreferences/{customerPreferenceId}: + /customerpreferences/{customerPreferenceId}: patch: tags: - Customers @@ -2506,274 +2506,6 @@ paths: responses: "200": description: Ok - /customers/tokens/{ovpayTokenId}/replace: - post: - tags: - - Token Replace v2 - 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 - 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 - schema: - type: string - example: Customer - required: false - - name: ovpayTokenId - in: path - schema: - type: integer - example: 1 - required: true - summary: |- - NOT TO BE CALLED BY TOUCHPOINTS - Replace an OVpay token with another (+ transfer products) - V2 - description: |- - **NOTE: This endpoint is for usage by integratielaag only. Touchpoints should use - `/customers/tokens/{ovpayTokenId}/transfer` instead.**\ - Transfer products from one OVpay token to another, and replace the tokens in the database. - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - examples: - Replace with new token by XTAT: - summary: Replace with new token by XTAT - description: | - Replace with new token by XTAT. Note however the consumer provides an XTAT to identify - the new token, this token could still be an existing token linked to the customer profile. This should - be checked beforehand. - value: - { - "ovPayToken": - { - "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", - "alias": "Mijn token", - }, - } - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - examples: - Replace with new EMV token: - summary: Replace with new EMV token - description: Replace with new EMV token - value: - { - "ovPayToken": - { - "customerProfileId": 1, - "ovPayTokenId": 5, - "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", - "tokenType": { "tokenTypeId": 1, "name": "EMV" }, - "lastDigits": null, - "ovpasNumber": null, - "alias": "Mijn token", - "tokenStatus": - { "tokenStatusId": 2, "name": "Active" }, - "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": null, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData": - { "name": null, "birthdate": null, "photo": null }, - "gboAgeProfile": null, - "_links": - { - "self": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", - "method": "GET", - }, - "partial_edit": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", - "method": "PATCH", - }, - "delete_token": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", - "method": "DELETE", - }, - "get_productinstances": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", - "method": "GET", - }, - "get_trips": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", - "method": "GET", - }, - "add_personal-data": - { - "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", - }, - }, - }, - } - Replace with new OV pas token: - summary: Replace with new OV pas token - description: Replace with new OV pas token - value: - { - "ovPayToken": - { - "customerProfileId": 1, - "ovPayTokenId": 5, - "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", - "tokenType": - { "tokenTypeId": 2, "name": "OV-pas physical" }, - "lastDigits": null, - "ovpasNumber": "OV34567", - "alias": "Mijn token", - "tokenStatus": - { "tokenStatusId": 2, "name": "Active" }, - "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": null, - "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 }, - "gboAgeProfile": null, - "_links": - { - "self": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", - "method": "GET", - }, - "partial_edit": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", - "method": "PATCH", - }, - "delete_token": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5", - "method": "DELETE", - }, - "get_productinstances": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances", - "method": "GET", - }, - "get_trips": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips", - "method": "GET", - }, - "add_personal-data": - { - "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", - }, - }, - }, - } - "200": - description: Ok - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - examples: - Replace with existing EMV token: - summary: Replace with existing EMV token - description: Replace with existing EMV token - value: - { - "ovPayToken": - { - "customerProfileId": 1, - "ovPayTokenId": 10, - "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811", - "tokenType": { "tokenTypeId": 1, "name": "EMV" }, - "lastDigits": null, - "ovpasNumber": null, - "alias": "Mijn bestaande token", - "tokenStatus": - { "tokenStatusId": 2, "name": "Active" }, - "expirationDate": "2028-08-31T23:59:00+02:00", - "replacedByTokenId": null, - "autoReloadRegistration": null, - "ePurse": null, - "personalAccountData": - { "name": null, "birthdate": null, "photo": null }, - "gboAgeProfile": null, - "_links": - { - "self": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=10", - "method": "GET", - }, - "partial_edit": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10", - "method": "PATCH", - }, - "delete_token": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10", - "method": "DELETE", - }, - "get_productinstances": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/productinstances", - "method": "GET", - }, - "get_trips": - { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/trips", - "method": "GET", - }, - "add_personal-data": - { - "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/10/compare", - "method": "POST", - }, - }, - }, - } /customers/tokens/{ovPayTokenId}/productinstances: get: tags: From 4b932a06285fa850ce3b7ef9c26c7843136aa86b Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 10:03:21 +0100 Subject: [PATCH 09/11] lowercase paths --- src/openapi/customers/SE-customers-v2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index 9b5c322..ab96679 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -817,7 +817,7 @@ paths: application/json: {} x-auth-type: Application & Application User x-throttling-tier: Unlimited - /customers/billingInformations: + /customers/billinginformations: get: tags: - Customers From c9b54a095d763e5103e02f3b6f470decebbcd1ee Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 13:50:36 +0100 Subject: [PATCH 10/11] restored crud file --- src/openapi/customers/customers-crud-v2.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index c53a82f..71c95ea 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -964,7 +964,7 @@ paths: post: tags: - Customer - summary: Create a new customer status element (only for SMP) + summary: Create a new customer status element description: >- parameters: @@ -996,7 +996,7 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - /customers/customerPreferences: + /customers/{customerProfileId}/customerPreferences: post: tags: - Customer @@ -1006,10 +1006,10 @@ paths: parameters: - name: customerProfileId in: path - required: true schema: type: integer example: 1 + required: true requestBody: content: application/json: From 681e9f7671ed645722f01f32d965699ced95c3fc Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 28 Jan 2026 13:56:05 +0100 Subject: [PATCH 11/11] fixed casing mismatch ovpaytokenid and tokens transfer reponsestatus path --- src/openapi/customers/SE-customers-v2.yaml | 49 ++++++++++------------ 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/src/openapi/customers/SE-customers-v2.yaml b/src/openapi/customers/SE-customers-v2.yaml index ab96679..6f76888 100644 --- a/src/openapi/customers/SE-customers-v2.yaml +++ b/src/openapi/customers/SE-customers-v2.yaml @@ -1085,7 +1085,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=1", "method": "GET", }, "partial_edit": @@ -1168,7 +1168,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=1", "method": "GET", }, "partial_edit": @@ -1291,7 +1291,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=1", "method": "GET", }, "partial_edit": @@ -1389,7 +1389,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=1", "method": "GET", }, "partial_edit": @@ -1505,7 +1505,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=1", "method": "GET", }, "partial_edit": @@ -1816,7 +1816,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=1", "method": "GET", }, "partial_edit": @@ -1894,7 +1894,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=1", "method": "GET", }, "partial_edit": @@ -1938,7 +1938,7 @@ paths: }, }, } - /customers/tokens/{ovpayTokenId}: + /customers/tokens/{ovPayTokenId}: post: tags: - Customers @@ -1963,7 +1963,7 @@ paths: type: string example: Customer required: false - - name: ovpayTokenId + - name: ovPayTokenId in: path schema: type: integer @@ -1972,7 +1972,7 @@ paths: summary: Replace an OVpay token with another (+ transfer products) - V2 (for touch point) description: | Transfer products from one OVpay token to another, and replace the tokens in the database. - This endpoint is for touch point usage and will be replaced by `/customers/tokens/{ovpayTokenId}/transfer`. + This endpoint is for touch point usage and will be replaced by `/customers/tokens/{ovPayTokenId}/transfer`. requestBody: content: application/json: @@ -2045,7 +2045,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=5", "method": "GET", }, "partial_edit": @@ -2115,7 +2115,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=5", "method": "GET", }, "partial_edit": @@ -2185,7 +2185,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=10", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=10", "method": "GET", }, "partial_edit": @@ -2245,7 +2245,7 @@ paths: type: string example: Customer required: false - - name: ovpayTokenId + - name: ovPayTokenId in: path schema: type: integer @@ -2309,7 +2309,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=5", "method": "GET", }, "partial_edit": @@ -2372,7 +2372,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=5", "method": "GET", }, "partial_edit": @@ -2435,7 +2435,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=5", "method": "GET", }, "partial_edit": @@ -2495,7 +2495,7 @@ paths: type: string example: Customer required: false - - name: ovpayTokenId + - name: ovPayTokenId in: path schema: type: integer @@ -3314,18 +3314,11 @@ paths: }, ], } - /customers/tokens/transfer/responsestatus/{clientTrackingId}: - parameters: - - in: path - name: clientTrackingId - schema: - type: string - required: true - description: The clientTrackingId of the token transfer request. + /customers/tokens/transfer/responsestatus/*: get: tags: - Token Replace v2 - summary: "Get the status of the initiated token transfer process (POST)." + summary: "Get the status of the initiated token transfer process." description: | **Note that this directly calls the integratielaag and not the Service Engine!** Get the status of the asynchronous token transfer processing. @@ -3411,7 +3404,7 @@ paths: { "self": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPaytokenId=1", "method": "GET", }, "partial_edit":