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: '1.0' servers: - url: https://api.integratielaag.nl/v1/touchpoint 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 single customer profile based on search parameters description: Get a single customer profile based on search parameters. Only returns a profile if a single result matches the parameters; when multiple results are found, additional seach parameters are required to disambiguate. parameters: - name: customerProfileId in: query 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/CustomersResponse' '404': description: No customer found content: application/json: example: { "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers", "apiErrorCode": "400.1", "title": "Niet gevonden", "detail": "Klant niet gevonden", "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7", "errors": [ { "subApiErrorCode": "0017" } ] } '409': description: Multiple customers found content: application/json: example: { "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers", "apiErrorCode": "409.1", "title": "Meer dan 1 klantprofiel gevonden", "detail": "Meer dan 1 klantprofiel gevonden. Verfijn je zoekcriteria.", "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7" } /customers/tokens: get: tags: - 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 ovpaytoken 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 ovPasNumber 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 = Expired, 2 = Active, 3 = Replaced, 4 = Inactive, 5 = Suspended, 6 = Removed by customer 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: replaceByTokenId in: query schema: type: integer example: 2 required: false description: Filter on the replaceByTokenId 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: EMV without PAD: summary: EMV without PAD description: EMV without PAD value: { "ovPayTokens": [ { "ovPayTokenId": 1, "tokenType": { "tokenTypeId": 1, "name": "EMV" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 1, "name": "Active" }, "expirationDate": "2023-02-01", "replacedByTokenId": 2, "autoReloadRegistration": null, "ePurse": null, "personalAccountData":{ "name": null, "birthDate": null, "photo": null }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", "method": "GET" }, "partial_edit": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "PATCH" }, "replace_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", "method": "POST" }, "delete_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "DELETE" }, "get_productinstances": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", "method": "GET" }, "get_trips": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", "method": "GET" }, "create_tokenPersonalization": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/tokenPersonalizations?ovpaytokenId=1", "method": "POST" } } } ] } OVPAS without PAD: summary: OVPAS without PAD description: OVPAS without PAD value: { "ovPayTokens": [ { "ovPayTokenId": 1, "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 1, "name": "Active" }, "expirationDate": "2023-02-01", "replacedByTokenId": 2, "autoReloadRegistration": null, "ePurse": { "e-PurseBalance": { "currency": "EUR", "amount": 350 }, "status": "ACTIVE", "originDate": "2019-07-16T11:00:00+02:00" }, "personalAccountData":{ "name": null, "birthDate": null, "photo": null }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", "method": "GET" }, "partial_edit": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "PATCH" }, "replace_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", "method": "POST" }, "delete_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "DELETE" }, "get_productinstances": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", "method": "GET" }, "get_trips": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", "method": "GET" }, "create_tokenPersonalization": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=1", "method": "POST" } } } ] } OVPAS with PAD: summary: OVPAS with PAD description: OVPAS with PAD value: { "ovPayTokens": [ { "ovPayTokenId": 1, "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 1, "name": "Active" }, "expirationDate": "2023-02-01", "replacedByTokenId": 2, "autoReloadRegistration": { "autoReloadAmount": 500, "retailerReferenceId": "abc", "arrit": "425f7fc2-1103-4822-9c79-7c4aaa2fb6aa", "autoReloadRegistrationStatus": "ACTIVE", "autoReloadRegistrationStartDateTime": "2024-06-02T15:03:46Z" }, "ePurse": { "e-PurseBalance": { "currency": "EUR", "amount": 350 }, "status": "ACTIVE", "originDate": "2019-07-16T11:00:00+02:00" }, "personalAccountData":{ "name": { "inaccuracyFlag": false, "inaccuracyFlagReason": null, "inaccuracyFlagSetCounter": 0, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" }, "birthDate": { "inaccuracyFlag": false, "inaccuracyFlagReason": null, "inaccuracyFlagSetCounter": 0, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" }, "photo": { "inaccuracyFlag": false, "inaccuracyFlagReason": null, "inaccuracyFlagSetCounter": 0, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" } }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", "method": "GET" }, "partial_edit": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "PATCH" }, "replace_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", "method": "POST" }, "delete_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "DELETE" }, "get_productinstances": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", "method": "GET" }, "get_trips": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", "method": "GET" }, "update_tokenPersonalization": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=1", "method": "PUT" } } } ] } OVPAS with partial PAD: summary: OVPAS with partial PAD description: OVPAS with partial PAD value: { "ovPayTokens": [ { "ovPayTokenId": 1, "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 1, "name": "Active" }, "expirationDate": "2023-02-01", "replacedByTokenId": 2, "autoReloadRegistration": null, "ePurse": { "e-PurseBalance": { "currency": "EUR", "amount": 350 }, "status": "ACTIVE", "originDate": "2019-07-16T11:00:00+02:00" }, "personalAccountData":{ "name": { "inaccuracyFlag": false, "inaccuracyFlagReason": null, "inaccuracyFlagSetCounter": 0, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" }, "birthDate": { "inaccuracyFlag": true, "inaccuracyFlagReason": "Invalid birthDate", "inaccuracyFlagSetCounter": 1, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" }, "photo": { "inaccuracyFlag": false, "inaccuracyFlagReason": null, "inaccuracyFlagSetCounter": 0, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" } }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", "method": "GET" }, "partial_edit": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "PATCH" }, "replace_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", "method": "POST" }, "delete_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "DELETE" }, "get_productinstances": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", "method": "GET" }, "get_trips": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", "method": "GET" }, "update_tokenPersonalization": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=1", "method": "PUT" } } } ] } OVPAS with invalid PAD: summary: OVPAS with invalid PAD description: OVPAS with invalid PAD value: { "ovPayTokens": [ { "ovPayTokenId": 1, "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "alias": "MyToken", "tokenStatus": { "tokenStatusId": 1, "name": "Active" }, "expirationDate": "2023-02-01", "replacedByTokenId": 2, "autoReloadRegistration": null, "ePurse": { "e-PurseBalance": { "currency": "EUR", "amount": 350 }, "status": "ACTIVE", "originDate": "2019-07-16T11:00:00+02:00" }, "personalAccountData":{ "name": { "inaccuracyFlag": true, "inaccuracyFlagReason": "T.B.D", "inaccuracyFlagSetCounter": 1, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" }, "birthDate": { "inaccuracyFlag": true, "inaccuracyFlagReason": "T.B.D", "inaccuracyFlagSetCounter": 1, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" }, "photo": { "inaccuracyFlag": true, "inaccuracyFlagReason": "T.B.D", "inaccuracyFlagSetCounter": 1, "isValidated": false, "changeCounter": 0, "maxUpdatesVerificationCount": 0, "lastChangeDate": "2019-08-24T14:15:22Z" } }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", "method": "GET" }, "partial_edit": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "PATCH" }, "replace_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", "method": "POST" }, "delete_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "DELETE" }, "get_productinstances": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", "method": "GET" }, "get_trips": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", "method": "GET" }, "update_tokenPersonalization": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=1", "method": "PUT" } } } ] } 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 OVpas physical token: summary: Add OVpas physical token description: Add OVpas 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": 8, "ovPayTokenId": 1, "tokenTypeId": 1, "lastDigits": null, "ovpasNumber": null, "alias": "Mijn token", "tokenStatusId": 2, "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/1.0/touchpoint/customers/tokens?ovpaytokenId=1", "method": "GET" }, "partial_edit": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "PATCH" }, "replace_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", "method": "POST" }, "delete_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "DELETE" }, "get_productinstances": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", "method": "GET" }, "get_trips": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", "method": "GET" }, "create_tokenPersonalization": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=1", "method": "POST" } } }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", "method": "POST" } } } Add OVpas physical token: summary: Add EMV token description: Add EMV token value: { "ovPayToken": { "customerProfileId": 8, "ovPayTokenId": 1, "tokenTypeId": 2, "lastDigits": null, "ovpasNumber": "OV34567", "alias": "Mijn token", "tokenStatusId": 2, "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 }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1", "method": "GET" }, "partial_edit": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "PATCH" }, "replace_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace", "method": "POST" }, "delete_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1", "method": "DELETE" }, "get_productinstances": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances", "method": "GET" }, "get_trips": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips", "method": "GET" }, "create_tokenPersonalization": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=1", "method": "POST" } } }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", "method": "POST" } } } /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 OV paytoken for a customerProfile description: Replace an OV paytoken in the database for a given customer with another token requestBody: content: application/json: schema: $ref: "#/components/schemas/unavailable" examples: Replace with new EMV token: summary: Replace with new token description: Replace with new token value: { "ovPayToken": { "newTokenId": null, "tokenTypeId": 1, "serviceReferenceId": "NLOV1234567ABCDEFG", "amount": 230, "alias": "Nieuw 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": 8, "ovPayTokenId": 5, "tokenTypeId": 1, "lastDigits": null, "ovpasNumber": null, "alias": "Mijn token", "tokenStatusId": 2, "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/1.0/touchpoint/customers/tokens?ovpaytokenId=5", "method": "GET" }, "partial_edit": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", "method": "PATCH" }, "replace_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/replace", "method": "POST" }, "delete_token": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5", "method": "DELETE" }, "get_productinstances": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances", "method": "GET" }, "get_trips": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips", "method": "GET" }, "create_tokenPersonalization": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5", "method": "POST" } } }, "_links": { "self": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens", "method": "POST" } } } /customers/tokens/{ovPayTokenId}/productinstances: get: tags: - ServiceEngine 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/1.0/touchpoint/customers/tokens/1/productinstances/1", "method": "GET" }, "get_order": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/orders/501B17EF-36C4-4039-B92C-6517969B464E", "method": "GET" }, "get_contract": { "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F", "method": "GET" } } } ] } components: schemas: unavailable: type: object CustomersResponse: type: object properties: customerProfileId: type: integer example: 1 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 isPreferred: type: boolean example: true addressType: type: object properties: addressTypeId: type: integer example: 1 name: type: string example: Home 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: Nederland _links: type: object properties: self: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/addresses/1 method: type: string example: GET delete_address: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/addresses/1 method: type: string example: DELETE 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" _links: type: object properties: self: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/phones/1 method: type: string example: GET delete_phone: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/phones/1 method: type: string example: DELETE _links: type: object properties: self: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers method: type: string example: GET create_customer_status: type: object description: ONLY ALLOWED FOR SMP - Create a new customer status properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/statuses method: type: string example: POST partial_edit: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers method: type: string example: PATCH get_tokens: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens method: type: string example: GET create_token: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens method: type: string example: POST 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/1.0/touchpoint/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/1.0/touchpoint/customers/tokens/1 method: type: string example: PATCH replace_token: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace method: type: string example: POST delete_token: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1 method: type: string example: DELETE get_productinstances: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances method: type: string example: GET get_trips: type: object properties: href: type: string example: https://api.integratielaag.nl/abt/1.0/touchpoint/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/1.0/touchpoint/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/1.0/touchpoint/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/1.0/touchpoint/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F method: type: string example: GET