diff --git a/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar b/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar
index 2a3b03c..eb23d37 100644
Binary files a/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar and b/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar differ
diff --git a/src/java/ABTProductsPUTGenerator/bin/input.json b/src/java/ABTProductsPUTGenerator/bin/input.json
index 2873379..051b8a0 100644
--- a/src/java/ABTProductsPUTGenerator/bin/input.json
+++ b/src/java/ABTProductsPUTGenerator/bin/input.json
@@ -1,57 +1,54 @@
{
- "productId": 38,
- "parentProductId": null,
- "productCode": "30901-WA",
- "gboPackageTemplateId": "30901",
+ "productId": 151,
+ "fikoArticleNumber": null,
+ "parentProductId": 114,
+ "gboPackageTemplateId": "33629",
"tapConnectProductCode": null,
- "productGroupMetadata": null,
- "productName": "HTM P1W Prolongatie-Test 90% Korting",
- "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis met korting!",
+ "productName": "HTM Regio Vrij - Voltarief - Losse Maand - HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
"validityPeriod": {
- "validityPeriodId": 148,
- "fromInclusive": "2023-12-31T23:00:00.000+00:00",
- "toInclusive": "2029-12-08T04:00:00.000+00:00"
+ "validityPeriodId": 262,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00"
},
"productTranslations": [
{
"language": "en",
- "name": "HTM Prolongation-Test 90% Discount",
- "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!"
+ "name": "HTM Regio Free - Full Fare - 1 Month - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62"
}
],
"productOwner": {
- "productOwnerId": 17,
- "name": "Corneel Verstoep",
- "organization": "HTM"
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH"
},
- "marketSegments": [
+ "marketSegments": null,
+ "customerSegments": null,
+ "allowedGboAgeProfiles": [
{
- "marketSegmentId": 1,
- "name": "B2C"
- }
- ],
- "customerSegments": [
- {
- "customerSegmentId": 2,
- "name": "Kind (4-11)"
+ "gboAgeProfileId": 1,
+ "name": "Baby/peuter (0 t/m 3 jaar)",
+ "ageFromInclusive": 0,
+ "ageToInclusive": 3
},
{
- "customerSegmentId": 3,
- "name": "Jongere (12-18)"
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64
},
{
- "customerSegmentId": 4,
- "name": "Volwassene (19-64)"
- },
- {
- "customerSegmentId": 5,
- "name": "Oudere (65+)"
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999
}
],
"productCategory": {
- "productCategoryId": 1,
+ "productCategoryId": 3,
"isTravelProduct": true,
- "name": "Kortingsabonnement"
+ "name": "Afgekocht reisrecht"
},
"requiredCustomerLevel": {
"requiredCustomerLevelId": 3,
@@ -73,11 +70,24 @@
"customerDataItem": "emailAddress"
},
{
- "mandatoryCustomerDataItemId": 5,
- "customerDataItem": "address"
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate"
+ }
+ ],
+ "requiredGboPersonalAttributes": [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME"
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE"
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO"
}
],
- "requiredGboPersonalAttributes": null,
"tokenTypes": [
{
"tokenTypeId": 1,
@@ -89,21 +99,21 @@
"name": "prepaid"
},
"serviceOptions": null,
- "validityDuration": "P1W",
+ "validityDuration": "P1M",
"maxStartInFutureDuration": "P6W",
- "isRenewable": true,
- "sendInvoice": true,
+ "isRenewable": false,
+ "sendInvoice": false,
"imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
- "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-90-korting/",
- "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-90-korting/",
+ "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
"isSellableAtHtm": true,
"needsSolvencyCheckConsumer": false,
"needsSolvencyCheckBusiness": false,
"sellingPeriods": [
{
- "sellingPeriodId": 89,
- "fromInclusive": "2024-09-30T23:00:00.000+00:00",
- "toInclusive": "2029-12-01T23:00:00.000+00:00",
+ "sellingPeriodId": 214,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
"salesTouchpoint": {
"salesTouchpointId": 3,
"name": "Website (Perplex)",
@@ -126,18 +136,14 @@
"forbiddenPaymentMethods": null,
"sellingPrices": [
{
- "sellingPriceId": 82,
- "amountExclTax": 92,
- "amountInclTax": 100,
- "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "sellingPriceId": 195,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ "amountExclTax": 13486,
+ "amountInclTax": 14700,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
"toInclusive": "2029-12-01T23:00:00.000+00:00",
- "internalPrice": 0.0000,
- "taxMetadata": {
- "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%"
- }
+ "internalPrice": 0.0000
}
]
}
@@ -145,10 +151,10 @@
"purchasePrices": null,
"auditTrail": [
{
- "auditTrailId": 162,
+ "auditTrailId": 475,
"action": "insert",
"user": "api",
- "timestamp": "2024-11-25T08:39:36.793+00:00"
+ "timestamp": "2025-05-07T14:05:43.213+00:00"
}
]
}
\ No newline at end of file
diff --git a/src/java/ABTProductsPUTGenerator/bin/output.json b/src/java/ABTProductsPUTGenerator/bin/output.json
index 070aba6..df4e037 100644
--- a/src/java/ABTProductsPUTGenerator/bin/output.json
+++ b/src/java/ABTProductsPUTGenerator/bin/output.json
@@ -1,57 +1,58 @@
{
- "parentProductId" : null,
- "productCode" : "30901-WA",
- "gboPackageTemplateId" : "30901",
+ "fikoArticleNumber" : null,
+ "parentProductId" : 114,
+ "gboPackageTemplateId" : "33629",
"tapConnectProductCode" : null,
- "productGroupMetadata" : null,
- "productName" : "HTM P1W Prolongatie-Test 90% Korting",
- "productDescription" : "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis met korting!",
+ "productName" : "HTM Regio Vrij - Voltarief - Losse Maand - HL62",
+ "productDescription" : "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
"validityPeriod" : {
- "validityPeriodId" : 148,
- "fromInclusive" : "2023-12-31T23:00:00.000+00:00",
- "toInclusive" : "2029-12-08T04:00:00.000+00:00"
+ "validityPeriodId" : 262,
+ "fromInclusive" : "2024-09-30T23:00:00.000+00:00",
+ "toInclusive" : "2099-12-30T23:00:00.000+00:00"
},
"productTranslations" : [ {
"language" : "en",
- "name" : "HTM Prolongation-Test 90% Discount",
- "description" : "Are you a regular traveler? Activate HTM 90% discount on your EMV card!"
+ "name" : "HTM Regio Free - Full Fare - 1 Month - HL62",
+ "description" : "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62"
} ],
- "productOwnerId" : 17,
- "marketSegmentIds" : [ 1 ],
- "customerSegmentIds" : [ 2, 3, 4, 5 ],
- "productCategoryId" : 1,
+ "productOwnerId" : 19,
+ "marketSegmentIds" : null,
+ "customerSegmentIds" : null,
+ "allowedGboAgeProfileIds" : [ 1, 4, 5 ],
+ "productCategoryId" : 3,
"requiredCustomerLevelId" : 3,
"requiredProducts" : null,
"incompatibleProducts" : null,
- "mandatoryCustomerDataItemIds" : [ 1, 2, 4, 5 ],
- "requiredGboPersonalAttributes" : null,
+ "mandatoryCustomerDataItemIds" : [ 1, 2, 4, 8 ],
+ "requiredGboPersonalAttributeIds" : [ 1, 2, 3 ],
"tokenTypeIds" : [ 1 ],
"paymentMomentId" : 1,
- "serviceOptions" : null,
- "validityDuration" : "P1W",
+ "serviceOptionIds" : null,
+ "validityDuration" : "P1M",
"maxStartInFutureDuration" : "P6W",
- "isRenewable" : true,
- "sendInvoice" : true,
+ "isRenewable" : false,
+ "sendInvoice" : false,
"imageReference" : "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
- "productPageUrl" : "https://web.acc.cloud.htm.nl/webshop/htm-90-korting/",
- "termsUrl" : "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-90-korting/",
+ "productPageUrl" : "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl" : "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
"isSellableAtHtm" : true,
"needsSolvencyCheckConsumer" : false,
"needsSolvencyCheckBusiness" : false,
"sellingPeriods" : [ {
- "sellingPeriodId" : 89,
- "fromInclusive" : "2024-09-30T23:00:00.000+00:00",
- "toInclusive" : "2029-12-01T23:00:00.000+00:00",
+ "sellingPeriodId" : 214,
+ "fromInclusive" : "2024-10-30T23:00:00.000+00:00",
+ "toInclusive" : "2029-12-30T23:00:00.000+00:00",
"salesTouchpointId" : 3,
"forbiddenPaymentMethodIds" : null,
"sellingPrices" : [ {
- "sellingPriceId" : 82,
- "amountExclTax" : 92,
- "amountInclTax" : 100,
- "fromInclusive" : "2024-09-30T23:00:00.000+00:00",
+ "sellingPriceId" : 195,
+ "taxCode" : "V09",
+ "taxPercentage" : 9.0,
+ "amountExclTax" : 13486,
+ "amountInclTax" : 14700,
+ "fromInclusive" : "2024-10-30T23:00:00.000+00:00",
"toInclusive" : "2029-12-01T23:00:00.000+00:00",
- "internalPrice" : 0.0,
- "taxMetadataId" : "47C8972E-A730-4032-9BDA-AF0A5BCB2C85"
+ "internalPrice" : 0.0
} ]
} ],
"purchasePrices" : null
diff --git a/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java b/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java
index 3246d16..69426ac 100644
--- a/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java
+++ b/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java
@@ -100,8 +100,8 @@ public class ABTProductsPUTGenerator {
((ObjectNode)newJsonNode).putRawValue("customerSegmentIds", null);
}
case "allowedGboAgeProfiles" -> {
- LOGGER.info("Rewriting null allowedGboAgeProfiles to allowedGboAgeProfilesIds...");
- ((ObjectNode)newJsonNode).putRawValue("allowedGboAgeProfilesIds", null);
+ LOGGER.info("Rewriting null allowedGboAgeProfiles to allowedGboAgeProfileIds...");
+ ((ObjectNode)newJsonNode).putRawValue("allowedGboAgeProfileIds", null);
}
case "mandatoryCustomerDataItems" -> {
LOGGER.info("Rewriting null mandatoryCustomerDataItems to mandatoryCustomerDataItemIds...");
@@ -283,7 +283,8 @@ public class ABTProductsPUTGenerator {
((ObjectNode)sellingPeriod).putRawValue("forbiddenPaymentMethodIds", null);
}
}
- if (sellingPeriod.get("sellingPrices") != null) {
+ if (!sellingPeriod.get("sellingPrices").isNull()) {
+ LOGGER.info("Deep-copying sellingPrices...");
ArrayNode sellingPrices = ((ArrayNode)sellingPeriod.get("sellingPrices")).deepCopy();
((ObjectNode)sellingPeriod).remove("sellingPrices");
if (!sellingPrices.isEmpty()) {
@@ -299,8 +300,8 @@ public class ABTProductsPUTGenerator {
}
}
case "purchasePrices" -> {
- LOGGER.info("Rewriting taxMetadata in purchasePrices to taxMetadataId...");
- if (jsonField.getValue() != null) {
+ LOGGER.info("Deep-copying purchasePrices...");
+ if (!jsonField.getValue().isNull()) {
ArrayNode purchasePrices = ((ArrayNode)jsonField.getValue()).deepCopy();
((ObjectNode)newJsonNode).putArray("purchasePrices").addAll(purchasePrices);
} else {
diff --git a/src/openapi/apim/TP-PAD.yaml b/src/openapi/apim/TP-PAD.yaml
new file mode 100644
index 0000000..5c522d7
--- /dev/null
+++ b/src/openapi/apim/TP-PAD.yaml
@@ -0,0 +1,482 @@
+openapi: 3.0.1
+info:
+ title: Personal Account Data (PAD) APIs for touchpoints and Service Engine
+ description: |-
+ APIs for touchpoints and Service Engine to manage Personal Account Data (PAD) on OVpay tokens (xTATs).\
+ These APIs connect directly to the PADP APIs in GBO APIM and are implemented in Logic Apps
+ in the Integration Layer.
+ version: '1.0'
+servers:
+ - url: https://api.integratielaag.nl/abt/touchpoint/1.0
+tags:
+ - name: Personal Data APIs for touchpoints
+ description: Personal Data APIs for touchpoints, no Service Engine in between!
+ - name: Personal Data APIs for Service Engine
+ description: Personal Data APIs for Service Engine, not to be exposed to touchpoints!
+paths:
+ /personal-data/{xtat}:
+ post:
+ tags:
+ - Personal Data APIs for touchpoints
+ summary: Add the supplied Personal Data to the given xTAT (that should not contain any Personal Data yet).
+ description: |-
+ - The given xTAT should not contain any Personal Data yet (the PATCH endpoint should be used in that case) - if the given xTAT already contains Personal Data, an error is thrown;
+ - The given e-mail address will be used for future OTP challenges to manage the Personal Data in the future - this e-mail adress should therefore be validated;
+ - If the e-mail address is not yet validated by other means (e.g. the e-mail address is used for login, or is entered twice to prevent typos), an OTP challenge for the e-mail address should be triggered and supplied to this endpoint;
+ - xTAT and e-mail address are always required, for the Personal Data it is allowed to supply any subset, or all three data attributes;
+ - Each of the three data attributes is validated - for the requirements per attribute, see the descriptions in the request details below;
+ - If any attribute fails validation, none of the attributes will be added to the xTAT.
+ operationId: CreatePersonalData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
+ schema:
+ type: string
+ format: uuid
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ required:
+ - email
+ properties:
+ email:
+ type: string
+ format: email
+ description: Email address to be used for OTP challenges to prove ownership and manage the Personal Data in the future
+ example: 8Z9dG@example.com
+ otp:
+ type: string
+ pattern: ^[0-9]{6}$
+ description: OTP is optional, should be supplied if the e-mail address is not yet validated by other means (e.g. the e-mail address is used for login, or is entered twice to prevent typo's)
+ example: "053395"
+ name:
+ type: string
+ description: Should consist of at least two words (first name and last name)
+ example: John Doe
+ birthDate:
+ type: string
+ format: date
+ description: Should be a date between 1900-01-01 and today, in the format `YYYY-MM-DD`
+ example: 2000-01-01
+ photo:
+ type: string
+ description: Should be a JPG image, with a filesize of max. 512KB and resolution between 520x520 and 720x720 pixels
+ format: binary
+ encoding:
+ photo:
+ contentType: image/jpeg
+ responses:
+ '201':
+ description: Created
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '500':
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ get:
+ tags:
+ - Personal Data APIs for touchpoints
+ summary: Retrieve the decrypted Personal Data for the given xTAT, using the OTP for verification of ownership.
+ description: OTP challenge is required to retrieve the Personal Data.
+ operationId: GetDecryptedPersonalData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
+ - name: otp
+ in: query
+ required: true
+ description: OTP challenge code that the token owner received in their e-mail inbox. OTP is always required for managing existing Personal Data.
+ schema:
+ type: string
+ pattern: ^[0-9]{6}$
+ example: "053395"
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DecryptedPersonalData'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '500':
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ patch:
+ tags:
+ - Personal Data APIs for touchpoints
+ summary: Update the supplied personal data for the given xTAT, using the OTP for verification of ownership.
+ description: This is a PATCH call, so only the personal data that the user desires to change need to be supplied. Integration layer supplements with any other existing personal data to be able to call GBO (PUT call).
+ operationId: UpdatePersonalData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ required:
+ - otp
+ properties:
+ otp:
+ type: string
+ pattern: ^[0-9]{6}$
+ description: OTP challenge code that the token owner received in their e-mail inbox. OTP is always required for managing existing Personal Data.
+ example: "053395"
+ name:
+ type: string
+ description: Should consist of at least two words (first name and last name)
+ example: John Doe
+ birthDate:
+ type: string
+ format: date
+ description: Should be a date between 1900-01-01 and today, in the format `YYYY-MM-DD`
+ example: 2000-01-01
+ photo:
+ type: string
+ description: Should be a JPG image, with a filesize of max. 512KB and resolution between 520x520 and 720x720 pixels
+ format: binary
+ encoding:
+ photo:
+ contentType: image/jpeg
+ responses:
+ '200':
+ description: OK
+ /personal-data/generate-otp:
+ get:
+ tags:
+ - Personal Data APIs for touchpoints
+ summary: Trigger OTP email for the given xTAT or e-mail address, to prove ownership
+ operationId: GenerateOtp
+ description: |-
+ Generate an OTP challenge e-mail to prove ownership of the given e-mail address or xTAT.\
+ Only one type of parameter can be supplied, either xtat or email. When both are supplied, an error is thrown.
+ parameters:
+ - name: xtat
+ in: query
+ required: false
+ schema:
+ type: string
+ format: uuid
+ example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
+ - name: email
+ in: query
+ required: false
+ schema:
+ type: string
+ format: email
+ example: 'sV4yj@example.com'
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/OtpResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ '500':
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorResponse'
+ /personal-data/{xtat}/administrative-data:
+ get:
+ tags:
+ - Personal Data APIs for Service Engine
+ summary: API 1211 - Get Administrative Data
+ description: Integration Layer utilizes PAD management V2 in GBO APIM (`/pad-management/v2/..`)
+ operationId: GetAdministrativeData
+ parameters:
+ - name: xtat
+ description: xTAT to get administrative data for
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/AdministrativeData"
+ examples:
+ Valid and complete PAD:
+ summary: Valid and complete PAD
+ value:
+ name:
+ inaccuracyFlag: false
+ inaccuracyFlagReason: null
+ inaccuracyFlagCounter: 0
+ changeCounter: 0
+ maxUpdatesVerificationCount: 1
+ lastChangeDate: "2025-03-26T10:18:42.947"
+ isValidated: false
+ photo:
+ inaccuracyFlag: false
+ inaccuracyFlagReason: null
+ inaccuracyFlagCounter: 0
+ changeCounter: 0
+ maxUpdatesVerificationCount: 5
+ lastChangeDate: "2025-03-26T10:18:42.947"
+ isValidated: false
+ birthdate:
+ inaccuracyFlag: false
+ inaccuracyFlagReason: null
+ inaccuracyFlagCounter: 0
+ changeCounter: 0
+ maxUpdatesVerificationCount: 3
+ lastChangeDate: "2025-03-26T10:18:42.947"
+ isValidated: false
+ Partially filled PAD (no photo):
+ summary: Partially filled PAD (no photo)
+ value:
+ name:
+ inaccuracyFlag: false
+ inaccuracyFlagReason: null
+ inaccuracyFlagCounter: 0
+ changeCounter: 0
+ maxUpdatesVerificationCount: 1
+ lastChangeDate: "2025-03-26T10:18:42.947"
+ isValidated: false
+ photo: null
+ birthdate:
+ inaccuracyFlag: false
+ inaccuracyFlagReason: null
+ inaccuracyFlagCounter: 0
+ changeCounter: 0
+ maxUpdatesVerificationCount: 3
+ lastChangeDate: "2025-03-26T10:18:42.947"
+ isValidated: false
+ Flagged PAD:
+ summary: Flagged PAD
+ value:
+ name:
+ inaccuracyFlag: true
+ inaccuracyFlagReason: "Invalid name"
+ inaccuracyFlagCounter: 1
+ changeCounter: 1
+ maxUpdatesVerificationCount: 1
+ lastChangeDate: "2025-03-26T10:18:42.947"
+ isValidated: false
+ photo:
+ inaccuracyFlag: true
+ inaccuracyFlagReason: "Invalid photo"
+ inaccuracyFlagCounter: 1
+ changeCounter: 0
+ maxUpdatesVerificationCount: 5
+ lastChangeDate: "2025-03-26T10:18:42.947"
+ isValidated: false
+ birthdate:
+ inaccuracyFlag: true
+ inaccuracyFlagReason: "Invalid birthdate"
+ inaccuracyFlagCounter: 1
+ changeCounter: 2
+ maxUpdatesVerificationCount: 3
+ lastChangeDate: "2025-03-26T10:18:42.947"
+ isValidated: false
+ "400":
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ErrorResponse"
+ examples:
+ Invalid UUID:
+ summary: Invalid UUID
+ value:
+ errors:
+ code: "0x03000103"
+ data: [
+ "geen-uuid"
+ ]
+ message: "The provided scTat is not a valid UUID"
+ exceptionClassName: "PadpConstraintViolationException"
+ exceptionStackTrace: "not available because debug mode is turned off"
+ "404":
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ErrorResponse"
+ examples:
+ No PAD found for xTAT:
+ summary: No PAD found for xTAT
+ value:
+ errors:
+ code: "0x03000105"
+ data: []
+ message: "Transit account not found"
+ exceptionClassName: "PadpEntityNotFoundException"
+ exceptionStackTrace: "not available because debug mode is turned off"
+ "500":
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ErrorResponse"
+ examples:
+ Unknown xTAT:
+ summary: Unknown xTAT
+ value:
+ errors:
+ code: "0x00000001"
+ data: null
+ message: "400 : \"{\"errorMessage\":{\"referenceId\":\"076f0de4-df33-42a3-add0-def971ab6679\",\"message\":\"Unknown external transit account token.\"},\"businessExceptions\":[{\"code\":\"TM0207\",\"message\":\"Unknown external transit account token.\"}]}\""
+ exceptionClassName: "BadRequest"
+ exceptionStackTrace: "not available because debug mode is turned off"
+components:
+ schemas:
+ AdministrativeData:
+ type: object
+ properties:
+ name:
+ $ref: '#/components/schemas/AdministrativeDataElement'
+ photo:
+ $ref: '#/components/schemas/AdministrativeDataElement'
+ birthdate:
+ $ref: '#/components/schemas/AdministrativeDataElement'
+ additionalProperties: false
+ AdministrativeDataElement:
+ type: object
+ properties:
+ inaccuracyFlag:
+ type: boolean
+ inaccuracyFlagReason:
+ type: string
+ nullable: true
+ inaccuracyFlagCounter:
+ type: integer
+ format: int32
+ changeCounter:
+ type: integer
+ format: int32
+ maxUpdatesVerificationCount:
+ type: integer
+ format: int32
+ lastChangeDate:
+ type: string
+ format: date-time
+ isValidated:
+ type: boolean
+ additionalProperties: false
+ DecryptedData:
+ type: object
+ properties:
+ name:
+ type: string
+ nullable: true
+ birthdate:
+ type: string
+ nullable: true
+ photo:
+ type: string
+ description: Base64 encoded photo
+ format: byte
+ nullable: true
+ additionalProperties: false
+ DecryptedPersonalData:
+ type: object
+ properties:
+ decryptedData:
+ $ref: '#/components/schemas/DecryptedData'
+ additionalProperties: false
+ Error:
+ type: object
+ properties:
+ code:
+ type: string
+ nullable: true
+ data:
+ type: array
+ items:
+ type: string
+ nullable: true
+ message:
+ type: string
+ nullable: true
+ additionalProperties: false
+ ErrorResponse:
+ type: object
+ properties:
+ errors:
+ type: array
+ items:
+ $ref: '#/components/schemas/Error'
+ nullable: true
+ exceptionClassName:
+ type: string
+ nullable: true
+ exceptionStackTrace:
+ type: string
+ nullable: true
+ additionalProperties: false
+ Metadata:
+ type: object
+ properties:
+ encryptedEphemeralKey:
+ type: string
+ nullable: true
+ additionalProperties: false
+ OtpResponse:
+ type: object
+ properties:
+ maskedEmailAddress:
+ type: string
+ nullable: true
+ additionalProperties: false
\ No newline at end of file
diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml
index d814fc5..c21ea8d 100644
--- a/src/openapi/customers/SE-customers.yaml
+++ b/src/openapi/customers/SE-customers.yaml
@@ -4,7 +4,7 @@ info:
description: >-
Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database.
To be used by touchpoints to get information about HTM customers.
- version: '1.0'
+ version: "1.0"
servers:
- url: https://api.integratielaag.nl/v1/touchpoint
tags:
@@ -18,10 +18,12 @@ paths:
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.
+ 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 search parameters are required to disambiguate.
parameters:
- name: customerProfileId
- in: query
+ in: query
schema:
type: integer
example: 1
@@ -44,7 +46,7 @@ paths:
in: query
schema:
type: integer
- example: 1
+ example: 1
- name: birthname
in: query
schema:
@@ -71,138 +73,134 @@ paths:
in: query
schema:
type: string
- example: Sesamestreet
+ example: Sesamestreet
- name: addressHouseNumber
in: query
schema:
type: integer
- example: 1
+ example: 1
- name: addressHouseNumberSuffix
in: query
schema:
type: string
- example: A
+ example: A
- name: addressPostalCode
in: query
schema:
type: string
- example: 1234 AB
+ example: 1234 AB
- name: addressCity
in: query
schema:
type: string
- example: The Hague
+ example: The Hague
- name: addressCountry
in: query
schema:
type: string
- example: The Netherlands
+ example: The Netherlands
- name: phoneNumber
in: query
schema:
type: string
- example: "0123456789"
+ example: "0123456789"
- name: ovChipcardNumber
in: query
schema:
type: integer
- example: 0123456789
+ example: 0123456789
- name: ovChipcardAlias
in: query
schema:
type: string
- example: My ovchipcard
+ example: My ovchipcard
- name: ovPayTokenNumber
in: query
schema:
type: integer
- example: 0123456789
+ example: 0123456789
- name: ovPayTokenAlias
in: query
schema:
type: string
- example: My Ov Pay Token
+ example: My Ov Pay Token
- name: ovPayTokenXTat
in: query
schema:
type: string
- example: 180d04e0-a721-447e-a1d9-b416937b43bc
+ example: 180d04e0-a721-447e-a1d9-b416937b43bc
- name: ovPayTokenXBot
in: query
schema:
type: string
example: e1307c73-676a-4d07-967b-6141276f7c7c
responses:
- '200':
- description: OK
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CustomersResponse'
- '404':
- description: No customer found
- content:
- application/json:
- example:
- {
- "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers",
- "apiErrorCode": "400.1",
- "title": "Niet gevonden",
- "detail": "Klant niet gevonden",
- "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
- "errors": [
- {
- "subApiErrorCode": "0017"
- }
- ]
- }
- '409':
- description: Multiple customers found
- content:
- application/json:
- example:
- {
- "type": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers",
- "apiErrorCode": "409.1",
- "title": "Meer dan 1 klantprofiel gevonden",
- "detail": "Meer dan 1 klantprofiel gevonden. Verfijn je zoekcriteria.",
- "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7"
- }
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/CustomersResponse"
+ "404":
+ description: No customer found
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/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",
+ }
/customers/tokens:
get:
- tags:
+ tags:
- Customers
parameters:
- - name: X-HTM-JWT-AUTH-HEADER
- in: header
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
required: false
description: The JWT of a customer in case of touchpoint were customer logs in themselves
- - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
- in: header
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
schema:
type: string
example: feaaef83-a551-4283-8419-340b1ada3b55
required: false
- description: The customerProfileId of a customer in the case of the SMP
- - name: X-HTM-ROLE-HEADER
- in: header
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
schema:
type: string
example: Customer
required: false
description: The role of the HTM employee in the case of the SMP
- - name: ovPayTokenId
- in: query
+ - name: ovPayTokenId
+ in: query
schema:
type: integer
example: 1
required: false
description: The ovpay token id of a specific customer token
- - name: tokenTypeId
- in: query
+ - name: tokenTypeId
+ in: query
schema:
type: array
items:
@@ -210,53 +208,53 @@ paths:
explode: false
description: Filter on tokentype. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital
required: false
- - name: xTat
- in: query
+ - name: xTat
+ in: query
schema:
type: string
example: 4c2d60e2-cd03-4c80-ae70-573a301f0bff
required: false
description: Filter on the xTat of a customer token
- - name: xBot
- in: query
+ - name: xBot
+ in: query
schema:
type: string
example: 91641b54-056c-49ea-b598-ccde81d6c45a
required: false
description: Filter on the xBot of a customer token
- - name: ovpasNumber
- in: query
+ - name: ovpasNumber
+ in: query
schema:
type: string
example: 56HYRTL
required: false
description: Filter on the OV pasNumber of a customer token of type OV Pas
- - name: lastDigits
- in: query
+ - name: lastDigits
+ in: query
schema:
type: string
example: 1234
required: false
description: Filter on the last digits of a customer token of type EMV
- - name: tokenStatusId
- in: query
+ - name: tokenStatusId
+ in: query
schema:
type: array
items:
type: integer
explode: false
description: Filter on token status. 1 = Retired, 2 = Active, 3 = Replaced (*), 4 = On Stock, 5 = Suspended, 6 = Removed by customer (*), 7 = Renewed Active
- required: false
- - name: expirationDate
- in: query
+ required: false
+ - name: expirationDate
+ in: query
schema:
type: string
format: date-time
example: 2027-01-01T09:00:00Z
required: false
- description: Filter on the expirationDate of a customer token
- - name: replacedByTokenId
- in: query
+ description: Filter on the expirationDate of a customer token
+ - name: replacedByTokenId
+ in: query
schema:
type: integer
example: 2
@@ -265,7 +263,7 @@ paths:
summary: Get a list of all OvPayTokens for a certain customer.
description: Get a list of all OvPayTokens for a certain customer, only returns the tokens for an identified customer through JWT or customerProfileId in the headers.
responses:
- '200':
+ "200":
description: OK
content:
application/json:
@@ -277,671 +275,702 @@ paths:
description: Empty token list
value:
{
- "ovPayTokens": [
- ],
- _links: {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens",
- "method": "GET"
- }
- }
+ "ovPayTokens": [],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
+ },
}
EMV without PAD:
summary: EMV without PAD
description: EMV without PAD
value:
{
- "ovPayTokens": [
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate": null,
+ "photo": null,
+ },
+ "_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:
{
- "customerProfileId": 1,
- "ovPayTokenId": 1,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 1,
- "name": "EMV"
- },
- "alias": "MyToken",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 2,
- "autoReloadRegistration": null,
- "ePurse": null,
- "personalAccountData":{
- "name": null,
- "birthdate": null,
- "photo": null
- },
- "_links": {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1",
- "method": "GET"
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/tokenPersonalizations?ovpaytokenId=1",
- "method": "POST"
- }
- }
- }
- ],
- _links: {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens",
- "method": "GET"
- }
- }
+ },
}
OV pas without PAD:
summary: OV pas without PAD
description: OV pas without PAD
value:
{
- "ovPayTokens": [
- {
- "customerProfileId": 1,
- "ovPayTokenId": 1,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "MyToken",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 2,
- "autoReloadRegistration": null,
- "ePurse": {
- "e-PurseBalance": {
- "currency": "EUR",
- "amount": 350
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "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,
+ },
+ "_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",
+ },
},
- "status": "ACTIVE",
- "originDate": "2019-07-16T11:00:00+02:00"
},
- "personalAccountData":{
- "name": null,
- "birthdate": null,
- "photo": null
- },
- "_links": {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1",
- "method": "GET"
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1",
- "method": "POST"
- }
- }
- }
- ],
- _links: {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens",
- "method": "GET"
- }
- }
- }
+ },
+ }
OV pas with PAD and autoReload:
summary: OV pas with PAD and autoReload
description: OV pas with PAD and autoReload
value:
{
- "ovPayTokens": [
- {
- "customerProfileId": 1,
- "ovPayTokenId": 1,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "MyToken",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 2,
- "autoReloadRegistration": {
- "autoReloadAmount": 500,
- "retailerReferenceId": "abc",
- "arrit": "425f7fc2-1103-4822-9c79-7c4aaa2fb6aa",
- "autoReloadRegistrationStatus": "ACTIVE",
- "autoReloadRegistrationStartDateTime": "2024-06-02T15:03:46Z"
- },
- "ePurse": {
- "e-PurseBalance": {
- "currency": "EUR",
- "amount": 350
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "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",
+ },
+ },
+ "_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",
+ },
},
- "status": "ACTIVE",
- "originDate": "2019-07-16T11:00:00+02:00"
},
- "personalAccountData":{
- "name": {
- "inaccuracyFlag": false,
- "inaccuracyFlagReason": null,
- "inaccuracyFlagSetCounter": 0,
- "isValidated": false,
- "changeCounter": 0,
- "maxUpdatesVerificationCount": 0,
- "lastChangeDate": "2024-08-24T14:15:22Z"
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
},
- "birthdate": {
- "inaccuracyFlag": false,
- "inaccuracyFlagReason": null,
- "inaccuracyFlagSetCounter": 0,
- "isValidated": false,
- "changeCounter": 0,
- "maxUpdatesVerificationCount": 0,
- "lastChangeDate": "2024-08-24T14:15:22Z"
- },
- "photo": {
- "inaccuracyFlag": false,
- "inaccuracyFlagReason": null,
- "inaccuracyFlagSetCounter": 0,
- "isValidated": false,
- "changeCounter": 0,
- "maxUpdatesVerificationCount": 0,
- "lastChangeDate": "2024-08-24T14:15:22Z"
- }
- },
- "_links": {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1",
- "method": "GET"
- },
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips",
- "method": "GET"
- },
- "update_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1",
- "method": "PUT"
- }
- }
- }
- ],
- _links: {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens",
- "method": "GET"
- }
- }
- }
+ },
+ }
OV pas with partial PAD:
summary: OV pas with partial PAD
description: OV pas with partial PAD
value:
{
- "ovPayTokens": [
- {
- "customerProfileId": 1,
- "ovPayTokenId": 1,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "MyToken",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 2,
- "autoReloadRegistration": null,
- "ePurse": {
- "e-PurseBalance": {
- "currency": "EUR",
- "amount": 350
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "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,
+ },
+ "_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",
+ },
},
- "status": "ACTIVE",
- "originDate": "2019-07-16T11:00:00+02:00"
},
- "personalAccountData":{
- "name": null,
- "birthdate": {
- "inaccuracyFlag": true,
- "inaccuracyFlagReason": "Invalid birthdate",
- "inaccuracyFlagSetCounter": 1,
- "isValidated": false,
- "changeCounter": 0,
- "maxUpdatesVerificationCount": 0,
- "lastChangeDate": "2024-08-24T14:15:22Z"
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
},
- "photo": null
- },
- "_links": {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1",
- "method": "GET"
- },
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips",
- "method": "GET"
- },
- "update_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1",
- "method": "PUT"
- }
- }
- }
- ],
- _links: {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens",
- "method": "GET"
- }
- }
- }
+ },
+ }
OV pas with invalid PAD:
summary: OV pas with invalid PAD
description: OV pas with invalid PAD
value:
{
- "ovPayTokens": [
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "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",
+ },
+ },
+ "_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:
{
- "customerProfileId": 1,
- "ovPayTokenId": 1,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "MyToken",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 2,
- "autoReloadRegistration": null,
- "ePurse": {
- "e-PurseBalance": {
- "currency": "EUR",
- "amount": 350
- },
- "status": "ACTIVE",
- "originDate": "2019-07-16T11:00:00+02:00"
- },
- "personalAccountData":{
- "name": {
- "inaccuracyFlag": true,
- "inaccuracyFlagReason": "T.B.D",
- "inaccuracyFlagSetCounter": 1,
- "isValidated": false,
- "changeCounter": 0,
- "maxUpdatesVerificationCount": 0,
- "lastChangeDate": "2024-08-24T14:15:22Z"
- },
- "birthdate": {
- "inaccuracyFlag": true,
- "inaccuracyFlagReason": "T.B.D",
- "inaccuracyFlagSetCounter": 1,
- "isValidated": false,
- "changeCounter": 0,
- "maxUpdatesVerificationCount": 0,
- "lastChangeDate": "2024-08-24T14:15:22Z"
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
},
- "photo": {
- "inaccuracyFlag": true,
- "inaccuracyFlagReason": null,
- "inaccuracyFlagSetCounter": 1,
- "isValidated": false,
- "changeCounter": 0,
- "maxUpdatesVerificationCount": 0,
- "lastChangeDate": "2024-08-24T14:15:22Z"
- }
- },
- "_links": {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=1",
- "method": "GET"
- },
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips",
- "method": "GET"
- },
- "update_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1",
- "method": "PUT"
- }
- }
- }
- ],
- _links: {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens",
- "method": "GET"
- }
- }
- }
- Token list with every status for tokenTypeId = 2, role = KlantenService :
- summary: Token list with every status for tokenTypeId = 2, role = KlantenService
+ },
+ }
+ ? Token list with every status for tokenTypeId = 2, role = KlantenService
+ : summary: Token list with every status for tokenTypeId = 2, role = KlantenService
description: Token list with every status for tokenTypeId = 2, role = KlantenService
value:
{
- "ovPayTokens": [
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": 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" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 3, "name": "Replaced (*)" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": 2,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate": null,
+ "photo": null,
+ },
+ },
+ {
+ "customerProfileId": 18,
+ "ovPayTokenId": 13,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 4, "name": "On stock" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate": null,
+ "photo": null,
+ },
+ },
+ {
+ "customerProfileId": 132,
+ "ovPayTokenId": 21,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "Mijn OV Pas",
+ "tokenStatus":
+ { "tokenStatusId": 5, "name": "Suspended" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate": null,
+ "photo": null,
+ },
+ },
+ {
+ "customerProfileId": 166,
+ "ovPayTokenId": 28,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "Mijn OV Pas",
+ "tokenStatus":
+ {
+ "tokenStatusId": 6,
+ "name": "Removed by customer (*)",
+ },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate": null,
+ "photo": null,
+ },
+ },
+ {
+ "customerProfileId": 166,
+ "ovPayTokenId": 115,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "My retired token",
+ "tokenStatus":
+ { "tokenStatusId": 1, "name": "Retired" },
+ "expirationDate": "2025-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate": null,
+ "photo": null,
+ },
+ },
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 118,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "My found token",
+ "tokenStatus":
+ { "tokenStatusId": 7, "name": "Renewed Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate": null,
+ "photo": null,
+ },
+ },
+ ],
+ _links:
{
- "customerProfileId": 1,
- "ovPayTokenId": 1,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "MyToken",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 0,
- "autoReloadRegistration": null,
- "ePurse": null,
- "personalAccountData": {
- "name": null,
- "birthdate": null,
- "photo": null,
- }
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
},
- {
- "customerProfileId": 1,
- "ovPayTokenId": 6,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "MyToken",
- "tokenStatus": {
- "tokenStatusId": 3,
- "name": "Replaced (*)"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 2,
- "autoReloadRegistration": null,
- "ePurse": null,
- "personalAccountData": {
- "name": null,
- "birthdate": null,
- "photo": null
- }
- },
- {
- "customerProfileId": 18,
- "ovPayTokenId": 13,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "MyToken",
- "tokenStatus": {
- "tokenStatusId": 4,
- "name": "On stock"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 2,
- "autoReloadRegistration": null,
- "ePurse": null,
- "personalAccountData":{
- "name": null,
- "birthdate": null,
- "photo": null
- }
- },
- {
- "customerProfileId": 132,
- "ovPayTokenId": 21,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "Mijn OV Pas",
- "tokenStatus": {
- "tokenStatusId": 5,
- "name": "Suspended"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 0,
- "autoReloadRegistration": null,
- "ePurse": null,
- "personalAccountData": {
- "name": null,
- "birthdate": null,
- "photo": null,
- }
- },
- {
- "customerProfileId": 166,
- "ovPayTokenId": 28,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "Mijn OV Pas",
- "tokenStatus": {
- "tokenStatusId": 6,
- "name": "Removed by customer (*)"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 0,
- "autoReloadRegistration": null,
- "ePurse": null,
- "personalAccountData": {
- "name": null,
- "birthdate": null,
- "photo": null,
- }
- },
- {
- "customerProfileId": 166,
- "ovPayTokenId": 115,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "My retired token",
- "tokenStatus": {
- "tokenStatusId": 1,
- "name": "Retired"
- },
- "expirationDate": "2025-02-01",
- "replacedByTokenId": 0,
- "autoReloadRegistration": null,
- "ePurse": null,
- "personalAccountData": {
- "name": null,
- "birthdate": null,
- "photo": null,
- }
- },
- {
- "customerProfileId": 1,
- "ovPayTokenId": 118,
- "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
- "alias": "My found token",
- "tokenStatus": {
- "tokenStatusId": 7,
- "name": "Renewed Active"
- },
- "expirationDate": "2028-02-01",
- "replacedByTokenId": 0,
- "autoReloadRegistration": null,
- "ePurse": null,
- "personalAccountData": {
- "name": null,
- "birthdate": null,
- "photo": null,
- }
- }
- ],
- _links: {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens",
- "method": "GET"
- }
- }
- }
+ }
post:
tags:
- Customers
- parameters:
- - name: X-HTM-JWT-AUTH-HEADER
- in: header
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
required: false
description: The JWT of a customer in case of touchpoint were customer logs in themselves
- - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
- in: header
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
schema:
type: string
example: feaaef83-a551-4283-8419-340b1ada3b55
required: false
- description: The customerProfileId of a customer in the case of the SMP
- - name: X-HTM-ROLE-HEADER
- in: header
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
schema:
type: string
example: Customer
required: false
summary: Create a new OV paytoken in the database for a given customer
- description: Create a new OV paytoken for a customerProfile
+ description: Create a new OV paytoken for a customerProfile
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
examples:
- Add EMV token:
+ Add EMV token:
summary: Add EMV token
description: Add EMV token
- value:
+ value:
{
- "ovPayToken": {
- "tokenTypeId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 200,
- "alias": "Mijn token"
- }
- }
- Add OV pas physical token:
+ "ovPayToken":
+ {
+ "tokenTypeId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 200,
+ "alias": "Mijn token",
+ },
+ }
+ Add OV pas physical token:
summary: Add OV pas physical token
description: Add OV pas physical token
- value:
+ value:
{
- "ovPayToken": {
- "tokenTypeId": 2,
- "ovpasNumber": "OV34567",
- "verificationCode": "211",
- "alias": "Mijn token"
- }
- }
+ "ovPayToken":
+ {
+ "tokenTypeId": 2,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "211",
+ "alias": "Mijn token",
+ },
+ }
responses:
"201":
description: Created
@@ -950,217 +979,224 @@ paths:
schema:
$ref: "#/components/schemas/unavailable"
examples:
- Add EMV token:
+ Add EMV token:
summary: Add EMV token
description: Add EMV token
- value:
+ value:
{
- "ovPayToken": {
+ "ovPayToken":
+ {
"customerProfileId": 1,
"ovPayTokenId": 1,
- "tokenType": {
- "tokenTypeId": 1,
- "name": "EMV"
- },
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
"lastDigits": null,
- "ovPpasNumber": null,
+ "ovPasNumber": null,
"alias": "Mijn token",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
"expirationDate": "2028-08-31T23:59:00+02:00",
- "replacedByTokenId": 0,
+ "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"
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": 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",
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=1",
- "method": "POST"
- }
- }
},
- "_links": {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens",
- "method": "POST"
- }
- }
}
- Add OV pas physical token:
+ Add OV pas physical token:
summary: Add EMV token
description: Add EMV token
- value:
+ value:
{
- "ovPayToken": {
+ "ovPayToken":
+ {
"customerProfileId": 1,
"ovPayTokenId": 1,
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
+ "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"
- },
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
"expirationDate": "2028-08-31T23:59:00+02:00",
- "replacedByTokenId": 0,
+ "replacedByTokenId": null,
"autoReloadRegistration": null,
- "ePurse": {
- "e-PurseBalance": {
- "currency": "EUR",
- "amount": 00
+ "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/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",
},
- "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"
+ "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",
},
- "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
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
required: false
description: The JWT of a customer in case of touchpoint were customer logs in themselves
- - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
- in: header
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
schema:
type: string
example: feaaef83-a551-4283-8419-340b1ada3b55
required: false
- description: The customerProfileId of a customer in the case of the SMP
- - name: X-HTM-ROLE-HEADER
- in: header
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
schema:
type: string
example: Customer
- required: false
+ required: false
- name: ovpayTokenId
- in: path
+ in: path
schema:
type: integer
example: 1
required: true
- summary: Replace an OV paytoken with another
- description: Replace an OV paytoken in the database for a given customer with another token
+ summary: Replace an OVpay token with another (+ transfer products) - 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:
- summary: Replace with new token
- description: Replace with new token
- value:
+ 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"
- }
+ "ovPayToken":
+ {
+ "newTokenId": null,
+ "tokenTypeId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 230,
+ "alias": "Nieuw token",
+ },
}
- Replace with existing EMV token:
- summary: Replace with existing token
- description: Replace with existing token
- value:
- {
- "ovPayToken": {
- "newTokenId": 10
- }
- }
- Replace with new OV pas token:
+ 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
- value:
+ description: Replace with new OV pas token by OV-pas number.
+ value:
{
- "ovPayToken": {
- "tokenTypeId": 2,
- "ovpasNumber": "OV34567",
- "verificationCode": "211",
- "alias": "Mijn token"
- }
+ "ovPayToken":
+ {
+ "tokenTypeId": 2,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "211",
+ "alias": "Mijn token",
+ },
}
responses:
"201":
@@ -1170,134 +1206,138 @@ paths:
schema:
$ref: "#/components/schemas/unavailable"
examples:
- Replace with new EMV token:
+ Replace with new EMV token:
summary: Replace with new EMV token
description: Replace with new EMV token
- value:
+ value:
{
- "ovPayToken": {
+ "ovPayToken":
+ {
"customerProfileId": 1,
"ovPayTokenId": 5,
- "tokenType": {
- "tokenTypeId": 1,
- "name": "EMV"
- },
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
"lastDigits": null,
"ovpasNumber": null,
"alias": "Mijn token",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
"expirationDate": "2028-08-31T23:59:00+02:00",
- "replacedByTokenId": 0,
+ "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"
+ "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",
+ },
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5",
- "method": "POST"
- }
- }
- }
+ },
}
- Replace with new OV pas token:
+ Replace with new OV pas token:
summary: Replace with new OV pas token
description: Replace with new OV pas token
- value:
+ value:
{
- "ovPayToken": {
+ "ovPayToken":
+ {
"customerProfileId": 1,
"ovPayTokenId": 5,
- "tokenType": {
- "tokenTypeId": 2,
- "name": "OV-pas physical"
- },
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
"lastDigits": null,
- "ovpasNumber":"OV34567",
+ "ovpasNumber": "OV34567",
"alias": "Mijn token",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
"expirationDate": "2028-08-31T23:59:00+02:00",
- "replacedByTokenId": 0,
+ "replacedByTokenId": null,
"autoReloadRegistration": null,
- "ePurse": {
- "e-PurseBalance": {
- "currency": "EUR",
- "amount": 350
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 350 },
+ "status": "ACTIVE",
+ "originDate": "2024-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/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",
},
- "status": "ACTIVE",
- "originDate": "2024-07-16T11:00:00+02:00"
- },
- "personalAccountData":{
- "name": null,
- "birthdate": null,
- "photo": null
- },
- "_links": {
- "self": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens?ovpaytokenId=5",
- "method": "GET"
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5",
- "method": "POST"
- }
- }
- }
+ },
}
- "200":
+ "200":
description: Ok
content:
application/json:
@@ -1307,89 +1347,91 @@ paths:
Replace with existing EMV token:
summary: Replace with existing EMV token
description: Replace with existing EMV token
- value:
+ value:
{
- "ovPayToken": {
+ "ovPayToken":
+ {
"customerProfileId": 1,
"ovPayTokenId": 10,
- "tokenType": {
- "tokenTypeId": 1,
- "name": "EMV"
- },
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
"lastDigits": null,
"ovpasNumber": null,
- "alias": "Mijn bestaandetoken",
- "tokenStatus": {
- "tokenStatusId": 2,
- "name": "Active"
- },
+ "alias": "Mijn bestaande token",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
"expirationDate": "2028-08-31T23:59:00+02:00",
- "replacedByTokenId": 0,
+ "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=10",
- "method": "GET"
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": 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",
+ },
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/10/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenid=10",
- "method": "POST"
- }
- }
- }
- }
+ },
+ }
patch:
tags:
- Customers
- parameters:
- - name: X-HTM-JWT-AUTH-HEADER
- in: header
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
required: false
description: The JWT of a customer in case of touchpoint were customer logs in themselves
- - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
- in: header
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
schema:
type: string
example: feaaef83-a551-4283-8419-340b1ada3b55
required: false
- description: The customerProfileId of a customer in the case of the SMP
- - name: X-HTM-ROLE-HEADER
- in: header
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
schema:
type: string
example: Customer
- required: false
+ required: false
- name: ovpayTokenId
- in: path
+ in: path
schema:
type: integer
example: 1
@@ -1402,33 +1444,21 @@ paths:
schema:
$ref: "#/components/schemas/unavailable"
examples:
- Update an OV pay token status:
- summary: Update an OV pay token status
+ Update an OV pay token status:
+ summary: Update an OV pay token status
description: Update an OV pay token status
- value:
- {
- "ovPayToken": {
- "tokenStatusId": 5
- }
- }
- Update an OV pay token alias:
- summary: Update an OV pay token alias
+ value: { "ovPayToken": { "tokenStatusId": 5 } }
+ Update an OV pay token alias:
+ summary: Update an OV pay token alias
description: Update an OV pay token alias
- value:
- {
- "ovPayToken": {
- "alias": "Mijn nieuwe tokennaam"
- }
- }
- Update an OV pay token full:
- summary: Update an OV pay token full
+ value: { "ovPayToken": { "alias": "Mijn nieuwe tokennaam" } }
+ Update an OV pay token full:
+ summary: Update an OV pay token full
description: Update an OV pay token full
- value:
+ value:
{
- "ovPayToken": {
- "tokenStatusId": 5,
- "alias": "Mijn verloren pas"
- }
+ "ovPayToken":
+ { "tokenStatusId": 5, "alias": "Mijn verloren pas" },
}
responses:
"200":
@@ -1438,212 +1468,218 @@ paths:
schema:
$ref: "#/components/schemas/unavailable"
examples:
- Update an OV pay token status:
+ Update an OV pay token status:
summary: Update an OV pay token status
description: Update an OV pay token status
- value:
+ value:
{
- "ovPayToken": {
+ "ovPayToken":
+ {
"customerProfileId": 1,
- "ovPayTokenId": 1,
- "tokenType": {
- "tokenTypeId": 1,
- "name": "EMV"
- },
+ "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"
- },
+ "tokenStatus":
+ { "tokenStatusId": 5, "name": "Suspended" },
"expirationDate": "2028-08-31T23:59:00+02:00",
- "replacedByTokenId": 0,
+ "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"
+ "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",
+ },
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5",
- "method": "POST"
- }
- }
- }
- }
- Update an OV pay token alias:
+ },
+ }
+ Update an OV pay token alias:
summary: Update an OV pay token alias
description: Update an OV pay token alias
- value:
+ value:
{
- "ovPayToken": {
+ "ovPayToken":
+ {
"customerProfileId": 1,
- "ovPayTokenId": 1,
- "tokenType": {
- "tokenTypeId": 1,
- "name": "EMV"
- },
+ "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"
- },
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
"expirationDate": "2028-08-31T23:59:00+02:00",
- "replacedByTokenId": 0,
+ "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"
+ "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",
+ },
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5",
- "method": "POST"
- }
- }
- }
+ },
}
- Update an OV pay token full:
+ Update an OV pay token full:
summary: Update an OV pay token full
description: Update an OV pay token full
- value:
+ value:
{
- "ovPayToken": {
+ "ovPayToken":
+ {
"customerProfileId": 1,
- "ovPayTokenId": 1,
- "tokenType": {
- "tokenTypeId": 1,
- "name": "EMV"
- },
+ "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"
- },
+ "tokenStatus":
+ { "tokenStatusId": 5, "name": "Suspended" },
"expirationDate": "2028-08-31T23:59:00+02:00",
- "replacedByTokenId": 0,
+ "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"
+ "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/e35977b2-52bb-48ef-aca8-297b2c1d5058",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
},
- "partial_edit": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "PATCH"
- },
- "replace_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "POST"
- },
- "delete_token": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5",
- "method": "DELETE"
- },
- "get_productinstances": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/productinstances",
- "method": "GET"
- },
- "get_trips": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/5/trips",
- "method": "GET"
- },
- "create_tokenPersonalization": {
- "href": "https://api.integratielaag.nl/abt/1.0/touchpoint/pad?ovpaytokenId=5",
- "method": "POST"
- }
- }
- }
+ },
}
delete:
tags:
- Customers
- parameters:
- - name: X-HTM-JWT-AUTH-HEADER
- in: header
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
required: false
description: The JWT of a customer in case of touchpoint were customer logs in themselves
- - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
- in: header
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
schema:
type: string
example: feaaef83-a551-4283-8419-340b1ada3b55
required: false
- description: The customerProfileId of a customer in the case of the SMP
- - name: X-HTM-ROLE-HEADER
- in: header
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
schema:
type: string
example: Customer
- required: false
+ required: false
- name: ovpayTokenId
- in: path
+ in: path
schema:
type: integer
example: 1
@@ -1653,6 +1689,271 @@ paths:
responses:
"200":
description: Ok
+ /customers/tokens/{ovpayTokenId}/replace:
+ 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) - V2 (for Integratielaag)
+ description: |
+ Transfer products from one OVpay token to another, and replace the tokens in the database.
+ This endpoint is for usage by integratielaag only. Touch points should use
+ `/customers/tokens/{ovpayTokenId}/transfer` instead.
+ 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 },
+ "_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 },
+ "_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 },
+ "_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:
@@ -1672,12 +1973,12 @@ paths:
type: integer
example: 1
responses:
- '200':
+ "200":
description: OK
content:
application/json:
schema:
- $ref: '#/components/schemas/OvPayTokenProductInstancesResponse'
+ $ref: "#/components/schemas/OvPayTokenProductInstancesResponse"
examples:
getEmptyProductInstances:
summary: No product-instances found on token
@@ -1687,42 +1988,990 @@ paths:
summary: One non-renewable product-instance
value:
{
- "productInstances": [
- {
- "productId": 1,
- "name": "HTM 90% Korting",
- "status": "Active",
- "isRenewable": true,
- "productCategory": {
- "productCategoryId": 1,
- "name": "Kortingsabonnement"
+ "productInstances":
+ [
+ {
+ "productId": 1,
+ "name": "HTM 90% Korting",
+ "status": "Active",
+ "isRenewable": true,
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "name": "Kortingsabonnement",
+ },
+ "fromInclusive": "2024-11-25T13:25:00+01:00",
+ "untilInclusive": "2024-12-25T03:59:59+01:00",
+ "orderId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "orderLineId": "38B17EF-36C4-4039-B92C-4817969B464E",
+ "contractId": "56B17EF-C436-9043-B76C-481797WEB464F",
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/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",
+ },
+ },
},
- "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"
+ ],
+ }
+ /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",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ },
+ "isTransferable": true,
+ "transferableObjects":
+ {
+ "tokenType": true,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": true,
+ "autoReloadRegistration": true,
+ "ePurse": true,
+ "personalAccountData":
+ { "name": true, "birthdate": true, "photo": true },
+ },
+ "_links":
+ {
+ "transfer":
+ {
+ "href": "https://services.dev.api.htm.nl/abt/touchpoint/1.0/customers/tokens/1/transfer",
+ "method": "POST",
},
- "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"
+ },
+ }
+ Non-transferable token (products not compatible on new token):
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ },
+ "isTransferable": false,
+ "transferableObjects":
+ {
+ "tokenType": true,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": false,
+ "autoReloadRegistration": true,
+ "ePurse": true,
+ "personalAccountData":
+ { "name": true, "birthdate": true, "photo": true },
+ },
+ "_links": {},
+ }
+ Non-transferable token (unsupported token type combination):
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ },
+ "isTransferable": false,
+ "transferableObjects":
+ {
+ "tokenType": false,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": true,
+ "autoReloadRegistration": true,
+ "ePurse": true,
+ "personalAccountData":
+ { "name": true, "birthdate": true, "photo": true },
+ },
+ "_links": {},
+ }
+ Non-transferable token (marked PAD):
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": 2,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "birthdate":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
}
- }
- }
- ]
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ },
+ "isTransferable": false,
+ "transferableObjects":
+ {
+ "tokenType": true,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": true,
+ "autoReloadRegistration": true,
+ "ePurse": true,
+ "personalAccountData":
+ {
+ "name": false,
+ "birthdate": false,
+ "photo": false,
+ },
+ },
+ "_links": {},
+ }
+ Non-transferable token (different age profile):
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": 2,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo": null
+ }
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo": null
+ }
+ },
+ "isTransferable": false,
+ "transferableObjects":
+ {
+ "tokenType": true,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": true,
+ "autoReloadRegistration": true,
+ "ePurse": false,
+ "personalAccountData":
+ {
+ "name": true,
+ "birthdate": false,
+ "photo": true,
+ },
+ },
+ "_links": {},
+ }
+ "400":
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ New token already present in other customer profile:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/badrequest",
+ "title": "Bad Request",
+ "detail": "New token already present in other customer profile.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "New token already present in other customer profile.",
+ "pointer": "#/0/ovPayTokenId",
+ "ovPayTokenId": 2,
+ },
+ ],
+ }
+ "404":
+ description: Not found
+ content:
+ 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: "**INTEGRATIELAAG** Transfer old OVpay token to new OVpay token."
+ description: |-
+ **Note that this is an integratielaag endpoint, not a Service Engine endpoint!**
+ First transfers all personal account data (if present), then all products, of an existing OVpay token
+ to a new OVpay token. The new token will also be persisted in the profile as a replacement
+ of the old token.
+ tags:
+ - Customers
+ 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:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ New token as a result of a successful transfer:
+ 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",
+ },
+ },
+ "_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",
+ },
+
+ },
+ }
+ "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",
+ },
+ ],
}
components:
schemas:
unavailable:
type: object
+ CompareRequest:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ example: 1
+ description: When new token is already present in customer profile
+ xBOT:
+ type: string
+ format: uuid
+ example: "91641b54-056c-49ea-b598-ccde81d6c45a"
+ xTAT:
+ type: string
+ format: uuid
+ example: "4c2d60e2-cd03-4c80-ae70-573a301f0bff"
+ serviceReferenceId:
+ type: string
+ example: "NLOV1234567ABCDEFG"
+ description: When provided, amount is also required
+ amount:
+ type: integer
+ example: 100
+ description: When provided, serviceReferenceId is also required
+ ovpasNumber:
+ type: string
+ example: "OV34567"
+ description: When provided, verificationCode is also required
+ verificationCode:
+ type: string
+ example: "1234"
+ description: When provided, ovpasNumber is also required
+ TransferRequest:
+ type: object
+ required:
+ - oldOvPayToken
+ - newOvPayToken
+ properties:
+ oldOvPayToken:
+ type: object
+ properties:
+ padOtp:
+ type: string
+ pattern: ^[0-9]{6}$
+ example: "023456"
+ newOvPayToken:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ example: 1
+ description: When new token is already present in customer profile
+ xBOT:
+ type: string
+ format: uuid
+ example: "91641b54-056c-49ea-b598-ccde81d6c45a"
+ xTAT:
+ type: string
+ format: uuid
+ example: "4c2d60e2-cd03-4c80-ae70-573a301f0bff"
+ serviceReferenceId:
+ type: string
+ example: "NLOV1234567ABCDEFG"
+ description: When provided, amount is also required
+ amount:
+ type: integer
+ example: 100
+ description: When provided, serviceReferenceId is also required
+ padOtp:
+ type: string
+ pattern: ^[0-9]{6}$
+ example: "123456"
+ description: Can be xTAT-based OTP (for existing PAD), or email-based OTP (for new PAD). In the latter case, padEmailAddress should be the same address as used for the OTP!
+ padEmailAddress:
+ type: string
+ format: email
+ example: 8Z9dG@example.com
+ alias:
+ type: string
+ example: MyNewToken
CustomersResponse:
type: object
properties:
@@ -1771,7 +3020,7 @@ components:
dateOfBirth:
type: string
format: date
- example: '2023-02-01'
+ example: "2023-02-01"
emailAddress:
type: string
format: email
@@ -1784,9 +3033,6 @@ components:
addressId:
type: integer
example: 1
- isPreferred:
- type: boolean
- example: true
addressType:
type: object
properties:
@@ -1795,7 +3041,7 @@ components:
example: 1
name:
type: string
- example: Home
+ example: Shipping
street:
type: string
example: Appelstraat
@@ -1813,7 +3059,7 @@ components:
example: Den Haag
country:
type: string
- example: Nederland
+ example: NL
_links:
type: object
properties:
@@ -1822,7 +3068,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/addresses/1
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/addresses/1
method:
type: string
example: GET
@@ -1831,7 +3077,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/addresses/1
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/addresses/1
method:
type: string
example: DELETE
@@ -1850,7 +3096,7 @@ components:
type: object
properties:
phoneTypeId:
- type: integer
+ type: integer
example: 1
name:
type: string
@@ -1869,7 +3115,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/phones/1
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/phones/1
method:
type: string
example: GET
@@ -1878,7 +3124,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/phones/1
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/phones/1
method:
type: string
example: DELETE
@@ -1890,17 +3136,17 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers
method:
type: string
example: GET
create_customer_status:
- type: object
- description: ONLY ALLOWED FOR SMP - Create a new customer status
+ type: object
+ description: ONLY ALLOWED FOR SMP - Create a new customer status
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/statuses
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/statuses
method:
type: string
example: POST
@@ -1909,7 +3155,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers
method:
type: string
example: PATCH
@@ -1918,7 +3164,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens
method:
type: string
example: GET
@@ -1927,10 +3173,10 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens
method:
type: string
- example: POST
+ example: POST
OvPayTokensResponse:
type: object
required:
@@ -1944,7 +3190,7 @@ components:
ovPayTokenId:
type: integer
example: 1
- tokenType:
+ tokenType:
type: object
properties:
tokenTypeId:
@@ -1968,7 +3214,7 @@ components:
expirationDate:
type: string
format: date
- example: '2023-02-01'
+ example: "2023-02-01"
replacedByTokenId:
type: integer
example: 1
@@ -1980,17 +3226,17 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1
method:
type: string
- example: GET
+ 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
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1
method:
type: string
example: PATCH
@@ -1999,7 +3245,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/replace
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/replace
method:
type: string
example: POST
@@ -2008,7 +3254,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1
method:
type: string
example: DELETE
@@ -2017,7 +3263,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances
method:
type: string
example: GET
@@ -2026,7 +3272,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/trips
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips
method:
type: string
example: GET
@@ -2041,12 +3287,12 @@ components:
productId:
type: integer
example: 1
- name:
+ name:
type: string
example: HTM 90% Korting
status:
type: string
- enum: [ "Active", "Ended", "Refunded" ]
+ enum: ["Active", "Ended", "Refunded"]
example: Active
isRenewable:
type: boolean
@@ -2060,7 +3306,7 @@ components:
example: 1
name:
type: string
- example: Kortingsabonnement
+ example: Kortingsabonnement
fromInclusive:
type: string
format: date-time-offset
@@ -2068,7 +3314,7 @@ components:
untilInclusive:
type: string
format: date-time-offset
- description: >-
+ description: >-
If not present, this product-instance represents a subscription/contract without a real end date. If present, it can be either the natural end date or the refund timestamp.
example: "2024-12-25T03:59:59+01:00"
orderId:
@@ -2092,7 +3338,7 @@ components:
properties:
href:
type: string
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/tokens/1/productinstances
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances
method:
type: string
example: GET
@@ -2102,7 +3348,7 @@ components:
href:
type: string
description: Always present for any HTM product-instance
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/orders/501B17EF-36C4-4039-B92C-6517969B464E
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/orders/501B17EF-36C4-4039-B92C-6517969B464E
method:
type: string
example: GET
@@ -2112,12 +3358,7 @@ components:
href:
type: string
description: Only present for subscriptions/contracts
- example: https://api.integratielaag.nl/abt/1.0/touchpoint/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F
method:
type: string
example: GET
-
-
-
-
-
diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml
index e30fa2c..feb9f40 100644
--- a/src/openapi/customers/customers-crud-v2.yaml
+++ b/src/openapi/customers/customers-crud-v2.yaml
@@ -248,10 +248,9 @@ paths:
postalCode: 0000AA
city: Den Haag
country: NL
- isPreferred: false
addressType:
addressTypeId: 2
- name: Office
+ name: Billing
- addressId: 2
street: mystreet 33
houseNumber: 1
@@ -259,10 +258,9 @@ paths:
postalCode: 4455CA
city: Den BOSCH
country: NL
- isPreferred: true
addressType:
- addressTypeId: 2
- name: Office
+ addressTypeId: 1
+ name: Shipping
phones:
- phoneId: 1
number: "3112345678"
@@ -375,10 +373,9 @@ paths:
postalCode: 0000AA
city: Den Haag
country: NL
- isPreferred: false
addressType:
addressTypeId: 2
- name: Office
+ name: Billing
- addressId: 2
street: mystreet 33
houseNumber: 1
@@ -388,8 +385,8 @@ paths:
country: NL
isPreferred: true
addressType:
- addressTypeId: 2
- name: Office
+ addressTypeId: 1
+ name: Shipping
phones:
- phoneId: 1
number: "3112345678"
@@ -516,10 +513,9 @@ paths:
postalCode: 0000AA
city: Den Haag
country: NL
- isPreferred: false
addressType:
addressTypeId: 2
- name: Office
+ name: Billing
- addressId: 2
street: mystreet 33
houseNumber: 1
@@ -527,10 +523,9 @@ paths:
postalCode: 4455CA
city: Den BOSCH
country: NL
- isPreferred: true
addressType:
- addressTypeId: 2
- name: Office
+ addressTypeId: 1
+ name: Shipping
phones:
- phoneId: 1
number: "3112345678"
@@ -652,10 +647,9 @@ paths:
postalCode: 0000AA
city: Den Haag
country: NL
- isPreferred: false
addressType:
addressTypeId: 2
- name: Office
+ name: Billing
- addressId: 2
street: mystreet 33
houseNumber: 1
@@ -663,10 +657,9 @@ paths:
postalCode: 4455CA
city: Den BOSCH
country: NL
- isPreferred: true
addressType:
- addressTypeId: 2
- name: Office
+ addressTypeId: 1
+ name: Shipping
phones:
- phoneId: 1
number: "3112345678"
@@ -811,7 +804,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: true
addressTypeId: 1
- street: Beeklaan
houseNumber: 30
@@ -819,7 +811,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: false
addressTypeId: 2
phones:
- number: "6123456789"
@@ -948,10 +939,10 @@ paths:
parameters:
- name: customerProfileId
in: path
- required: true
schema:
type: integer
example: 1
+ required: true
requestBody:
content:
application/json:
@@ -1040,7 +1031,6 @@ paths:
postalCode: 1234 AB
city: Den Haag
country: NL
- isPreferred: true
required: true
responses:
201:
@@ -1588,11 +1578,6 @@ paths:
schema:
type: integer
example: 1
- - name: issuerCountry
- in: query
- schema:
- type: string
- example: "NL"
- name: iban
in: query
schema:
@@ -1613,11 +1598,22 @@ paths:
schema:
type: string
example: "John's billing details"
- - name: billingAddressID
- in: query
+ - in: query
+ name: createdBefore
schema:
- type: integer
- example: 1
+ type: string
+ format: date-time
+ example: 2020-12-31T23:59:59
+ required: false
+ description: Filter on created before.
+ - in: query
+ name: createdAfter
+ schema:
+ type: string
+ format: date-time
+ example: 2020-12-31T23:59:59
+ required: false
+ description: Filter on created after.
- name: sort
in: query
schema:
@@ -1650,21 +1646,19 @@ paths:
{
"billingInformationId": 1,
"customerProfileId": 1,
- "issuerCountry": "NL",
"iban": "NL06RABO8902022560",
"ascription": "J. Doe",
"alias": null,
- "billingAddressId": 3,
+ "created": "2023-10-20T17:05:52.000",
},
{
"billingInformationId": 2,
"customerProfileId": 1,
- "issuerCountry": "NL",
"iban": "NL27ABNA4458972219",
"bic": "GHJZIEJSKVM",
"ascription": "J. Doe",
- "alias": "John's billing details",
- "billingAddressId": 4,
+ "alias": "John's billing details",
+ "created": "2024-10-20T17:05:52.000",
},
],
}
@@ -1679,50 +1673,10 @@ paths:
{
"billingInformationId": 1,
"customerProfileId": 1,
- "issuerCountry": "NL",
"iban": "NL06RABO8902022560",
"ascription": "J. Doe",
- "alias": null,
- "billingAddressId": 3,
- },
- ],
- }
- getBillingInformationIssuerCountry:
- summary: Get multiple billing information entities for a specific issuer country
- description: >-
- Found multiple billing informations matching the search parameters
- value:
- {
- "billingInformations":
- [
- {
- "billingInformationId": 1,
- "customerProfileId": 1,
- "issuerCountry": "NL",
- "iban": "NL06RABO8902022560",
- "ascription": "J. Doe",
- "alias": null,
- "billingAddressId": 3,
- },
- {
- "billingInformationId": 2,
- "customerProfileId": 5,
- "issuerCountry": "NL",
- "iban": "NL27ABNA4458972219",
- "bic": "GHJZIEJSKVM",
- "ascription": "J. Doe",
- "alias": null,
- "billingAddressId": 42,
- },
- {
- "billingInformationId": 11,
- "customerProfileId": 9,
- "issuerCountry": "NL",
- "iban": "NL27ABNA4458972219",
- "bic": "GHJZIEJSKVM",
- "ascription": "J. Doe",
- "alias": null,
- "billingAddressId": 84,
+ "alias": null,
+ "created": "2024-10-20T17:05:52.000",
},
],
}
@@ -1749,19 +1703,15 @@ paths:
customerBillinginformationMandatoryFields:
value:
billingInformation:
- issuerCountry: "NL"
iban: "NL73RABO2677424363"
ascription: "J. Doe"
- billingAddressId: 1
customerBillinginformationMandatoryFull:
value:
billingInformation:
- issuerCountry: "NL"
iban: "NL73RABO2677424363"
bic: "GHJZIEJSKVM"
ascription: "J. Doe"
alias: "John's billing details"
- billingAddressId: 1
required: true
responses:
201:
@@ -1798,15 +1748,11 @@ paths:
value:
billingInformation:
alias: "Mijn rekening details"
- updateBillingInformationAdressId:
- value:
- billingInformation:
- billingAddressId: 4
updateBillingInformation:
value:
billingInformation:
alias: "Mijn rekening details"
- billingAddressId: 4
+ iban: "NL06RABO8902022560"
required: true
responses:
200:
@@ -1817,11 +1763,10 @@ paths:
{
"billingInformationId": 1,
"customerProfileId": 1,
- "issuerCountry": "NL",
"iban": "NL06RABO8902022560",
"ascription": "J. Doe",
"alias": "Mijn rekening details",
- "billingAddressId": 4,
+ "created": "2024-03-22T08:55:00",
}
security:
- default: []
@@ -1865,13 +1810,6 @@ paths:
explode: false
required: false
description: The id of the direct debit mandate type. 1 = Paper contract, 2 = PIN transaction, 3 = SEPA eMandate, 4 = Digital signature, 5 = iDEAL transaction.
- - in: query
- name: mandateAddressId
- schema:
- type: integer
- example: 21
- required: false
- description: The id of the address related to the mandate.
- in: query
name: createdBefore
schema:
@@ -1957,7 +1895,6 @@ paths:
"name": "import",
"description": "import",
},
- "mandateAddressId": 21,
"created": "2024-03-22T08:55:00",
"mandateReference": "CORE01",
"mandateState": "SINGED",
@@ -1993,7 +1930,6 @@ paths:
"name": "import",
"description": "import",
},
- "mandateAddressId": 21,
"created": "2024-03-22T08:55:00",
"mandateReference": "CORE01",
"mandateState": "SINGED",
@@ -2043,7 +1979,6 @@ paths:
value:
directDebitMandate:
directDebitMandateTypeId: 1
- mandateAddressId: 1
mandateReference: HTM-mandate-001
mandateState: PREPARED
required: true
@@ -2099,7 +2034,6 @@ paths:
"name": "import",
"description": "import",
},
- "mandateAddressId": 21,
"created": "2024-03-22T08:55:00",
"mandateReference": "CORE01",
"mandateState": "CANCELLED",
@@ -2268,8 +2202,6 @@ components:
type: string
country:
type: string
- isPreferred:
- type: boolean
addressType:
$ref: "#/components/schemas/getAddressType"
getAddressType:
@@ -2375,8 +2307,6 @@ components:
type: string
country:
type: string
- isPreferred:
- type: boolean
addressTypeId:
type: integer
postPhoneEntity:
@@ -2443,8 +2373,6 @@ components:
type: string
country:
type: string
- isPreferred:
- type: boolean
addressType:
type: integer
patchCustomerAddress:
@@ -2462,8 +2390,6 @@ components:
type: string
country:
type: string
- isPreferred:
- type: boolean
addressType:
type: integer
postCustomerProfileResponse:
@@ -2564,8 +2490,6 @@ components:
properties:
billingInformationId:
type: integer
- issuerCountry:
- type: string
iban:
type: string
bic:
@@ -2574,8 +2498,8 @@ components:
type: string
alias:
type: string
- billingAddressId:
- type: integer
+ created:
+ type: string
mandateEntity:
type: object
properties:
@@ -2583,8 +2507,6 @@ components:
type: integer
directDebitMandateTypeId:
type: integer
- mandateAddressId:
- type: integer
mandateReference:
type: string
mandateState:
diff --git a/src/openapi/customers/customers.yaml b/src/openapi/customers/customers.yaml
index 65a9763..472250a 100644
--- a/src/openapi/customers/customers.yaml
+++ b/src/openapi/customers/customers.yaml
@@ -45,7 +45,6 @@ paths:
directDebitMandate:
directDebitMandateTypeId: 1
billingInformationId: 1
- mandateAddressId: 2
mandateReference: Dit is een test Reference
mandateState: SIGNED
updateDirectDebitMandateType:
@@ -56,10 +55,6 @@ paths:
value:
directDebitMandate:
billingInformationId: 2
- updateMandateAddressId:
- value:
- directDebitMandate:
- mandateAddressId: 3
updateMandateReference:
value:
directDebitMandate:
@@ -129,17 +124,10 @@ paths:
updateFullBillingInformation:
value:
billingInformation:
- issuerCountry: NL
iban: '1234567890'
bic: ING
- swift: Swift
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 2
- updateIssuerCountry:
- value:
- billingInformation:
- issuerCountry: DE
+ alias: Alias Test
updateIban:
value:
billingInformation:
@@ -148,10 +136,6 @@ paths:
value:
billingInformation:
bic: DEUT
- updateSwift:
- value:
- billingInformation:
- swift: UpdatedSwift
updateAscription:
value:
billingInformation:
@@ -160,10 +144,6 @@ paths:
value:
billingInformation:
alias: Updated Alias
- updateBillingAddressId:
- value:
- billingInformation:
- billingAddressId: 3
required: true
responses:
'201':
@@ -218,21 +198,16 @@ paths:
fullFinancialInformation:
value:
billingInformation:
- issuerCountry: NL
iban: '1234567890'
bic: ING
- swift: Swift
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 2
+ alias: Alias Test
minimumBillingInformation:
value:
billingInformation:
- issuerCountry: NL
iban: '1234567890'
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 2
+ alias: Alias Test
required: true
responses:
'201':
@@ -289,16 +264,12 @@ paths:
directDebitMandate:
directDebitMandateTypeId: 1
billingInformationId: 1
- mandateAddressId: 2
- created: '1900-01-01T00:00:00.000'
mandateReference: Dit is een test Reference
minimumdirectDebitMandate:
value:
directDebitMandate:
directDebitMandateTypeId: 1
billingInformationId: 1
- mandateAddressId: 2
- created: '1900-01-01T00:00:00.000'
mandateReference: Dit is een test Reference
required: true
responses:
@@ -358,38 +329,32 @@ paths:
customerNumber: 1000003
billingInformation:
- billingInformationId: 1
- issuerCountry: NL
iban: '1234567890'
bic: ING
- swift: Swift
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 2
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
- billingInformationId: 2
- issuerCountry: BE
iban: '0987654321'
bic: null
- swift: null
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 3
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
directDebitMandate:
- directDebitMandateId: 1
directDebitMandateTypeName: PIN Transaction
billingInformationId: 1
- mandateAddressId: 2
created: '1900-01-01T00:00:00.000'
mandateReference: Dit is een test Reference
mandateState: SIGNED
- updateTimestamp: '2024-01-01T00:00:00.00'
+ updateTimestamp: '2024-01-01T00:00:00.000'
- directDebitMandateId: 2
directDebitMandateTypeName: Paper Contract
billingInformationId: 1
- mandateAddressId: 2
created: '1900-01-01T00:00:00.000'
mandateReference: Dit is een test Reference
mandateState: CANCELLED
- updateTimestamp: '2024-01-01T00:00:00.00'
+ updateTimestamp: '2024-01-01T00:00:00.000'
missingBillingInformation:
value:
customerNumber: 1000003
@@ -398,35 +363,31 @@ paths:
- directDebitMandateId: 1
directDebitMandateTypeName: PIN transaction
billingInformationId: 1
- mandateAddressId: 2
created: '1900-01-01T00:00:00.000'
- mandateReference: Dit is een test Reference
+ mandateReference: Dit is een test Reference
+ updateTimestamp: '1900-01-01T00:00:00.000'
- directDebitMandateId: 2
directDebitMandateTypeName: Paper Contract
billingInformationId: 1
- mandateAddressId: 2
created: '1900-01-01T00:00:00.000'
- mandateReference: Dit is een test Reference
+ mandateReference: Dit is een test Reference
+ updateTimestamp: '1900-01-01T00:00:00.000'
missingDebitMandateInformation:
value:
customerNumber: 1000003
billingInformation:
- billingInformationId: 1
- issuerCountry: NL
iban: '1234567890'
bic: ING
- swift: Swift
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 2
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
- billingInformationId: 2
- issuerCountry: BE
iban: '0987654321'
- bic: null
- swift: null
+ bic: null
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 3
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
directDebitMandate: []
minimumFinancialInformation:
value:
@@ -500,21 +461,16 @@ paths:
directDebitMandate:
directDebitMandateTypeId: 1
billingInformationId: 1
- mandateAddressId: 2
mandateReference: Dit is een test Reference
mandateState: SIGNED
updateDirectDebitMandateType:
value:
directDebitMandate:
- directDebitMandateTypeId: 1
+ directDebitMandateTypeId: 1
updateBillingInformationId:
value:
directDebitMandate:
billingInformationId: 2
- updateMandateAddressId:
- value:
- directDebitMandate:
- mandateAddressId: 3
updateMandateReference:
value:
directDebitMandate:
@@ -591,17 +547,10 @@ paths:
updateFullBillingInformation:
value:
billingInformation:
- issuerCountry: NL
iban: '1234567890'
bic: ING
- swift: Swift
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 2
- updateIssuerCountry:
- value:
- billingInformation:
- issuerCountry: DE
+ alias: Alias Test
updateIban:
value:
billingInformation:
@@ -610,10 +559,6 @@ paths:
value:
billingInformation:
bic: DEUT
- updateSwift:
- value:
- billingInformation:
- swift: UpdatedSwift
updateAscription:
value:
billingInformation:
@@ -687,17 +632,14 @@ paths:
fullFinancialInformation:
value:
billingInformation:
- issuerCountry: NL
iban: '1234567890'
bic: ING
- swift: Swift
ascription: Dit is een Test
alias: Alias Test
billingAddressId: 2
minimumBillingInformation:
value:
billingInformation:
- issuerCountry: NL
iban: '1234567890'
ascription: Dit is een Test
alias: Alias Test
@@ -765,17 +707,13 @@ paths:
directDebitMandate:
directDebitMandateTypeId: 1
billingInformationId: 1
- mandateAddressId: 2
- created: '1900-01-01T00:00:00.000'
- mandateReference: Dit is een test Reference
+ mandateReference: Dit is een test Reference
minimumdirectDebitMandate:
value:
directDebitMandate:
directDebitMandateTypeId: 1
billingInformationId: 1
- mandateAddressId: 2
- created: '1900-01-01T00:00:00.000'
- mandateReference: Dit is een test Reference
+ mandateReference: Dit is een test Reference
required: true
responses:
'201':
@@ -841,38 +779,34 @@ paths:
customerNumber: 1000003
billingInformation:
- billingInformationId: 1
- issuerCountry: NL
iban: '1234567890'
bic: ING
- swift: Swift
ascription: Dit is een Test
alias: Alias Test
billingAddressId: 2
- updateTimestamp: '2024-01-01T00:00:00.00'
+ created: '2024-01-01T00:00:00.000'
- billingInformationId: 2
- issuerCountry: BE
iban: '0987654321'
bic: null
- swift: null
ascription: Dit is een Test
alias: Alias Test
billingAddressId: 3
- updateTimestamp: '2024-01-01T00:00:00.00'
+ created: '2024-01-01T00:00:00.000'
directDebitMandate:
- directDebitMandateId: 1
directDebitMandateTypeName: PIN transaction
billingInformationId: 1
- mandateAddressId: 2
created: '1900-01-01T00:00:00.000'
mandateReference: Dit is een test Reference
mandateState: SIGNED
+ updateTimestamp: '2024-01-01T00:00:00.000'
- directDebitMandateId: 2
directDebitMandateTypeName: Paper Contract
billingInformationId: 1
- mandateAddressId: 2
created: '1900-01-01T00:00:00.000'
mandateReference: Dit is een test Reference
mandateState: CANCELLED
+ updateTimestamp: '2024-01-01T00:00:00.000'
missingBillingInformation:
value:
customerNumber: 1000003
@@ -881,35 +815,31 @@ paths:
- directDebitMandateId: 1
directDebitMandateTypeName: PIN transaction
billingInformationId: 1
- mandateAddressId: 2
created: '1900-01-01T00:00:00.000'
- mandateReference: Dit is een test Reference
+ mandateReference: Dit is een test Reference
+ updateTimestamp: '1900-01-01T00:00:00.000'
- directDebitMandateId: 2
directDebitMandateTypeName: Paper Contract
billingInformationId: 1
- mandateAddressId: 2
created: '1900-01-01T00:00:00.000'
- mandateReference: Dit is een test Reference
+ mandateReference: Dit is een test Reference
+ updateTimestamp: '1900-01-01T00:00:00.000'
missingDebitMandateInformation:
value:
customerNumber: 1000003
billingInformation:
- billingInformationId: 1
- issuerCountry: NL
iban: '1234567890'
bic: ING
- swift: Swift
ascription: Dit is een Test
- alias: Alias Test
- billingAddressId: 2
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
- billingInformationId: 2
- issuerCountry: BE
iban: '0987654321'
bic: null
- swift: null
ascription: Dit is een Test
alias: Alias Test
- billingAddressId: 3
+ created: "2024-06-02T15:03:460"
directDebitMandate: []
minimumFinancialInformation:
value:
@@ -1112,8 +1042,7 @@ paths:
postalCode: 0000AA
city: Den Haag
country: NL
- isPreferred: true
- addressType: Office
+ addressType: Billing
- addressId: 2
street: mystreet 33
houseNumber: 1
@@ -1121,8 +1050,7 @@ paths:
postalCode: 4455CA
city: Den BOSCH
country: NL
- isPreferred: true
- addressType: Office
+ addressType: Shipping
phone:
- phoneId: 1
number: '3112345678'
@@ -1199,8 +1127,7 @@ paths:
postalCode: 0000AA
city: Den Haag
country: NL
- isPreferred: true
- addressType: Office
+ addressType: Billing
- addressId: 2
street: mystreet 33
houseNumber: 1
@@ -1208,8 +1135,7 @@ paths:
postalCode: 4455CA
city: Den BOSCH
country: NL
- isPreferred: true
- addressType: Office
+ addressType: Shipping
phone:
- phoneId: 1
number: '3112345678'
@@ -1537,8 +1463,7 @@ paths:
postalCode: 0000AA
city: Den Haag
country: NL
- isPreferred: true
- addressType: Office
+ addressType: Billing
- addressId: 2
street: mystreet 33
houseNumber: 1
@@ -1546,8 +1471,7 @@ paths:
postalCode: 4455CA
city: Den BOSCH
country: NL
- isPreferred: true
- addressType: Office
+ addressType: Shipping
phone:
- phoneId: 1
number: '3112345678'
@@ -1753,7 +1677,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: true
addressTypeId: 1
- street: Beeklaan
houseNumber: 30
@@ -1761,7 +1684,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: false
addressTypeId: 2
phones:
- number: '6123456789'
@@ -2604,7 +2526,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: true
addressTypeId: 1
addMinimumAddress:
value:
@@ -2614,7 +2535,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: true
addressTypeId: 1
responses:
'201':
@@ -2826,7 +2746,6 @@ paths:
city: Den Haag
country: NL
addressTypeId: 2
- isPreferred: true
updateStreet:
value:
address:
@@ -2854,11 +2773,7 @@ paths:
updateAddressTypeId:
value:
address:
- addressTypeId: 3
- updateIsPreferred:
- value:
- address:
- isPreferred: false
+ addressTypeId: 1
responses:
'202':
description: Successful updated the customer profile
@@ -3111,8 +3026,7 @@ paths:
postalCode: 0000AA
city: Den Haag
country: NL
- isPreferred: true
- addressType: Office
+ addressType: Billing
- addressId: 2
street: mystreet 33
houseNumber: 1
@@ -3120,8 +3034,7 @@ paths:
postalCode: 4455CA
city: Den BOSCH
country: NL
- isPreferred: true
- addressType: Office
+ addressType: Shipping
phone:
- phoneId: 1
number: '3112345678'
@@ -3328,7 +3241,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: true
addressTypeId: 1
- street: Beeklaan
houseNumber: 30
@@ -3336,7 +3248,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: false
addressTypeId: 2
phones:
- number: '6123456789'
@@ -4114,7 +4025,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: true
addressTypeId: 1
addMinimumAddress:
value:
@@ -4124,7 +4034,6 @@ paths:
postalCode: 2500AA
city: Den Haag
country: NL
- isPreferred: true
addressTypeId: 1
responses:
'201':
@@ -4350,7 +4259,6 @@ paths:
city: Den Haag
country: NL
addressTypeId: 2
- isPreferred: true
updateStreet:
value:
address:
@@ -4378,7 +4286,7 @@ paths:
updateAddressTypeId:
value:
address:
- addressTypeId: 3
+ addressTypeId: 1
updateIsPreferred:
value:
address:
@@ -4696,8 +4604,6 @@ components:
type: string
country:
type: string
- isPreferred:
- type: boolean
addressType:
type: string
getPhone:
@@ -4761,7 +4667,6 @@ components:
- billingInformationId
- created
- directDebitMandateTypeName
- - mandateAddressId
- mandateReference
type: object
properties:
@@ -4769,10 +4674,6 @@ components:
type: string
billingInformationId:
type: integer
- mandateAddressId:
- type: integer
- created:
- type: string
mandateReference:
type: string
directDebitMandatePost:
@@ -4787,8 +4688,6 @@ components:
type: string
billingInformationId:
type: integer
- mandateAddressId:
- type: integer
mandateReference:
type: string
mandateState:
@@ -4811,8 +4710,6 @@ components:
type: integer
billingInformationId:
type: integer
- mandateAddressId:
- type: integer
created:
type: string
mandateReference:
@@ -4826,52 +4723,41 @@ components:
- alias
- ascription
- bic
- - billingAddressId
- billingInformationId
- iban
- - issuerCountry
- - swift
+ - created
type: object
properties:
billingInformationId:
type: integer
- issuerCountry:
- type: string
iban:
type: string
bic:
type: string
- swift:
- type: string
ascription:
type: string
alias:
type: string
- billingAddressId:
- type: integer
+ created:
+ type: string
billingInformationPostEntity:
required:
- alias
- ascription
- billingAddressId
- iban
- - issuerCountry
type: object
properties:
- issuerCountry:
- type: string
iban:
type: string
bic:
type: string
- swift:
- type: string
ascription:
type: string
alias:
type: string
- billingAddressId:
- type: integer
+ created:
+ type: string
billingInformationPost:
type: object
properties:
@@ -4880,20 +4766,14 @@ components:
billingInformationPatchEntity:
type: object
properties:
- issuerCountry:
- type: string
iban:
type: string
bic:
type: string
- swift:
- type: string
ascription:
type: string
alias:
type: string
- billingAddressId:
- type: integer
billingInformationPatch:
type: object
properties:
@@ -5095,8 +4975,6 @@ components:
type: string
country:
type: string
- isPreferred:
- type: boolean
addressTypeId:
type: integer
addressPatchEntity:
@@ -5116,8 +4994,6 @@ components:
type: string
addressTypeId:
type: integer
- isPreferred:
- type: boolean
phonePostEntity:
required:
- countryCode
diff --git a/src/openapi/customers/customers_reference-crud.yaml b/src/openapi/customers/customers_reference-crud.yaml
index ffb2500..748d98d 100644
--- a/src/openapi/customers/customers_reference-crud.yaml
+++ b/src/openapi/customers/customers_reference-crud.yaml
@@ -294,164 +294,6 @@ paths:
- default: []
x-auth-type: Application & Application User
x-throttling-tier: Unlimited
- post:
- tags:
- - ABTCustomerReference
- summary: Create a address type
- description: Create a address type with a specific value
- parameters: []
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/addressType'
- required: true
- responses:
- '201':
- description: Successful created a new address type
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- example: 1
- '400':
- description: Bad Request
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/400Response'
- '401':
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/401Response'
- '404':
- description: Not Found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/404Response'
- '500':
- description: Internal Server Error
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/500Response'
- security:
- - default: []
- x-auth-type: Application & Application User
- x-throttling-tier: Unlimited
- /addresstype/{addressTypeId}:
- put:
- tags:
- - ABTCustomerReference
- summary: Update a address type
- description: Update an existing address type with a specific value
- parameters:
- - name: addressTypeId
- in: path
- required: true
- style: simple
- explode: false
- schema:
- type: integer
- format: integer
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/addressType'
- required: true
- responses:
- '202':
- description: Successful updated an existing a address type
- content:
- application/json:
- schema:
- type: object
- properties:
- id:
- type: integer
- example: 1
- '400':
- description: Bad Request
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/400Response'
- '401':
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/401Response'
- '404':
- description: Not Found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/404Response'
- '500':
- description: Internal Server Error
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/500Response'
- security:
- - default: []
- x-auth-type: Application & Application User
- x-throttling-tier: Unlimited
- delete:
- tags:
- - ABTCustomerReference
- summary: Remove a address type
- description: Remove an existing address type with a specific value
- parameters:
- - name: addressTypeId
- in: path
- required: true
- style: simple
- explode: false
- schema:
- type: integer
- format: integer
- responses:
- '202':
- description: Successful removed a address type
- '400':
- description: Bad Request
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/400Response'
- '401':
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/401Response'
- '404':
- description: Not Found
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/404ResponseId'
- - $ref: '#/components/schemas/404Response'
- '500':
- description: Internal Server Error
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/500Response'
- security:
- - default: []
- x-auth-type: Application & Application User
- x-throttling-tier: Unlimited
/customerstatus:
get:
tags:
diff --git a/src/openapi/nfc_reader/servicedeskcardreader-api.yaml b/src/openapi/nfc_reader/servicedeskcardreader-api.yaml
new file mode 100644
index 0000000..722bde1
--- /dev/null
+++ b/src/openapi/nfc_reader/servicedeskcardreader-api.yaml
@@ -0,0 +1,206 @@
+openapi: 3.0.3
+info:
+ title: Service Desk Card Reader API
+ version: 0.9.0
+ description: |-
+ This API enables that external systems (such as SOS) can operate on information from service desk card readers.
+
+ ### 0.9.0
+ - First draft version
+servers:
+ - url: /v1
+paths:
+ /card-reader/token:
+ post:
+ tags:
+ - CardReader
+ summary: Register a token from the card
+ operationId: registerToken
+ description: |
+ Register a token from the card to the external system.
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TokenRegisterRequest"
+ responses:
+ "202":
+ description: Accepted
+ "400":
+ description: |-
+ Bad Request. Occurs when the readerId is unknown to the external system. A call to `/card-reader/registrations`,
+ followed by a `/card-reader/register` is needed in order to restore reader registrations.
+ /card-reader/register:
+ post:
+ tags:
+ - CardReader
+ summary: Register a reader that is connected to the Card Reader Interface
+ operationId: registerReader
+ description: |
+ Register a reader to the external system to receive a newly generated readerID.
+
+ **N.B.**: After the last reader has been registered, an initial `/card-reader/registrations` call must be sent.
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ReaderRegisterRequest"
+ responses:
+ "200":
+ description: Registration was successful
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ReaderRegisterResponse"
+ "400":
+ description: Bad Request
+
+ /card-reader/unregister:
+ post:
+ tags:
+ - CardReader
+ summary: Unregister a reader from the external system
+ operationId: unregisterReader
+ description: |
+ Unregister a reader from the external system.
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ReaderUnregisterRequest"
+ responses:
+ "204":
+ description: Unregistration was successful
+ "400":
+ description: Bad Request
+ /card-reader/registrations:
+ post:
+ tags:
+ - CardReader
+ summary: Send a list of readers that should currently be registered
+ operationId: sendReaderRegistrations
+ description: |
+ Send a list of readers of which the Card Reader Interface believes are registered. This must be done periodically.
+ The period is determined by the timeout duration in the response.
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/RegistrationsRequest"
+ responses:
+ "200":
+ description: Reader registrations successfully received
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/RegistrationsResponse"
+
+components:
+ schemas:
+ TokenRegisterRequest:
+ description: Request containing token information read using the card reader
+ type: object
+ properties:
+ readerId:
+ $ref: "#/components/schemas/ReaderId"
+ xBot:
+ type: string
+ format: uuid
+ description: The unique identifier of the token.
+ required:
+ - readerId
+ - xBot
+
+ ReaderRegisterRequest:
+ description: Request containing card reader information for one or more readers to be be registered
+ type: object
+ properties:
+ readerIdQuantity:
+ type: integer
+ default: 1
+ minimum: 1
+ cardReaderInterfaceId:
+ $ref: "#/components/schemas/cardReaderInterfaceId"
+ locationName:
+ $ref: "#/components/schemas/LocationName"
+ required:
+ - cardReaderInterfaceId
+ - locationName
+ - readerIdQuantity
+ ReaderRegisterResponse:
+ description: Response containing one or more readerIds for the registered reader(s)
+ type: object
+ properties:
+ readerIds:
+ type: array
+ items:
+ $ref: "#/components/schemas/ReaderId"
+ required:
+ - readerIds
+
+ ReaderUnregisterRequest:
+ description: Request containing the readerId to unregister
+ type: object
+ properties:
+ cardReaderInterfaceId:
+ $ref: "#/components/schemas/cardReaderInterfaceId"
+ locationName:
+ $ref: "#/components/schemas/LocationName"
+ readerId:
+ $ref: "#/components/schemas/ReaderId"
+ required:
+ - readerId
+
+ RegistrationsRequest:
+ description: Request containing a list of readerId of which the Card Reader Interface believes are registered.
+ type: object
+ properties:
+ cardReaderInterfaceId:
+ $ref: "#/components/schemas/cardReaderInterfaceId"
+ locationName:
+ $ref: "#/components/schemas/LocationName"
+ readerIds:
+ type: array
+ items:
+ $ref: "#/components/schemas/ReaderId"
+ required:
+ - cardReaderInterfaceId
+ - locationName
+ - readerIds
+ RegistrationsResponse:
+ description: Response with actionable information for the Card Reader Interface.
+ type: object
+ properties:
+ nextCallTimeout:
+
+ type: integer
+ description: |
+ Timeout duration in seconds BEFORE which the next `/card-reader/registrations` call should happen.
+ Failure to send a call before this timeout will result in automatic unregistration of all readers associated to this Card Read Interface.
+
+ The external systems must maintain a grace period on reception of the next call.
+ The Card Read Interface must start sending the next call on or before the timeout (grace period not needed).
+ readerIds:
+ type: array
+ items:
+ $ref: "#/components/schemas/ReaderId"
+ description: |
+ A list of readerIds that are registered to the external system. This mean all readerIds that readers with
+ readerIds missing from this list must be reregistered using `/card-reader/register`.
+ required:
+ - nextCallTimeout
+ - readerIds
+
+ cardReaderInterfaceId:
+ type: string
+ description: Each Card Reader Interface has a unique cardReaderInterfaceId. Identifier for the Card Reader Interface to which one or more readers are connected.
+ LocationName:
+ type: string
+ description: Name of the location of the reader. A location can have one ore more Card Reader Interfaces (cardReaderInterfaceIds)
+ ReaderId:
+ type: string
+ description: Unique identifier generated by the external system. Should be displayed on the screen of the reader.
diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml
index 65cb057..78c4bb9 100644
--- a/src/openapi/orders/service_engine_orders.yaml
+++ b/src/openapi/orders/service_engine_orders.yaml
@@ -3358,7 +3358,9 @@ paths:
examples:
v2.2:
summary: Add a payment v2.2
- description: Add a payment v2.2
+ description: |
+ Add a payment for a concept order. Note how it is not allowed to add a payment status or an external
+ payment reference when adding a payment to a concept order.
value:
{
"createdOn": "2024-03-22T09:00:00",
@@ -3366,9 +3368,6 @@ paths:
"paymentMethodId": 1,
"isRefund": false,
"htmPaymentReference": "HTM-1234",
- "pspPaymentReference": null,
- "paymentStatuses": [],
- "mandateInput": null,
}
v1.2:
summary: Order creation v1.2
@@ -3585,17 +3584,7 @@ paths:
"isRefund": false,
"htmPaymentReference": "HTM-1234",
"pspPaymentReference": null,
- "paymentStatuses":
- [
- {
- "paymentStatusId": "42eee610-1a17-4f02-be14-7e25d69d35f3",
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "?",
- "statusDescription": "Initiated",
- "statusSubCode": "?",
- "statusSubDescription": "PaymentInitiated",
- },
- ],
+ "paymentStatuses": [],
"mandateInput": null,
},
],
diff --git a/src/openapi/service/service-crud.yaml b/src/openapi/service/service-crud.yaml
new file mode 100644
index 0000000..228d76d
--- /dev/null
+++ b/src/openapi/service/service-crud.yaml
@@ -0,0 +1,159 @@
+openapi: "3.0.3"
+info:
+ title: ABT Service CRUD APIs
+ version: "1.0"
+ description: CRUD APIs for ABT Service processes.
+servers:
+ - url: https://api.integratielaag.nl/v1/service
+paths:
+ /tokenregisterrequests:
+ get:
+ summary: Get all token register requests.
+ description: Get all token register requests.
+ tags:
+ - NFC Reader
+ parameters:
+ - in: query
+ name: readerId
+ schema:
+ type: string
+ example: b14b0320-2b72-48bb-990b-b97a2d67f9df
+ explode: false
+ required: false
+ description: Filter on possible NFC reader ids.
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TokenRegisterRequestsGetResponse"
+ examples:
+ Single TokenRegisterRequest:
+ summary: Single TokenRegisterRequest
+ value:
+ {
+ "tokenRegisterRequests":
+ [
+ {
+ "readerId": "b14b0320-2b72-48bb-990b-b97a2d67f9df",
+ "xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115",
+ "updated": "2025-07-02T15:01:00.000+00:00",
+ },
+ ],
+ }
+ Multiple TokenRegisterRequests:
+ summary: Multiple TokenRegisterRequests
+ value:
+ {
+ "tokenRegisterRequests":
+ [
+ {
+ "readerId": "b14b0320-2b72-48bb-990b-b97a2d67f9df",
+ "xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115",
+ "updated": "22025-07-02T15:01:00.000+00:00",
+ },
+ {
+ "readerId": "b4d8e43c-be21-472c-955b-a0c7c11b4bfb",
+ "xBot": "625bc66b-a5de-42fc-ba9e-fb02ada4a4ee",
+ "updated": "2025-07-02T13:37:07.000+00:00",
+ },
+ ],
+ }
+ /tokenregisterrequests/{readerId}:
+ parameters:
+ - in: path
+ name: readerId
+ required: true
+ description: The NFC reader id.
+ schema:
+ type: string
+ example: b14b0320-2b72-48bb-990b-b97a2d67f9df
+ put:
+ summary: Insert or update token register request.
+ description: Insert or update token register request.
+ tags:
+ - NFC Reader
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TokenRegisterRequestPutRequest"
+ example: { "xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115" }
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TokenRegisterRequestPutResponse"
+ example:
+ {
+ "readerId": "b14b0320-2b72-48bb-990b-b97a2d67f9df",
+ "xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115",
+ "updated": "2025-07-02T15:01:00.000+00:00",
+ }
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TokenRegisterRequestPutResponse"
+ example:
+ {
+ "readerId": "b14b0320-2b72-48bb-990b-b97a2d67f9df",
+ "xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115",
+ "updated": "2025-07-02T15:01:00.000+00:00",
+ }
+components:
+ securitySchemes:
+ bearerToken:
+ type: http
+ scheme: bearer
+ bearerFormat: JWT
+ schemas:
+ TokenRegisterRequestsGetResponse:
+ type: object
+ properties:
+ tokenRegisterRequests:
+ type: array
+ items:
+ $ref: "#/components/schemas/TokenRegisterRequest"
+ TokenRegisterRequestPutRequest:
+ type: object
+ properties:
+ xBot:
+ type: string
+ format: uuid
+ example: 4bfaede2-a6c9-45dd-8a80-1f83a075a115
+ nullable: false
+ description: The xBOT id.
+ required:
+ - xBot
+ TokenRegisterRequestPutResponse:
+ $ref: "#/components/schemas/TokenRegisterRequest"
+ TokenRegisterRequest:
+ type: object
+ properties:
+ readerId:
+ type: string
+ example: b14b0320-2b72-48bb-990b-b97a2d67f9df
+ nullable: false
+ description: The NFC reader id.
+ xBot:
+ type: string
+ format: uuid
+ example: 4bfaede2-a6c9-45dd-8a80-1f83a075a115
+ nullable: false
+ description: The xBOT id.
+ updated:
+ type: string
+ format: date-time
+ example: "2025-07-02T15:01:00+00:00"
+ nullable: false
+ description: The date and time when the token register request was updated.
+ required:
+ - readerId
+ - xBot
+ - updated
diff --git a/src/u4f/examples/codaSoapRequestPostToBook.xml b/src/u4f/examples/codaSoapRequestPostToBook.xml
new file mode 100644
index 0000000..8b05e6c
--- /dev/null
+++ b/src/u4f/examples/codaSoapRequestPostToBook.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+ 1HTM
+ OPBR-FIKO
+
+ 0
+ 2024-11-25T00:00:00.000Z
+ 2024/7
+ EUR
+ 2024-07-25T00:00:00.000Z
+ 1HTM
+ OPBR-FIKO
+
+ wfl_no_completion
+
+ salesinv_notyetinv
+
+
+
+ 1
+ 100.12400.D150000001
+ 100.00
+ summary
+ debit
+ dl_orig_defined
+ test
+ 987654
+ test987654
+ none
+ none
+
+
+ 2
+ 642.41236.609311
+ 100.00
+
+ analysis
+ credit
+ dl_orig_defined
+ none
+ none
+
+
+
+
+ OPBR-FIKO
+
+
+
+
+
\ No newline at end of file
diff --git a/src/u4f/examples/exampleBooking.xml b/src/u4f/examples/exampleBooking.xml
new file mode 100644
index 0000000..b50049a
--- /dev/null
+++ b/src/u4f/examples/exampleBooking.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+ 1HTM
+ VERK_FACTUUR
+
+ 0
+ 2024/5
+ EUR
+ 2024-06-05T00:00:00.000Z
+ DW12345
+
+
+
+ 1
+ 1200.D001
+ 121.00
+ summary
+ credit
+ dl_orig_defined
+ Nov 2020 Huur
+ DW12345
+
+
+ 21.00
+ false
+
+
+ 2
+ 4300
+ 100.00
+ analysis
+ debit
+ dl_orig_defined
+ Voorschot Q1.
+ Ref. DW12345
+
+
+ false
+
+
+ 21%
+ 21% BTW
+ 21.00
+
+
+
+
+ 3
+ 1400
+ 21.00
+ tax
+ debit
+ dl_orig_gentax
+ Test DW
+
+
+
+ 21%
+ 100.00
+
+
+
+
+ FACTUUR_VER
+
+
+
+
+
\ No newline at end of file