configs = factory.getClientProperties();
+ LOGGER.info("Client properties: \n" + new JSONObject(configs).toString(2));
+
+ Connection connection = factory.newConnection();
+ Channel channel = connection.createChannel();
+ DeliverCallback deliverCallback = initDeliverCallback(channel);
+
+ AMQP.Queue.DeclareOk queue = channel.queueDeclarePassive("BEID_3.ALERTS");
+ LOGGER.info(
+ "Declared queue: " + queue.getQueue() + ", consumer count: " + queue.getConsumerCount() + ", message count: " +
+ queue.getMessageCount());
+
+ // Second parameter controls autoAck - false = no autoAck = messages are only deleted from queue after consumer acknowledges them
+ channel.basicConsume(queue.getQueue(), false, deliverCallback, consumerTag -> {});
+ LOGGER.info("Waiting for messages from the queue. To exit press CTRL+C");
+ }
+
+ private static DeliverCallback initDeliverCallback(Channel channel) {
+ return (consumerTag, delivery) -> {
+ final String message = new String(delivery.getBody(), "UTF-8");
+ LOGGER.info("Received from message from the queue: \n " + new JSONObject(message).toString(2));
+
+ LOGGER.info("Acknowledging message with delivery tag: " + delivery.getEnvelope().getDeliveryTag());
+ channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
+ LOGGER.info("Successfully acknowledged message with delivery tag: " + delivery.getEnvelope().getDeliveryTag());
+
+ LOGGER.info("Getting alert details via GBO API 8851...");
+ try {
+ String alertId = Helpers.getAlertId(message);
+ String xBot = Helpers.getXbot(message);
+ String gboBearerToken = Helpers.getGboBearerToken();
+
+ Helpers.getAlertDetails(alertId, xBot, gboBearerToken);
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ };
+ }
+}
diff --git a/src/java/rabbitmq-poc/src/main/resources/log4j2.xml b/src/java/rabbitmq-poc/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..62c23fb
--- /dev/null
+++ b/src/java/rabbitmq-poc/src/main/resources/log4j2.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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/apim/apim-internal.yaml b/src/openapi/apim/apim-internal.yaml
new file mode 100644
index 0000000..283f7ac
--- /dev/null
+++ b/src/openapi/apim/apim-internal.yaml
@@ -0,0 +1,477 @@
+openapi: 3.0.3
+info:
+ title: ABT GBO APIM APIs
+ description: APIs for calling GBO APIM - internal use only, these are NOT the functional APIs to be used by touchpoints!
+ version: "1.0"
+servers:
+ - url: https://api.integratielaag.nl/abt/gboapim/1.0
+paths:
+ /pad-management/v2/personal-data/{xtat}/administrative-data:
+ servers:
+ - url: https://api.integratielaag.nl/abt/serviceengine
+ description: APIPRODUCT ABT Service Engine Portal
+ - url: https://api.integratielaag.nl/abt/gboapim/1.0
+ description: API ABT GBO APIM
+ get:
+ tags:
+ - API WSO2 - GBO APIM
+ summary: API 1211 - Get Administrative Data
+ operationId: ABTPAD-GetAdministrativeData
+ parameters:
+ - name: xtat
+ description: xTAT to get administrative data for
+ in: path
+ required: true
+ schema:
+ type: string
+ 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"
+
+ /internal/b2b-client-authentication/v1/token/idp/b2b-access-token:
+ servers:
+ - url: https://only-for-internal-use.com
+ get:
+ tags:
+ - Internal DHIL use only - Raw GBO APIM
+ summary: API 1020 - Get B2B Access Token
+ description: Returns a client access token, needed for most other PADP APIs.
+ operationId: GetB2bAccessToken
+ parameters:
+ - name: APIKey
+ description: B2B IDP APIM Product API Key
+ in: header
+ required: true
+ schema:
+ type: string
+ - name: grant_type
+ description: A grant_type IS A string THAT defines the method which is used by client to request Access Token. grant_type = client_credentials - is used for M2M communication
+ in: query
+ required: true
+ example: client_credentials
+ schema:
+ type: string
+ - name: client_id
+ description: A client_id IS A string THAT is a unique identifier of the client application
+ in: query
+ required: true
+ schema:
+ type: string
+ - name: client_secret
+ description: A client_secret IS A unique identifier THAT is issued by IDP server on client registertraion and known only to Client and IDP server
+ in: query
+ required: true
+ schema:
+ type: string
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/B2bAccessToken"
+ "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"
+ /internal/pad-management/v2/personal-data/{xtat}/administrative-data:
+ servers:
+ - url: https://only-for-internal-use.com
+ get:
+ tags:
+ - Internal DHIL use only - Raw GBO APIM
+ summary: API 1211 - Get Administrative Data
+ operationId: InternalGBOAPIM-GetAdministrativeData
+ parameters:
+ - name: xtat
+ description: xTAT to get administrative data for
+ in: path
+ required: true
+ schema:
+ type: string
+ - name: APIKey
+ description: PADP APIM Product API Key
+ in: header
+ required: true
+ schema:
+ type: string
+ - name: Authorization
+ description: B2B Client Access Token, without the 'Bearer ' prefix
+ in: header
+ required: true
+ schema:
+ type: string
+ - name: requestId
+ description: A unique identifier for the request
+ in: header
+ required: true
+ schema:
+ type: string
+ 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/AdministrativeData_AdministrativeDataElement"
+ photo:
+ $ref: "#/components/schemas/AdministrativeData_AdministrativeDataElement"
+ birthdate:
+ $ref: "#/components/schemas/AdministrativeData_AdministrativeDataElement"
+ additionalProperties: false
+ AdministrativeData_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
+ B2bAccessToken:
+ type: object
+ properties:
+ access_token:
+ type: string
+ nullable: true
+ expires_in:
+ type: integer
+ format: int32
+ refresh_expires_in:
+ type: integer
+ format: int32
+ refresh_token:
+ type: string
+ nullable: true
+ token_type:
+ type: string
+ nullable: true
+ not-before-policy:
+ type: integer
+ format: int32
+ scope:
+ type: string
+ nullable: true
+ BE_ID:
+ type: string
+ nullable: true
+ additionalProperties: false
+ ErrorResponse:
+ type: object
+ properties:
+ errors:
+ type: array
+ items:
+ $ref: "#/components/schemas/ErrorResponse_Error"
+ nullable: true
+ exceptionClassName:
+ type: string
+ nullable: true
+ exceptionStackTrace:
+ type: string
+ nullable: true
+ additionalProperties: false
+ ErrorResponse_Error:
+ type: object
+ properties:
+ code:
+ type: string
+ nullable: true
+ data:
+ type: array
+ items:
+ type: string
+ nullable: true
+ message:
+ type: string
+ nullable: true
+ additionalProperties: false
diff --git a/src/openapi/claims/claims-forms.yaml b/src/openapi/claims/claims-forms.yaml
new file mode 100644
index 0000000..2404337
--- /dev/null
+++ b/src/openapi/claims/claims-forms.yaml
@@ -0,0 +1,267 @@
+openapi: 3.0.1
+info:
+ title: ClaimsAPI
+ version: '1.0'
+servers:
+ - url: https://services.acc.api.htm.nl/chipkaart/1.0
+security:
+ - default: []
+tags:
+ - name: Claims
+paths:
+ /claims:
+ post:
+ tags:
+ - Claims
+ summary: Create a claim
+ description: >
+ Create a claim by sending a JSON as specified in the schema. By
+ specifying the chipcardnumber under 'chipkaart',
+
+ a claim for OV chipcard will be send to the OVC API. If no
+ chipcardnumber is specified under 'chipkaart', a claim for EMV is send
+ to mendix.
+ parameters: []
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/claimsEntity'
+ examples:
+ OVCK:
+ value:
+ aankomsthalte: '1'
+ instapdatum: '2024-03-06T15:20:44.549Z'
+ instaptijd: '2024-03-06T15:20:44.549Z'
+ ingecheckt: true
+ uitgecheckt: true
+ chipkaart: '1234123412341234'
+ afgeschrevenbedrag: 0
+ vertrekhalte: string
+ korting: true
+ iban: '1234123412341234'
+ naam: string
+ emailadres: user@example.com
+ uitstaptijd: '2024-03-06T15:20:44.549Z'
+ verwachtbedrag: 0
+ toelichting: string
+ lijn: '1'
+ vervoertype: '1'
+ serviceRefId: '1'
+ Totaalbedrag: 0
+ EMV:
+ value:
+ aankomsthalte: '1'
+ instapdatum: '2024-03-06T15:20:44.549Z'
+ instaptijd: '2024-03-06T15:20:44.549Z'
+ ingecheckt: true
+ uitgecheckt: true
+ afgeschrevenbedrag: 0
+ vertrekhalte: string
+ korting: true
+ iban: '1234123412341234'
+ naam: string
+ emailadres: user@example.com
+ uitstaptijd: '2024-03-06T15:20:44.549Z'
+ verwachtbedrag: 0
+ toelichting: string
+ lijn: '1'
+ vervoertype: '1'
+ serviceRefId: '1'
+ Totaalbedrag: 0
+ responses:
+ '200':
+ description: ok
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /refunds:
+ post:
+ tags:
+ - Claims
+ summary: Create a refund request
+ description: Create a refund request by sending a JSON as specified in the schema. Either a serviceReferenceId or ovPasNumber should be present in order to fulfill the refund request.
+ parameters: []
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/refundsEntity'
+ examples:
+ EMV:
+ value:
+ emailAddress: 'j.beek@htm.nl'
+ orderNumber: 'ORD1000046'
+ serviceReferenceId: 'NLOVA5BCD124H3Z21X'
+ amount: 2305
+ iban: 'NL98INGB0003856625'
+ orderDate: '2025-01-13'
+ productName: 'HTM 20% korting'
+ OVpas:
+ value:
+ emailAddress: 'j.beek@htm.nl'
+ orderNumber: 'ORD1000046'
+ ovpasNumber: '63AW974'
+ iban: 'NL98INGB0003856625'
+ orderDate: '2025-01-13'
+ productName: 'HTM 20% korting'
+ responses:
+ '201':
+ description: Created
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+components:
+ schemas:
+ claimsEntity:
+ required:
+ - Totaalbedrag
+ - aankomsthalte
+ - afgeschrevenbedrag
+ - emailadres
+ - instapdatum
+ - instaptijd
+ - korting
+ - lijn
+ - serviceRefId
+ - toelichting
+ - uitgecheckt
+ - vertrekhalte
+ - vervoertype
+ - verwachtbedrag
+ type: object
+ properties:
+ aankomsthalte:
+ type: string
+ instapdatum:
+ type: string
+ format: date-time
+ instaptijd:
+ type: string
+ format: date-time
+ ingecheckt:
+ type: boolean
+ uitgecheckt:
+ type: boolean
+ chipkaart:
+ type: string
+ afgeschrevenbedrag:
+ type: number
+ format: float
+ vertrekhalte:
+ type: string
+ korting:
+ type: boolean
+ iban:
+ type: string
+ description: String of length between 15 en 32 characters
+ example: '1234123412341234'
+ naam:
+ type: string
+ emailadres:
+ type: string
+ format: email
+ uitstaptijd:
+ type: string
+ format: date-time
+ verwachtbedrag:
+ type: number
+ format: float
+ toelichting:
+ type: string
+ lijn:
+ type: string
+ vervoertype:
+ type: string
+ serviceRefId:
+ type: string
+ Totaalbedrag:
+ type: number
+ format: float
+ refundsEntity:
+ required:
+ - emailAddress
+ - iban
+ type: object
+ properties:
+ emailAddress:
+ type: string
+ format: email
+ example: j.beek@htm.nl
+ orderNumber:
+ type: string
+ example: ORD1000046
+ serviceReferenceId:
+ type: string
+ example: NLOVA5BCD124H3Z21X
+ amount:
+ type: integer
+ example: 12305
+ ovpasNumber:
+ type: string
+ example: 63AW974
+ iban:
+ type: string
+ example: NL00RABO000001337
+ orderDate:
+ type: string
+ format: date
+ example: 2025-01-13
+ productName:
+ type: string
+ example: HTM 20% korting
+ 401Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '900901'
+ type:
+ type: string
+ message:
+ type: string
+ example: Invalid Credentials
+ description:
+ type: string
+ example: >-
+ Invalid Credentials. Make sure you have provided the correct
+ security credentials
+ 500Response:
+ type: object
+ properties:
+ error:
+ type: string
+ example: error while connecting to backend
+ securitySchemes:
+ default:
+ type: oauth2
+ flows:
+ implicit:
+ authorizationUrl: https://services.acc.api.htm.nl/authorize
+ scopes: {}
diff --git a/src/openapi/contracts/contracts-crud.yaml b/src/openapi/contracts/contracts-crud.yaml
index 09e1de6..d5f36f2 100644
--- a/src/openapi/contracts/contracts-crud.yaml
+++ b/src/openapi/contracts/contracts-crud.yaml
@@ -4,15 +4,15 @@ info:
version: "1.0"
description: CRUD APIs for ABT Contract database. These are NOT the functional APIs from Service Engine.
servers:
- - url: https://api.integratielaag.nl/v1
+ - url: https://services.acc.api.htm.nl/abt/abtcontracts/1.0
paths:
- /customers/{customerNumber}/contracts:
+ /customers/{customerProfileId}/contracts:
parameters:
- in: path
- name: customerNumber
+ name: customerProfileId
schema:
type: integer
- example: 1001337
+ example: 1337
required: true
description: The customerNumber.
get:
@@ -27,14 +27,14 @@ paths:
type: integer
example: 1
required: false
- description: Filter on possible contract status. 1 = new, 2 = active, 3 = suspended, 4 = cancelled, 5 = terminated.
+ description: Filter on possible contract status. 1 = new, 2 = active, 3 = suspended, 4 = cancelled, 5 = terminated, 6 = pending cancellation, 7 = pending termination.
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/Contract"
+ $ref: "#/components/schemas/Contracts"
example:
{
"contracts":
@@ -48,13 +48,23 @@ paths:
"touchpointId": 2,
"contractStatus":
{ "contractStatusId": 2, "name": "active" },
- "productId": 1,
- "productName": "HTM Maand 20% korting",
"termDuration": "P0Y1M0D",
"billingDay": 15,
"highestInvoiceTerm": 1,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
"created": "2024-08-01 15:01:00.000",
+ "contractVersions":
+ [
+ {
+ "contractVersionId": 1,
+ "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
+ "start": "2024-08-01 15:01:00.000",
+ },
+ ],
},
{
"contractId": "f07253e6-c364-474c-a342-a10a4a7cf305",
@@ -65,15 +75,26 @@ paths:
"touchpointId": 2,
"contractStatus":
{ "contractStatusId": 1, "name": "new" },
- "productId": 1,
- "productName": "HTM Maand 20% korting",
"termDuration": "P0Y1M0D",
"billingDay": 15,
"highestInvoiceTerm": 1,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
"created": "2024-08-01 15:01:00.000",
+ "contractVersions":
+ [
+ {
+ "contractVersionId": 1,
+ "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
+ "start": "2024-08-01 15:01:00.000",
+ },
+ ],
},
],
+ "href": null,
}
post:
summary: Create a contract for an existing customer profile.
@@ -84,7 +105,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Contract"
+ $ref: "#/components/schemas/PostContractsRequestBody"
example:
{
"contract":
@@ -93,20 +114,18 @@ paths:
"orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
"touchpointId": 2,
"contractStatusId": 1,
- "productId": 1,
- "productName": "HTM Maand 20% korting",
"termDuration": "P0Y1M0D",
"billingDay": 15,
"highestInvoiceTerm": 0,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
"contractVersions":
[
{
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1200,
- "taxCode": "V21",
- "taxAmount": 108,
- "termAmountInclTax": 1308,
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
"start": "2024-07-04 15:01:00.000",
"end": "",
},
@@ -128,7 +147,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Contract"
+ $ref: "#/components/schemas/PostContractsResponseBody"
example:
{
"contract":
@@ -152,7 +171,7 @@ paths:
type: integer
explode: false
required: false
- description: Filter on possible contract status. 1 = new, 2 = active, 3 = suspended, 4 = cancelled, 5 = terminated.
+ description: Filter on possible contract status. 1 = new, 2 = active, 3 = suspended, 4 = cancelled, 5 = terminated, 6 = pending cancellation, 7 = pending termination.
- in: query
name: billingDay
schema:
@@ -187,7 +206,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Contract"
+ $ref: "#/components/schemas/Contracts"
example:
{
"contracts":
@@ -201,31 +220,56 @@ paths:
"touchpointId": 2,
"contractStatus":
{ "contractStatusId": 2, "name": "active" },
- "productId": 1,
- "productName": "HTM Maand 20% korting",
"termDuration": "P0Y1M0D",
"billingDay": 15,
"highestInvoiceTerm": 1,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
"contractInvoices":
[
{
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
"externalReference": "F2024-0001",
"term": 1,
+ "invoiceDate": "2024-06-02",
"created": "2024-06-02 15:01:00.000",
"updated": "2024-06-02 15:01:00.000",
"state": "invoice_created",
"isCredit": false,
+ "invoiceAccountingStatuses":
+ [
+ {
+ "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
+ "accountingStatus":
+ {
+ "accountingStatusId": 1,
+ "name": "open",
+ },
+ "createdOn": "2024-06-02 15:01:00.000",
+ "description": null,
+ },
+ ],
},
{
"contractInvoiceId": "1c345237-4d84-47f0-93c2-7b94338e3355",
"externalReference": "F2024-0002",
"term": 2,
+ "invoiceDate": "2024-07-02",
"created": "2024-07-02 15:01:00.000",
"updated": "2024-07-02 15:01:00.000",
"state": "invoice_created",
"isCredit": false,
+ "invoiceAccountingStatuses":
+ [
+ {
+ "invoiceAccountingStatusId": "1e95b854-0094-42a4-9268-c16353fb72a8",
+ "accountingStatus":
+ {
+ "accountingStatusId": 1,
+ "name": "open",
+ },
+ "createdOn": "2024-07-02 15:01:00.000",
+ "description": null,
+ },
+ ],
},
],
"contractVersions":
@@ -233,20 +277,22 @@ paths:
{
"contractVersionId": 1,
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1200,
- "taxCode": "V21",
- "taxAmount": 108,
- "termAmountInclTax": 1308,
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
"start": "2024-07-04 15:01:00.000",
"end": "2024-12-31 15:01:00.000",
},
{
"contractVersionId": 2,
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1300,
- "taxCode": "V21",
- "taxAmount": 117,
- "termAmountInclTax": 1417,
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
"start": "2025-01-01 15:01:00.000",
},
],
@@ -260,31 +306,56 @@ paths:
"touchpointId": 2,
"contractStatus":
{ "contractStatusId": 1, "name": "new" },
- "productId": 1,
- "productName": "HTM Maand 20% korting",
"termDuration": "P0Y1M0D",
"billingDay": 15,
"highestInvoiceTerm": 1,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
"contractInvoices":
[
{
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
"externalReference": "F2024-0003",
"term": 1,
+ "invoiceDate": "2024-06-02",
"created": "2024-06-02 15:01:00.000",
"updated": "2024-06-02 15:01:00.000",
"state": "invoice_created",
"isCredit": false,
+ "invoiceAccountingStatuses":
+ [
+ {
+ "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
+ "accountingStatus":
+ {
+ "accountingStatusId": 1,
+ "name": "open",
+ },
+ "createdOn": "2024-06-02 15:01:00.000",
+ "description": null,
+ },
+ ],
},
{
"contractInvoiceId": "1c345237-4d84-47f0-93c2-7b94338e3355",
"externalReference": "F2024-0004",
"term": 2,
+ "invoiceDate": "2024-07-02",
"created": "2024-07-02 15:01:00.000",
"updated": "2024-07-02 15:01:00.000",
"state": "invoice_created",
"isCredit": false,
+ "invoiceAccountingStatuses":
+ [
+ {
+ "invoiceAccountingStatusId": "1e95b854-0094-42a4-9268-c16353fb72a8",
+ "accountingStatus":
+ {
+ "accountingStatusId": 1,
+ "name": "open",
+ },
+ "createdOn": "2024-07-02 15:01:00.000",
+ "description": null,
+ },
+ ],
},
],
"contractVersions":
@@ -292,20 +363,22 @@ paths:
{
"contractVersionId": 1,
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1200,
- "taxCode": "V21",
- "taxAmount": 108,
- "termAmountInclTax": 1308,
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
"start": "2024-07-04 15:01:00.000",
"end": "2024-12-31 15:01:00.000",
},
{
"contractVersionId": 2,
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1300,
- "taxCode": "V21",
- "taxAmount": 117,
- "termAmountInclTax": 1417,
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
"start": "2025-01-01 15:01:00.000",
},
],
@@ -346,31 +419,30 @@ paths:
"touchpointId": 2,
"contractStatus":
{ "contractStatusId": 2, "name": "active" },
- "productId": 1,
- "productName": "HTM Maand 20% korting",
"termDuration": "P0Y1M0D",
"billingDay": 15,
"highestInvoiceTerm": 1,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
"contractVersions":
[
{
"contractVersionId": 1,
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1200,
- "taxCode": "V21",
- "taxAmount": 108,
- "termAmountInclTax": 1308,
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
"start": "2024-07-04 15:01:00.000",
"end": "2024-12-31 15:01:00.000",
},
{
"contractVersionId": 2,
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1300,
- "taxCode": "V21",
- "taxAmount": 117,
- "termAmountInclTax": 1417,
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
"start": "2025-01-01 15:01:00.000",
},
],
@@ -401,11 +473,22 @@ paths:
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
"externalReference": "F2024-0001",
"term": 1,
+ "invoiceDate": "2024-07-02",
"created": "2024-07-02 15:01:00.000",
"updated": "2024-07-02 15:01:00.000",
"state": "invoice_created",
"data": "{json}",
"isCredit": false,
+ "invoiceAccountingStatuses":
+ [
+ {
+ "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
+ "accountingStatus":
+ { "accountingStatusId": 1, "name": "open" },
+ "createdOn": "2024-06-02 15:01:00.000",
+ "description": null,
+ },
+ ],
},
],
},
@@ -419,17 +502,14 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Contract"
+ $ref: "#/components/schemas/PatchContractsRequestBody"
example:
{
"contract":
{
"contractStatusId": 2,
- "productId": 1,
- "productName": "HTM 20% korting 2024",
"billingDay": 15,
"highestInvoiceTerm": 2,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
},
}
responses:
@@ -438,7 +518,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Contract"
+ $ref: "#/components/schemas/PatchContractsResponseBody"
example:
{
"contract":
@@ -466,16 +546,17 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractVersion"
+ $ref: "#/components/schemas/PostContractVersionsRequestBody"
example:
{
"contractVersion":
{
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1200,
- "taxCode": "V21",
- "taxAmount": 108,
- "termAmountInclTax": 1308,
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
"start": "2024-07-08 15:01:00.000",
"end": "",
},
@@ -486,7 +567,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractVersion"
+ $ref: "#/components/schemas/PostContractVersionsResponseBody"
example:
{
"contractVersion":
@@ -521,7 +602,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractVersion"
+ $ref: "#/components/schemas/PatchContractVersionsRequestBody"
example: { "contractVersion": { "end": "2024-07-03 15:01:00.000" } }
responses:
"200":
@@ -529,7 +610,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractVersion"
+ $ref: "#/components/schemas/PatchContractVersionsResponseBody"
example:
{
"contractVersion":
@@ -538,6 +619,14 @@ paths:
"contractVersionId": 1,
},
}
+ delete:
+ summary: Delete an existing contract version.
+ description: Delete an existing contract version.
+ tags:
+ - ContractVersion
+ responses:
+ "200":
+ description: OK
/contracts/{contractId}/contractinvoices:
parameters:
- in: path
@@ -548,45 +637,6 @@ paths:
example: d1dd439b-6072-4b97-89c9-724268865b93
required: true
description: The contractId of the Contract, formatted as UUID.
- get:
- summary: Get invoices of a single contract. DEPRECATED.
- description: Get invoices of a single contract. WARNING; This method is deprecated. Please use GET /contractinvoices instead.
- deprecated: true
- tags:
- - ContractInvoice
- responses:
- "200":
- description: OK
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/ContractInvoice"
- example:
- {
- "contractInvoices":
- [
- {
- "contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
- "externalReference": "F2024-0001",
- "term": 1,
- "created": "2024-07-02 15:01:00.000",
- "updated": "2024-07-02 15:01:00.000",
- "state": "invoice_sent",
- "data": "{json}",
- "isCredit": false,
- },
- {
- "contractInvoiceId": "dadff658-4ff5-4eb8-b516-492f1f6c6245",
- "externalReference": "F2024-0002",
- "term": 2,
- "created": "2024-08-02 15:01:00.000",
- "updated": "2024-08-02 15:01:00.000",
- "state": "invoice_created",
- "data": "{json}",
- "isCredit": false,
- },
- ],
- }
post:
summary: Add an invoice to an existing contract.
description: Add an invoice to an existing contract.
@@ -596,18 +646,27 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractInvoice"
+ $ref: "#/components/schemas/PostContractInvoicesRequestBody"
example:
{
"contractInvoice":
{
"externalReference": "F2024-0001",
"term": 1,
+ "invoiceDate": "2024-07-02",
"created": "2024-07-02 15:01:00.000",
"updated": "2024-07-02 15:01:00.000",
"state": "invoice_created",
"data": "{json}",
"isCredit": false,
+ "invoiceAccountingStatuses":
+ [
+ {
+ "invoiceAccountingStatusId": 1,
+ "createdOn": "2024-07-02 15:01:00.000",
+ "description": null,
+ },
+ ],
},
}
responses:
@@ -616,7 +675,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractInvoice"
+ $ref: "#/components/schemas/PostContractInvoicesResponseBody"
example:
{
"contractInvoice":
@@ -631,6 +690,14 @@ paths:
tags:
- ContractInvoice
parameters:
+ - in: query
+ name: contractInvoiceId
+ schema:
+ type: string
+ format: uuid
+ example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f
+ required: false
+ description: Id of the contract invoice to fetch.
- in: query
name: contractId
schema:
@@ -653,6 +720,22 @@ paths:
example: 4
required: false
description: Term of the invoice.
+ - in: query
+ name: invoiceDateFrom
+ schema:
+ type: string
+ format: date
+ example: 2024-06-02
+ required: false
+ description: Invoice date of the invoice (from).
+ - in: query
+ name: invoiceDateUntil
+ schema:
+ type: string
+ format: date
+ example: 2024-06-02
+ required: false
+ description: Invoice date of the invoice (until).
- in: query
name: createdFrom
schema:
@@ -705,7 +788,12 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Contract"
+ type: object
+ properties:
+ contractInvoices:
+ type: array
+ items:
+ $ref: "#/components/schemas/ContractInvoice"
example:
{
"contractInvoices":
@@ -715,22 +803,44 @@ paths:
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
"externalReference": "F2024-0030",
"term": 1,
+ "invoiceDate": "2024-06-02",
"created": "2024-06-02 15:01:00.000",
"updated": "2024-06-02 15:01:00.000",
"state": "invoice_created",
"data": "{json}",
"isCredit": false,
+ "invoiceAccountingStatuses":
+ [
+ {
+ "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
+ "accountingStatus":
+ { "accountingStatusId": 1, "name": "open" },
+ "createdOn": "2024-06-02 15:01:00.000",
+ "description": null,
+ },
+ ],
},
{
"contractId": "a7452e22-3894-40cc-87d6-869370a92277",
"contractInvoiceId": "dadff658-4ff5-4eb8-b516-492f1f6c6245",
"externalReference": "F2024-0002",
"term": 2,
+ "invoiceDate": "2024-08-02",
"created": "2024-08-02 15:01:00.000",
"updated": "2024-08-02 15:01:00.000",
"state": "invoice_created",
"data": "{json}",
"isCredit": false,
+ "invoiceAccountingStatuses":
+ [
+ {
+ "invoiceAccountingStatusId": "84af0f01-0416-4860-851a-a0d4b3cf674a",
+ "accountingStatus":
+ { "accountingStatusId": 1, "name": "open" },
+ "createdOn": "2024-08-02 15:01:00.000",
+ "description": null,
+ },
+ ],
},
],
}
@@ -753,7 +863,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractInvoice"
+ $ref: "#/components/schemas/PatchContractInvoicesRequestBody"
example:
{
"contractInvoice":
@@ -769,7 +879,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractInvoice"
+ $ref: "#/components/schemas/PatchContractInvoicesResponseBody"
example:
{
"contractInvoice":
@@ -777,6 +887,43 @@ paths:
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
},
}
+ /contractinvoices/{contractInvoiceId}/invoiceaccountingstatuses:
+ parameters:
+ - in: path
+ name: contractInvoiceId
+ schema:
+ type: string
+ format: uuid
+ example: d1dd439b-6072-4b97-89c9-724268865b93
+ required: true
+ description: The id of the ContractInvoice, formatted as UUID.
+ post:
+ summary: Add a new invoice accounting status to a contract invoice.
+ description: Add a new invoice accounting status to a contract invoice.
+ tags:
+ - ContractInvoice
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/PostInvoiceAccountingStatusesRequestBody"
+ example:
+ {
+ "accountingStatusId": 1,
+ "createdOn": "2024-07-02 15:01:00.000",
+ "description": null,
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/PostInvoiceAccountingStatusesResponseBody"
+ example:
+ {
+ "invoiceAccountingStatusId": "a6836364-4812-4960-9226-69deb2e2b903",
+ }
/contracts/{contractId}/contractactions:
parameters:
- in: path
@@ -798,7 +945,12 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/Contract"
+ type: object
+ properties:
+ contractActions:
+ type: array
+ items:
+ $ref: "#/components/schemas/ContractAction"
example:
{
"contractActions":
@@ -830,7 +982,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractAction"
+ $ref: "#/components/schemas/PostContractActionsRequestBody"
example:
{
"contractAction":
@@ -848,7 +1000,7 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractAction"
+ $ref: "#/components/schemas/PostContractActionsResponseBody"
example:
{
"contractAction":
@@ -868,7 +1020,12 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractStatus"
+ type: object
+ properties:
+ contractStatuses:
+ type: array
+ items:
+ $ref: "#/components/schemas/ContractStatus"
example:
{
"contractStatuses":
@@ -878,6 +1035,9 @@ paths:
{ "contractStatusId": 3, "name": "suspended" },
{ "contractStatusId": 4, "name": "cancelled" },
{ "contractStatusId": 5, "name": "terminated" },
+ { "contractStatusId": 6, "name": "pending cancellation" },
+ { "contractStatusId": 7, "name": "pending termination" },
+ { "contractStatusId": 8, "name": "pending change" },
],
}
/actiontypes:
@@ -892,7 +1052,12 @@ paths:
content:
application/json:
schema:
- $ref: "#/components/schemas/ContractStatus"
+ type: object
+ properties:
+ actionTypes:
+ type: array
+ items:
+ $ref: "#/components/schemas/ActionType"
example:
{
"actionTypes":
@@ -913,6 +1078,412 @@ components:
scheme: bearer
bearerFormat: JWT
schemas:
+ PostContractsRequestBody:
+ type: object
+ properties:
+ contract:
+ type: object
+ properties:
+ orderId:
+ type: string
+ format: uuid
+ example: eb3d08f7-7feb-4f31-9f5b-daa634e51f48
+ orderLineId:
+ type: string
+ format: uuid
+ example: 52efbbfc-8c28-4016-9ece-dc3ef9a70bd8
+ touchpointId:
+ type: integer
+ example: 2
+ termDuration:
+ type: string
+ format: ISO8601
+ example: P0Y1M0D
+ billingDay:
+ type: integer
+ example: 15
+ highestInvoiceTerm:
+ type: integer
+ example: 0
+ contractVersions:
+ type: array
+ items:
+ type: object
+ properties:
+ termsAndConditions:
+ type: string
+ format: url
+ example: https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/
+ productId:
+ type: integer
+ example: 1
+ productName:
+ type: string
+ example: HTM Maand 20% korting
+ taxCode:
+ type: string
+ example: V9
+ taxPercentage:
+ type: number
+ format: float
+ example: 9.0
+ termAmountInclTax:
+ type: integer
+ example: 400
+ start:
+ type: string
+ format: date-time
+ example: 2024-07-04 15:01:00.000
+ end:
+ type: string
+ format: date-time
+ example: 2024-12-31 15:01:00.000
+ required:
+ - termsAndConditions
+ - productId
+ - productName
+ - taxCode
+ - taxPercentage
+ - termAmountInclTax
+ - start
+ required:
+ - orderId
+ - orderLineId
+ - touchpointId
+ - termDuration
+ - billingDay
+ - highestInvoiceTerm
+ - contractVersions
+ required:
+ - contract
+ PostContractsResponseBody:
+ type: object
+ properties:
+ contract:
+ type: object
+ properties:
+ contractId:
+ type: string
+ format: uuid
+ example: 5a3876a1-e9a1-4278-8983-4679a8d583c2
+ contractNumber:
+ type: string
+ pattern: '^D\d{6}$'
+ example: D123456
+ required:
+ - contractId
+ - contractNumber
+ required:
+ - contract
+ PatchContractsRequestBody:
+ type: object
+ properties:
+ contract:
+ type: object
+ properties:
+ contractStatusId:
+ type: integer
+ example: 2
+ billingDay:
+ type: integer
+ example: 15
+ highestInvoiceTerm:
+ type: integer
+ example: 2
+ required:
+ - contract
+ PatchContractsResponseBody:
+ type: object
+ properties:
+ contract:
+ type: object
+ properties:
+ contractId:
+ type: string
+ format: uuid
+ example: 5a3876a1-e9a1-4278-8983-4679a8d583c2
+ contractNumber:
+ type: string
+ pattern: '^D\d{6}$'
+ example: D123456
+ required:
+ - contractId
+ - contractNumber
+ required:
+ - contract
+ PostContractVersionsRequestBody:
+ type: object
+ properties:
+ contractVersion:
+ type: object
+ properties:
+ termsAndConditions:
+ type: string
+ format: url
+ example: https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/
+ productId:
+ type: integer
+ example: 1
+ productName:
+ type: string
+ example: HTM Maand 20% korting
+ taxCode:
+ type: string
+ example: V9
+ taxPercentage:
+ type: number
+ format: float
+ example: 9.0
+ termAmountInclTax:
+ type: integer
+ example: 400
+ start:
+ type: string
+ format: date-time
+ example: 2024-07-04 15:01:00.000
+ end:
+ type: string
+ format: date-time
+ example: 2024-12-31 15:01:00.000
+ required:
+ - termsAndConditions
+ - productId
+ - productName
+ - taxCode
+ - taxPercentage
+ - termAmountInclTax
+ - start
+ required:
+ - contractVersion
+ PostContractVersionsResponseBody:
+ type: object
+ properties:
+ contractVersion:
+ type: object
+ properties:
+ contractId:
+ type: string
+ format: uuid
+ example: 5a3876a1-e9a1-4278-8983-4679a8d583c2
+ contractVersionId:
+ type: integer
+ example: 1
+ required:
+ - contractId
+ - contractVersionId
+ required:
+ - contractVersion
+ PatchContractVersionsRequestBody:
+ type: object
+ properties:
+ contractVersion:
+ type: object
+ properties:
+ end:
+ type: string
+ format: date-time
+ example: 2024-12-31 15:01:00.000
+ required:
+ - contractVersion
+ PatchContractVersionsResponseBody:
+ type: object
+ properties:
+ contractVersion:
+ type: object
+ properties:
+ contractId:
+ type: string
+ format: uuid
+ example: 5a3876a1-e9a1-4278-8983-4679a8d583c2
+ contractVersionId:
+ type: integer
+ example: 1
+ required:
+ - contractId
+ - contractVersionId
+ required:
+ - contractVersion
+ PostContractInvoicesRequestBody:
+ type: object
+ properties:
+ contractInvoice:
+ type: object
+ properties:
+ externalReference:
+ type: string
+ example: F2024-0001
+ term:
+ type: integer
+ example: 1
+ invoiceDate:
+ type: string
+ format: date
+ example: 2024-07-02
+ created:
+ type: string
+ format: date-time
+ example: 2024-07-02 15:01:00.000
+ updated:
+ type: string
+ format: date-time
+ example: 2024-07-02 15:01:00.000
+ state:
+ type: string
+ example: invoice_created
+ data:
+ type: string
+ format: json
+ example: "{json}"
+ isCredit:
+ type: boolean
+ example: false
+ invoiceAccountingStatuses:
+ type: array
+ items:
+ type: object
+ properties:
+ accountingStatusId:
+ type: integer
+ example: 1
+ createdOn:
+ type: string
+ format: date-time
+ example: 2024-07-02 15:01:00.000
+ description:
+ type: string
+ example: null
+ required:
+ - accountingStatusId
+ - createdOn
+ required:
+ - externalReference
+ - term
+ - invoiceDate
+ - created
+ - updated
+ - state
+ - data
+ - isCredit
+ - invoiceAccountingStatuses
+ required:
+ - contractInvoice
+ PostContractInvoicesResponseBody:
+ type: object
+ properties:
+ contractInvoice:
+ type: object
+ properties:
+ contractInvoiceId:
+ type: string
+ format: uuid
+ example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f
+ required:
+ - contractInvoiceId
+ required:
+ - contractInvoice
+ PatchContractInvoicesRequestBody:
+ type: object
+ properties:
+ contractInvoice:
+ type: object
+ properties:
+ updated:
+ type: string
+ format: date-time
+ example: 2024-07-02 15:01:00.000
+ state:
+ type: string
+ example: invoice_reopened
+ data:
+ type: string
+ format: json
+ example: "{json}"
+ required:
+ - contractInvoice
+ PatchContractInvoicesResponseBody:
+ type: object
+ properties:
+ contractInvoice:
+ type: object
+ properties:
+ contractInvoiceId:
+ type: string
+ format: uuid
+ example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f
+ required:
+ - contractInvoiceId
+ required:
+ - contractInvoice
+ PostInvoiceAccountingStatusesRequestBody:
+ type: object
+ properties:
+ accountingStatusId:
+ type: integer
+ example: 1
+ createdOn:
+ type: string
+ format: date-time
+ example: 2024-07-02 15:01:00.000
+ description:
+ type: string
+ example: null
+ required:
+ - accountingStatusId
+ - createdOn
+ PostInvoiceAccountingStatusesResponseBody:
+ type: object
+ properties:
+ invoiceAccountingStatusId:
+ type: string
+ format: uuid
+ example: a6836364-4812-4960-9226-69deb2e2b903
+ required:
+ - invoiceAccountingStatusId
+ PostContractActionsRequestBody:
+ type: object
+ properties:
+ contractAction:
+ type: object
+ properties:
+ actionType:
+ type: integer
+ example: 2
+ user:
+ type: string
+ example: subid123456
+ timestamp:
+ type: string
+ format: date-time
+ example: 2024-07-02 15:01:00.000
+ details:
+ type: string
+ example: Contract changed xyz
+ correlationId:
+ type: string
+ format: uuid
+ example: 976e7a4c-bf24-43d2-b444-55817556e7ee
+ required:
+ - actionType
+ - user
+ - timestamp
+ - details
+ - correlationId
+ required:
+ - contractAction
+ PostContractActionsResponseBody:
+ type: object
+ properties:
+ contractAction:
+ type: object
+ properties:
+ contractActionId:
+ type: string
+ format: uuid
+ example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f
+ required:
+ - contractActionId
+ required:
+ - contractAction
Contract:
type: object
properties:
@@ -941,12 +1512,6 @@ components:
contractStatus:
type: object
$ref: "#/components/schemas/ContractStatus"
- productId:
- type: integer
- example: 1
- productName:
- type: string
- example: HTM Maand 20% korting
termDuration:
type: string
format: ISO8601
@@ -957,10 +1522,6 @@ components:
highestInvoiceTerm:
type: integer
example: 1
- xSpit:
- type: string
- format: uuid
- example: 1c345237-4d84-47f0-93c2-7b94338e3355
contractVersions:
type: array
items:
@@ -1018,18 +1579,22 @@ components:
type: string
format: url
example: https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/
- termAmountExclTax:
+ productId:
type: integer
- example: 1200
+ example: 1
+ productName:
+ type: string
+ example: HTM Maand 20% korting
taxCode:
type: string
- example: V21
- taxAmount:
- type: integer
- example: 108
+ example: V9
+ taxPercentage:
+ type: number
+ format: float
+ example: 9.0
termAmountInclTax:
type: integer
- example: 1308
+ example: 400
start:
type: string
format: date-time
@@ -1051,6 +1616,10 @@ components:
term:
type: integer
example: 1
+ invoiceDate:
+ type: string
+ format: date
+ example: 2024-07-02
created:
type: string
format: date-time
@@ -1065,10 +1634,41 @@ components:
data:
type: string
format: json
- example: { json }
+ example: "{json}"
isCredit:
type: boolean
example: false
+ InvoiceAccountingStatus:
+ type: object
+ properties:
+ invoiceAccountingStatusId:
+ type: string
+ format: uuid
+ example: 6b6f0f5e-5d3f-4a6d-8e7d-6a7d0f9e6c5b
+ contractInvoiceId:
+ type: string
+ format: uuid
+ example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f
+ accountingStatus:
+ type: object
+ $ref: "#/components/schemas/AccountingStatus"
+ createdOn:
+ type: string
+ format: date-time
+ example: 2024-07-02 15:01:00.000
+ description:
+ type: string
+ example: Open
+ AccountingStatus:
+ type: object
+ properties:
+ accountingStatusId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ enum: [open, sent, received, rejected]
+ example: open
ContractStatus:
type: object
properties:
@@ -1077,7 +1677,16 @@ components:
example: 2
name:
type: string
- enum: [new, active, suspended, cancelled, terminated]
+ enum:
+ [
+ new,
+ active,
+ suspended,
+ cancelled,
+ terminated,
+ pending cancellation,
+ pending termination,
+ ]
example: active
ActionType:
type: object
diff --git a/src/openapi/contracts/contracts-se.yaml b/src/openapi/contracts/contracts-se.yaml
index 0fb6b31..1a7fd29 100644
--- a/src/openapi/contracts/contracts-se.yaml
+++ b/src/openapi/contracts/contracts-se.yaml
@@ -4,7 +4,7 @@ info:
version: "1.0"
description: Service Engine APIs for ABT Contracts v2. These are NOT the CRUD APIs to the data hub.
servers:
- - url: https://api.integratielaag.nl/v1
+ - url: https://services.acc.api.htm.nl/abt/touchpoint/1.0
paths:
/customers/contracts:
parameters:
@@ -27,42 +27,65 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- [
- {
- "contractId": "5a3876a1-e9a1-4278-8983-4679a8d583c2",
- "contractNumber": "D123456",
- "customerProfileId": 42,
- "orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
- "orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
- "touchpointId": 2,
- "contractStatus":
- { "contractStatusId": 2, "name": "active" },
- "productId": 1,
- "productName": "HTM Maand 20% korting",
- "termDuration": "P0Y1M0D",
- "billingDay": 15,
- "highestInvoiceTerm": 1,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
- "created": "2024-08-01 15:01:00.000",
- },
- {
- "contractId": "f07253e6-c364-474c-a342-a10a4a7cf305",
- "contractNumber": "D123456",
- "customerProfileId": 42,
- "orderId": "945d43e6-516e-425b-8847-9aba41289acd",
- "orderLineId": "42f68042-908f-41f4-9d9b-4cab843ff0e8",
- "touchpointId": 2,
- "contractStatus": { "contractStatusId": 1, "name": "new" },
- "productId": 1,
- "productName": "HTM Maand 20% korting",
- "termDuration": "P0Y1M0D",
- "billingDay": 15,
- "highestInvoiceTerm": 1,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
- "created": "2024-08-01 15:01:00.000",
- },
- ]
+ examples:
+ List all contracts for a single customer profile:
+ summary: List all contracts for a single customer profile
+ description: |
+ List all contracts for single customer profile with customer
+ number 'D123456'.
+ value:
+ [
+ {
+ "contractId": "5a3876a1-e9a1-4278-8983-4679a8d583c2",
+ "contractNumber": "D123456",
+ "customerProfileId": 42,
+ "orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
+ "orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
+ "touchpointId": 2,
+ "contractStatus":
+ { "contractStatusId": 2, "name": "active" },
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "termDuration": "P0Y1M0D",
+ "billingDay": 15,
+ "highestInvoiceTerm": 1,
+ "created": "2024-08-01 15:01:00.000",
+ "ovPayTokenId": 1337,
+ "_links":
+ {
+ "get_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPayTokenId=1337",
+ "method": "GET",
+ },
+ },
+ },
+ {
+ "contractId": "f07253e6-c364-474c-a342-a10a4a7cf305",
+ "contractNumber": "D123456",
+ "customerProfileId": 42,
+ "orderId": "945d43e6-516e-425b-8847-9aba41289acd",
+ "orderLineId": "42f68042-908f-41f4-9d9b-4cab843ff0e8",
+ "touchpointId": 2,
+ "contractStatus":
+ { "contractStatusId": 1, "name": "new" },
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "termDuration": "P0Y1M0D",
+ "billingDay": 15,
+ "highestInvoiceTerm": 1,
+ "created": "2024-08-01 15:01:00.000",
+ "ovPayTokenId": 1338,
+ "_links":
+ {
+ "get_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPayTokenId=1338",
+ "method": "GET",
+ },
+ },
+ },
+ ]
/customers/contracts/{contractId}:
parameters:
- in: header
@@ -114,76 +137,96 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "contractId": "5a3876a1-e9a1-4278-8983-4679a8d583c2",
- "contractNumber": "D123456",
- "customerProfileId": 42,
- "orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
- "orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
- "touchpointId": 2,
- "contractStatus": { "contractStatusId": 2, "name": "active" },
- "productId": 1,
- "productName": "HTM Maand 20% korting",
- "termDuration": "P0Y1M0D",
- "billingDay": 15,
- "highestInvoiceTerm": 1,
- "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355",
- "contractVersions":
- [
- {
- "contractVersionId": 1,
- "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1200,
- "taxCode": "V21",
- "taxAmount": 108,
- "termAmountInclTax": 1308,
- "start": "2024-07-04 15:01:00.000",
- "end": "2024-12-31 15:01:00.000",
- },
- {
- "contractVersionId": 2,
- "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
- "termAmountExclTax": 1300,
- "taxCode": "V21",
- "taxAmount": 117,
- "termAmountInclTax": 1417,
- "start": "2025-01-01 15:01:00.000",
- },
- ],
- "contractActions":
- [
- {
- "contractActionId": "67687851-59dd-4bbc-aa74-0f7abd26c883",
- "actionType": { "actionTypeId": 1, "name": "create" },
- "user": "subid123456",
- "timestamp": "2024-07-02 15:01:00.000",
- "details": "Contract created",
- "correlationId": "976e7a4c-bf24-43d2-b444-55817556e7ee",
- },
- {
- "contractActionId": "ea9ad287-9cd3-4e76-bcb9-d71db551cf55",
- "actionType": { "actionTypeId": 2, "name": "change" },
- "user": "subid123456",
- "timestamp": "2024-07-03 15:01:00.000",
- "details": "Contract changed",
- "correlationId": "e2462347-6749-4841-b42a-cf8de19ec727",
- },
- ],
- "contractInvoices":
- [
- {
- "contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
- "externalReference": "F2024-0001",
- "term": 1,
- "created": "2024-07-02 15:01:00.000",
- "updated": "2024-07-02 15:01:00.000",
- "state": "invoice_created",
- "data": "{json}",
- "isCredit": false,
- },
- ],
- }
+ examples:
+ Full contract details of a single contract:
+ summary: Full contract details of a single contract
+ description: |
+ Full contract details of a single contract with contract
+ number 'D123456'.
+ value:
+ {
+ "contractId": "5a3876a1-e9a1-4278-8983-4679a8d583c2",
+ "contractNumber": "D123456",
+ "customerProfileId": 42,
+ "orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
+ "orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
+ "touchpointId": 2,
+ "contractStatus":
+ { "contractStatusId": 2, "name": "active" },
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "termDuration": "P0Y1M0D",
+ "billingDay": 15,
+ "highestInvoiceTerm": 1,
+ "ovPayTokenId": 1337,
+ "contractVersions":
+ [
+ {
+ "contractVersionId": 1,
+ "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
+ "start": "2024-07-04 15:01:00.000",
+ "end": "2024-12-31 15:01:00.000",
+ },
+ {
+ "contractVersionId": 2,
+ "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
+ "start": "2025-01-01 15:01:00.000",
+ },
+ ],
+ "contractActions":
+ [
+ {
+ "contractActionId": "67687851-59dd-4bbc-aa74-0f7abd26c883",
+ "actionType":
+ { "actionTypeId": 1, "name": "create" },
+ "user": "subid123456",
+ "timestamp": "2024-07-02 15:01:00.000",
+ "details": "Contract created",
+ "correlationId": "976e7a4c-bf24-43d2-b444-55817556e7ee",
+ },
+ {
+ "contractActionId": "ea9ad287-9cd3-4e76-bcb9-d71db551cf55",
+ "actionType":
+ { "actionTypeId": 2, "name": "change" },
+ "user": "subid123456",
+ "timestamp": "2024-07-03 15:01:00.000",
+ "details": "Contract changed",
+ "correlationId": "e2462347-6749-4841-b42a-cf8de19ec727",
+ },
+ ],
+ "contractInvoices":
+ [
+ {
+ "contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
+ "externalReference": "F2024-0001",
+ "term": 1,
+ "invoiceDate": "2024-07-02",
+ "created": "2024-07-02 15:01:00.000",
+ "updated": "2024-07-02 15:01:00.000",
+ "state": "invoice_created",
+ "data": "{json}",
+ "isCredit": false,
+ },
+ ],
+ "_links":
+ {
+ "get_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPayTokenId=1337",
+ "method": "GET",
+ },
+ },
+ }
/customers/contracts/{contractId}/invoices:
parameters:
- in: header
@@ -213,31 +256,39 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- [
- {
- "contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
- "contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
- "externalReference": "F2024-0001",
- "term": 1,
- "created": "2024-07-02 15:01:34.000",
- "updated": "2024-07-04 00:04:56.000",
- "state": "invoice_created",
- "public_link": "http://mijnfactuurinzien.nl/F2024-0001",
- "isCredit": false,
- },
- {
- "contractInvoiceId": "0e729101-2c84-44db-8b18-d8f759e968e0",
- "contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
- "externalReference": "F2024-0002",
- "term": 2,
- "created": "2024-08-02 15:01:34.000",
- "updated": "2024-08-04 00:04:56.000",
- "state": "invoice_created",
- "public_link": "http://mijnfactuurinzien.nl/F2024-0002",
- "isCredit": false,
- },
- ]
+ examples:
+ Get all invoices of a single contract:
+ summary: Get all invoices of a single contract
+ description: |
+ Get all invoices of a single contract with contract number
+ 'D123456'.
+ value:
+ [
+ {
+ "contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
+ "contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
+ "externalReference": "F2024-0001",
+ "term": 1,
+ "invoiceDate": "2024-07-02",
+ "created": "2024-07-02 15:01:34.000",
+ "updated": "2024-07-04 00:04:56.000",
+ "state": "invoice_created",
+ "public_link": "http://mijnfactuurinzien.nl/F2024-0001",
+ "isCredit": false,
+ },
+ {
+ "contractInvoiceId": "0e729101-2c84-44db-8b18-d8f759e968e0",
+ "contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
+ "externalReference": "F2024-0002",
+ "term": 2,
+ "invoiceDate": "2024-08-02",
+ "created": "2024-08-02 15:01:34.000",
+ "updated": "2024-08-04 00:04:56.000",
+ "state": "invoice_created",
+ "public_link": "http://mijnfactuurinzien.nl/F2024-0002",
+ "isCredit": false,
+ },
+ ]
/contracts/{contractId}/cancellationmoments:
parameters:
- in: header
@@ -267,14 +318,19 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "cancellationMoment": "termBound",
- "termDuration": "P1M",
- "billingDay": 18,
- "cancellationFrom": "2024-08-10T00:00:00",
- "cancellationUntil": "2026-08-10T00:00:00"
- }
+ examples:
+ All cancellation moments of a term bound contract:
+ summary: All cancellation moments of a term bound contract
+ description: |
+ All cancellation moments of a term bound contract.
+ value:
+ {
+ "cancellationMoment": "termBound",
+ "termDuration": "P1M",
+ "billingDay": 18,
+ "cancellationFrom": "2024-08-10T00:00:00",
+ "cancellationUntil": "2026-08-10T00:00:00",
+ }
/contracts/{contractId}/cancellationvalidation:
parameters:
- in: header
@@ -303,10 +359,12 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "end": "2024-08-10T00:00:00"
- }
+ examples:
+ Validate a cancellation of a given end date:
+ summary: Validate a cancellation of a given end date
+ description: |
+ Validate a cancellation of a given end date.
+ value: { "end": "2024-08-10T00:00:00" }
responses:
"200":
description: OK
@@ -314,14 +372,32 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "validationResult": "true",
- "validationMessage": "",
- "end": "2024-08-10T03:59:59",
- "refundAmount": "2489",
- "refundMethods": [ "creditInvoice", "iDeal" ]
- }
+ examples:
+ Successfully validated cancellation:
+ summary: Successfully validated cancellation
+ description: |
+ Successfully validated a cancellation. The response contains
+ the refund amount and refund methods.
+ value:
+ {
+ "validationResult": true,
+ "validationMessage": "",
+ "end": "2024-08-10T03:59:59",
+ "refundAmount": 2489,
+ "refundMethods": ["creditInvoice", "iDeal"],
+ }
+ Unsuccesful validation:
+ summary: Unsuccesful validation
+ description: |
+ Unsuccesful validation. The response contains the error message.
+ value:
+ {
+ "validationResult": false,
+ "validationMessage": "Cancellation end date not allowed",
+ "end": null,
+ "refundAmount": null,
+ "refundMethods": [],
+ }
/contracts/{contractId}/cancellation:
parameters:
- in: header
@@ -346,15 +422,20 @@ paths:
- SE Contract Cancellation v2
requestBody:
required: true
- content:
+ content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "end": "2024-08-10T00:00:00",
- "refundMethod": "creditInvoice"
- }
+ examples:
+ Cancellation request for credit invoice:
+ summary: Cancellation request for credit invoice
+ description: |
+ Cancellation request for credit invoice.
+ value:
+ {
+ "end": "2024-08-10T00:00:00",
+ "refundMethod": "creditInvoice",
+ }
responses:
"200":
description: OK
@@ -362,12 +443,211 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "end": "2024-08-10T03:59:59",
- "refundAmount": "2489",
- "refundMethod": "creditInvoice"
- }
+ examples:
+ Successfully cancelled contract:
+ summary: Successfully cancelled contract
+ description: |
+ Successfully cancelled a contract. The response contains
+ the refund amount and refund method.
+ value:
+ {
+ "end": "2024-08-10T03:59:59",
+ "refundAmount": 2489,
+ "refundMethod": "creditInvoice",
+ }
+ /contracts/{contractId}/undocancellation:
+ parameters:
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: true
+ description: The JWT of the logged in customer.
+ - in: path
+ name: contractId
+ schema:
+ type: string
+ format: uuid
+ example: 9e224750-3065-471d-af57-85b9cffa7c89
+ required: true
+ description: The id of the contract to process.
+ post:
+ summary: Undo a pending cancellation of a contract.
+ description: Undo a pending cancellation of a contract.
+ tags:
+ - SE Contract Cancellation v2
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Successfully undid cancellation of contract:
+ summary: Successfully undid pending cancellation
+ description: |
+ Successfully undid a pending cancellation of a contract. The contract
+ is active again.
+ value:
+ {
+ "contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
+ "contractNumber": "D123456",
+ "customerProfileId": 42,
+ "orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
+ "orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
+ "touchpointId": 2,
+ "contractStatus":
+ { "contractStatusId": 2, "name": "active" },
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "termDuration": "P0Y1M0D",
+ "billingDay": 15,
+ "highestInvoiceTerm": 1,
+ "ovPayTokenId": 1337,
+ "contractVersions":
+ [
+ {
+ "contractVersionId": 1,
+ "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
+ "start": "2024-07-04 15:01:00.000",
+ "end": "2024-12-31 15:01:00.000",
+ },
+ {
+ "contractVersionId": 2,
+ "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
+ "productId": 1,
+ "productName": "HTM Maand 20% korting",
+ "taxCode": "V9",
+ "taxPercentage": 9.0,
+ "termAmountInclTax": 400,
+ "start": "2025-01-01 15:01:00.000",
+ },
+ ],
+ "contractActions":
+ [
+ {
+ "contractActionId": "67687851-59dd-4bbc-aa74-0f7abd26c883",
+ "actionType":
+ { "actionTypeId": 1, "name": "create" },
+ "user": "subid123456",
+ "timestamp": "2024-07-02 15:01:00.000",
+ "details": "Contract created",
+ "correlationId": "976e7a4c-bf24-43d2-b444-55817556e7ee",
+ },
+ {
+ "contractActionId": "ea9ad287-9cd3-4e76-bcb9-d71db551cf55",
+ "actionType":
+ { "actionTypeId": 2, "name": "change" },
+ "user": "subid123456",
+ "timestamp": "2024-07-03 15:01:00.000",
+ "details": "Contract changed",
+ "correlationId": "e2462347-6749-4841-b42a-cf8de19ec727",
+ },
+ ],
+ "contractInvoices":
+ [
+ {
+ "contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
+ "externalReference": "F2024-0001",
+ "term": 1,
+ "invoiceDate": "2024-07-02",
+ "created": "2024-07-02 15:01:00.000",
+ "updated": "2024-07-02 15:01:00.000",
+ "state": "invoice_created",
+ "data": "{json}",
+ "isCredit": false,
+ },
+ ],
+ "_links":
+ {
+ "get_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPayTokenId=1337",
+ "method": "GET",
+ },
+ },
+ }
+ /contractpayments:
+ parameters:
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: true
+ description: The JWT of the logged in customer.
+ get:
+ summary: List all contract payments for a certain debtor.
+ description: |
+ List all contract payments for a certain debtor. The source of these payments is the accounts receivable management system (Payt).
+ tags:
+ - SE Contract Payments v2
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ List all contract payments for a single debtor:
+ summary: List all contract payments for a single debtor
+ description: List all contract payments for single debtor with debtor number 'D123456'.
+ value:
+ {
+ "contractPayments":
+ [
+ {
+ "paymentId": "151845776",
+ "totalAmount": "26.62",
+ "paymentMethod": "Twikey",
+ "paymentDate": "2024-09-12",
+ "invoice":
+ {
+ "invoiceId": "147722263",
+ "invoiceNumber": "F2024-0001",
+ "description": "HTM Maandkorting 20%",
+ "publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
+ },
+ "_links":
+ {
+ "get_contractdetails":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
+ "method": "GET",
+ },
+ },
+ },
+ {
+ "paymentId": "151845851",
+ "totalAmount": "45.21",
+ "paymentMethod": "Twikey",
+ "paymentDate": "2024-09-12",
+ "invoice":
+ {
+ "invoiceId": "147722266",
+ "invoiceNumber": "F2024-0002",
+ "description": "HTM Maandkorting 20%",
+ "publicLink": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a/i/dp5h1i5cuu94nopiolkdst3u17vkmzo",
+ },
+ "_links":
+ {
+ "get_contractdetails":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/7b2f8c1a-3d9d-4c2d-960e-4471e8e28b6a",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
components:
securitySchemes:
bearerToken:
diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml
new file mode 100644
index 0000000..3c8d039
--- /dev/null
+++ b/src/openapi/customers/SE-customers.yaml
@@ -0,0 +1,3874 @@
+openapi: 3.0.1
+info:
+ title: Service Engine APIs for Customers
+ description: >-
+ Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database.
+ To be used by touchpoints to get information about HTM customers.
+ version: "1.0"
+servers:
+ - url: https://services.acc.api.htm.nl/abt/touchpoint/1.0
+tags:
+ - name: Customers
+ description: >-
+ Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database.
+ To be used by touchpoints to get information about HTM customers.
+paths:
+ /customers:
+ get:
+ tags:
+ - Customers
+ summary: Get a customer profile based on search parameters
+ description: |
+ Get a profile based on search parameters. Only returns a profile if a single result matches for a customer
+ the parameters; when multiple results are found, additional search parameters are required to disambiguate. If role is klantenservice, multiple customers can be returned.
+ parameters:
+ - name: customerProfileId
+ in: query
+ schema:
+ type: integer
+ example: 1
+ - name: customerNumber
+ in: query
+ schema:
+ type: integer
+ example: 1000001
+ - name: customerStatusId
+ in: query
+ schema:
+ type: integer
+ example: 1
+ - name: debtorNumber
+ in: query
+ schema:
+ type: integer
+ example: 100001
+ - name: debtorStatusId
+ in: query
+ schema:
+ type: integer
+ example: 1
+ - name: birthname
+ in: query
+ schema:
+ type: string
+ example: John
+ - name: surname
+ in: query
+ schema:
+ type: string
+ example: Doe
+ - name: emailAddress
+ in: query
+ schema:
+ type: string
+ format: email
+ example: john.doe@mymailprovider.com
+ - name: dateOfBirth
+ in: query
+ schema:
+ type: string
+ format: date
+ example: "2000-01-01"
+ - name: addressStreet
+ in: query
+ schema:
+ type: string
+ example: Sesamestreet
+ - name: addressHouseNumber
+ in: query
+ schema:
+ type: integer
+ example: 1
+ - name: addressHouseNumberSuffix
+ in: query
+ schema:
+ type: string
+ example: A
+ - name: addressPostalCode
+ in: query
+ schema:
+ type: string
+ example: 1234 AB
+ - name: addressCity
+ in: query
+ schema:
+ type: string
+ example: The Hague
+ - name: addressCountry
+ in: query
+ schema:
+ type: string
+ example: The Netherlands
+ - name: phoneNumber
+ in: query
+ schema:
+ type: string
+ example: "0123456789"
+ - name: ovChipcardNumber
+ in: query
+ schema:
+ type: integer
+ example: 0123456789
+ - name: ovChipcardAlias
+ in: query
+ schema:
+ type: string
+ example: My ovchipcard
+ - name: ovPayTokenNumber
+ in: query
+ schema:
+ type: integer
+ example: 0123456789
+ - name: ovPayTokenAlias
+ in: query
+ schema:
+ type: string
+ example: My Ov Pay Token
+ - name: ovPayTokenXTat
+ in: query
+ schema:
+ type: string
+ example: 180d04e0-a721-447e-a1d9-b416937b43bc
+ - name: ovPayTokenXBot
+ in: query
+ schema:
+ type: string
+ example: e1307c73-676a-4d07-967b-6141276f7c7c
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/CustomersResponseList"
+ "404":
+ description: No customer found
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers",
+ "apiErrorCode": "400.1",
+ "title": "Niet gevonden",
+ "detail": "Klant niet gevonden",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ "errors": [{ "subApiErrorCode": "0017" }],
+ }
+ "409":
+ description: Multiple customers found
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers",
+ "apiErrorCode": "409.1",
+ "title": "Meer dan 1 klantprofiel gevonden",
+ "detail": "Meer dan 1 klantprofiel gevonden. Verfijn je zoekcriteria.",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ }
+ post:
+ tags:
+ - Customers
+ parameters:
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ description: The role of the HTM employee in the case of the SMP, in this case the call can only be done through the SMP
+ summary: Create a customer profile.
+ description: Create a customer profile in the ABT database with status ACTIVE and debtorStatus Inactive with a start date based on the timestamp of this post call.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ minimalCustomerProfile:
+ value:
+ {
+ "person": {
+ "emailAddress": "j.jansen@hatseflats.nl"
+ }
+ }
+ fullCustomerProfile:
+ value:
+ {
+ "customerPreference": {
+ "languageId": 1
+ },
+ "person": {
+ "birthname": "Jan",
+ "surname": "Jansen",
+ "prefix": "dhr",
+ "suffix": "jr",
+ "dateOfBirth": "1970-01-01",
+ "emailAddress": "j.jansen@hatseflats.nl",
+ "addresses": [
+ {
+ "street": "Laan van Meerdervoort",
+ "houseNumber": 5,
+ "houseNumberSuffix": "B",
+ "postalCode": "2500AA",
+ "city": "Den Haag",
+ "country": "NL",
+ "isPreferred": true,
+ "addressTypeId": 1
+ },
+ {
+ "street": "Beeklaan",
+ "houseNumber": 30,
+ "houseNumberSuffix": "B",
+ "postalCode": "2500AA",
+ "city": "Den Haag",
+ "country": "NL",
+ "isPreferred": false,
+ "addressTypeId": 2
+ }
+ ],
+ "phones": [
+ {
+ "number": "6123456789",
+ "countryCode": "0031",
+ "phoneTypeId": 1,
+ "isPreferred": true
+ },
+ {
+ "number": "7012345678",
+ "countryCode": "0031",
+ "phoneTypeId": 2,
+ "isPreferred": false
+ }
+ ],
+ "devices": [
+ {
+ "externalDeviceId": "123e4567-e89b-12d3-a456-426614174000",
+ "alias": "My iPhone",
+ },
+ {
+ "externalDeviceId": "987e6543-e21b-12d3-a456-426614174999",
+ "alias": "My iPad",
+ }
+ ]
+ }
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/CustomersResponse"
+ patch:
+ tags:
+ - Customers
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ description: The role of the HTM employee in the case of the SMP
+ summary: Update a customer profile
+ description: Update a customer profile based on the sub from the JWT, or customerProfileId in case of SMP
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ patchCustomer:
+ value:
+ {
+ "person": {
+ "birthname": "Jan",
+ "surname": "Jansen",
+ "prefix": "dhr",
+ "suffix": "jr",
+ "dateOfBirth": "1970-01-01",
+ "addresses": [
+ {
+ "addressId": 2,
+ "street": "Laan van Meerdervoort",
+ "houseNumber": 5,
+ "postalCode": "2500AA",
+ "city": "Den Haag",
+ "country": "NL"
+ },
+ {
+ "addressId": 1,
+ "street": "Beeklaan",
+ "houseNumber": 30,
+ "houseNumberSuffix": "B",
+ "postalCode": "2500AA",
+ "city": "Den Haag",
+ "country": "NL",
+ "addressTypeId": 2
+ }
+ ],
+ "phones": [
+ {
+ "phoneId": 1,
+ "number": "6123456789",
+ "countryCode": "0031",
+ "phoneTypeId": 1,
+ "isPreferred": true
+ },
+ {
+ "phoneId": 2,
+ "number": "7012345678",
+ "countryCode": "0031",
+ "phoneTypeId": 2,
+ "isPreferred": false
+ }
+ ],
+ "devices": [
+ {
+ "deviceId": "813afdd8-bf8c-4e26-bfda-4da79552bd38",
+ "externalDeviceId": "123e4567-e89b-12d3-a456-426614174000",
+ "alias": "My iPhone",
+ },
+ {
+ "deviceId": "4f4249a2-ac6c-44f9-b740-66e66b6f3c28",
+ "externalDeviceId": "987e6543-e21b-12d3-a456-426614174999",
+ "alias": "My iPad",
+ }
+ ]
+ }
+ }
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/CustomersResponse"
+
+ /customers/tokens:
+ get:
+ tags:
+ - Customers
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ description: The role of the HTM employee in the case of the SMP
+ - name: ovPayTokenId
+ in: query
+ schema:
+ type: integer
+ example: 1
+ required: false
+ description: The ovpay token id of a specific customer token
+ - name: tokenTypeId
+ in: query
+ schema:
+ type: array
+ items:
+ type: integer
+ explode: false
+ description: Filter on tokentype. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital
+ required: false
+ - name: xTat
+ in: query
+ schema:
+ type: string
+ example: 4c2d60e2-cd03-4c80-ae70-573a301f0bff
+ required: false
+ description: Filter on the xTat of a customer token
+ - name: xBot
+ in: query
+ schema:
+ type: string
+ example: 91641b54-056c-49ea-b598-ccde81d6c45a
+ required: false
+ description: Filter on the xBot of a customer token
+ - name: ovpasNumber
+ in: query
+ schema:
+ type: string
+ example: 56HYRTL
+ required: false
+ description: Filter on the OV pasNumber of a customer token of type OV Pas
+ - name: lastDigits
+ in: query
+ schema:
+ type: string
+ example: 1234
+ required: false
+ description: Filter on the last digits of a customer token of type EMV
+ - name: tokenStatusId
+ in: query
+ schema:
+ type: array
+ items:
+ type: integer
+ explode: false
+ description: Filter on token status. 1 = Retired, 2 = Active, 3 = Replaced (*), 4 = On Stock, 5 = Suspended, 6 = Removed by customer (*), 7 = Renewed Active
+ required: false
+ - name: expirationDate
+ in: query
+ schema:
+ type: string
+ format: date-time
+ example: 2027-01-01T09:00:00Z
+ required: false
+ description: Filter on the expirationDate of a customer token
+ - name: replacedByTokenId
+ in: query
+ schema:
+ type: integer
+ example: 2
+ required: false
+ description: Filter on the replacedByTokenId of a customer token
+ summary: Get a list of all OvPayTokens for a certain customer.
+ description: Get a list of all OvPayTokens for a certain customer, only returns the tokens for an identified customer through JWT or customerProfileId in the headers.
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Empty token list:
+ summary: Empty token list
+ description: Empty token list
+ value:
+ {
+ "ovPayTokens": [],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
+ },
+ }
+ EMV without PAD:
+ summary: EMV without PAD
+ description: EMV without PAD
+ value:
+ {
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "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,
+ },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
+ },
+ },
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
+ },
+ }
+ OV pas without PAD:
+ summary: OV pas without PAD
+ description: OV pas without PAD
+ value:
+ {
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 350 },
+ "status": "ACTIVE",
+ "originDate": "2019-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate": null,
+ "photo": null,
+ },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/51compare",
+ "method": "POST",
+ },
+ },
+ },
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
+ },
+ }
+ OV pas with PAD and autoReload:
+ summary: OV pas with PAD and autoReload
+ description: OV pas with PAD and autoReload
+ value:
+ {
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration":
+ {
+ "autoReloadAmount": 500,
+ "retailerReferenceId": "abc",
+ "arrit": "425f7fc2-1103-4822-9c79-7c4aaa2fb6aa",
+ "autoReloadRegistrationStatus": "ACTIVE",
+ "autoReloadRegistrationStartDateTime": "2024-06-02T15:03:46Z",
+ },
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 350 },
+ "status": "ACTIVE",
+ "originDate": "2019-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ {
+ "name":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 0,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "birthdate":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 0,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 0,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ },
+ "gboAgeProfile":
+ {
+ "gboAgeProfileId": 1,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11
+ },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips",
+ "method": "GET",
+ },
+ "update_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "PATCH",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare",
+ "method": "POST",
+ },
+ },
+ },
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
+ },
+ }
+ OV pas with partial PAD:
+ summary: OV pas with partial PAD
+ description: OV pas with partial PAD
+ value:
+ {
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 350 },
+ "status": "ACTIVE",
+ "originDate": "2019-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": "Invalid birthdate",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo": null,
+ },
+ "gboAgeProfile":
+ {
+ "gboAgeProfileId": 1,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11
+ },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips",
+ "method": "GET",
+ },
+ "update_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "PATCH",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare",
+ "method": "POST",
+ },
+ },
+ },
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
+ },
+ }
+ OV pas with invalid PAD:
+ summary: OV pas with invalid PAD
+ description: OV pas with invalid PAD
+ value:
+ {
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 350 },
+ "status": "ACTIVE",
+ "originDate": "2019-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ {
+ "name":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "birthdate":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ },
+ "gboAgeProfile":
+ {
+ "gboAgeProfileId": 1,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11
+ },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips",
+ "method": "GET",
+ },
+ "update_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "PATCH",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare",
+ "method": "POST",
+ },
+ },
+ },
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
+ },
+ }
+ Token list with every status for tokenTypeId = 2, role = KlantenService:
+ summary: Token list with every status for tokenTypeId = 2, role = KlantenService
+ description: Token list with every status for tokenTypeId = 2, role = KlantenService
+ value:
+ {
+ "ovPayTokens":
+ [
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "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,
+ },
+ "gboAgeProfile": 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,
+ },
+ "gboAgeProfile": 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,
+ },
+ "gboAgeProfile": 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,
+ },
+ "gboAgeProfile": 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,
+ },
+ "gboAgeProfile": 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,
+ },
+ "gboAgeProfile": null
+ },
+ ],
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "GET",
+ },
+ },
+ }
+ post:
+ tags:
+ - Customers
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ summary: Create a new OV paytoken in the database for a given customer
+ description: Create a new OV paytoken for a customerProfile
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Add EMV token:
+ summary: Add EMV token
+ description: Add EMV token
+ value:
+ {
+ "ovPayToken":
+ {
+ "tokenTypeId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 200,
+ "alias": "Mijn token",
+ },
+ }
+ Add OV pas physical token:
+ summary: Add OV pas physical token
+ description: Add OV pas physical token
+ value:
+ {
+ "ovPayToken":
+ {
+ "tokenTypeId": 2,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "211",
+ "alias": "Mijn token",
+ },
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Add EMV token:
+ summary: Add EMV token
+ description: Add EMV token
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "lastDigits": null,
+ "ovPasNumber": null,
+ "alias": "Mijn token",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare",
+ "method": "POST",
+ },
+ },
+ },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "POST",
+ },
+ },
+ }
+ Add OV pas physical token:
+ summary: Add OV pas physical token
+ description: Add OV pas physical token
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "lastDigits": null,
+ "ovpasNumber": "OV34567",
+ "alias": "Mijn token",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 00 },
+ "status": "INACTIVE",
+ "originDate": "2019-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare",
+ "method": "POST",
+ },
+ },
+ },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens",
+ "method": "POST",
+ },
+ },
+ }
+ /customers/tokens/{ovpayTokenId}:
+ post:
+ tags:
+ - Customers
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ - name: ovpayTokenId
+ in: path
+ schema:
+ type: integer
+ example: 1
+ required: true
+ summary: Replace an OVpay token with another (+ transfer products) - V1 (for touch point)
+ description: |
+ Transfer products from one OVpay token to another, and replace the tokens in the database.
+ This endpoint is for touch point usage and will be replaced by `/customers/tokens/{ovpayTokenId}/transfer`.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Replace with new EMV token by SRID:
+ summary: Replace with new token by SRID
+ description: Replace with new token by service reference ID and amount.
+ value:
+ {
+ "ovPayToken":
+ {
+ "newTokenId": null,
+ "tokenTypeId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 230,
+ "alias": "Nieuw token",
+ },
+ }
+ Replace with existing EMV token from profile:
+ summary: Replace with existing token from profile
+ description: Replace with existing token from customer profile.
+ value: { "ovPayToken": { "newTokenId": 10 } }
+ Replace with new OV pas token:
+ summary: Replace with new OV pas token
+ description: Replace with new OV pas token by OV-pas number.
+ value:
+ {
+ "ovPayToken":
+ {
+ "tokenTypeId": 2,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "211",
+ "alias": "Mijn token",
+ },
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Replace with new EMV token:
+ summary: Replace with new EMV token
+ description: Replace with new EMV token
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 5,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "lastDigits": null,
+ "ovpasNumber": null,
+ "alias": "Mijn token",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ Replace with new OV pas token:
+ summary: Replace with new OV pas token
+ description: Replace with new OV pas token
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 5,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "lastDigits": null,
+ "ovpasNumber": "OV34567",
+ "alias": "Mijn token",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 350 },
+ "status": "ACTIVE",
+ "originDate": "2024-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ "200":
+ description: Ok
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Replace with existing EMV token:
+ summary: Replace with existing EMV token
+ description: Replace with existing EMV token
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 10,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "lastDigits": null,
+ "ovpasNumber": null,
+ "alias": "Mijn bestaande token",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=10",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ patch:
+ tags:
+ - Customers
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ - name: ovpayTokenId
+ in: path
+ schema:
+ type: integer
+ example: 1
+ required: true
+ summary: Edit an existing OV paytoken
+ description: Edit an existing OV paytoken in the database for a given customer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Update an OV pay token status:
+ summary: Update an OV pay token status
+ description: Update an OV pay token status
+ value: { "ovPayToken": { "tokenStatusId": 5 } }
+ Update an OV pay token alias:
+ summary: Update an OV pay token alias
+ description: Update an OV pay token alias
+ value: { "ovPayToken": { "alias": "Mijn nieuwe tokennaam" } }
+ Update an OV pay token full:
+ summary: Update an OV pay token full
+ description: Update an OV pay token full
+ value:
+ {
+ "ovPayToken":
+ { "tokenStatusId": 5, "alias": "Mijn verloren pas" },
+ }
+ responses:
+ "200":
+ description: Ok
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Update an OV pay token status:
+ summary: Update an OV pay token status
+ description: Update an OV pay token status
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 5,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "lastDigits": null,
+ "ovpasNumber": null,
+ "alias": "Mijn token",
+ "tokenStatus":
+ { "tokenStatusId": 5, "name": "Suspended" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ Update an OV pay token alias:
+ summary: Update an OV pay token alias
+ description: Update an OV pay token alias
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 5,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "lastDigits": null,
+ "ovpasNumber": null,
+ "alias": "Mijn nieuwe tokennaam",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ Update an OV pay token full:
+ summary: Update an OV pay token full
+ description: Update an OV pay token full
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 5,
+ "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "lastDigits": null,
+ "ovpasNumber": null,
+ "alias": "Mijn verloren pas",
+ "tokenStatus":
+ { "tokenStatusId": 5, "name": "Suspended" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/e35977b2-52bb-48ef-aca8-297b2c1d5058",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ delete:
+ tags:
+ - Customers
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ - name: ovpayTokenId
+ in: path
+ schema:
+ type: integer
+ example: 1
+ required: true
+ summary: Delete an existing OV paytoken
+ description: Delete an existing OV paytoken for a given customer
+ responses:
+ "200":
+ description: Ok
+ /customers/tokens/{ovpayTokenId}/replace:
+ post:
+ tags:
+ - Token Replace v2
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ - name: ovpayTokenId
+ in: path
+ schema:
+ type: integer
+ example: 1
+ required: true
+ summary: 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 },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ Replace with new OV pas token:
+ summary: Replace with new OV pas token
+ description: Replace with new OV pas token
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 5,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "lastDigits": null,
+ "ovpasNumber": "OV34567",
+ "alias": "Mijn token",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 350 },
+ "status": "ACTIVE",
+ "originDate": "2024-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=5",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/5/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ "200":
+ description: Ok
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Replace with existing EMV token:
+ summary: Replace with existing EMV token
+ description: Replace with existing EMV token
+ value:
+ {
+ "ovPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 10,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "lastDigits": null,
+ "ovpasNumber": null,
+ "alias": "Mijn bestaande token",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-08-31T23:59:00+02:00",
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=10",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/trips",
+ "method": "GET",
+ },
+ "add_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/32089cc8-d187-47ff-a3a9-5c2558def811",
+ "method": "POST",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/10/compare",
+ "method": "POST",
+ },
+ },
+ },
+ }
+ /customers/tokens/{ovPayTokenId}/productinstances:
+ get:
+ tags:
+ - Customers
+ summary: Get a list of all HTM products instantiated on the given OvPayToken
+ description: |-
+ Get a list of all HTM products instantiated on the given OvPayToken.
+ Only HTM products are returned; GBO does not allow HTM to get information on non-HTM product-instances.
+ Where relevant, operations to be performed are returned as HATEOAS links per product-instance.
+ parameters:
+ - name: ovPayTokenId
+ in: path
+ required: true
+ style: simple
+ description: Id of the OvPayToken to get product-instances for.
+ schema:
+ type: integer
+ example: 1
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/OvPayTokenProductInstancesResponse"
+ examples:
+ getEmptyProductInstances:
+ summary: No product-instances found on token
+ value:
+ productInstances: []
+ getSingleProductInstance:
+ summary: One non-renewable product-instance
+ value:
+ {
+ "productInstances":
+ [
+ {
+ "productId": 1,
+ "name": "HTM 90% Korting",
+ "status": "Active",
+ "isRenewable": true,
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "name": "Kortingsabonnement",
+ },
+ "fromInclusive": "2024-11-25T13:25:00+01:00",
+ "untilInclusive": "2024-12-25T03:59:59+01:00",
+ "orderId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "orderLineId": "38B17EF-36C4-4039-B92C-4817969B464E",
+ "contractId": "56B17EF-C436-9043-B76C-481797WEB464F",
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances/1",
+ "method": "GET",
+ },
+ "get_order":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/orders/501B17EF-36C4-4039-B92C-6517969B464E",
+ "method": "GET",
+ },
+ "get_contract":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ /customers/tokens/{ovPayTokenId}/compare:
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ - name: ovPayTokenId
+ in: path
+ required: true
+ style: simple
+ description: Id of the OVpay token for the LHS of the comparison.
+ schema:
+ type: integer
+ example: 1
+ post:
+ summary: Compare attributes of two OVpay tokens.
+ description: |-
+ Compare the attributes of an existing OVpay token in the customer profile with the
+ attributes of a new OVpay token. The new token can be passed using one of the following
+ methods:
+
+ - Compare with an existing OVpay token
+ - Compare with an XBOT
+ - Compare with an XTAT
+ - Compare with SRID + amount
+ - Compare with OVpas number + verification code
+
+ The comparison results are returned in the response body. Comparison is made on the following
+ attributes:
+
+ - Token type
+ - Token status (only if target token is known in the customer profile)
+ - Expiry date
+ - Instantiated GBO products
+ - Auto reload registration
+ - E-purse
+ - PAD (name, birthdate, photo)
+ - Age profile
+ tags:
+ - Customers
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/CompareRequest"
+ examples:
+ Compare with an existing OVpay token:
+ value: { "ovPayTokenId": 1 }
+ Compare with an xBOT:
+ value: { "xBot": "e35977b2-52bb-48ef-aca8-297b2c1d5058" }
+ Compare with an xTAT:
+ value: { "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058" }
+ Compare with SRID + amount:
+ value:
+ { "serviceReferenceId": "NLOV1234567ABCDEFG", "amount": 230 }
+ Compare with OVpas number + verification code:
+ value: { "ovpasNumber": "OV34567", "verificationCode": "1234" }
+ Complete request body (for development only):
+ value:
+ {
+ "ovPayTokenId": 1,
+ "xBot": "e35977b2-52bb-48ef-aca8-297b2c1d5058",
+ "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058",
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 230,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "1234",
+ }
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Transferable token:
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null
+ },
+ "isTransferable": true,
+ "transferableObjects":
+ {
+ "tokenType": true,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": true,
+ "autoReloadRegistration": true,
+ "ePurse": true,
+ "personalAccountData":
+ { "name": true, "birthdate": true, "photo": true },
+ "gboAgeProfile": true
+ },
+ "_links":
+ {
+ "transfer":
+ {
+ "href": "https://services.dev.api.htm.nl/abt/touchpoint/1.0/customers/tokens/1/transfer",
+ "method": "POST",
+ },
+ },
+ }
+ Non-transferable token (products not compatible on new token):
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "productInstances": [
+ {
+ "productId": 1,
+ "name": "HTM 90% Korting EMV",
+ "status": "Active",
+ "isRenewable": true,
+ "productCategory": {
+ "productCategoryId": 1,
+ "name": "Kortingsabonnement"
+ },
+ "fromInclusive": "2025-11-25T13:25:00+01:00",
+ "untilInclusive": "2025-12-25T03:59:59+01:00",
+ "orderId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "orderLineId": "38B17EF-36C4-4039-B92C-4817969B464E",
+ "contractId": "56B17EF-C436-9043-B76C-481797WEB464F",
+ "_links": {
+ "self": {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances/1",
+ "method": "GET"
+ },
+ "get_order": {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/orders/501B17EF-36C4-4039-B92C-6517969B464E",
+ "method": "GET"
+ },
+ "get_contract": {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F",
+ "method": "GET"
+ }
+ }
+ }
+ ],
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null
+ },
+ "isTransferable": false,
+ "transferableObjects":
+ {
+ "tokenType": true,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": false,
+ "autoReloadRegistration": true,
+ "ePurse": true,
+ "personalAccountData":
+ { "name": true, "birthdate": true, "photo": true },
+ "gboAgeProfile": true,
+ },
+ "_links": {},
+ }
+ Non-transferable token (unsupported token type combination):
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null
+ },
+ "isTransferable": false,
+ "transferableObjects":
+ {
+ "tokenType": false,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": true,
+ "autoReloadRegistration": true,
+ "ePurse": true,
+ "personalAccountData":
+ { "name": true, "birthdate": true, "photo": true },
+ "gboAgeProfile": true,
+ },
+ "_links": {},
+ }
+ Non-transferable token (marked PAD):
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": 2,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "birthdate":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo":
+ {
+ "inaccuracyFlag": true,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ },
+ "gboAgeProfile":
+ {
+ "gboAgeProfileId": 1,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11
+ }
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "32089cc8-d187-47ff-a3a9-5c2558def811",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ { "name": null, "birthdate": null, "photo": null },
+ "gboAgeProfile": null
+ },
+ "isTransferable": false,
+ "transferableObjects":
+ {
+ "tokenType": true,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": true,
+ "autoReloadRegistration": true,
+ "ePurse": true,
+ "personalAccountData":
+ {
+ "name": false,
+ "birthdate": false,
+ "photo": false,
+ },
+ "gboAgeProfile": true,
+ },
+ "_links": {},
+ }
+ Non-transferable token (different age profile):
+ value:
+ {
+ "oldOvPayToken":
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 1,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": "MyToken",
+ "tokenStatus":
+ { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": 2,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo": null,
+ },
+ "gboAgeProfile":
+ {
+ "gboAgeProfileId": 1,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11
+ }
+ },
+ "newOvPayToken":
+ {
+ "customerProfileId": null,
+ "ovPayTokenId": null,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType": { "tokenTypeId": 1, "name": "EMV" },
+ "alias": null,
+ "tokenStatus": null,
+ "expirationDate": "2028-02-01",
+ "productInstances": [],
+ "replacedByTokenId": null,
+ "autoReloadRegistration": null,
+ "ePurse": null,
+ "personalAccountData":
+ {
+ "name": null,
+ "birthdate":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": "T.B.D",
+ "inaccuracyFlagSetCounter": 1,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo": null,
+ },
+ "gboAgeProfile":
+ {
+ "gboAgeProfileId": 4,
+ "name": "Kind (19 t/m 65 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 65
+ }
+ },
+ "isTransferable": false,
+ "transferableObjects":
+ {
+ "tokenType": true,
+ "tokenStatus": true,
+ "expirationDate": true,
+ "productInstances": true,
+ "autoReloadRegistration": true,
+ "ePurse": false,
+ "personalAccountData":
+ { "name": true, "birthdate": false, "photo": true },
+ "gboAgeProfile": false,
+ },
+ "_links": {},
+ }
+ "400":
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ New token already present in other customer profile:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/badrequest",
+ "title": "Bad Request",
+ "detail": "New token already present in other customer profile.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "New token already present in other customer profile.",
+ "pointer": "#/0/ovPayTokenId",
+ "ovPayTokenId": 2,
+ },
+ ],
+ }
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Old token not found in profile:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notfound",
+ "title": "The item you requested was not found.",
+ "detail": "The old token was not found in the customer profile.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "The old token was not found in the customer profile.",
+ "pointer": "#/0/ovPayTokenId",
+ "ovPayTokenId": 1,
+ },
+ ],
+ }
+ New token not found in profile:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notfound",
+ "title": "The item you requested was not found.",
+ "detail": "The new token was not found in the customer profile.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "The new token was not found in the customer profile.",
+ "pointer": "#/0/ovPayTokenId",
+ "ovPayTokenId": 2,
+ },
+ ],
+ }
+ XTAT for new token not found in GBO:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notfound",
+ "title": "The item you requested was not found.",
+ "detail": "The new token was not found in GBO:.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "XTAT for the new token was not found in GBO.",
+ "pointer": "#/0/xTat",
+ "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058",
+ },
+ ],
+ }
+ SRID for new token not found in GBO:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notfound",
+ "title": "The item you requested was not found.",
+ "detail": "The new token was not found in GBO:.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Service Reference ID for the new token was not found in GBO.",
+ "pointer": "#/0/serviceReferenceId",
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ },
+ ],
+ }
+ /customers/tokens/{ovPayTokenId}/transfer:
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ - name: ovPayTokenId
+ in: path
+ required: true
+ style: simple
+ description: Id of the OVpay token from which data will be transferred.
+ schema:
+ type: integer
+ example: 1
+ post:
+ summary: "**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. This call is asynchronous, and progress can be monitored using the
+ `/customers/tokens/transfer/responsestatus/*` endpoint.
+ tags:
+ - Token Replace v2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TransferRequest"
+ examples:
+ Transfer from a token without PAD to a new token:
+ summary: Transfer from a token without PAD to a new token
+ description: |
+ Transfer of a token without PAD to a new OVpay token. Note the new token in the request is always
+ identified by xTAT, regardless if the new token already exists in the customer profile. If the new
+ token does not exist in the customer profile, the user needs to provide an alias for the new token,
+ and it will be created in the customer profile.
+ value:
+ {
+ "oldOvPayToken": {},
+ "newOvPayToken":
+ {
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "alias": "My new token",
+ },
+ }
+ Transfer from a token with PAD to a new token without existing PAD:
+ summary: Transfer from a token with PAD to a new token without existing PAD
+ description: |
+ Transfer of a token with PAD to a new token by xTAT without existing PAD. Note how this request is
+ different, since it has an e-mail address on which the new PAD should be created. This request may
+ optionally provide an OTP for verification of th provided email address.
+ Also note the new token in the request is always identified by xTAT, regardless if the new token
+ already exists in the customer profile. If the new token does not exist in the customer profile, the
+ user needs to provide an alias for the new token, and it will be created in the customer profile.
+ value:
+ {
+ "oldOvPayToken": { "padOtp": "123456" },
+ "newOvPayToken":
+ {
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "alias": "My new token",
+ "padEmailAddress": "jandevries@outlook.com",
+ "padOtp": "678901",
+ },
+ }
+ Transfer from a token with PAD to a new token with existing PAD:
+ summary: Transfer from a token with PAD to a new token with existing PAD
+ description: |
+ Transfer of a token with PAD to a new token by xTAT with existing PAD.
+ Note that the new token in the request is always identified by xTAT, regardless if the new token
+ already exists in the customer profile. If the new token does not exist in the customer profile, the
+ user needs to provide an alias for the new token, and it will be created in the customer profile.
+ value:
+ {
+ "oldOvPayToken": { "padOtp": "123456" },
+ "newOvPayToken":
+ {
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "alias": "My new token",
+ "padOtp": "678901",
+ },
+ }
+ Complete request body (for development only):
+ summary: Complete request body (for development only)
+ description: |
+ Complete request body (for development only).
+ value:
+ {
+ "oldOvPayToken": { "padOtp": "123456" },
+ "newOvPayToken":
+ {
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "alias": "My new token",
+ "padEmailAddress": "jandevries@outlook.com",
+ "padOtp": "678901",
+ },
+ }
+ responses:
+ "202":
+ description: Accepted
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Transfer of token started:
+ description: |
+ The transfer of the token was started successfully. The data of the token will be transferred
+ asynchronously. In the response body the consumer will find information on how to retrieve the
+ processing status.
+ value:
+ {
+ "startTime": "2025-02-14T05:32:47.067Z",
+ "status": "Running",
+ "clientTrackingId": "08584620957189579629541919368CU00",
+ "callbackurl": "https://api.integratielaag.nl/customers/tokens/transfer/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c",
+ "retryAfter": 10,
+ }
+ "400":
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Request body validation error:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/validation",
+ "title": "Validation error",
+ "detail": "The request body is not valid.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "The old token is required.",
+ "pointer": "#/oldOvPayToken",
+ },
+ {
+ "detail": "The new token is required.",
+ "pointer": "#/newOvPayToken",
+ },
+ ],
+ }
+ /customers/tokens/transfer/responsestatus/{clientTrackingId}:
+ parameters:
+ - in: path
+ name: clientTrackingId
+ schema:
+ type: string
+ required: true
+ description: The clientTrackingId of the token transfer request.
+ get:
+ tags:
+ - Token Replace v2
+ summary: "**INTEGRATIELAAG** Get the status of the initiated token transfer process (POST)."
+ description: |
+ **Note that this is an integratielaag endpoint, not a Service Engine endpoint!** Get the status of the
+ asynchronous token transfer processing.
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ New token as a result of a successful transfer:
+ description: |
+ The transfer of the token was processed successfully. The response body shows the details of the new
+ token to which the data was transferred.
+ value:
+ {
+ "customerProfileId": 1,
+ "ovPayTokenId": 2,
+ "xTat": "e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "alias": "MyToken",
+ "tokenStatus": { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2028-02-01",
+ "replacedByTokenId": null,
+ "autoReloadRegistration":
+ {
+ "autoReloadAmount": 500,
+ "retailerReferenceId": "abc",
+ "arrit": "425f7fc2-1103-4822-9c79-7c4aaa2fb6aa",
+ "autoReloadRegistrationStatus": "ACTIVE",
+ "autoReloadRegistrationStartDateTime": "2024-06-02T15:03:46Z",
+ },
+ "ePurse":
+ {
+ "e-PurseBalance":
+ { "currency": "EUR", "amount": 350 },
+ "status": "ACTIVE",
+ "originDate": "2019-07-16T11:00:00+02:00",
+ },
+ "personalAccountData":
+ {
+ "name":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 0,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "birthdate":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 0,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ "photo":
+ {
+ "inaccuracyFlag": false,
+ "inaccuracyFlagReason": null,
+ "inaccuracyFlagSetCounter": 0,
+ "isValidated": false,
+ "changeCounter": 0,
+ "maxUpdatesVerificationCount": 0,
+ "lastChangeDate": "2024-08-24T14:15:22Z",
+ },
+ },
+ "gboAgeProfile":
+ {
+ "gboAgeProfileId": 1,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11
+ },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovpaytokenId=1",
+ "method": "GET",
+ },
+ "partial_edit":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "PATCH",
+ },
+ "delete_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1",
+ "method": "DELETE",
+ },
+ "get_productinstances":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances",
+ "method": "GET",
+ },
+ "get_trips":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips",
+ "method": "GET",
+ },
+ "update_personal-data":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/personal-data/e7fa3392-646b-40e2-95a6-c417dc0b0969",
+ "method": "PATCH",
+ },
+ "compare_token":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/compare",
+ "method": "POST",
+ },
+ },
+ }
+ Token transfer in progress:
+ description: |
+ The transfer of the token is still in progress. The response body shows the details of the
+ processing status.
+ value:
+ {
+ "properties":
+ {
+ "waitEndTime": "2025-06-04T09:29:21.9641991Z",
+ "startTime": "2025-06-04T09:29:21.9641991Z",
+ "status": "Running",
+ "correlation":
+ {
+ "clientTrackingId": "08584525775244808022011782750CU00",
+ },
+ "workflow":
+ {
+ "id": "/workflows/9cd96b77c0b94b31832778569f8ef2f9/versions/08584532480062676349",
+ "name": "08584532480062676349",
+ "type": "workflows/versions",
+ },
+ "trigger":
+ {
+ "name": "token_transfer",
+ "inputsLink":
+ {
+ "uri": "https://htm-abt-logicapp-acc.azurewebsites.net:443/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/9cd96b77c0b94b31832778569f8ef2f9/runs/08584525775235278538475939776CU00/contents/TriggerInputs?api-version=2022-05-01&code=C6PDQGl3MGwt8KyA9BjWDdQbzBwm-01gEmZaTp-hPJ5UAzFuPU-thg%3d%3d&se=2025-06-04T13%3A00%3A00.0000000Z&sp=%2Fruns%2F08584525775235278538475939776CU00%2Fcontents%2FTriggerInputs%2Fread&sv=1.0&sig=6Uxs33K7cQ7jONWzhv9XFPzx4RRHZ6smzfM6wNPk5Mc",
+ "contentSize": 298,
+ },
+ "outputsLink":
+ {
+ "uri": "https://htm-abt-logicapp-acc.azurewebsites.net:443/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/9cd96b77c0b94b31832778569f8ef2f9/runs/08584525775235278538475939776CU00/contents/TriggerOutputs?api-version=2022-05-01&code=C6PDQGl3MGwt8KyA9BjWDdQbzBwm-01gEmZaTp-hPJ5UAzFuPU-thg%3d%3d&se=2025-06-04T13%3A00%3A00.0000000Z&sp=%2Fruns%2F08584525775235278538475939776CU00%2Fcontents%2FTriggerOutputs%2Fread&sv=1.0&sig=vJ6pmCsmz2aP7f73MVOmCTes3YvC1e2w0ZLqdypLXrM",
+ "contentSize": 6110,
+ },
+ "startTime": "2025-06-04T09:29:21.9497457Z",
+ "endTime": "2025-06-04T09:29:21.9497457Z",
+ "originHistoryName": "08584525775235278538475939776CU00",
+ "correlation":
+ {
+ "clientTrackingId": "08584525775244808022011782750CU00",
+ },
+ "status": "Succeeded",
+ },
+ "outputs": {},
+ "response":
+ {
+ "startTime": "2025-06-04T09:29:21.9642901Z",
+ "correlation": {},
+ "status": "Waiting",
+ },
+ },
+ "id": "/workflows/9cd96b77c0b94b31832778569f8ef2f9/runs/08584525775235278538475939776CU00",
+ "name": "08584525775235278538475939776CU00",
+ "type": "workflows/runs",
+ }
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Old token not found in profile:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notfound",
+ "title": "The item you requested was not found.",
+ "detail": "The old token was not found in the customer profile.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "The old token was not found in the customer profile.",
+ "pointer": "#/0/ovPayTokenId",
+ "ovPayTokenId": 1,
+ },
+ ],
+ }
+ New token not found in profile:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notfound",
+ "title": "The item you requested was not found.",
+ "detail": "The new token was not found in the customer profile.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "The new token was not found in the customer profile.",
+ "pointer": "#/0/ovPayTokenId",
+ "ovPayTokenId": 2,
+ },
+ ],
+ }
+ XTAT for new token not found in GBO:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notfound",
+ "title": "The item you requested was not found.",
+ "detail": "The new token was not found in GBO:.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "XTAT for the new token was not found in GBO.",
+ "pointer": "#/0/xTat",
+ "xTat": "e35977b2-52bb-48ef-aca8-297b2c1d5058",
+ },
+ ],
+ }
+ "405":
+ description: Not allowed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Old token is wrong token type:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notallowed",
+ "title": "The transfer you requested was not allowed.",
+ "detail": "The old token has wrong token type.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "The old token has token type OV-pas physical.",
+ "pointer": "#/0/ovPayToken/tokenTypeId",
+ "tokenTypeId": 2,
+ },
+ ],
+ }
+ Old token has wrong token status:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notallowed",
+ "title": "The transfer you requested was not allowed.",
+ "detail": "The old token has wrong token status.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "The old token has token status replaced.",
+ "pointer": "#/0/ovPayToken/tokenStatusId",
+ "tokenStatusId": 4,
+ },
+ ],
+ }
+ New token is expired:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notallowed",
+ "title": "The transfer you requested was not allowed.",
+ "detail": "The new token is expired.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "The new token is expired.",
+ "pointer": "#/0/ovPayToken/expirationDate",
+ "expirationDate": "2022-01-01",
+ },
+ ],
+ }
+ One or more GBO product instances not transferable:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notallowed",
+ "title": "The transfer you requested was not allowed.",
+ "detail": "One or more GBO product instances are not transferable.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "One or more GBO product instances are not transferable",
+ "pointer": "#/0/ovPayToken/packageTemplateId",
+ "packageTemplateId": "33613",
+ },
+ ],
+ }
+ One or more PAD attributes marked:
+ value:
+ {
+ "type": "https://htm.nl/api/v1/probs/notallowed",
+ "title": "The transfer you requested was not allowed.",
+ "detail": "One or more PAD attributes are not transferable.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "PAD attribute birthdate is marked on the old token",
+ "pointer": "#/0/ovPayToken/padAttributes/birthdate",
+ },
+ ],
+ }
+ /customers/devices:
+ post:
+ summary: Add a new device to a customer profile.
+ description: Add a new device to a customer profile.
+ tags:
+ - Devices
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Add a new device:
+ value:
+ {
+ "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f",
+ "alias": "My iPhone 13",
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ New device added to customer profile:
+ value:
+ {
+ "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366",
+ "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f",
+ "alias": "My iPhone 13",
+ }
+ /customers/devices/{deviceId}:
+ parameters:
+ - name: deviceId
+ in: path
+ required: true
+ style: simple
+ description: Id of the device to be deleted.
+ schema:
+ type: string
+ format: uuid
+ example: 0f0981bf-6d60-4b06-bc55-de1ba325f366
+ patch:
+ summary: Update alias of a device in a customer profile.
+ description: Update alias of a device in a customer profile.
+ tags:
+ - Devices
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Update alias of a device:
+ value:
+ {
+ "alias": "My old iPhone 13",
+ }
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Device alias updated in customer profile:
+ value:
+ {
+ "deviceId": "0f0981bf-6d60-4b06-bc55-de1ba325f366",
+ "externalDeviceId": "dee7d80e-9288-4508-a3ed-c067e619179f",
+ "alias": "My old iPhone 13",
+ }
+ delete:
+ summary: Delete a device from a customer profile.
+ description: Delete a device from a customer profile.
+ tags:
+ - Devices
+ responses:
+ "200":
+ description: OK
+components:
+ schemas:
+ unavailable:
+ type: object
+ CompareRequest:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ example: 1
+ description: When new token is already present in customer profile
+ xBOT:
+ type: string
+ format: uuid
+ example: "91641b54-056c-49ea-b598-ccde81d6c45a"
+ xTAT:
+ type: string
+ format: uuid
+ example: "4c2d60e2-cd03-4c80-ae70-573a301f0bff"
+ serviceReferenceId:
+ type: string
+ example: "NLOV1234567ABCDEFG"
+ description: When provided, amount is also required
+ amount:
+ type: integer
+ example: 100
+ description: When provided, serviceReferenceId is also required
+ ovpasNumber:
+ type: string
+ example: "OV34567"
+ description: When provided, verificationCode is also required
+ verificationCode:
+ type: string
+ example: "1234"
+ description: When provided, ovpasNumber is also required
+ TransferRequest:
+ type: object
+ required:
+ - oldOvPayToken
+ - newOvPayToken
+ properties:
+ oldOvPayToken:
+ type: object
+ properties:
+ padOtp:
+ type: string
+ pattern: ^[0-9]{6}$
+ example: "023456"
+ newOvPayToken:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ example: 1
+ description: When new token is already present in customer profile
+ xBOT:
+ type: string
+ format: uuid
+ example: "91641b54-056c-49ea-b598-ccde81d6c45a"
+ xTAT:
+ type: string
+ format: uuid
+ example: "4c2d60e2-cd03-4c80-ae70-573a301f0bff"
+ serviceReferenceId:
+ type: string
+ example: "NLOV1234567ABCDEFG"
+ description: When provided, amount is also required
+ amount:
+ type: integer
+ example: 100
+ description: When provided, serviceReferenceId is also required
+ padOtp:
+ type: string
+ pattern: ^[0-9]{6}$
+ example: "123456"
+ description: Can be xTAT-based OTP (for existing PAD), or email-based OTP (for new PAD). In the latter case, padEmailAddress should be the same address as used for the OTP!
+ padEmailAddress:
+ type: string
+ format: email
+ example: 8Z9dG@example.com
+ alias:
+ type: string
+ example: MyNewToken
+ CustomersResponseList:
+ type: object
+ properties:
+ customers:
+ type: array
+ items:
+ $ref: "#/components/schemas/CustomersResponse"
+ CustomersResponse:
+ type: object
+ properties:
+ customerProfileId:
+ type: integer
+ example: 1
+ customerNumber:
+ type: integer
+ example: 1000001
+ customerStatus:
+ type: object
+ properties:
+ customerStatusId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Active
+ debtorNumber:
+ type: string
+ example: DB100001
+ debtorStatus:
+ type: object
+ properties:
+ debtorStatusId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Active
+ person:
+ type: object
+ properties:
+ prefix:
+ type: string
+ example: Mr
+ birthname:
+ type: string
+ example: John
+ surname:
+ type: string
+ example: Doe
+ suffix:
+ type: string
+ example: Jr.
+ dateOfBirth:
+ type: string
+ format: date
+ example: "2023-02-01"
+ emailAddress:
+ type: string
+ format: email
+ example: 4j2dD@example.com
+ addresses:
+ type: array
+ items:
+ type: object
+ properties:
+ addressId:
+ type: integer
+ example: 1
+ addressType:
+ type: object
+ properties:
+ addressTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Shipping
+ street:
+ type: string
+ example: Appelstraat
+ houseNumber:
+ type: integer
+ example: 1
+ houseNumberSuffix:
+ type: string
+ example: BS
+ postalCode:
+ type: string
+ example: 1234AB
+ city:
+ type: string
+ example: Den Haag
+ country:
+ type: string
+ example: NL
+ phones:
+ type: array
+ items:
+ type: object
+ properties:
+ phoneId:
+ type: integer
+ example: 1
+ isPreferred:
+ type: boolean
+ example: true
+ phoneType:
+ type: object
+ properties:
+ phoneTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Home
+ number:
+ type: string
+ example: "0123456789"
+ countryCode:
+ type: string
+ example: "0031"
+ devices:
+ type: array
+ items:
+ type: object
+ properties:
+ deviceId:
+ type: string
+ format: uuid
+ example: 1
+ externalDeviceId:
+ type: string
+ format: uuid
+ example: dee7d80e-9288-4508-a3ed-c067e619179f
+ alias:
+ type: string
+ example: My iPhone 13
+ _links:
+ type: object
+ properties:
+ add_device:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices
+ method:
+ type: string
+ example: POST
+ edit_device:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices/1
+ method:
+ type: string
+ example: PATCH
+ delete_device:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/devices/1
+ method:
+ type: string
+ example: DELETE
+ _links:
+ type: object
+ properties:
+ self:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers
+ method:
+ type: string
+ example: GET
+ partial_edit:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers
+ method:
+ type: string
+ example: PATCH
+ get_tokens:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens
+ method:
+ type: string
+ example: GET
+ create_token:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens
+ method:
+ type: string
+ example: POST
+ OvPayTokensResponse:
+ type: object
+ required:
+ - ovPayTokens
+ properties:
+ ovPayTokens:
+ type: array
+ items:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ example: 1
+ tokenType:
+ type: object
+ properties:
+ tokenTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: EMV
+ alias:
+ type: string
+ example: MyToken
+ tokenStatus:
+ type: object
+ properties:
+ tokenStatusId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Active
+ expirationDate:
+ type: string
+ format: date
+ example: "2023-02-01"
+ replacedByTokenId:
+ type: integer
+ example: 1
+ _links:
+ type: object
+ properties:
+ self:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1
+ method:
+ type: string
+ example: GET
+ partial_edit:
+ type: object
+ description: External touchpoints are only allowed to change alias - SMP can also change tokenStatus
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1
+ method:
+ type: string
+ example: PATCH
+ replace_token:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/replace
+ method:
+ type: string
+ example: POST
+ delete_token:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1
+ method:
+ type: string
+ example: DELETE
+ get_productinstances:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances
+ method:
+ type: string
+ example: GET
+ get_trips:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/trips
+ method:
+ type: string
+ example: GET
+ OvPayTokenProductInstancesResponse:
+ type: object
+ properties:
+ productInstances:
+ type: array
+ items:
+ type: object
+ properties:
+ productId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: HTM 90% Korting
+ status:
+ type: string
+ enum: ["Active", "Ended", "Refunded"]
+ example: Active
+ isRenewable:
+ type: boolean
+ example: true
+ productCategory:
+ type: object
+ description: The category of the originating HTM product definition
+ properties:
+ productCategoryId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kortingsabonnement
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2024-11-25T13:25:00+01:00"
+ untilInclusive:
+ type: string
+ format: date-time-offset
+ description: >-
+ If not present, this product-instance represents a subscription/contract without a real end date. If present, it can be either the natural end date or the refund timestamp.
+ example: "2024-12-25T03:59:59+01:00"
+ orderId:
+ type: string
+ format: uuid
+ example: 501B17EF-36C4-4039-B92C-6517969B464E
+ orderLineId:
+ type: string
+ format: uuid
+ example: 38B17EF-36C4-4039-B92C-4817969B464E
+ contractId:
+ type: string
+ format: uuid
+ example: 56B17EF-C436-9043-B76C-481797WEB464F
+ description: Only present for subscriptions/contracts
+ _links:
+ type: object
+ properties:
+ self:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1/productinstances
+ method:
+ type: string
+ example: GET
+ get_order:
+ type: object
+ properties:
+ href:
+ type: string
+ description: Always present for any HTM product-instance
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/orders/501B17EF-36C4-4039-B92C-6517969B464E
+ method:
+ type: string
+ example: GET
+ get_contract:
+ type: object
+ properties:
+ href:
+ type: string
+ description: Only present for subscriptions/contracts
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F
+ method:
+ type: string
+ example: GET
diff --git a/src/openapi/customers/SE-notifications.yaml b/src/openapi/customers/SE-notifications.yaml
new file mode 100644
index 0000000..1358b4b
--- /dev/null
+++ b/src/openapi/customers/SE-notifications.yaml
@@ -0,0 +1,684 @@
+openapi: 3.0.1
+info:
+ title: Service Engine APIs for Notifications
+ description: >-
+ Service Engine APIs for all HTM Notifications. These are NOT the CRUD APIs to access raw data in the database.
+ version: "1.0"
+servers:
+ - url: https://services.acc.api.htm.nl/abt/touchpoint/2.0
+tags:
+ - name: Notification categories
+ description: >-
+ Service Engine APIs for all HTM Notifications metadata. To build content only.
+ - name: Notification subscriptions
+ description: >-
+ Service Engine APIs for the HTM Notification subscriptions for a user. Contains the subscriptions on category level
+ - name: Notification preferences
+ description: >-
+ //future Service Engine APIs for the HTM Notification preferences for a category for a user. Contains the discrepancies from the default. or
+paths:
+ /notificationcategories:
+ get:
+ tags:
+ - Notification categories
+ summary: Get notification categories and optins references for that category that a touchpoint can show.
+ description: |
+ Get notification categories that a touchpoint can show and optins ( eventTypes) and channels (eventType_channels) for the optin for that category
+ parameters:
+ - name: expand
+ in: query
+ schema:
+ type: string
+ enum: [none, eventType, eventTypeChannel]
+ default: none
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ examples:
+ getNotifactionCategories?expand=eventTypeChannel:
+ summary: Return all the notification categories with their nested attributes
+ value:
+ {
+ "notificationCategories":[
+ {
+ "notificationCategoryId": 1,
+ "name": "Nieuwsbrief",
+ "eventTypes": [
+ {
+ "eventTypeId": 1,
+ "eventOrigin": {
+ "eventOriginId": 6,
+ "name": "Maileon"
+ },
+ "name": "HTM nieuwsbrief",
+ "subName": "",
+ "prettyName": "HTM nieuwsbrief",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "447a1116-6cd7-4645-8c3d-43237b6186cd",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "notificationCategoryId": 2,
+ "name": "Mijn Reizen",
+ "eventTypes": [
+ {
+ "eventTypeId": 2,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, TRAVEL_SCHEME",
+ "subName": "CI",
+ "prettyName": "Check In",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "ccc8c025-06b5-4928-a632-23e1c55cd173",
+ "channel":{
+ "channelId": 1,
+ "name": "push"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ },
+ {
+ "eventTypeChannelId": "da2deb4c-ce77-4b5f-aecc-ddebfd14349d",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": False,
+ "isMandatory": False
+ }
+ ]
+ },
+ {
+ "eventTypeId": 3,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, PAD",
+ "subName": null,
+ "prettyName": "Profielgegevens op de pas",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "8e7df8f1-7e50-482f-8301-d399e75fd432",
+ "channel":{
+ "channelId": 1,
+ "name": "push"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ },
+ {
+ "eventTypeChannelId": "72960a92-1855-469f-9cfd-5d72f57106f2",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": False,
+ "isMandatory": False
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "notificationCategoryId": 3,
+ "name": "Mijn Passen",
+ "eventTypes": [
+ {
+ "eventTypeId": 4,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, CARD",
+ "subName": null,
+ "prettyName": "Mijn passen",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "be07c7bb-714b-4637-acf5-a67025ad8e60",
+ "channel":{
+ "channelId": 1,
+ "name": "push"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ },
+ {
+ "eventTypeChannelId": "0c797b5a-ed34-494b-8c64-0a832830d392",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": False,
+ "isMandatory": False
+ }
+ ]
+ },
+ {
+ "eventTypeId": 5,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, PAD",
+ "subName": null,
+ "prettyName": "Profielgegevens op de pas",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "b910368f-c045-4e8e-b01d-bcbc78708bac",
+ "channel":{
+ "channelId": 1,
+ "name": "push"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ },
+ {
+ "eventTypeChannelId": "93e773da-ba3b-48da-9a0e-ee478eaa752f",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": False,
+ "isMandatory": False
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ getNotifactionCategories?expand=eventType:
+ summary: Return all the notification categories with nested eventTypes
+ value:
+ {
+ "notificationCategories":[
+ {
+ "notificationCategoryId": 1,
+ "name": "Nieuwsbrief",
+ "eventTypes": [
+ {
+ "eventTypeId": 1,
+ "eventOrigin": {
+ "eventOriginId": 6,
+ "name": "Maileon"
+ },
+ "name": "HTM nieuwsbrief",
+ "subName": "",
+ "prettyName": "HTM nieuwsbrief",
+ "optinRequired": False
+ }
+ ]
+ },
+ {
+ "notificationCategoryId": 2,
+ "name": "Mijn Reizen",
+ "eventTypes": [
+ {
+ "eventTypeId": 2,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, TRAVEL_SCHEME",
+ "subName": "CI",
+ "prettyName": "Check In",
+ "optinRequired": False
+ },
+ {
+ "eventTypeId": 3,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, PAD",
+ "subName": null,
+ "prettyName": "Profielgegevens op de pas",
+ "optinRequired": False
+ }
+ ]
+ },
+ {
+ "notificationCategoryId": 3,
+ "name": "Mijn Passen",
+ "eventTypes": [
+ {
+ "eventTypeId": 4,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, CARD",
+ "subName": null,
+ "prettyName": "Mijn passen",
+ "optinRequired": False
+ },
+ {
+ "eventTypeId": 5,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, PAD",
+ "subName": null,
+ "prettyName": "Profielgegevens op de pas",
+ "optinRequired": False
+ }
+ ]
+ }
+ ]
+ }
+ getNotifactionCategories?expand=none:
+ summary: Return all the notification categories
+ value:
+ {
+ "notificationCategories":[
+ {
+ "notificationCategoryId": 1,
+ "name": "Nieuwsbrief"
+ },
+ {
+ "notificationCategoryId": 2,
+ "name": "Mijn Reizen"
+ },
+ {
+ "notificationCategoryId": 3,
+ "name": "Mijn Passen"
+ }
+ ]
+ }
+ "404":
+ description: No notification category found
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/2.0/notifications",
+ "title": "Niet gevonden",
+ "detail": "Notificatiecategorie niet gevonden",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ "errors": [
+ {
+ "code": "404",
+ "detail": null,
+ "path": null,
+ "parameter": null
+ }
+ ],
+ }
+ /notificationsubscriptions:
+ get:
+ tags:
+ - Notification subscriptions
+ summary: Get all possible notificationSubscriptions for a customer (account or private).
+ description: |
+ Get all possible notificationSubscriptions for a customer (account or private), including if they have opted-in for it.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ description: The role of the HTM employee in the case of the SMP
+ - name: emailAddress
+ in: query
+ schema:
+ type: integer
+ example: john.doe@mymailprovider.com
+ required: false
+ description: The emailadress of the customer in the case of anonymous opt-ins
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ examples:
+ getNotifactionSubscriptionsAll:
+ summary: Return all the notification subscriptions where for each category the client has actively opted in or out - All
+ value:
+ {
+ "notificationSubscriptions":[
+ {
+ "notificationSubscriptionId": "64047471-e0c3-4abc-b4eb-83a12a6de903",
+ "notificationCategory": {
+ "notificationCategoryId": 1,
+ "name": "HTM nieuwbrief"
+ },
+ "isActive": true
+ },
+ {
+ "notificationSubscriptionId": "571388cd-8903-40d5-89e6-9191cb8d656e",
+ "notificationCategory": {
+ "notificationCategoryId": 2,
+ "name": "Mijn reizen"
+ },
+ "isActive": true
+ },
+ {
+ "notificationSubscriptionId": "cf736ff2-2f8f-434e-a3c7-a14064b73c9b",
+ "notificationCategory": {
+ "notificationCategoryId": 3,
+ "name": "Mijn contracten"
+ },
+ "isActive": false
+ }
+ ]
+ }
+ getNotifactionSubscriptionsSome:
+ summary: Return all the notification subscriptions where for each category the client has actively opted in or out - Some
+ value:
+ {
+ "notificationSubscriptions": [
+ {
+ "notificationSubscriptionId": "64047471-e0c3-4abc-b4eb-83a12a6de903",
+ "notificationCategory": {
+ "notificationCategoryId": 1,
+ "name": "HTM nieuwbrief"
+ },
+ "isActive": true
+ },
+ {
+ "notificationSubscriptionId": "cf736ff2-2f8f-434e-a3c7-a14064b73c9b",
+ "notificationCategory": {
+ "notificationCategoryId": 3,
+ "name": "Mijn contracten"
+ },
+ "isActive": false
+ }
+ ]
+ }
+ "403":
+ description: Forbidden // Als geverifieerd profiel gevonden wordt, maar niet op een geverifieerde manier benaderd wordt
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/2.0/notifications",
+ "title": "Verboden",
+ "detail": "Niet toegestaan",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ "errors": [
+ {
+ "code": "403",
+ "detail": null,
+ "path": null,
+ "parameter": null
+ }
+ ],
+ }
+ "404":
+ description: No notification subscriptions found
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/2.0/notifications",
+ "title": "Niet gevonden",
+ "detail": "Notificatie niet gevonden",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ "errors": [
+ {
+ "code": "404",
+ "detail": null,
+ "path": null,
+ "parameter": null
+ }
+ ],
+ }
+ post:
+ tags:
+ - Notification subscriptions
+ summary: Create a new notificationSubscription for a customer (account or private).
+ description: |
+ Create a notificationSubscriptions for a customer (account or private), including if they have opted-in for it.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ description: The role of the HTM employee in the case of the SMP
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Create notificationSubscription anonymous active:
+ value:
+ {
+ "emailAddress": "anonymous@mymailprovider.com",
+ "notificationCategoryId": 1,
+ "isActive": True
+ }
+ Create notificationSubscription anonymous inactive:
+ value:
+ {
+ "emailAddress": "anonymous@mymailprovider.com",
+ "notificationCategoryId": 1,
+ "isActive": False
+ }
+ Create notificationSubscription account active:
+ value:
+ {
+ "notificationCategoryId": 2,
+ "isActive": True
+ }
+ Create notificationSubscription account inactive:
+ value:
+ {
+ "notificationCategoryId": 2,
+ "isActive": False
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ examples:
+ Create notificationSubscription anonymous active:
+ summary: Return the created notification for an anonymous user active
+ value:
+ {
+ "notificationSubscriptionId": "e112f26e-37fa-4bde-8def-9977cd1d50ae",
+ "notificationCategory": {
+ "notificationCategoryId": 1,
+ "name": "HTM nieuwbrief"
+ },
+ "isActive": True
+ }
+ Create notificationSubscription anonymous inactive:
+ summary: Return the created notification for an anonymous user inactive
+ value:
+ {
+ "notificationSubscriptionId": "d51081fd-c48d-4111-8de4-ac5db7d47ecb",
+ "notificationCategory": {
+ "notificationCategoryId": 1,
+ "name": "HTM nieuwbrief"
+ },
+ "isActive": False
+ }
+ Create notificationSubscription account active:
+ summary: Return the created notification for an anonymous user active
+ value:
+ {
+ "notificationSubscriptionId": "6b88eba1-af1f-42fc-82d3-d7202d5f1afe",
+ "notificationCategory": {
+ "notificationCategoryId": 2,
+ "name": "Mijn reizen"
+ },
+ "isActive": True
+ }
+ Create notificationSubscription account inactive:
+ summary: Return the created notification for an anonymous user inactive
+ value:
+ {
+ "notificationSubscriptionId": "0dfc0ac9-c221-4493-8828-9dfa79ad9061",
+ "notificationCategory": {
+ "notificationCategoryId": 2,
+ "name": "Mijn reizen"
+ },
+ "isActive": False
+ }
+ "405":
+ description: Method not allowed, ook als een notificatie aangemaakt wordt voor een account maar op een anonieme manier benadert wordt.
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/2.0/notifications",
+ "title": "Methode niet toegestaan",
+ "detail": "",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ "errors": [
+ {
+ "code": "405",
+ "detail": null,
+ "path": null,
+ "parameter": null
+ }
+ ],
+ }
+ /notificationsubscriptions/{notificationSubscriptionId}:
+ patch:
+ tags:
+ - Notification subscriptions
+ summary: Update a notificationSubscription for a customer (account or private).
+ description: |
+ Update a notificationSubscription for a customer (account or private).
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ required: false
+ description: The JWT of a customer in case of touchpoint were customer logs in themselves
+ - name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
+ in: header
+ schema:
+ type: string
+ example: feaaef83-a551-4283-8419-340b1ada3b55
+ required: false
+ description: The customerProfileId of a customer in the case of the SMP
+ - name: X-HTM-ROLE-HEADER
+ in: header
+ schema:
+ type: string
+ example: Customer
+ required: false
+ description: The role of the HTM employee in the case of the SMP
+ - name: notificationSubscriptionId
+ in: path
+ schema:
+ type: string
+ format: uuid
+ example: e112f26e-37fa-4bde-8def-9977cd1d50ae
+ required: true
+ description: The id of the notificationSubscription you want to update
+ - name: emailAddress
+ in: query
+ schema:
+ type: string
+ format: email
+ example: john.doe@mymailprovider.com
+ required: false
+ description: The emailadress of the customer in the case of anonymous opt-ins
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ Update a notificationSubscription to inactive:
+ value:
+ {
+ "isActive": False
+ }
+ Update a notificationSubscription to active:
+ value:
+ {
+ "isActive": True
+ }
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ examples:
+ Update a notificationSubscription to inactive:
+ summary: Return the updated inactive notification
+ value:
+ {
+ "notificationSubscriptionId": "e112f26e-37fa-4bde-8def-9977cd1d50ae",
+ "notificationCategory": {
+ "notificationCategoryId": 1,
+ "name": "HTM nieuwbrief"
+ },
+ "isActive": False
+ }
+ Update a notificationSubscription to active:
+ summary: Return the updated active notification
+ value:
+ {
+ "notificationSubscriptionId": "e112f26e-37fa-4bde-8def-9977cd1d50ae",
+ "notificationCategory": {
+ "notificationCategoryId": 1,
+ "name": "HTM nieuwbrief"
+ },
+ "isActive": True
+ }
+components:
+ schemas:
+ unavailable:
+ type: object
diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml
new file mode 100644
index 0000000..fd27b1a
--- /dev/null
+++ b/src/openapi/customers/customers-crud-v2.yaml
@@ -0,0 +1,2898 @@
+openapi: "3.0.3"
+info:
+ title: ABT Customers CRUD APIs v2
+ version: "2.0"
+ description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine.
+servers:
+ - url: https://services.acc.api.htm.nl/abt/abtcustomers/2.0
+paths:
+ /customers:
+ get:
+ tags:
+ - Customer
+ summary: Search customer profiles
+ description: >-
+ Search for all customer profile list in the ABT database matching given query parameters
+ parameters:
+ - name: customerProfileId
+ in: query
+ schema:
+ type: integer
+ example: 1
+ - name: customerNumber
+ in: query
+ schema:
+ type: integer
+ example: 1000001
+ - name: customerStatusId
+ in: query
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ description: Filter on possible customer statuses. 1 = Inactive, 2 = Active, 3 = Blocked, 4 = Frozen, 5 = Cleaned
+ - name: debtorNumber
+ in: query
+ schema:
+ type: string
+ example: DB100001
+ - name: debtorStatusId
+ in: query
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ description: Filter on possible debtor statuses. 1 = Active, 2 = Inactive
+ - name: vasCustomerNumber
+ in: query
+ schema:
+ type: string
+ example: VAS100001
+ - name: lastLoginBefore
+ in: query
+ schema:
+ type: string
+ format: date-time
+ example: "2022-08-04 15:01:00.000"
+ - name: lastLoginAfter
+ in: query
+ schema:
+ type: string
+ format: date-time
+ example: "2022-08-04 15:01:00.000"
+ - name: birthname
+ in: query
+ schema:
+ type: string
+ example: John
+ - name: surname
+ in: query
+ schema:
+ type: string
+ example: Doe
+ - name: prefix
+ in: query
+ schema:
+ type: string
+ example: de
+ - name: suffix
+ in: query
+ schema:
+ type: string
+ example: PhD
+ - name: emailAddress
+ in: query
+ schema:
+ type: string
+ format: email
+ example: john.doe@mymailprovider.com
+ - name: dateOfBirth
+ in: query
+ schema:
+ type: string
+ format: date
+ example: "2000-01-01"
+ - name: addressStreet
+ in: query
+ schema:
+ type: string
+ example: Sesamestreet
+ - name: addressHouseNumber
+ in: query
+ schema:
+ type: integer
+ example: 1
+ - name: addressHouseNumberSuffix
+ in: query
+ schema:
+ type: string
+ example: A
+ - name: addressPostalCode
+ in: query
+ schema:
+ type: string
+ example: 1234AB
+ - name: addressCity
+ in: query
+ schema:
+ type: string
+ example: The Hague
+ - name: addressCountry
+ in: query
+ schema:
+ type: string
+ example: NL
+ - name: phoneNumber
+ in: query
+ schema:
+ type: string
+ example: "0123456789"
+ - name: phoneCountryCode
+ in: query
+ schema:
+ type: string
+ example: "+31"
+ - name: chipcardNumber
+ in: query
+ schema:
+ type: string
+ example: "0123456789"
+ - name: ovChipCardAlias
+ in: query
+ schema:
+ type: string
+ example: My ovchipcard
+ - name: ovPasNumber
+ in: query
+ schema:
+ type: string
+ example: 0123456789
+ - name: ovPayTokenAlias
+ in: query
+ schema:
+ type: string
+ example: My Ov Pay Token
+ - name: ovPayTokenXTat
+ in: query
+ schema:
+ type: string
+ example: 180d04e0-a721-447e-a1d9-b416937b43bc
+ - name: ovPayTokenXBot
+ in: query
+ schema:
+ type: string
+ example: e1307c73-676a-4d07-967b-6141276f7c7c
+ - name: mandateReference
+ in: query
+ schema:
+ type: string
+ example: PAYT-1
+ - name: iban
+ in: query
+ schema:
+ type: string
+ example: NL20INGB0001234567
+ - name: bic
+ in: query
+ schema:
+ type: string
+ example: NL20INGB
+ - name: ascription
+ in: query
+ schema:
+ type: string
+ example: j.jansen
+ - name: billingAlias
+ in: query
+ schema:
+ type: string
+ example: Mijn ING bankrekening
+ - name: sort
+ in: query
+ schema:
+ type: string
+ - name: offset
+ in: query
+ schema:
+ type: integer
+ - name: limit
+ in: query
+ schema:
+ type: integer
+ example: 20
+ responses:
+ 200:
+ description: Ok
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/getCustomerProfiles"
+ examples:
+ getCustomersMultiple:
+ summary: getCustomersMultiple
+ description: >-
+ Found multiple customer profiles matching the search parameters, does not return the financial details
+ value:
+ customers:
+ - customerProfileId: 1
+ customerNumber: 1000001
+ debtorNumber: DB100001
+ debtorStatus:
+ debtorStatusId: 1
+ name: Inactive
+ vasCustomerNumber: CST005
+ customerPreference:
+ language:
+ languageId: 1
+ name: Dutch
+ ietfCode: nl-NL
+ iso639Code: nl
+ customerStatusInstances:
+ - customerStatus:
+ name: Active
+ customerStatusId: 2
+ fromInclusive: "2022-08-04 15:01:00.000"
+ toInclusive: "2022-08-05 15:01:00.000"
+ person:
+ birthname: Pieter
+ surname: Valen
+ prefix: de
+ suffix: PhD
+ dateOfBirth: "2002-10-29"
+ emailAddresses: TEST@HTM.NL
+ isEmailVerified: True
+ addresses:
+ - addressId: 1
+ street: mystreet
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 0000AA
+ city: Den Haag
+ country: NL
+ addressType:
+ addressTypeId: 2
+ name: Billing
+ - addressId: 2
+ street: mystreet 33
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 4455CA
+ city: Den BOSCH
+ country: NL
+ addressType:
+ addressTypeId: 1
+ name: Shipping
+ phones:
+ - phoneId: 1
+ number: "3112345678"
+ countryCode: "+31"
+ phoneType:
+ phoneTypeId: 1
+ name: Home
+ isPreferred: true
+ - phoneId: 2
+ number: "333225588"
+ countryCode: "+31"
+ phoneType:
+ phoneTypeId: 2
+ name: Work
+ isPreferred: false
+ devices:
+ - deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377"
+ externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848"
+ alias: "iPhone prive"
+ - deviceId: "d7683e89-b2ad-4e79-85b3-dbb42aad0325"
+ externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976"
+ alias: "iPhone zakelijk"
+ ovChipCards:
+ - ovChipCardId: 1
+ chipCardNumber: "1234123412341234"
+ validUntil: "2023-01-01"
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: "1234123412341235"
+ validUntil: "2025-01-01"
+ alias: alias
+ ovPayTokens:
+ - ovPayTokenId: 126
+ tokenType:
+ tokenTypeId: 1
+ name: EMV
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: alias
+ lastDigits: "5678"
+ ovpasNumber: null
+ tokenStatus:
+ tokenStatusId: 2
+ name: Active
+ expirationDate: "2025-04-20T17:05:52.000+02:00"
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenType:
+ tokenTypeId: 2
+ name: OV-pas physical
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: alias
+ lastDigits: "5674"
+ ovpasNumber: OV34568
+ tokenStatus:
+ tokenStatusId: 2
+ name: Active
+ expirationDate: "2024-04-20T17:05:52.000+02:00"
+ replacedByTokenId: 2
+ auditTrails:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: "2023-10-20T17:05:52.000+02:00"
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=1",
+ "method": "GET",
+ },
+ }
+ - customerProfileId: 12
+ customerNumber: 1000002
+ debtorNumber: DB100121
+ debtorStatus:
+ debtorStatusId: 1
+ name: Inactive
+ vasCustomerNumber: CST005
+ customerPreference:
+ language:
+ languageId: 1
+ name: Dutch
+ ietfCode: nl-NL
+ iso639Code: nl
+ customerStatusInstances:
+ - customerStatus:
+ name: Active
+ customerStatusId: 2
+ fromInclusive: "2022-08-04 15:01:00.000"
+ toInclusive: "2022-08-05 15:01:00.000"
+ - customerStatus:
+ name: Blocked
+ customerStatusId: 3
+ fromInclusive: "2022-08-05 15:01:00.000"
+ toInclusive: "2023-08-05 15:01:00.000"
+ - customerStatus:
+ name: Active
+ customerStatusId: 2
+ fromInclusive: "2023-08-05 15:01:00.000"
+ toInclusive: null
+ person:
+ birthname: Pieter
+ surname: Valen
+ prefix: de
+ suffix: PhD
+ dateOfBirth: "2002-10-29"
+ emailAddresses: TEST@HTM.NL
+ isEmailVerified: False
+ address:
+ - addressId: 1
+ street: mystreet
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 0000AA
+ city: Den Haag
+ country: NL
+ addressType:
+ addressTypeId: 2
+ name: Billing
+ - addressId: 2
+ street: mystreet 33
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 4455CA
+ city: Den BOSCH
+ country: NL
+ isPreferred: true
+ addressType:
+ addressTypeId: 1
+ name: Shipping
+ phones:
+ - phoneId: 1
+ number: "3112345678"
+ countryCode: "+31"
+ phoneType:
+ phoneTypeId: 1
+ name: Home
+ isPreferred: true
+ - phoneId: 2
+ number: "333225588"
+ countryCode: "+31"
+ phoneType:
+ phoneTypeId: 2
+ name: Work
+ isPreferred: false
+ devices:
+ - deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377"
+ externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848"
+ alias: "iPhone prive"
+ - deviceId: "d7683e89-b2ad-4e79-85b3-dbb42aad0325"
+ externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976"
+ alias: "iPhone zakelijk"
+ ovChipCards:
+ - ovChipCardId: 1
+ chipCardNumber: "1234123412341234"
+ validUntil: "2023-01-01"
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: "1234123412341235"
+ validUntil: "2025-01-01"
+ alias: alias
+ ovPayTokens:
+ - ovPayTokenId: 126
+ tokenType:
+ tokenTypeId: 2
+ name: OV-pas physical
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: alias
+ lastDigits: "5678"
+ ovpasNumber: OV34567
+ tokenStatus:
+ tokenStatusId: 2
+ name: active
+ expirationDate: "2025-04-20T17:05:52.000+02:00"
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenType:
+ tokenTypeId: 2
+ name: OV-pas physical
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: alias
+ lastDigits: "5674"
+ ovpasNumber: OV34568
+ tokenStatus:
+ tokenStatusId: 2
+ name: active
+ expirationDate: "2024-04-20T17:05:52.000+02:00"
+ replacedByTokenId: 2
+ auditTrails:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: "2023-10-20T17:05:52.000+02:00"
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=12",
+ "method": "GET",
+ },
+ }
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?offset=20",
+ "method": "GET",
+ },
+ "prev":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers",
+ "method": "GET",
+ },
+ "next":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?offset=40",
+ "method": "GET",
+ },
+ }
+ getCustomerActive:
+ summary: getCustomerActive
+ description: >-
+ Found a single customerProfile with an active status
+ value:
+ customers:
+ - customerProfileId: 1
+ customerNumber: 1000001
+ debtorNumber: DB100001
+ debtorStatus:
+ debtorStatusId: 1
+ name: Inactive
+ vasCustomerNumber: CST005
+ customerPreference:
+ language:
+ languageId: 1
+ name: Dutch
+ ietfCode: nl-NL
+ iso639Code: nl
+ customerStatusInstances:
+ - customerStatus:
+ name: Active
+ customerStatusId: 2
+ fromInclusive: "2022-08-04 15:01:00.000"
+ toInclusive: null
+ person:
+ birthname: Pieter
+ surname: Valen
+ prefix: de
+ suffix: PhD
+ dateOfBirth: "2002-10-29"
+ emailAddresses: TEST@HTM.NL
+ isEmailVerified: False
+ addresses:
+ - addressId: 1
+ street: mystreet
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 0000AA
+ city: Den Haag
+ country: NL
+ addressType:
+ addressTypeId: 2
+ name: Billing
+ - addressId: 2
+ street: mystreet 33
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 4455CA
+ city: Den BOSCH
+ country: NL
+ addressType:
+ addressTypeId: 1
+ name: Shipping
+ phones:
+ - phoneId: 1
+ number: "3112345678"
+ countryCode: "+31"
+ phoneType:
+ phoneTypeId: 1
+ name: Home
+ isPreferred: true
+ - phoneId: 2
+ number: "333225588"
+ countryCode: "+31"
+ phoneType:
+ phoneTypeId: 2
+ name: Work
+ isPreferred: false
+ devices:
+ - deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377"
+ externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848"
+ alias: "iPhone prive"
+ - deviceId: "d7683e89-b2ad-4e79-85b3-dbb42aad0325"
+ externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976"
+ alias: "iPhone zakelijk"
+ ovChipCards:
+ - ovChipCardId: 1
+ chipCardNumber: "1234123412341234"
+ validUntil: "2023-01-01"
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: "1234123412341235"
+ validUntil: "2025-01-01"
+ alias: alias
+ ovPayTokens:
+ - ovPayTokenId: 126
+ tokenType:
+ tokenTypeId: 1
+ name: EMV
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: alias
+ lastDigits: "5678"
+ ovpasNumber: null
+ tokenStatus:
+ tokenStatusId: 2
+ name: Active
+ expirationDate: "2025-04-20T17:05:52.000+02:00"
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenType:
+ tokenTypeId: 2
+ name: OV-pas physical
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: alias
+ lastDigits: "5674"
+ ovpasNumber: OV34568
+ tokenStatus:
+ tokenStatusId: 2
+ name: Active
+ expirationDate: "2024-04-20T17:05:52.000+02:00"
+ replacedByTokenId: 2
+ auditTrails:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: "2023-10-20T17:05:52.000+02:00"
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=1",
+ "method": "GET",
+ },
+ }
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers",
+ "method": "GET",
+ },
+ }
+ getCustomerBlocked:
+ summary: getCustomerBlocked
+ description: >-
+ Found a single customerProfile with a blocked status
+ value:
+ customers:
+ - customerProfileId: 1
+ customerNumber: 1000001
+ debtorNumber: DB100001
+ debtorStatus:
+ debtorStatusId: 2
+ name: Active
+ vasCustomerNumber: CST005
+ customerPreference:
+ language:
+ languageId: 1
+ name: Dutch
+ ietfCode: nl-NL
+ iso639Code: nl
+ customerStatusInstances:
+ - customerStatus:
+ name: Active
+ customerStatusId: 2
+ fromInclusive: "2022-08-04 15:01:00.000"
+ toInclusive: "2022-08-05 15:01:00.000"
+ - customerStatus:
+ name: Blocked
+ customerStatusId: 3
+ fromInclusive: "2022-08-05 15:01:00.000"
+ toInclusive: null
+ person:
+ birthname: Pieter
+ surname: Valen
+ prefix: de
+ suffix: PhD
+ dateOfBirth: "2002-10-29"
+ emailAddresses: TEST@HTM.NL
+ isEmailVerified: True
+ addresses:
+ - addressId: 1
+ street: mystreet
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 0000AA
+ city: Den Haag
+ country: NL
+ addressType:
+ addressTypeId: 2
+ name: Billing
+ - addressId: 2
+ street: mystreet 33
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 4455CA
+ city: Den BOSCH
+ country: NL
+ addressType:
+ addressTypeId: 1
+ name: Shipping
+ phones:
+ - phoneId: 1
+ number: "3112345678"
+ countryCode: "+31"
+ phoneType:
+ phoneTypeId: 1
+ name: Home
+ isPreferred: true
+ - phoneId: 2
+ number: "333225588"
+ countryCode: "+31"
+ phoneType:
+ phoneTypeId: 2
+ name: Work
+ isPreferred: false
+ devices:
+ - deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377"
+ externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848"
+ alias: "iPhone prive"
+ - deviceId: "d7683e89-b2ad-4e79-85b3-dbb42aad0325"
+ externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976"
+ alias: "iPhone zakelijk"
+ ovChipCards:
+ - ovChipCardId: 1
+ chipCardNumber: "1234123412341234"
+ validUntil: "2023-01-01"
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: "1234123412341235"
+ validUntil: "2025-01-01"
+ alias: alias
+ ovPayTokens:
+ - ovPayTokenId: 126
+ tokenType:
+ tokenTypeId: 1
+ name: EMV
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: alias
+ lastDigits: "5678"
+ ovpasNumber: null
+ tokenStatus:
+ tokenStatusId: 2
+ name: Active
+ expirationDate: "2025-04-20T17:05:52.000+02:00"
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenType:
+ tokenTypeId: 2
+ name: OV-pas physical
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: alias
+ lastDigits: "5674"
+ ovpasNumber: OV34568
+ tokenStatus:
+ tokenStatusId: 2
+ name: Active
+ expirationDate: "2024-04-20T17:05:52.000+02:00"
+ replacedByTokenId: 2
+ auditTrails:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: "2023-10-20T17:05:52.000+02:00"
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=1",
+ "method": "GET",
+ },
+ }
+ _links:
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers",
+ "method": "GET",
+ },
+ }
+ 400:
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ErrorResponse"
+ examples:
+ invalidDataTypeError:
+ summary: invalidDataTypeError
+ description: >-
+ The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
+ value:
+ type: https://htm.nl/api/v1/probs/bad-request
+ title: Your request contains an invalid datatype
+ detail: "'2023-02-01 00:00:00' is not a valid Datetime"
+ instance: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ post:
+ tags:
+ - Customer
+ summary: Create a customer profile
+ description: >-
+ Create a customer profile in the ABT database with status ACTIVE and
+ debtorStatus Inactive with a start date based on the timestamp of this
+ post call.
+
+ - Requested format for postal code:
+ - 0000AA
+ - Requested format for country:
+ - NL
+ parameters: []
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postCustomerProfile"
+ examples:
+ minimumProfile:
+ value: {}
+ basicCustomerProfile:
+ value:
+ debtorStatusId: 2
+ person:
+ birthname: Jan
+ surname: Jansen
+ emailAddress: j.jansen@hatseflats.nl
+ fullCustomerProfile:
+ value:
+ customerPreference:
+ languageId: 1
+ debtorStatusId: 2
+ person:
+ birthname: Jan
+ surname: Jansen
+ prefix: de
+ suffix: jr
+ dateOfBirth: "1970-01-01"
+ emailAddress: j.jansen@hatseflats.nl
+ isEmailVerified: False
+ addresses:
+ - street: Laan van Meerdervoort
+ houseNumber: 5
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 1
+ - street: Beeklaan
+ houseNumber: 30
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 2
+ phones:
+ - number: "6123456789"
+ countryCode: "+31"
+ phoneTypeId: 1
+ isPreferred: true
+ - number: "7012345678"
+ countryCode: "+31"
+ phoneTypeId: 2
+ isPreferred: false
+ devices:
+ - externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848"
+ alias: "iPhone prive"
+ - externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976"
+ alias: "iPhone zakelijk"
+ required: true
+ responses:
+ 201:
+ description: Successful created a customer profile
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postCustomerProfileResponse"
+ examples:
+ customerProfileCreated:
+ summary: customerProfileCreated
+ description: >-
+ Successfully created a customer profile
+ value:
+ customerProfileId: 1
+ customerNumber: 1000001
+ debtorNumber: DB100001
+ 400:
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ErrorResponse"
+ examples:
+ invalidDataTypeError:
+ summary: invalidDataTypeError
+ description: >-
+ The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
+ value:
+ type: https://htm.nl/api/v1/probs/bad-request
+ title: Your request contains an invalid datatype
+ detail: "'2023-02-01 00:00:00' is not a valid Datetime"
+ instance: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /customers/{customerProfileId}:
+ patch:
+ tags:
+ - Customer
+ summary: Modify a customer debtorStatus
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customersEntity"
+ examples:
+ updateDebtorStatus:
+ value:
+ debtorStatusId: 2
+ updateFullPerson:
+ value:
+ person: {
+ birthname: "Jan",
+ surname: "Jansen",
+ prefix: "de",
+ suffix: "jr",
+ dateOfBirth: "1970-01-01",
+ emailAddress: "TEST@TEST1.NL",
+ isEmailVerified: False
+ }
+ updateCompleteEntity:
+ value:
+ debtorStatusId: 2
+ person: {
+ birthname: "Jan",
+ surname: "Jansen",
+ prefix: "de",
+ suffix: "jr",
+ dateOfBirth: "1970-01-01",
+ emailAddress: "TEST@TEST1.NL",
+ isEmailVerified: True
+ }
+ required: true
+ responses:
+ 201:
+ description: Successfully modified a customer
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/patchCustomerProfileResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /customers/{customerProfileId}/customerStatusInstances:
+ post:
+ tags:
+ - Customer
+ summary: Create a new customer status element
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customerStatusEntity"
+ examples:
+ customerStatus:
+ value:
+ customerStatus:
+ customerStatusId: 2
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer Status
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postCustomerStatusResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /customers/{customerProfileId}/customerPreferences:
+ post:
+ tags:
+ - Customer
+ summary: Create a customer preference element
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ schema:
+ type: integer
+ example: 1
+ required: true
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customerPreferencesEntity"
+ examples:
+ customerPreference:
+ value:
+ customerPreference:
+ languageId: 1
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer preference
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postCustomerPreferencesResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /customerPreferences/{customerPreferenceId}:
+ patch:
+ tags:
+ - Customer
+ summary: Modify a customer preference element
+ description: >-
+
+ parameters:
+ - name: customerPreferenceId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/customerPreferencesEntity"
+ examples:
+ customerPreference:
+ value:
+ customerPreference:
+ languageId: 1
+ required: true
+ responses:
+ 200:
+ description: Successfully modified a customer preference
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/patchCustomerPreferencesResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /customers/{customerProfileId}/addresses:
+ post:
+ tags:
+ - Addresses
+ summary: Add a customer address
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postCustomerAddress"
+ examples:
+ customerAddress:
+ value:
+ customerAddress:
+ addressTypeId: 1
+ street: Sesamstraat
+ houseNumber: 1
+ houseNumberSuffix: A
+ postalCode: 1234 AB
+ city: Den Haag
+ country: NL
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer address
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postCustomerProfileAddressResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /addresses/{addressId}:
+ patch:
+ tags:
+ - Addresses
+ summary: Edit a customer address
+ description: >-
+
+ parameters:
+ - name: addressId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/patchCustomerAddress"
+ examples:
+ fullAddress:
+ value:
+ address:
+ street: Sesamstraat
+ houseNumber: 1
+ houseNumberSuffix: A
+ postalCode: 1234 AB
+ city: Den Haag
+ country: NL
+ required: true
+ responses:
+ 200:
+ description: Successfully modified a customer Address
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postCustomerProfileAddressResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ tags:
+ - Addresses
+ summary: Delete a customer address
+ description: >-
+
+ parameters:
+ - name: addressId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 2
+ responses:
+ 200:
+ description: Successfully deleted a customer Address
+ content:
+ application/json: {}
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /customers/{customerProfileId}/phones:
+ post:
+ tags:
+ - Phones
+ summary: Add a customer phone
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/phoneEntity"
+ examples:
+ customerPhone:
+ value:
+ customerPhone:
+ number: "0701112233"
+ countryCode: "0031"
+ phoneTypeId: 1
+ isPreferred: true
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer phonenumber
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postPhoneResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /phones/{phoneId}:
+ patch:
+ tags:
+ - Phones
+ summary: Edit a customer phone
+ description: >-
+
+ parameters:
+ - name: phoneId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 2
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/phoneEntity"
+ examples:
+ updateFullPhoneEntity:
+ value:
+ phone:
+ phoneTypeId: 2
+ number: "0701112233"
+ countryCode: "0031"
+ isPreferred: false
+ updatePhoneTypeId:
+ value:
+ phone:
+ phoneTypeId: 2
+ required: true
+ responses:
+ 200:
+ description: Successfully modified a customer phonenumber
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postPhoneResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ tags:
+ - Phones
+ summary: Delete a customer phone
+ description: >-
+
+ parameters:
+ - name: phoneId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 2
+ responses:
+ 200:
+ description: Successfully deleted a customer phonenumber
+ content:
+ application/json: {}
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /devices:
+ get:
+ tags:
+ - Devices
+ summary: Find devices.
+ description: Find devices.
+ parameters:
+ - in: query
+ name: deviceId
+ schema:
+ type: string
+ format: uuid
+ example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ required: false
+ description: The id of the device.
+ - in: query
+ name: customerProfileId
+ schema:
+ type: integer
+ example: 1
+ required: false
+ description: The id of the customer profile.
+ - in: query
+ name: externalDeviceId
+ schema:
+ type: string
+ format: uuid
+ example: c5545584-04af-4c60-a955-d6a70baab848
+ required: false
+ description: The external id of the device.
+ - in: query
+ name: alias
+ schema:
+ type: string
+ example: iPhone prive
+ required: false
+ description: The alias of the device.
+ - name: sort
+ in: query
+ schema:
+ type: string
+ - name: offset
+ in: query
+ schema:
+ type: integer
+ - name: limit
+ in: query
+ schema:
+ type: integer
+ example: 20
+ responses:
+ 200:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/getDevicesResponse"
+ example:
+ {
+ "devices":
+ [
+ {
+ "customerProfileId": 1,
+ "deviceId": "5bedce29-af0c-4f3c-b182-2caa8a1f9377",
+ "externalDeviceId": "c5545584-04af-4c60-a955-d6a70baab848",
+ "alias": "iPhone prive",
+ },
+ {
+ "customerProfileId": 1,
+ "deviceId": "d7683e89-b2ad-4e79-85b3-dbb42aad0325",
+ "externalDeviceId": "7122a988-a00a-417d-a5b4-da2d91354976",
+ "alias": "iPhone zakelijk",
+ }
+ ],
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/devices?offset=20",
+ "method": "GET",
+ },
+ "prev":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/devices",
+ "method": "GET",
+ },
+ "next":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/devices?offset=40",
+ "method": "GET",
+ },
+ },
+ }
+ /customers/{customerProfileId}/devices:
+ post:
+ tags:
+ - Devices
+ summary: Add a customer device
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postCustomerDevice"
+ examples:
+ customerDevice:
+ value:
+ device:
+ externalDeviceId: "c5545584-04af-4c60-a955-d6a70baab848"
+ alias: "iPhone prive"
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer device
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/getDevices"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /devices/{deviceId}:
+ patch:
+ tags:
+ - Devices
+ summary: Edit a customer device
+ description: >-
+
+ parameters:
+ - name: deviceId
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/patchCustomerDevice"
+ examples:
+ updateDevice:
+ value:
+ device:
+ alias: "iPhone zakelijk"
+ required: true
+ responses:
+ 200:
+ description: Successfully modified a customer device
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/getDevices"
+ examples:
+ updateDeviceResponse:
+ value:
+ deviceId: "5bedce29-af0c-4f3c-b182-2caa8a1f9377"
+ externalDeviceId: "7122a988-a00a-417d-a5b4-da2d91354976"
+ alias: "iPhone zakelijk"
+
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ tags:
+ - Devices
+ summary: Delete a customer device
+ description: >-
+
+ parameters:
+ - name: deviceId
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ responses:
+ 200:
+ description: Successfully deleted a customer device
+ content:
+ application/json: {}
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /ovpaytokens:
+ get:
+ tags:
+ - OVpay Tokens
+ summary: Find OVpay tokens.
+ description: Find OVpay tokens.
+ parameters:
+ - in: query
+ name: ovPayTokenId
+ schema:
+ type: integer
+ example: 71
+ required: false
+ description: The id of the token.
+ - in: query
+ name: customerProfileId
+ schema:
+ type: integer
+ example: 12
+ required: false
+ description: The id of the customer profile.
+ - in: query
+ name: tokenTypeId
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ example: [1, 2]
+ required: false
+ description: Filter on possible token types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital.
+ - in: query
+ name: xTat
+ schema:
+ type: string
+ format: uuid
+ example: 700b0516-bf8b-4e6e-bf16-13bfeb078e23
+ explode: false
+ required: false
+ description: The XTAT of the token.
+ - in: query
+ name: xBot
+ schema:
+ type: string
+ format: uuid
+ example: de1a9a7a-a777-4473-889c-44a3bb07daae
+ explode: false
+ required: false
+ description: The XBOT of the token.
+ - in: query
+ name: alias
+ schema:
+ type: string
+ example: Mijn OV-pas
+ required: false
+ description: The alias of the token.
+ - in: query
+ name: lastDigits
+ schema:
+ type: integer
+ example: 3301
+ required: false
+ description: The last digits of the token.
+ - in: query
+ name: ovpasNumber
+ schema:
+ type: string
+ example: 63AW974
+ required: false
+ description: Number of the OVpas.
+ - in: query
+ name: tokenStatusId
+ schema:
+ type: array
+ items:
+ type: integer
+ example: [1, 2]
+ explode: false
+ required: false
+ description: Filter on possible token statuses. Filter on token status. 1 = Retired, 2 = Active, 3 = Replaced (*), 4 = On Stock, 5 = Suspended, 6 = Removed by customer (*), 7 = Renewed Active
+ - in: query
+ name: expirationDate
+ schema:
+ type: string
+ format: date-time
+ example: 2029-03-22T09:00:00
+ required: false
+ description: The expiration date of the token.
+ - in: query
+ name: replacedByTokenId
+ schema:
+ type: integer
+ example: 12
+ required: false
+ description: The id of the token that replaced this token.
+ - name: sort
+ in: query
+ schema:
+ type: string
+ - name: offset
+ in: query
+ schema:
+ type: integer
+ - name: limit
+ in: query
+ schema:
+ type: integer
+ example: 20
+ responses:
+ 200:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ "ovPayTokens":
+ [
+ {
+ "ovPayTokenId": 71,
+ "customerProfileId": 12,
+ "tokenType":
+ { "tokenTypeId": 2, "name": "OV-pas physical" },
+ "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23",
+ "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae",
+ "alias": "Mijn OV-pas",
+ "lastDigits": 3301,
+ "ovpasNumber": "63AW974",
+ "tokenStatus": { "tokenStatusId": 2, "name": "Active" },
+ "expirationDate": "2029-03-22T09:00:00",
+ "replacedByTokenId": 12,
+ },
+ ],
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/ovPayTokens?offset=20",
+ "method": "GET",
+ },
+ "prev":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/ovPayTokens",
+ "method": "GET",
+ },
+ "next":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/ovPayTokens?offset=40",
+ "method": "GET",
+ },
+ },
+ }
+ /customers/{customerProfileId}/ovpaytokens:
+ post:
+ tags:
+ - OVpay Tokens
+ summary: Create a new OVpay token
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ovPayTokenEntity"
+ examples:
+ EMV token:
+ value:
+ ovPayToken:
+ tokenTypeId: 1
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: Mijn Rabo Pas
+ tokenStatusId: 2
+ expirationDate: "2026-04-20T17:05:52.000+02:00"
+ OVpas token physical:
+ value:
+ ovPayToken:
+ tokenTypeId: 2
+ xTat: 0115b0df-db38-4702-8811-6f7de00db3ac
+ xBot: 71a88843-32b8-4d52-ac25-de2458c47775
+ alias: Mijn OV Pas
+ ovpasNumber: "4048453105891361"
+ tokenStatusId: 2
+ expirationDate: "2026-04-20T17:05:52.000+02:00"
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer ovPayToken
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postOvPayTokenResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /ovpaytokens/{ovPayTokenId}:
+ patch:
+ tags:
+ - OVpay Tokens
+ summary: Update an OVpay token
+ description: >-
+
+ parameters:
+ - name: ovPayTokenId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ovPayTokenEntity"
+ examples:
+ updateFullToken:
+ value:
+ ovPayToken:
+ alias: "ING pas mobiel"
+ tokenStatusId: 1
+ replacedByTokenId: 8
+ lastDigits: 4563
+ updateTokenAlias:
+ value:
+ ovPayToken:
+ alias: "ING pas mobiel"
+ updateTokenStatus to removed:
+ value:
+ ovPayToken:
+ tokenStatusId: 6
+ replaceToken:
+ value:
+ ovPayToken:
+ tokenStatusId: 3
+ replacedByTokenId: 8
+ required: true
+ responses:
+ 200:
+ description: Successfully updated a customer ovPayToken
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postOvPayTokenResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ tags:
+ - OVpay Tokens
+ summary: Delete an OVpay token
+ description: >-
+
+ parameters:
+ - name: ovPayTokenId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 2
+ responses:
+ 200:
+ description: Successfully deleted a customer ovPayToken
+ content:
+ application/json: {}
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /customers/{customerProfileId}/ovchipcards:
+ post:
+ tags:
+ - OV Chipcards
+ summary: Create a new OV chipcard
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ovChipCardEntity"
+ examples:
+ ovChipCards:
+ value:
+ ovChipCard:
+ chipcardNumber: "1234123412341234"
+ validUntil: "2027-01-01"
+ alias: Mijn chipkaart
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer ovChipCard
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postOvChipCardResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /ovchipcards/{ovChipCardId}:
+ patch:
+ tags:
+ - OV Chipcards
+ summary: Update an OV chipcard
+ description: >-
+
+ parameters:
+ - name: ovChipCardId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ovChipCardEntity"
+ examples:
+ updateOvChipCardAlias:
+ value:
+ ovChipCard:
+ alias: "Zoon 1 chipkaart"
+ required: true
+ responses:
+ 200:
+ description: Successfully updated a customer ovChipCard
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postOvChipCardResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ tags:
+ - OV Chipcards
+ summary: Delete an OV chipcard
+ description: >-
+
+ parameters:
+ - name: ovChipCardId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 2
+ responses:
+ 200:
+ description: Successfully deleted a customer ovchipcard
+ content:
+ application/json: {}
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /billingInformations:
+ get:
+ tags:
+ - Billing Information
+ summary: Find billing information
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: query
+ schema:
+ type: integer
+ example: 1
+ - name: iban
+ in: query
+ schema:
+ type: string
+ example: "NL73RABO2677424363"
+ - name: bic
+ in: query
+ schema:
+ type: string
+ example: "GHJZIEJSKVM"
+ - name: ascription
+ in: query
+ schema:
+ type: string
+ example: "J. Doe"
+ - name: alias
+ in: query
+ schema:
+ type: string
+ example: "John's billing details"
+ - in: query
+ name: createdBefore
+ schema:
+ 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:
+ type: string
+ - name: offset
+ in: query
+ schema:
+ type: integer
+ - name: limit
+ in: query
+ schema:
+ type: integer
+ example: 20
+ responses:
+ 200:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ getBillingInformationMultipleSpecificCustomer:
+ summary: Get multiple billing information entities for a specific customers
+ description: >-
+ Found multiple billing informations matching the search parameters
+ value:
+ {
+ "billingInformations":
+ [
+ {
+ "billingInformationId": 1,
+ "customerProfileId": 1,
+ "iban": "NL06RABO8902022560",
+ "ascription": "J. Doe",
+ "alias": null,
+ "created": "2023-10-20T17:05:52.000",
+ },
+ {
+ "billingInformationId": 2,
+ "customerProfileId": 1,
+ "iban": "NL27ABNA4458972219",
+ "bic": "GHJZIEJSKVM",
+ "ascription": "J. Doe",
+ "alias": "John's billing details",
+ "created": "2024-10-20T17:05:52.000",
+ },
+ ],
+ }
+ getBillingInformationSingleSpecificCustomer:
+ summary: Get singel billing information entity for a specific customers
+ description: >-
+ Found one billing information matching the search parameters
+ value:
+ {
+ "billingInformations":
+ [
+ {
+ "billingInformationId": 1,
+ "customerProfileId": 1,
+ "iban": "NL06RABO8902022560",
+ "ascription": "J. Doe",
+ "alias": null,
+ "created": "2024-10-20T17:05:52.000",
+ },
+ ],
+ }
+ /customers/{customerProfileId}/billingInformations:
+ post:
+ tags:
+ - Billing Information
+ summary: Add billing information for a customer
+ description: >-
+
+ parameters:
+ - name: customerProfileId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/billingInformationEntity"
+ examples:
+ customerBillinginformationMandatoryFields:
+ value:
+ billingInformation:
+ iban: "NL73RABO2677424363"
+ ascription: "J. Doe"
+ customerBillinginformationMandatoryFull:
+ value:
+ billingInformation:
+ iban: "NL73RABO2677424363"
+ bic: "GHJZIEJSKVM"
+ ascription: "J. Doe"
+ alias: "John's billing details"
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer billingInformation
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postBillingInformationResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /directdebitmandates:
+ get:
+ tags:
+ - Mandates
+ summary: Find direct debit mandates.
+ description: Find direct debit mandates.
+ parameters:
+ - in: query
+ name: directDebitMandateId
+ schema:
+ type: integer
+ example: 71
+ required: false
+ description: The id of the direct debit mandate.
+ - in: query
+ name: customerProfileId
+ schema:
+ type: integer
+ example: 12
+ required: false
+ description: The id of the customer related to the mandate.
+ - in: query
+ name: billingInformationId
+ schema:
+ type: integer
+ example: 51
+ required: false
+ description: The id of the billing information related to the mandate.
+ - in: query
+ name: directDebitMandateTypeId
+ schema:
+ type: array
+ items:
+ type: integer
+ example: [1, 2]
+ 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: createdBefore
+ schema:
+ 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-01-01T00:00:00
+ required: false
+ description: Filter on created after.
+ - in: query
+ name: mandateReference
+ schema:
+ type: string
+ example: CORE01
+ required: false
+ description: Filter on mandate reference.
+ - in: query
+ name: mandateState
+ schema:
+ type: array
+ items:
+ type: string
+ example: [SIGNED, PREPARED]
+ explode: false
+ required: false
+ description: Filter on possible states of the mandate. SIGNED = signed, PREPARED = prepared, CANCELLED = cancelled.
+ - in: query
+ name: updatedBefore
+ schema:
+ type: string
+ format: date-time
+ example: 2020-12-31T23:59:59
+ required: false
+ description: Filter on updated before.
+ - in: query
+ name: updatedAfter
+ schema:
+ type: string
+ format: date-time
+ example: 2020-01-01T00:00:00
+ required: false
+ description: Filter on updated after.
+ - name: sort
+ in: query
+ schema:
+ type: string
+ - name: offset
+ in: query
+ schema:
+ type: integer
+ - name: limit
+ in: query
+ schema:
+ type: integer
+ example: 20
+ responses:
+ 200:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ getDirectDebitMandateWithNextPage:
+ value:
+ {
+ "directDebitMandates":
+ [
+ {
+ "directDebitMandateId": 71,
+ "customerProfileId": 12,
+ "billingInformationId": 51,
+ "directDebitMandateType":
+ {
+ "directDebitMandateTypeId": 1,
+ "name": "import",
+ "description": "import",
+ },
+ "created": "2024-03-22T08:55:00",
+ "mandateReference": "CORE01",
+ "mandateState": "SIGNED",
+ "updateTimestamp": "2024-03-22T08:55:00",
+ },
+ ],
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates",
+ "method": "GET",
+ },
+ "next":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=20",
+ "method": "GET",
+ },
+ },
+ }
+ getDirectDebitMandateWithNextPageandPreviousPage:
+ value:
+ {
+ "directDebitMandates":
+ [
+ {
+ "directDebitMandateId": 71,
+ "customerProfileId": 12,
+ "billingInformationId": 51,
+ "directDebitMandateType":
+ {
+ "directDebitMandateTypeId": 1,
+ "name": "import",
+ "description": "import",
+ },
+ "created": "2024-03-22T08:55:00",
+ "mandateReference": "CORE01",
+ "mandateState": "SIGNED",
+ "updateTimestamp": "2024-03-22T08:55:00",
+ },
+ ],
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=20",
+ "method": "GET",
+ },
+ "prev":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates",
+ "method": "GET",
+ },
+ "next":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=40",
+ "method": "GET",
+ },
+ },
+ }
+ /billingInformation/{billingInformationId}/directdebitmandates:
+ post:
+ tags:
+ - Mandates
+ summary: Add a customer direct debit mandate
+ description: >-
+
+ parameters:
+ - name: billingInformationId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/mandateEntity"
+ examples:
+ customerDirectDebitMandatePrepared:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ mandateReference: HTM-mandate-001
+ mandateState: PREPARED
+ required: true
+ responses:
+ 201:
+ description: Successfully created a customer mandate
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/postDirectDebitMandateResponse"
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /directdebitmandates/{directdebitmandateId}:
+ patch:
+ tags:
+ - Mandates
+ summary: Update a customer direct debit mandate
+ description: >-
+
+ parameters:
+ - name: directdebitmandateId
+ in: path
+ required: true
+ schema:
+ type: integer
+ example: 1
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/mandateEntity"
+ examples:
+ customerDirectDebitMandateCancelled:
+ value:
+ directDebitMandate:
+ mandateState: CANCELLED
+ required: true
+ responses:
+ 200:
+ description: Successfully updated a customer mandate
+ content:
+ application/json:
+ example:
+ {
+ "directDebitMandateId": 1,
+ "customerProfileId": 12,
+ "billingInformationId": 51,
+ "directDebitMandateType":
+ {
+ "directDebitMandateTypeId": 1,
+ "name": "import",
+ "description": "import",
+ },
+ "created": "2024-03-22T08:55:00",
+ "mandateReference": "CORE01",
+ "mandateState": "CANCELLED",
+ "updateTimestamp": "2025-03-22T08:55:00",
+ }
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+components:
+ securitySchemes:
+ default:
+ type: oauth2
+ flows:
+ implicit:
+ authorizationUrl: https://services.acc.api.htm.nl/authorize
+ scopes: {}
+ schemas:
+ unavailable:
+ type: object
+ rfc9457:
+ type: object
+ properties:
+ type:
+ type: string
+ format: url
+ example: https://example.com/probs/out-of-credit
+ title:
+ type: string
+ example: You do not have enough credit.
+ detail:
+ type: string
+ example: Your current balance is 30, but that costs 50.
+ instance:
+ type: string
+ example: /account/12345/msgs/abc
+ balance:
+ type: string
+ example: 30
+ accounts:
+ type: array
+ items:
+ type: string
+ example:
+ - /account/12345
+ - /account/67890
+ getAuditTrails:
+ type: object
+ properties:
+ auditTrailId:
+ type: integer
+ customerProfileId:
+ type: integer
+ action:
+ type: string
+ user:
+ type: string
+ timestamp:
+ type: string
+ format: datetime
+ correlationId:
+ type: string
+ getOvPayTokens:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ tokenTypeId:
+ type: integer
+ xTat:
+ type: string
+ xBot:
+ type: string
+ alias:
+ type: string
+ lastDigits:
+ type: integer
+ ovpasNumber:
+ type: string
+ tokenStatusId:
+ type: integer
+ expirationDate:
+ type: string
+ replacedByTokenId:
+ type: integer
+ getOvChipcards:
+ type: object
+ properties:
+ ovChipCardId:
+ type: integer
+ chipCardNumber:
+ type: string
+ validUntil:
+ type: string
+ format: date
+ alias:
+ type: string
+ getCustomerStatusInstance:
+ type: object
+ properties:
+ customerStatus:
+ $ref: "#/components/schemas/getCustomerStatus"
+ fromInclusive:
+ type: string
+ format: date
+ toInclusive:
+ type: string
+ format: date
+ getCustomerStatus:
+ type: object
+ properties:
+ customerStatusId:
+ type: integer
+ name:
+ type: string
+ getDebtorStatus:
+ type: object
+ properties:
+ debtorStatusId:
+ type: integer
+ name:
+ type: string
+ getPerson:
+ type: object
+ properties:
+ birthname:
+ type: string
+ description: voornaam
+ surname:
+ type: string
+ description: achternaam
+ prefix:
+ type: string
+ description: tussenvoegsel
+ suffix:
+ type: string
+ description: achtervoegsel
+ dateOfBirth:
+ type: string
+ format: date
+ emailAddresses:
+ type: string
+ format: email
+ isEmailVerified:
+ type: boolean
+ addresses:
+ type: array
+ items:
+ $ref: "#/components/schemas/getAddresses"
+ phones:
+ type: array
+ items:
+ $ref: "#/components/schemas/getPhones"
+ devices:
+ type: array
+ items:
+ $ref: "#/components/schemas/getDevices"
+ getAddresses:
+ type: object
+ properties:
+ addressId:
+ type: integer
+ street:
+ type: string
+ houseNumber:
+ type: integer
+ houseNumberSuffix:
+ type: string
+ postalCode:
+ type: string
+ city:
+ type: string
+ country:
+ type: string
+ addressType:
+ $ref: "#/components/schemas/getAddressType"
+ getAddressType:
+ type: object
+ properties:
+ addressTypeId:
+ type: integer
+ name:
+ type: string
+ getPhones:
+ type: object
+ properties:
+ phoneId:
+ type: integer
+ number:
+ type: string
+ countryCode:
+ type: string
+ phoneType:
+ $ref: "#/components/schemas/getPhoneType"
+ isPreferred:
+ type: boolean
+ getPhoneType:
+ type: object
+ properties:
+ phoneTypeId:
+ type: integer
+ name:
+ type: string
+ getDevices:
+ type: object
+ properties:
+ deviceId:
+ type: string
+ format: uuid
+ externalDeviceId:
+ type: string
+ format: uuid
+ alias:
+ type: string
+ required:
+ - deviceId
+ - externalDeviceId
+ - alias
+ getCustomerPreference:
+ type: object
+ properties:
+ language:
+ $ref: "#/components/schemas/getCustomerLanguage"
+ getCustomerLanguage:
+ type: object
+ properties:
+ languageId:
+ type: integer
+ name:
+ type: string
+ ietfCode:
+ type: string
+ iso639Code:
+ type: string
+ getCustomerProfiles:
+ type: object
+ properties:
+ customers:
+ type: array
+ items:
+ $ref: "#/components/schemas/getCustomerProfile"
+ getCustomerProfile:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ debtorNumber:
+ type: integer
+ debtorStatus:
+ $ref: "#/components/schemas/getDebtorStatus"
+ vasCustomerNumber:
+ type: integer
+ customerPreference:
+ $ref: "#/components/schemas/getCustomerPreference"
+ customerStatusInstances:
+ type: array
+ items:
+ $ref: "#/components/schemas/getCustomerStatusInstance"
+ person:
+ $ref: "#/components/schemas/getPerson"
+ ovChipCards:
+ type: array
+ items:
+ $ref: "#/components/schemas/getOvChipcards"
+ ovPayTokens:
+ type: array
+ items:
+ $ref: "#/components/schemas/getOvPayTokens"
+ auditTrails:
+ type: array
+ items:
+ $ref: "#/components/schemas/getAuditTrails"
+ addressPostEntity:
+ required:
+ - addressTypeId
+ - city
+ - country
+ - houseNumber
+ - postalCode
+ - street
+ type: object
+ properties:
+ street:
+ type: string
+ houseNumber:
+ type: integer
+ houseNumberSuffix:
+ type: string
+ postalCode:
+ type: string
+ city:
+ type: string
+ country:
+ type: string
+ addressTypeId:
+ type: integer
+ postPhoneEntity:
+ required:
+ - countryCode
+ - number
+ - phoneTypeId
+ type: object
+ properties:
+ number:
+ type: string
+ countryCode:
+ type: string
+ phoneTypeId:
+ type: integer
+ isPreferred:
+ type: boolean
+ phoneEntity:
+ type: object
+ properties:
+ number:
+ type: string
+ countryCode:
+ type: string
+ phoneTypeId:
+ type: integer
+ isPreferred:
+ type: boolean
+ devicePostEntity:
+ required:
+ - externalDeviceId
+ - alias
+ type: object
+ properties:
+ externalDeviceId:
+ type: string
+ format: uuid
+ alias:
+ type: string
+ defaultCustomerProfileResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ postCustomerProfile:
+ type: object
+ properties:
+ debtorStatusId:
+ type: integer
+ customerPreference:
+ $ref: "#/components/schemas/customerPreferencesEntity"
+ person:
+ $ref: "#/components/schemas/personEntity"
+ addresses:
+ type: array
+ items:
+ $ref: "#/components/schemas/addressPostEntity"
+ phones:
+ type: array
+ items:
+ $ref: "#/components/schemas/postPhoneEntity"
+ devices:
+ type: array
+ items:
+ $ref: "#/components/schemas/devicePostEntity"
+ postCustomerAddress:
+ type: object
+ properties:
+ street:
+ type: string
+ houseNumber:
+ type: integer
+ houseNumberSuffix:
+ type: string
+ postalCode:
+ type: string
+ city:
+ type: string
+ country:
+ type: string
+ addressType:
+ type: integer
+ patchCustomerAddress:
+ type: object
+ properties:
+ street:
+ type: string
+ houseNumber:
+ type: integer
+ houseNumberSuffix:
+ type: string
+ postalCode:
+ type: string
+ city:
+ type: string
+ country:
+ type: string
+ addressType:
+ type: integer
+ postCustomerProfileResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ customerProfileId:
+ type: integer
+ example: 1
+ postCustomerProfileAddressResponse:
+ type: object
+ properties:
+ customerProfileId:
+ type: integer
+ example: 1
+ addressId:
+ type: integer
+ example: 3
+ postPhoneResponse:
+ type: object
+ properties:
+ phoneId:
+ type: integer
+ example: 2
+ postBillingInformationResponse:
+ type: object
+ properties:
+ billingInformationId:
+ type: integer
+ example: 1
+ postDirectDebitMandateResponse:
+ type: object
+ properties:
+ directDebitMandateId:
+ type: integer
+ example: 1
+ postOvChipCardResponse:
+ type: object
+ properties:
+ ovChipCardId:
+ type: integer
+ example: 1
+ patchCustomerProfileResponse:
+ type: object
+ properties:
+ customerProfileId:
+ type: integer
+ example: 1
+ postCustomerStatusResponse:
+ type: object
+ properties:
+ customerPreferenceId:
+ type: integer
+ example: 1
+ postCustomerPreferencesResponse:
+ type: object
+ properties:
+ customerPreferenceId:
+ type: integer
+ example: 1
+ patchCustomerPreferencesResponse:
+ type: object
+ properties:
+ customerPreferenceId:
+ type: integer
+ example: 1
+ customerLanguageId:
+ type: integer
+ example: 1
+ getCustomerProfileOvPayTokenResponse:
+ type: object
+ properties:
+ ovPayToken:
+ type: array
+ items:
+ $ref: "#/components/schemas/ovPayTokenEntity"
+ customerPreferencesEntity:
+ type: object
+ properties:
+ customerPreferenceId:
+ type: integer
+ languageId:
+ type: integer
+ customerStatusEntity:
+ type: object
+ properties:
+ customerStatusId:
+ type: integer
+ customersEntity:
+ type: object
+ properties:
+ debtorStatusId:
+ type: integer
+ billingInformationEntity:
+ type: object
+ properties:
+ billingInformationId:
+ type: integer
+ iban:
+ type: string
+ bic:
+ type: string
+ ascription:
+ type: string
+ alias:
+ type: string
+ created:
+ type: string
+ mandateEntity:
+ type: object
+ properties:
+ directDebitMandateId:
+ type: integer
+ directDebitMandateTypeId:
+ type: integer
+ mandateReference:
+ type: string
+ mandateState:
+ type: string
+ ovPayTokenEntity:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ tokenType:
+ type: object
+ properties:
+ tokenTypeId:
+ type: string
+ name:
+ type: string
+ xTat:
+ type: string
+ xBot:
+ type: string
+ alias:
+ type: string
+ lastDigits:
+ type: integer
+ ovpasNumber:
+ type: string
+ tokenStatus:
+ type: object
+ properties:
+ tokenStatusId:
+ type: integer
+ name:
+ type: string
+ expirationDate:
+ type: string
+ replacedByTokenId:
+ type: integer
+ ovChipCardEntity:
+ type: object
+ properties:
+ ovChipCardId:
+ type: integer
+ chipCardNumber:
+ type: string
+ validUntil:
+ type: string
+ format: date
+ alias:
+ type: string
+ personEntity:
+ type: object
+ properties:
+ personId:
+ type: integer
+ birthname:
+ type: string
+ description: voornaam
+ surname:
+ type: string
+ description: achternaam
+ prefix:
+ type: string
+ description: tussenvoegsel
+ suffix:
+ type: string
+ description: achtervoegsel
+ dateOfBirth:
+ type: string
+ format: date
+ emailAddress:
+ type: string
+ isEmailVerified:
+ type: string
+ postOvPayTokenResponse:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ example: 1
+ getDevicesResponse:
+ type: object
+ properties:
+ devices:
+ type: array
+ items:
+ $ref: "#/components/schemas/getDeviceEntity"
+ getDeviceEntity:
+ type: object
+ properties:
+ deviceId:
+ type: string
+ format: uuid
+ customerProfileId:
+ type: integer
+ externalDeviceId:
+ type: string
+ format: uuid
+ alias:
+ type: string
+ required:
+ - deviceId
+ - customerProfileId
+ - externalDeviceId
+ - alias
+ postCustomerDevice:
+ $ref: "#/components/schemas/devicePostEntity"
+ patchCustomerDevice:
+ type: object
+ properties:
+ alias:
+ type: string
+ ErrorResponse:
+ type: object
+ properties:
+ type:
+ type: string
+ title:
+ type: string
+ detail:
+ type: string
+ instance:
+ type: string
diff --git a/src/openapi/customers/customers.yaml b/src/openapi/customers/customers.yaml
new file mode 100644
index 0000000..19d014e
--- /dev/null
+++ b/src/openapi/customers/customers.yaml
@@ -0,0 +1,5251 @@
+openapi: 3.0.1
+info:
+ title: ABTCustomers
+ version: '1.0'
+servers:
+ - url: https://services.acc.api.htm.nl/abt/abtcustomers/1.0
+security:
+ - default: []
+tags:
+ - name: ABTCustomers
+ - name: ABTCustomersSelfService
+ - name: ABTCustomersFinancials
+ - name: ABTCustomersFinancialsSelfService
+paths:
+ /customers/{customerNumber}/financials/directdebitmandates/{directDebitMandateId}:
+ patch:
+ tags:
+ - ABTCustomersFinancials
+ summary: Modify direct debit mandate information for a customer profile.
+ description: Modify direct debit mandate for a customer profile.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: directDebitMandateId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/directDebitMandatePatch'
+ examples:
+ updateFullDirectDebitMandate:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ billingInformationId: 1
+ mandateReference: Dit is een test Reference
+ mandateState: SIGNED
+ updateDirectDebitMandateType:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ updateBillingInformationId:
+ value:
+ directDebitMandate:
+ billingInformationId: 2
+ updateMandateReference:
+ value:
+ directDebitMandate:
+ mandateReference: Updated Reference
+ updateMandateState:
+ value:
+ directDebitMandate:
+ mandateState: PREPARED
+ required: true
+ responses:
+ '201':
+ description: Successful created financial information for a customer profile.
+ content:
+ application/json:
+ schema:
+ $ref: >-
+ #/components/schemas/patchCustomerProfileCustomerNumberResponse
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /customers/{customerNumber}/financials/billinginformation/{billingInformationId}:
+ patch:
+ tags:
+ - ABTCustomersFinancials
+ summary: Modify billing information for a customer profile.
+ description: Modify billing information for a customer profile.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: billingInformationId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/billingInformationPatch'
+ examples:
+ updateFullBillingInformation:
+ value:
+ billingInformation:
+ iban: '1234567890'
+ bic: ING
+ ascription: Dit is een Test
+ alias: Alias Test
+ updateIban:
+ value:
+ billingInformation:
+ iban: '0987654321'
+ updateBic:
+ value:
+ billingInformation:
+ bic: DEUT
+ updateAscription:
+ value:
+ billingInformation:
+ ascription: Updated Ascription
+ updateAlias:
+ value:
+ billingInformation:
+ alias: Updated Alias
+ required: true
+ responses:
+ '201':
+ description: Successful created financial information for a customer profile.
+ content:
+ application/json:
+ schema:
+ $ref: >-
+ #/components/schemas/patchCustomerProfileCustomerNumberResponse
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /customers/{customerNumber}/financials/billinginformation:
+ post:
+ tags:
+ - ABTCustomersFinancials
+ summary: Create billing information for a customer profile.
+ description: Create billing information for a customer profile.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/billingInformationPost'
+ examples:
+ fullFinancialInformation:
+ value:
+ billingInformation:
+ iban: '1234567890'
+ bic: ING
+ ascription: Dit is een Test
+ alias: Alias Test
+ minimumBillingInformation:
+ value:
+ billingInformation:
+ iban: '1234567890'
+ ascription: Dit is een Test
+ alias: Alias Test
+ required: true
+ responses:
+ '201':
+ description: Successful created financial information for a customer profile.
+ content:
+ application/json:
+ schema:
+ $ref: >-
+ #/components/schemas/postCustomerProfileBillingInformationResponse
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /customers/{customerNumber}/financials/directdebitmandates:
+ post:
+ tags:
+ - ABTCustomersFinancials
+ summary: Create direct debit mandate for a customer profile.
+ description: Create direct debit mandate for a customer profile.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/directDebitMandatePost'
+ examples:
+ fullFinancialInformation:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ billingInformationId: 1
+ mandateReference: Dit is een test Reference
+ minimumdirectDebitMandate:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ billingInformationId: 1
+ mandateReference: Dit is een test Reference
+ required: true
+ responses:
+ '201':
+ description: Successful created financial information for a customer profile.
+ content:
+ application/json:
+ schema:
+ $ref: >-
+ #/components/schemas/postCustomerProfileDirectDebitMandateResponse
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /customers/{customerNumber}/financials:
+ get:
+ tags:
+ - ABTCustomersFinancials
+ summary: Search for customer profile financial information
+ description: 'search for a customer profile in the ABT database with query parameters '
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: Successful retrieved a customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/getCustomerProfileFinancials'
+ examples:
+ fullFinancialInformation:
+ value:
+ customerNumber: 1000003
+ billingInformation:
+ - billingInformationId: 1
+ iban: '1234567890'
+ bic: ING
+ ascription: Dit is een Test
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
+ - billingInformationId: 2
+ iban: '0987654321'
+ bic: null
+ ascription: Dit is een Test
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
+ directDebitMandate:
+ - directDebitMandateId: 1
+ directDebitMandateTypeName: PIN Transaction
+ billingInformationId: 1
+ 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
+ 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
+ billingInformation: []
+ directDebitMandate:
+ - directDebitMandateId: 1
+ directDebitMandateTypeName: PIN transaction
+ billingInformationId: 1
+ created: '1900-01-01T00:00:00.000'
+ mandateReference: Dit is een test Reference
+ updateTimestamp: '1900-01-01T00:00:00.000'
+ - directDebitMandateId: 2
+ directDebitMandateTypeName: Paper Contract
+ billingInformationId: 1
+ created: '1900-01-01T00:00:00.000'
+ mandateReference: Dit is een test Reference
+ updateTimestamp: '1900-01-01T00:00:00.000'
+ missingDebitMandateInformation:
+ value:
+ customerNumber: 1000003
+ billingInformation:
+ - billingInformationId: 1
+ iban: '1234567890'
+ bic: ING
+ ascription: Dit is een Test
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
+ - billingInformationId: 2
+ iban: '0987654321'
+ bic: null
+ ascription: Dit is een Test
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
+ directDebitMandate: []
+ minimumFinancialInformation:
+ value:
+ customerNumber: 1000003
+ billingInformation: []
+ directDebitMandate: []
+ '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
+ /selfservice/customers/{customerNumber}/financials/directdebitmandates/{directDebitMandateId}:
+ patch:
+ tags:
+ - ABTCustomersFinancialsSelfService
+ summary: Modify direct debit mandate information for a customer profile.
+ description: Modify direct debit mandate for a customer profile.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: directDebitMandateId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/directDebitMandatePatch'
+ examples:
+ updateFullDirectDebitMandate:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ billingInformationId: 1
+ mandateReference: Dit is een test Reference
+ mandateState: SIGNED
+ updateDirectDebitMandateType:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ updateBillingInformationId:
+ value:
+ directDebitMandate:
+ billingInformationId: 2
+ updateMandateReference:
+ value:
+ directDebitMandate:
+ mandateReference: Updated Reference
+ updateMandateState:
+ value:
+ directDebitMandate:
+ mandateState: PREPARED
+ required: true
+ responses:
+ '201':
+ description: Successful created financial information for a customer profile.
+ content:
+ application/json:
+ schema:
+ $ref: >-
+ #/components/schemas/patchCustomerProfileCustomerNumberResponse
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /selfservice/customers/{customerNumber}/financials/billinginformation/{billingInformationId}:
+ patch:
+ tags:
+ - ABTCustomersFinancialsSelfService
+ summary: Modify billing information for a customer profile.
+ description: Modify billing information for a customer profile.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: billingInformationId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/billingInformationPatch'
+ examples:
+ updateFullBillingInformation:
+ value:
+ billingInformation:
+ iban: '1234567890'
+ bic: ING
+ ascription: Dit is een Test
+ alias: Alias Test
+ updateIban:
+ value:
+ billingInformation:
+ iban: '0987654321'
+ updateBic:
+ value:
+ billingInformation:
+ bic: DEUT
+ updateAscription:
+ value:
+ billingInformation:
+ ascription: Updated Ascription
+ updateAlias:
+ value:
+ billingInformation:
+ alias: Updated Alias
+ updateBillingAddressId:
+ value:
+ billingInformation:
+ billingAddressId: 3
+ required: true
+ responses:
+ '201':
+ description: Successful created financial information for a customer profile.
+ content:
+ application/json:
+ schema:
+ $ref: >-
+ #/components/schemas/patchCustomerProfileCustomerNumberResponse
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /selfservice/customers/{customerNumber}/financials/billinginformation:
+ post:
+ tags:
+ - ABTCustomersFinancialsSelfService
+ summary: Create billing information for a customer profile.
+ description: Create billing information for a customer profile.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/billingInformationPost'
+ examples:
+ fullFinancialInformation:
+ value:
+ billingInformation:
+ iban: '1234567890'
+ bic: ING
+ ascription: Dit is een Test
+ alias: Alias Test
+ billingAddressId: 2
+ minimumBillingInformation:
+ value:
+ billingInformation:
+ iban: '1234567890'
+ ascription: Dit is een Test
+ alias: Alias Test
+ billingAddressId: 2
+ required: true
+ responses:
+ '201':
+ description: Successful created financial information for a customer profile.
+ content:
+ application/json:
+ schema:
+ $ref: >-
+ #/components/schemas/postCustomerProfileBillingInformationResponse
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /selfservice/customers/{customerNumber}/financials/directdebitmandates:
+ post:
+ tags:
+ - ABTCustomersFinancialsSelfService
+ summary: Create direct debit mandate for a customer profile.
+ description: Create direct debit mandate for a customer profile.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/directDebitMandatePost'
+ examples:
+ fullFinancialInformation:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ billingInformationId: 1
+ mandateReference: Dit is een test Reference
+ minimumdirectDebitMandate:
+ value:
+ directDebitMandate:
+ directDebitMandateTypeId: 1
+ billingInformationId: 1
+ mandateReference: Dit is een test Reference
+ required: true
+ responses:
+ '201':
+ description: Successful created financial information for a customer profile.
+ content:
+ application/json:
+ schema:
+ $ref: >-
+ #/components/schemas/postCustomerProfileDirectDebitMandateResponse
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '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
+ /selfservice/customers/{customerNumber}/financials:
+ get:
+ tags:
+ - ABTCustomersFinancialsSelfService
+ summary: Search for customer profile financial information
+ description: 'search for a customer profile in the ABT database with query parameters '
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: Successful retrieved a customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/getCustomerProfileFinancials'
+ examples:
+ fullFinancialInformation:
+ value:
+ customerNumber: 1000003
+ billingInformation:
+ - billingInformationId: 1
+ iban: '1234567890'
+ bic: ING
+ ascription: Dit is een Test
+ alias: Alias Test
+ billingAddressId: 2
+ created: '2024-01-01T00:00:00.000'
+ - billingInformationId: 2
+ iban: '0987654321'
+ bic: null
+ ascription: Dit is een Test
+ alias: Alias Test
+ billingAddressId: 3
+ created: '2024-01-01T00:00:00.000'
+ directDebitMandate:
+ - directDebitMandateId: 1
+ directDebitMandateTypeName: PIN transaction
+ billingInformationId: 1
+ 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
+ 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
+ billingInformation: []
+ directDebitMandate:
+ - directDebitMandateId: 1
+ directDebitMandateTypeName: PIN transaction
+ billingInformationId: 1
+ created: '1900-01-01T00:00:00.000'
+ mandateReference: Dit is een test Reference
+ updateTimestamp: '1900-01-01T00:00:00.000'
+ - directDebitMandateId: 2
+ directDebitMandateTypeName: Paper Contract
+ billingInformationId: 1
+ created: '1900-01-01T00:00:00.000'
+ mandateReference: Dit is een test Reference
+ updateTimestamp: '1900-01-01T00:00:00.000'
+ missingDebitMandateInformation:
+ value:
+ customerNumber: 1000003
+ billingInformation:
+ - billingInformationId: 1
+ iban: '1234567890'
+ bic: ING
+ ascription: Dit is een Test
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
+ - billingInformationId: 2
+ iban: '0987654321'
+ bic: null
+ ascription: Dit is een Test
+ alias: Alias Test
+ created: "2024-06-02T15:03:460"
+ directDebitMandate: []
+ minimumFinancialInformation:
+ value:
+ customerNumber: 1000003
+ billingInformation: []
+ directDebitMandate: []
+ '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
+ /customers/list:
+ get:
+ tags:
+ - ABTCustomers
+ summary: Search for customer profile list
+ description: >-
+ search for a customer profile list in the ABT database with query
+ parameters
+ parameters:
+ - name: customerProfileId
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: number
+ - name: customerNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: number
+ - name: emailAddress
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: chipCardNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: ovPasNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: phoneNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: phoneCountryCode
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressStreet
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressHouseNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: number
+ - name: addressHouseNumberSuffix
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressPostalCode
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressCity
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressCountry
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: birthname
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: surname
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: dateOfBirth
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: customerStatus
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful retrieved a customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/getCustomerProfileList'
+ examples:
+ fullCustomerProfile:
+ value:
+ Entries:
+ - customerProfileId: 1
+ customerNumber: 1000001
+ debtorNumber: TEST001
+ debtorStateId: 1
+ vascustomerNumber: CST005
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: active
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: '2022-08-05 15:01:00.000'
+ - name: blocked
+ fromInclusive: '2022-08-05 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: Pieter
+ surname: De valen
+ prefix: dhr
+ suffix: De
+ dateOfBirth: '2002-10-29'
+ emailAddress: TEST@HTM.NL
+ address:
+ - addressId: 1
+ street: mystreet
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 0000AA
+ city: Den Haag
+ country: NL
+ addressType: Billing
+ - addressId: 2
+ street: mystreet 33
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 4455CA
+ city: Den BOSCH
+ country: NL
+ addressType: Shipping
+ phone:
+ - phoneId: 1
+ number: '3112345678'
+ countryCode: NL
+ phoneType: TestNaam
+ isPreferred: true
+ - phoneId: 2
+ number: '333225588'
+ countryCode: ES
+ phoneType: TestNaam
+ isPreferred: false
+ ovChipCard:
+ - ovChipCardId: 1
+ chipCardNumber: 1234123412341234
+ validUntil: '2023-01-01'
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: 1234123412341235
+ validUntil: '2025-01-01'
+ alias: alias
+ ovPayToken:
+ - ovPayTokenId: 126
+ tokenTypeId: 1
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 1
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenTypeId: 1
+ xTat: hhe2830283
+ xBot: jdhd828033
+ alias: alias
+ lastDigits: '5674'
+ ovpasNumber: OV34568
+ tokenStatusId: 1
+ expirationDate: '2024-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 2
+ audit:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: '2023-10-20T17:05:52.000+02:00'
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ - customerNumber: 1000002
+ debtorNumber: TEST001
+ debtorStateId: 1
+ vascustomerNumber: CST005
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: active
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: '2022-08-05 15:01:00.000'
+ - name: blocked
+ fromInclusive: '2022-08-05 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: Pieter
+ surname: De valen
+ prefix: dhr
+ suffix: De
+ dateOfBirth: '2002-10-29'
+ emailAddress: TEST@HTM.NL
+ address:
+ - addressId: 1
+ street: mystreet
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 0000AA
+ city: Den Haag
+ country: NL
+ addressType: Billing
+ - addressId: 2
+ street: mystreet 33
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 4455CA
+ city: Den BOSCH
+ country: NL
+ addressType: Shipping
+ phone:
+ - phoneId: 1
+ number: '3112345678'
+ countryCode: NL
+ phoneType: TestNaam
+ isPreferred: true
+ - phoneId: 2
+ number: '333225588'
+ countryCode: ES
+ phoneType: TestNaam
+ isPreferred: false
+ ovChipCard:
+ - ovChipCardId: 1
+ chipCardNumber: 1234123412341234
+ validUntil: '2023-01-01'
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: 1234123412341235
+ validUntil: '2025-01-01'
+ alias: alias
+ ovPayToken:
+ - ovPayTokenId: 126
+ tokenTypeId: 1
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 1
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenTypeId: 1
+ xTat: hhe2830283
+ xBot: jdhd828033
+ alias: alias
+ lastDigits: '5674'
+ ovpasNumber: OV34568
+ tokenStatusId: 1
+ expirationDate: '2024-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 2
+ audit:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: '2023-10-20T17:05:52.000+02:00'
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ href: null
+ minimumCustomerProfile:
+ value:
+ Entries:
+ - customerNumber: 1000008
+ debtorNumber: null
+ debtorStateId: null
+ vascustomerNumber: null
+ customerPreference:
+ languageId: null
+ customerStatus:
+ - name: active
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: null
+ surname: null
+ prefix: null
+ suffix: null
+ dateOfBirth: null
+ emailAddress: TEST@TEST1.NL
+ address: []
+ phone: []
+ ovChipCard: []
+ ovPayToken: []
+ audit: []
+ missingPersonDetailsCustomerProfile:
+ value:
+ Entries:
+ - emailAddress: TEST04@HTM.NL
+ customerNumber: 1000005
+ debtorNumber: TEST004
+ debtorStateId: 1
+ vascustomerNumber: CST005
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: inactive
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: Sophie
+ surname: Haardenburg
+ prefix: Mw
+ suffix: null
+ dateOfBirth: 1955-09-05+01:00
+ emailAddress: TEST@TEST1.NL
+ address: []
+ phone: []
+ ovChipCard:
+ - ovChipCardId: 1
+ chipCardNumber: 1234123412341234
+ validUntil: '2023-01-01'
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: 1234123412341235
+ validUntil: '2025-01-01'
+ alias: alias
+ ovPayToken:
+ - ovPayTokenId: 126
+ tokenTypeId: 1
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 1
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenTypeId: 1
+ xTat: hhe2830283
+ xBot: jdhd828033
+ alias: alias
+ lastDigits: '5674'
+ ovpasNumber: OV34568
+ tokenStatusId: 1
+ expirationDate: '2024-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 2
+ audit:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: '2023-10-20T17:05:52.000+02:00'
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ '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
+ /customers:
+ get:
+ tags:
+ - ABTCustomers
+ summary: Search for customer profile
+ description: 'search for a customer profile in the ABT database with query parameters '
+ parameters:
+ - name: customerProfileId
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: number
+ - name: customerNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: number
+ - name: emailAddress
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: chipCardNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: ovPasNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: phoneNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: phoneCountryCode
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressStreet
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressHouseNumber
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: number
+ - name: addressHouseNumberSuffix
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressPostalCode
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressCity
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: addressCountry
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: birthname
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: surname
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: dateOfBirth
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ - name: customerStatus
+ in: query
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful retrieved a customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/getCustomerProfile'
+ examples:
+ fullCustomerProfile:
+ value:
+ customerProfileId: 1
+ customerNumber: 1000001
+ debtorNumber: TEST001
+ vascustomerNumber: CST005
+ debtorStateId: 1
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: active
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: '2022-08-05 15:01:00.000'
+ - name: blocked
+ fromInclusive: '2022-08-05 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: Pieter
+ surname: De valen
+ prefix: dhr
+ suffix: De
+ dateOfBirth: '2002-10-29'
+ emailAddress: TEST@HTM.NL
+ address:
+ - addressId: 1
+ street: mystreet
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 0000AA
+ city: Den Haag
+ country: NL
+ addressType: Billing
+ - addressId: 2
+ street: mystreet 33
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 4455CA
+ city: Den BOSCH
+ country: NL
+ addressType: Shipping
+ phone:
+ - phoneId: 1
+ number: '3112345678'
+ countryCode: NL
+ phoneType: TestNaam
+ isPreferred: true
+ - phoneId: 2
+ number: '333225588'
+ countryCode: ES
+ phoneType: TestNaam
+ isPreferred: false
+ ovChipCard:
+ - ovChipCardId: 1
+ chipCardNumber: 1234123412341234
+ validUntil: '2023-01-01'
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: 1234123412341235
+ validUntil: '2025-01-01'
+ alias: alias
+ ovPayToken:
+ - ovPayTokenId: 126
+ tokenTypeId: 1
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 1
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenTypeId: 1
+ xTat: hhe2830283
+ xBot: jdhd828033
+ alias: alias
+ lastDigits: '5674'
+ ovpasNumber: OV34568
+ tokenStatusId: 1
+ expirationDate: '2024-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 2
+ audit:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: '2023-10-20T17:05:52.000+02:00'
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ minimumCustomerProfile:
+ value:
+ customerNumber: 1000008
+ debtorNumber: null
+ debtorStateId: null
+ vascustomerNumber: null
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: active
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: null
+ surname: null
+ prefix: null
+ suffix: null
+ dateOfBirth: null
+ emailAddress: TEST@TEST1.NL
+ address: []
+ phone: []
+ ovChipCard: []
+ ovPayToken: []
+ audit: []
+ missingPersonDetailsCustomerProfile:
+ value:
+ emailAddress: TEST04@HTM.NL
+ customerNumber: 1000005
+ debtorNumber: TEST004
+ debtorStateId: 1
+ vascustomerNumber: CST008
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: inactive
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: Sophie
+ surname: Haardenburg
+ prefix: Mw
+ suffix: null
+ dateOfBirth: '1955-09-05'
+ emailAddress: TEST@TEST1.NL
+ address: []
+ phone: []
+ ovChipCard:
+ - ovChipCardId: 1
+ chipCardNumber: 1234123412341234
+ validUntil: '2023-01-01'
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: 1234123412341235
+ validUntil: '2025-01-01'
+ alias: alias
+ ovPayToken:
+ - ovPayTokenId: 126
+ tokenTypeId: 1
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 1
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenTypeId: 1
+ xTat: hhe2830283
+ xBot: jdhd828033
+ alias: alias
+ lastDigits: '5674'
+ ovpasNumber: OV34568
+ tokenStatusId: 1
+ expirationDate: '2024-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 2
+ audit:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: '2023-10-20T17:05:52.000+02:00'
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ '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
+ post:
+ tags:
+ - ABTCustomers
+ summary: Create a customer profile
+ description: >-
+ Create a customer profile in the ABT database with status ACTIVE and
+ debtorStatus Inactive with a start date based on the timestamp of this
+ post call.
+
+ - Requested format for postal code:
+ - 0000AA
+ parameters: []
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfile'
+ examples:
+ minimumProfile:
+ value: {}
+ basicCustomerProfile:
+ value:
+ debtorStatusId: 2
+ person:
+ birthname: Jan
+ surname: Jansen
+ emailAddress: j.jansen@hatseflats.nl
+ fullCustomerProfile:
+ value:
+ customerPreference:
+ languageId: 1
+ debtorStatusId: 2
+ person:
+ birthname: Jan
+ surname: Jansen
+ prefix: dhr
+ suffix: jr
+ dateOfBirth: '1970-01-01'
+ emailAddress: j.jansen@hatseflats.nl
+ addresses:
+ - street: Laan van Meerdervoort
+ houseNumber: 5
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 1
+ - street: Beeklaan
+ houseNumber: 30
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 2
+ phones:
+ - number: '6123456789'
+ countryCode: '0031'
+ phoneTypeId: 1
+ isPreferred: true
+ - number: '7012345678'
+ countryCode: '0031'
+ phoneTypeId: 2
+ isPreferred: false
+ required: true
+ responses:
+ '201':
+ description: Successful created a customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileCustomerNumberResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidPostalCodeFormatForAddressCountryNLError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter for country validation (NL).
+ description: >-
+ ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match
+ input string \"2500 AA\
+ MissingRequiredParameterError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ object has missing required properties
+ ([\"addressTypeId\"])
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"id\
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ examples:
+ emailAddressAlreadyPresent:
+ value:
+ code: '409'
+ type: Conflict
+ message: emailAddress already exists.
+ description: ''
+ '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
+ /customers/{customerNumber}/customerpreferences:
+ patch:
+ tags:
+ - ABTCustomers
+ summary: Modify customer preference elements
+ description: Modify customer preference fields
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchCustomerPreferences'
+ examples:
+ PatchCustomerPreferences:
+ value:
+ customerPreference:
+ languageId: 2
+ responses:
+ '202':
+ description: Successful modified the customer preferences
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchCustomerPreferencesResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"languageId\
+ InvalidReferenceIdError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request: Update Or Delete failed as conflicted with
+ foreign Key constraint 'languageId'
+ '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
+ /customers/{customerNumber}:
+ patch:
+ tags:
+ - ABTCustomers
+ summary: Modify customer profile elements
+ description: Modify customer profile fields
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchCustomerProfile'
+ examples:
+ PatchCustomerProfile:
+ value:
+ debtorStatusId: 2
+ responses:
+ '202':
+ description: Successful modified the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchCustomerProfileResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"debtorStatusId\
+ '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
+ /customers/{customerNumber}/ovchipcards:
+ post:
+ tags:
+ - ABTCustomers
+ summary: Create a new OV chipcard for a customerProfile.
+ description: Create a new OV chipcard in the database for a given customer.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postOvChipCard'
+ examples:
+ postNewOvChipCard:
+ value:
+ ovChipCard:
+ chipCardNumber: 1234123412341234
+ validUntil: '2024-01-01'
+ alias: alias
+ responses:
+ '201':
+ description: Successful created an OV chipcard
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileOvChipCardResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ chipCardNumberInvalidTooSmall:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ numeric instance is lower than the required minimum
+ (minimum: 1000000000000000, found: 999999999999999)
+ chipCardNumberInvalidTooLarge:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ numeric instance is greater than the required maximum
+ (maximum: 9999999999999999, found: 10000000000000000)
+ '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
+ /customers/{customerNumber}/ovchipcards/{ovChipCardId}:
+ delete:
+ tags:
+ - ABTCustomers
+ summary: Delete a OV chipcard for a customerProfile.
+ description: Delete a OV chipcard in the database for a given customer.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: ovChipCardId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '202':
+ description: Deleted record successfully
+ '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
+ /customers/{customerNumber}/ovpaytokens:
+ get:
+ tags:
+ - ABTCustomers
+ summary: Get a OV paytoken for a customerProfile.
+ description: Get a new OV paytoken in the database for a given customer.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: ovPayTokenId
+ in: query
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: integer
+ - name: xbot
+ in: query
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: xtat
+ in: query
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: string
+ - name: ovPasNumber
+ in: query
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successfully retrieved an OVPay token
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/getCustomerProfileOvPayTokenResponse'
+ '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
+ post:
+ tags:
+ - ABTCustomers
+ summary: Create a new OV paytoken for a customerProfile.
+ description: Create a new OV paytoken in the database for a given customer.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postOvPayToken'
+ examples:
+ postNewOvPayTokenCard:
+ value:
+ ovPayToken:
+ tokenTypeId: 2
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 2
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ responses:
+ '201':
+ description: Successful created an OVPay token
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileOvPayTokenResponse'
+ '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
+ /customers/{customerNumber}/statuses:
+ post:
+ tags:
+ - ABTCustomers
+ summary: Create a new customer status for a customerProfile.
+ description: >-
+ Create a new customer status for a customerProfile. The call will do the
+ following in the given order: a new status will be created with
+ fromInclusive equal to the time of the call. ToInclusive in the old, now
+ historic, status will also be set equal to the time of the call, deeming
+ it 'not currently active'.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerStatus'
+ examples:
+ postNewStatus:
+ value:
+ customerStatus:
+ name: blocked
+ responses:
+ '201':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/defaultCustomerProfileResponse'
+ '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'
+ '422':
+ description: Unprocessable entity
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/422Response'
+ '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
+ /customers/{customerNumber}/persons:
+ patch:
+ tags:
+ - ABTCustomers
+ summary: Partial update customer person details
+ description: Partial update a customer person details in the ABT database
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchPerson'
+ examples:
+ updatePerson:
+ value:
+ person:
+ birthname: Jan
+ surname: Jansen
+ prefix: dhr
+ suffix: jr
+ dateOfBirth: '1970-01-01'
+ emailAddress: TEST@TEST1.NL
+ updatePersonBirthname:
+ value:
+ person:
+ birthname: Jan
+ updatePersonSurname:
+ value:
+ person:
+ surname: Jansen
+ updatePersonPrefix:
+ value:
+ person:
+ prefix: dhr
+ updatePersonSuffix:
+ value:
+ person:
+ suffix: jr
+ updatePersonDateOfBirth:
+ value:
+ person:
+ dateOfBirth: '1970-01-01'
+ updatePersonEmailAddress:
+ value:
+ person:
+ emailAddress: TEST@TEST1.NL
+ responses:
+ '202':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/defaultCustomerProfileResponse'
+ '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
+ /customers/{customerNumber}/ovpaytokens/{ovPayTokenId}:
+ delete:
+ tags:
+ - ABTCustomers
+ summary: Delete a OV PayToken for a customerProfile.
+ description: Delete a OV PayToken in the database for a given customer.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: ovPayTokenId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '202':
+ description: Deleted record successfully
+ '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
+ patch:
+ tags:
+ - ABTCustomers
+ summary: Partial update customer ovpaytokens
+ description: Partial update of a customer ovpaytokens in the ABT database
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: ovPayTokenId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchOvPayToken'
+ examples:
+ updateOvPayTokens:
+ value:
+ ovPayToken:
+ tokenTypeId: 2
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 2
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ updateOvPayTokenTypeId:
+ value:
+ ovPayToken:
+ tokenTypeId: 2
+ updateOvPayTokenXTat:
+ value:
+ ovPayToken:
+ xTat: twioq73033
+ updateOvPayTokenXBot:
+ value:
+ ovPayToken:
+ xBot: hjihwqui27
+ updateOvPayTokenAlias:
+ value:
+ ovPayToken:
+ alias: alias
+ updateOvPayTokenLastDigits:
+ value:
+ ovPayToken:
+ lastDigits: '5678'
+ updateOvPayTokenOvpasNumber:
+ value:
+ ovPayToken:
+ ovpasNumber: OV34567
+ updateOvPayTokenStatusId:
+ value:
+ ovPayToken:
+ tokenStatusId: 1
+ updateOvPayTokenExpirationDate:
+ value:
+ ovPayToken:
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ updateOvPayTokenReplacedByTokenId:
+ value:
+ ovPayToken:
+ replacedByTokenId: 1
+ responses:
+ '202':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/defaultCustomerProfileResponse'
+ '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
+ /customers/{customerNumber}/addresses:
+ post:
+ tags:
+ - ABTCustomers
+ summary: Create a single customer address
+ description: Create a single customer address in the ABT database
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postAddress'
+ examples:
+ addFullAddress:
+ value:
+ address:
+ street: Laan van Meerdervoort
+ houseNumber: 5
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 1
+ addMinimumAddress:
+ value:
+ address:
+ street: Laan van Meerdervoort
+ houseNumber: 5
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 1
+ responses:
+ '201':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileAddressResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidPostalCodeFormatForAddressCountryNLError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter for country validation (NL).
+ description: >-
+ ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match
+ input string \"2500 AA\
+ MissingRequiredParameterError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ object has missing required properties
+ ([\"addressTypeId\"])
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"id\
+ '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
+ /customers/{customerNumber}/phones:
+ post:
+ tags:
+ - ABTCustomers
+ summary: Create a single customer phonenumber
+ description: Create a single customer phonenumber in the ABT database
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPhone'
+ examples:
+ addPhone:
+ value:
+ phone:
+ number: '06123456789'
+ countryCode: '0031'
+ phoneTypeId: 1
+ isPreferred: true
+ responses:
+ '201':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfilePhoneResponse'
+ '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
+ /customers/{customerNumber}/addresses/{addressId}:
+ delete:
+ tags:
+ - ABTCustomers
+ summary: Delete a customer address
+ description: Delete a customer address from the ABT database
+ parameters:
+ - name: addressId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '202':
+ description: Deleted record successfully
+ '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
+ patch:
+ tags:
+ - ABTCustomers
+ summary: Partial update customer addresses
+ description: Partial update a customer address in the ABT database
+ parameters:
+ - name: addressId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchAddress'
+ examples:
+ updateAddress:
+ value:
+ address:
+ street: Laan van Meerdervoort
+ houseNumber: 5
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 2
+ updateStreet:
+ value:
+ address:
+ street: Nieuwe Parklaan
+ updateHouseNumber:
+ value:
+ address:
+ houseNumber: 10
+ updateHouseNumberSuffix:
+ value:
+ address:
+ houseNumberSuffix: C
+ updatePostalCode:
+ value:
+ address:
+ postalCode: 2597LG
+ updateCity:
+ value:
+ address:
+ city: Amsterdam
+ updateCountry:
+ value:
+ address:
+ country: UK
+ updateAddressTypeId:
+ value:
+ address:
+ addressTypeId: 1
+ responses:
+ '202':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/addressPatchOKResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidPostalCodeFormatForAddressCountryNLError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter for country validation (NL).
+ description: >-
+ ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match
+ input string \"2500 AA\
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"id\
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ '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
+ /customers/{customerNumber}/phones/{phoneId}:
+ delete:
+ tags:
+ - ABTCustomers
+ summary: Delete a customer phone
+ description: Delete a customer phone from the ABT database
+ parameters:
+ - name: phoneId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '202':
+ description: Deleted record successfully
+ '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
+ patch:
+ tags:
+ - ABTCustomers
+ summary: Partial update customer phones
+ description: Partial update a customer phone in the ABT database
+ parameters:
+ - name: phoneId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchPhone'
+ examples:
+ updatePhone:
+ value:
+ phone:
+ number: '06123456789'
+ countryCode: '0031'
+ phoneTypeId: 2
+ isPreferred: true
+ updatePhoneNumber:
+ value:
+ phone:
+ number: '06987654321'
+ updateCountryCode:
+ value:
+ phone:
+ countryCode: '0044'
+ updatePhoneTypeId:
+ value:
+ phone:
+ phoneTypeId: 2
+ updateisPreferred:
+ value:
+ phone:
+ isPreferred: true
+ responses:
+ '202':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phonePatchOKResponse'
+ '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'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ '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
+ /selfservice/customers:
+ get:
+ tags:
+ - ABTCustomersSelfService
+ summary: Search for customer profile
+ description: Search for a customer profile based on the sub element from JWT
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ responses:
+ '200':
+ description: Successful retrieved a customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/getCustomerProfile'
+ examples:
+ fullCustomerProfile:
+ value:
+ customerNumber: 1000001
+ debtorNumber: TEST001
+ vascustomerNumber: CST005
+ debtorStateId: 1
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: active
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: '2022-08-05 15:01:00.000'
+ - name: blocked
+ fromInclusive: '2022-08-05 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: Pieter
+ surname: De valen
+ prefix: dhr
+ suffix: De
+ dateOfBirth: '2002-10-29'
+ emailAddress: TEST@HTM.NL
+ address:
+ - addressId: 1
+ street: mystreet
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 0000AA
+ city: Den Haag
+ country: NL
+ addressType: Billing
+ - addressId: 2
+ street: mystreet 33
+ houseNumber: 1
+ houseNumberSuffix: null
+ postalCode: 4455CA
+ city: Den BOSCH
+ country: NL
+ addressType: Shipping
+ phone:
+ - phoneId: 1
+ number: '3112345678'
+ countryCode: NL
+ phoneType: TestNaam
+ isPreferred: true
+ - phoneId: 2
+ number: '333225588'
+ countryCode: ES
+ phoneType: TestNaam
+ isPreferred: false
+ ovChipCard:
+ - ovChipCardId: 1
+ chipCardNumber: 1234123412341234
+ validUntil: '2023-01-01'
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: 1234123412341235
+ validUntil: '2025-01-01'
+ alias: alias
+ ovPayToken:
+ - ovPayTokenId: 126
+ tokenTypeId: 1
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 1
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenTypeId: 1
+ xTat: hhe2830283
+ xBot: jdhd828033
+ alias: alias
+ lastDigits: '5674'
+ ovpasNumber: OV34568
+ tokenStatusId: 1
+ expirationDate: '2024-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 2
+ audit:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: '2023-10-20T17:05:52.000+02:00'
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ minimumCustomerProfile:
+ value:
+ customerNumber: 1000008
+ debtorNumber: null
+ debtorStateId: null
+ vascustomerNumber: null
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: active
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: null
+ surname: null
+ prefix: null
+ suffix: null
+ dateOfBirth: null
+ emailAddress: TEST@TEST1.NL
+ address: []
+ phone: []
+ ovChipCard: []
+ ovPayToken: []
+ audit: []
+ missingPersonDetailsCustomerProfile:
+ value:
+ emailAddress: TEST04@HTM.NL
+ customerNumber: 1000005
+ debtorNumber: TEST004
+ debtorStateId: 1
+ vascustomerNumber: CST008
+ customerPreference:
+ languageId: 1
+ customerStatus:
+ - name: inactive
+ fromInclusive: '2022-08-04 15:01:00.000'
+ toInclusive: null
+ person:
+ birthname: Sophie
+ surname: Haardenburg
+ prefix: Mw
+ suffix: null
+ dateOfBirth: '1955-09-05'
+ emailAddress: TEST@TEST1.NL
+ address: []
+ phone: []
+ ovChipCard:
+ - ovChipCardId: 1
+ chipCardNumber: 1234123412341234
+ validUntil: '2023-01-01'
+ alias: alias
+ - ovChipCardId: 2
+ chipCardNumber: 1234123412341235
+ validUntil: '2025-01-01'
+ alias: alias
+ ovPayToken:
+ - ovPayTokenId: 126
+ tokenTypeId: 1
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 1
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ - ovPayTokenId: 127
+ tokenTypeId: 1
+ xTat: hhe2830283
+ xBot: jdhd828033
+ alias: alias
+ lastDigits: '5674'
+ ovpasNumber: OV34568
+ tokenStatusId: 1
+ expirationDate: '2024-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 2
+ audit:
+ - auditTrailId: 1
+ customerProfileId: 1
+ action: insert
+ user: user
+ timestamp: '2023-10-20T17:05:52.000+02:00'
+ correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95
+ '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
+ post:
+ tags:
+ - ABTCustomersSelfService
+ summary: Create for customer profile
+ description: Create a customer profile based on the sub element from JWT
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfile'
+ examples:
+ minimumProfile:
+ value: {}
+ basicCustomerProfile:
+ value:
+ debtorStatusId: 2
+ person:
+ birthname: Jan
+ surname: Jansen
+ emailAddress: j.jansen@hatseflats.nl
+ fullCustomerProfile:
+ value:
+ customerPreference:
+ languageId: 1
+ debtorStatusId: 2
+ person:
+ birthname: Jan
+ surname: Jansen
+ prefix: dhr
+ suffix: jr
+ dateOfBirth: '1970-01-01'
+ emailAddress: j.jansen@hatseflats.nl
+ addresses:
+ - street: Laan van Meerdervoort
+ houseNumber: 5
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 1
+ - street: Beeklaan
+ houseNumber: 30
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 2
+ phones:
+ - number: '6123456789'
+ countryCode: '0031'
+ phoneTypeId: 1
+ isPreferred: true
+ - number: '7012345678'
+ countryCode: '0031'
+ phoneTypeId: 2
+ isPreferred: false
+ required: true
+ responses:
+ '201':
+ description: Successful created a customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileCustomerNumberResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ examples:
+ emailAddressAlreadyPresent:
+ value:
+ code: '409'
+ type: Conflict
+ message: emailAddress already exists.
+ description: ''
+ '500':
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ /selfservice/customers/{customerNumber}:
+ patch:
+ tags:
+ - ABTCustomersSelfService
+ summary: Modify customer profile elements
+ description: Modify customer profile fields
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchCustomerProfile'
+ examples:
+ PatchCustomerProfile:
+ value:
+ debtorStatusId: 2
+ responses:
+ '202':
+ description: Successful modified the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchCustomerProfileResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"debtorStatusId\
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /selfservice/customers/{customerNumber}/customerpreferences:
+ patch:
+ tags:
+ - ABTCustomersSelfService
+ summary: Modify customer preference elements
+ description: Modify customer preference fields
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchCustomerPreferences'
+ examples:
+ PatchCustomerPreferences:
+ value:
+ customerPreference:
+ languageId: 2
+ responses:
+ '202':
+ description: Successful modified the customer preferences
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchCustomerPreferencesResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"languageId\
+ '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
+ /selfservice/customers/{customerNumber}/ovchipcards:
+ post:
+ tags:
+ - ABTCustomersSelfService
+ summary: Create a new OV chipcard for a customerProfile.
+ description: Create a new OV chipcard in the database for a given customer.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postOvChipCard'
+ examples:
+ postNewOvChipCard:
+ value:
+ ovChipCard:
+ chipCardNumber: 1234123412341234
+ validUntil: '2024-01-01'
+ alias: alias
+ responses:
+ '201':
+ description: Successful created an OV chipcard
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileOvChipCardResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ chipCardNumberInvalidTooSmall:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ numeric instance is lower than the required minimum
+ (minimum: 1000000000000000, found: 999999999999999)
+ chipCardNumberInvalidTooLarge:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ numeric instance is greater than the required maximum
+ (maximum: 9999999999999999, found: 10000000000000000)
+ '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
+ /selfservice/customers/{customerNumber}/ovchipcards/{ovChipCardId}:
+ delete:
+ tags:
+ - ABTCustomersSelfService
+ summary: Delete a OV chipcard for a customerProfile.
+ description: Delete a OV chipcard in the database for a given customer.
+ parameters:
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: ovChipCardId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '202':
+ description: Deleted record successfully
+ '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
+ /selfservice/customers/{customerNumber}/ovpaytokens:
+ post:
+ tags:
+ - ABTCustomersSelfService
+ summary: Create a new OV paytoken for a customerProfile.
+ description: Create a new OV paytoken in the database for a given customer.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postOvPayToken'
+ examples:
+ postNewOvPayTokenCard:
+ value:
+ ovPayToken:
+ tokenTypeId: 2
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 2
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ responses:
+ '201':
+ description: Successful created an OV paytoken
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileOvPayTokenResponse'
+ '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
+ /selfservice/customers/{customerNumber}/statuses:
+ post:
+ tags:
+ - ABTCustomersSelfService
+ summary: Create a new customer status for a customerProfile.
+ description: >-
+ Create a new customer status for a customerProfile. The call will do the
+ following in the given order: a new status will be created with
+ fromInclusive equal to the time of the call. ToInclusive in the old, now
+ historic, status will also be set equal to the time of the call, deeming
+ it 'not currently active'.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerStatus'
+ examples:
+ postNewStatus:
+ value:
+ customerStatus:
+ name: blocked
+ responses:
+ '201':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileCustomerNumberResponse'
+ '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'
+ '422':
+ description: Unprocessable entity
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/422Response'
+ '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
+ /selfservice/customers/{customerNumber}/persons:
+ patch:
+ tags:
+ - ABTCustomersSelfService
+ summary: Partial update customer person details
+ description: Partial update a customer person details in the ABT database
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchPerson'
+ examples:
+ updatePerson:
+ value:
+ person:
+ birthname: Jan
+ surname: Jansen
+ prefix: dhr
+ suffix: jr
+ dateOfBirth: '1970-01-01'
+ emailAddress: TEST@TEST1.NL
+ updatePersonBirthname:
+ value:
+ person:
+ birthname: Jan
+ updatePersonSurname:
+ value:
+ person:
+ surname: Jansen
+ updatePersonPrefix:
+ value:
+ person:
+ prefix: dhr
+ updatePersonSuffix:
+ value:
+ person:
+ suffix: jr
+ updatePersonDateOfBirth:
+ value:
+ person:
+ dateOfBirth: '1970-01-01'
+ updatePersonEmailAddress:
+ value:
+ person:
+ emailAddress: TEST@TEST1.NL
+ responses:
+ '202':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/defaultCustomerProfileResponse'
+ '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
+ /selfservice/customers/{customerNumber}/ovpaytokens/{ovPayTokenId}:
+ delete:
+ tags:
+ - ABTCustomersSelfService
+ summary: Delete a OV PayToken for a customerProfile.
+ description: Delete a OV PayToken in the database for a given customer.
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: ovPayTokenId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '202':
+ description: Deleted record successfully
+ '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
+ patch:
+ tags:
+ - ABTCustomersSelfService
+ summary: Partial update customer ovpaytokens
+ description: Partial update of a customer ovpaytokens in the ABT database
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: ovPayTokenId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchOvPayToken'
+ examples:
+ updateOvPayTokens:
+ value:
+ ovPayToken:
+ tokenTypeId: 2
+ xTat: twioq73033
+ xBot: hjihwqui27
+ alias: alias
+ lastDigits: '5678'
+ ovpasNumber: OV34567
+ tokenStatusId: 2
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ replacedByTokenId: 1
+ updateOvPayTokenTypeId:
+ value:
+ ovPayToken:
+ tokenTypeId: 2
+ updateOvPayTokenXTat:
+ value:
+ ovPayToken:
+ xTat: twioq73033
+ updateOvPayTokenXBot:
+ value:
+ ovPayToken:
+ xBot: hjihwqui27
+ updateOvPayTokenAlias:
+ value:
+ ovPayToken:
+ alias: alias
+ updateOvPayTokenLastDigits:
+ value:
+ ovPayToken:
+ lastDigits: '5678'
+ updateOvPayTokenOvpasNumber:
+ value:
+ ovPayToken:
+ ovpasNumber: OV34567
+ updateOvPayTokenStatusId:
+ value:
+ ovPayToken:
+ tokenStatusId: 1
+ updateOvPayTokenExpirationDate:
+ value:
+ ovPayToken:
+ expirationDate: '2025-04-20T17:05:52.000+02:00'
+ updateOvPayTokenReplacedByTokenId:
+ value:
+ ovPayToken:
+ replacedByTokenId: 1
+ responses:
+ '202':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/defaultCustomerProfileResponse'
+ '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
+ /selfservice/customers/{customerNumber}/addresses:
+ post:
+ tags:
+ - ABTCustomersSelfService
+ summary: Create a single customer address
+ description: Create a single customer address in the ABT database
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postAddress'
+ examples:
+ addFullAddress:
+ value:
+ address:
+ street: Laan van Meerdervoort
+ houseNumber: 5
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 1
+ addMinimumAddress:
+ value:
+ address:
+ street: Laan van Meerdervoort
+ houseNumber: 5
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 1
+ responses:
+ '201':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfileAddressResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidPostalCodeFormatForAddressCountryNLError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter for country validation (NL).
+ description: >-
+ ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match
+ input string \"2500 AA\
+ MissingRequiredParameterError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ object has missing required properties
+ ([\"addressTypeId\"])
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"id\
+ '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
+ /selfservice/customers/{customerNumber}/phones:
+ post:
+ tags:
+ - ABTCustomersSelfService
+ summary: Create a single customer phonenumber
+ description: Create a single customer phonenumber in the ABT database
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPhone'
+ examples:
+ addPhone:
+ value:
+ phone:
+ number: '06123456789'
+ countryCode: '0031'
+ phoneTypeId: 1
+ isPreferred: true
+ responses:
+ '201':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postCustomerProfilePhoneResponse'
+ '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
+ /selfservice/customers/{customerNumber}/addresses/{addressId}:
+ delete:
+ tags:
+ - ABTCustomersSelfService
+ summary: Delete a customer address
+ description: Delete a customer address from the ABT database
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: addressId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '202':
+ description: Deleted record successfully
+ '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
+ patch:
+ tags:
+ - ABTCustomersSelfService
+ summary: Partial update customer addresses
+ description: Partial update a customer address in the ABT database
+ parameters:
+ - name: addressId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchAddress'
+ examples:
+ updateAddress:
+ value:
+ address:
+ street: Laan van Meerdervoort
+ houseNumber: 5
+ houseNumberSuffix: B
+ postalCode: 2500AA
+ city: Den Haag
+ country: NL
+ addressTypeId: 2
+ updateStreet:
+ value:
+ address:
+ street: Nieuwe Parklaan
+ updateHouseNumber:
+ value:
+ address:
+ houseNumber: 10
+ updateHouseNumberSuffix:
+ value:
+ address:
+ houseNumberSuffix: C
+ updatePostalCode:
+ value:
+ address:
+ postalCode: 2597LG
+ updateCity:
+ value:
+ address:
+ city: Amsterdam
+ updateCountry:
+ value:
+ address:
+ country: UK
+ updateAddressTypeId:
+ value:
+ address:
+ addressTypeId: 1
+ updateIsPreferred:
+ value:
+ address:
+ isPreferred: false
+ responses:
+ '202':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/addressPatchOKResponse'
+ '400':
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ examples:
+ InvalidPostalCodeFormatForAddressCountryNLError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter for country validation (NL).
+ description: >-
+ ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match
+ input string \"2500 AA\
+ InvalidDataTypeError:
+ value:
+ code: '400'
+ type: Bad Request - Input parameters
+ message: Invalid input parameter.
+ description: >-
+ Bad Request - please verify the value for the following
+ field \"id\
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ '404':
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ '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
+ /selfservice/customers/{customerNumber}/phones/{phoneId}:
+ delete:
+ tags:
+ - ABTCustomersSelfService
+ summary: Delete a customer phone
+ description: Delete a customer phone from the ABT database
+ parameters:
+ - name: X-HTM-JWT-AUTH-HEADER
+ in: header
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ - name: phoneId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ responses:
+ '202':
+ description: Deleted record successfully
+ '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
+ patch:
+ tags:
+ - ABTCustomersSelfService
+ summary: Partial update customer phones
+ description: Partial update a customer phone in the ABT database
+ parameters:
+ - name: phoneId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ - name: customerNumber
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/patchPhone'
+ examples:
+ updatePhone:
+ value:
+ phone:
+ number: '06123456789'
+ countryCode: '0031'
+ phoneTypeId: 2
+ isPreferred: true
+ updatePhoneNumber:
+ value:
+ phone:
+ number: '06987654321'
+ updateCountryCode:
+ value:
+ phone:
+ countryCode: '0044'
+ updatePhoneTypeId:
+ value:
+ phone:
+ phoneTypeId: 2
+ updateisPreferred:
+ value:
+ phone:
+ isPreferred: true
+ responses:
+ '202':
+ description: Successful updated the customer profile
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phonePatchOKResponse'
+ '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'
+ '409':
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ '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
+components:
+ schemas:
+ audit:
+ type: object
+ properties:
+ auditTrailId:
+ type: integer
+ customerProfileId:
+ type: integer
+ action:
+ type: string
+ user:
+ type: string
+ timestamp:
+ type: string
+ format: datetime
+ correlationId:
+ type: string
+ ovPayToken:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ tokenTypeId:
+ type: integer
+ xTat:
+ type: string
+ xBot:
+ type: string
+ alias:
+ type: string
+ lastDigits:
+ type: integer
+ ovpasNumber:
+ type: string
+ tokenStatusId:
+ type: integer
+ expirationDate:
+ type: string
+ replacedByTokenId:
+ type: integer
+ getOvChipCard:
+ type: object
+ properties:
+ ovChipCardId:
+ type: integer
+ chipCardNumber:
+ type: integer
+ validUntil:
+ type: string
+ format: date
+ alias:
+ type: string
+ getCustomerStatus:
+ type: object
+ properties:
+ name:
+ type: string
+ fromInclusive:
+ type: string
+ format: date
+ toInclusive:
+ type: string
+ format: date
+ getPerson:
+ type: object
+ properties:
+ birthname:
+ type: string
+ surname:
+ type: string
+ prefix:
+ type: string
+ suffix:
+ type: string
+ dateOfBirth:
+ type: string
+ format: date
+ emailAddress:
+ type: string
+ format: email
+ address:
+ type: array
+ items:
+ $ref: '#/components/schemas/getAddress'
+ phone:
+ type: array
+ items:
+ $ref: '#/components/schemas/getPhone'
+ getAddress:
+ type: object
+ properties:
+ addressId:
+ type: integer
+ street:
+ type: string
+ houseNumber:
+ type: integer
+ houseNumberSuffix:
+ type: string
+ postalCode:
+ type: string
+ city:
+ type: string
+ country:
+ type: string
+ addressType:
+ type: string
+ getPhone:
+ type: object
+ properties:
+ phoneId:
+ type: integer
+ number:
+ type: string
+ countryCode:
+ type: string
+ phoneType:
+ type: string
+ isPreferred:
+ type: boolean
+ getCustomerPreference:
+ type: object
+ properties:
+ languageId:
+ type: integer
+ getCustomerProfileList:
+ type: object
+ properties:
+ Entries:
+ type: array
+ items:
+ $ref: '#/components/schemas/getCustomerProfile'
+ getCustomerProfile:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ debtorNumber:
+ type: integer
+ debtorStateId:
+ type: integer
+ vascustomerNumber:
+ type: integer
+ customerPreference:
+ $ref: '#/components/schemas/getCustomerPreference'
+ customerStatus:
+ type: array
+ items:
+ $ref: '#/components/schemas/getCustomerStatus'
+ person:
+ $ref: '#/components/schemas/getPerson'
+ ovChipCard:
+ type: array
+ items:
+ $ref: '#/components/schemas/getOvChipCard'
+ ovPayToken:
+ type: array
+ items:
+ $ref: '#/components/schemas/ovPayToken'
+ audit:
+ type: array
+ items:
+ $ref: '#/components/schemas/audit'
+ directDebitMandatePostEntity:
+ required:
+ - billingInformationId
+ - created
+ - directDebitMandateTypeName
+ - mandateReference
+ type: object
+ properties:
+ directDebitMandateTypeName:
+ type: string
+ billingInformationId:
+ type: integer
+ mandateReference:
+ type: string
+ directDebitMandatePost:
+ type: object
+ properties:
+ directDebitMandate:
+ $ref: '#/components/schemas/directDebitMandatePostEntity'
+ directDebitMandatePatchEntity:
+ type: object
+ properties:
+ directDebitMandateTypeName:
+ type: string
+ billingInformationId:
+ type: integer
+ mandateReference:
+ type: string
+ mandateState:
+ type: string
+ enum:
+ - SIGNED
+ - CANCELLED
+ - PREPARED
+ directDebitMandatePatch:
+ type: object
+ properties:
+ directDebitMandate:
+ $ref: '#/components/schemas/directDebitMandatePatchEntity'
+ directDebitMandateGETEntity:
+ type: object
+ properties:
+ directDebitMandateId:
+ type: integer
+ directDebitMandateTypeId:
+ type: integer
+ billingInformationId:
+ type: integer
+ created:
+ type: string
+ mandateReference:
+ type: string
+ mandateState:
+ type: string
+ updateTimestamp:
+ type: string
+ billingInformationGETEntity:
+ required:
+ - alias
+ - ascription
+ - bic
+ - billingInformationId
+ - iban
+ - created
+ type: object
+ properties:
+ billingInformationId:
+ type: integer
+ iban:
+ type: string
+ bic:
+ type: string
+ ascription:
+ type: string
+ alias:
+ type: string
+ created:
+ type: string
+ billingInformationPostEntity:
+ required:
+ - alias
+ - ascription
+ - billingAddressId
+ - iban
+ type: object
+ properties:
+ iban:
+ type: string
+ bic:
+ type: string
+ ascription:
+ type: string
+ alias:
+ type: string
+ created:
+ type: string
+ billingInformationPost:
+ type: object
+ properties:
+ billingInformation:
+ $ref: '#/components/schemas/billingInformationPostEntity'
+ billingInformationPatchEntity:
+ type: object
+ properties:
+ iban:
+ type: string
+ bic:
+ type: string
+ ascription:
+ type: string
+ alias:
+ type: string
+ billingInformationPatch:
+ type: object
+ properties:
+ billingInformation:
+ $ref: '#/components/schemas/billingInformationPatchEntity'
+ getCustomerProfileFinancials:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ billingInformation:
+ type: array
+ items:
+ $ref: '#/components/schemas/billingInformationGETEntity'
+ directDebitMandate:
+ type: array
+ items:
+ $ref: '#/components/schemas/directDebitMandateGETEntity'
+ customerPreferencesEntity:
+ type: object
+ properties:
+ languageId:
+ type: string
+ postCustomerProfile:
+ type: object
+ properties:
+ debtorStatusId:
+ type: integer
+ customerPreference:
+ $ref: '#/components/schemas/customerPreferencesEntity'
+ person:
+ $ref: '#/components/schemas/personEntity'
+ addresses:
+ type: array
+ items:
+ $ref: '#/components/schemas/addressPostEntity'
+ phones:
+ type: array
+ items:
+ $ref: '#/components/schemas/phonePostEntity'
+ postCustomerStatusEntity:
+ type: object
+ properties:
+ name:
+ type: string
+ postCustomerStatus:
+ type: object
+ properties:
+ customerStatus:
+ $ref: '#/components/schemas/postCustomerStatusEntity'
+ postOvChipCardEntity:
+ required:
+ - chipCardNumber
+ type: object
+ properties:
+ chipCardNumber:
+ type: integer
+ validUntil:
+ type: string
+ format: date
+ alias:
+ type: string
+ patchCustomerProfile:
+ type: object
+ properties:
+ debtorStatusId:
+ type: integer
+ patchCustomerPreferencesEntity:
+ type: object
+ properties:
+ languageId:
+ type: string
+ patchCustomerPreferences:
+ type: object
+ properties:
+ customerPreference:
+ $ref: '#/components/schemas/patchCustomerPreferencesEntity'
+ postOvChipCard:
+ type: object
+ properties:
+ ovChipCard:
+ $ref: '#/components/schemas/postOvChipCardEntity'
+ postOvPayToken:
+ required:
+ - alias
+ - lastDigits
+ - tokenTypeId
+ - xBot
+ - xTat
+ type: object
+ properties:
+ ovPayToken:
+ type: object
+ properties:
+ tokenTypeId:
+ type: string
+ xTat:
+ type: string
+ xBot:
+ type: string
+ alias:
+ type: string
+ lastDigits:
+ type: integer
+ ovpasNumber:
+ type: string
+ tokenStatusId:
+ type: integer
+ expirationDate:
+ type: string
+ replacedByTokenId:
+ type: integer
+ ovPayTokenEntity:
+ type: object
+ properties:
+ tokenTypeId:
+ type: string
+ xTat:
+ type: string
+ xBot:
+ type: string
+ alias:
+ type: string
+ lastDigits:
+ type: integer
+ ovpasNumber:
+ type: string
+ tokenStatusId:
+ type: integer
+ expirationDate:
+ type: string
+ replacedByTokenId:
+ type: integer
+ patchOvPayToken:
+ type: object
+ properties:
+ ovPayToken:
+ $ref: '#/components/schemas/ovPayTokenEntity'
+ patchPerson:
+ type: object
+ properties:
+ person:
+ $ref: '#/components/schemas/personEntity'
+ patchAddress:
+ type: object
+ properties:
+ address:
+ $ref: '#/components/schemas/addressPatchEntity'
+ patchPhone:
+ type: object
+ properties:
+ phone:
+ $ref: '#/components/schemas/phonePatchEntity'
+ postAddress:
+ type: object
+ properties:
+ address:
+ $ref: '#/components/schemas/addressPostEntity'
+ postPhone:
+ type: object
+ properties:
+ phone:
+ $ref: '#/components/schemas/phonePostEntity'
+ personEntity:
+ type: object
+ properties:
+ birthname:
+ type: string
+ surname:
+ type: string
+ prefix:
+ type: string
+ suffix:
+ type: string
+ dateOfBirth:
+ type: string
+ format: date
+ emailAddress:
+ type: string
+ addressPostEntity:
+ required:
+ - addressTypeId
+ - city
+ - country
+ - houseNumber
+ - postalCode
+ - street
+ type: object
+ properties:
+ street:
+ type: string
+ houseNumber:
+ type: integer
+ houseNumberSuffix:
+ type: string
+ postalCode:
+ type: string
+ city:
+ type: string
+ country:
+ type: string
+ addressTypeId:
+ type: integer
+ addressPatchEntity:
+ type: object
+ properties:
+ street:
+ type: string
+ houseNumber:
+ type: integer
+ houseNumberSuffix:
+ type: string
+ postalCode:
+ type: string
+ city:
+ type: string
+ country:
+ type: string
+ addressTypeId:
+ type: integer
+ phonePostEntity:
+ required:
+ - countryCode
+ - number
+ - phoneTypeId
+ type: object
+ properties:
+ number:
+ type: string
+ countryCode:
+ type: string
+ phoneTypeId:
+ type: integer
+ isPreferred:
+ type: boolean
+ phonePatchEntity:
+ type: object
+ properties:
+ number:
+ type: string
+ countryCode:
+ type: string
+ phoneTypeId:
+ type: integer
+ isPreferred:
+ type: boolean
+ defaultCustomerProfileResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ phonePatchOKResponse:
+ type: object
+ properties:
+ id:
+ type: integer
+ example: 1
+ addressPatchOKResponse:
+ type: object
+ properties:
+ id:
+ type: integer
+ example: 1
+ postCustomerProfileCustomerNumberResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ postCustomerProfileAddressResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ addressId:
+ type: integer
+ example: 1
+ postCustomerProfilePhoneResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ phoneId:
+ type: integer
+ example: 1
+ postCustomerProfileBillingInformationResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ billingInformationId:
+ type: integer
+ example: 1
+ postCustomerProfileDirectDebitMandateResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ directDebitMandateId:
+ type: integer
+ example: 1
+ postCustomerProfileOvChipCardResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ ovChipCardId:
+ type: integer
+ example: 1
+ patchCustomerProfileResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ patchCustomerPreferencesResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ ovPayTokenGetEntity:
+ type: object
+ properties:
+ ovPayTokenId:
+ type: integer
+ example: 1
+ tokenTypeId:
+ type: integer
+ example: 1
+ xTat:
+ type: string
+ example: 0044831b-8e80c-4f82-r989a-8d85ee1996
+ xBot:
+ type: string
+ example: 0044831b-8e80c-4f82-r989a-8d85ee1996
+ lastDigits:
+ type: string
+ example: '0001'
+ ovpasNumber:
+ type: integer
+ example: 1
+ alias:
+ type: string
+ example: alias
+ tokenStatusId:
+ type: integer
+ expirationDate:
+ type: string
+ replacedByTokenId:
+ type: integer
+ getCustomerProfileOvPayTokenResponse:
+ type: object
+ properties:
+ ovPayToken:
+ type: array
+ items:
+ $ref: '#/components/schemas/ovPayTokenGetEntity'
+ postCustomerProfileOvPayTokenResponse:
+ type: object
+ properties:
+ ovPaytoken:
+ type: object
+ example: 10000001
+ ovPayTokenId:
+ type: integer
+ example: 1
+ patchCustomerProfileCustomerNumberResponse:
+ type: object
+ properties:
+ customerNumber:
+ type: integer
+ example: 10000001
+ 400Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '400'
+ type:
+ type: string
+ message:
+ type: string
+ example: Bad Request
+ description:
+ type: string
+ example: >-
+ 'Bad Request: Input parameters missing! Please fill in at least 1
+ valid input parameter.
+ 401Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '900901'
+ type:
+ type: string
+ message:
+ type: string
+ example: Invalid Credentials
+ description:
+ type: string
+ example: >-
+ Invalid Credentials. Make sure you have provided the correct
+ security credentials
+ 404Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '404'
+ type:
+ type: string
+ example: Status report
+ message:
+ type: string
+ example: Not Found
+ description:
+ type: string
+ example: The requested resource is not available.
+ 409Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '409'
+ type:
+ type: string
+ example: Conflict
+ message:
+ type: string
+ example: Entry already exists
+ description:
+ type: string
+ 422Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '422'
+ type:
+ type: string
+ example: Unprocessable entity
+ message:
+ type: string
+ example: >-
+ Forbidden state transition requested! From Active to Cleared not
+ allowed.
+ description:
+ type: string
+ 500Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '500'
+ type:
+ type: string
+ message:
+ type: string
+ example: Internal Server Error
+ description:
+ type: string
+ securitySchemes:
+ default:
+ type: oauth2
+ flows:
+ implicit:
+ authorizationUrl: https://services.acc.api.htm.nl/authorize
+ scopes: {}
diff --git a/src/openapi/customers/customers_reference-crud.yaml b/src/openapi/customers/customers_reference-crud.yaml
new file mode 100644
index 0000000..e3c5a7e
--- /dev/null
+++ b/src/openapi/customers/customers_reference-crud.yaml
@@ -0,0 +1,888 @@
+openapi: 3.0.1
+info:
+ title: ABTCustomerReference
+ version: '1.0'
+servers:
+ - url: https://services.acc.api.htm.nl/abt/customerreference/1.0
+security:
+ - default: []
+tags:
+ - name: ABTCustomerReference
+paths:
+ /directdebitmandatetype:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of direct debit mandate types
+ description: gives list of direct debit mandate types
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of direct debit mandate types
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/directDebitMandateTypes'
+ '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
+ /phonetype:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of phone types
+ description: gives list of phone types
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of phoneTypes
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phoneTypes'
+ '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
+ post:
+ tags:
+ - ABTCustomerReference
+ summary: Create a phone type
+ description: Create a phone type with a specific value
+ parameters: []
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phoneType'
+ required: true
+ responses:
+ '201':
+ description: Successful created a new phone 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
+ /phonetype/{phoneTypeId}:
+ put:
+ tags:
+ - ABTCustomerReference
+ summary: Update a phone type
+ description: Update an existing phone type with a specific value
+ parameters:
+ - name: phoneTypeId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ format: integer
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/phoneType'
+ required: true
+ responses:
+ '202':
+ description: Successful updated an existing a phone 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 phone type
+ description: Remove an existing phone type with a specific value
+ parameters:
+ - name: phoneTypeId
+ in: path
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: integer
+ format: integer
+ responses:
+ '202':
+ description: Successful removed a phone 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
+ /addresstype:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of address types
+ description: gives list of address types
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of addressTypes
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/addressTypes'
+ '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
+ /customerstatus:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of customer status
+ description: gives list of customer status
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of customer status
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/customerStatus'
+ example:
+ Entries:
+ - customerStatusId: 1
+ name: Inactive
+ - customerStatusId: 2
+ name: Active
+ - customerStatusId: 3
+ name: Blocked
+ - customerStatusId: 4
+ name: Frozen
+ - customerStatusId: 5
+ name: Cleared
+ '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
+ /tokentype:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of token types
+ description: gives list of token types
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of customer status
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/tokenType'
+ example:
+ Entries:
+ - tokenTypeId: 1
+ name: Debit card
+ - tokenTypeId: 2
+ name: Credit card
+ - tokenTypeId: 3
+ name: OVPas physical
+ - tokenTypeId: 4
+ name: OVPas digital
+ '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
+ /customerreferences:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of all possible customer reference values
+ description: gives list of all possible customer reference values availbale
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of all possible customer reference values
+ content:
+ application/json:
+ schema:
+ allOf:
+ - $ref: '#/components/schemas/customerReferences'
+ example:
+ Entries:
+ phoneTypes:
+ - name: mobile
+ id: 1
+ - name: fixed line
+ id: 2
+ addressTypes:
+ - name: home
+ id: 1
+ - name: office
+ id: 2
+ customerStatuses:
+ - name: active
+ id: 1
+ - name: blocked
+ id: 2
+ - name: inactive
+ id: 3
+ - name: new
+ id: 4
+ tokenTypes:
+ - name: Debit card
+ id: 1
+ - name: Credit card
+ id: 2
+ - name: OVPas physical
+ id: 3
+ - name: OVPas digital
+ id: 4
+ directDebitMandateTypes:
+ - name: Paper Contract
+ id: 1
+ - name: PIN transaction
+ id: 2
+ tokenStatuses:
+ - name: Expired
+ id: 1
+ - name: Active
+ id: 2
+ - name: Replaced
+ id: 3
+ - name: Inactive
+ id: 4
+ - name: Suspended
+ id: 5
+ - name: Removed by customer
+ id: 6
+ debtorStatuses:
+ - name: Inactive
+ id: 1
+ - name: Active
+ id: 2
+ languages:
+ - id: 1
+ name: Nederlands
+ ietfCode: nl-Nl
+ iso639Code: nl
+ - id: 2
+ name: English
+ ietfCode: en-US
+ iso639Code: en
+ '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
+ /tokenstatus:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of all token status
+ description: gives list of all token statuses
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of customer status
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/language'
+ example:
+ Entries:
+ - tokenStatusId: 1
+ name: Expired
+ - tokenStatusId: 2
+ name: Active
+ - tokenStatusId: 3
+ name: Replaced
+ - tokenStatusId: 4
+ name: Inactive
+ - tokenStatusId: 5
+ name: Suspended
+ - tokenStatusId: 6
+ name: Removed by customer
+ '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
+ /language:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of all languages
+ description: gives list of all languages
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of languages
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/language'
+ example:
+ Entries:
+ - languageId: 1
+ name: Expired
+ ietfCode: nl-NL
+ iso639Code: nl
+ - languageId: 2
+ name: Expired
+ ietfCode: en-US
+ iso639Code: en
+ '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
+ /debtorstatus:
+ get:
+ tags:
+ - ABTCustomerReference
+ summary: List of all debtorstatuses
+ description: gives list of all debtorstatuses
+ parameters: []
+ responses:
+ '200':
+ description: Successful retrieved list of debtorstatuses
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/tokenStatus'
+ example:
+ Entries:
+ - debtorStatusId: 1
+ name: Inactive
+ - debtorStatusId: 2
+ name: Active
+ '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
+components:
+ schemas:
+ directDebitMandateTypeList:
+ type: array
+ items:
+ properties:
+ directDebitMandateTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: name
+ directDebitMandateType:
+ properties:
+ name:
+ type: string
+ example: name
+ id:
+ type: integer
+ example: 1
+ directDebitMandateTypes:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/directDebitMandateTypeList'
+ phoneType:
+ properties:
+ name:
+ type: string
+ example: name
+ phoneTypeIdList:
+ type: array
+ items:
+ properties:
+ phoneTypeId:
+ type: integer
+ example: 123
+ name:
+ type: string
+ example: name
+ phoneTypes:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/phoneTypeIdList'
+ addressType:
+ properties:
+ name:
+ type: string
+ example: name
+ addressTypeIdList:
+ type: array
+ items:
+ properties:
+ addressTypeId:
+ type: integer
+ example: 123
+ name:
+ type: string
+ example: name
+ addressTypes:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/addressTypeIdList'
+ customerStatuses:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/customerStatusIdList'
+ customerStatusIdList:
+ type: array
+ items:
+ properties:
+ customerStatusId:
+ type: integer
+ name:
+ type: string
+ customerStatus:
+ properties:
+ name:
+ type: string
+ example: name
+ tokenTypes:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/customerStatusIdList'
+ tokenTypeIdList:
+ type: array
+ items:
+ properties:
+ tokenTypeId:
+ type: integer
+ name:
+ type: string
+ tokenType:
+ properties:
+ name:
+ type: string
+ example: name
+ tokenStatuses:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/customerStatusIdList'
+ tokenStatusIdList:
+ type: array
+ items:
+ properties:
+ tokenStatusId:
+ type: integer
+ name:
+ type: string
+ tokenStatus:
+ properties:
+ tokenStatusId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: name
+ debtorStatus:
+ properties:
+ debtorStatusId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: name
+ language:
+ properties:
+ languageId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: name
+ ietfCode:
+ type: string
+ example: nl-NL
+ iso639Code:
+ type: string
+ example: nl
+ customerReferences:
+ type: object
+ properties:
+ Entries:
+ oneOf:
+ - $ref: '#/components/schemas/addressType'
+ - $ref: '#/components/schemas/phoneType'
+ - $ref: '#/components/schemas/customerStatus'
+ - $ref: '#/components/schemas/tokenType'
+ - $ref: '#/components/schemas/directDebitMandateType'
+ - $ref: '#/components/schemas/tokenStatus'
+ 400Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '400'
+ type:
+ type: string
+ message:
+ type: string
+ example: Bad Request
+ description:
+ type: string
+ example: '''2023-02-01 00:00:00'' is not a valid Datetime'
+ 401Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '900901'
+ type:
+ type: string
+ message:
+ type: string
+ example: Invalid Credentials
+ description:
+ type: string
+ example: >-
+ Invalid Credentials. Make sure you have provided the correct
+ security credentials
+ 404Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '404'
+ type:
+ type: string
+ example: Status report
+ message:
+ type: string
+ example: Not Found
+ description:
+ type: string
+ example: The requested resource is not available.
+ 404ResponseId:
+ type: object
+ properties:
+ error:
+ type: string
+ example: 'No record found for id: 5'
+ 500Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: '500'
+ type:
+ type: string
+ message:
+ type: string
+ example: Internal Server Error
+ description:
+ type: string
+ securitySchemes:
+ default:
+ type: oauth2
+ flows:
+ implicit:
+ authorizationUrl: https://services.dev.api.htm.nl/authorize
+ scopes: {}
diff --git a/src/openapi/customers/notifications-crud.yaml b/src/openapi/customers/notifications-crud.yaml
new file mode 100644
index 0000000..ecf0d31
--- /dev/null
+++ b/src/openapi/customers/notifications-crud.yaml
@@ -0,0 +1,1200 @@
+openapi: "3.0.3"
+info:
+ title: ABT Notifications CRUD APIs
+ version: "1.0"
+ description: CRUD APIs for ABT Notification tables. These are NOT the functional APIs from Service Engine.
+servers:
+ - url: https://services.acc.api.htm.nl/abt/notifications/1.0
+paths:
+ /notificationsubscriptions:
+ get:
+ summary: Find one or more notification subscriptions
+ tags:
+ - Notification Subscriptions
+ parameters:
+ - name: notificationSubscriptionId
+ in: query
+ required: false
+ schema:
+ type: string
+ format: uuid
+ description: Filter by notification subscription ID
+ - name: notificationCategoryId
+ in: query
+ required: false
+ schema:
+ type: integer
+ description: Filter by notification category ID
+ - name: customerProfileId
+ in: query
+ required: false
+ schema:
+ type: integer
+ description: Filter by customer profile ID
+ - name: isCurrentlyActive
+ in: query
+ required: false
+ schema:
+ type: boolean
+ description: Filters if most recent subscription active is active/inactive
+ - name: activityLimit
+ in: query
+ required: false
+ schema:
+ type: integer
+ default: 1
+ description: Limit the number of subscription activities returned per subscription (default is 1)
+ responses:
+ "200":
+ description: A list of notification subscriptions
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/GetNotificationSubscriptionsResponse"
+ examples:
+ emptyNotificationSubscriptionResponse:
+ value:
+ notificationSubscriptions: []
+ href: null
+ fullNotificationSubscriptionResponse:
+ value:
+ notificationSubscriptions:
+ - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ notificationCategory:
+ notificationCategoryId: 1
+ name: Mijn Reizen
+ customerProfileId: 1337
+ subscriptionActivities:
+ - subscriptionActivityId: 30b32657-1ba1-44e0-8868-4db807695387
+ user: "1001337"
+ timestamp: "2025-10-02T15:00:00Z"
+ isActive: true
+ - subscriptionActivityId: f78bc171-a50e-4b88-88d3-a76585bffd54
+ user: "1001337"
+ timestamp: "2025-10-02T14:00:00Z"
+ isActive: false
+ - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd
+ notificationCategory:
+ notificationCategoryId: 2
+ name: Mijn Passen
+ customerProfileId: 1338
+ subscriptionActivities:
+ - subscriptionActivityId: 7fae0d2c-1e20-4f3e-b25d-fd8505a381c4
+ user: "1001338"
+ timestamp: "2025-10-02T15:00:00Z"
+ isActive: false
+ - subscriptionActivityId: cb2fc1d3-f143-4dd7-8608-4538e5637e3a
+ user: "1001338"
+ timestamp: "2025-10-02T14:00:00Z"
+ isActive: true
+ href: null
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ post:
+ summary: Create a new notification subscription
+ tags:
+ - Notification Subscriptions
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/PostNotificationSubscriptionRequest"
+ examples:
+ fullNotificationSubscriptionRequest:
+ value:
+ notificationCategoryId: 1
+ customerProfileId: 1337
+ subscriptionActivity:
+ user: "1001337"
+ timestamp: "2025-10-02T14:00:00Z"
+ isActive: true
+ responses:
+ "201":
+ description: Notification subscription created successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/PostNotificationSubscriptionResponse"
+ examples:
+ notificationSubscriptionResponse:
+ value:
+ notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ /notificationsubscriptions/{notificationSubscriptionId}:
+ delete:
+ summary: Delete a notification subscription by ID
+ tags:
+ - Notification Subscriptions
+ parameters:
+ - name: notificationSubscriptionId
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ responses:
+ "204":
+ description: No content
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ /notificationsubscriptions/{notificationSubscriptionId}/subscriptionactivities:
+ post:
+ summary: Add a subscription activity to a notification subscription
+ tags:
+ - Notification Subscriptions
+ parameters:
+ - name: notificationSubscriptionId
+ in: path
+ required: true
+ schema:
+ type: string
+ format: uuid
+ example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/PostSubscriptionActivityRequest"
+ examples:
+ addSubscriptionActivityRequest:
+ value:
+ user: "1001337"
+ timestamp: "2025-10-08T15:00:00Z"
+ isActive: true
+ responses:
+ "201":
+ description: Subscription activity added successfully
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/PostSubscriptionActivityResponse"
+ examples:
+ addSubscriptionActivityResponse:
+ value:
+ subscriptionActivityId: 30b32657-1ba1-44e0-8868-4db807695387
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ /notificationcategories:
+ get:
+ tags:
+ - Notification Categories
+ summary: Get all notification categories.
+ parameters:
+ - name: expand
+ in: query
+ schema:
+ type: string
+ enum: [none, eventType, eventTypeChannel]
+ default: none
+ description: "Expand nested attributes. Possible values: `none`, `eventType`, and `eventTypeChannel`."
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/GetNotificationCategoriesResponse"
+ examples:
+ getNotifactionCategories?expand=none:
+ summary: Return all the notification categories without nested attributes (expand=none)
+ value:
+ notificationCategories:
+ - notificationCategoryId: 1
+ name: Nieuwsbrief
+ - notificationCategoryId: 2
+ name: Mijn Reizen
+ - notificationCategoryId: 3
+ name: Mijn Passen
+ getNotifactionCategories?expand=eventType:
+ summary: Return all the notification categories with nested event types (expand=eventType)
+ value:
+ notificationCategories:
+ - notificationCategoryId: 1
+ name: Nieuwsbrief
+ eventTypes:
+ - eventTypeId: 1
+ eventOrigin:
+ eventOriginId: 6
+ name: Maileon
+ name: HTM nieuwsbrief
+ subName: ""
+ prettyName: HTM nieuwsbrief
+ optinRequired: false
+ - notificationCategoryId: 2
+ name: Mijn Reizen
+ eventTypes:
+ - eventTypeId: 2
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ name: ALERTS, TRAVEL_SCHEME
+ subName: CI
+ prettyName: Check In
+ optinRequired: false
+ - eventTypeId: 3
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ name: ALERTS, PAD
+ subName: null
+ prettyName: Profielgegevens op de pas
+ optinRequired: false
+ - notificationCategoryId: 3
+ name: Mijn Passen
+ eventTypes:
+ - eventTypeId: 4
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ name: ALERTS, CARD
+ subName: null
+ prettyName: Mijn passen
+ optinRequired: false
+ - eventTypeId: 5
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ name: ALERTS, PAD
+ subName: null
+ prettyName: Profielgegevens op de pas
+ optinRequired: false
+ getNotifactionCategories?expand=eventTypeChannel:
+ summary: Return all the notification categories with all nested attributes (expand=eventTypeChannel)
+ value:
+ notificationCategories:
+ - notificationCategoryId: 1
+ name: Nieuwsbrief
+ eventTypes:
+ - eventTypeId: 1
+ eventOrigin:
+ eventOriginId: 6
+ name: Maileon
+ name: HTM nieuwsbrief
+ subName: ""
+ prettyName: HTM nieuwsbrief
+ optinRequired: false
+ eventTypeChannels:
+ - eventTypeChannelId: 447a1116-6cd7-4645-8c3d-43237b6186cd
+ channel:
+ channelId: 2
+ name: email
+ isDefault: true
+ isMandatory: false
+ - notificationCategoryId: 2
+ name: Mijn Reizen
+ eventTypes:
+ - eventTypeId: 2
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ name: ALERTS, TRAVEL_SCHEME
+ subName: CI
+ prettyName: Check In
+ optinRequired: false
+ eventTypeChannels:
+ - eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173
+ channel:
+ channelId: 1
+ name: push
+ isDefault: true
+ isMandatory: false
+ - eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d
+ channel:
+ channelId: 2
+ name: email
+ isDefault: false
+ isMandatory: false
+ - eventTypeId: 3
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ name: ALERTS, PAD
+ subName: null
+ prettyName: Profielgegevens op de pas
+ optinRequired: false
+ eventTypeChannels:
+ - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432
+ channel:
+ channelId: 1
+ name: push
+ isDefault: true
+ isMandatory: false
+ - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2
+ channel:
+ channelId: 2
+ name: email
+ isDefault: false
+ isMandatory: false
+ - notificationCategoryId: 3
+ name: Mijn Passen
+ eventTypes:
+ - eventTypeId: 4
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ name: ALERTS, CARD
+ subName: null
+ prettyName: Mijn passen
+ optinRequired: false
+ eventTypeChannels:
+ - eventTypeChannelId: be07c7bb-714b-4637-acf5-a67025ad8e60
+ channel:
+ channelId: 1
+ name: push
+ isDefault: true
+ isMandatory: false
+ - eventTypeChannelId: 0c797b5a-ed34-494b-8c64-0a832830d392
+ channel:
+ channelId: 2
+ name: email
+ isDefault: false
+ isMandatory: false
+ - eventTypeId: 5
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ name: ALERTS, PAD
+ subName: null
+ prettyName: Profielgegevens op de pas
+ optinRequired: false
+ eventTypeChannels:
+ - eventTypeChannelId: b910368f-c045-4e8e-b01d-bcbc78708bac
+ channel:
+ channelId: 1
+ name: push
+ isDefault: true
+ isMandatory: false
+ - eventTypeChannelId: 93e773da-ba3b-48da-9a0e-ee478eaa752f
+ channel:
+ channelId: 2
+ name: email
+ isDefault: false
+ isMandatory: false
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ /eventorigins:
+ get:
+ summary: Get all event origins
+ deprecated: true
+ tags:
+ - References (not for MVP)
+ parameters:
+ - name: name
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter by event origin name (case-insensitive, partial match)
+ responses:
+ "200":
+ description: A list of event origins
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/GetEventOriginsResponse"
+ examples:
+ eventOriginsResponse:
+ value:
+ eventOrigins:
+ - eventOriginId: 1
+ name: GBO
+ description: Events originated at GBO
+ - eventOriginId: 2
+ name: Website
+ description: Events originated at the website
+ - eventOriginId: 3
+ name: Payt
+ description: Events originated at Payt
+ - eventOriginId: 4
+ name: Twikey
+ description: Events originated at Twikey
+ - eventOriginId: 5
+ name: TapConnect
+ description: Events originated at TapConnect
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ /channels:
+ get:
+ summary: Get all channels
+ deprecated: true
+ tags:
+ - References (not for MVP)
+ parameters:
+ - name: name
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter by channel name (case-insensitive, partial match)
+ responses:
+ "200":
+ description: A list of channels
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/GetChannelsResponse"
+ examples:
+ channelsResponse:
+ value:
+ channels:
+ - channelId: 1
+ name: push
+ - channelId: 2
+ name: email
+ - channelId: 3
+ name: sms
+ - channelId: 4
+ name: mail
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ /eventtypes:
+ get:
+ summary: Get all event types
+ deprecated: true
+ tags:
+ - References (not for MVP)
+ parameters:
+ - name: name
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter by event type name (case-insensitive, partial match)
+ responses:
+ "200":
+ description: A list of event types
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/GetEventTypesResponse"
+ examples:
+ eventTypesResponse:
+ value:
+ eventTypes:
+ - eventTypeId: 15
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ description: Events originated at GBO
+ name: Travel
+ subname: Missing CKO
+ prettyName: Checkout gemist
+ optInRequired: true
+ - eventTypeId: 16
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ description: Events originated at GBO
+ name: Travel
+ subname: Missing CKI
+ prettyName: Checkin gemist
+ optInRequired: true
+ - eventTypeId: 25
+ eventOrigin:
+ eventOriginId: 3
+ name: Payt
+ description: Events originated at Payt
+ name: Payment
+ subname: Failed Payment
+ prettyName: Betaling mislukt
+ optInRequired: false
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ /eventtypecategories:
+ get:
+ summary: Get all event type categories
+ deprecated: true
+ tags:
+ - References (not for MVP)
+ parameters:
+ - name: name
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter by event type category name (case-insensitive, partial match)
+ responses:
+ "200":
+ description: A list of event type categories
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/GetEventTypeCategoriesResponse"
+ examples:
+ eventTypeCategoriesResponse:
+ value:
+ eventTypeCategories:
+ - eventType:
+ eventTypeId: 15
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ description: Events originated at GBO
+ name: Travel
+ subname: Missing CKO
+ prettyName: Checkout gemist
+ optInRequired: true
+ notificationCategory:
+ notificationCategoryId: 1
+ name: Mijn Reizen
+ - eventType:
+ eventTypeId: 16
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ description: Events originated at GBO
+ name: Travel
+ subname: Missing CKI
+ prettyName: Checkin gemist
+ optInRequired: true
+ notificationCategory:
+ notificationCategoryId: 1
+ name: Mijn Reizen
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+ /eventtypechannels:
+ get:
+ summary: Get all event type channels
+ deprecated: true
+ tags:
+ - References (not for MVP)
+ parameters:
+ - name: name
+ in: query
+ required: false
+ schema:
+ type: string
+ description: Filter by event type channel name (case-insensitive, partial match)
+ responses:
+ "200":
+ description: A list of event type channels
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/GetEventTypeChannelResponse"
+ examples:
+ eventTypeChannelsResponse:
+ value:
+ eventTypeChannels:
+ - eventTypeChannelId: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f
+ eventType:
+ eventTypeId: 15
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ description: Events originated at GBO
+ name: Travel
+ subname: Missing CKO
+ prettyName: Checkout gemist
+ optInRequired: true
+ channel:
+ channelId: 1
+ name: push
+ isDefault: true
+ isMandatory: false
+ - eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5
+ eventType:
+ eventTypeId: 16
+ eventOrigin:
+ eventOriginId: 1
+ name: GBO
+ description: Events originated at GBO
+ name: Travel
+ subname: Missing CKI
+ prettyName: Checkin gemist
+ optInRequired: true
+ channel:
+ channelId: 1
+ name: push
+ isDefault: true
+ isMandatory: false
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/400Response"
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/401Response"
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/404Response"
+ "500":
+ description: Internal server error
+ content:
+ application/json:
+ schema:
+ type: object
+ $ref: "#/components/schemas/500Response"
+components:
+ schemas:
+ GetNotificationSubscriptionsResponse:
+ type: object
+ properties:
+ notificationSubscriptions:
+ type: array
+ items:
+ $ref: "#/components/schemas/NotificationSubscription"
+ href:
+ type: string
+ required:
+ - notificationSubscriptions
+ - href
+ NotificationSubscription:
+ type: object
+ properties:
+ notificationSubscriptionId:
+ type: string
+ format: uuid
+ example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ notificationCategory:
+ $ref: "#/components/schemas/NotificationCategory"
+ customerProfileId:
+ type: integer
+ example: 1337
+ subscriptionActivities:
+ type: array
+ items:
+ type: object
+ properties:
+ subscriptionActivityId:
+ type: string
+ format: uuid
+ example: 30b32657-1ba1-44e0-8868-4db807695387
+ user:
+ type: string
+ example: "1001337"
+ timestamp:
+ type: string
+ format: date-time
+ example: "2025-10-02T15:00:00Z"
+ isActive:
+ type: boolean
+ example: true
+ required:
+ - subscriptionActivityId
+ - user
+ - timestamp
+ - isActive
+ required:
+ - notificationSubscriptionId
+ - notificationCategory
+ - customerProfileId
+ PostNotificationSubscriptionRequest:
+ type: object
+ properties:
+ notificationCategoryId:
+ type: integer
+ example: 1
+ customerProfileId:
+ type: integer
+ example: 1337
+ subscriptionActivity:
+ type: object
+ properties:
+ user:
+ type: string
+ example: "1001337"
+ timestamp:
+ type: string
+ format: date-time
+ example: "2025-10-02T15:00:00Z"
+ isActive:
+ type: boolean
+ example: true
+ required:
+ - user
+ - timestamp
+ - isActive
+ required:
+ - notificationCategoryId
+ - customerProfileId
+ PostNotificationSubscriptionResponse:
+ type: object
+ properties:
+ notificationSubscriptionId:
+ type: string
+ format: uuid
+ example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377
+ PostSubscriptionActivityRequest:
+ type: object
+ properties:
+ user:
+ type: string
+ example: "1001337"
+ timestamp:
+ type: string
+ format: date-time
+ example: "2025-10-08T15:00:00Z"
+ isActive:
+ type: boolean
+ example: true
+ required:
+ - user
+ - timestamp
+ - isActive
+ PostSubscriptionActivityResponse:
+ type: object
+ properties:
+ subscriptionActivityId:
+ type: string
+ format: uuid
+ example: 30b32657-1ba1-44e0-8868-4db807695387
+ GetEventOriginsResponse:
+ type: object
+ properties:
+ eventOrigins:
+ type: array
+ items:
+ $ref: "#/components/schemas/EventOrigin"
+ GetChannelsResponse:
+ type: object
+ properties:
+ channels:
+ type: array
+ items:
+ $ref: "#/components/schemas/Channel"
+ GetNotificationCategoriesResponse:
+ type: object
+ properties:
+ notificationCategories:
+ type: array
+ items:
+ $ref: "#/components/schemas/NotificationCategory"
+ GetEventTypesResponse:
+ type: object
+ properties:
+ eventTypes:
+ type: array
+ items:
+ $ref: "#/components/schemas/EventType"
+ GetEventTypeCategoriesResponse:
+ type: object
+ properties:
+ eventTypeCategories:
+ type: array
+ items:
+ type: object
+ properties:
+ eventType:
+ $ref: "#/components/schemas/EventType"
+ notificationCategory:
+ $ref: "#/components/schemas/NotificationCategory"
+ GetEventTypeChannelResponse:
+ type: object
+ properties:
+ eventTypeChannels:
+ type: array
+ items:
+ $ref: "#/components/schemas/EventTypeChannel"
+ EventTypeChannel:
+ type: object
+ properties:
+ eventTypeChannelId:
+ type: string
+ format: uuid
+ example: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f
+ eventType:
+ $ref: "#/components/schemas/EventType"
+ channel:
+ $ref: "#/components/schemas/Channel"
+ isDefault:
+ type: boolean
+ example: true
+ isMandatory:
+ type: boolean
+ example: false
+ required:
+ - eventTypeChannelId
+ - eventType
+ - channel
+ - isDefault
+ - isMandatory
+ EventType:
+ type: object
+ properties:
+ eventTypeId:
+ type: integer
+ example: 15
+ eventOrigin:
+ $ref: "#/components/schemas/EventOrigin"
+ name:
+ type: string
+ example: Travel
+ subname:
+ type: string
+ example: Missing CKO
+ prettyName:
+ type: string
+ example: Checkout gemist
+ optInRequired:
+ type: boolean
+ example: true
+ eventTypeChannels:
+ type: array
+ items:
+ $ref: "#/components/schemas/EventTypeChannel"
+ required:
+ - eventTypeId
+ - eventOrigin
+ - name
+ - prettyName
+ - optInRequired
+ EventOrigin:
+ type: object
+ properties:
+ eventOriginId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: GBO
+ description:
+ type: string
+ example: Events originated at GBO
+ required:
+ - eventOriginId
+ - name
+ Channel:
+ type: object
+ properties:
+ channelId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: push
+ required:
+ - channelId
+ - name
+ NotificationCategory:
+ type: object
+ properties:
+ notificationCategoryId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Mijn Reizen
+ eventTypes:
+ type: array
+ items:
+ $ref: "#/components/schemas/EventType"
+ required:
+ - notificationCategoryId
+ - name
+ 400Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: "400"
+ type:
+ type: string
+ message:
+ type: string
+ example: Bad Request
+ description:
+ type: string
+ example: >-
+ Bad Request: Input parameters missing! Please fill in at least 1
+ valid input parameter.
+ 401Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: "401"
+ type:
+ type: string
+ message:
+ type: string
+ example: Invalid Credentials
+ description:
+ type: string
+ example: >-
+ Invalid Credentials. Make sure you have provided the correct
+ security credentials
+ 404Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: "404"
+ type:
+ type: string
+ example: Status report
+ message:
+ type: string
+ example: Not Found
+ description:
+ type: string
+ example: The requested resource is not available.
+ 500Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: "500"
+ type:
+ type: string
+ message:
+ type: string
+ example: Internal Server Error
+ description:
+ type: string
+ securitySchemes:
+ default:
+ type: oauth2
+ flows:
+ implicit:
+ authorizationUrl: https://services.acc.api.htm.nl/authorize
+ scopes: {}
diff --git a/src/openapi/customers/se-maileon.yaml b/src/openapi/customers/se-maileon.yaml
new file mode 100644
index 0000000..5b9b38d
--- /dev/null
+++ b/src/openapi/customers/se-maileon.yaml
@@ -0,0 +1,468 @@
+openapi: 3.0.1
+info:
+ title: Service Engine APIs for maileon
+ description: >-
+ Service Engine APIs for maileon. These are NOT the CRUD APIs to access raw data in the database.
+ version: "1.0"
+servers:
+ - url: https://services.acc.api.htm.nl/abt/maileon/1.0
+tags:
+ - name: Customers
+ description: >-
+ Service Engine API's for maileon to update the customer profile. Only field isEmailVerified.
+ - name: Notification categories
+ description: >-
+ Service Engine APIs for all HTM Notifications metadata. To build content only.
+ - name: Notification subscriptions
+ description: >-
+ Service Engine APIs for the HTM Notification subscriptions for a user. Contains the subscriptions on category level.
+paths:
+ /customers:
+ patch:
+ tags:
+ - Customers
+ parameters:
+ - name: customerProfileId
+ in: header
+ schema:
+ type: string
+ example: 1
+ required: true
+ description: The customerProfileId of a customer
+ - name: emailAddress
+ in: header
+ schema:
+ type: string
+ format: email
+ example: john.doe@mymailprovider.com
+ required: true
+ description: The emailadress of the customer
+ summary: Update a customer profile
+ description: Update a customer profile based on the customerProfileId and emailAddress
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ patchCustomer:
+ value:
+ {
+ "person": {
+ "isEmailVerified": True
+ }
+ }
+ responses:
+ "202":
+ description: OK
+ /notificationcategories:
+ get:
+ tags:
+ - Notification categories
+ summary: Get notification categories and optins for that category that a touchpoint can show.
+ description: |
+ Get notification categories that a touchpoint can show and optins ( eventTypes) and channels (eventType_channels) for the optin for that category
+ parameters:
+ - name: expand
+ in: query
+ schema:
+ type: string
+ enum: [none, eventType, eventTypeChannel]
+ default: none
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ examples:
+ getNotifactionCategories?expand=evenTypeChannel:
+ summary: Return all the notification categories with their nested attributes
+ value:
+ {
+ "notificationCategories":[
+ {
+ "notificationCategoryId": 1,
+ "name": "Nieuwsbrief",
+ "eventTypes": [
+ {
+ "eventTypeId": 1,
+ "eventOrigin": {
+ "eventOriginId": 6,
+ "name": "Maileon"
+ },
+ "name": "HTM nieuwsbrief",
+ "subName": "",
+ "prettyName": "HTM nieuwsbrief",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "447a1116-6cd7-4645-8c3d-43237b6186cd",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "notificationCategoryId": 2,
+ "name": "Mijn Reizen",
+ "eventTypes": [
+ {
+ "eventTypeId": 2,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, TRAVEL_SCHEME",
+ "subName": "CI",
+ "prettyName": "Check In",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "ccc8c025-06b5-4928-a632-23e1c55cd173",
+ "channel":{
+ "channelId": 1,
+ "name": "push"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ },
+ {
+ "eventTypeChannelId": "da2deb4c-ce77-4b5f-aecc-ddebfd14349d",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": False,
+ "isMandatory": False
+ }
+ ]
+ },
+ {
+ "eventTypeId": 3,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, PAD",
+ "subName": null,
+ "prettyName": "Profielgegevens op de pas",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "8e7df8f1-7e50-482f-8301-d399e75fd432",
+ "channel":{
+ "channelId": 1,
+ "name": "push"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ },
+ {
+ "eventTypeChannelId": "72960a92-1855-469f-9cfd-5d72f57106f2",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": False,
+ "isMandatory": False
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "notificationCategoryId": 3,
+ "name": "Mijn Passen",
+ "eventTypes": [
+ {
+ "eventTypeId": 4,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, CARD",
+ "subName": null,
+ "prettyName": "Mijn passen",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "be07c7bb-714b-4637-acf5-a67025ad8e60",
+ "channel":{
+ "channelId": 1,
+ "name": "push"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ },
+ {
+ "eventTypeChannelId": "0c797b5a-ed34-494b-8c64-0a832830d392",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": False,
+ "isMandatory": False
+ }
+ ]
+ },
+ {
+ "eventTypeId": 5,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, PAD",
+ "subName": null,
+ "prettyName": "Profielgegevens op de pas",
+ "optinRequired": False,
+ "eventTypeChannels":[
+ {
+ "eventTypeChannelId": "b910368f-c045-4e8e-b01d-bcbc78708bac",
+ "channel":{
+ "channelId": 1,
+ "name": "push"
+ },
+ "isDefault": True,
+ "isMandatory": False
+ },
+ {
+ "eventTypeChannelId": "93e773da-ba3b-48da-9a0e-ee478eaa752f",
+ "channel":{
+ "channelId": 2,
+ "name": "email"
+ },
+ "isDefault": False,
+ "isMandatory": False
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ getNotifactionCategories?expand=eventType:
+ summary: Return all the notification categories with nested eventTypes
+ value:
+ {
+ "notificationCategories":[
+ {
+ "notificationCategoryId": 1,
+ "name": "Nieuwsbrief",
+ "eventTypes": [
+ {
+ "eventTypeId": 1,
+ "eventOrigin": {
+ "eventOriginId": 6,
+ "name": "Maileon"
+ },
+ "name": "HTM nieuwsbrief",
+ "subName": "",
+ "prettyName": "HTM nieuwsbrief",
+ "optinRequired": False
+ }
+ ]
+ },
+ {
+ "notificationCategoryId": 2,
+ "name": "Mijn Reizen",
+ "eventTypes": [
+ {
+ "eventTypeId": 2,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, TRAVEL_SCHEME",
+ "subName": "CI",
+ "prettyName": "Check In",
+ "optinRequired": False
+ },
+ {
+ "eventTypeId": 3,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, PAD",
+ "subName": null,
+ "prettyName": "Profielgegevens op de pas",
+ "optinRequired": False
+ }
+ ]
+ },
+ {
+ "notificationCategoryId": 3,
+ "name": "Mijn Passen",
+ "eventTypes": [
+ {
+ "eventTypeId": 4,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, CARD",
+ "subName": null,
+ "prettyName": "Mijn passen",
+ "optinRequired": False
+ },
+ {
+ "eventTypeId": 5,
+ "eventOrigin": {
+ "eventOriginId": 1,
+ "name": "GBO"
+ },
+ "name": "ALERTS, PAD",
+ "subName": null,
+ "prettyName": "Profielgegevens op de pas",
+ "optinRequired": False
+ }
+ ]
+ }
+ ]
+ }
+ getNotifactionCategories?expand=none:
+ summary: Return all the notification categories
+ value:
+ {
+ "notificationCategories":[
+ {
+ "notificationCategoryId": 1,
+ "name": "Nieuwsbrief"
+ },
+ {
+ "notificationCategoryId": 2,
+ "name": "Mijn Reizen"
+ },
+ {
+ "notificationCategoryId": 3,
+ "name": "Mijn Passen"
+ }
+ ]
+ }
+ "404":
+ description: No notification category found
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/2.0/notifications",
+ "title": "Niet gevonden",
+ "detail": "Notificatiecategorie niet gevonden",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ "errors": [
+ {
+ "code": "404",
+ "detail": null,
+ "path": null,
+ "parameter": null
+ }
+ ],
+ }
+ /notificationsubscriptions:
+ get:
+ tags:
+ - Notification subscriptions
+ summary: Get all possible notificationSubscriptions for a customer (account or private).
+ description: |
+ Get all possible notificationSubscriptions for a customer (account or private), including if they have opted-in for it.
+ parameters:
+ - name: customerProfileId
+ in: header
+ schema:
+ type: integer
+ example: 12361
+ required: true
+ description: The customerProfileId of a customer
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ examples:
+ getNotifactionSubscriptionsAll:
+ summary: Return all the notification subscriptions where for each category the client has actively opted in or out - All
+ value:
+ {
+ "notificationSubscriptions":[
+ {
+ "notificationSubscriptionId": "64047471-e0c3-4abc-b4eb-83a12a6de903",
+ "notificationCategoryId": 1,
+ "isActive": true
+ },
+ {
+ "notificationSubscriptionId": "571388cd-8903-40d5-89e6-9191cb8d656e",
+ "notificationCategoryId": 2,
+ "isActive": true
+ },
+ {
+ "notificationSubscriptionId": "cf736ff2-2f8f-434e-a3c7-a14064b73c9b",
+ "notificationCategoryId": 3,
+ "isActive": false
+ }
+ ]
+ }
+ getNotifactionSubscriptionsSome:
+ summary: Return all the notification subscriptions where for each category the client has actively opted in or out - Some
+ value:
+ {
+ "notificationSubscriptions": [
+ {
+ "notificationSubscriptionId": "64047471-e0c3-4abc-b4eb-83a12a6de903",
+ "notificationCategoryId": 1,
+ "isActive": true
+ },
+ {
+ "notificationSubscriptionId": "cf736ff2-2f8f-434e-a3c7-a14064b73c9b",
+ "notificationCategoryId": 3,
+ "isActive": false
+ }
+ ]
+ }
+ "403":
+ description: Forbidden // Als geverifieerd profiel gevonden wordt, maar niet op een geverifieerde manier benaderd wordt
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/2.0/notifications",
+ "title": "Verboden",
+ "detail": "Niet toegestaan",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ "errors": [
+ {
+ "code": "403",
+ "detail": null,
+ "path": null,
+ "parameter": null
+ }
+ ],
+ }
+ "404":
+ description: No notification subscriptions found
+ content:
+ application/json:
+ example:
+ {
+ "type": "https://api.integratielaag.nl/abt/touchpoint/2.0/notifications",
+ "title": "Niet gevonden",
+ "detail": "Notificaties niet gevonden",
+ "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7",
+ "errors": [
+ {
+ "code": "404",
+ "detail": null,
+ "path": null,
+ "parameter": null
+ }
+ ],
+ }
+components:
+ schemas:
+ unavailable:
+ type: object
\ No newline at end of file
diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml
index d3a48ac..c4309bf 100644
--- a/src/openapi/fiko/fiko-crud.yaml
+++ b/src/openapi/fiko/fiko-crud.yaml
@@ -1,268 +1,308 @@
openapi: "3.0.3"
info:
- title: ABT FIKO CRUD APIs v2
+ title: FIKO CRUD APIs v2.2
version: "1.0"
- description: CRUD APIs for ABT FIKO database v2.
+ description: |
+ CRUD APIs for FIKO resource model v2.2. This version of the API corresponds with version 2.2
+ of the data model in [Lucid Chart](https://lucid.app/lucidchart/50c0ff9d-48ba-4ea9-8182-10bede07d3b1/edit?page=LL7PJg1Y_GOA>).
servers:
- - url: https://api.integratielaag.nl/v1
+ - url: https://services.acc.api.htm.nl/fiko/1.0
paths:
- /transactionitems:
+ /Odata/TransactionItem:
get:
summary: Find transaction items.
description: Find transaction items.
tags:
- - Transactions v2
+ - Odata
parameters:
- - in: query
- name: transactionItemId
- schema:
- type: string
- format: uuid
- example: 75174a9d-fff4-4682-b66b-ebd93cbe7ea3
- description: The id of the transaction item.
- - in: query
- name: sourceName
- schema:
- type: string
- example: Verkoopengine
- description: Source name of the transaction.
- - in: query
- name: transactionId
- schema:
- type: string
- example: 1001236
- description: The id of the transaction.
- - in: query
- name: transactionLineId
- schema:
- type: string
- example: 1
- description: The line id of the transaction.
- - in: query
- name: name
- schema:
- type: string
- example: HTM Maandkorting 20%
- description: The name of the product on the transaction.
- - in: query
- name: quantity
- schema:
- type: integer
- example: 1
- description: The quantity of the transaction.
- - in: query
- name: taxCode
- schema:
- type: string
- example: V21
- description: The tax code of the transaction.
- - in: query
- name: amountExclTax
- schema:
- type: integer
- example: 100
- description: The amount of the transaction excluding tax in cents.
- - in: query
- name: amountInclTax
- schema:
- type: integer
- example: 121
- description: The amount of the transaction including tax in cents.
- - in: query
- name: amountTax
- schema:
- type: integer
- example: 21
- description: The tax amount of the transaction in cents.
- - in: query
- name: occurredBefore
- schema:
- type: string
- format: date-time
- example: 2024-10-04T00:00:00Z
- description: Timestamp before which the transaction occurred.
- - in: query
- name: occurredAfter
- schema:
- type: string
- format: date-time
- example: 2024-10-04T00:00:00Z
- description: Timestamp after which the transaction occurred.
- - in: query
- name: type
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
+ uniqueItems: true
type: array
items:
type: string
- example: [debit, credit]
+ enum:
+ - transactionItemRowId
+ - transactionItemId
+ - transactionType
+ - sourceName
+ - transactionId
+ - transactionLineId
+ - name
+ - quantity
+ - taxCode
+ - amountExclTax
+ - amountInclTax
+ - amountTax
+ - occurredOn
+ - type
+ - articleNumber
+ - status
+ - aggregationReference
+ - accountingSystemReference
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
explode: false
- description: Possible types of the transaction ('debit' or 'credit').
- - in: query
- name: productCode
schema:
- type: string
- example: HTM-MND-20
- description: The product code of the transaction.
- - in: query
- name: aggregationReference
- schema:
- type: string
- example: FIKO-123456
- description: The aggregation reference of the transaction.
- - in: query
- name: accountingSystemReference
- schema:
- type: string
- example: U4F-123456
- description: The accounting system reference of the transaction.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - transactionItemRowId
+ - transactionItemId
+ - transactionType
+ - sourceName
+ - transactionId
+ - transactionLineId
+ - name
+ - quantity
+ - taxCode
+ - amountExclTax
+ - amountInclTax
+ - amountTax
+ - occurredOn
+ - type
+ - articleNumber
+ - status
+ - aggregationReference
+ - accountingSystemReference
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "transactionItems":
- [
- {
- "transactionItemId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
- "sourceName": "Verkoopengine",
- "transactionId": "1001236",
- "transactionLineId": "1",
- "name": "HTM Maandkorting 20%",
- "quantity": 1,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "amountTax": 21,
- "occurredOn": "2024-10-04T00:00:00Z",
- "type": "debit",
- "productCode": "HTM-MND-20",
- "aggregationReference": "FIKO-123456",
- "accountingSystemReference": "U4F-123456",
- },
- {
- "transactionItemId": "e63cc37b-4d87-4278-8eb5-1477e07edf3d",
- "sourceName": "Verkoopengine",
- "transactionId": "1001237",
- "transactionLineId": "1",
- "name": "HTM Maandkorting 20%",
- "quantity": 1,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "amountTax": 21,
- "occurredOn": "2024-10-04T00:05:00Z",
- "type": "debit",
- "productCode": "HTM-MND-20",
- "aggregationReference": "FIKO-123456",
- "accountingSystemReference": "U4F-123456",
- },
- ],
- "href": null,
- }
- post:
- summary: Add a finanicial transaction item.
- description: Add a finanicial transaction item.
- tags:
- - Transactions v2
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "sourceName": "Verkoopengine",
- "transactionId": "1001236",
- "transactionLineId": "1",
- "name": "HTM Maandkorting 20%",
- "quantity": 1,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "amountTax": 21,
- "occurredOn": "2024-10-04T00:00:00Z",
- "type": "debit",
- "productCode": "HTM-MND-20",
- "aggregationReference": "FIKO-123456",
- "accountingSystemReference": "U4F-123456",
- }
- responses:
- "201":
- description: Created
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- { "transactionItemId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d" }
- /transactionitems/bulk:
+ $ref: "#/components/schemas/TransactionItemsGetResponseBody"
+ examples:
+ No transaction items:
+ summary: No transaction items were found
+ description: No transaction items that match the search criteria were found.
+ value:
+ "@odata.context": "$metadata#TransactionItem"
+ value: []
+ List containing multiple sales transaction items:
+ summary: List containing multiple sales transaction items
+ description: List containing multiple sales transaction items of transaction type 'sales' with different statuses.
+ value:
+ "@odata.context": "$metadata#TransactionItem"
+ value:
+ - "@odata.etag": 6962e56b-c7dd-3336-9627-6687f007ee07
+ transactionItemRowId: 3231
+ transactionItemId: afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1001236"
+ transactionLineId: "1"
+ name: HTM Maandkorting 20%
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "4031"
+ status: created
+ aggregationReference: null
+ accountingSystemReference: null
+ - "@odata.etag": e671c8a1-b918-4867-bf12-5289822479c3
+ transactionItemRowId: 3232
+ transactionItemId: 1c1fc1c8-57f4-4336-9b43-a974eae5afbf
+ transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1002001"
+ transactionLineId: "1"
+ name: Reisproduct HTM 3 dag Anoniem
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "4051"
+ status: failed
+ aggregationReference: null
+ accountingSystemReference: null
+ - "@odata.etag": be2715d4-4eff-4562-9bf3-5c43ad23e2c8
+ transactionItemRowId: 3233
+ transactionItemId: 3f58441e-dc8f-4956-9bc5-c952312476db
+ transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1001871"
+ transactionLineId: "1"
+ name: Reisproduct HTM 3 dag Anoniem
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "4051"
+ status: returned to src
+ aggregationReference: FIKO-171f40609e
+ accountingSystemReference: null
+ - "@odata.etag": 52130c4d-e944-4454-a73e-8d55449a4bd1
+ transactionItemRowId: 3234
+ transactionItemId: 4418825f-3f9b-45bc-b662-dc3cd4ce6599
+ transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1001131"
+ transactionLineId: "1"
+ name: Reisproduct HTM 3 dag Anoniem
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "4051"
+ status: returned to trx-db
+ aggregationReference: null
+ accountingSystemReference: null
+ - "@odata.etag": 7da305e1-85cd-4250-ad77-8b54b2649cfb
+ transactionItemRowId: 3235
+ transactionItemId: 2ddc1831-cf7b-4a77-8aa1-11aaf8e98d9f
+ transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1001885"
+ transactionLineId: "1"
+ name: Reisproduct HTM 3 dag Anoniem
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "4051"
+ status: re-entered
+ aggregationReference: null
+ accountingSystemReference: null
+ - "@odata.etag": c3b17d21-0506-474d-b3d4-7ff654f368b9
+ transactionItemRowId: 3236
+ transactionItemId: 5ab2513d-f334-4cf8-8895-4e7269374a4b
+ transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1001679"
+ transactionLineId: "1"
+ name: Reisproduct HTM 1 dag Anoniem
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "1737"
+ status: succeeded
+ aggregationReference: FIKO-6a4fca8cd6
+ accountingSystemReference: U4F-123456
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /transactionitems:
post:
summary: Add one ore more finanicial transaction items in bulk.
description: Add one ore more finanicial transaction items in bulk.
tags:
- - Transactions v2
+ - Transactions v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- [
- {
- "sourceName": "Verkoopengine",
- "transactionId": "1001236",
- "transactionLineId": "1",
- "name": "HTM Maandkorting 20%",
- "quantity": 1,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "amountTax": 21,
- "occurredOn": "2024-10-04T00:00:00Z",
- "type": "debit",
- "productCode": "HTM-MND-20",
- "aggregationReference": null,
- "accountingSystemReference": null,
- },
- {
- "sourceName": "Verkoopengine",
- "transactionId": "1001237",
- "transactionLineId": "1",
- "name": "HTM Maandkorting 20%",
- "quantity": 1,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "amountTax": 21,
- "occurredOn": "2024-10-04T00:05:00Z",
- "type": "debit",
- "productCode": "HTM-MND-20",
- "aggregationReference": null,
- "accountingSystemReference": null,
- },
- ]
+ $ref: "#/components/schemas/TransactionItemsPostRequestBody"
+ examples:
+ Add single transaction item:
+ summary: Add single transaction item
+ description: Add single transaction item of type sales.
+ value:
+ transactionItems:
+ - transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1001236"
+ transactionLineId: "1"
+ name: HTM Maandkorting 20%
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "4031"
+ Add multiple transaction items:
+ summary: Add multiple transaction items
+ description: Add multiple transaction items of type sales.
+ value:
+ transactionItems:
+ - transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1001236"
+ transactionLineId: "1"
+ name: HTM Maandkorting 20%
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "4031"
+ - transactionType: sales
+ sourceName: HTM-website
+ transactionId: "1001237"
+ transactionLineId: "1"
+ name: HTM Maandkorting 20%
+ quantity: 1
+ taxCode: V21
+ amountExclTax: 100
+ amountInclTax: 121
+ amountTax: 21
+ occurredOn: 2024-10-04T00:00:00Z
+ type: debit
+ articleNumber: "4031"
responses:
- "201":
- description: Created
+ "202":
+ description: Accepted
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- [
- {
- "transactionItemId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
- },
- {
- "transactionItemId": "e63cc37b-4d87-4278-8eb5-1477e07edf3d",
- },
- ]
+ $ref: "#/components/schemas/TransactionItemsPostResponseBody"
+ examples:
+ Array of transaction items accepted:
+ summary: Array of transaction items accepted
+ description: |
+ The array of transaction items was accepted successfully.
+ The transaction items will be processed asynchronously.
+ In the response body the consumer will find information on how to retrieve the processing status.
+ value:
+ startTime: 2025-02-14T05:32:47.0672237Z
+ status: Running
+ clientTrackingId: 08584620957189579629541919368CU00
+ callbackurl: https://api.integratielaag.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
+ retryAfter: 10
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
/transactionitems/{transactionItemId}:
parameters:
- in: path
@@ -277,27 +317,109 @@ paths:
summary: Update a transaction item.
description: Update a transaction item.
tags:
- - Transactions v2
+ - Transactions v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "aggregationReference": "FIKO-123456",
- "accountingSystemReference": "U4F-123456",
- }
+ $ref: "#/components/schemas/TransactionItemsPatchRequestBody"
+ examples:
+ Return transaction item to transaction database:
+ summary: Return transaction item to transaction database
+ description: |
+ FMT updates the transaction item so that it is returned to the transaction database.
+ This is done by changing the status to 'returned to trx-db' and emptying the
+ aggregationReference and accountingSystemReference.
+ value:
+ status: returned to trx-db
+ aggregationReference: null
+ accountingSystemReference: null
+ Return transaction item to source:
+ summary: Return transaction item to source
+ description: |
+ FMT updates the transaction item so that it is returned to the source.
+ This is done by changing the status to 'returned to src' and emptying the
+ aggregationReference and accountingSystemReference.
+ value:
+ status: returned to src
+ aggregationReference: null
+ accountingSystemReference: null
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- { "transactionItemId": "d667d293-aa82-4c9e-9b10-77cffc9058a1" }
+ $ref: "#/components/schemas/TransactionItemsPatchResponseBody"
+ examples:
+ Transaction item successfully updated:
+ summary: Transaction item successfully updated
+ description: The transaction item was successfully updated in the database.
+ value:
+ transactionItemId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /transactionitems/responsestatus/{clientTrackingId}:
+ get:
+ tags:
+ - Transactions v2.2
+ summary: Get the status of the transaction items POST.
+ description: Get the status of the asynchronous transaction items POST processing.
+ parameters:
+ - in: path
+ name: clientTrackingId
+ schema:
+ type: string
+ required: true
+ description: The clientTrackingId of the transaction items POST.
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TransactionItemsResponseStatusGetResponseBody"
+ examples:
+ Batch successfully processed:
+ summary: Batch successfully processed
+ description: |
+ Body of a batch of transaction items that was successfully processed.
+ A number of transaction items were inserted and another number was updated.
+ value:
+ summary:
+ created: 15
+ updated: 2
+ total: 17
+ "409":
+ description: Conflict
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/409Response"
+ examples:
+ A transaction item already exists:
+ summary: A transaction item already exists
+ description: |
+ In this batch of transaction items, a transaction with same transactionId and
+ transactionLineId already exists. Therefore, the whole batch is rolled back and
+ rejected.
+ value:
+ code: "409"
+ type: error
+ message: conflict
+ description: A transaction with the same TransactionId and TransactionLineId already exists.
+ errors:
+ - detail: Transaction is a duplicate of a transaction already in the system.
+ pointer: "#/transactionItems/0"
+ transactionId: 1ad109d3-fd7d-4b6f-872b-220d492f385f
+ transactionLineId: fee907dd-e59d-44f5-a63b-bbdec38f79b7
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
/transactionitems/{transactionItemId}/processingfailures:
parameters:
- in: path
@@ -312,49 +434,44 @@ paths:
summary: Add a processing failure.
description: Add a processing failure.
tags:
- - Failures v2
+ - Failures v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "department": "900",
- "costCenter": "84955",
- "costType": "619031",
- "documentDate": "2022-01-01",
- "documentCode": "VERK_FACTUUR",
- "accountingPeriod": "2024/10",
- "transactionDescription": "Dagkaart",
- "contraAccountNumber": "220.10419",
- "status": "open",
- "occurence": 1,
- "processingFailureInstances":
- [
- {
- "processingFailureInstanceId": "9afa9a6b-5b6a-4b0a-9c9e-4b0a5b6a4b0a",
- "processingFailureId": "c93a5b6a-5b6a-4b0a-9c9e-4b0a5b6a4b0a",
- "timestamp": "2022-01-01 00:00:00",
- "failureReason": "122be602-139d-49f5-b34f-1e3e2de29408",
- "element": "costCenter",
- "occurence": 1,
- "change": "Adapt config",
- },
- ],
- }
+ $ref: "#/components/schemas/ProcessingFailuresPostRequestBody"
+ examples:
+ Add new processing failure for a transaction item:
+ summary: Add new processing failure for a transaction item
+ description: |
+ Add a new processing failure for a transaction item. This usually happens when
+ a transaction item has failed validation. In this specific example, the transaction
+ item has a timestamp in the future.
+ value:
+ timestamp: 2025-01-01 12:34:00
+ element: occuredOn
+ value: 2027-01-01 12:34:00
+ reasonCode: "012"
+ reasonDescription: Transaction date is in the future.
+ resolved: false
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "processingFailureId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
- }
+ $ref: "#/components/schemas/ProcessingFailuresPostResponseBody"
+ examples:
+ Processing failure successfully added:
+ summary: Processing failure successfully added
+ description: The processing failure was successfully added to the database.
+ value:
+ processingFailureId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
/transactionitems/{transactionItemId}/transactionaudittrails:
parameters:
- in: path
@@ -369,259 +486,443 @@ paths:
summary: Add an audit trail entry.
description: Add an audit trail entry.
tags:
- - Audit Trail v2
+ - Audit Trail v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "user": "fiko",
- "timestamp": "2022-01-01 00:00:00",
- "action": "created",
- "description": "Transaction created.",
- "correlationId": "a3891560-3084-42cb-867c-f289e7cda47d",
- }
+ $ref: "#/components/schemas/TransactionAuditTrailsPostRequestBody"
+ examples:
+ Add new transaction audit trail for created transaction item:
+ summary: Add new transaction audit trail for created transaction item
+ description: Add a new audit trail record for a newly created transaction item.
+ value:
+ user: fiko
+ timestamp: 2022-01-01 12:34:00
+ action: create
+ status: created
+ description: Transaction item created.
+ correlationId: null
+ Add new transaction audit trail for updated transaction item:
+ summary: Add new transaction audit trail for updated transaction item
+ description: Add a new audit trail record for an updated transaction item.
+ value:
+ user: ad.vogelaar
+ timestamp: 2022-01-02 12:34:00
+ action: update
+ status: return to src
+ description: Transaction item returned to source.
+ correlationId: 0dc216ea-58e7-4a5e-aa18-449f0304209c
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "transactionAuditTrailId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
- }
- /transactionaudittrails:
+ $ref: "#/components/schemas/TransactionAuditTrailsPostResponseBody"
+ examples:
+ Transaction audit trail record created:
+ summary: Transaction audit trail record created
+ description: |
+ A new audit trail record for this transaction item was successfully created.
+ The transactionAuditTrailId is returned as a reference for the consumer.
+ value:
+ transactionAuditTrailId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/TransactionAuditTrail:
get:
summary: Find audit trail entries.
description: Find audit trail entries.
tags:
- - Audit Trail v2
+ - Odata
parameters:
- - in: query
- name: transactionAuditTrailId
- schema:
- type: string
- format: uuid
- example: 498e11fd-86c7-4e26-8ca9-c5ed9049da9e
- description: The id of the audit trail.
- - in: query
- name: transactionItemId
- schema:
- type: string
- format: uuid
- example: 9834b346-d68c-438d-9bd5-6716422c2657
- description: The id of the transaction item.
- - in: query
- name: user
- schema:
- type: string
- example: fiko
- description: The user who created the audit trail.
- - in: query
- name: timestampBefore
- schema:
- type: string
- example: 2022-01-01 00:00:00
- description: The timestamp before the event occured.
- - in: query
- name: timestampAfter
- schema:
- type: string
- example: 2022-01-01 00:00:00
- description: The timestamp after the event occured.
- - in: query
- name: action
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
+ uniqueItems: true
type: array
items:
type: string
- example: [created, succeeded, failed]
- description: The action of the event.
- - in: query
- name: description
+ enum:
+ - transactionAuditTrailRowId
+ - transactionAuditTrailId
+ - transactionItemId
+ - user
+ - timestamp
+ - action
+ - status
+ - correlationId
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: Transaction created.
- description: The description of the event.
- - in: query
- name: correlationId
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - transactionAuditTrailRowId
+ - transactionAuditTrailId
+ - transactionItemId
+ - user
+ - timestamp
+ - action
+ - status
+ - correlationId
+ - name: $expand
+ in: query
+ description: Expand related entities
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: a3891560-3084-42cb-867c-f289e7cda47d
- description: The correlation id of the event.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - TransactionItem
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "transactionAuditTrails":
- [
- {
- "transactionAuditTrailId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
- "transactionItemId": "d667d293-aa82-4c9e-9b10-77cffc9058a1",
- "user": "fiko",
- "timestamp": "2022-01-01 00:00:00",
- "action": "created",
- "description": "Transaction created.",
- "correlationId": "a3891560-3084-42cb-867c-f289e7cda47d",
- },
- {
- "transactionAuditTrailId": "e63cc37b-4d87-4278-8eb5-1477e07edf3d",
- "transactionItemId": "d667d293-aa82-4c9e-9b10-77cffc9058a1",
- "user": "fiko",
- "timestamp": "2022-01-01 00:01:00",
- "action": "processed",
- "description": "Transaction processed.",
- "correlationId": "3e9d7d4b-8adf-4e7f-8251-be308f16d3de",
- },
- ],
- "href": null,
- }
- /processingfailures:
+ $ref: "#/components/schemas/TransactionAuditTrailsGetResponseBody"
+ examples:
+ No transaction item audit trails:
+ summary: No transaction audit trails were found
+ description: No transaction audit trails that match the search criteria were found.
+ value:
+ "@odata.context": "$metadata#TransactionAuditTrail"
+ value: []
+ List containing multiple transaction audit trails:
+ summary: List containing multiple transaction audit trails
+ description: List containing multiple transaction audit trails of different transaction items (no filters applied).
+ value:
+ "@odata.context": "$metadata#TransactionAuditTrail"
+ value:
+ - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529
+ transactionAuditTrailRowId: 8218
+ transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1
+ user: fiko
+ timestamp: 2025-01-01 12:34:51
+ action: create
+ status: created
+ description: Transaction created.
+ correlationId: null
+ - "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5
+ transactionAuditTrailRowId: 8219
+ transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f
+ transactionItemId: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b
+ user: fiko
+ timestamp: 2025-01-01 12:34:50
+ action: create
+ status: created
+ description: Transaction created.
+ correlationId: null
+ - "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb
+ transactionAuditTrailRowId: 8220
+ transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6
+ transactionItemId: e8891be1-1b8a-4a0f-91e2-6b523b6497dd
+ user: ad.vogelaar
+ timestamp: 2025-01-01 12:34:48
+ action: update
+ status: return to src
+ description: Transaction retunred to source.
+ correlationId: a3891560-3084-42cb-867c-f289e7cda47d
+ - "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc
+ transactionAuditTrailRowId: 8221
+ transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10
+ transactionItemId: 34ba3d7c-3ca1-4fa4-aa42-23d4c4fc767b
+ user: fiko
+ timestamp: 2025-01-01 12:34:47
+ action: update
+ status: failed
+ description: Validation XYZ failed.
+ correlationId: null
+ List containing multiple transaction audit trails of one transaction item:
+ summary: List containing multiple audit trails of one transaction item
+ description: List containing multiple audit trail records of one transaction item (with id `d667d293-aa82-4c9e-9b10-77cffc9058a1`).
+ value:
+ "@odata.context": "$metadata#TransactionAuditTrail"
+ value:
+ - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529
+ transactionAuditTrailRowId: 8218
+ transactionAuditTrailId: d571ff7c-eaa5-428a-9bc3-5a0fa3e5ee2e
+ transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1
+ user: fiko
+ timestamp: 2025-01-07 12:34:59
+ action: update
+ status: re-entered
+ description: Transaction re-entered.
+ correlationId: null
+ - "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5
+ transactionAuditTrailRowId: 8219
+ transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f
+ transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1
+ user: ad.vogelaar
+ timestamp: 2025-01-04 12:34:54
+ action: update
+ status: return to src
+ description: Transaction retunred to source.
+ correlationId: a3891560-3084-42cb-867c-f289e7cda47d
+ - "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb
+ transactionAuditTrailRowId: 8220
+ transactionAuditTrailId: 1d759985-7f1a-48bd-8dd1-efa30ce26423
+ transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1
+ user: fiko
+ timestamp: 2025-01-02 00:34:50
+ action: update
+ status: failed
+ description: Validation XYZ failed.
+ correlationId: null
+ - "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc
+ transactionAuditTrailRowId: 8221
+ transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1
+ user: fiko
+ timestamp: 2025-01-01 12:34:47
+ action: create
+ status: created
+ description: Transaction created.
+ correlationId: null
+ List containing multiple audit trails of different failed transactions:
+ summary: List containing multiple audit trails of different failed transactions
+ description: List containing multiple audit trails of different failed transactions (status = failed).
+ value:
+ "@odata.context": "$metadata#TransactionAuditTrail"
+ value:
+ - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529
+ transactionAuditTrailRowId: 8218
+ transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1
+ user: fiko
+ timestamp: 2025-01-01 00:34:51
+ action: update
+ status: failed
+ description: Validation XYZ failed.
+ correlationId: null
+ - "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5
+ transactionAuditTrailRowId: 8219
+ transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f
+ transactionItemId: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b
+ user: fiko
+ timestamp: 2025-01-01 00:34:50
+ action: update
+ status: failed
+ description: Validation XYZ failed.
+ correlationId: null
+ - "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb
+ transactionAuditTrailRowId: 8220
+ transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6
+ transactionItemId: e8891be1-1b8a-4a0f-91e2-6b523b6497dd
+ user: fiko
+ timestamp: 2025-01-01 00:34:48
+ action: update
+ status: failed
+ description: Validation XYZ failed.
+ correlationId: null
+ - "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc
+ transactionAuditTrailRowId: 8221
+ transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10
+ transactionItemId: 34ba3d7c-3ca1-4fa4-aa42-23d4c4fc767b
+ user: fiko
+ timestamp: 2025-01-01 00:34:47
+ action: update
+ status: failed
+ description: Validation XYZ failed.
+ correlationId: null
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/ProcessingFailure:
get:
summary: Find processing failures.
description: Find processing failures.
tags:
- - Failures v2
+ - Odata
parameters:
- - in: query
- name: processingFailureId
- schema:
- type: string
- format: uuid
- example: 9834b346-d68c-438d-9bd5-6716422c2657
- description: The id of the processing failure.
- - in: query
- name: transactionItemId
- schema:
- type: string
- format: uuid
- example: 9834b346-d68c-438d-9bd5-6716422c2657
- description: The id of the transaction item.
- - in: query
- name: department
- schema:
- type: string
- example: 900
- description: The department (element 1) of the processing failure.
- - in: query
- name: costCenter
- schema:
- type: string
- example: 84955
- description: The cost center (element 3) of the processing failure.
- - in: query
- name: costType
- schema:
- type: string
- example: 619031
- description: The cost type (element 2) of the processing failure.
- - in: query
- name: documentDate
- schema:
- type: string
- format: date
- example: 2024-10-04
- description: The document date of the processing failure.
- - in: query
- name: documentCode
- schema:
- type: string
- example: VERK_FACTUUR
- description: The document code of the processing failure.
- - in: query
- name: accountingPeriod
- schema:
- type: string
- example: 2024/10
- description: The accounting period of the processing failure.
- - in: query
- name: transactionDescription
- schema:
- type: string
- example: Dagkaart
- description: The transaction description of the processing failure.
- - in: query
- name: contraAccount
- schema:
- type: string
- example: 220.10419
- description: The contra account of the processing failure.
- - in: query
- name: status
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
+ uniqueItems: true
type: array
items:
type: string
- example: [open, rejected]
+ enum:
+ - processingFailureRowId
+ - processingFailureId
+ - transactionItemId
+ - timestamp
+ - element
+ - value
+ - reasonCode
+ - reasonDescription
+ - resolved
+ - change
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
explode: false
- description: The status of the processing failure.
- - in: query
- name: minOccurences
schema:
- type: integer
- example: 1
- description: Minimum number of occurences.
- - in: query
- name: maxOccurences
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - processingFailureRowId
+ - processingFailureId
+ - transactionItemId
+ - timestamp
+ - element
+ - value
+ - reasonCode
+ - reasonDescription
+ - resolved
+ - change
+ - name: $expand
+ in: query
+ description: Expand related entities
+ required: false
+ style: form
+ explode: false
schema:
- type: integer
- example: 3
- description: Maximum number of occurences.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - TransactionItem
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "processingFailures":
- [
- {
- "processingFailureId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- "transactionItemId": "000dd413-2d19-47c0-a9db-9efbb6bc39a2",
- "department": "900",
- "costCenter": "84955",
- "costType": "619031",
- "documentDate": "2022-01-01",
- "documentCode": "VERK_FACTUUR",
- "accountingPeriod": "2024/10",
- "transactionDescription": "Dagkaart",
- "contraAccountNumber": "220.10419",
- "status": "open",
- "occurence": 1,
- "processingFailureInstances":
- [
- {
- "processingFailureInstanceId": "9afa9a6b-5b6a-4b0a-9c9e-4b0a5b6a4b0a",
- "processingFailureId": "c93a5b6a-5b6a-4b0a-9c9e-4b0a5b6a4b0a",
- "timestamp": "2022-01-01 00:00:00",
- "failureReason":
- {
- "failureReasonId": 12,
- "reasonCode": "1234ABCD",
- "reasonDesc": "description",
- },
- "element": "costCenter",
- "occurence": 1,
- "change": "Adapt config",
- },
- ],
- },
- ],
- "href": null,
- }
+ $ref: "#/components/schemas/ProcessingFailuresGetResponseBody"
+ examples:
+ No processing failures were found:
+ summary: No processing failures were found
+ description: No processing failures were found (for example for a single transaction item).
+ value:
+ "@odata.context": "$metadata#ProcessingFailure"
+ value: []
+ Multiple processing failures for a single transaction item:
+ summary: Multiple processing failures for a single transaction item
+ description: |
+ In this example multiple processing failures were found for a single transaction item.
+ This example shows how a single transaction items has failed validation two times, in which the
+ the first failure has two validation errors, which have been resolved, and the second failure
+ hasn't been. Which makes three processing failures total.
+ value:
+ "@odata.context": "$metadata#ProcessingFailure"
+ value:
+ - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529
+ processingFailureRowId: 9
+ processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce
+ timestamp: 2022-01-01 00:00:00
+ element: costType
+ value: 901
+ reasonCode: "004"
+ reasonDescription: Cost type does not exist.
+ resolved: false
+ change: null
+ - "@odata.etag": ff49829d-a5de-4c1a-b331-15fd9c71dfe9
+ processingFailureRowId: 10
+ processingFailureId: ccc06dc9-956d-47d8-bde7-9644ddde2193
+ transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce
+ timestamp: 2025-01-01 00:43:01
+ element: costCenter
+ value: 84955
+ reasonCode: "002"
+ reasonDescription: Cost center does not exist.
+ resolved: true
+ change: Adapt config
+ - "@odata.etag": 5d5d3351-d3f1-49b2-905f-4dbbe1cc30e3
+ processingFailureRowId: 11
+ processingFailureId: 96bf8d44-0030-4509-b24e-2d62299779c5
+ transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce
+ timestamp: 2025-01-01 00:43:01
+ element: department
+ value: 1337
+ reasonCode: "001"
+ reasonDescription: Department does not exist.
+ resolved: true
+ change: Adapt config
+ List of unfiltered processing failures:
+ summary: List of unfiltered processing failures
+ description: |
+ In this example there is a list of processing failures where no filters have been applied.
+ This results in a list of all processing failures, for different transaction items.
+ value:
+ "@odata.context": "$metadata#ProcessingFailure"
+ value:
+ - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529
+ processingFailureRowId: 9
+ processingFailureId: 1d0f237e-5fbe-4107-8bdf-a41f43307ac0
+ transactionItemId: d0425652-07a3-4b95-bb37-8bb15ea1b9b5
+ timestamp: 2022-01-01 00:00:00
+ element: occuredOn
+ value: 2027-01-01
+ reasonCode: "009"
+ reasonDescription: Transaction date is in the future
+ resolved: false
+ change: null
+ - "@odata.etag": 584d3a8a-48bc-45f9-99be-8dd70399e6e4
+ processingFailureRowId: 10
+ processingFailureId: 76aa82e1-a10f-4664-a84f-1f30d60884b3
+ transactionItemId: 3f0a8a74-c642-441e-a187-d32fedb77fdf
+ timestamp: 2025-01-01 00:43:01
+ element: costCenter
+ value: 84955
+ reasonCode: "002"
+ reasonDescription: Cost center does not exist.
+ resolved: false
+ change: null
+ - "@odata.etag": df4ade9b-1bda-4d91-a5ba-4dbe067568a0
+ processingFailureRowId: 11
+ processingFailureId: 25d2dd6f-ae17-44a7-b7a5-43eaf6de78e1
+ transactionItemId: 446ad396-41f6-4c1f-942c-a131e620075d
+ timestamp: 2025-01-01 00:43:01
+ element: department
+ value: 1337
+ reasonCode: "001"
+ reasonDescription: Department does not exist.
+ resolved: false
+ change: null
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
/processingfailures/{processingFailureId}:
parameters:
- in: path
@@ -636,710 +937,1299 @@ paths:
summary: Update processing failure.
description: Update processing failure.
tags:
- - Failures v2
+ - Failures v2.2
requestBody:
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example: { "status": "open", "occurence": 2 }
+ $ref: "#/components/schemas/ProcessingFailuresPatchRequestBody"
+ examples:
+ Resolve an existing processing failure:
+ summary: Resolve an existing processing failure
+ description: |
+ In this example, the processing failure with the id `37a8095b-19db-498f-9349-5f37d21c5bdf`
+ has been resolved by chaning the config.
+ value:
+ resolved: true
+ change: Adapt config
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "processingFailureId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- }
- /processingfailures/{processingFailureId}/processingfailureinstances:
- parameters:
- - in: path
- name: processingFailureId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- required: true
- description: The id of the processing failure.
- post:
- summary: Add a processing failure instance to a processing failure.
- description: Add a processing failure instance to a processing failure.
- tags:
- - Failures v2
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "timestamp": "2022-01-01 00:00:00",
- "failureReasonId": 12,
- "element": "costCenter",
- "occurence": 1,
- "change": "Adapt config",
- }
- responses:
- "201":
- description: Created
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "processingFailureInstanceId": "9afa9a6b-5b6a-4b0a-9c9e-4b0a5b6a4b0a",
- }
- /processingfailureinstances/{processingFailureInstanceId}:
- parameters:
- - in: path
- name: processingFailureInstanceId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- required: true
- description: The id of the processing failure instance.
- patch:
- summary: Update processing failure instance.
- description: Update processing failure instance.
- tags:
- - Failures v2
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "timestamp": "2022-01-01 00:00:00",
- "occurence": 2,
- "change": "Adapt config",
- }
- responses:
- "200":
- description: OK
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "processingFailureInstanceId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- }
- /productmetadata:
+ $ref: "#/components/schemas/ProcessingFailuresPatchResponseBody"
+ examples:
+ Processing failure updated successfully:
+ summary: Processing failure updated successfully
+ description: The processing failure has been updated successfully.
+ value:
+ processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/BookingProcess:
get:
- summary: Find product metadata.
- description: Find product metadata.
+ summary: Find booking processes.
+ description: Find booking processes.
tags:
- - Metadata v2
+ - Odata
parameters:
- - in: query
- name: productMetadataId
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the product metadata.
- - in: query
- name: productCode
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - bookingProcessRowId
+ - bookingProcessId
+ - name
+ - transactionType
+ - identifyingFieldName
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: 4031
- description: The product code.
- - in: query
- name: department
- schema:
- type: string
- example: 900
- description: The department.
- - in: query
- name: costCenter
- schema:
- type: string
- example: 84955
- description: The cost center.
- - in: query
- name: costType
- schema:
- type: string
- example: 619031
- description: The cost type.
- - in: query
- name: description
- schema:
- type: string
- example: O4031_Reisproduct HTM 1 dag Anoniem
- description: The description.
- - in: query
- name: documentCode
- schema:
- type: string
- example: VERK_FACTUUR
- description: The document code.
- - in: query
- name: updatedBefore
- schema:
- type: string
- example: 2022-01-01 00:00:00
- description: Timestamp that the metadata was updated before.
- - in: query
- name: updatedAfter
- schema:
- type: string
- example: 2022-01-01 00:00:00
- description: Timestamp that the metadata was updated after.
- - in: query
- name: validAt
- schema:
- type: string
- example: 2024-03-22T09:00:00
- description: Timestamp that the metadata is valid.
- - in: query
- name: contraAccountMetadataId
- schema:
- type: string
- format: uuid
- example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
- description: Find product metadata that is linked to this contra account.
- - in: query
- name: concessionId
- schema:
- type: integer
- example: 1
- description: Find product metadata that is linked to this concession.
- - in: query
- name: sourceMetadataId
- schema:
- type: string
- format: uuid
- example: 08d96f94-f468-467e-9068-c86c34f43097
- description: Find product metadata that is linked to this source metadata.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - bookingProcessRowId
+ - bookingProcessId
+ - name
+ - transactionType
+ - identifyingFieldName
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "productMetadata":
- [
- {
- "productMetadataId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61",
- "productCode": "4031",
- "department": "900",
- "costCenter": "84955",
- "costType": "619031",
- "description": "O4031_Reisproduct HTM 1 dag Anoniem",
- "documentCode": "VERK_FACTUUR",
- "timestampUpdated": "2022-01-01T00:00:00",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- "productContraAccounts":
- [
- {
- "contraAccountMetadata":
- {
- "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb",
- "contraAccountCode": "123456",
- "contraAccountNumber": "220.10419",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- },
- "concession":
- { "concessionId": 2, "name": "bus" },
- "sourceMetadata":
- {
- "sourceMetadataId": "bc4ea24a-27a5-40e8-bbbc-57a105afaaa0",
- "incomingName": "VerkoopEngine",
- "incomingEntity": "OrderLine",
- "outgoingName": "Website Verkopen",
- "businessOwner": "Corneel Verstoep",
- "rejectionProcessing": "system",
- "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc",
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- },
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- },
- {
- "contraAccountMetadata":
- {
- "contraAccountMetadataId": "69c562ca-5299-4585-ac92-46fb54aeb99e",
- "contraAccountCode": "123456",
- "contraAccountNumber": "220.10419",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- },
- "concession":
- { "concessionId": 1, "name": "bus" },
- "sourceMetadata":
- {
- "sourceMetadataId": "bc4ea24a-27a5-40e8-bbbc-57a105afaaa0",
- "incomingName": "VerkoopEngine",
- "incomingEntity": "OrderLine",
- "outgoingName": "Website Verkopen",
- "businessOwner": "Corneel Verstoep",
- "rejectionProcessing": "system",
- "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc",
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- },
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- },
- ],
- },
- ],
- "href": null,
- }
+ $ref: "#/components/schemas/BookingProcessesGetResponseBody"
+ examples:
+ List containing all booking processes:
+ summary: List containing all booking processes
+ description: Returns a list containing all booking processes (no filters applied).
+ value:
+ "@odata.context": "$metadata#BookingProcess"
+ value:
+ - "@odata.etag": df4ade9b-1bda-4d91-a5ba-4dbe067568a0
+ bookingProcessRowId: 10
+ bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ name: Verkooptransacties
+ transactionType: sales
+ identifyingFieldName: articleNumber
+ - "@odata.etag": 97c65a01-f5ac-4081-b731-137622c4630d
+ bookingProcessRowId: 11
+ bookingProcessId: 03105285-3c4c-477a-821c-0fae801d9d26
+ name: Inkooptransacties
+ transactionType: purchase
+ identifyingFieldName: null
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /bookingprocesses:
post:
- summary: Add product metadata.
- description: Add product metadata.
+ summary: Add a booking process.
+ description: Add a booking process.
tags:
- - Metadata v2
+ - Booking Processes v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "productCode": "4031",
- "department": "900",
- "costCenter": "84955",
- "costType": "619031",
- "description": "O4031_Reisproduct HTM 1 dag Anoniem",
- "documentCode": "VERK_FACTUUR",
- "timestampUpdated": "2022-01-01 00:00:00",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- "productContraAccounts":
- [
- {
- "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb",
- "concessionId": 1,
- "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- },
- {
- "contraAccountMetadataId": "02e458ce-f77a-4262-8b38-490e54f52856",
- "concessionId": 2,
- "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- },
- ],
- }
+ $ref: "#/components/schemas/BookingProcessesPostRequestBody"
+ examples:
+ Add a new booking process:
+ summary: Add a new booking process
+ description: |
+ This example shows how a new booking process for purchase orders can be added.
+ value:
+ name: Inkooptransacties
+ transactionType: purchase
+ identifyingFieldName: articleNumber
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- { "productMetadataId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61" }
- /productmetadata/{productMetadataId}:
+ $ref: "#/components/schemas/BookingProcessesPostResponseBody"
+ examples:
+ New booking process added successfully:
+ summary: New booking process added successfully
+ description: The new booking process was successfully added to the database.
+ value:
+ bookingProcessId: 03105285-3c4c-477a-821c-0fae801d9d26
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /bookingprocesses/{bookingProcessId}:
parameters:
- in: path
- name: productMetadataId
+ name: bookingProcessId
schema:
type: string
format: uuid
example: 37a8095b-19db-498f-9349-5f37d21c5bdf
required: true
- description: The id of the product metadata.
+ description: The id of the booking process.
patch:
- summary: Update product metadata.
- description: Update product metadata.
+ summary: Update a booking process.
+ description: Update a booking process.
tags:
- - Metadata v2
+ - Booking Processes v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "productCode": "4031",
- "department": "900",
- "costCenter": "84955",
- "costType": "619031",
- "description": "O4031_Reisproduct HTM 1 dag Anoniem",
- "documentCode": "VERK_FACTUUR",
- "timestampUpdated": "2022-01-01 00:00:00",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- }
+ $ref: "#/components/schemas/BookingProcessesPatchRequestBody"
+ examples:
+ Update a booking process:
+ summary: Update a booking process
+ description: |
+ This example shows how a booking process can be updated.
+ value:
+ name: Verkooptransacties
+ transactionType: sales
+ identifyingFieldName: orderNumber
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- { "productMetadataId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61" }
- /productcontraaccounts/{productContraAccountId}:
+ $ref: "#/components/schemas/BookingProcessesPatchResponseBody"
+ examples:
+ Booking process successfully updated:
+ summary: Booking process successfully updated
+ description: The booking process was successfully updated in the database.
+ value:
+ bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /bookingprocesses/{bookingProcessId}/bookingmetadata:
parameters:
- in: path
- name: productContraAccountId
+ name: bookingProcessId
schema:
type: string
format: uuid
example: 37a8095b-19db-498f-9349-5f37d21c5bdf
required: true
- description: The id of the product contra account.
- patch:
- summary: Update product contra account.
- description: Update product contra account.
- tags:
- - Metadata v2
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb",
- "concessionId": 1,
- "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- }
- responses:
- "200":
- description: OK
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "productContraAccountId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61",
- }
- /productmetadata/{productMetadataId}/metadataaudittrails:
- parameters:
- - in: path
- name: productMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- required: true
- description: The id of the product metadata.
+ description: The id of the booking process.
post:
- summary: Add metadata audit trail.
- description: Add metadata audit trail.
+ summary: Add booking metadata.
+ description: Add booking metadata.
tags:
- - Audit Trail v2
+ - Booking Processes v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "user": "rmeeuws",
- "timestamp": "2024-10-04T00:00:00",
- "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127",
- "metadataChanges":
- [
- {
- "fieldName": "department",
- "oldValue": "900",
- "newValue": "999",
- },
- ],
- }
+ $ref: "#/components/schemas/BookingMetadataPostRequestBody"
+ examples:
+ Add a new booking metadata:
+ summary: Add a new booking metadata
+ description: |
+ This example shows how a new booking metadata for a booking process can be added.
+ value:
+ name: Saldoreizen
+ description: Saldoreizen nov. 2024
+ documentCode: OPBR-FIKO
+ hasSeparateTaxLine: true
+ hasLinePerIdentifyingField: false
+ hasLinePerSource: true
+ hasLinePerConcession: true
+ validFrom: 2024-03-22T09:00:00
+ validUntil: null
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/postMetadataAuditTrailResponse"
- /contraaccountmetadata:
+ $ref: "#/components/schemas/BookingMetadataPostResponseBody"
+ examples:
+ New booking metadata added successfully:
+ summary: New booking metadata added successfully
+ description: The new booking metadata was successfully added to the database.
+ value:
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/BookingMetadata:
get:
- summary: Find contra account metadata.
- description: Find contra account metadata.
+ summary: Find booking metadata.
+ description: Find booking metadata.
tags:
- - Metadata v2
+ - Odata
parameters:
- - in: query
- name: contraAccountMetadataId
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the contra account metadata.
- - in: query
- name: contraAccountCode
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - bookingMetadataRowId
+ - bookingMetadataId
+ - bookingProcessId
+ - name
+ - description
+ - documentCode
+ - hasSeparateTaxLine
+ - hasLinePerIdentifyingField
+ - hasLinePerSource
+ - hasLinePerConcession
+ - validFrom
+ - validUntil
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: 123456
- description: The code of the contra account.
- - in: query
- name: contraAccountNumber
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - bookingMetadataRowId
+ - bookingMetadataId
+ - bookingProcessId
+ - name
+ - description
+ - documentCode
+ - hasSeparateTaxLine
+ - hasLinePerIdentifyingField
+ - hasLinePerSource
+ - hasLinePerConcession
+ - validFrom
+ - validUntil
+ - name: $expand
+ in: query
+ description: Expand related entities
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: 220.10419
- description: The number of the contra account.
- - in: query
- name: validAt
- schema:
- type: string
- format: date-time
- example: 2024-03-22T09:00:00
- description: Timestamp that the metadata is valid.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - BookingProcess
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "contraAccountMetadata":
- [
- {
- "contraAccountMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- "contraAccountCode": "123456",
- "contraAccountNumber": "220.10419",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- },
- ],
- "href": null,
- }
- post:
- summary: Add contra account metadata.
- description: Add contra account metadata.
- tags:
- - Metadata v2
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "contraAccountCode": "123456",
- "contraAccountNumber": "220.10419",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- }
- responses:
- "201":
- description: Created
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "contraAccountMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- }
- /contraaccountmetadata/{contraAccountMetadataId}:
+ $ref: "#/components/schemas/BookingMetadataGetResponseBody"
+ examples:
+ List containing all booking metadata:
+ summary: List containing all booking metadata
+ description: Returns a list containing all booking metadata (no filters applied).
+ value:
+ "@odata.context": "$metadata#BookingMetadata"
+ value:
+ - "@odata.etag": 6962e56b-c7dd-3336-9627-6687f007ee07
+ bookingMetadataRowId: 13
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ name: Dagkaarten
+ description: Dagkaarten nov. 2024
+ documentCode: OPBR-FIKO
+ hasSeparateTaxLine: true
+ hasLinePerIdentifyingField: true
+ hasLinePerSource: true
+ hasLinePerConcession: true
+ validFrom: 2022-01-01 00:00:00
+ validUntil: null
+ - "@odata.etag": 2fc41131-e875-4365-b4b4-f5babc7349b1
+ bookingMetadataRowId: 14
+ bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034
+ bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ name: Saldoreizen
+ description: Saldoreizen nov. 2024
+ documentCode: OPBR-FIKO
+ hasSeparateTaxLine: true
+ hasLinePerIdentifyingField: true
+ hasLinePerSource: true
+ hasLinePerConcession: true
+ validFrom: 2022-01-01 00:00:00
+ validUntil: null
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /bookingmetadata/{bookingMetadataId}:
parameters:
- in: path
- name: contraAccountMetadataId
+ name: bookingMetadataId
schema:
type: string
format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
required: true
- description: The id of the contra account metadata.
+ description: The id of the booking metadata.
patch:
- summary: Update contra account metadata.
- description: Update contra account metadata.
+ summary: Update booking metadata.
+ description: Update booking metadata.
tags:
- - Metadata v2
+ - Booking Processes v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "contraAccountNumber": "220.10419",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- }
+ $ref: "#/components/schemas/BookingMetadataPatchRequestBody"
+ examples:
+ Update booking metadata:
+ summary: Update booking metadata
+ description: |
+ In this example the booking metadata is updated. All fields are updated.
+ value:
+ name: Dagkaarten
+ description: Dagkaarten nov. 2024
+ documentCode: OPBR-FIKO
+ hasSeparateTaxLine: true
+ hasLinePerIdentifyingField: true
+ hasLinePerSource: true
+ hasLinePerConcession: true
+ validFrom: 2022-01-01 00:00:00
+ validUntil: 2024-03-22T09:00:00
+ Update valid until:
+ summary: Update valid until
+ description: |
+ In this example the booking metadata is updated. The validUntil field is updated to 2024-03-22T09:00:00.
+ value:
+ validUntil: 2024-03-22T09:00:00
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "contraAccountMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- }
- /contraaccountmetadata/{contraAccountMetadataId}/metadataaudittrails:
+ $ref: "#/components/schemas/BookingMetadataPatchResponseBody"
+ examples:
+ Booking metadata updated successfully:
+ summary: Booking metadata updated successfully
+ description: The booking metadata was successfully updated in the database.
+ value:
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ summary: Delete booking metadata.
+ description: |
+ Delete booking metadata. Note that booking metadata can only be deleted
+ if the validFrom is in the future.
+ tags:
+ - Booking Processes v2.2
+ responses:
+ "200":
+ description: OK
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /bookingmetadata/{bookingMetadataId}/bookinggroupfields:
parameters:
- in: path
- name: contraAccountMetadataId
+ name: bookingMetadataId
schema:
type: string
format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
required: true
- description: The id of the contra account metadata.
+ description: The id of the booking metadata.
post:
- summary: Add metadata audit trail.
- description: Add metadata audit trail.
+ summary: Add booking group fields.
+ description: Add booking group fields.
tags:
- - Audit Trail v2
+ - Booking Processes v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "user": "rmeeuws",
- "timestamp": "2024-10-04T00:00:00",
- "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127",
- "metadataChanges":
- [
- {
- "fieldName": "contraAccountMetadataId",
- "oldValue": "873810a3-a11a-4d4d-9af7-395520fa207c",
- "newValue": "9a8eb116-5270-4ef9-81ef-fdc2e72c281a",
- },
- ],
- }
+ $ref: "#/components/schemas/BookingGroupFieldsPostRequestBody"
+ examples:
+ Add a new booking group field:
+ summary: Add a new booking group field
+ description: Add a new booking group field to an existing booking.
+ value:
+ identifyingFieldValue: 4135
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/postMetadataAuditTrailResponse"
- /taxmetadata:
+ $ref: "#/components/schemas/BookingGroupFieldsPostResponseBody"
+ examples:
+ New booking group field added successfully:
+ summary: New booking group field added successfully
+ description: The new booking group field was successfully added to the database.
+ value:
+ bookingGroupFieldId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /bookingmetadata/{bookingMetadataId}/bookinglinemetadata:
+ parameters:
+ - in: path
+ name: bookingMetadataId
+ schema:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ required: true
+ description: The id of the booking metadata.
+ post:
+ summary: Add booking line metadata.
+ description: Add booking line metadata.
+ tags:
+ - Booking Processes v2.2
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BookingLineMetadataPostRequestBody"
+ examples:
+ Add a new tax booking line metadata:
+ summary: Add a new tax booking line metadata
+ description: In this example a new tax booking line metadata is added to an existing booking.
+ value:
+ name: Saldoreizen - BTW
+ description: BTW 9%
+ sourceMetadataId: null
+ identifyingFieldValue: null
+ concessionId: null
+ isContraAccount: false
+ lineType: tax
+ lineSense: credit
+ department: 140
+ costType: 15427
+ costCenter: null
+ articleName: null
+ extRef1: null
+ extRef2: null
+ extRef3: null
+ extRef4: null
+ extRef5: TLS
+ extRef6: null
+ Add a new yield booking line metadata:
+ summary: Add a new yield booking line metadata
+ description: In this example a new yield booking line metadata is added to an existing booking.
+ value:
+ name: Opbrengst Saldoreizen - RAIL
+ description: Saldoreizen nov. 2024
+ sourceMetadataId: null
+ identifyingFieldValue: null
+ concessionId: 1
+ isContraAccount: false
+ lineType: analysis
+ lineSense: credit
+ department: 900
+ costType: 84956
+ costCenter: 603031
+ articleName: Saldoreizen
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: TLS
+ extRef6: null
+ Add a new contra account booking line metadata:
+ summary: Add a new contra account booking line metadata
+ description: In this example a new contra account booking line metadata is added to an existing booking.
+ value:
+ name: Tegenrekening productverkopen
+ description: ST20 produktverkopen nov 2024
+ sourceMetadataId: null
+ identifyingFieldValue: null
+ concessionId: null
+ isContraAccount: true
+ lineType: analysis
+ lineSense: debet
+ department: 140
+ costType: 15427
+ costCenter: null
+ articleName: null
+ extRef1: null
+ extRef2: null
+ extRef3: null
+ extRef4: null
+ extRef5: null
+ extRef6: null
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BookingLineMetadataPostResponseBody"
+ examples:
+ New booking line metadata added successfully:
+ summary: New booking line metadata added successfully
+ description: The new booking line metadata was successfully added to the database.
+ value:
+ bookingLineMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/BookingGroupField:
+ get:
+ summary: Find booking group fields.
+ description: Find booking group fields.
+ tags:
+ - Odata
+ parameters:
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
+ schema:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - bookingGroupFieldRowId
+ - bookingGroupFieldId
+ - bookingMetadataId
+ - identifyingFieldValue
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
+ schema:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - bookingGroupFieldRowId
+ - bookingGroupFieldId
+ - bookingMetadataId
+ - identifyingFieldValue
+ - name: $expand
+ in: query
+ description: Expand related entities
+ required: false
+ style: form
+ explode: false
+ schema:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - BookingMetadata
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BookingGroupFieldsGetResponseBody"
+ examples:
+ List containing all booking group fields:
+ summary: List containing all booking group fields
+ description: Returns a list containing all booking group fields for all booking metadata (no filters applied).
+ value:
+ "@odata.context": "$metadata#BookingGroupField"
+ value:
+ - "@odata.etag": 2e52e353-bf49-4296-8dc3-bd5e6096be4e
+ bookingGroupFieldRowId: 8
+ bookingGroupFieldId: b34d0fc2-96fc-409b-93b6-ae51fb8c694a
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 1737
+ - "@odata.etag": 3f285dc2-6ae3-4613-a759-68fada2afcdf
+ bookingGroupFieldRowId: 9
+ bookingGroupFieldId: 3b9005f4-42c4-4e2b-b472-ba7d0926fe77
+ bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034
+ identifyingFieldValue: 1748
+ - "@odata.etag": f6f303f9-6685-44be-9c44-aec14a59e461
+ bookingGroupFieldRowId: 10
+ bookingGroupFieldId: ae773282-ac9b-4a0b-a487-b4061ea2a42f
+ bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034
+ identifyingFieldValue: 1750
+ - "@odata.etag": 39d5bf02-0ac3-47a2-8ba4-e00a18108e98
+ bookingGroupFieldRowId: 11
+ bookingGroupFieldId: fe1aca8c-3ef5-4e15-962b-202d28d3d761
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 1757
+ List containing all booking group fields for a single booking:
+ summary: List containing all booking group fields for a single booking
+ description: |
+ Returns a list containing all booking group fields for a single booking booking metadata 'Dagkaart'
+ (identified by the same bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617).
+ value:
+ "@odata.context": "$metadata#BookingGroupField"
+ value:
+ - "@odata.etag": 2e52e353-bf49-4296-8dc3-bd5e6096be4e
+ bookingGroupFieldRowId: 8
+ bookingGroupFieldId: b34d0fc2-96fc-409b-93b6-ae51fb8c694a
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 1737
+ - "@odata.etag": d269b9e9-2f8e-4c3d-9874-599d2e7553aa
+ bookingGroupFieldRowId: 9
+ bookingGroupFieldId: fe1aca8c-3ef5-4e15-962b-202d28d3d761
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 1757
+ - "@odata.etag": 8110f2ee-a37a-4e56-a3d8-5ae113675923
+ bookingGroupFieldRowId: 10
+ bookingGroupFieldId: fede01e0-86c5-47d0-9466-3093132148e5
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 4031
+ - "@odata.etag": 89e9ef54-138a-479d-a4ce-5e01d3f8bb14
+ bookingGroupFieldRowId: 11
+ bookingGroupFieldId: d7c25182-b64e-4e47-8998-19ddb65b8f2c
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 4032
+ - "@odata.etag": ab2242f7-b891-40fe-86c0-34e0f4453316
+ bookingGroupFieldRowId: 12
+ bookingGroupFieldId: ea02d3eb-29e6-42fd-b7eb-dfbfd2231090
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 4033
+ - "@odata.etag": 9244dd72-fcc0-4578-97cc-9dcc55429eb4
+ bookingGroupFieldRowId: 13
+ bookingGroupFieldId: a73407a6-ff8c-4924-a7ac-5cd605e1793c
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 4034
+ - "@odata.etag": 057281d9-65ef-46b9-b7d3-efee2968a438
+ bookingGroupFieldRowId: 14
+ bookingGroupFieldId: d9af4bf1-4e85-4eb6-ae5d-d2020b18d63c
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 4051
+ - "@odata.etag": 95e91fe2-e990-4b9e-a146-b44142d66b90
+ bookingGroupFieldRowId: 15
+ bookingGroupFieldId: c1ba494b-249a-475b-a542-19918aa36778
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 4053
+ - "@odata.etag": c346c96d-acac-4e2b-a652-219983fc5bca
+ bookingGroupFieldRowId: 16
+ bookingGroupFieldId: 69be1be0-c600-492d-aec1-8490409371da
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 4054
+ - "@odata.etag": 39635b84-551e-4927-9787-28f6868d3b18
+ bookingGroupFieldRowId: 17
+ bookingGroupFieldId: d7d00ec1-6d53-44e9-bcd8-01f6a523f771
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ identifyingFieldValue: 4055
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /bookinggroupfields/{bookingGroupFieldId}:
+ parameters:
+ - in: path
+ name: bookingGroupFieldId
+ schema:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ required: true
+ description: The id of the booking group field.
+ delete:
+ summary: Delete booking group field.
+ description: Delete booking group field.
+ tags:
+ - Booking Processes v2.2
+ responses:
+ "200":
+ description: OK
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/BookingLineMetadata:
+ get:
+ summary: Find booking line metadata.
+ description: Find booking line metadata.
+ tags:
+ - Odata
+ parameters:
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
+ schema:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - bookingLineMetadataRowId
+ - bookingLineMetadataId
+ - bookingMetadataId
+ - name
+ - description
+ - sourceMetadataId
+ - identifyingFieldValue
+ - concessionId
+ - isContraAccount
+ - lineType
+ - lineSense
+ - department
+ - costType
+ - costCenter
+ - articleName
+ - extRef1
+ - extRef2
+ - extRef3
+ - extRef4
+ - extRef5
+ - extRef6
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
+ schema:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - bookingLineMetadataRowId
+ - bookingLineMetadataId
+ - bookingMetadataId
+ - name
+ - description
+ - sourceMetadataId
+ - identifyingFieldValue
+ - concessionId
+ - isContraAccount
+ - lineType
+ - lineSense
+ - department
+ - costType
+ - costCenter
+ - articleName
+ - extRef1
+ - extRef2
+ - extRef3
+ - extRef4
+ - extRef5
+ - extRef6
+ - name: $expand
+ in: query
+ description: Expand related entities
+ required: false
+ style: form
+ explode: false
+ schema:
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - BookingMetadata
+ - SourceMetadata
+ - Concession
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BookingLineMetadataGetResponseBody"
+ examples:
+ List containing two different booking lines:
+ summary: List containing two different booking lines
+ description: List containing two different booking line metadata records, for two different booking processes (no filters applied).
+ value:
+ "@odata.context": "$metadata#BookingLineMetadata"
+ value:
+ - "@odata.etag": 511fb29c-47d6-4af9-bc54-cbbf3de27dae
+ bookingLineMetadataRowId: 10
+ bookingLineMetadataId: 98dccb4c-f24f-4acd-a036-f4b465124842
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ name: Webshop - Dagkaart - BUS
+ description: Dagkaarten nov. 2024 BUS
+ sourceMetadataId: 2c55f374-8ef8-4615-bc0a-5c92184ff4b2
+ identifyingFieldValue: null
+ concessionId: 2
+ isContraAccount: false
+ lineType: summary
+ lineSense: credit
+ department: 900
+ costType: 84956
+ costCenter: 603031
+ articleName: dagkaart
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: Webshop
+ extRef6: null
+ - "@odata.etag": 42b91a85-0771-4cde-92ff-fe4a42bb6cf7
+ bookingLineMetadataRowId: 11
+ bookingLineMetadataId: 1bca01db-40d3-4447-9f28-41475ec6877d
+ bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034
+ name: TLS - Saldoreizen - RAIL
+ description: Saldoreizen nov. 2024 RAIL
+ sourceMetadataId: 4dab350d-a47c-4cc0-80e8-404e099f5c24
+ identifyingFieldValue: null
+ concessionId: 1
+ isContraAccount: false
+ lineType: summary
+ lineSense: credit
+ department: 900
+ costType: 84955
+ costCenter: 603007
+ articleName: Opbrengst TLS
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: TLS
+ extRef6: null
+ List containing booking line metadata of one booking:
+ summary: List containing booking line metadata of one booking
+ description: |
+ Returns a list containing all booking line metadata a single booking.
+ This example contains all the booking lines for a 'Dagkaart' booking
+ (bookingMetadataId: "6ce10520-9a73-4cb4-b8dd-39ee46ceb617").
+ value:
+ "@odata.context": "$metadata#BookingLineMetadata"
+ value:
+ - "@odata.etag": 42b91a85-0771-4cde-92ff-fe4a42bb6cf7
+ bookingLineMetadataRowId: 11
+ bookingLineMetadataId: 98dccb4c-f24f-4acd-a036-f4b465124842
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ name: Webshop - Dagkaart - BUS
+ description: Dagkaarten nov. 2024 BUS
+ sourceMetadataId: 2c55f374-8ef8-4615-bc0a-5c92184ff4b2
+ identifyingFieldValue: null
+ concessionId: 2
+ isContraAccount: false
+ lineType: summary
+ lineSense: credit
+ department: 900
+ costType: 84956
+ costCenter: 619031
+ articleName: dagkaart
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: Webshop
+ extRef6: null
+ - "@odata.etag": 8513d1aa-5cba-4765-81ca-56ca1272cc05
+ bookingLineMetadataRowId: 12
+ bookingLineMetadataId: a4464b5c-9a8e-4e48-a0a0-5500b1ca0885
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ name: Webshop - Dagkaart - RAIL
+ description: Dagkaarten nov. 2024 RAIL
+ sourceMetadataId: 2c55f374-8ef8-4615-bc0a-5c92184ff4b2
+ identifyingFieldValue: null
+ concessionId: 1
+ lineType: summary
+ lineSense: credit
+ department: 900
+ costType: 84956
+ costCenter: 603031
+ articleName: dagkaart
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: Webshop
+ extRef6: null
+ - "@odata.etag": 63e1c54d-7c6b-4b77-ab7f-86a5e9ce9e53
+ bookingLineMetadataRowId: 13
+ bookingLineMetadataId: feaa7b33-ba49-40a2-90f3-5dd70d591f17
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ name: Ticketapp - Dagkaart - BUS
+ description: Dagkaarten nov. 2024 BUS
+ sourceMetadataId: 2c55f374-8ef8-4615-bc0a-5c92184ff4b2
+ identifyingFieldValue: null
+ concessionId: 2
+ isContraAccount: false
+ lineType: summary
+ lineSense: credit
+ department: 900
+ costType: 84956
+ costCenter: 619031
+ articleName: dagkaart
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: Webshop
+ extRef6: null
+ - "@odata.etag": 576446b0-b3c4-4a63-bff4-939d44104572
+ bookingLineMetadataRowId: 14
+ bookingLineMetadataId: ea6ce4e7-4d52-4b89-bbea-ffe0ef6c48ff
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ name: Ticketapp - Dagkaart - RAIL
+ description: Dagkaarten nov. 2024 RAIL
+ sourceMetadataId: 2c55f374-8ef8-4615-bc0a-5c92184ff4b2
+ identifyingFieldValue: null
+ concessionId: 1
+ isContraAccount: false
+ lineType: summary
+ lineSense: credit
+ department: 900
+ costType: 84956
+ costCenter: 603031
+ articleName: dagkaart
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: Webshop
+ extRef6: null
+ - "@odata.etag": cbd3968b-8e73-4c43-847b-a680e43e67cb
+ bookingLineMetadataRowId: 15
+ bookingLineMetadataId: 0a8dbb7d-73c8-451e-9028-e4613283c7bd
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ name: Dagkaart - BTW
+ description: BTW 9%
+ sourceMetadataId: null
+ identifyingFieldValue: null
+ concessionId: null
+ isContraAccount: false
+ lineType: tax
+ lineSense: credit
+ department: 140
+ costType: 15427
+ costCenter: null
+ articleName: dagkaart
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: null
+ extRef6: null
+ - "@odata.etag": 26c89ff7-2fc3-4cc5-ae80-7e1e90886148
+ bookingLineMetadataRowId: 16
+ bookingLineMetadataId: d8c8b3b8-e996-463e-9c32-f0878ebfbcbb
+ bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ name: Dagkaart - Tegenrekening
+ description: ST20 produktverkopen nov 2024
+ sourceMetadataId: null
+ identifyingFieldValue: null
+ concessionId: null
+ isContraAccount: true
+ lineType: analysis
+ lineSense: credit
+ department: 220
+ costType: 10486
+ costCenter: null
+ articleName: null
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: null
+ extRef6: null
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /bookinglinemetadata/{bookingLineMetadataId}:
+ parameters:
+ - in: path
+ name: bookingLineMetadataId
+ schema:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ required: true
+ description: The id of the booking line metadata.
+ patch:
+ summary: Update booking line metadata.
+ description: Update booking line metadata.
+ tags:
+ - Booking Processes v2.2
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BookingLineMetadataPatchRequestBody"
+ examples:
+ Update a booking line:
+ summary: Update a booking line
+ description: |
+ In this example an existing booking line metadata is updated.
+ value:
+ name: Ticketapp - Dagkaart - RAIL
+ description: Dagkaarten nov. 2024 RAIL
+ sourceMetadataId: 8cddd157-c9ea-4027-9e8b-f1c5201440f1
+ identifyingFieldValue: null
+ concessionId: 1
+ isContraAccount: false
+ lineType: summary
+ lineSense: credit
+ department: 900
+ costType: 84956
+ costCenter: 603031
+ articleName: dagkaart
+ extRef1: null
+ extRef2: null
+ extRef3: 2025-02-17
+ extRef4: null
+ extRef5: Webshop
+ extRef6: null
+ Update cost center of a booking line:
+ summary: Update cost center of a booking line
+ description: |
+ In this example the cost center of an existing booking line metadata is updated.
+ value:
+ costCenter: 84957
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/BookingLineMetadataPatchResponseBody"
+ examples:
+ Booking line metadata updated successfully:
+ summary: Booking line metadata updated successfully
+ description: The booking line metadata was successfully updated in the database.
+ value:
+ bookingLineMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ summary: Delete booking line metadata.
+ description: Delete booking line metadata.
+ tags:
+ - Booking Processes v2.2
+ responses:
+ "200":
+ description: OK
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/TaxMetadata:
get:
summary: Find tax metadata.
description: Find tax metadata.
tags:
- - Metadata v2
+ - Odata
parameters:
- - in: query
- name: taxMetadataId
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the tax metadata.
- - in: query
- name: taxCode
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - taxMetadataRowId
+ - taxMetadataId
+ - taxCode
+ - taxPercentage
+ - description
+ - weFactTaxCode
+ - validFrom
+ - validUntil
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: V21
- description: The tax code.
- - in: query
- name: taxPercentageAmount
- schema:
- type: string
- example: 21
- description: The tax percentage amount.
- - in: query
- name: description
- schema:
- type: string
- example: BTW VERKOOP HOOG 21%
- description: The description of the tax metadata.
- - in: query
- name: validAt
- schema:
- type: string
- format: date-time
- example: 2024-03-22T09:00:00
- description: Timestamp that the metadata is valid.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - taxMetadataRowId
+ - taxMetadataId
+ - taxCode
+ - taxPercentage
+ - description
+ - validFrom
+ - validUntil
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "taxMetadata":
- [
- {
- "taxMetadataId": "bc4ea24a-27a5-40e8-bbbc-57a105afaaa0",
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "BTW VERKOOP HOOG 21%",
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- },
- {
- "taxMetadataId": "73c47af3-7c8b-44d3-b599-9b6f5a587a82",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%",
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- },
- {
- "taxMetadataId": "423b879c-e8db-4ba2-a2b4-0adfe037043d",
- "taxCode": "V0",
- "taxPercentageAmount": 0,
- "description": "BTW VERKOOP NUL",
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- },
- ],
- "href": null,
- }
+ $ref: "#/components/schemas/TaxMetadataGetResponseBody"
+ examples:
+ List containing all tax metadata:
+ summary: List containing all tax metadata
+ description: Returns a list containing all tax metadata (no filters applied).
+ value:
+ "@odata.context": "$metadata#TaxMetadata"
+ value:
+ - "@odata.etag": 4a758689-c28f-47d1-a230-e5422e9ad3be
+ taxMetadataRowId: 13
+ taxMetadataId: 2d444740-4131-4169-bb47-2d125641dc87
+ taxCode: V00
+ taxPercentage: 0
+ description: BTW VERKOOP NUL
+ weFactTaxCode: V0
+ validFrom: 2024-03-22T09:00:00
+ validUntil: null
+ - "@odata.etag": f848cce9-7fbe-4371-a70c-085fefe4613e
+ taxMetadataRowId: 14
+ taxMetadataId: b5f879d1-043d-4357-9655-2eeca8ebe9bf
+ taxCode: V09
+ taxPercentage: 9
+ description: BTW VERKOOP LAAG 9%
+ weFactTaxCode: V9
+ validFrom: 2024-03-22T09:00:00
+ validUntil: null
+ - "@odata.etag": db06ae45-710d-4a4b-958b-cba61a8ba027
+ taxMetadataRowId: 15
+ taxMetadataId: 62e1abe7-d76f-4364-9207-591c0601ba55
+ taxCode: V21
+ taxPercentage: 21
+ description: BTW VERKOOP HOOG 21%
+ weFactTaxCode: V21
+ validFrom: 2024-03-22T09:00:00
+ validUntil: null
+ - "@odata.etag": 3bc97433-06f8-431c-b931-f5e33641bf88
+ taxMetadataRowId: 16
+ taxMetadataId: 9a253fc3-e562-4c4a-925c-d9caf0dcc549
+ taxCode: I00
+ taxPercentage: 0
+ description: BTW DEBIT NUL
+ weFactTaxCode: I0
+ validFrom: 2024-03-22T09:00:00
+ validUntil: null
+ - "@odata.etag": 2262ab02-57a8-4425-a823-88d3c8d956bf
+ taxMetadataRowId: 17
+ taxMetadataId: 6243b848-5ca3-44e0-9860-4fb3a817f148
+ taxCode: I09
+ taxPercentage: 9
+ description: BTW DEBIT laag 9%
+ weFactTaxCode: I9
+ validFrom: 2024-03-22T09:00:00
+ validUntil: null
+ - "@odata.etag": 261794fa-11fa-47a2-9429-1e671638cb9d
+ taxMetadataRowId: 18
+ taxMetadataId: 0240d6e4-6037-4da0-ac10-1fde0229d439
+ taxCode: I21
+ taxPercentage: 21
+ description: BTW DEBIT hoog 21%
+ weFactTaxCode: I21
+ validFrom: 2024-03-22T09:00:00
+ validUntil: null
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /taxmetadata:
post:
summary: Add tax metadata.
description: Add tax metadata.
tags:
- - Metadata v2
+ - Metadata v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "BTW VERKOOP HOOG 21%",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- }
+ $ref: "#/components/schemas/TaxMetadataPostRequestBody"
+ examples:
+ Add new tax metadata:
+ summary: Add new tax metadata
+ description: This example adds a new tax metadata record to the database.
+ value:
+ taxCode: V21.4
+ taxPercentage: 21.4
+ description: BTW VERKOOP HOOG 21.4%
+ weFactTaxCode: V21.4
+ validFrom: 2025-03-22T09:00:00
+ validUntil: null
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- { "taxMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" }
+ $ref: "#/components/schemas/TaxMetadataPostResponseBody"
+ examples:
+ Tax metadata created successfully:
+ summary: Tax metadata created successfully
+ description: The tax metadata was successfully added to the database.
+ value:
+ taxMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
/taxmetadata/{taxMetadataId}:
parameters:
- in: path
@@ -1354,184 +2244,208 @@ paths:
summary: Update tax metadata.
description: Update tax metadata.
tags:
- - Metadata v2
+ - Metadata v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "BTW VERKOOP HOOG 21%",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": "2025-12-31T23:59:59",
- }
+ $ref: "#/components/schemas/TaxMetadataPatchRequestBody"
+ examples:
+ Update tax metadata:
+ summary: Update tax metadata
+ description: In this example the tax metadata is updated.
+ value:
+ taxCode: V09
+ taxPercentage: 9
+ description: BTW VERKOOP LAAG 9%
+ weFactTaxCode: V9
+ validFrom: 2024-03-22T09:00:00
+ validUntil: 2025-03-22T09:00:00
+ Update tax metadata validity:
+ summary: Update tax metadata validity
+ description: In this example the validity of a tax metadata is updated. The validUntil field is updated to 2025-03-22T09:00:00.
+ value:
+ validUntil: 2025-03-22T09:00:00
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- { "taxMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" }
- /taxmetadata/{taxMetadataId}/metadataaudittrails:
- parameters:
- - in: path
- name: taxMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- required: true
- description: The id of the contra account metadata.
- post:
- summary: Add metadata audit trail.
- description: Add metadata audit trail.
+ $ref: "#/components/schemas/TaxMetadataPatchResponseBody"
+ examples:
+ Tax metadata updated successfully:
+ summary: Tax metadata updated successfully
+ description: The tax metadata was successfully updated in the database.
+ value:
+ taxMetadataId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ summary: Delete tax metadata.
+ description: |
+ Delete tax metadata. Note that tax metadata can only be deleted
+ if the validFrom is in the future.
tags:
- - Audit Trail v2
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "user": "rmeeuws",
- "timestamp": "2024-10-04T00:00:00",
- "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127",
- "metadataChanges":
- [
- {
- "fieldName": "taxCode",
- "oldValue": null,
- "newValue": "V21",
- },
- ],
- }
+ - Metadata v2.2
responses:
- "201":
- description: Created
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/postMetadataAuditTrailResponse"
- /sourcemetadata:
+ "200":
+ description: OK
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/SourceMetadata:
get:
summary: Find source metadata.
description: Find source metadata.
tags:
- - Metadata v2
+ - Odata
parameters:
- - in: query
- name: sourceMetadataId
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the source metadata.
- - in: query
- name: incomingName
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - sourceMetadataRowId
+ - sourceMetadataId
+ - incomingName
+ - incomingEntity
+ - outgoingName
+ - businessOwner
+ - rejectionProcessing
+ - rejectionInfo
+ - validFrom
+ - validUntil
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: VerkoopEngine
- description: The name of the source.
- - in: query
- name: incomingEntity
- schema:
- type: string
- example: OrderLine
- description: The entity of the source.
- - in: query
- name: outgoingName
- schema:
- type: string
- example: Website Verkopen
- description: The name of the destination.
- - in: query
- name: businessOwner
- schema:
- type: string
- example: Corneel Verstoep
- description: The business owner of the source.
- - in: query
- name: rejectionProcessing
- schema:
- type: string
- example: system
- description: The rejection processing of the source.
- - in: query
- name: rejectionInfo
- schema:
- type: string
- example: api.htm.nl/v2/account/12345/msgs/abc
- description: The rejection info of the source.
- - in: query
- name: validAt
- schema:
- type: string
- example: 2024-01-01T00:00:00.000
- description: Timestamp that the metadata is valid.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - sourceMetadataRowId
+ - sourceMetadataId
+ - incomingName
+ - incomingEntity
+ - outgoingName
+ - businessOwner
+ - rejectionProcessing
+ - rejectionInfo
+ - validFrom
+ - validUntil
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "sourceMetadata":
- [
- {
- "sourceMetadataId": "bc4ea24a-27a5-40e8-bbbc-57a105afaaa0",
- "incomingName": "VerkoopEngine",
- "incomingEntity": "OrderLine",
- "outgoingName": "Website Verkopen",
- "businessOwner": "Corneel Verstoep",
- "rejectionProcessing": "system",
- "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc",
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- },
- ],
- "href": null,
- }
+ $ref: "#/components/schemas/SourceMetadataGetResponseBody"
+ examples:
+ List containing all source metadata:
+ summary: List containing all source metadata
+ description: Returns a list containing all source metadata (no filters applied).
+ value:
+ "@odata.context": "$metadata#SourceMetadata"
+ value:
+ - "@odata.etag": 309ac952-12ad-4f13-a19d-f7443b8a1e93
+ sourceMetadataRowId: 2
+ sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0
+ incomingName: HTM-web
+ incomingEntity: OrderLine
+ outgoingName: webshop
+ businessOwner: Koos Verweg
+ rejectionProcessing: system
+ rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc
+ validFrom: 2025-01-01T00:00.000
+ validUntil: null
+ - "@odata.etag": 4b743da5-4195-4b2e-a11b-6e5393a94c0a
+ sourceMetadataRowId: 3
+ sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc
+ incomingName: HTM-app
+ incomingEntity: OrderLine
+ outgoingName: ticketapp
+ businessOwner: Danny Negen
+ rejectionProcessing: mail
+ rejectionInfo: d.negen@htm.nl
+ validFrom: 2025-01-01T00:00.000
+ validUntil: null
+ - "@odata.etag": 502e2f58-b4e1-4dd0-947a-db6eea726e3a
+ sourceMetadataRowId: 4
+ sourceMetadataId: 0b6e3e07-c4e0-42bf-86f2-9c9522b71209
+ incomingName: SMP
+ incomingEntity: OrderLine
+ outgoingName: balieverkoop
+ businessOwner: Guus Geluk
+ rejectionProcessing: mail
+ rejectionInfo: ao@htm.nl
+ validFrom: 2025-01-01T00:00.000
+ validUntil: null
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /sourcemetadata:
post:
summary: Add source metadata.
description: Add source metadata.
tags:
- - Metadata v2
+ - Metadata v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "incomingName": "VerkoopEngine",
- "incomingEntity": "OrderLine",
- "outgoingName": "Website Verkopen",
- "businessOwner": "Corneel Verstoep",
- "rejectionProcessing": "system",
- "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- }
+ $ref: "#/components/schemas/SourceMetadataPostRequestBody"
+ examples:
+ Add a new source to the metadata:
+ summary: Add a new source to the metadata
+ description: Add a new record to the source metadata in the database.
+ value:
+ incomingName: HTM-app
+ incomingEntity: OrderLine
+ outgoingName: ticketapp
+ businessOwner: Danny Negen
+ rejectionProcessing: mail
+ rejectionInfo: d.negen@htm.nl
+ validFrom: 2025-01-01T00:00.000
+ validUntil: null
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- { "sourceMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" }
+ $ref: "#/components/schemas/SourceMetadataPostResponseBody"
+ examples:
+ Source metadata created successfully:
+ summary: Source metadata created successfully
+ description: The source metadata was successfully added to the database.
+ value:
+ sourceMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
/sourcemetadata/{sourceMetadataId}:
parameters:
- in: path
@@ -1546,148 +2460,179 @@ paths:
summary: Update source metadata.
description: Update source metadata.
tags:
- - Metadata v2
+ - Metadata v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "incomingName": "VerkoopEngine",
- "incomingEntity": "OrderLine",
- "outgoingName": "Website Verkopen",
- "businessOwner": "Corneel Verstoep",
- "rejectionProcessing": "system",
- "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- }
+ $ref: "#/components/schemas/SourceMetadataPatchRequestBody"
+ examples:
+ Update a source:
+ summary: Update a source
+ description: In this example we update a single source.
+ value:
+ incomingName: HTM-app
+ incomingEntity: OrderLine
+ outgoingName: ticketapp
+ businessOwner: Danny Negen
+ rejectionProcessing: mail
+ rejectionInfo: d.negen@htm.nl
+ validFrom: 2025-01-01T00:00.000
+ validUntil: 2025-01-31T23:59:59.999
+ Update a source validity:
+ summary: Update a source validity
+ description: In this example we update the validity of a single source.
+ value:
+ validUntil: 2025-01-31T23:59:59.999
+ Update a business owner of a source:
+ summary: Update a business owner of a source
+ description: In this example we update the business owner of a single source.
+ value:
+ businessOwner: Chef Erwin
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- { "sourceMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" }
- /sourcemetadata/{sourceMetadataId}/metadataaudittrails:
- parameters:
- - in: path
- name: sourceMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- required: true
- description: The id of the contra account metadata.
- post:
- summary: Add metadata audit trail.
- description: Add metadata audit trail.
+ $ref: "#/components/schemas/SourceMetadataPatchResponseBody"
+ examples:
+ Source metadata updated successfully:
+ summary: Source metadata updated successfully
+ description: The source metadata was successfully updated in the database.
+ value:
+ sourceMetadataId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ summary: Delete source metadata.
+ description: |
+ Delete source metadata. Note that source metadata can only be deleted
+ if the validFrom is in the future.
tags:
- - Audit Trail v2
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "user": "rmeeuws",
- "timestamp": "2024-10-04T00:00:00",
- "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127",
- "metadataChanges":
- [
- {
- "fieldName": "businessOwner",
- "oldValue": "Corneel Verstoep",
- "newValue": "Mark Verheij",
- },
- ],
- }
+ - Metadata v2.2
responses:
- "201":
- description: Created
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/postMetadataAuditTrailResponse"
- /accountingperiodmetadata:
+ "200":
+ description: OK
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/AccountingPeriodMetadata:
get:
summary: Find accounting period metadata.
description: Find accounting period metadata.
tags:
- - Metadata v2
+ - Odata
parameters:
- - in: query
- name: accountingPeriodMetadataId
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the accounting period metadata.
- - in: query
- name: accountingPeriod
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - accountingPeriodMetadataRowId
+ - accountingPeriodMetadataId
+ - accountingPeriod
+ - isOpen
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: 2024-01
- description: The accounting period.
- - in: query
- name: isOpen
- schema:
- type: boolean
- example: true
- description: Whether the accounting period is open.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - accountingPeriodMetadataRowId
+ - accountingPeriodMetadataId
+ - accountingPeriod
+ - isOpen
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "accountingPeriodMetadata":
- [
- {
- "accountingPeriodMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- "accountingPeriod": "2024-01",
- "isOpen": false,
- },
- {
- "accountingPeriodMetadataId": "0302c651-f040-4cbc-8a4d-90dc82f29a32",
- "accountingPeriod": "2024-02",
- "isOpen": true,
- },
- ],
- "href": null,
- }
+ $ref: "#/components/schemas/AccountingPeriodMetadataGetResponseBody"
+ examples:
+ List containing all accounting period metadata:
+ summary: List containing all accounting period metadata
+ description: Returns a list containing all accounting period metadata (no filters applied).
+ value:
+ "@odata.context": "$metadata#AccountingPeriodMetadata"
+ value:
+ - "@odata.etag": 8f085711-eeae-44ed-bac1-06779bedb480
+ accountingPeriodMetadataRowId: 1
+ accountingPeriodMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ accountingPeriod: 2025/01
+ isOpen: true
+ - "@odata.etag": 66c033af-fc67-4eb2-9d17-d74a0166470f
+ accountingPeriodMetadataRowId: 2
+ accountingPeriodMetadataId: 36a34bd8-2b84-4c89-87a4-22e809f6ed4a
+ accountingPeriod: 2024/12
+ isOpen: false
+ - "@odata.etag": fc1aa814-ede9-4f99-b09b-b969c8738003
+ accountingPeriodMetadataRowId: 3
+ accountingPeriodMetadataId: 33b4889b-0036-4870-87df-be43f9316cdf
+ accountingPeriod: 2024/11
+ isOpen: false
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /accountingperiodmetadata:
post:
summary: Add accounting period metadata.
description: Add accounting period metadata.
tags:
- - Metadata v2
+ - Metadata v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example: { "accountingPeriod": "2024-01", "isOpen": true }
+ $ref: "#/components/schemas/AccountingPeriodMetadataPostRequestBody"
+ examples:
+ Add a new accounting period metadata:
+ summary: Add a new accounting period metadata
+ description: In this example we add a new accounting period metadata.
+ value:
+ accountingPeriod: 2025/03
+ isOpen: true
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "accountingPeriodMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- }
+ $ref: "#/components/schemas/AccountingPeriodMetadataPostResponseBody"
+ examples:
+ Accounting period metadata created successfully:
+ summary: Accounting period metadata created successfully
+ description: The accounting period metadata was successfully added to the database.
+ value:
+ accountingPeriodMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
/accountingperiodmetadata/{accountingPeriodMetadataId}:
parameters:
- in: path
@@ -1702,158 +2647,196 @@ paths:
summary: Update accounting period metadata.
description: Update accounting period metadata.
tags:
- - Metadata v2
+ - Metadata v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example: { "accountingPeriod": "2024-01", "isOpen": true }
+ $ref: "#/components/schemas/AccountingPeriodMetadataPatchRequestBody"
+ examples:
+ Update an accounting period metadata:
+ summary: Update an accounting period metadata
+ description: In this example we close an existing accounting period in the metadata.
+ value:
+ isOpen: false
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "accountingPeriodMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- }
- /accountingperiodmetadata/{accountingPeriodMetadataId}/metadataaudittrails:
- parameters:
- - in: path
- name: accountingPeriodMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- required: true
- description: The id of the contra account metadata.
- post:
- summary: Add metadata audit trail.
- description: Add metadata audit trail.
- tags:
- - Audit Trail v2
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "user": "rmeeuws",
- "timestamp": "2024-10-04T00:00:00",
- "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127",
- "metadataChanges":
- [
- {
- "fieldName": "isOpen",
- "oldValue": "true",
- "newValue": "false",
- },
- ],
- }
- responses:
- "201":
- description: Created
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/postMetadataAuditTrailResponse"
- /concessionmetadata:
+ $ref: "#/components/schemas/AccountingPeriodMetadataPatchResponseBody"
+ examples:
+ Accounting period metadata updated successfully:
+ summary: Accounting period metadata updated successfully
+ description: The accounting period metadata was successfully updated in the database.
+ value:
+ accountingPeriodMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/ConcessionMetadata:
get:
summary: Find concession metadata.
description: Find concession metadata.
tags:
- - Metadata v2
+ - Odata
parameters:
- - in: query
- name: concessionMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the concession metadata.
- - in: query
- name: concessionId
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
+ uniqueItems: true
type: array
items:
- type: integer
- example: [1, 2]
- description: The id of the concession.
- - in: query
- name: percentage
+ type: string
+ enum:
+ - concessionMetadataRowId
+ - concessionMetadataId
+ - concessionId
+ - percentage
+ - validFrom
+ - validUntil
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
schema:
- type: number
- example: 84.021
- description: The percentage of the concession.
- - in: query
- name: validAt
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - concessionMetadataRowId
+ - concessionMetadataId
+ - concessionId
+ - percentage
+ - validFrom
+ - validUntil
+ - name: $expand
+ in: query
+ description: Expand related entities
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- example: 2024-01-01T00:00:00.000
- description: Timestamp that the metadata is valid.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - Concession
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "concessionMetadata":
- [
- {
- "concessionMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- "concession": { "concessionId": 1, "name": "rail" },
- "percentage": 84.021,
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- },
- {
- "concessionMetadataId": "5ac3a5a8-4b9b-4a6a-9b1f-86ae8d6d4a9b",
- "concession": { "concessionId": 2, "name": "bus" },
- "percentage": 15.979,
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- },
- ],
- "href": null,
- }
+ $ref: "#/components/schemas/ConcessionMetadataGetResponseBody"
+ examples:
+ List containing all concession metadata:
+ summary: List containing all concession metadata
+ description: Returns a list containing all concession metadata (no filters applied).
+ value:
+ "@odata.context": "$metadata#ConcessionMetadata"
+ value:
+ - "@odata.etag": 8a7c6124-574b-4725-9105-834924437087
+ concessionMetadataRowId: 14
+ concessionMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ concessionId: 1
+ percentage: 84.021
+ validFrom: 2025-01-01T00:00:00.000
+ validUntil: null
+ - "@odata.etag": 90d4cf7b-86c8-4111-975b-af332b1507e5
+ concessionMetadataRowId: 15
+ concessionMetadataId: 39720be0-af88-486a-b5e2-faea7eb5b352
+ concessionId: 2
+ percentage: 15.979
+ validFrom: 2025-01-01T00:00:00.000
+ validUntil: null
+ - "@odata.etag": 08b684af-7fe5-44ee-ad99-dab0f57c42bb
+ concessionMetadataRowId: 16
+ concessionMetadataId: 274db383-96dd-410e-a07e-0b9e3040ac91
+ concessionId: 1
+ percentage: 83.021
+ validFrom: 2024-12-01T00:00:00.000
+ validUntil: 2024-12-31T23:59:59.999
+ - "@odata.etag": 640270c1-8dff-468e-9a5b-459e57b3ae13
+ concessionMetadataRowId: 17
+ concessionMetadataId: 03959bc5-83f2-4ac7-9bf5-67e0f2a6eace
+ concessionId: 2
+ percentage: 16.979
+ validFrom: 2024-12-01T00:00:00.000
+ validUntil: 2024-12-31T23:59:59.999
+ - "@odata.etag": a03c2a52-d65d-40c6-828b-18ce07df1d68
+ concessionMetadataRowId: 18
+ concessionMetadataId: d5b7d8f6-5cb8-482e-9d9a-68909dc7b5d3
+ concessionId: 1
+ percentage: 85.021
+ validFrom: 2024-11-01T00:00:00.000
+ validUntil: 2024-11-30T23:59:59.999
+ - "@odata.etag": 4eb2fbe7-8dca-4ac9-a59d-379d56611bb4
+ concessionMetadataRowId: 19
+ concessionMetadataId: 5ee5f86f-ab00-4630-b130-4714fd060d1a
+ concessionId: 2
+ percentage: 14.979
+ validFrom: 2024-11-01T00:00:00.000
+ validUntil: 2024-11-30T23:59:59.999
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /concessionmetadata:
post:
summary: Add concession metadata.
description: Add concession metadata.
tags:
- - Metadata v2
+ - Metadata v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "concessionId": 2,
- "percentage": 15.979,
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- }
+ $ref: "#/components/schemas/ConcessionMetadataPostRequestBody"
+ examples:
+ Add a new concession distribution:
+ summary: Add a new concession distribution
+ description: |
+ Every month, the administrator determines the concession distribution for the next month.
+ In this example, a new concession distribution for RAIL is added to the metadata.
+ value:
+ concessionId: 1
+ percentage: 83.041
+ validFrom: 2025-03-01T00:00:00.000
+ validUntil: null
responses:
"201":
description: Created
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "concessionMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- }
+ $ref: "#/components/schemas/ConcessionMetadataPostResponseBody"
+ examples:
+ Concession metadata added succesfully:
+ summary: Concession metadata added succesfully
+ description: The new concession metadata was successfully added to the database.
+ value:
+ concessionMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
/concessionmetadata/{concessionMetadataId}:
parameters:
- in: path
@@ -1868,250 +2851,2159 @@ paths:
summary: Update concession metadata.
description: Update concession metadata.
tags:
- - Metadata v2
+ - Metadata v2.2
requestBody:
required: true
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "concessionId": 2,
- "percentage": 15.979,
- "validFrom": "2024-01-01T00:00:00.000",
- "validUntil": null,
- }
+ $ref: "#/components/schemas/ConcessionMetadataPatchRequestBody"
+ examples:
+ Update a concession distribution:
+ summary: Update a concession distribution
+ description: |
+ In this example, the whole concession distribution is updated.
+ value:
+ concessionId: 1
+ percentage: 80.042
+ validFrom: 2025-02-01T00:00:00.000
+ validUntil: 2025-02-28T23:59:59.999
+ Update the validity of a concession distribution:
+ summary: Update the validity of a concession distribution
+ description: |
+ Every month, the administrator determines the concession distribution for the next month.
+ In this example, the concession distribution for last month gets an end date.
+ value:
+ validUntil: 2025-02-28T23:59:59.999
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "concessionMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- }
- /concessionmetadata/{concessionMetadataId}/metadataaudittrails:
- parameters:
- - in: path
- name: concessionMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- required: true
- description: The id of the product metadata.
- post:
- summary: Add metadata audit trail.
- description: Add metadata audit trail.
+ $ref: "#/components/schemas/ConcessionMetadataPatchResponseBody"
+ examples:
+ Concession metadata updated successfully:
+ summary: Concession metadata updated successfully
+ description: The concession metadata was successfully updated in the database.
+ value:
+ concessionMetadataId: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ delete:
+ summary: Delete concession metadata.
+ description: |
+ Delete concession metadata. Note that concession metadata can only be deleted
+ if the validFrom is in the future.
tags:
- - Audit Trail v2
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "user": "rmeeuws",
- "timestamp": "2024-10-04T00:00:00",
- "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127",
- "metadataChanges":
- [
- {
- "fieldName": "percentage",
- "oldValue": null,
- "newValue": "23.456",
- },
- ],
- }
+ - Metadata v2.2
responses:
- "201":
- description: Created
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/postMetadataAuditTrailResponse"
- /metadataaudittrails:
+ "200":
+ description: OK
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /Odata/Concession:
get:
- summary: Find metadata audit trails.
- description: Find metadata audit trails.
+ summary: Find concessions.
+ description: Find concessions.
tags:
- - Audit Trail v2
+ - Odata
parameters:
- - in: query
- name: metadataAuditTrailId
+ - $ref: "#/components/parameters/top"
+ - $ref: "#/components/parameters/skip"
+ - $ref: "#/components/parameters/filter"
+ - $ref: "#/components/parameters/count"
+ - name: $orderby
+ in: query
+ description: Order items by property values
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the metadata audit trail.
- - in: query
- name: productMetadataId
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - concessionMetadataRowId
+ - concessionMetadataId
+ - concessionId
+ - percentage
+ - validFrom
+ - validUntil
+ - name: $select
+ in: query
+ description: Select properties to be returned
+ required: false
+ style: form
+ explode: false
schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the product metadata.
- - in: query
- name: concessionMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the concession metadata.
- - in: query
- name: contraAccountMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the contra account metadata.
- - in: query
- name: taxMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the tax metadata.
- - in: query
- name: sourceMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the source metadata.
- - in: query
- name: accountingPeriodMetadataId
- schema:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
- description: The id of the accounting period metadata.
- - in: query
- name: user
- schema:
- type: string
- example: rmeeuws
- description: The username of the user.
- - in: query
- name: timestampBefore
- schema:
- type: string
- example: 2022-01-01 00:00:00
- description: The timestamp before the event occured.
- - in: query
- name: timestampAfter
- schema:
- type: string
- example: 2022-01-01 00:00:00
- description: The timestamp after the event occured.
- - in: query
- name: correlationId
- schema:
- type: string
- example: a3891560-3084-42cb-867c-f289e7cda47d
- description: The correlation id of the event.
+ uniqueItems: true
+ type: array
+ items:
+ type: string
+ enum:
+ - concessionMetadataRowId
+ - concessionMetadataId
+ - concessionId
+ - percentage
+ - validFrom
+ - validUntil
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "metadataAuditTrails":
- [
- {
- "metadataAuditTrailId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- "productMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf",
- "concessionMetadataId": null,
- "contraAccountMetadataId": null,
- "taxMetadataId": null,
- "sourceMetadataId": null,
- "accountingPeriodMetadataId": null,
- "user": "rmeeuws",
- "timestamp": "2022-01-01 00:00:00",
- "correlationId": "a3891560-3084-42cb-867c-f289e7cda47d",
- "metadataChanges":
- [
- {
- "metadataChangesId": "43a481a7-0845-460f-b44a-b4112cc2e193",
- "fieldName": "businessOwner",
- "oldValue": "Corneel Verstoep",
- "newValue": "Jan-Willem Vermeij",
- },
- ],
- },
- ],
- "href": null,
- }
- /concessions:
- get:
- summary: Get all concessions.
- description: Get all concessions.
+ $ref: "#/components/schemas/ConcessionsGetResponseBody"
+ examples:
+ List containing all concessions:
+ summary: List containing all concessions
+ description: Returns a list containing all concessions (no filters applied).
+ value:
+ "@odata.context": "$metadata#Concession"
+ value:
+ - "@odata.etag": 6962e56b-c7dd-3336-9627-6687f007ee07
+ concessionRowId: 1
+ concessionId: 1
+ name: RAIL
+ - "@odata.etag": b4eb7b82-9ecb-424f-a3e3-c532f0b763a4
+ concessionRowId: 2
+ concessionId: 2
+ name: BUS
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /transactionitems/reject:
+ post:
+ summary: Reject transaction items to source in bulk.
+ description: Reject transaction items to source in bulk.
tags:
- - References v2
+ - Bulk processing v2.2
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TransactionItemsBulkRequestBody"
+ examples:
+ List of transaction item ids to reject:
+ summary: List of transaction item ids to reject to source
+ description: List of transaction item ids to reject to source.
+ value:
+ transactionItemIds:
+ - afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ - b1c4f8e7-3f4e-4d2a-9c6e-2f5e6d7c8b9a
+ - c2d5e6f7-4g5h-5i6j-0k1l-3m4n5o6p7q8r
responses:
- "200":
- description: OK
+ "202":
+ description: Accepted
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "concessions":
- [
- { "concessionId": 1, "name": "rail" },
- { "concessionId": 2, "name": "bus" },
- { "concessionId": 3, "name": "not_applicable" },
- ],
- "href": null,
- }
- /failurereasons:
+ $ref: "#/components/schemas/TransactionItemsPostResponseBody"
+ examples:
+ Array of transaction items accepted:
+ summary: Array of transaction item ids accepted
+ description: |
+ The array of transaction item ids was accepted successfully.
+ The transaction items will be processed asynchronously.
+ In the response body the consumer will find information on how to retrieve the processing status.
+ value:
+ startTime: 2025-02-14T05:32:47.0672237Z
+ status: Running
+ clientTrackingId: 08584620957189579629541919368CU00
+ callbackurl: https://api.integratielaag.nl/transactionitems/reject/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
+ retryAfter: 10
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /transactionitems/responsestatus/reject/{clientTrackingId}:
get:
- summary: Get all failure reasons.
- description: Get all failure reasons.
tags:
- - References v2
+ - Bulk processing v2.2
+ summary: Get the status of the transaction item bulk reject.
+ description: Get the status of the asynchronous transaction item bulk reject.
+ parameters:
+ - in: path
+ name: clientTrackingId
+ schema:
+ type: string
+ required: true
+ description: The clientTrackingId of the transaction item bulk reject.
responses:
"200":
description: OK
content:
application/json:
schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "failureReasons":
- [
- {
- "failureReasonId": 1,
- "reasonCode": "002",
- "reasonDesc": "Contra account does not exist",
- },
- {
- "failureReasonId": 2,
- "reasonCode": "003",
- "reasonDesc": "Accouting period closed",
- },
- ],
- "href": null,
- }
+ $ref: "#/components/schemas/TransactionItemsRejectResponseStatusGetResponseBody"
+ examples:
+ Batch successfully processed:
+ summary: Batch successfully processed
+ description: |
+ Body of a batch of transaction items that was successfully rejected.
+ A number of transaction items were rejected.
+ value:
+ summary:
+ rejected: 15
+ total: 15
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /transactionitems/return:
+ post:
+ summary: Return transaction items to trx db in bulk.
+ description: Return transaction items to trx db in bulk.
+ tags:
+ - Bulk processing v2.2
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TransactionItemsBulkRequestBody"
+ examples:
+ List of transaction item ids to reject:
+ summary: List of transaction item ids to return to trx db
+ description: List of transaction item ids to return to trx db.
+ value:
+ transactionItemIds:
+ - afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ - b1c4f8e7-3f4e-4d2a-9c6e-2f5e6d7c8b9a
+ - c2d5e6f7-4g5h-5i6j-0k1l-3m4n5o6p7q8r
+ responses:
+ "202":
+ description: Accepted
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TransactionItemsPostResponseBody"
+ examples:
+ Array of transaction items accepted:
+ summary: Array of transaction item ids accepted
+ description: |
+ The array of transaction item ids was accepted successfully.
+ The transaction items will be processed asynchronously.
+ In the response body the consumer will find information on how to retrieve the processing status.
+ value:
+ startTime: 2025-02-14T05:32:47.0672237Z
+ status: Running
+ clientTrackingId: 08584620957189579629541919368CU00
+ callbackurl: https://api.integratielaag.nl/transactionitems/return/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
+ retryAfter: 10
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
+ /transactionitems/responsestatus/return/{clientTrackingId}:
+ get:
+ tags:
+ - Bulk processing v2.2
+ summary: Get the status of the transaction item bulk return.
+ description: Get the status of the asynchronous transaction item bulk return.
+ parameters:
+ - in: path
+ name: clientTrackingId
+ schema:
+ type: string
+ required: true
+ description: The clientTrackingId of the transaction item bulk return.
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/TransactionItemsReturnResponseStatusGetResponseBody"
+ examples:
+ Batch successfully processed:
+ summary: Batch successfully processed
+ description: |
+ Body of a batch of transaction items that was successfully returned to trx db.
+ A number of transaction items were returned to trx db.
+ value:
+ summary:
+ returned: 15
+ total: 15
+ security:
+ - default: []
+ x-auth-type: Application & Application User
+ x-throttling-tier: Unlimited
components:
securitySchemes:
- bearerToken:
- type: http
- scheme: bearer
- bearerFormat: JWT
+ default:
+ type: oauth2
+ flows:
+ implicit:
+ authorizationUrl: https://api.integratielaag.nl/authorize
+ scopes: {}
schemas:
unavailable:
type: object
+ TransactionItemsGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#TransactionItem
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/TransactionItem"
+ TransactionItem:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: 6962e56b-c7dd-3336-9627-6687f007ee07
+ transactionItemRowId:
+ type: integer
+ example: 3231
+ transactionItemId:
+ type: string
+ example: afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ transactionType:
+ type: string
+ enum:
+ - sales
+ example: sales
+ sourceName:
+ type: string
+ example: HTM-website
+ transactionId:
+ type: string
+ example: "1001236"
+ transactionLineId:
+ type: string
+ nullable: true
+ example: "1"
+ name:
+ type: string
+ example: HTM Maandkorting 20%
+ quantity:
+ type: integer
+ example: 1
+ taxCode:
+ type: string
+ example: V21
+ amountExclTax:
+ type: integer
+ example: 100
+ amountInclTax:
+ type: integer
+ example: 121
+ amountTax:
+ type: integer
+ example: 21
+ occurredOn:
+ type: string
+ format: date-time
+ example: 2024-10-04T00:00:00Z
+ type:
+ type: string
+ enum:
+ - debit
+ - credit
+ example: debit
+ articleNumber:
+ type: string
+ nullable: true
+ example: "4031"
+ status:
+ type: string
+ enum:
+ - created
+ - succeeded
+ - failed
+ - returned to trx-db
+ - returned to src
+ - re-entered
+ example: created
+ aggregationReference:
+ type: string
+ nullable: true
+ example: FIKO-123456
+ accountingSystemReference:
+ type: string
+ nullable: true
+ example: U4F-123456
+ required:
+ - transactionItemId
+ - transactionType
+ - sourceName
+ - transactionId
+ - name
+ - quantity
+ - taxCode
+ - amountExclTax
+ - amountInclTax
+ - amountTax
+ - occurredOn
+ - type
+ - status
+ TransactionItemsPostRequestBody:
+ type: object
+ properties:
+ transactionItems:
+ type: array
+ items:
+ type: object
+ properties:
+ transactionType:
+ type: string
+ enum:
+ - sales
+ example: sales
+ sourceName:
+ type: string
+ example: HTM-website
+ transactionId:
+ type: string
+ example: "1001236"
+ transactionLineId:
+ type: string
+ nullable: true
+ example: "1"
+ name:
+ type: string
+ example: HTM Maandkorting 20%
+ quantity:
+ type: integer
+ example: 1
+ taxCode:
+ type: string
+ example: V21
+ amountExclTax:
+ type: integer
+ example: 100
+ amountInclTax:
+ type: integer
+ example: 121
+ amountTax:
+ type: integer
+ example: 21
+ occurredOn:
+ type: string
+ format: date-time
+ example: 2024-10-04T00:00:00Z
+ type:
+ type: string
+ enum:
+ - debit
+ - credit
+ example: debit
+ articleNumber:
+ type: string
+ nullable: true
+ example: "4031"
+ required:
+ - sourceName
+ - transactionType
+ - transactionId
+ - name
+ - quantity
+ - taxCode
+ - amountExclTax
+ - amountInclTax
+ - amountTax
+ - occurredOn
+ - type
+ TransactionItemsPostResponseBody:
+ type: object
+ properties:
+ startTime:
+ type: string
+ format: date-time
+ example: 2025-02-14T05:32:47.0672237Z
+ status:
+ type: string
+ example: Running
+ clientTrackingId:
+ type: string
+ example: 08584620957189579629541919368CU00
+ callbackurl:
+ type: string
+ format: uri
+ example: https://services.api.htm.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c
+ retryAfter:
+ type: integer
+ example: 10
+ required:
+ - startTime
+ - status
+ - clientTrackingId
+ - callbackurl
+ - retryAfter
+ TransactionItemsBulkBadRequestResponseBody:
+ type: object
+ properties:
+ type:
+ type: string
+ format: url
+ example: https://htm.nl/api/v1/probs/fiko/validationerror
+ title:
+ type: string
+ example: Transaction validation failed.
+ detail:
+ type: string
+ example: One ore more transactions in the request are invalid.
+ instance:
+ type: string
+ example: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b
+ errors:
+ type: array
+ items:
+ type: object
+ properties:
+ detail:
+ type: string
+ example: Transaction is a duplicate of a transaction already in the system.
+ pointer:
+ type: string
+ example: "#/transactionItems/0"
+ transactionId:
+ type: string
+ example: 1ad109d3-fd7d-4b6f-872b-220d492f385f
+ transactionLineId:
+ type: string
+ example: fee907dd-e59d-44f5-a63b-bbdec38f79b7
+ required:
+ - detail
+ - pointer
+ - transactionId
+ required:
+ - type
+ - title
+ - detail
+ - instance
+ TransactionItemsPatchRequestBody:
+ type: object
+ properties:
+ name:
+ type: string
+ nullable: true
+ example: HTM Maandkorting 20%
+ quantity:
+ type: integer
+ nullable: true
+ example: 1
+ taxCode:
+ type: string
+ nullable: true
+ example: V21
+ amountExclTax:
+ type: integer
+ nullable: true
+ example: 100
+ amountInclTax:
+ type: integer
+ nullable: true
+ example: 121
+ amountTax:
+ type: integer
+ nullable: true
+ example: 21
+ occurredOn:
+ type: string
+ nullable: true
+ format: date-time
+ example: 2024-10-04T00:00:00Z
+ type:
+ type: string
+ nullable: true
+ enum:
+ - debit
+ - credit
+ example: debit
+ articleNumber:
+ type: string
+ nullable: true
+ example: 4031
+ status:
+ type: string
+ enum:
+ - created
+ - succeeded
+ - failed
+ - returned to trx-db
+ - returned to src
+ - re-entered
+ example: created
+ aggregationReference:
+ type: string
+ nullable: true
+ example: FIKO-123456
+ accountingSystemReference:
+ type: string
+ nullable: true
+ example: U4F-123456
+ TransactionItemsPatchResponseBody:
+ type: object
+ properties:
+ transactionItemId:
+ type: string
+ format: uuid
+ example: afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ required:
+ - transactionItemId
+ ProcessingFailuresPostRequestBody:
+ type: object
+ properties:
+ timestamp:
+ type: string
+ format: date-time
+ example: 2022-01-01 00:00:00
+ element:
+ type: string
+ example: costCenter
+ value:
+ type: string
+ example: 84955
+ reasonCode:
+ type: string
+ example: "002"
+ reasonDescription:
+ type: string
+ example: Contra account does not exist.
+ resolved:
+ type: boolean
+ example: false
+ change:
+ type: string
+ nullable: true
+ example: Adapt config
+ required:
+ - timestamp
+ - element
+ - value
+ - reasonCode
+ - reasonDescription
+ - resolved
+ ProcessingFailuresPostResponseBody:
+ type: object
+ properties:
+ processingFailureId:
+ type: string
+ format: uuid
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ required:
+ - processingFailureId
+ ProcessingFailuresGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#ProcessingFailure
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/ProcessingFailure"
+ ProcessingFailure:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: 464155e4-0018-3676-8102-42429f14f2ed
+ processingFailureRowId:
+ type: integer
+ example: 9
+ processingFailureId:
+ type: string
+ format: uuid
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ transactionItemId:
+ type: string
+ format: uuid
+ example: 2d77d978-7141-499a-84ad-93fad8ee03ce
+ timestamp:
+ type: string
+ format: date-time
+ example: 2022-01-01 00:00:00
+ element:
+ type: string
+ example: costCenter
+ value:
+ type: string
+ example: 84955
+ reasonCode:
+ type: string
+ example: "002"
+ reasonDescription:
+ type: string
+ example: Contra account does not exist.
+ resolved:
+ type: boolean
+ example: false
+ change:
+ type: string
+ nullable: true
+ example: Adapt config
+ required:
+ - processingFailureId
+ - transactionItemId
+ - timestamp
+ - element
+ - value
+ - reasonCode
+ - reasonDescription
+ - resolved
+ ProcessingFailuresPatchRequestBody:
+ type: object
+ properties:
+ resolved:
+ type: boolean
+ nullable: true
+ example: true
+ change:
+ type: string
+ nullable: true
+ example: Adapt config
+ ProcessingFailuresPatchResponseBody:
+ type: object
+ properties:
+ processingFailureId:
+ type: string
+ format: uuid
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ required:
+ - processingFailureId
+ TransactionAuditTrailsPostRequestBody:
+ type: object
+ properties:
+ user:
+ type: string
+ example: fiko
+ timestamp:
+ type: string
+ format: date-time
+ example: 2022-01-01 00:00:00
+ action:
+ type: string
+ enum:
+ - create
+ - update
+ example: create
+ status:
+ type: string
+ enum:
+ - created
+ - succeeded
+ - failed
+ - returned to trx-db
+ - returned to src
+ - re-entered
+ example: created
+ description:
+ type: string
+ nullable: true
+ example: Transaction created.
+ correlationId:
+ type: string
+ format: uuid
+ nullable: true
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ required:
+ - user
+ - timestamp
+ - action
+ - status
+ TransactionAuditTrailsPostResponseBody:
+ type: object
+ properties:
+ transactionAuditTrailId:
+ type: string
+ format: uuid
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ required:
+ - transactionAuditTrailId
+ TransactionAuditTrailsGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#TransactionAuditTrail
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/TransactionAuditTrail"
+ TransactionAuditTrail:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: a669b92c-1a10-3dd6-b4d1-efaed0629db8
+ transactionAuditTrailRowId:
+ type: integer
+ example: 8218
+ transactionAuditTrailId:
+ type: string
+ format: uuid
+ example: afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ transactionItemId:
+ type: string
+ format: uuid
+ example: d667d293-aa82-4c9e-9b10-77cffc9058a1
+ user:
+ type: string
+ example: fiko
+ timestamp:
+ type: string
+ format: date-time
+ example: 2022-01-01 00:00:00
+ action:
+ type: string
+ enum:
+ - create
+ - update
+ example: create
+ status:
+ type: string
+ enum:
+ - created
+ - succeeded
+ - failed
+ - returned to trx-db
+ - returned to src
+ - re-entered
+ example: created
+ description:
+ type: string
+ nullable: true
+ example: Transaction created.
+ correlationId:
+ type: string
+ format: uuid
+ nullable: true
+ example: a3891560-3084-42cb-867c-f289e7cda47d
+ required:
+ - transactionAuditTrailId
+ - transactionItemId
+ - user
+ - timestamp
+ - action
+ - status
+ BookingProcessesGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#BookingProcess
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/BookingProcess"
+ BookingProcess:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: 9e8b14cf-c03a-3be7-b9ec-ef5dd6948217
+ bookingProcessRowId:
+ type: integer
+ example: 10
+ bookingProcessId:
+ type: string
+ format: uuid
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ name:
+ type: string
+ example: Verkooptransacties
+ transactionType:
+ type: string
+ enum:
+ - sales
+ example: sales
+ identifyingFieldName:
+ type: string
+ nullable: true
+ example: articleNumber
+ required:
+ - bookingProcessId
+ - name
+ - transactionType
+ BookingProcessesPostRequestBody:
+ type: object
+ properties:
+ name:
+ type: string
+ example: Verkooptransacties
+ transactionType:
+ type: string
+ enum:
+ - sales
+ example: sales
+ identifyingFieldName:
+ type: string
+ nullable: true
+ example: articleNumber
+ required:
+ - name
+ - transactionType
+ BookingProcessesPostResponseBody:
+ type: object
+ properties:
+ bookingProcessId:
+ type: string
+ format: uuid
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ required:
+ - bookingProcessId
+ BookingProcessesPatchRequestBody:
+ type: object
+ properties:
+ name:
+ type: string
+ nullable: true
+ example: Verkooptransacties
+ transactionType:
+ type: string
+ nullable: true
+ enum:
+ - sales
+ example: sales
+ identifyingFieldName:
+ type: string
+ nullable: true
+ example: articleNumber
+ BookingProcessesPatchResponseBody:
+ type: object
+ properties:
+ bookingProcessId:
+ type: string
+ format: uuid
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ required:
+ - bookingProcessId
+ BookingMetadataGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#BookingMetadata
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/BookingMetadata"
+ BookingMetadata:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: f477014f-8bf2-3e72-b9b6-1bb609840b61
+ bookingMetadataRowId:
+ type: integer
+ example: 13
+ bookingMetadataId:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ bookingProcessId:
+ type: string
+ format: uuid
+ example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ name:
+ type: string
+ example: Dagkaarten
+ description:
+ type: string
+ example: Dagkaarten nov. 2024
+ documentCode:
+ type: string
+ example: OPBR-FIKO
+ hasSeparateTaxLine:
+ type: boolean
+ example: true
+ hasLinePerIdentifyingField:
+ type: boolean
+ example: true
+ hasLinePerSource:
+ type: boolean
+ example: true
+ hasLinePerConcession:
+ type: boolean
+ example: true
+ validFrom:
+ type: string
+ format: date-time
+ example: 2022-01-01 00:00:00
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ required:
+ - bookingMetadataId
+ - bookingProcessId
+ - name
+ - description
+ - documentCode
+ - hasSeparateTaxLine
+ - hasLinePerIdentifyingField
+ - hasLinePerSource
+ - hasLinePerConcession
+ - validFrom
+ BookingMetadataPostRequestBody:
+ type: object
+ properties:
+ name:
+ type: string
+ example: Dagkaarten
+ description:
+ type: string
+ example: Dagkaarten nov. 2024
+ documentCode:
+ type: string
+ example: OPBR-FIKO
+ hasSeparateTaxLine:
+ type: boolean
+ example: true
+ hasLinePerIdentifyingField:
+ type: boolean
+ example: true
+ hasLinePerSource:
+ type: boolean
+ example: true
+ hasLinePerConcession:
+ type: boolean
+ example: true
+ validFrom:
+ type: string
+ format: date-time
+ example: 2022-01-01 00:00:00
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ required:
+ - name
+ - description
+ - documentCode
+ - hasSeparateTaxLine
+ - hasLinePerIdentifyingField
+ - hasLinePerSource
+ - hasLinePerConcession
+ - validFrom
+ BookingMetadataPostResponseBody:
+ type: object
+ properties:
+ bookingMetadataId:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ required:
+ - bookingMetadataId
+ BookingMetadataPatchRequestBody:
+ type: object
+ properties:
+ name:
+ type: string
+ nullable: true
+ example: Dagkaarten
+ description:
+ type: string
+ nullable: true
+ example: Dagkaarten nov. 2024
+ documentCode:
+ type: string
+ nullable: true
+ example: OPBR-FIKO
+ hasSeparateTaxLine:
+ type: boolean
+ nullable: true
+ example: true
+ hasLinePerIdentifyingField:
+ type: boolean
+ nullable: true
+ example: true
+ hasLinePerSource:
+ type: boolean
+ nullable: true
+ example: true
+ hasLinePerConcession:
+ type: boolean
+ nullable: true
+ example: true
+ validFrom:
+ type: string
+ format: date-time
+ nullable: true
+ example: 2022-01-01 00:00:00
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ BookingMetadataPatchResponseBody:
+ type: object
+ properties:
+ bookingMetadataId:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ required:
+ - bookingMetadataId
+ BookingGroupFieldsPostRequestBody:
+ type: object
+ properties:
+ identifyingFieldValue:
+ type: string
+ example: 1737
+ required:
+ - identifyingFieldValue
+ BookingGroupFieldsPostResponseBody:
+ type: object
+ properties:
+ bookingGroupFieldId:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ required:
+ - bookingGroupFieldId
+ BookingGroupFieldsGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#BookingGroupField
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/BookingGroupField"
+ BookingGroupField:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: ef520db0-4e3d-39a0-926f-f37ad49bb7cf
+ bookingGroupFieldRowId:
+ type: integer
+ example: 8
+ bookingGroupFieldId:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ bookingMetadataId:
+ type: string
+ format: uuid
+ example: 12b4d128-0ab8-4a4a-944d-25b83de38b27
+ identifyingFieldValue:
+ type: string
+ example: 1737
+ required:
+ - bookingGroupFieldId
+ - bookingMetadataId
+ - identifyingFieldValue
+ BookingLineMetadataPostRequestBody:
+ type: object
+ properties:
+ name:
+ type: string
+ example: Dagkaart - BUS
+ description:
+ type: string
+ example: Dagkaarten nov. 2024 BUS
+ sourceMetadataId:
+ type: string
+ format: uuid
+ example: null
+ nullable: true
+ identifyingFieldValue:
+ type: string
+ example: null
+ nullable: true
+ concessionId:
+ type: integer
+ example: 1
+ nullable: true
+ isContraAccount:
+ type: boolean
+ example: false
+ lineType:
+ type: string
+ enum:
+ - summary
+ - analysis
+ - tax
+ example: summary
+ lineSense:
+ type: string
+ enum:
+ - debit
+ - credit
+ example: credit
+ department:
+ type: string
+ example: 900
+ costType:
+ type: string
+ example: 84956
+ costCenter:
+ type: string
+ example: 603031
+ nullable: true
+ articleName:
+ type: string
+ example: dagkaart
+ nullable: true
+ extRef1:
+ type: string
+ example: null
+ nullable: true
+ extRef2:
+ type: string
+ example: null
+ nullable: true
+ extRef3:
+ type: string
+ example: 2025-02-17
+ nullable: true
+ extRef4:
+ type: string
+ example: null
+ nullable: true
+ extRef5:
+ type: string
+ example: Webshop
+ nullable: true
+ extRef6:
+ type: string
+ example: null
+ nullable: true
+ required:
+ - name
+ - description
+ - isContraAccount
+ - lineType
+ - lineSense
+ - department
+ - costType
+ BookingLineMetadataPostResponseBody:
+ type: object
+ properties:
+ bookingLineMetadataId:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ required:
+ - bookingLineMetadataId
+ BookingLineMetadataGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#BookingLineMetadata
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/BookingLineMetadata"
+ BookingLineMetadata:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: c0afe2d6-f4b2-321a-ae6b-2dc72b25ebc1
+ bookingLineMetadataRowId:
+ type: integer
+ example: 10
+ bookingLineMetadataId:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ bookingMetadataId:
+ type: string
+ format: uuid
+ example: 12b4d128-0ab8-4a4a-944d-25b83de38b27
+ name:
+ type: string
+ example: Dagkaart - RAIL
+ description:
+ type: string
+ example: Dagkaarten nov. 2024 RAIL
+ sourceMetadataId:
+ type: string
+ format: uuid
+ example: db7e5899-3904-4b53-bd62-a56aef34c66d
+ nullable: true
+ identifyingFieldValue:
+ type: string
+ example: null
+ nullable: true
+ concessionId:
+ type: integer
+ example: 1
+ nullable: true
+ isContraAccount:
+ type: boolean
+ example: false
+ lineType:
+ type: string
+ enum:
+ - summary
+ - analysis
+ - tax
+ example: summary
+ lineSense:
+ type: string
+ enum:
+ - debit
+ - credit
+ example: credit
+ department:
+ type: string
+ example: 900
+ costType:
+ type: string
+ example: 84956
+ costCenter:
+ type: string
+ example: 603031
+ nullable: true
+ articleName:
+ type: string
+ example: dagkaart
+ nullable: true
+ extRef1:
+ type: string
+ example: null
+ nullable: true
+ extRef2:
+ type: string
+ example: null
+ nullable: true
+ extRef3:
+ type: string
+ example: 2025-02-17
+ nullable: true
+ extRef4:
+ type: string
+ example: null
+ nullable: true
+ extRef5:
+ type: string
+ example: Webshop
+ nullable: true
+ extRef6:
+ type: string
+ example: null
+ nullable: true
+ required:
+ - bookingLineMetadataId
+ - bookingMetadataId
+ - name
+ - description
+ - isContraAccount
+ - lineType
+ - lineSense
+ - department
+ - costType
+ BookingLineMetadataPatchRequestBody:
+ type: object
+ properties:
+ name:
+ type: string
+ example: Dagkaart - RAIL
+ nullable: true
+ description:
+ type: string
+ example: Dagkaarten nov. 2024 RAIL
+ nullable: true
+ sourceMetadataId:
+ type: string
+ format: uuid
+ example: null
+ nullable: true
+ identifyingFieldValue:
+ type: string
+ example: null
+ nullable: true
+ concessionId:
+ type: integer
+ example: 1
+ nullable: true
+ isContraAccount:
+ type: boolean
+ example: false
+ nullable: true
+ lineType:
+ type: string
+ enum:
+ - summary
+ - analysis
+ - tax
+ example: summary
+ nullable: true
+ lineSense:
+ type: string
+ enum:
+ - debit
+ - credit
+ example: credit
+ nullable: true
+ department:
+ type: string
+ example: 900
+ nullable: true
+ costType:
+ type: string
+ example: 84956
+ nullable: true
+ costCenter:
+ type: string
+ example: 603031
+ nullable: true
+ articleName:
+ type: string
+ example: dagkaart
+ nullable: true
+ extRef1:
+ type: string
+ example: null
+ nullable: true
+ extRef2:
+ type: string
+ example: null
+ nullable: true
+ extRef3:
+ type: string
+ example: 2025-02-17
+ nullable: true
+ extRef4:
+ type: string
+ example: null
+ nullable: true
+ extRef5:
+ type: string
+ example: Webshop
+ nullable: true
+ extRef6:
+ type: string
+ example: null
+ nullable: true
+ BookingLineMetadataPatchResponseBody:
+ type: object
+ properties:
+ bookingLineMetadataId:
+ type: string
+ format: uuid
+ example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
+ required:
+ - bookingLineMetadataId
+ MetadataAuditTrailsGetResponseBody:
+ type: object
+ properties:
+ metadataAuditTrails:
+ type: array
+ items:
+ type: object
+ properties:
+ metadataAuditTrailId:
+ type: string
+ format: uuid
+ example: b6161270-eb08-4242-90ec-967d5db62070
+ source:
+ type: string
+ example: FMT
+ endpoint:
+ type: string
+ format: url
+ example: https://dev.api.htm.nl/v2/productmetadata
+ operation:
+ type: string
+ enum:
+ - GET
+ - POST
+ - PATCH
+ - DELETE
+ example: POST
+ requestBody:
+ type: string
+ format: json
+ example: { "json": "data" }
+ responseCode:
+ type: integer
+ example: 200
+ responseBody:
+ type: string
+ format: json
+ example: { "json": "data" }
+ user:
+ type: string
+ example: ad.vogelaar
+ timestamp:
+ type: string
+ format: date-time
+ example: 2022-01-01 00:00:00
+ correlationId:
+ type: string
+ format: uuid
+ nullable: true
+ example: 662de47c-d809-41bd-b3f6-5c7e1dc5c030
+ required:
+ - metadataAuditTrailId
+ - source
+ - endpoint
+ - operation
+ - requestBody
+ - responseCode
+ - responseBody
+ - user
+ - timestamp
+ href:
+ type: string
+ nullable: true
+ example: null
+ required:
+ - metadataAuditTrails
+ MetadataAuditTrailsPostRequestBody:
+ type: object
+ properties:
+ source:
+ type: string
+ example: FMT
+ endpoint:
+ type: string
+ format: url
+ example: https://dev.api.htm.nl/v2/productmetadata
+ operation:
+ type: string
+ enum:
+ - GET
+ - POST
+ - PATCH
+ - DELETE
+ example: POST
+ requestBody:
+ type: string
+ format: json
+ example: { "json": "data" }
+ responseCode:
+ type: integer
+ example: 200
+ responseBody:
+ type: string
+ format: json
+ example: { "json": "data" }
+ user:
+ type: string
+ example: ad.vogelaar
+ timestamp:
+ type: string
+ format: date-time
+ example: 2022-01-01 00:00:00
+ correlationId:
+ type: string
+ format: uuid
+ nullable: true
+ example: 662de47c-d809-41bd-b3f6-5c7e1dc5c030
+ required:
+ - source
+ - endpoint
+ - operation
+ - requestBody
+ - responseCode
+ - responseBody
+ - user
+ - timestamp
+ MetadataAuditTrailsPostResponseBody:
+ type: object
+ properties:
+ metadataAuditTrailId:
+ type: string
+ format: uuid
+ example: b6161270-eb08-4242-90ec-967d5db62070
+ required:
+ - metadataAuditTrailId
+ TaxMetadataGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#TaxMetadata
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/TaxMetadata"
+ TaxMetadata:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: e4e7c773-eb7a-3fe0-960d-df1744127a7b
+ taxMetadataRowId:
+ type: integer
+ example: 13
+ taxMetadataId:
+ type: string
+ format: uuid
+ example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925
+ taxCode:
+ type: string
+ example: V21
+ taxPercentage:
+ type: number
+ example: 21
+ description:
+ type: string
+ example: BTW VERKOOP HOOG 21%
+ weFactTaxCode:
+ type: string
+ example: V21
+ nullable: true
+ validFrom:
+ type: string
+ format: date-time
+ example: 2024-03-22T09:00:00
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ required:
+ - taxMetadataId
+ - taxCode
+ - taxPercentageAmount
+ - description
+ - validFrom
+ TaxMetadataPostRequestBody:
+ type: object
+ properties:
+ taxCode:
+ type: string
+ example: V21
+ taxPercentage:
+ type: number
+ example: 21
+ description:
+ type: string
+ example: BTW VERKOOP HOOG 21%
+ weFactTaxCode:
+ type: string
+ example: V21
+ nullable: true
+ validFrom:
+ type: string
+ format: date-time
+ example: 2024-03-22T09:00:00
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ required:
+ - taxCode
+ - taxPercentageAmount
+ - description
+ - validFrom
+ TaxMetadataPostResponseBody:
+ type: object
+ properties:
+ taxMetadataId:
+ type: string
+ format: uuid
+ example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925
+ required:
+ - taxMetadataId
+ TaxMetadataPatchRequestBody:
+ type: object
+ properties:
+ taxCode:
+ type: string
+ example: V21
+ nullable: true
+ taxPercentageAmount:
+ type: number
+ example: 21
+ nullable: true
+ description:
+ type: string
+ example: BTW VERKOOP HOOG 21%
+ nullable: true
+ weFactTaxCode:
+ type: string
+ example: V21
+ nullable: true
+ validFrom:
+ type: string
+ format: date-time
+ example: 2024-03-22T09:00:00
+ nullable: true
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ TaxMetadataPatchResponseBody:
+ type: object
+ properties:
+ taxMetadataId:
+ type: string
+ format: uuid
+ example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925
+ required:
+ - taxMetadataId
+ SourceMetadataGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#SourceMetadata
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/SourceMetadata"
+ SourceMetadata:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: d7df8249-3e72-35f2-a069-d845e8e2cbba
+ sourceMetadataRowId:
+ type: integer
+ example: 2
+ sourceMetadataId:
+ type: string
+ format: uuid
+ example: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0
+ incomingName:
+ type: string
+ example: HTM-website
+ incomingEntity:
+ type: string
+ example: OrderLine
+ outgoingName:
+ type: string
+ example: Website Verkopen
+ businessOwner:
+ type: string
+ example: Koos Verweg
+ rejectionProcessing:
+ type: string
+ example: system
+ rejectionInfo:
+ type: string
+ example: api.htm.nl/v2/account/12345/msgs/abc
+ validFrom:
+ type: string
+ format: date-time
+ example: 2025-01-01T00:00:00.000
+ validUntil:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ required:
+ - sourceMetadataId
+ - incomingName
+ - incomingEntity
+ - outgoingName
+ - businessOwner
+ - rejectionProcessing
+ - rejectionInfo
+ - validFrom
+ SourceMetadataPostRequestBody:
+ type: object
+ properties:
+ incomingName:
+ type: string
+ example: HTM-website
+ incomingEntity:
+ type: string
+ example: OrderLine
+ outgoingName:
+ type: string
+ example: Website Verkopen
+ businessOwner:
+ type: string
+ example: Koos Verweg
+ rejectionProcessing:
+ type: string
+ example: system
+ rejectionInfo:
+ type: string
+ example: api.htm.nl/v2/account/12345/msgs/abc
+ validFrom:
+ type: string
+ format: date-time
+ example: 2025-01-01T00:00:00.000
+ validUntil:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ required:
+ - incomingName
+ - incomingEntity
+ - outgoingName
+ - businessOwner
+ - rejectionProcessing
+ - rejectionInfo
+ - validFrom
+ SourceMetadataPostResponseBody:
+ type: object
+ properties:
+ sourceMetadataId:
+ type: string
+ format: uuid
+ example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ required:
+ - sourceMetadataId
+ SourceMetadataPatchRequestBody:
+ type: object
+ properties:
+ incomingName:
+ type: string
+ example: HTM-website
+ nullable: true
+ incomingEntity:
+ type: string
+ example: OrderLine
+ nullable: true
+ outgoingName:
+ type: string
+ example: Website Verkopen
+ nullable: true
+ businessOwner:
+ type: string
+ example: Koos Verweg
+ nullable: true
+ rejectionProcessing:
+ type: string
+ example: system
+ nullable: true
+ rejectionInfo:
+ type: string
+ example: api.htm.nl/v2/account/12345/msgs/abc
+ nullable: true
+ validFrom:
+ type: string
+ format: date-time
+ example: 2025-01-01T00:00:00.000
+ nullable: true
+ validUntil:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ SourceMetadataPatchResponseBody:
+ type: object
+ properties:
+ sourceMetadataId:
+ type: string
+ format: uuid
+ example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ required:
+ - sourceMetadataId
+ AccountingPeriodMetadataGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#AccountingPeriodMetadata
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/AccountingPeriodMetadata"
+ AccountingPeriodMetadata:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: 333d6b7d-b709-3b89-89e0-bcb3d5fdddfc
+ accountingPeriodMetadataRowId:
+ type: integer
+ example: 1
+ accountingPeriodMetadataId:
+ type: string
+ format: uuid
+ example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ accountingPeriod:
+ type: string
+ example: 2024/01
+ isOpen:
+ type: boolean
+ example: true
+ required:
+ - accountingPeriodMetadataId
+ - accountingPeriod
+ - isOpen
+ AccountingPeriodMetadataPostRequestBody:
+ type: object
+ properties:
+ accountingPeriod:
+ type: string
+ example: 2024/01
+ isOpen:
+ type: boolean
+ example: true
+ required:
+ - accountingPeriod
+ - isOpen
+ AccountingPeriodMetadataPostResponseBody:
+ type: object
+ properties:
+ accountingPeriodMetadataId:
+ type: string
+ format: uuid
+ example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ required:
+ - accountingPeriodMetadataId
+ AccountingPeriodMetadataPatchRequestBody:
+ type: object
+ properties:
+ isOpen:
+ type: boolean
+ example: true
+ required:
+ - isOpen
+ AccountingPeriodMetadataPatchResponseBody:
+ type: object
+ properties:
+ accountingPeriodMetadataId:
+ type: string
+ format: uuid
+ example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ required:
+ - accountingPeriodMetadataId
+ ConcessionMetadataGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#ConcessionMetadata
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/ConcessionMetadata"
+ ConcessionMetadata:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: 77c78584-7ce8-3cf5-b89e-73b888d72d70
+ concessionMetadataRowId:
+ type: integer
+ example: 14
+ concessionMetadataId:
+ type: string
+ format: en
+ example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ concessionId:
+ type: integer
+ example: 1
+ percentage:
+ type: number
+ example: 84.021
+ validFrom:
+ type: string
+ format: date-time
+ example: 2024-01-01T00:00:00.000
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ required:
+ - concessionMetadataId
+ - concessionId
+ - percentage
+ - validFrom
+ ConcessionMetadataPostRequestBody:
+ type: object
+ properties:
+ concessionId:
+ type: integer
+ example: 1
+ percentage:
+ type: number
+ example: 84.021
+ validFrom:
+ type: string
+ format: date-time
+ example: 2024-01-01T00:00:00.000
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ required:
+ - concessionId
+ - percentage
+ - validFrom
+ ConcessionMetadataPostResponseBody:
+ type: object
+ properties:
+ concessionMetadataId:
+ type: string
+ format: uuid
+ example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ required:
+ - concessionMetadataId
+ ConcessionMetadataPatchRequestBody:
+ type: object
+ properties:
+ concessionId:
+ type: integer
+ example: 1
+ percentage:
+ type: number
+ example: 84.021
+ validFrom:
+ type: string
+ format: date-time
+ example: 2024-01-01T00:00:00.000
+ validUntil:
+ type: string
+ format: date-time
+ nullable: true
+ example: null
+ ConcessionMetadataPatchResponseBody:
+ type: object
+ properties:
+ concessionMetadataId:
+ type: string
+ format: uuid
+ example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
+ required:
+ - concessionMetadataId
+ ConcessionsGetResponseBody:
+ type: object
+ properties:
+ "@odata.context":
+ type: string
+ example: $metadata#Concession
+ value:
+ type: array
+ items:
+ $ref: "#/components/schemas/Concession"
+ Concession:
+ type: object
+ properties:
+ "@odata.etag":
+ type: string
+ example: 49bfa10d-b80d-3f2f-b3c2-9a5da3182cc3
+ concessionRowId:
+ type: integer
+ example: 1
+ concessionId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: RAIL
+ required:
+ - concessionId
+ - name
+ TransactionItemsResponseStatusGetResponseBody:
+ type: object
+ properties:
+ summary:
+ type: object
+ properties:
+ created:
+ type: integer
+ example: 15
+ updated:
+ type: integer
+ example: 2
+ total:
+ type: integer
+ example: 17
+ required:
+ - created
+ - total
+ - updated
+ required:
+ - summary
+ 409Response:
+ type: object
+ properties:
+ code:
+ type: string
+ example: "409"
+ type:
+ type: string
+ example: error
+ message:
+ type: string
+ example: conflict
+ description:
+ type: string
+ example: >-
+ A transaction with the same TransactionId and TransactionLineId
+ already exists.
+ errors:
+ type: array
+ items:
+ type: object
+ properties:
+ detail:
+ type: string
+ example: >-
+ Transaction is a duplicate of a transaction already in the
+ system.
+ pointer:
+ type: string
+ example: "#/transactionItems/0"
+ transactionId:
+ type: string
+ example: 1ad109d3-fd7d-4b6f-872b-220d492f385f
+ transactionLineId:
+ type: string
+ example: fee907dd-e59d-44f5-a63b-bbdec38f79b7
+ TransactionItemsBulkRequestBody:
+ type: object
+ properties:
+ transactionItemIds:
+ type: array
+ items:
+ type: string
+ format: uuid
+ example: 1ad109d3-fd7d-4b6f-872b-220d492f385f
+ required:
+ - transactionItemIds
+ TransactionItemsRejectResponseStatusGetResponseBody:
+ type: object
+ properties:
+ summary:
+ type: object
+ properties:
+ rejected:
+ type: integer
+ example: 3
+ total:
+ type: integer
+ example: 3
+ required:
+ - rejected
+ - total
+ required:
+ - summary
+ TransactionItemsReturnResponseStatusGetResponseBody:
+ type: object
+ properties:
+ summary:
+ type: object
+ properties:
+ returned:
+ type: integer
+ example: 3
+ total:
+ type: integer
+ example: 3
+ required:
+ - returned
+ - total
+ required:
+ - summary
rfc9457:
type: object
properties:
@@ -2138,10 +5030,42 @@ components:
example:
- "/account/12345"
- "/account/67890"
- postMetadataAuditTrailResponse:
- type: object
- properties:
- metadataAuditTrailId:
- type: string
- format: uuid
- example: 37a8095b-19db-498f-9349-5f37d21c5bdf
+ parameters:
+ top:
+ name: $top
+ in: query
+ description: Show only the first n items
+ required: false
+ style: form
+ explode: true
+ schema:
+ minimum: 0
+ type: integer
+ skip:
+ name: $skip
+ in: query
+ description: Skip the first n items
+ required: false
+ style: form
+ explode: true
+ schema:
+ minimum: 0
+ type: integer
+ count:
+ name: $count
+ in: query
+ description: Include count of items
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: boolean
+ filter:
+ name: $filter
+ in: query
+ description: Filter items by property values
+ required: false
+ style: form
+ explode: true
+ schema:
+ type: string
diff --git a/src/openapi/fiko/fikoreference-crud.yaml b/src/openapi/fiko/fikoreference-crud.yaml
deleted file mode 100644
index 52969ac..0000000
--- a/src/openapi/fiko/fikoreference-crud.yaml
+++ /dev/null
@@ -1,381 +0,0 @@
-openapi: 3.0.1
-info:
- title: ABTFikoReference
- description: |-
- CRUD APIs for FIKO reference data (based on the v1 model for FIKO, see [the FIKO v1 datamodel in Lucid](https://lucid.app/lucidchart/50c0ff9d-48ba-4ea9-8182-10bede07d3b1/edit?viewport_loc=145%2C-316%2C2782%2C1418%2C0_0&invitationId=inv_1cd35e35-77f5-4e31-87d6-32fd74400350)). This means that, for now, only GET endpoints on `TaxMetadata` and `ProductGroupMetadata` (already named `ProductMetadata` to avoid rework for v2) are available.
-
- When the v2 model for FIKO is implemented (see [the FIKO v2 datamodel in Lucid](https://lucid.app/lucidchart/50c0ff9d-48ba-4ea9-8182-10bede07d3b1/edit?viewport_loc=-72%2C-954%2C2406%2C1226%2CUnjZp4g0O~CK&invitationId=inv_1cd35e35-77f5-4e31-87d6-32fd74400350)), POST/PUT/DELETE for these tables (as well as CRUD for additional tables) will become available, to support populating the reference tables with Unit4Financials data.
-
- These are NOT functional API's to be published by the Service Engine, but are direct CRUD API's on top of the database.
- version: '1.0'
-servers:
- - url: https://api.integratielaag.nl/abt/fikoreference/1.0
-tags:
- - name: ABTFikoReference CRUD v1
- description: >-
- CRUD APIs for FIKO reference data (based on the v1 model for FIKO, see [the FIKO v1 datamodel in Lucid](https://lucid.app/lucidchart/50c0ff9d-48ba-4ea9-8182-10bede07d3b1/edit?viewport_loc=145%2C-316%2C2782%2C1418%2C0_0&invitationId=inv_1cd35e35-77f5-4e31-87d6-32fd74400350)).
- - name: ABTFikoReference CRUD v2
- description: >-
- CRUD APIs for FIKO reference data (based on the v2 model for FIKO, see [the FIKO v2 datamodel in Lucid](https://lucid.app/lucidchart/50c0ff9d-48ba-4ea9-8182-10bede07d3b1/edit?viewport_loc=-72%2C-954%2C2406%2C1226%2CUnjZp4g0O~CK&invitationId=inv_1cd35e35-77f5-4e31-87d6-32fd74400350)).
-
-paths:
- /taxmetadata:
- get:
- tags:
- - ABTFikoReference CRUD v1
- summary: Get a list of all possible values of the "TaxMetadata" reference table. Mainly used for populating dropdown lists (in PMT for example).
- description: |-
- Get a list of all possible values of the `TaxMetadata` reference table. Mainly used for populating dropdown lists (in PMT for example).\
- The attributes `validFrom` and `validUntil` are not yet present in the FIKO v1 datamodel, but are already included in this resourcemodel; to prevent rework in the near future.\
- For now, for `validFrom`, the value will always be returned as `2024-01-01T00:00:00.000+00:00` and for `validUntil` it will always be `null`.
- responses:
- '200':
- description: OK
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/TaxMetadataListResponse'
- examples:
- getListTaxMetadataSales:
- summary: List containing three TaxMetadata entries, used for sales tax
- value:
- {
- "Entries": [
- {
- "taxMetadataId": "61A148AF-6DCB-4BB6-9D3F-17A8B627F745",
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "BTW VERKOOP HOOG 21%",
- "validFrom": "2024-01-01T00:00:00.000+00:00",
- "validUntil": null
- },
- {
- "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%",
- "validFrom": "2024-01-01T00:00:00.000+00:00",
- "validUntil": null
- },
- {
- "taxMetadataId": "AC20A838-C81B-4652-96EA-F6E79E696E9C",
- "taxCode": "V0",
- "taxPercentageAmount": 0,
- "description": "BTW VERKOOP NUL",
- "validFrom": "2024-01-01T00:00:00.000+00:00",
- "validUntil": null
- }
- ]
- }
- getListTaxMetadataSalesAndPurchase:
- summary: List containing x TaxMetadata entries, used for sales and purchase tax
- value:
- {
- "Entries": [
- {
- "taxMetadataId": "61A148AF-6DCB-4BB6-9D3F-17A8B627F745",
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "BTW VERKOOP HOOG 21%",
- "validFrom": "2024-01-01T00:00:00.000+00:00",
- "validUntil": null
- },
- {
- "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%",
- "validFrom": "2024-01-01T00:00:00.000+00:00",
- "validUntil": null
- },
- {
- "taxMetadataId": "AC20A838-C81B-4652-96EA-F6E79E696E9C",
- "taxCode": "V0",
- "taxPercentageAmount": 0,
- "description": "BTW VERKOOP NUL",
- "validFrom": "2024-01-01T00:00:00.000+00:00",
- "validUntil": null
- },
- {
- "TBD": "TBD"
- },
- {
- "TBD": "TBD"
- },
- {
- "TBD": "TBD"
- }
- ]
- }
- '400':
- description: '400'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/400Response'
- '401':
- description: '401'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/401Response'
- '404':
- description: '404'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/404Response'
- '500':
- description: '500'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/500Response'
- /productmetadata:
- get:
- tags:
- - ABTFikoReference CRUD v1
- summary: Get a list of all possible values of the "ProductMetadata" reference table. Mainly used for populating dropdown lists (in PMT for example).
- description: |-
- Get a list of all possible values of the `ProductGroupMetadata` (soon to be renamed to `ProductMetadata`) reference table. Mainly used for populating dropdown lists (in PMT for example).\
- The name of the entity is `ProductGroupMetadata` in the FIKO v1 datamodel, but the resourcemodel already uses the name `ProductMetadata`, as will be the name from FIKO v2 onwards.\
- This also applies to the attributes `productMetadataId` (still called `ProductGroupMetadataId` in FIKO v1), `productCode` (still called `productGroupCode` in FIKO v1) and `user` (present in FIKO v1, but removed in FIKO v2, so also in this resourcemodel).
- responses:
- '200':
- description: OK
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ProductMetadataListResponse'
- examples:
- getListProductMetadata:
- summary: List containing one ProductMetadata entry, used for testing purposes
- value:
- {
- "Entries": [
- {
- "productMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
- "productCode": "PG001",
- "department": "Electronics",
- "costCenter": "CC101",
- "costType": "TypeA",
- "description": "Group for electronic products",
- "documentCode": "DOC001",
- "timestampUpdated": "2024-09-03T15:07:53.470+00:00",
- "validFrom": "2024-08-01T00:00:00.000+00:00",
- "validUntil": "2025-08-01T00:00:00.000+00:00"
- }
- ],
- }
- '400':
- description: '400'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/400Response'
- '401':
- description: '401'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/401Response'
- '404':
- description: '404'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/404Response'
- '500':
- description: '500'
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/500Response'
-
-components:
- schemas:
- TaxMetadataListResponse:
- type: object
- required:
- - Entries
- properties:
- Entries:
- type: array
- items:
- $ref: '#/components/schemas/TaxMetadataResponse'
- ProductMetadataListResponse:
- type: object
- required:
- - Entries
- properties:
- Entries:
- type: array
- items:
- $ref: '#/components/schemas/ProductMetadataResponse'
- TaxMetadataResponse:
- type: object
- required:
- - taxMetadataId
- - taxCode
- - taxPercentageAmount
- - validFrom
- properties:
- taxMetadataId:
- type: string
- format: uuid
- example: 501B17EF-36C4-4039-B92C-6517969B464E
- taxCode:
- type: string
- example: V09
- taxPercentageAmount:
- type: integer
- example: 21
- description:
- type: string
- example: BTW VERKOOP LAAG 9%
- validFrom:
- type: string
- format: date-time-offset
- example: '2024-09-03T10:01:34.000+00:00'
- validUntil:
- type: string
- format: date-time-offset
- example: '2024-09-03T10:01:34.000+00:00'
- ProductMetadataResponse:
- type: object
- required:
- - productMetadataId
- - productCode
- - department
- - costCenter
- - costType
- - description
- - documentCode
- - timestampUpdated
- - validFrom
- properties:
- productMetadataId:
- type: string
- format: uuid
- example: 501B17EF-36C4-4039-B92C-6517969B464E
- productCode:
- type: string
- description: Called "artikelnr" in U4F
- example: TBD
- department:
- type: string
- description: Called "element 1" in U4F
- example: TBD
- costCenter:
- type: string
- description: Called "element 3" in U4F
- example: TBD
- costType:
- type: string
- description: Called "element 2" in U4F
- example: TBD
- description:
- type: string
- example: TBD
- documentCode:
- type: string
- example: TBD
- timestampUpdated:
- type: string
- format: date-time-offset
- example: '2024-09-03T10:01:34.000+00:00'
- validFrom:
- type: string
- format: date-time-offset
- example: '2024-09-03T10:01:34.000+00:00'
- validUntil:
- type: string
- format: date-time-offset
- example: '2024-09-03T10:01:34.000+00:00'
- 400Response:
- type: object
- properties:
- code:
- type: string
- example: '400'
- type:
- type: string
- message:
- type: string
- example: Bad Request
- description:
- type: string
- example: '''2023-02-01 00:00:00'' is not a valid Datetime'
- apiErrorCode:
- type: string
- example: htm.api.err.40xxx
- 401Response:
- type: object
- properties:
- code:
- type: string
- example: '900901'
- type:
- type: string
- message:
- type: string
- example: Invalid Credentials
- description:
- type: string
- example: >-
- Invalid Credentials. Make sure you have provided the correct
- security credentials
- apiErrorCode:
- type: string
- example: htm.api.err.40xxx
- 403Response:
- type: object
- properties:
- code:
- type: string
- example: '900901'
- type:
- type: string
- message:
- type: string
- example: Retailer not authorized
- description:
- type: string
- example: The retailer is not allowed to access resource for requested
- apiErrorCode:
- type: string
- example: htm.api.err.40xxx touchpoint
- 404Response:
- type: object
- properties:
- code:
- type: string
- example: '404'
- type:
- type: string
- example: Status report
- message:
- type: string
- example: Not Found
- description:
- type: string
- example: The requested resource is not available.
- apiErrorCode:
- type: string
- example: htm.api.err.40xxx
- 500Response:
- type: object
- properties:
- code:
- type: string
- example: '500'
- type:
- type: string
- message:
- type: string
- example: Internal Server Error
- description:
- type: string
- apiErrorCode:
- type: string
- example: htm.api.err.40xxx
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/SE-orders-gboAgeProfile.yaml b/src/openapi/orders/SE-orders-gboAgeProfile.yaml
new file mode 100644
index 0000000..939ef57
--- /dev/null
+++ b/src/openapi/orders/SE-orders-gboAgeProfile.yaml
@@ -0,0 +1,180 @@
+openapi: 3.0.1
+info:
+ title: ABT Service Engine Order APIs
+ version: "1.0"
+ description: Order APIs available in the Service Engine for order validation and fulfillment.
+servers:
+ - url: https://services.acc.api.htm.nl/abt/touchpoint/2.0
+paths:
+ /orders/validation/gboAgeProfile:
+ get:
+ tags:
+ - ServiceEngine Order validation
+ summary: Get GBO age profile that is valid for the given input
+ description: |-
+ Only one age profile can be valid at any one time, so only one profile is returned.
+ parameters:
+ - name: productStartDate
+ in: query
+ required: true
+ description: Start date of product validity
+ schema:
+ type: string
+ format: date
+ example: 2025-03-20
+ - name: birthDate
+ in: query
+ required: false
+ description: Birthdate of the OVpay-token holder
+ schema:
+ type: string
+ format: date
+ example: 2000-01-01
+ - name: ovPayTokenId
+ in: query
+ required: false
+ description: ovPayTokenId of the customer's selected token
+ schema:
+ type: integer
+ example: 1
+ - name: customerTokenId
+ in: query
+ required: false
+ description: customerTokenId of the customer's selected token
+ schema:
+ type: string
+ format: uuid
+ example: "4a2d2c9c-1e5d-4d8a-9c0a-6c0a6c0a6c0a"
+ - name: serviceReferenceId
+ in: query
+ required: false
+ description: serviceReferenceId of the customer's selected token
+ schema:
+ type: string
+ example: "NLOV1234567ABCDEFG"
+ - name: amount
+ in: query
+ required: false
+ description: amount belonging to the serviceReferenceId
+ schema:
+ type: integer
+ example: 100
+ - name: ovpasNumber
+ in: query
+ required: false
+ description: OVpas number of the customer's selected token
+ schema:
+ type: string
+ example: "63AW974"
+ - name: verificationCode
+ in: query
+ required: false
+ description: verification code belonging to the OVpas number
+ schema:
+ type: string
+ example: 1A3C7D
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/GboAgeProfileResponse"
+
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rfc9457Response"
+ examples:
+ Missing parameter(s):
+ summary: Missing parameter(s)
+ value:
+ {
+ "type": "https://www.htm.nl/api/v1/400Error",
+ "title": "Missing parameter(s)",
+ "detail": "At least one of the following parameters must be present: birthDate, ovPayTokenId, customerTokenId, (serviceReferenceId and amount), (ovpasNumber and verificationCode)",
+ "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
+ "apiErrorCode": "htm.api.err.400.2",
+ }
+ Invalid date format:
+ summary: Invalid date format
+ value:
+ {
+ "type": "https://www.htm.nl/api/v1/400Error",
+ "title": "Invalid input",
+ "detail": "The given birthDate is not a valid Date format",
+ "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
+ "apiErrorCode": "htm.api.err.400.3",
+ }
+ "404":
+ description: Not found
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rfc9457Response"
+ examples:
+ No birthdate present in PAD of OVpay token:
+ summary: No birthdate present in PAD of OVpay token
+ value:
+ {
+ "type": "https://www.htm.nl/api/v1/404Error",
+ "title": "Missing birthdate in PAD",
+ "detail": "There is no birthdate present in the PAD of the OVpay token, or there is no PAD present at all",
+ "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
+ "apiErrorCode": "htm.api.err.404.1",
+ }
+components:
+ schemas:
+ GboAgeProfileResponse:
+ type: object
+ required:
+ - gboAgeProfileId
+ - name
+ - ageFromInclusive
+ - ageToInclusive
+ properties:
+ gboAgeProfileId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kind (4 t/m 11 jaar)
+ ageFromInclusive:
+ type: integer
+ example: 4
+ ageToInclusive:
+ type: integer
+ example: 11
+ rfc9457Response:
+ type: object
+ properties:
+ type:
+ type: string
+ format: url
+ example: "https://www.htm.nl/api/v1/rfc9457Error"
+ title:
+ type: string
+ description: "Short summary of the error."
+ example: "The request is not valid."
+ detail:
+ type: string
+ description: "More detailed descriptionof the error."
+ example: "Some required parameters are missing."
+ instance:
+ type: string
+ description: "Unique identifier to correlate this specific error with logging in other applications."
+ example: "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c"
+ additionalProperty1:
+ type: string
+ description: "Example of an additional property value to be used for error reporting."
+ example: "additionalValue1"
+ additionalProperty2:
+ type: array
+ description: "Example of an additional property array to be used for error reporting."
+ items:
+ type: string
+ example:
+ - "additionalValue2-1"
+ - "additionalValue2-2"
diff --git a/src/openapi/orders/orders-crud.yaml b/src/openapi/orders/orders-crud.yaml
index 8ae1a81..96866d3 100644
--- a/src/openapi/orders/orders-crud.yaml
+++ b/src/openapi/orders/orders-crud.yaml
@@ -1,17 +1,19 @@
-openapi: "3.0.3"
+openapi: 3.0.1
info:
title: ABT Orders CRUD APIs
version: "1.0"
description: CRUD APIs for ABT Orders database. These are NOT the functional APIs from Service Engine.
servers:
- - url: https://api.integratielaag.nl/v1
+ - url: https://services.acc.api.htm.nl/abt/abtorder/1.0
paths:
/orders:
get:
tags:
- Order
- summary: P1. Find orders.
+ summary: Find orders.
description: Find orders.
+ servers:
+ - url: https://api.integratielaag.nl/v1
parameters:
- in: query
name: externalOrderId
@@ -54,21 +56,7 @@ paths:
type: integer
example: 1
required: false
- description: The id of the language in which the order was created.
- - in: query
- name: billingAddressId
- schema:
- type: integer
- example: 32
- required: false
- description: The technical id of the billing address.
- - in: query
- name: shippingAddressId
- schema:
- type: integer
- example: 64
- required: false
- description: The technical id of the shipping address.
+ description: The id of the language in which the order was created.
- in: query
name: createdBefore
schema:
@@ -127,7 +115,10 @@ paths:
"orderNumber": "123456",
"customerProfileId": 1337,
"totalAmount": 121,
- "touchPointId": 1,
+ "touchPoint":{
+ "touchPointId": 1,
+ "name": "Perplex"
+ },
"language":
{
"languageId": 1,
@@ -135,8 +126,6 @@ paths:
"iso639Code": "nl-NL",
"ietfCode": "nl",
},
- "billingAddressId": 1,
- "shippingAddressId": 1,
"createdOn": "2024-03-22T09:00:00",
"lastUpdatedOn": "2024-03-22T09:00:00",
"order_OrderStatus":
@@ -166,16 +155,11 @@ paths:
"externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
"productId": 1,
"productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
+ "fikoArticleNumber": "FIKO-1234",
"productDescription": "HTM Maandkorting 20%",
"taxAmount": 21,
- "taxMetadata":
- {
- "taxMetadataId": "06270769-a263-4325-82d6-f49396f39d03",
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "21% BTW",
- },
+ "taxCode": "V21",
+ "taxPercentage": 21,
"amountExclTax": 100,
"amountInclTax": 121,
"quantity": 1,
@@ -208,9 +192,8 @@ paths:
{
"personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
"name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
"challengeType":
{
"challengeTypeId": 1,
@@ -247,7 +230,10 @@ paths:
"name": "ideal",
"provider": "Buckaroo",
},
- "touchPointId": 1,
+ "touchPoint":{
+ "touchPointId": 1,
+ "name": "Perplex"
+ },
"isRefund": false,
"htmPaymentReference": "HTM-1234",
"pspPaymentReference": "Buckaroo-1234",
@@ -291,7 +277,7 @@ paths:
{
"orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
"addressType":
- { "addressTypeId": 1, "name": "Billing" },
+ { "addressTypeId": 3, "name": "Billing" },
"street": "Kon. Julianaplein",
"houseNumber": 10,
"houseNumberSuffix": "a",
@@ -308,137 +294,154 @@ paths:
post:
tags:
- Order
- summary: P1. Create a new order.
+ summary: Create a new order.
description: Create a new order.
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7",
- "customerProfileId": 1337,
- "totalAmount": 121,
- "touchPointId": 1,
- "languageId": 1,
- "billingAddressId": 1,
- "shippingAddressId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "order_OrderStatus":
- [
- {
- "orderStatusId": 4,
- "createdOn": "2024-03-22T09:00:00",
- "description": "Order succesvol betaald",
- },
- {
- "orderStatusId": 3,
- "createdOn": "2024-03-22T08:55:00",
- "description": "Betaling in behandeling",
- },
- ],
- "orderLines":
- [
- {
- "externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
- "productId": 1,
- "productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
- "productDescription": "HTM Maandkorting 20%",
- "taxAmount": 21,
- "taxMetadataId": "7275b910-37d9-40c1-aaac-80d8ceb62ff9",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "quantity": 1,
- "orderLineTerms":
- [{ "termsUrl": "generalTermsAndConditions.pdf" }],
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": "2025-03-22T09:00:00",
- "orderLineStatusId": 4,
- "createdOn": "2024-03-22T09:00:00",
- "customerTokens":
- [
- {
- "tokenTypeId": 1,
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
- {
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
- },
- },
- ],
- "orderAccountingStatuses":
- [
- {
- "accountingStatusId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "description": "Financiele transactie voor de FIKO.",
- },
- ],
- },
- ],
- "payments":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "amountDebit": 121,
- "paymentMethodId": 1,
- "touchPointId": 1,
- "isRefund": false,
- "htmPaymentReference": "HTM-1234",
- "pspPaymentReference": "Buckaroo-1234",
- "paymentStatuses":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "190",
- "statusDescription": "Success",
- "statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
- },
- ],
- "mandateInput":
- {
- "directDebitMandateTypeId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "bic": "RABONL2U",
- "iban": "NL44RABO0123456789",
- "ascription": "J. de Vries",
- "place": "Den Haag",
- },
- },
- ],
- "orderCustomer":
+ examples:
+ Minimum order request body:
+ summary: Minimum order request
+ description: Minimum order request
+ value:
{
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "orderCustomerAddresses":
+ "totalAmount": 0,
+ "touchPointId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "order_OrderStatus":
[
{
- "addressTypeId": 1,
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
- },
+ "orderStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ }
],
- },
- }
+ }
+ Maximum order request :
+ summary: Maximum order request
+ description: Maximum order request
+ value:
+ {
+ "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPointId": 1,
+ "languageId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "order_OrderStatus":
+ [
+ {
+ "orderStatusId": 4,
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order succesvol betaald",
+ },
+ {
+ "orderStatusId": 3,
+ "createdOn": "2024-03-22T08:55:00",
+ "description": "Betaling in behandeling",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "HTM-MND-20",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxAmount": 21,
+ "taxPercentage": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [{ "termsUrl": "generalTermsAndConditions.pdf" }],
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": "2025-03-22T09:00:00",
+ "orderLineStatusId": 4,
+ "createdOn": "2024-03-22T09:00:00",
+ "customerTokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "DSC_0502.JPG",
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses":
+ [
+ {
+ "accountingStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Financiele transactie voor de FIKO.",
+ },
+ ],
+ },
+ ],
+ "payments":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethodId": 1,
+ "touchPointId": 1,
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessFul",
+ },
+ ],
+ "mandateInput":
+ {
+ "directDebitMandateTypeId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ },
+ ],
+ "orderCustomer":
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
responses:
"201":
description: Created
@@ -462,7 +465,7 @@ paths:
required: true
description: The id of the order to process.
get:
- summary: P1. Get a single order.
+ summary: Get a single order.
description: Get a single order.
tags:
- Order
@@ -480,7 +483,10 @@ paths:
"orderNumber": "123456",
"customerProfileId": 1337,
"totalAmount": 121,
- "touchPointId": 1,
+ "touchPoint":{
+ "touchPointId": 1,
+ "name": "Perplex"
+ },
"language":
{
"languageId": 1,
@@ -488,8 +494,6 @@ paths:
"iso639Code": "nl-NL",
"ietfCode": "nl",
},
- "billingAddressId": 1,
- "shippingAddressId": 1,
"createdOn": "2024-03-22T09:00:00",
"lastUpdatedOn": "2024-03-22T09:00:00",
"order_OrderStatus":
@@ -515,16 +519,11 @@ paths:
"externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
"productId": 1,
"productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
+ "fikoArticleNumber": "FIKO-1234",
"productDescription": "HTM Maandkorting 20%",
"taxAmount": 21,
- "taxMetadata":
- {
- "taxMetadataId": "06270769-a263-4325-82d6-f49396f39d03",
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "21% BTW",
- },
+ "taxCode": "V21",
+ "taxPercentage": 21,
"amountExclTax": 100,
"amountInclTax": 121,
"quantity": 1,
@@ -556,9 +555,8 @@ paths:
{
"personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
"name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
"challengeType":
{ "challengeTypeId": 1, "name": "email" },
"oneTimePassword": "H5Iiz3JTaQeIV8p",
@@ -589,7 +587,10 @@ paths:
"name": "ideal",
"provider": "Buckaroo",
},
- "touchPointId": 1,
+ "touchPoint":{
+ "touchPointId": 1,
+ "name": "Perplex"
+ },
"isRefund": false,
"htmPaymentReference": "HTM-1234",
"pspPaymentReference": "Buckaroo-1234",
@@ -633,7 +634,7 @@ paths:
{
"orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
"addressType":
- { "addressTypeId": 1, "name": "Billing" },
+ { "addressTypeId": 3, "name": "Billing" },
"street": "Kon. Julianaplein",
"houseNumber": 10,
"houseNumberSuffix": "a",
@@ -645,7 +646,7 @@ paths:
},
}
patch:
- summary: P1. Update an order.
+ summary: Update an order.
description: Update an order.
tags:
- Order
@@ -659,8 +660,6 @@ paths:
"customerProfileId": 1337,
"totalAmount": 121,
"languageId": 1,
- "billingAddressId": 1,
- "shippingAddressId": 1,
"lastUpdatedOn": "2024-03-22T09:00:00",
}
responses:
@@ -690,7 +689,7 @@ paths:
required: true
description: The id of the order to process.
post:
- summary: P1. Add an order status.
+ summary: Add an order status.
description: Add an order status.
tags:
- Order
@@ -727,7 +726,7 @@ paths:
required: true
description: The id of the order to process.
post:
- summary: P1. Add a single order line to an order.
+ summary: Add a single order line to an order.
description: Add a single order line to an order.
tags:
- Order Line
@@ -736,53 +735,63 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
- "productId": 1,
- "productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
- "productDescription": "HTM Maandkorting 20%",
- "taxAmount": 21,
- "taxMetadataId": "1d6f1725-1072-4f08-982c-3df51dd854a1",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "quantity": 1,
- "orderLineTerms":
- [{ "termsUrl": "generalTermsAndConditions.pdf" }],
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": "2025-03-22T09:00:00",
- "orderLineStatusId": 4,
- "createdOn": "2024-03-22T09:00:00",
- "customerTokens":
- [
- {
- "tokenTypeId": 1,
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
+ examples:
+ Minimum orderline requestBody:
+ value:
+ {
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "productDescription": "HTM Maandkorting 20%",
+ "quantity": 0,
+ "orderLineTerms":
+ [{ "termsUrl": "generalTermsAndConditions.pdf" }],
+ "orderLineStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00"
+ }
+ Maximum orderline requestBody:
+ value:
+ {
+ "externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "FIKO-1234",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxAmount": 21,
+ "taxCode": "V21",
+ "taxPercentage": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [{ "termsUrl": "generalTermsAndConditions.pdf" }],
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": "2025-03-22T09:00:00",
+ "orderLineStatusId": 4,
+ "createdOn": "2024-03-22T09:00:00",
+ "customerTokens":
+ [
{
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "birthdate": "1970-01-01"
+ },
},
- },
- ],
- "orderAccountingStatuses":
- [
- {
- "accountingStatusId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "description": "Financiele transactie voor de FIKO.",
- },
- ],
- }
+ ],
+ "orderAccountingStatuses":
+ [
+ {
+ "accountingStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Financiele transactie voor de FIKO.",
+ },
+ ],
+ }
responses:
"201":
description: Created
@@ -802,7 +811,7 @@ paths:
required: true
description: The id of the order to process.
post:
- summary: P2. Add a payment to an order.
+ summary: Add a payment to an order.
description: Add a payment to an order.
tags:
- Payment
@@ -812,34 +821,46 @@ paths:
schema:
$ref: "#/components/schemas/unavailable"
example:
- {
- "createdOn": "2024-03-22T09:00:00",
- "amountDebit": 121,
- "paymentMethodId": 1,
- "touchPointId": 1,
- "isRefund": false,
- "htmPaymentReference": "HTM-1234",
- "pspPaymentReference": "Buckaroo-1234",
- "paymentStatuses":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "190",
- "statusDescription": "Success",
- "statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
- },
- ],
- "mandateInput":
+ Minimum orderline requestBody:
+ value:
{
- "directDebitMandateTypeId": 1,
"createdOn": "2024-03-22T09:00:00",
- "bic": "RABONL2U",
- "iban": "NL44RABO0123456789",
- "ascription": "J. de Vries",
- "place": "Den Haag",
- },
- }
+ "amountDebit": 121,
+ "paymentMethodId": 1,
+ "touchPointId": 1,
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234"
+ }
+ Maximum orderline requestBody:
+ value:
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethodId": 1,
+ "touchPointId": 1,
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessFul",
+ },
+ ],
+ "mandateInput":
+ {
+ "directDebitMandateTypeId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ }
responses:
"201":
description: Created
@@ -859,7 +880,7 @@ paths:
required: true
description: The id of the order to process.
post:
- summary: P3. Add a customer to an order.
+ summary: Add a customer to an order.
description: Add a customer to an order.
tags:
- Customer
@@ -869,25 +890,32 @@ paths:
schema:
$ref: "#/components/schemas/unavailable"
example:
- {
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "orderCustomerAddresses":
- [
- {
- "addressTypeId": 1,
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
- },
- ],
- }
+ Minimum orderCustomer requestBody:
+ value:
+ {
+ "emailAddress": "jandevries@outlook.com"
+ }
+ Maximum orderCustomer requestBody:
+ value:
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "addressTypeId": 3,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ }
responses:
"201":
description: Created
@@ -899,7 +927,7 @@ paths:
{ "orderCustomerId": "9c9ae71f-7de9-49f9-b676-b0fe103f6286" }
/orderlines:
get:
- summary: P1. Find order lines.
+ summary: Find order lines.
description: Find order lines.
tags:
- Order Line
@@ -935,10 +963,10 @@ paths:
required: false
description: The name of the product.
- in: query
- name: productCode
+ name: fikoArticleNumber
schema:
type: string
- example: HTM-MND-20
+ example: FIKO-1234
required: false
description: The code of the product.
- in: query
@@ -949,13 +977,21 @@ paths:
required: false
description: The amount of tax calculated.
- in: query
- name: taxMetadataId
+ name: taxCode
schema:
type: string
format: uuid
- example: 3435119f-6a99-4f90-967b-25086b9a8bac
+ example: "V21"
required: false
- description: The technical id of the tax code.
+ description: The tax code.
+ - in: query
+ name: taxPercentage
+ schema:
+ type: string
+ format: uuid
+ example: 21
+ required: false
+ description: The tax percentage.
- in: query
name: amountExclTax
schema:
@@ -1065,16 +1101,11 @@ paths:
"externalOrderLineId": "4e333615-6ecd-4b68-a4f8-4f66f6af9be1",
"productId": 1,
"productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
+ "fikoArticleNumber": "FIKO-1234",
"productDescription": "HTM Maandkorting 20%",
"taxAmount": 21,
- "taxMetadata":
- {
- "taxMetadataId": "06270769-a263-4325-82d6-f49396f39d03",
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "21% BTW",
- },
+ "taxCode": "V21",
+ "taxPercentage": 21,
"amountExclTax": 100,
"amountInclTax": 121,
"quantity": 1,
@@ -1096,7 +1127,6 @@ paths:
{
"customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
"tokenType": { "tokenTypeId": 1, "name": "EMV" },
-
"ovPayTokenId": 1,
"serviceReferenceId": "NLOV1234567ABCDEFG",
"amount": 34,
@@ -1106,9 +1136,8 @@ paths:
{
"personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
"name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
"challengeType":
{ "challengeTypeId": 1, "name": "email" },
"oneTimePassword": "H5Iiz3JTaQeIV8p",
@@ -1138,8 +1167,8 @@ paths:
required: true
description: The id of the order line to process.
patch:
- summary: P1. Update an order line.
- description: Update an order line.
+ summary: Update an order line.
+ description: Update an order line. All possible fields that can be patched
tags:
- Order Line
requestBody:
@@ -1149,14 +1178,19 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
+ "productId": 212,
+ "productName": "HTM maandkorting",
+ "fikoArticleNumber": "FIKO-1234",
+ "productDescription": "Reis met korting in HTM voertuigen",
"taxAmount": 21,
- "taxMetadataId": "0574440e-7fa0-401f-b907-539c91633a5d",
+ "taxCode": "V21",
+ "taxPercentage": 21,
"amountExclTax": 100,
"amountInclTax": 121,
"quantity": 1,
"validFrom": "2024-03-22T09:00:00",
"validUntil": "2025-03-22T09:00:00",
- "orderLineStatusId": 4,
+ "orderLineStatusId": 1,
}
responses:
"200":
@@ -1185,7 +1219,7 @@ paths:
required: true
description: The id of the order line to process.
post:
- summary: P4. Add an accounting status to an order line.
+ summary: Add an accounting status to an order line.
description: Add an accounting status to an order line.
tags:
- Order Line
@@ -1222,7 +1256,7 @@ paths:
required: true
description: The id of the order line to process.
post:
- summary: P3. Add a customer token to an order line.
+ summary: Add a customer token to an order line.
description: Add acustomer token to an order line.
tags:
- Order Line
@@ -1240,14 +1274,9 @@ paths:
"ovpasNumber": "OV34567",
"verificationCode": "A7H6",
"personalAccountData":
- {
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
- },
+ {
+ "birthdate": "1970-01-01",
+ }
}
responses:
"201":
@@ -1260,7 +1289,7 @@ paths:
{ "customerTokenId": "eeec597c-36c4-41b2-aeeb-ab5c32f2365d" }
/customertokens:
get:
- summary: P3. Find customer tokens.
+ summary: Find customer tokens.
description: Find customer tokens.
tags:
- Order Line
@@ -1348,9 +1377,8 @@ paths:
{
"personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
"name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
"challengeType":
{ "challengeTypeId": 1, "name": "email" },
"oneTimePassword": "H5Iiz3JTaQeIV8p",
@@ -1368,7 +1396,7 @@ paths:
required: true
description: The id of the customer token.
patch:
- summary: P3. Update a customer token.
+ summary: Update a customer token.
description: Update a customer token.
tags:
- Order Line
@@ -1395,9 +1423,107 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{ "customerTokenId": "0aedb483-2477-4720-aee6-7abcd016843b" }
+ delete:
+ summary: Delete a customer token.
+ description: Delete a customer token.
+ tags:
+ - Order Line
+ responses:
+ "200":
+ description: OK
+ /customertokens/{customerTokenId}/personalaccountdata:
+ parameters:
+ - in: path
+ name: customerTokenId
+ schema:
+ type: string
+ format: uuid
+ example: 510194ef-0038-45ef-94c7-262df93ef1d7
+ required: true
+ description: The id of the customer token.
+ post:
+ summary: Add personal account data to token.
+ description: Add personal account data to token.
+ tags:
+ - Order Line
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ birthdate PersonalAccountData:
+ summary: PersonalAccountData birthdate
+ description: Only record birthdate PersonalAccountData
+ value:
+ {
+ "birthdate": "1970-01-01"
+ }
+ name PersonalAccountData:
+ summary: PersonalAccountData name
+ description: Only record name PersonalAccountData
+ value:
+ {
+ "name": "Jan de Vries"
+ }
+ photo PersonalAccountData:
+ summary: PersonalAccountData photo
+ description: Only record photo in PersonalAccountData
+ value:
+ {
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
+ }
+ full PersonalAccountData:
+ summary: PersonalAccountData full
+ description: Fill the entire record for PersonalAccountData
+ value:
+ {
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ }
+ existing PersonalAccountData:
+ summary: PersonalAccountData already exists for customerToken
+ description: PersonalAccountData already exists for customerToken
+ value:
+ {
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ }
+ responses:
+ "201":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ { "personalAccountDataId": "0aedb483-2477-4720-aee6-7abcd016843b" }
+ "405":
+ description: Method not allowed
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ existing PersonalAccountData:
+ summary: PersonalAccountData already exists for customerToken
+ description: PersonalAccountData already exists for customerToken
+ value:
+ {
+ "code": "405",
+ "type": "string",
+ "message": "Method not allowed",
+ "description": "PersonalAccountData resource already exists for customerToken with customerTokenId:510194ef-0038-45ef-94c7-262df93ef1d7"
+ }
/personalaccountdata:
get:
- summary: P5. Find personal account data.
+ summary: Find personal account data.
description: Find customer tokens.
tags:
- Order Line
@@ -1426,27 +1552,20 @@ paths:
required: false
description: The name of the customer.
- in: query
- name: dateOfBirth
+ name: birthdate
schema:
type: string
format: date
example: 1970-01-01
required: false
- description: The date of birth of the customer.
+ description: "The date of birth of the customer (formatted: YYYY-MM-DD)."
- in: query
- name: photoReference
+ name: photo
schema:
type: string
- example: DSC_0502.JPG
+ example: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAABV0UlEQVR4nFV9daBcxfX/OTNzZf25W9yIK4QQITjBnbZoixVaoEiRGlAo39ICLQWKtHhxd0sgBEgCIe6e57a+V2bm/P64uy/88gfse3vf7tyZI59jn4vj//Q6AAIQACICETAEAgAARCQiAAQARAAiACBEIAAEBAQAIh1chohDvyUCRAg+FgGp+JfBL6H0P2CIxTcASmsY+tvgRfFKwNIVBACADImICBhDIsLgsxGAgIBKlwMU11j8hqG3gg85+AYEtzn0Wxz6uuKqSusQpVeIyIg0lnaqeLulN4k0Av5/d1N8h0Fxp4LvRoKhu6VgA4GC/QYq7jIQEUMERCAd7Bpi8DGICEoTHdzS0i4O3U1p/QcvYGxoAzhDRMDi/QMg6uIrQEIqnhgd/CwM1ok09DOU5IMF0lCSGyBRFJvSmTDOSB/cY0QgIiBCQGCIUDo9rXVxxfgjmQAkLN4VQnEFxRslQEQGQAd3hYgAkSHkPC01mBwJSGqImCgYagIECG61eHFwp8G+Qun2itIKDAAZ5H1yJQVXaUCGFDUYZ6A0ICsupnhyxdODok7Qj94rySYNCSEiEIiDWnZQxfDg9gIgotYaWfBxBARcGNw2gTFEBgf/lbRNa2SIgESaNFHx96S1JqUAdPBlpZ3CrKfnNNknjY00JywN9O0B58X1maxHJgddVLQfLRGHvmxIfhEQGIHU5EiaUGPNaQ6NqjSiBqQ8+L7T+2RHLuvpsIBg96moKIHUlwQQCIcsS1FAikKFcPAyPOSut4oCpEuSNWQAgutLu0taGXbEZzzds9/p2e+nerWTY1wQABMmChMMC0xLmBYyjlwgN5AxYJwLkwthmLYdiRuGJd289n0uuMFZ2tW/mB6/7vAEMAQNAAQG39LhXfx6d87XBkNNQFCU7iFFGTKigUQwhq6iqIE3zys7cUxEWBxKphYQdvR4N3/Uv6HbjZhMBffIGAU2ryQ9GOgW6eD8hixpIDlDCi9KrzAwllCUfSiZbQgMKJE2I/Ge3Rv5itfq96yJe7l6g1m+BwqQQCM4BHkExVAhU4iMc4ncQ0bIJOMu8JRhd8VrC62TmuYcZ0XK8oVC2teHt4Sum1cmPaV0UaGlI8c2WieNiz6yMhmzGBGYHIa0ZcjdlBYGjKEndcxij51ce0iTKfPay6vgfkhrIhpZZTx0QvWZL3UlC0oUPQMNyQsGlglJEyFjwQYFlgbZkB0pno6AH+lhSQAD1zd0kgREZiS2d+WHkz96eAr66xONfVS1P9krGsYYFfUCiCmfKd/Q2laeKT1BSig/onyhFdOSayWAhMpFe9e7Pete/v7DxE9uPe6wyQnuHVIb0lprDYIRYGB2SGsos1lVmI+qNAYKen/KtwQSHbQMJS0sLlFqunNR5SGNlpOVhhAcAEgBaGAIgE5B11aIcyfG//rVQEUIpT7ojUruq2hRf+TWS3LJAICVTgpESV+LNiwwXMEHFK0VgGFHujZ9O/+jf9YzfX+WVxx+bGrtUj+dq7RTsWilTNSocMITBpkhLUyFSIz7KJSSQLpoDD3XX/F62IgvNOVvvYHnP3/k/373rGEheCCl4gyKPl1rjky76qjh4TPGhmIWU4z9eenASxuycZspXdwpjkgASpMhWNbV89vCR44OewVlcATQQ/4luJojkaQFbfZj3zEA4DjkIokdNIWBiztopg+aYiwqKQSSVVRMIAJCxB/hFmAMSWsQhvvdR346/+KEeY2jZ+iefWXRqGOaDbm+WXt6PNdhPhAHzcDkjHOBnBvC1IxrIB84ct7jy8+zHqtpeWfP9mFNifld+19f9v0pR83xnbwheOAXEDBAIhxwRLVR9BgMlYYfO12GLONrDjpmMk/pwYKc02QTFm1P6c41AAJpQIYMUVFdlBuc9eakxRGAIiZyZL7SSpPgKBhKTUiAjA2Z9oP/qIhXBGOMMQAAT4ImMAUKADUEFBEBQPtu9dxTvh4+tX76IitRSbnUdw/95uSoMTMevm3foDX+iJrqBj3YjdITTpa7+bD2ErIQc50qBjW2cLSvgEWdTB5g5C/u+OTVe0cPJGfmM2bIMCUDwQMJANJACIR5Vw1mZE9O7k3JD7YXlu11oibKom2GvKcXttoXTIs1x3nSgwe/GmRAJSNMRTXBg1oEAMCgO6fGVBo3zE3UxflLa7PvbMtxhnGLVYV40lFJR8dMLO1Q0agh5xQsqWQsheCYcTUS1Ua5abD+nBxwdMxEXsJpgKh9NzTskNaRk1UhJ3PpHU/cfmV620sFrAH5dEvk9vyAueiGiopqJ5fWWkvPcaXcX8iQlI6T73nzX0cV2m3l89Ezm066MtI8ZlCpb7v21Hkj173ZbnOwOHIGUmPWVVlJvXnqyclUQWU9XfCJM4yaqAkQgTNMO+r40dG/L6kGpUHpJg4Pn1jTnVPaUyWUC0C6aNBKYYTWUBdhjy+pNG0OJuYLevuA97OpsVkNdnWE9+blf77LvLo5FzIYFHFKAK+pqKZD6HfEHW8vaLUvnR4fUykMhj0F/f72wmOrklKDKZgqOQ4g0tKzYxU7Vrxz7if/MIV4buZ52WTf3B/evrDCvpOqnJ/eUVPb6OYyzDCJyBCmx1jfi/desmvpbrQ+n3VW5YKzOZFy8zwUQ87T6axSOogyWMlGIIDgaHDGgDgDjkCAmogjKAJFAAQvn1U3qtpwXSU4IyKGxBlTioAUMH7QWg1FMIhAxBlqTb4G5GxTlzO6UoQjDCSQIuQIAm5+b+D1LbmYydTBCG/I/RaDOXHxtLJbjkgAA/I0AQ23javmWdPrzMvf6VVEDDCAa5q0YYUGU/2jVrwcIvnoIaePPe4CoeTqyrp9nz91daz7v8/e1nfO7TUtYwrpfmFYBdLp5++5cNsnn0Sbdiy5rvWQWTKbVJpQGMrNgaa4JRAFEZEmxjCA+yX0U8RVqrTopKvLTIzbLCRYbZSBVIKXYiRgsog7eFGaAukY8pYEgExpTQABdJhSb2kirxAoL3quthmb3WS/tDHLGGpd1Cco+T6EojojpdYrrZQmVpRZ9DWFYvzR5cl7v0qWh7gKbKWSPFrW+/YjS756/vVR82ov+hO6ea21HS1r3/iN89r9N2Dfo7o8e+q1o6bMS+czyZf/dvaWDz+qGJU85/b6+lY3m0LG9VAsTcXICw4GzEM4sniDQwGgI+nsCdGfTIlX2ZB2dVWIGRyGkGQDdr0YKv7IowFpItKERVWlUhQBAGQKBI6XvdGzbE8hanINQASBIdelaKSIJPzBtfDjDw6AGqO9g+qMl7BIG2ao58COcU/dkLTjfZfeV56oUNIHQCJlhuLZvvbd//3jmekdYEdeXnBF2e7vT9z48Yr68c75v68qr3byWcbFj5c4lH74/wBdyV4E56o1CYZpjy6YFLnlqApwQWniDKUqCkzg0zUBKwVyP3JKxexEEKhrAsNAYAgB+gi2mLMgvuxNy398nXppUzZqsiAsDvIZMGTYS6sSRVtfCsAAAUgzYpURURHmPVkpOAIxD9Fc+qzOZg4subappsnLJpkQpAmAe/l0tKqh+eI/bnjhjtaBfRct/de2nPNR7Tj7Z3+qile4hWJIVDzVIIY9uDvFOJExpP9v84poQWsdt5iSgETcYACB8wwMOWhNBgelQalApwgRiYqKpLUiIMGFYcPXuwoDBd0Wx5DBTM4cSYMu7E3633e6y/e5PXkVtTgACAYAoAm1JgBC9v+FyWIolwXFnQzyGJRzVU9OuooMDjwS61+zbPq2FRsnLayautDPAECGoAGF8J1sRVV939m3vfXAVfdXsa+1iWfdXJao9Ao55PxHEhPIKZXirWImBIkBECINyUUAmjRAzOZP/JD7dK9bHuKB6wQAX5MrwdOQdNSxI8NXzE5wk0BpUKUjIAKOgAgMfV+/9H3u7i+TrtQhgYIBZ+hr8hR4CgAobPLyEPeVLnja1wAIFmchA3XJNGBJGEVJval4K8CIkDgu3+eMrDCjJlvT6diek13+2hd5XTbtaFtw7YMeUlssOgsFkFn++m9Czq39duL8W+vrWtxCjjE+ZIKKUHhI/4aQMRDnIDVIBYIBQ9AUpJ6C9B4jgO19ngbUeigzSQjAEBnDf6xMfbvfOWF0aEyVUWVj1OIMwFU65ar9Kbml3/9kl7O+x4sYLGRwpUFr0hoR0TYgbBABQ8S8r7WmCTXWyErDYLC+x9/a70dNpkgPrQGAxNBOAQAAAyDOUHo0q8k+Y1wEDfz9Z6nHVvZEMn3HlBlv7d1sjJ7j5WU8bPKSeSWlrUh859rlx6x/10EqO/nKxomHOck+xkUp8kcqJcwQhxKkQ7uNaVfHLV4TZQN5nfNUSKAuyWKQZQuZrBRU/NgHBCtnKzvcFQeckIFRk4UEcoau1DlP5zwtCUMGS1hcaa2CZA7H/++7CQq+ais3bzuibEa9yQ0EAM/XdyxNvbolHzNRl+AHAIqDppHxIZjPEFoT3JNkEJ47PrQ8ZczIXT3DNi278Nrz87zy5Q0ZR4JgqEkL0xxI9jV+/PhIcu6fePrI2ce66X4UYihmCmA1FgNAAADGkAVIGyDr09kTohdOjVXY0FOAP3+R/L7TDQnw1UEcQICAoIMkVCljN5QAjZqIyDRBwaecR0GyhDOMWoIhaArCxVK6ESBYi6+1p8BgGDH5X4+qGFNv+HmpJGhA22TXz4l/ud/JeMSL7gMhiCWLW/fj4yaSCjhj0qPhZfzl82rvufq0V7OwuNCz5ePXrj2y4Y/zYp6iYorPsLPvPHJGetfTtVNbTryE8hlAhsW8aIAMaUjtGEPGAhHBgoKevD682frDkWVtCRZmMLJG3DAnlnZ1xiXGEAOLxoq+gXHGSz8CFr8EkREW016coSnQEszgDBEIQWrSNFRIACz9ddbX5SExttp0FU2us8bUGm5OMWSMgWCoNVgcTIaKQBS/BRhjQmkNyDggDJnHEtYnAEOgUiBT6fNPWvC3Bycl9mx69z8vrTvv5KpEA1BSSWVGy3Z88cZ52z77NFyvT/1ViDFPekyYQRZtyJEQUYB1SGtE0ACa2NwmqyurFw+zNKDraYaInm7PqGNGhLSGbzs9iw8lpYmVUCtDRMa0PphqOmiGA1xS1POhzBMAgOBMU/Dn4Cj69az4meNDMQs39art/Z6WOki4IzANyAz26Y7CoKPLbN5f0GGjdDyU3wAA4Gu/hF+AiCEKAcDYQFZHTWSkREXi+f+998+f33hGnN0/8vDRP/1d/2AyHI31te9ufvI39U7yg+OuG7vgFK0lEcls2vM9X0mtiTHkQnBhIuOGaRmmKTgr+HTn4dGjRiPkPE1Ysm4EyAquCoURTPabtwY/2OXETNRD+kYlCS2BVqV1YE0O5qGGTqcIiYrmJuMqk2PEwEFHL2yzHzqpnBytCbjBQIOUhJwN2UhkbFu/FzbQEOztbc7jazLBm+LT7YWMT0c0mxUhgCISY6BoX0r+b2PmvR2FqohhcxI4iHzy9w2jL/D2Tli//Ic1X9eMmdIz2Nf5yfMtg71LZ5447rjzUnu2dn7/ldz9fbavvVw6FUgcQAPkkTtMaNNy7JiKVrCyKqOyYaBxSkfZqFAkYXCmfMfzXEJOQESwJ+3vScl9aWkFedwf5eNMg3uKMo4mRIuTxYMYG4P9AkTQhOxg2iEIoDTRxVOiC4dZCYF5SRGD+Q5pBYyh9IvYEjQBsKKgKj2uSgAChNgJynpibbZoEyb9/WNN0BDlo8p5fYQBQF5CR1ZtH/AH8ipiMk2kCJRURijSs+bTppfvWVQeebAQnlyRqM71V5LcnMl9HWqoGDEpltxx/BETv9uwo3XDuhsaEjEGBkOltE/kanKU7pfqgCfbfbXDp83KSFbWe02jYuNmNU2YYcQqnFwWGZOaPAU5jyyBtnHQcyEiQ8j6VG7C3GZbIHzf6e1Jq2jJYQ1VYkrZmiKkzLpqZr31+JmVoDWooGTEQEExgRzoahGQUzGro5QvoTevNw2oJ9fmt/X7tkANgEc88hkCOFK7koKcEREJhgF+UxqKJ6s1mhYQfHXnxdDXMT5qT2KyN+f25H1WU9k6d/rZpy0+eu70zIHun1z028fCzm6F3xaUr4khcoQwwyhnZZzVCFaOVMbQIN3juhuzzrK8el+Um8dc2HTYcdIpIGJgZX9UO6Sg9FtQMLfRuvmwWEOcAVDe1f9YVXhpSz4sQFFRMxlCYNEZL+YLNYHN8fTR9vhqXmZxm4Ml0OCMNBGA0tpRkPMp60HS1X0F6i3oZEG153RXVg86mjMIGUEYRLjg30uV1kGNRCsd2NFS8gSJdLACEEa+a1/724+P7dxarr33u9M+4NhDp5111nGnL5o1xncyX3/nfPLZg99s6kN+fqV96r7cDJtXCgaGANdzPT/jeJ7WvtIyFBKAFSFzmC3G2OJQm2nfvWxf0r347tpD5niFXOAvA+A65CUcRa0x8dyJCcsk1wMAsARIzc55c6A9Iw3BNIHW9P+BFYQgeJaacj4hkEAQCIIjAmgiBNAAisBXoDRpLDlYBCPI+rJS8QeLdUMACArioAmLlfGhmg+gJk2AnPTup+86rH1bhOEGK3bGT0+9/NIzZjdV629WHbjr3u++W+cXnIZYuNu0Ztj8rbR/fpn5p3IR++MtvXf91Zo8w5g4ATjTAE4u3/HF133Zwr6O3k3p/IcpdT8z/1wbvjhh/G7Tqvop8xCLtQPOMbBCrqKIwXxFbQluhbhbkEGmxZNgGhAzsc+BuAUWIwQirYuKhUgatCYhGGdQYSMASFUMVDRAUMthQByZJSgI3opZaK0Dr6o0lZYDACAIiDEMziLILyPDUkmIiLQZso1QrOeHr1K7t21prF9w9pKnf7JkiqD+tz/Y8Nq7blcPWqYRDvFoRHPWm85VMLbHp7PiopcYb2vhV19mjB6Z/mplYc26lnv/5L/2Vt2s6TOvu3zPkvPOveK8WMi+786HnkjLS02Dp/uU9BGLgpX3KSSYq2BMhfjTvIgA6ito6enAMQGiQJ11VEsUr5oayitc1q5dEIIXAyxNRForqTgLMAcwzq0AlxEhKa2kkn5wHTIWVLF1UD4tOdZiL0Wxuk6CFWUqKMIBEbGiAGsmuB0tz+zfvubFP5qdm6789aVnLzlyXhj3PPzod58v165nxaJWdWVg55jvpzJOTrIQQK+GatA6nmCc6+4+PnWy2n/A/XqVu3Nn5133lZ97ekFqPGqROu7ozP72UQLflmByZjo5IsUY4wx9Ykc0GxdOtJEgamBbGQNFTQkhpS6iG60laYuxPx5TDZYJyoU3d/3r8+2Q6iz09+hckjwXPAeUXywUI2fhGJk2hmOhqoZodUOspjGSqLTCMdJaKU95HgCVQOvBincRMCIiouCM6VJ2EkvZMaY1j8bJyax/6q+D37x/wU9OvOmqm/nu3U/dckes90BOKrssAdGY1ooKBXI90mRXVxamThbLNwry2xVx0uXRcPRAR/KvD4rGurDj0Ig2MxxBxq1JhyQ/XlZx7qnplWt4LmcBKQBS2pBucIyMIWm8ZFJoQisHl0AT+EQIpBlnGrQiImabEA7l+5NLP/zq5U+//Xb1+tzOXQ2FbCvXww1WIXgZgxhnJmeaCAElUaFfJzV1eGqvrztRdBjRXWV1qmFExahJtaMmRqsakHPp5IE0IQtU8mB2hoAzFIG2lcQOQStEHqqoav/6k/X/+b8FM0bc9c6/JxcyPX+4c/lXqzNg2DUxD1C7LhUygGA1N0WmToxOm1w2a2pozEg+58zm5L7jI/yWAb8hu7/ysttrwpVVDz5VmUlXlsUG/v2M5pw2bcVUivX2RPfuM1ub6xlpAIVgMkQEhgwQLYF//a6wuFc0RlhVCMpMZgk00GdAwg5zznbs3PXU659+9MaHazftGMfUNTXhudWhiKgoEGYIkgqySucQs5o0FVNdJmPNCBMYRoCiDEDJbmff2i3blv/w3mojNtg4tmn24tYZC9AMe/kcE6II7Uo5Ng3FijQGQkVKCTvMgVb/8w+wfcVjD9x0zpiW7oce+27p8njIhrJy4UjK56XjG5XlibmzK45dFJsx1aqpCszMAw8+9/3+7r8gnllmzgoZSanSmvKEm/d2ZJHlerPehj0QjdC/XrQNI8I+s2yz1jQ6fFNKFQmhI0zOBYBHAAaDnSm18XvJGZgcLEYGQjgSNoXo3r5q96ev6bUrjnQzTYZZWx17vN7e4em/Jb1dnpfVwAEQ0eQ87OSFECA4c10Qhi99hxuuJh8ROE8gDDOMiYnI1ZUQJf/7vh+efPbbZR8+P/HcX1VPmOXl0oyLIDwK+lMYQ8EQiCEi+p5vxxNu74Glf75u8YzWh97/T+Ljj9ffcQdpsmuqhe+l0nkmyR4/ctgpJzacsBjqasFX4BS8ZNKIRC694b5VTz5/e33sy5x78fZBhlBpGhWCV3KoMkQlwzabh+Nxi4BFy6XWLoGjlO861QwvqjK/SKYKtQnDMHzlIoImsjmGBEMgpRSaYTDMXds3bn/v+diG5Wda8szquCkqL+lyHirjX2f9K7udo8L8goTZJCCOEOLclH585uG6t092dJrDx/r9g6ymSg4mPaky6exAKtOpYTvwZX3Jp0DYjM2Phu8bnliX6vrdg7/RV/65bvJcv5ArekzGSgEmZ1oTSRmprOr+fvnah27/w02XXHvYpN033HJg87ZwTTV5ntfdG6urSibCrWcsGX77r7LffPXsc2/1dfT879E/jZo89umn33zh388dUxv7B6vSY8dUl9el8rn9Az27ClnyPfBd8B3wC5ByufQiJKOkIpyXmUbCssMM7h70l/YWRhwzFYVAQI4IiJoAlDRty44m+vfv2Pbhi7HVH//S9E5sTpQLZoB+Ku23cRxn4t+6vbPjxh8qjW4VVMxIInrpbNW5Z2RXfZ967a2W22/M/vOxijNPCw1vVnnXfuHlMXNneWs3ZJ5/OTR3Tve2XasHsu/n5IuD7jkVoX/U8queva98+ARuhbRSyFkxEY8oiICUDFVU7fr0rfZXH3z1qXsW9LSvu/BKtC07EZf9A6K+tv70k4b/6rLGNz7dsnP/3fc/9ezDz1R3dBwfE8t7s6999s1Nk8f97aGn/XDs60WXVU4/ym3f6ezZKBTFxs0TtSNI+UgalATlkeeoQlo6uVQh2zfQvqNvH3XvmRM1TdJQ09wwcyF5eSE4AYLWgMyOlXnp/nWvPaG/eOM8XjirvqycRzJS9vu6msMeTw03uQJMMJhisQ5PFwA5AhAhETMM3dlde+5pFYvniZDlr93Q+e3q1qce7v7d3SqVsm/+FVVX+dt3Nz31SPaKaw/95PNF9bHdjry8y1mSsE/zej///stxC0728mkMAkYEIhJK+uGKqj0fv5b8+L+fvPD3lvfeW/e/18xI2MsXQqOGV518fMsZJ3qVVY+9/ul//vPq+tXrjzLpgZpwvi40OhbJeBI4G9i7f/2GrW3n/bZqxtG7/vv71IavrKombtvaXV55xg2svMp3HaW0ItBKC9YisoPugS1m6yT70NNkqnfbx49gdmDCRdeyaLlycsiQtDIjcZDe1o9e6v/ohaOyHZfVl7fYlSlPDvpyqJiWUdQoSBOUccYBCFHrYjSNiORLSsQGln6V/fjzxjtu1YYAFtJEOp9HhPz6TaR0zWUXFn5Yi6FQVuq0onoDH64P3djnH2dyd/dGWHhyMRVbKiGKcEX1no9f3fDfe5b/78H6p57a+uHnwrZ5fd3EKy+KL14AZWUrlq++8uhftO3eeXVVeEV1ZGHceDHpPBsdPmewZ7In66PRffvbdaSqYurCPS/cU9i/dcy1D4vyWmaYKp8FrZCLkG0GHa6kFJqhdMfawtp3iagvnWo460Y8+Zq+9/5VPna6dPKgNRNWKBppX/fN9tcendq+8c+1iUlVtXkp+zwZ9DQIoARDzjAFGGLoA1VxrBEswZnNi5lVxhmGLeOH9ax/wNq81dy9N0KgAG3GOKIUhsq7srvHGjeqsGkrxKOktQBISapm0GygAcIc7JKeezC1i0gAYseHr/Z99N+pY0aYDz60f+PGUGtLy2UXVjcr11rrtg4f1Xb1pbfckOmMNcYiglcV4H9dgx9OPXX0KVemnrhhsGN/yDJcxxFlNQAQqmurmnuK3ThSFbLZ3i4ujEh5lXQLyveQMSJCxrXvxg45PDF1IWmdX8v3DLvkz9wM5zr3RhrazHAs09P+/bN/K1/1wR8S4uhhtaT1oOcHIbHNMIywT8LzWf+jvNzm0Rkx4WqYHzXWZZ2vUl5Sk69JkVYADJE/+B9LGFHbKvv59WWcxwXbfs0tZjKZMIV4/KmwbdGy5aFJE+RA0hLCD0AGICOKCm6nen1NJueBbBEAYyjSy55/7MZL/vV/j2TbO6uOXTzqT7/d5etrzr/+lc/WLZo19sqrzp3S27G3LHKrX3d4vn8x97oUVo+aBlJyUoBgGGY2k0UrAlqVzTxWWKH+jSv7vnilMaxdX+2DRMuxP7Ur65STR8aJNDdMbtpuIS8Mo/aYC4Bx7XvIDVXIITc3vf9c5pP/neIPXNpSnkBI+z4BcoQQgsVwq0fPpL3VLo0Q+Ity642sIk29Gm7szq40KnWsGoQJiBCOM9MGINKSnDxIH6TLvDz3pbE9YwPEVS6xfVUF041atr77aaNpNIesKq1jgocRzo2JMmSRZLJv3YrWmQuk7yHpIHUsXv3tpZknn+rv640VV16+dd36wxZfDDNObr3sPFr/XH9nd8FxH49PaTvnNvbEddl8d0gIXexJYA6AEMxxfWIcABiyvg3f2iv++78/XHHE3Gme67/82ge3PXRH5ek3hmtbpJMXdrgw2Nu59NW4znjAqXlSy+EnKSW5abX/8NXWd5+as2vllfXlY+2qjJRJAo6Y4FwDfF/wnsvofVIvCosnytgGn57sz+0H4+Iov7Mnv27eheMnH+H4ShOKUDS3Z2Nh9w+gpNk82Woaq7UirbWUSimtfOUVBtx8t5uXuUHt5MjJ8nRPNNleOZhs0c4oA+fH7JFhqwG99x6+rbDmyNEX3VIqS4Gofe65Vd9uaDlxyb4ZMz578c1VX63ypp00/azL921Yg0Ba6ZSrjcpGjQx8RzMkxKAp2mJaApiGyKccECZj3HEK+eUvfPifP46ZPVX2DVjCuOz6y5sbas/546MjL71TWHa+ryPz5n3//NXpC+bPSWeyf3vg6Vdf3TP23OsgUV32+bO31iQWDa/zlOqXUgCUc64Rliczz6X8L8m+KM5vqbS2Frw/Z81lOU/FmjDdS6A6uN04doYZiXI3L8Kxrg+e7F/xplXdiMgy6z+uuPgus7pFeQ4BBs3TmoAItNLEhDfQWdi7kWpboeLUHkV7O7d/1r3z0c7tN3mZkUyJ437Zu+6jqrXL6xac7vV3EBcivf9A2bmnrP5i7aKzbp44urm1NpFomeTmsmiFEdFxfQAAzgFBAQoAYugTjq6zCxYSoW2a3dk8IIpQpGPZO2fMGTFm1pR8Z68Q3LRMt6vr+LOWLH7po2/Wr2yZfeTuZ+96+Y6fLz7jJNnX19Ta/Pgzf+s/+bK1G7+jqsZTEvbJFdFdBc/irIIzl2hZMvNcVq2tHh098rRhO1e3bP/4F8ny7UYtRMpEdnvltGPze9bhwErLKEsrqaUPdnTgu48z274bde2/ww0jEMBP9yutSUkmjFIZvpTkIkLD2P/O87mdP6AwNfDqU69vPHyJ9D3LUO+/eMf8nu3swHpguOWVRyWwuhnzfddjY/98e/25p+1LQdmZN5VXV+cKnlle4/bu73v/SUG+0qQ1oGFhKQ3kS10bE8MqTZRKI3CDF6WUMb9r14I5k0gqxplpW3v2d+ddSYDHzpvi9e7v3bX5yBGRxScfBdm0sI18Kk1SXnfpac6O78zKxs2uyihdZQoD6MOs94uO3I3RMXtP/+2YS+9qmLE4pLwv8qrv8HOqTd6W2dMcs73Vb5GTFUKQUkEEh1oxwxp+8Z1K2Fte/dfGp+/e+/VHpKSwQqQ1adCkSReVUhFJz2084/rxv3tl3C3PV0xdkPn0CdvEmEmnHDaqbtgwA5nc+lW1Sg2PWbuf/ku2q50bJtsx7pAvP/6ifPx0M16hnDxw0ffBE+0v/RVD0Ui8DIKlMO57Pg/aZhgfVhvVWkupiaHgzHFcZFxpzb1sfV01SmWaxv72nimLfvqbPz2EzGxrquNuOte557Apo4EZTzz79tIvvgtFQ5QvjBzREvUGWSjew6yC0i92D1zcr69P8/ajfj7+F3+pHz9Hep6fS0YKg6FQVJAWuf5hrcPampojnHSqVwiTSJNSiEw5ufLpRyUP7My9cOt1syMP/nT6uXXdHc/cnt63Vdhh0hqKQxkEQEwYwgoPHNi3d/WXPbt31B57SfnsE13XnT4sXhHmMhIPkw6ZIdMO19fVx8OhfG87Mwxx+PzzRzXXROtnK+AI5OVzIl7ddupvu7u6sf1N0loBeIQVYR4yUPmkAUKW6M34mYKMGSIUizi+Qi6CRG3Qocxs8+tVG1K9/ctXrYVCmguhtUbfK09Etq7dfOkVt4+dNO77j56wLdM0LeFnYvHyXTx0dq/qHn10/fwzaz97trymSZFWhYxGPrUl2omuBJS+Z3IhddBPNjSmE/wjZtqZ9l3qi6c/eeau0TOmge9eaFjnf/z5adf81TjjVitWrpVf7A/nQnuFXa8+OLdRTB4/al/Hpk9eerXyxF9OGVbeVMZcX0OsTCMkGGUcVymNWvnZJGOMJaYf7TqON9jT8cI96OYoFK9YeDYzbDfZZ1um7/sEYIassbVmULlAhgpwa3eeg2ac+Qc68909Ihrnhil5aOfudmIMiKRSgX/Uwti9t12bUTBD6Uyhs7sfADK5fC5bQM5yjmcb2NxQkzRi6uRrxp91fbym2Xdd5TmI6CoYXx9urTC01DoIGIOmDkRNxIAEFduzSWvDDnV888GtesakfEeHM5DMdXTMPmrRHy87ed+nL4lQeKhtTpj2gXceu/vs6e+99tDdd/36uWfvfezqY9wPHhpZE/KVllK3uwYhJBAKUiIAQ3BTA4iMhWuawpFwascaHiu3ozHpS13Iaq0Ekh2xFaDW0FqXiAitfSUQGcPd/XIw6wtS3LJ233Jn31sfO1tXuJ17KqbOf+X9r5AxWXAOm3lIVX3tKcfMY2b07U++ibSOKx82/vUVGyeMbatvbpwwelhZVbkGau/oJiva2FjH7YiN4BRyBnlRixGAp6ilwjqkMeL6CpUvmRCmVSqjEnLBhcFLmTjGmO8UotmOI+fNgIJDjNvhkGkYKjlwxinH1Pk9ucH+oKFO2KGe7RsOq1FX3nwNkHQHkvmOnpN+evaps1o2fvtNPBFfvz/dLW3FeJVged/XpBmiX8gBIivs22RxqD7i9KojzyPfJUQmDNJ6RFM8//2agQ8+tSKGZRq9qYLvK0BQhN1ZQi1BSQ2AhTwQ6VTv1od+XTt8zDcD9j/v+7eorG4b3rR1xf/uvve3H7744rK9bqiqtv/Dx3pX//Czn954wYVnvPjoH5XnsFjZ/974tHr0BMUMHo45fR2am1OaI3GbOwrLw3xWW4wAPc/3HBc5R8aRMR70SjCGjAORACLSjAs3nwuj39xU//WKHybPO++J598x4hHf9coqy0Y2lOcGepkQCITCSO/bfvz86e37Djz4z/8RgDCEdgvz50zu272lPa22dmTtaCxJrJyhJzXnwjQtUBIRmde507RsFKbKDGogRaiAVYZZKGQUduz19u41TZbz1I6ODNO+AgRkjJVaSojCY0YZYSux8JxQbevW+69qOfGSG//zxc1X37Zx7eZcNvvkPx77+Z+eTsw7FV7441/alz9Va17Tvu2D+//9+aqNVjz+xN8ffWdt++RFx+480B8pr8r290xojMZt1p50IiFjZmuUM2CI6/anPccDzqxYeTaTTqbTmWzGKTjCMAQCo2JDKRFp6TNk/3zq9Z07dv/jiVfcdI5zBgA8SLNAqYvUyzc31Pzujod+9Zu7nnzxfTMWZZ5XU5FIDiTX7M0gEJqhDLBqjpTP7ty1o6urPRQvAyBWMelwJIXcRMv0N27KHuhkllUXN/rTBcP3NZGF0JGmbN6zGchgIq7Yl0FaqlH3/n7Mz3+S3r5x7NX3h2qa9z1/T9WSX973vZ77879PPffOSx/9Go69NrNhxQ1ex9F1NQWp2hKxa6vDl13759nHXPGHV384/pqbt3flsgXPqm0JO32jqo01+7KFgjepKVYWEoKxvf3u9q5smJPn+1bdsNjMEzbub9/U3hObNM+MlqGSBqLWWitphsI5LZLprO/7aIhcIe8WHMG5V3A6B7J2PKGVIgDSJDj29CXXb91lCL5h6y5AIGS+lAf6cllPM9QiFMkJM6Fl7YKTC3Ujyuef1nTEibKQZXqwX+7YSaEoIvj7DxTSuVjEjIdER8dA3aHTQ9OmUcF3ULDimI9miBhUe0kzzrLpzGnnLmn1Dnzzz9us6cdn9mzZ//w94VHTvYknFCYtqZh7av9gf8XetSPjsZu785yzMsFCKKllauaoG2f/8q5erNyXM6KJxMDurYabbO/Pdwy6IabiNmMIAzm55kBOgOJKaiLlew0nXxUfObXt3N/WL7kCpW8gmqCBFBDYkVgaQp98+uW5px4jkB02Y2I4HsWwvXL1ut15M1pZo6VPRKAlhcoLrj9n2kRfqqOPmKk9D01j64590opzxkgpIxTNWlHTycZHTDjiD49NvOgmZoVAa8FyGdY/wEIh7blmbbUfjo0oM1MupQfSNfMPdXoG1VuaC6FJMa1s5AZnwBhpxbUWhiBNFdXl7zx/3wMPPdPb++mEY46Qhaza82rB15m8I6UqKIJCuqLC/qo7t9PXx2LmjWShz93ivnb/TgmKGVYk6meTNQObVEXd+t19gltaK86Z0vTt7rTSApXPSQMwJFJOHhhn4aj0vQAxGaS1lGiYHe88YuX6fv3Pd5tD6uQTF/3r3ptEWcLp67v9b8/EZpwKWgEAco6GXdY26rUPn/vZqQv/eNtVp5x8JPg++PI/r31eMelc5bmaSJh23giDUl5Pu1/Iy3yaC4MLJoCBF40yxskpxGbOsNJGTQj2Jj1GSuVcJ5U2OBAykpJB0FeBQARaG0hagxG2wXUnjGn991P/B44DIRNcmekZVMq3DO77UoRD+yvLl/5fXcVZezKVJy++6PBpk4c3dHd0WpaliAaS6f7BzAnHXnLmNfemBlOxqjqtpCH4mv3ZZF6Gw6aSvqE1cUFBAZaIlAIiBmAgMq209EjJxLSjK+adCcLs27d9+2dP//b3D0yZNunx23hE/ahJfj6DXCBQz+cv5Heu+c6IbHh5U8zp39f+h7vv/M09d/x9kzFsxIjxXjaFgFwYjhXhDFUuyRjjjAMiZ0xYFWVszFiUCrUi37eMUNrVWQ8NIUTM0NCvNQg77HEBWgpmKc8Hw/LcgihkOedu74Bfm3AlQTJth6wnnlr26JOv9vUPnH/GcXff82vT9XnIfPih2392hX57x67Tz5z3ynN3AxqgPWCRHdu2vf3mp/NnT512xGxID1qo84UMUQ0quX5/JlmWNxhprbTvhZWPwgIAIh3kxQAgaKTlJJVbAACRqOahiM6nK0dOKB/xl3/85RJr6a7Wk6+sq67z8llEhlzkt65kXNSedLVRVg2Inue/9Mrf3p97tp58QtsxJ/q5TADZENEVZpwjL2SlUoDIERFBcM6YIbgVItcx45F8H9sxSE6uZ2D/xlB+INk1WF9uv7NuBdfyEFsUgC005F/efsTODpxk6498tuvGzaxhVhr8yQI8u2FXxpMZwxKbNvXe+fe8EJ5hxCKh546ftWdw/Oi2hvanX1EAYIdE2N63euOT/33ruhvb77rtyht+eV7UEhmiUKKcc9YnQ5FYueTcMEOaNNN+qbEIkHFkPLA+BmNlSE5fu2GHfSfX8/7jqS0rVS5dOeu4sWf9Krf123hDizvYi0IAkfac0PDJkVBMuQVVyJFWZijacuRZe1+5f8wRJ/mOMxRqMwQXmUnEPEcTBZMvmkgw6fN8vmfvNq9//8TMxm39csPO3fWpjstZ4bAB9nFSXlpbFtnxUQJhdiLyZMr/abnV3LsqKviUq8dcV2lXSpVGaHL0g82JG/v9lCPv/PCbzcu+vaJM1Ag2IJVCjJjGbl8iAEcW4kgAq8gY9MWpDRVvPPT06cs+jezr77a/yXftH+joyH/wnBEtp0JaaD+T6i2LRvZJAApiZgqmCwWR1PqY8ujTK9/paBlT3jA80jzG2bupfM4JkdEzRXmdVdNKvmdGE1AabFdS+plBxgVyxhjT0stLxnzH7evkiWqSHiKgMBEZZAbLTFM5Ba2VwCL1gahY93XUzbZufeTkKJsfEhMNlpXJ+nIzJsIugM46TOkLK6MScL+nEMDRenIi6mvKaEJEgzPiyBj3AA41gYhsrYAoHI++quFrF88yjAUJ3shRANmICmFA0deOejWrluelRfKCxtBgzNADg6bjjM1vmTvSq7j67NrycHksFI1GI+FwNBEb3lC35Oe/U5kM1nLQAWonAeAQTLDFPRH3yRfv6K5o1o1jkq7j9HbaYgPJ73koiohMWMwwERlnmKioNRI1yslLz3Md1+OhzMZvWKycl9eSkmCYRES+s23Zu4sH9zbHbS19LM3gMyBxQ8h/wmM3V4dm2rxL6gRAhW17mpJSW1gc0hrwFSJKIg0oEHNSEYDFUQMwIKWL1W0XsYLjeJOtdzUSRJH6JNw/4D46QG0GJhhygKyGdkV9UgNDDjDOZo0cGjiCENr1L77ojKt+8XOANBR7oQgAQeaAqDwR2T3Yi5wHM69ExIA4QspXC8LGEWGz0znQtW1Hr7Bp2/t9G2UKmK/JQ/SBZREdYGlFW4xYYuYSs3WKZAYo6XT9kP3+nWrT6Hr8JgnAhElaY7rvUHfguvqEcvLcc5SSDEErZVi2qDeYB5DTlJQaASSRr4L5BUAqDlMLBADwiABRlBrag0lAIEJkRBDhuN/1Pc3mR40XM9JRSikdjAwpzjZ7xTkXAOAINmcCIStpYYhXM+xWFOFoMeztHUi+8WzX9xsYab/goutSrhCZf2jrT8+ePn7Yxx9/1Tr3WK0UESEBaQWACcE1kQtQHwq1hUOc6LmcOSbGj7Ixr4kjFDvWNHHEpwbzf/34SUrUQqIa3Hx8YN8NZdaiqNaq3SXwXI0E4ZhRVZlgQAPIDK2UUkIIEY4m9+0TPgWwFgSCGxTdhsZnguGjotkDAOSlpvag60YDIKAiijD8NO08YpZTwb9VOCMM9IR5TlOViezT3uQ3/SmTM0QmGKoSo4KrKSHwhDD/a7/znQe/q4YEQwJwl32T+W5dYuK4yuEtyBghxlqboJC/6LyT/vH8VdmOXdy0KeDXUEogvJCVHsBiC+oNobR+ICWfGHDPLLOmCiMmeEYqTxMCIQBn+LNye4RpLM2knP7+WsEPrQ4PE1jB2V4UEYAWDhJAEQnQmkACAmkEQsNc/+zDhW1vCgxazIuFxKH21WJLvC62ksDBqcli9yYBY5qAAzBER+v/euKNN+7f19P/8AXXLwmzjnji3nHNXTnnumG1t2/d/589XSZiyvMsQ2ggg8hVcHmlvXog273kpFvOOvahn99UgcCJzCmH1LU2ZUePei+rvlj6DQjemt2YfGXpAw/cdN0FJ9z5zlPViXAwLKG14gaWa7i+M/9SWXRWIfnLuug5MbHNUy9n/O/z3iLtnlodHR61EaGgyNM6o/R0C6catgIQCAwgxHGFS7f15x+qtqKIhCwMsDTrv+fhGFB2xBeh8KbnHrY6n11wVj0LelRVwIRSbHYNTBoyBF5keiCGgYUq7hwAKK2DsrbBWEfeqx7eOqGt/tBxw/I1NWdG2Pbevrt3dsUEy/ve9cNqfzmy6eWZoxfXlHu+shDzhONtfkGMf6b4L05ffOKiGbWjR7RnnXg8XH7uSc2/vGhL2vndDfdEifzegT/97u8dvQMql7/26p+N4T2dP3xNwtLSB61Dgn+ZzP//W/ZM41WX/LrHbUI6MWqA4xrDh5k/v/AmHfnV3tQTe/t/GMikXZ8RBKMqEmhA00qJ1/d6v+91bigzhxuMIWZ8/6Y+9xY/lNDqzLhREObgjq1qz9uHn9Lg+1oQomAYpNRkoOQEyFATseJkFgQGlX40eRe0iwcUCkrriCEG+5OAmMk7qYFkrFzcW21cs33vrmzh+rbaZlvc1FYT5Th60rDJX6xP+Xqkze+tsQyAQV9Hw3amZzB5oCNsirK6GjBMyOZq66p+f9uVFbFIKpVpbq4/btFsLlgkbD3xt5uOOuPawf5+ICMO1JNzexuarr341GhF7G93/Ob3kdBv//KPW1oqykNm554DV5919Py195Z//MXqJ9ZtSXd0y74MeT4RheLRAULMZY+OGr+uMOsZFAhySt1UMG9++Panp40999wb9u7bHKmxBndtq6nzAUhLLUIIBgAiRhgSMpNBsVGQYQhAoO9rwhLSGGp7C1pSiZAjeprqQkblga7zb/3nYDI12c0qjMeQnqgLPdjXd1bv4CEViQmxUIizlYNZIjgzYVyRMMJIGaUXh9kv//AvEQkfnx38LhyWa9alwpQDNqEsPnXOWAyHeShkVFd8/P6XH370zdHzps6cOeHoBdNffuGvVT/5LRNG3lWRRCwUtp54/LXe/uQfb7hk0Wff7N2yZmHcfq03d+Tpv3rywVvOOn3RWWeeCDKX6Rns6h/M5l3DEJFI5MQLb7nswLbTK619rkwRVhrsd9253zz8+zPmT0PLnH7EjB0Pfx+q57KiJrMxGIgFcXFHYYfUK/P+y0DBtKEJJEgzTZz0FmYa8bAiEsg0aPUjIiZG4AMUNBgcQNNfm2LPvPzKOIOd0xj3NRkMBMDf60I7PPVldnB/etBDHMbotQZrtMCcJgXIAH5RG23dsSGt9Jk1sTfaC7lnXtzzwgsZxpngYBoQCpVHw5+L8FXLN4LrvfPifSeceVK0vOKCU2Y+9/b9Ue3Go2a+fzCdce+8/797DnTf/OufnXn2cR/8ZuWJtZHXbKs7mTzu3OvnzDhk3uzJM6aMHdZUG4uEbKC+vuRdf/3vvnWbxrXF97qSEMsE/6I3HV+88MRZh8SHH/3fh35vC2Fynhno71/6MvZQsl9F4ij+9sGT9z3w7MyJoxctmN7f1ecq7XjSddx8OltgrO/pt7yunSwaIk0c0YOiadOaACFPcO2ArAUd4mgR1Vt2l6ZbuvM2ZzZACMBACCPEGY4wkBCJYGnGe1eTQvQIfSCXyEamkP+yM7/LU5WVYTKQa2AAWmnMZLPZ7H0HcpF4NMzYTTf/beKO7akt2//8p6sXz599w2/+Ul0VCe058OGKNU8+cNumLbsk0LSxra9H41ca0CywHYRGtuLrH1YsXwXCZJZpCCGVUgUHiBbUldUwyGlEBAPhk4I+6/Sj+weSw1sbhrc1PvX4y+fHwplccsrcdMuxCd/XpEhMmTahraFm/KgWA3D+oZPBNAARTAM8H6Lla1dtzOzZzGJhDRqCDsZg0g9Ra20a4oXn/7p9+97Lb76vta52u9Zaa610kTcrGAIj0JICLiZE5ADFkQCGCMhYkeDCDgmgNCkFggMhACmAuCFW+LiLmWPiscqy+Jqde7984HGure+uuGHqyNbmeDgt9cXV4et/e9/X7/974XELQBVi0Uhe6QrGTg6zx1Lq+hENYxLRH9L5R/Z0+Uq5UnKDR8vjeUXH2Szo+uDIHCkHI7GpY1rb2urW/vDm3x55KbR2bVNtwgj5rWOiylU8yEj7uazSejCVWb5q49UXLIlFbEDW1ZesKIvZAA5RSgEBKEAN5Abl74D5B0hrmDSyKSI905fDKxJK6aClnpUG9KBk4KBEFYf4I3ehtSZSWnlKc8Z+yOUcpYbY3BBBEH2VcVHweMiWnh9KxNcBDylgUg9u3k4O5aPWlKh1ef/AYQsvOO8XZ00+ZPS/n3lrpnYLYJwdE5/m1fSy6Gk1idOrE1Gkz/ozZzVW/Xnrvn6pRpv8CBvSSgcjAibndiH70uerzz9p4ZP/eu2D+x9/qCG2z9EQAtAaCILYUhiRsvJENO/4jue5viwP2X29yVnHXfHn2y67+PLzwologaBGoAuYIgACA8gJMDGAJujqS44eN2zEqJYVGzZHQrYG1EDIODAWtJCzEinVQTcKEAzA6GJmSkcR8lK1gBpbbuepRF0H4CFu8XQiHHWl3NbeFS4v2+ppmwEwgYZFGReIkr46tiI8Lu99dv8jLys4NCxOr472+TrG4aZyceGaHQfGt/6koeKm4XVHVsXnVyWQ6Jo1O66uMkOIaSJGRABZrS+ttO+988H3/v7k5MzAEw1xREz6UoVR+wgApomck3j9tfdT6Vx9bZVlmvmCy8rLtnyzvru9/YEnXrnoZyeNbK5/LCvX9fthrQlgm6+3K6hiGEOIcWYgFTy/rKXu2qt/8ujVv7+zKtLvKwnokna18kkrTUNTt0NT4EAERQ4VsBkzGdYwuL5XX5IwahgqRCJyNCmAlIYORWW2lcwXItGo63p9hLU4hJCBNEUM9mraW+rQ7PLEz2w2ggPXOi7QI5hr84er4S/b9r7U3jevqqzNNt7q3vdJ98CttaG5NmYVmQBIZAnOSE802TMNod2ut9WMP5zRF4WxwKG7V33wYkGDFgJDURRXX3NnynFHj2jNZHL5fOHKirJc3hWx6Leu3Txv9sR7fD3DgH7Nkgqm2eIfKZnVZACUI+3V3AQipQueHGXxMRbvYWAiBjRYALxESVhkbBhiXiQCQNKakLEwwiafdku6c8B/Ki1Hcj3FFhNso81ARegChhCI82ljJ3yzdk0aoAIhgiA0+UScMwfghIiYYNEnBXlfVhcIqhm0GmyYyasZtZj8kRqxquDs7O5YAyzG4K/lxgjOepUmwKTSGcKkr7oU7JZql6QBDdUMjgnzCMOdeT1ymjlnmjk4oPNZnc2QmDiyeWdn//cr10LIfuCJl59/9SNP60QkrE1550Mv3HnL5VOOmPPFpo1tTDf63jSO9WEbTZFGntK0Nyk9qRCgIh7u1phX2tTaZAH3DSAAG+I8JQ2AAX2F1joYddQIPgAgLi1IF1AZZ0PTe+mUkS00kj9MoKOBAQKiMIVgLC8hpOmZjPppgjFEX2sNKAlGGmyiyXyAA4o2OmqXhG9d1ePrnJaIUMkxzjkBdStYN+hnlNYEQQ6fA0YZJRiOMNhZMT7GYHWM8hokwVpJNXXcDFFZNatqYIgk1uzusk2zbWRbKptNhMK2IbYc6KiIx4Y11j3/2scffr6yqaGORo7TrQ17OWX6BjLtXdTTW5bL2HknU11bV11JucIhw5v67HC3p5a6WhIZEIw0owpo9xAVERIoBAXgacoRFkgDQbeGmSG+ytUgJYAe2dx0yJgxru/nHKc3k1mVSun+Xq01A8zl8mHO2n08z4J9Pv2+z93t6zwY1YiO1gWiPAFDrOXYHOEGIgC4BFlNSU1pDVnEgq8VgkC0mbAJohyiCBGgCEcDkBB8goKmPklVJtuW15tDcHQdd1wiTa4kRMRbf3bk9s7U/gEn7WrbNl3XPdDTlxxINtRWDauv3dnZ3dXVa1hWZVl89MiWKYeMbhvWVFtfoxH3Hug8csaEOXOn6GRKMT7t6Mt+0bMnaYfWFWTQyA5EQGQgCgRNYDDgBBYSRxQAYYZxBq2WyGt9TZ9sGz7SMsxYNBZQrTDGOGO2aW3etSM72Buy7Y7BdGNZrD2ZjvveteXmJIv9J6sHpP5njeVo7WnQiAQUTGkGLAcMEYk4kAhoEHVQIUQiCM6PAAJMwxkagAKJCPIE32X1vf1+ywmRCRO54xBjpeH9L++/xPVkf6aw+cDg0o3t/QWqq6mSSrV39WSzuZ5kmgshOMsXXHI9UFKEQo311ePHDJ89bfyItobhLfUtDTVNY4c99O9Xn73xrpfGVKPSCMAxSF/9mL0RNIEC0IgFTRmt05KSiu7uycGkaUfNmbW/ozuVznq+L2WRA8MyjP7k4N69O1uqq/Z09zRVVezu7ks7HhCUG6yS0Y68Nz9qnBs3GwSr4MxmyIF4MEpIhEPMw8WBwCKIKY5OA/pEHkFOU5pwv682uaqL2F6ArhhOmGWPHs3zhYDDrGhqxfb9yWGNifrKaE0i8vbqnRu3te9tb68oK6+urh7W0jQwkNy5bz8oJcK2SETLQlZdedxx3I3rN3/+xUrH9dE0yxLR4a1No4c1rTYjC3dnxtrCDoZIiAAxKKBrAkdSypdpDT5ilsAzTTIMtC03Kqq6ejZs2d7W0thQX53J5dPpXC5fcF3flyoSjnhSEemxzQ2ZvOP4vi0YA0hJmWhum2xb6wYGVuUKIelFtYoQWUg2YoRBiKENZCAzGFgAAkFqkAwVEx6QpyhH1KcorSFNlFYEplDI3YEcrxYzx9sVlTqbx2hUBGkXKUkpwjFT6oaHq4+ZMnzyiIqBrLNhT195zI5aYvX2zhVbeyLllW1N9YPJ1JpN2waSqYpEVHDuS8U444wBkSeV70tfSqVUyLYHXElSAeexRDxk276Ug8kU5PNgipENFY0VMVMwgRg2xPiRzYceNm32obOYHX7zgy9fefPTLdsPxBJlY0aNbGyo1UpnsrlcrgCI369bN9DXPbKxYV9vf08qbQghpUSCubPmhMNhLZVUMus4juc7vie19pXypdSapFZU6oTQWhNpKVW6rxcQgbFivyAAJ5LZ/LWnzj7t0FHbO1ObDgys29O/fzCVkjkelvFKVlktqmuN8gqBl/y+ec9Ob9daWYsVp84etWBKo+spqfTurvS1//kMlY/CHDF8+JSxww90dn+7ZkOI07C6ctsQSmuGjLHi7CIBeL7MuzKVdweyjqcxGolWlZeXx6NKyp7+vmw2XR8zpwyrHV5XHrKMnOO6rmxpqV+46NCRkyZjRcW2TbteeOXDdz/5pj+ZH9bWOnb0SNu2XNd1Xe+djz7u7ulFzov0zIijh41obmr2fR8RA2YMzop8Aog/GgosNSQNxRK79u7evntX0OdFAeOcEI0NDRbK2qiY2FwxeVjN8Ppy2xA9SWf9rt4N+/t3dg12pNMO8/Di25otG7WGXdudDd+6jaL6Z4vGTx1Z2Z923169a/O+PiGY67rdWdnWOmzCyNYN23auWb85ZvNIOOQr7UkVpGsYQwQ0BDMFZwhSaYEkNSUdHQrHaiqrLMvsT2Xau7uYdMfUxWeNbqyMhSojZm15iAmjbtiwsTNmlo0aKTP5t97/8ukXP/hhw87a2voJ40ZVV1WmM9lvVn/X2z+olLYtq6a6uixeJqUspbuD4dagl0YTEULAQI6aihx5CBgMW3LOcrlcT39fLp8DIsMwG+rqRg1vI8TewWRXd28q2c+VM7wqPGNEzZQRda01CVPwzv7Mlv2DeOGtTUTAGFgWQ2SbN+Q3f+vPaWy7+JhxDeXhrmTBFMI2ebrgvf7V5qWbu2dOm9xYW/XBFyu37Ng1/5DW1ppEKcMKUBq3htJ0sS91VzK3fl9vdyqfiMVaGuqmjBuViEW+37ht2/YdE5oSFxw1dXRjZa7gZLN5ZFhR3zh6+oz6iYcAF2u+XvPvZ9/+aOl3lhWaPmVic2NjLpdPZbNag+/7+YIjpQryH0SaMQyI6g7SzyFS8AKwlP8lBFRaM8aCJiTGkCFTWislmxvropEQQ6ZID6YyB7p69re3Z5IDlSE8pLlyzrimQ1qr8aLbmgBAKxAGakWhEPc8WrE0m95l/nzxIQsmNSVzvmXwdXt631m9cyCd39M92NbSdNz8Q1Op7Fuff5VMpSoTsZDBfkwXE6hGQBcjOFqCI6Lj+Z2pfN6nES1NC2dPqa4o+3btlvUbN09tLT9v4aThDeX5gpfLFxjDeE3d8MlTWiZNgpC9d+P2h/7zxouvf6qBz54xtaWp0ZfS9+UQY5lSWmsdcEsjHqSNCohCAmUsFFyltVIaESzT0ES6uGU84MowDSMo3AfKKgQ3hGAMs7n8/q7ufQc6e3p7QkzhRbc1kybDZLs2q6bhjAsAokhU7NzmLHsnd+z4UZcdN4EztunA4O9eWG4hRMPmrq6k9vXRiw5bMHPS+8u+XbV2Q1Nl1DKNTN4lgoAEJjhYzpjgAbEmGpxZgikg0rSvL2OHYyfMnz2suX7pynXrN246dHTteQsnNVXFM3nHKTgMoby+sW3y1OZx4yAa6tyx/99Pv/n4M29rYIfNntVQX+e4rpKK8+KANztIVh7McRVZe4iAc9ZYV8k5SkX5gtve2c8Y2pbBOVdKASCRVgHL7sFSZfElIpqGEEIUHKd3YBAvvr0pNQgD3TocxQO75eyFlu9prSkU5k4O3nttsJFV/+68OZUxu2Mg9+XGA8gwHrZtg723altXnl1yxnF9g6nHX3mvPCQuP3562GAM0DK5bQgumG0IW3DOgDNmCsYZGoILwfszzrurtr/1zfZwvPy4BYfGYpH3l327Y8fOM+aOOW3uOI7oSkVSIsPKppa2yVPrR4yEsNW5a//9j778+DNvxRNlC+YdlojH8/lCwIwSCEVwTqzEQxPcM2ds2sRhxy6Y1NRaJ/POqrU7l327dcuOdiKyTMEZo5LaFvedYUBXEPy91jo4dcMQeOGtTaaF+3aogV6Svi6v4iMncNcBBOAcLIu/+9qg6oz83yWHVyfCSMQZU5oMjsD4fz9Z9/zyrT875ZjRbU1PvPxujHu/OHqKr8nxldLkeNKVypPKl7rg+r7WjqcKnnR9SUSm4Hv6Mmu2t5OmKYeMPePoI1LZ/LNvfgR+/q4LFo6uLx/IOpxz6TjIecPoscOnzSivrwNT7Ni06/f3Pv7Gu19OmDBuzvSpisBz3SKnBwEiBioWaGLQ0pkrOGHbnjll+OK5E1pHN4Ir123av+zbzes3783n3XDYFJwHHbM4FPQPTc+VaKYACC+6rYkILRv6e0gIaN+tx07hUkHQ1w4EkYj44I20s9/6x+ULTM5cqcoi9lurdr23entlPLyvN901mF2yaO7x8+c889any1esrqyKRU2hiURpCBtLhTWGxbxg4EAtg0cs01N644H+vMJTj5o3b/qkd5d9+9Wq739+1OQTZo3Iu1JpQgS/4NjR6PDpM9smTjEsEwy2bOnqm+94eMuOA4uOmNvW0pzLF4K24iILZPERDEGmEThnSut8wQvZxvTJI46fP6lpRD1IvWdX57KVW1f9sDOZzlmmYCVal6JHwICZnwXFUgTEi25vDvyuYSABKAkHOZggCO8oEhZvv5yMZBJ//8V831dhy/h2e9cfX/xqYkOiMmol8/632zsPnz3tolOOfu+Lle8vWzG1tTIkeKbgIaLSWpc+R2qSSqsST5gikEozhkTYm3XyucKo4W2/OPuEgVT28ZffHVsXueG0QyOWyBRcQwgi8h2nZtjwQ+YfGUkkuABN+I/HX/3T/z1RW1O3aP5cROa4bgAQivwxJUTBsMgyo5TKF/xoxD50+qhjjphY21QNRAO9qS9Xbvlq1daBZI4zBATSNKTFyFDrYo0eL7y1CbF4EloTlh40ggc3CxhD2+LPPtY3t2n4LWfNGMy45RHr/R/2Pr90Y8Q2OENkbEdH38RxY39++rFLV6177u1PhteVD68rI6KIZVgCA9YTzphlGQbngqPB0DKFZQiOYJlGZdRWRA+/u3rTgeRl55w4Zljz469+2NN54PZz5o1rqsh7UmsiRO15Rig0bu4RTWPGat8zyuPbtuy94rp7VqzcePyxi9uamzLZXIA+g+YChoFiFknui1QzSufybjweXrJ4+pwpwx3H85T+bv2eDz7/AUpEhcWQNiDTHSrSX3hrExeYTZEwIBxFJUFpQgAuQMlg6hy0AtPEXBqef3zgtlMPPXJSUyrvx0JW1vWl1IgQtkTWkb9+/OPxY8eed/yCj79Z89GyFQ/8/OixjWW+rzgC5xxLz9Eo3QwopQKKHCJwVbAb7L+frX/us3XHzj/0tKPnvf/lqnc/++qmM+ZMHV5HWsfCRt7VCFp6fvP4CRMOn8+4MEwBQvzlgWf/9H9PjB418vDDZktf+dJnRcYi0AHzHaLSeogvi3OmFPlSxaOhguMVHN8QzDSEVKqkiDBk8gN/QYHNAgCt8IdvvAnTzHCUtAZELOTJDkFRAgFIQyjC13zjbP+WnrjmaFMwrSkox3KOmbwnGLYnCzc89fk5xy86fOqENz9fuXLNmitPmJ7Lu46vpCZfKknk+zrvep4kX6qs40mlpCalyZNKaSJNhmBdyVzPQHrm5PGXnn78D1t2PvXmhzGT1ZXHzjx83BHjGrOuVForz01U105atListt53HauqfNXX6y648g9dPclTlhwfjUTyhQJnDABZkY6niDCCXSCggJ5ISskQGQ9y8aACwjACIlJa25Y5lNclArzotiYgMG22c7PfuVcdfqytFa36wmtsE41tTCuQkoYCK8vkzz3ev2TcuCuOn5zMFgDRFuzvb3//w64uzrngLOu4PvGrzzu5oabypQ+++PyLlQ315UophsiLxr5IrmcIJhgTHIs0L5xxxODHsGW4ir7e3jm8reWKc5Yc6O5/9MW3y0xijM8c03je/AkBV72WPuf8kIWLW8ZNKGSzoUQ0l3Mvvuaul9787JQTjmlpbg6ABQIG2oQ/ot4MJKDIt1ViwNJaG4awTUNqKouHI2F7x+4Oz5e2ZQYYWACi1qAUDRsttq/3Czno3K9SA/qwxdx1aLBPl1WygAKAiBjXsw6PvvvhrlMPHRGzTV9p0zBiITNb8OaPqXV9GbXja/b2vr981U9OPHLJwjmdfQM6Nzi1udqTMoCpwREH7UqaSGtSmpTWSgdVH1KaClmHMRxVV7Zu/da/uf6vf3rqFeec9NjL73Dff2f1rlENlYsntyZzBcM0gWjNR++n+/omzJ3nZgqWYC8+dfeEux///Z3/mnfE3OlTpuTyeQA4+DgqLDKMBuSWWGy9LpI8IaIh+E/PmDdxTJP0pWmaW3d3vvr+qi072m3LMAXHi3/XlE3h7q3+9MPN75a70Tjr2CvHTTWr69lnbzrDxphtY5jvURDrMYaCsWcfG/jprEnnzx+TzHmm4HnXv+zRj4WSIVMQguNT50DmyvNPmTCy9UB334PPvl4dMTxZZM8moOA5EAHSC/xU8N8A7hscDc4DWUtEQ6u3HqiprbvmJyfv7ej5+zOvX7Rg/Jlzx6RyDkNgjAfC4ubzTePGT118DBEpKe2aymefeffCq/4w8ZDxRxx2aMFxiTQCKz3O6qCilJqniCELGm19qWzTOOXYmQtnj0FExrgi+vybLW98sDKdzeMFtzRZNtu2we/tUBNmmH2derBPzV5kffRKrrJGzFxg5TIaIKDQAyIIh9nyz3J6f+KBy47IuwoBbIN/s7Vz7Z7eWNgkoqhtfr3lQG8Bf/WTk0xDvPrJil27dv7m1DkFxxOcAYBlCMEZQzA4MwTnDBiCEAIBOGcMkSEE5sYy2L6+7CX/ePfQqRMvPHnx2q27H3/1vVtOn33YmIZU3jGFkLpIW+pksw2jxkw79jgE8Dw/XFv1yYdfnXT+DY2NjccuWuD5koaGfqGIDIJHVAVJAIYskHfOGJHOF/wxIxrOO+WwYS01bsGzonZX58Ar763EC29tJiI7jNvWy7omHo6yQo4Yh92b5fjphuNo9iP6LQCwbda5T33yauGRy4+sK4v4mkgpkzPT4AHCsQyxfyD307+/87OTj54wqi2dzf/juTf+eNasacNq8q7HGSNNTPAhSjQIYCQPfkPIuZIywEm+lLGQuX7/4HVPfHLsEXOOmzfz81Xr//fup/dfunh4bSLnyvKI5SvtS8UZK2SztcOGzzrxJMa56/jhqsTXK9Yed/a1ZYmyE487RkqppBpKbP0IDxS93lBeLJhMKDieaYizlsxZdPghbt4zDM44wwtubQqMnGGi9ItYgTRwAb5XfPBZySMAEHGBWrLn/j1w43Gzj5ramnEkklYEDCDruEpRwVflsdD9b63qdfhV55zAGb6xdGX3gd03nXZYTzJLiEqDBvA8P0iHOZ4seEpp8nzpS6UAHE86vpJa+75UWkdsc/OB/v19mavOXTJ17MiXPvxi6bffj2qsGkwXJg6r+fWJ04m01CQE9/KFqtZhs5aczBBdxwtXxn9Yu/2oU38ZCkdOOv4Y6SulVAlRlMSKqEjQMdQFj8HoGyql8wVv/pxxPzntcMvgjuPjhbc2Bxg0IF5EFqA5JE2lfBkUsXBxyJhsW7z41OBRw0ZfdcLkVM4FoIhlvrVqx7NLN1qG8JXiDJWmjCt//dPTairKcvnCX59+FZU0OCsVDUu2g4CxUgwEaHAMiJ85QwYYsFYRUSJkdqcLGW1c+7PTouHQoy+/13lg39S2mh3dqfFtddedNLPg+YwxbhhONls3ctTM45doKT3XCVeUrV+/c/6SK6Kx2JLjjtGagoZFxoLAKLhxgFICLpC4QACDy7I5Z1hr7UVnL2hprhaB2YaguA5QehheQPLFpr8A+ytADmUVvL0vGySOgucndA7mSKvxtWW+0gyBc/b1zp6NO/fVVVXEY5HxI9p2bNs6q7XKV0qUnpYRRLmcHWxjHULbWBwQCshKUWldHQ8t29zx4Yrvzjp2/jnHLXjo+Td60vnxDeWrtu6/7y28/qTpeVcCSisS7tyxbf2yzyctXGwQFQYzEyeN+vDVBxeedPn7H31ywrFHk09EQVdP0VQVn2lSGq4odQgDICqiaDS070DfvQ+/ff4pcwUcZG0GwOCRV0WYSwH1bknagt6CwEpGInyw3fWlBkRk4Gs9fUTdJz/sYgwEIAIKxqqi1ra97QtnTQZNU8YMX7Nxy2DOY6BVqfWj2JoEqLSWRYrV4ixEQOzoS00lXy84F4bxxer1U8eOHNXauGThYY+/8m5Bs6bq8kTYCjKBRKSkssKR3Wu+s0KhMXMOA8TCYGrm7AlvPnffsWde8+kXXy6ad7jnSxhKWhXLdMU7A62HLHTA0ao1WZbhe/5/XvxcBCo2FD0NSVMxUYBYZHMO2DkZAoHWYJiQI1JU3FDHkyPrEmXR8JoDKcsQAQ72Nab6+gfT2Wg41FRTGY/Ft/RkquLhAJECgGDMENwQ3ODIOBOIpiFMIQzBAHTINAzBGWLIFCZnhuC15dHnl67/5JsfhjXWThzVNnp4W5Xp3/WTBZ6UridLj1tBIm2Gw9tWfp2oqa0bNhyICn2pI48+9MF7fnPltX+uqao6ZNw4z/eL4+lBMkdrKBn4IfMfbCMRKVJBM9D/AxA8oFr3/Fh0AAAAAElFTkSuQmCC
required: false
description: A reference to the customer photo.
- - in: query
- name: fileType
- schema:
- type: string
- example: image/jpg
- required: false
- description: File type of the customer photo.
- in: query
name: challengeTypeId
schema:
@@ -1479,9 +1598,8 @@ paths:
"orderLineId": "858e31b9-67f0-46ca-bf88-91a382b9c079",
"orderId": "858e31b9-67f0-46ca-bf88-91a382b9c079",
"name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
"challengeType": { "challengeTypeId": 1, "name": "email" },
"oneTimePassword": "H5Iiz3JTaQeIV8p",
},
@@ -1497,21 +1615,22 @@ paths:
required: true
description: The id of the personal account data.
patch:
- summary: P5. Update personal account data.
+ summary: Update personal account data.
description: Update personal account data.
tags:
- Order Line
requestBody:
content:
- application/json:
+ application/jso"n:
schema:
$ref: "#/components/schemas/unavailable"
example:
{
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
"challengeTypeId": 1,
"oneTimePassword": "H5Iiz3JTaQeIV8p",
+ "name": "Jan Pad",
+ "birthdate": "1992-04-20"
}
responses:
"200":
@@ -1525,16 +1644,90 @@ paths:
"personalAccountDataId": "47041fde-7044-42e6-9ab5-091c05ce32f5",
}
delete:
- summary: P5. Delete personal account data.
+ summary: Delete personal account data.
description: Delete personal account data.
tags:
- Order Line
responses:
"200":
description: Ok
+ /orderlines/{orderLineId}/orderLineTerms:
+ parameters:
+ - in: path
+ name: orderLineId
+ schema:
+ type: string
+ format: uuid
+ example: 9ff2e034-ed4f-44d5-8f6c-d703bd4df332
+ required: true
+ description: The id of the order line to process.
+ post:
+ summary: Add a orderLine term to an order line.
+ description: Add a orderLine term to an order line.
+ tags:
+ - Order Line
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ termsUrl": "generalTermsAndConditions.pdf",
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ { "orderLineTermsId": "eeec597c-36c4-41b2-aeeb-ab5c32f2365d" }
+ /orderLineTerms/{orderLineTermsId}:
+ parameters:
+ - in: path
+ name: orderLineTermsId
+ schema:
+ type: string
+ format: uuid
+ example: 9ff2e034-ed4f-44d5-8f6c-d703bd4df332
+ required: true
+ description: The id of the order line terms to process.
+ patch:
+ summary: Update a orderLine term to an order line.
+ description: Update a orderLine term to an order line.
+ tags:
+ - Order Line
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ "termsUrl": "generalTermsAndConditions.pdf",
+ }
+ responses:
+ "200":
+ description: Ok
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ { "orderLineTermsId": "eeec597c-36c4-41b2-aeeb-ab5c32f2365d" }
+ delete:
+ summary: Remove a orderLine term from an order line.
+ description: Remove a orderLine term from an order line.
+ tags:
+ - Order Line
+ responses:
+ "200":
+ description: OK
/payments:
get:
- summary: P2. Find payments.
+ summary: Find payments.
description: Find payments.
tags:
- Payment
@@ -1647,7 +1840,10 @@ paths:
"name": "ideal",
"provider": "Buckaroo",
},
- "touchPointId": 1,
+ "touchPoint":{
+ "touchPointId": 1,
+ "name": "Perplex"
+ },
"isRefund": false,
"htmPaymentReference": "HTM-1234",
"pspPaymentReference": "Buckaroo-1234",
@@ -1686,7 +1882,7 @@ paths:
required: true
description: The id of the payment to process.
patch:
- summary: P2. Update a payment.
+ summary: Update a payment.
description: Update a payment.
tags:
- Payment
@@ -1719,7 +1915,7 @@ paths:
required: true
description: The id of the payment to process.
post:
- summary: P2. Add a payment status.
+ summary: Add a payment status.
description: Add a payment status.
tags:
- Payment
@@ -1728,14 +1924,23 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "190",
- "statusDescription": "Success",
- "statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
- }
+ examples:
+ Minimum orderPaymentStatus requestBody:
+ value:
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success"
+ }
+ Maximum orderPaymentStatus requestBody:
+ value:
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessFul",
+ }
responses:
"201":
description: Created
@@ -1750,7 +1955,7 @@ paths:
}
/mandateinputs:
get:
- summary: P2. Find mandate inputs.
+ summary: Find mandate inputs.
description: Find mandate inputs.
tags:
- Payment
@@ -1846,6 +2051,43 @@ paths:
"place": "Den Haag",
},
]
+ /payments/{paymentId}/mandateinputs:
+ parameters:
+ - in: path
+ name: paymentId
+ schema:
+ type: string
+ format: uuid
+ example: fd09f3c5-35d9-4a1b-a98b-e46addb663f2
+ required: true
+ description: The id of the payment to process.
+ post:
+ summary: Create a mandateInput.
+ description: Create a mandateInput..
+ tags:
+ - Payment
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ "directDebitMandateTypeId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ }
+ responses:
+ "201":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example: { "mandateInputId": "dbbc3913-414e-4528-9c95-6c11a11e04ac" }
/mandateinputs/{mandateInputId}:
parameters:
- in: path
@@ -1857,7 +2099,7 @@ paths:
required: true
description: The id of the mandate input to process.
delete:
- summary: P2. Delete a mandate input.
+ summary: Delete a mandate input.
description: Delete a mandate input.
tags:
- Payment
@@ -1866,7 +2108,7 @@ paths:
description: Ok
/ordercustomers:
get:
- summary: P3. Find customers on an order.
+ summary: Find customers on an order.
description: Find customers on an order.
tags:
- Customer
@@ -1922,7 +2164,7 @@ paths:
format: date
example: 1970-01-01
required: false
- description: The date of birth of the customer.
+ description: "The date of birth of the customer (formatted: YYYY-MM-DD)."
responses:
"200":
description: OK
@@ -1945,7 +2187,7 @@ paths:
{
"orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
"addressType":
- { "addressTypeId": 1, "name": "Billing" },
+ { "addressTypeId": 3, "name": "Billing" },
"street": "Kon. Julianaplein",
"houseNumber": 10,
"houseNumberSuffix": "a",
@@ -1967,7 +2209,7 @@ paths:
required: true
description: The id of the customer.
patch:
- summary: P3. Update a customer on an order.
+ summary: Update a customer on an order.
description: Update a customer on an order.
tags:
- Customer
@@ -2004,7 +2246,7 @@ paths:
required: true
description: The id of the customer on the order.
post:
- summary: P3. Add an addresses to a customer of the order.
+ summary: Add an addresses to a customer of the order.
description: Add an addresses to a customer of the order.
tags:
- Customer
@@ -2015,7 +2257,7 @@ paths:
$ref: "#/components/schemas/unavailable"
example:
{
- "addressTypeId": 1,
+ "addressTypeId": 3,
"street": "Kon. Julianaplein",
"houseNumber": 10,
"houseNumberSuffix": "a",
@@ -2036,7 +2278,7 @@ paths:
}
/ordercustomeraddresses:
get:
- summary: P3. Find addresses of a customer on an order.
+ summary: Find addresses of a customer on an order.
description: Find addresses of a customer on an order.
tags:
- Customer
@@ -2065,7 +2307,7 @@ paths:
type: integer
explode: false
required: false
- description: Filter on possible types of addresses. 1 = billing, 2 = shipping.
+ description: Filter on possible types of addresses. 1 = Shipping, 3 = Billing.
- in: query
name: street
schema:
@@ -2121,7 +2363,7 @@ paths:
"orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
"orderCustomerId": "540d8b7a-d626-443f-8f99-c24398604d7a",
"orderId": "73cca95a-81d1-468f-a8bf-99b36367001a",
- "addressType": { "addressTypeId": 1, "name": "Billing" },
+ "addressType": { "addressTypeId": 3, "name": "Billing" },
"street": "Kon. Julianaplein",
"houseNumber": 10,
"houseNumberSuffix": "a",
@@ -2141,7 +2383,7 @@ paths:
required: true
description: The id of the customer address.
patch:
- summary: P3. Update an address of a customer on an order.
+ summary: Update an address of a customer on an order.
description: Update an address of a customer on an order.
tags:
- Customer
@@ -2171,6 +2413,19 @@ paths:
{
"orderCustomerAddressId": "d5005529-d4f2-4552-a5b8-477dab7836ec",
}
+ delete:
+ summary: Delete an address of a customer on an order.
+ description: Delete an address of a customer on an order.
+ tags:
+ - Customer
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example: {}
components:
securitySchemes:
bearerToken:
diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml
index 0070185..1a110a2 100644
--- a/src/openapi/orders/service_engine_orders.yaml
+++ b/src/openapi/orders/service_engine_orders.yaml
@@ -3,223 +3,297 @@ info:
title: ABT Service Engine Order APIs
version: "1.0"
description: Order APIs available in the Service Engine for order validation and fulfillment.
-servers:
- - url: https://api.integratielaag.nl/v2
+servers:
+ - url: https://services.acc.api.htm.nl/abt/touchpoint/2.0
paths:
/orders/validation:
post:
tags:
- - Order Validation v2
+ - Order Validation v1 & v2
summary: Validate order.
description: Validate order.
parameters:
- in: header
name: X-HTM-JWT-AUTH-HEADER
- required: true
+ required: false
style: simple
explode: false
schema:
type: string
+ - in: header
+ name: Accept-version
+ required: false
+ style: simple
+ explode: false
+ schema:
+ type: string
+ example: "2.0"
+ description: The version of the API.
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "purchaseDate": "2024-03-22",
- "customerProfileId": 1337,
- "languageId": 1,
- "billingAddressId": 1,
- "shippingAddressId": 1,
- "contents":
- [
- {
- "productId": 1,
- "quantity": 5,
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- "tokens":
- [
- {
- "tokenTypeId": 1,
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
- {
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
- },
- },
- ],
- },
- {
- "productId": 2,
- "quantity": 3,
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- },
- ],
- "customer":
+ examples:
+ v2:
+ summary: Order validation v2
+ description: Order validation v2
+ value:
{
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "addresses":
+ "purchaseDate": "2024-03-22",
+ "customerProfileId": 1337,
+ "languageId": 1,
+ "billingAddressId": 1,
+ "shippingAddressId": 1,
+ "contents":
[
{
- "addressTypeId": 1,
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
+ "productId": 1,
+ "quantity": 5,
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "tokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "dateOfBirth": "1970-01-01",
+ "photoReference": "DSC_0502.JPG",
+ "fileType": "image/jpg",
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ },
+ {
+ "productId": 2,
+ "quantity": 3,
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
},
],
- },
- }
+ "customer":
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "addresses":
+ [
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ v1:
+ summary: Order validation v1
+ description: Order validation v1
+ value:
+ [
+ {
+ "ovPayTokenId": 2,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "productId": 2,
+ "startDate": "2024-03-22T09:00:00z",
+ "quantity": 1,
+ },
+ {
+ "ovPayTokenId": 3,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 89,
+ "ovpasNumber": "OV34567",
+ "productId": 4,
+ "startDate": "2024-03-22T09:00:00z",
+ "quantity": 4,
+ },
+ ]
responses:
- "201":
- description: Created
+ "200":
+ description: OK
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "validContents": true,
- "purchaseDate": "2024-03-22",
- "customerProfileId": 1337,
- "languageId": 1,
- "billingAddressId": 1,
- "shippingAddressId": 1,
- "totalAmount": 121,
- "contents":
- [
- {
- "productId": 1,
- "quantity": 5,
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- "taxAmount": 21,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "isRenewable": true,
- "nextDebitDate": "2024-04-22",
- "termAmountExclTax": 100,
- "termAmountInclTax": 121,
- "tokens":
- [
- {
- "tokenTypeId": 1,
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
- {
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
- },
- },
- ],
- "additionalRemarks": [],
- "validationErrors":
- [
- {
- "detail": "Startdate of this product should be at most 60 days in the future.",
- "pointer": "#/contents[0]/validFrom",
- },
- {
- "detail": "Combination of product and token type is not valid.",
- "pointer": "#/contents[0]/tokens[0]/ovPayTokenId",
- },
- ],
- },
- {
- "productId": 2,
- "quantity": 3,
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- "taxAmount": 21,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "isRenewable": true,
- "nextDebitDate": "2024-04-22",
- "termAmountExclTax": 100,
- "termAmountInclTax": 121,
- },
- ],
- "customer":
+ examples:
+ v2:
+ summary: Order validation v2
+ description: Order validation v2
+ value:
{
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "addresses":
+ "validContents": true,
+ "amountExclTax": 0,
+ "taxPercentage": 0,
+ "amountInclTax": 0,
+ "contents":
[
{
- "addressTypeId": 1,
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
+ "ovPayTokenId": 0,
+ "serviceReferenceId": "string",
+ "ovpasNumber": "string",
+ "productId": 0,
+ "quantity": 0,
+ "amountExclTax": 0,
+ "taxPercentage": 0,
+ "amountInclTax": 0,
+ "startDate": "string",
+ "endDate": "string",
+ "isRenewable": true,
+ "nextDebitDate": "string",
+ "termAmountExclTax": 0,
+ "termAmountInclTax": 0,
+ "additionalRemarks":
+ [{ "code": "string", "parameter": "string" }],
+ "validationErrors":
+ [{ "detail": "string", "pointer": "string" }],
},
],
- "additionalRemarks":
+ }
+ v1:
+ summary: Order validation v1
+ description: Order validation v1
+ value:
+ {
+ "validContents": true,
+ "purchaseDate": "2024-03-22",
+ "customerProfileId": 1337,
+ "languageId": 1,
+ "billingAddressId": 1,
+ "shippingAddressId": 1,
+ "totalAmount": 121,
+ "contents":
[
{
- "code": "PERSONAL_DATA_NEEDED",
- "parameter": "dateOfBirth",
+ "productId": 1,
+ "quantity": 5,
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "taxAmount": 21,
+ "taxCode": "V21",
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "isRenewable": true,
+ "nextDebitDate": "2024-04-22",
+ "termAmountExclTax": 100,
+ "termAmountInclTax": 121,
+ "tokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "dateOfBirth": "1970-01-01",
+ "photoReference": "DSC_0502.JPG",
+ "fileType": "image/jpg",
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "additionalRemarks": [],
+ "validationErrors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/contents[0]/validFrom",
+ },
+ {
+ "detail": "Combination of product and token type is not valid.",
+ "pointer": "#/contents[0]/tokens[0]/ovPayTokenId",
+ },
+ ],
},
{
- "code": "PERSONAL_DATA_NEEDED",
- "parameter": "photo",
- },
- {
- "code": "MANDATE_REQUIRED",
- "parameter": "directDebitMandateId",
+ "productId": 2,
+ "quantity": 3,
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "taxAmount": 21,
+ "taxCode": "V21",
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "isRenewable": true,
+ "nextDebitDate": "2024-04-22",
+ "termAmountExclTax": 100,
+ "termAmountInclTax": 121,
},
],
- "validationErrors":
- [
- {
- "detail": "Startdate of this product should be at most 60 days in the future.",
- "pointer": "#/contents[1]/validFrom",
- },
- ],
- },
- }
+ "customer":
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "addresses":
+ [
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ "additionalRemarks":
+ [
+ {
+ "code": "PERSONAL_DATA_NEEDED",
+ "parameter": "dateOfBirth",
+ },
+ {
+ "code": "PERSONAL_DATA_NEEDED",
+ "parameter": "photo",
+ },
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/contents[1]/validFrom",
+ },
+ ],
+ },
+ }
/orders/{orderId}/fulfillment:
post:
tags:
- - Order Fulfillment v2
+ - Order Fulfillment v1 & v2
summary: Fulfill an order.
description: Fulfill an order.
parameters:
- in: header
name: X-HTM-JWT-AUTH-HEADER
- required: true
+ required: false
style: simple
explode: false
schema:
@@ -233,333 +307,46 @@ paths:
type: string
format: uuid
example: a0ef57fa-395c-4a03-96e9-234c26dccea9
+ - in: header
+ name: Accept-version
+ required: false
+ style: simple
+ explode: false
+ schema:
+ type: string
+ example: "2.0"
+ description: The version of the API.
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9",
- "customerProfileId": 1337,
- "totalAmount": 121,
- "languageId": 1,
- "billingAddressId": 1,
- "shippingAddressId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "orderStatusId": 4,
- "orderLines":
- [
- {
- "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f",
- "productId": 1,
- "productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
- "productDescription": "HTM Maandkorting 20%",
- "taxAmount": 21,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "quantity": 1,
- "terms":
- [
- "generalTermsAndConditions.pdf",
- "productTermsAndConditions.pdf",
- ],
- "createdOn": "2024-03-22T09:00:00",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- "orderLineStatusId": 4,
- "tokens":
- [
- {
- "tokenTypeId": 1,
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
- {
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
- },
- },
- ],
- },
- ],
- "payments":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "amountDebit": 121,
- "paymentMethodId": 1,
- "touchPointId": 1,
- "isRefund": false,
- "htmPaymentReference": "HTM-1234",
- "pspPaymentReference": "Buckaroo-1234",
- "paymentStatuses":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "190",
- "statusDescription": "Success",
- "statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
- },
- ],
- "payPush":
- {
- "consumerIssuer": "ABN AMRO",
- "transactionId": "0000000000000001",
- "consumerName": "J. de Vries",
- "consumerIBAN": "NL44RABO0123456789",
- "consumerBIC": "RABONL2U",
- },
- },
- ],
- "customer":
+ examples:
+ v2.2:
+ summary: Order fulfillment v2.2
+ description: Order fulfillment v2.2
+ value:
{
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "addresses":
- [
- {
- "addressTypeId": 1,
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
- },
- ],
- },
- }
- responses:
- "201":
- description: Created
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9",
- "orderNumber": "123456",
- "customerProfileId": 1337,
- "totalAmount": 121,
- "languageId": 1,
- "billingAddressId": 1,
- "shippingAddressId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "orderStatusId": 4,
- "orderLines":
- [
- {
- "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f",
- "productId": 1,
- "productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
- "productDescription": "HTM Maandkorting 20%",
- "taxAmount": 21,
- "taxCode": "V21",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "quantity": 1,
- "terms":
- [
- "generalTermsAndConditions.pdf",
- "productTermsAndConditions.pdf",
- ],
- "createdOn": "2024-03-22T09:00:00",
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": null,
- "orderLineStatusId": 4,
- "tokens":
- [
- {
- "tokenTypeId": 1,
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
- {
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
- },
- },
- ],
- },
- ],
- "payments":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "amountDebit": 121,
- "paymentMethodId": 1,
- "touchPointId": 1,
- "isRefund": false,
- "htmPaymentReference": "HTM-1234",
- "pspPaymentReference": "Buckaroo-1234",
- "paymentStatuses":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "190",
- "statusDescription": "Success",
- "statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
- },
- ],
- "payPush":
- {
- "consumerIssuer": "ABN AMRO",
- "transactionId": "0000000000000001",
- "consumerName": "J. de Vries",
- "consumerIBAN": "NL44RABO0123456789",
- "consumerBIC": "RABONL2U",
- },
- },
- ],
- "customer":
- {
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "addresses":
- [
- {
- "addressTypeId": 1,
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
- },
- ],
- },
- }
- /customers/{customerProfileId}/orders:
- parameters:
- - in: path
- name: customerProfileId
- required: true
- style: simple
- explode: false
- schema:
- type: integer
- example: 42
- - in: header
- name: X-HTM-JWT-AUTH-HEADER
- schema:
- type: string
- example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
- description: The JWT of the logged in customer (in case of a web shop).
- get:
- tags:
- - Order Retrieval v2.1
- summary: Get all orders for a specific customer.
- description: Get all orders for a specific customer.
- responses:
- "200":
- description: OK
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- [
- {
- "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
- "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7",
- "orderNumber": "123456",
- "customerProfileId": 42,
- "totalAmount": 121,
- "touchPointId": 1,
- "language":
- {
- "languageId": 1,
- "name": "Nederlands",
- "iso639Code": "nl-NL",
- "ietfCode": "nl",
- },
+ "externalOrderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9",
+ "languageId": 1,
"billingAddressId": 1,
"shippingAddressId": 1,
"createdOn": "2024-03-22T09:00:00",
- "lastUpdatedOn": "2024-03-22T09:00:00",
- "order_OrderStatus":
- [
- {
- "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
- "orderStatus": { "orderStatusId": 4, "name": "paid" },
- "createdOn": "2024-03-22T09:00:00",
- "description": "Order succesvol betaald",
- },
- {
- "order_orderStatusId": "2b9b7943-3a74-4f2e-ad65-012b62c80821",
- "orderStatus":
- { "orderStatusId": 3, "name": "pendingPayment" },
- "createdOn": "2024-03-22T08:55:00",
- "description": "Betaling in behandeling",
- },
- ],
+ "orderStatusId": 4,
"orderLines":
[
{
- "orderLineId": "7a7a9d1a-3fc8-4058-a28b-082860aaa311",
- "externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
+ "externalOrderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f",
"productId": 1,
- "productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
- "productDescription": "HTM Maandkorting 20%",
- "taxAmount": 21,
- "taxMetadata":
- {
- "taxMetadataId": "06270769-a263-4325-82d6-f49396f39d03",
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "21% BTW",
- },
- "amountExclTax": 100,
- "amountInclTax": 121,
"quantity": 1,
- "orderLineTerms":
- [
- {
- "orderLineTermsId": "fe354db7-12ad-4fc1-bc63-a704c4e0d91e",
- "termsUrl": "generalTermsAndConditions.pdf",
- },
- ],
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": "2025-03-22T09:00:00",
- "orderLineStatus":
- { "orderLineStatusId": 4, "name": "delivered" },
"createdOn": "2024-03-22T09:00:00",
- "lastUpdatedOn": "2024-03-22T09:00:00",
- "customerTokens":
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatusId": 4,
+ "tokens":
[
{
- "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
- "tokenType":
- { "tokenTypeId": 1, "name": "EMV" },
-
+ "tokenTypeId": 1,
"ovPayTokenId": 1,
"serviceReferenceId": "NLOV1234567ABCDEFG",
"amount": 34,
@@ -567,13 +354,790 @@ paths:
"verificationCode": "A7H6",
"personalAccountData":
{
- "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
"name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
+ "dateOfBirth": "1970-01-01",
"photoReference": "DSC_0502.JPG",
"fileType": "image/jpg",
- "challengeType":
- { "challengeTypeId": 1, "name": "email" },
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ },
+ ],
+ "payments":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethodId": 1,
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "payPush":
+ {
+ "consumerIssuer": "ABN AMRO",
+ "transactionId": "0000000000000001",
+ "consumerName": "J. de Vries",
+ "consumerIBAN": "NL44RABO0123456789",
+ "consumerBIC": "RABONL2U",
+ },
+ },
+ ],
+ "customer":
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "addresses":
+ [
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ v2:
+ summary: Order fulfillment v2
+ description: Order fulfillment v2
+ value:
+ {
+ "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "languageId": 1,
+ "billingAddressId": 1,
+ "shippingAddressId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "orderStatusId": 4,
+ "orderLines":
+ [
+ {
+ "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f",
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "productCode": "HTM-MND-20",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxAmount": 21,
+ "taxCode": "V21",
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "terms":
+ [
+ "generalTermsAndConditions.pdf",
+ "productTermsAndConditions.pdf",
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatusId": 4,
+ "tokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "dateOfBirth": "1970-01-01",
+ "photoReference": "DSC_0502.JPG",
+ "fileType": "image/jpg",
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ },
+ ],
+ "payments":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethodId": 1,
+ "touchPointId": 1,
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "payPush":
+ {
+ "consumerIssuer": "ABN AMRO",
+ "transactionId": "0000000000000001",
+ "consumerName": "J. de Vries",
+ "consumerIBAN": "NL44RABO0123456789",
+ "consumerBIC": "RABONL2U",
+ },
+ },
+ ],
+ "customer":
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "addresses":
+ [
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ v1:
+ summary: Order fulfillment v1
+ description: Order fulfillment v1
+ value:
+ {
+ "customerProfileID": 123415,
+ "customerProfileData": { "dateOfBirth": "1989-03-09" },
+ "personalAccountData": { "birthdate": "1989-03-09" },
+ "directDebitMandate":
+ {
+ "consumerName": "J. de Tèster",
+ "consumerBic": "RABONL2U",
+ "consumerIban": "NL44RABO0123456789",
+ },
+ "orderContents":
+ [
+ {
+ "ovPayTokenId": 123,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 450,
+ "ovpasNumber": "63AW974",
+ "productId": 2,
+ "startDate": "2024-03-22T09:00:00Z",
+ "quantity": 1,
+ "orderlineId": "2d7fadc9-b64b-4516-9a7d-cf550f201372",
+ },
+ {
+ "ovPayTokenId": 123,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 450,
+ "ovpasNumber": "63AW974",
+ "productId": 3,
+ "startDate": "2024-03-16T09:00:00Z",
+ "quantity": 1,
+ "orderlineId": "9d7fadc9-b64b-4516-9a7d-cf550f201378",
+ },
+ ],
+ "orderStatus": "succeededPayment",
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v1:
+ summary: Order fulfillment v1
+ description: Order fulfillment v1
+ value: {}
+ v2.2:
+ summary: Order fulfillment v2
+ description: Order fulfillment v2
+ value:
+ {
+ "orderId": "c73ff153-72e0-403f-a276-e86f544406f9",
+ "externalOrderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9",
+ "orderNumber": "123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "languageId": 1,
+ "billingAddressId": 1,
+ "shippingAddressId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "orderStatusId": 4,
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f",
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "productCode": "HTM-MND-20",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxAmount": 21,
+ "taxCode": "V21",
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "terms":
+ [
+ "generalTermsAndConditions.pdf",
+ "productTermsAndConditions.pdf",
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatusId": 4,
+ "tokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "dateOfBirth": "1970-01-01",
+ "photoReference": "DSC_0502.JPG",
+ "fileType": "image/jpg",
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ },
+ ],
+ "payments":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethod":
+ {
+ "paymentMethodId": 1,
+ "name": "ideal",
+ "provider": "Buckaroo",
+ },
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "payPush":
+ {
+ "consumerIssuer": "ABN AMRO",
+ "transactionId": "0000000000000001",
+ "consumerName": "J. de Vries",
+ "consumerIBAN": "NL44RABO0123456789",
+ "consumerBIC": "RABONL2U",
+ },
+ },
+ ],
+ "customer":
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "addresses":
+ [
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ "type": "https://htm.nl/api/v1/probs/validationerror",
+ "title": "Your request is not valid.",
+ "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/0/startDate",
+ "ovPayTokenId": 123,
+ "productId": 2,
+ },
+ {
+ "detail": "Combination of product and token type is not valid.",
+ "pointer": "#/1/ovPayTokenId",
+ "ovPayTokenId": 123,
+ "productId": 3,
+ },
+ ],
+ }
+ /orders:
+ parameters:
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ description: The JWT of the logged in customer (in case of a web shop).
+ get:
+ parameters:
+ - in: query
+ name: orderId
+ schema:
+ type: string
+ format: uuid
+ example: afce35b2-1dff-4ace-98d0-4b9ac405c87d
+ description: The order id.
+ - in: query
+ name: orderNumber
+ schema:
+ type: string
+ example: "ORD123456"
+ description: The order number.
+ - in: query
+ name: externalOrderId
+ schema:
+ type: string
+ example: 7bef22f6-70a3-4655-bc2a-c40c61581b32
+ description: The external order id.
+ - in: query
+ name: createdBefore
+ schema:
+ type: string
+ format: date-time
+ example: 2024-03-22T09:00:00
+ required: false
+ description: Timestamp before which the order should have been created.
+ - in: query
+ name: createdAfter
+ schema:
+ type: string
+ format: date-time
+ example: 2024-03-22T09:00:00
+ required: false
+ description: Timestamp after which the order should have been created.
+ - in: query
+ name: updatedBefore
+ schema:
+ type: string
+ format: date-time
+ example: 2024-03-22T09:00:00
+ required: false
+ description: Timestamp before which the order should have been updated.
+ - in: query
+ name: updatedAfter
+ schema:
+ type: string
+ format: date-time
+ example: 2024-03-22T09:00:00
+ required: false
+ description: Timestamp after which the order should have been updated.
+ - in: query
+ name: orderStatusId
+ schema:
+ type: array
+ items:
+ type: integer
+ explode: false
+ required: false
+ description: Filter on most recent order status. 1 = concept, 2 = awaitingPayment, 3 = pendingPayment, 4 = paid, 5 = delivered, 6 = cancelled.
+ - in: query
+ name: customerProfileId
+ schema:
+ type: integer
+ example: 42
+ description: The customer profile id.
+ - in: query
+ name: xTat
+ schema:
+ type: string
+ example: 7208e73e-87a6-46d9-bb6d-867ffc460c9b
+ description: xTat used in order fulfillment. Note that this is a joined parameter via PurchasedProduct.
+ tags:
+ - Order Retrieval v1 & v2
+ summary: Find orders. P1
+ description: Find orders.
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2:
+ summary: Find orders v2
+ description: Find orders v2
+ value:
+ {
+ "orders":
+ [
+ {
+ "validContents": null,
+ "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
+ "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7",
+ "orderNumber": "123456",
+ "customerProfileId": 42,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "billingAddressId": 1,
+ "shippingAddressId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 4, "name": "paid" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order succesvol betaald",
+ },
+ "orderLines": [],
+ "payments":
+ [
+ {
+ "paymentId": "1a973c85-7a96-41b5-bbf2-7919d6a6db15",
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethod":
+ {
+ "paymentMethodId": 1,
+ "name": "ideal",
+ "provider": "Buckaroo",
+ },
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "paymentStatusId": "42eee610-1a17-4f02-be14-7e25d69d35f3",
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "mandateInput":
+ {
+ "mandateInputId": "5397f2d7-eefa-4e82-a086-1e0e3ad38bdb",
+ "directDebitMandateType":
+ {
+ "directDebitMandateTypeId": 1,
+ "name": "import",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ },
+ ],
+ "orderCustomer": null,
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.example.com/items/1",
+ "method": "GET",
+ "templated": true,
+ },
+ },
+ },
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "invalid",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/0/startDate",
+ },
+ ],
+ },
+ ],
+ "payments": [],
+ "orderCustomer": null,
+ }
+ ],
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.example.com/items",
+ "method": "GET",
+ "templated": true,
+ },
+ },
+ "href": "string",
+ }
+ post:
+ tags:
+ - Order Creation v2
+ summary: Create a new order
+ description: |
+ Create a new order. This order can only contain the order itself,
+ one ore more order lines and optionally a customer token per order line.
+ All orders created via this endpoint are created with the status "concept".
+ Order lines are created with status "pending".
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ summary: Order creation v2.2
+ description: Order creation v2.2
+ value:
+ {
+ "externalOrderId": null,
+ "languageId": 1,
+ "orderLines":
+ [
+ {
+ "externalOrderLineId": null,
+ "productId": 1,
+ "quantity": 1,
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "customerTokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ },
+ ],
+ }
+ v1.2:
+ summary: Order creation v1.2
+ description: Order creation v1.2
+ value:
+ {
+ "externalOrderId": null,
+ "languageId": 1,
+ "billingAddressId": 1,
+ "shippingAddressId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "order_OrderStatus":
+ [
+ {
+ "orderStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Concept order",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "externalOrderLineId": null,
+ "productId": 1,
+ "quantity": 1,
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": "2025-03-22T09:00:00",
+ "orderLineStatusId": 4,
+ "createdOn": "2024-03-22T09:00:00",
+ "customerTokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "dateOfBirth": "1970-01-01",
+ "photoReference": "DSC_0502.JPG",
+ "fileType": "image/jpg",
+ "challengeTypeId": 1,
"oneTimePassword": "H5Iiz3JTaQeIV8p",
},
},
@@ -581,9 +1145,7 @@ paths:
"orderAccountingStatuses":
[
{
- "orderAccountingStatusId": "7c5118d0-8535-4464-9239-83a7ba8fd2db",
- "accountingStatus":
- { "accountingStatusId": 1, "name": "open" },
+ "accountingStatusId": 1,
"createdOn": "2024-03-22T09:00:00",
"description": "Financiele transactie voor de FIKO.",
},
@@ -593,38 +1155,25 @@ paths:
"payments":
[
{
- "paymentId": "3ba4a3c7-0803-4214-800b-365851b8903d",
"createdOn": "2024-03-22T09:00:00",
"amountDebit": 121,
- "paymentMethod":
- {
- "paymentMethodId": 1,
- "name": "ideal",
- "provider": "Buckaroo",
- },
- "touchPointId": 1,
+ "paymentMethodId": 1,
"isRefund": false,
"htmPaymentReference": "HTM-1234",
"pspPaymentReference": "Buckaroo-1234",
"paymentStatuses":
[
{
- "paymentStatusId": 1,
"createdOn": "2024-03-22T09:00:00",
"statusCode": "190",
"statusDescription": "Success",
"statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
+ "statusSubDescription": "PaymentSuccessful",
},
],
"mandateInput":
{
- "mandateInputId": "0a875e67-dc9f-4825-a030-d732a2adbfbc",
- "directDebitMandateType":
- {
- "directDebitMandateTypeId": 1,
- "name": "import",
- },
+ "directDebitMandateTypeId": 1,
"createdOn": "2024-03-22T09:00:00",
"bic": "RABONL2U",
"iban": "NL44RABO0123456789",
@@ -635,7 +1184,6 @@ paths:
],
"orderCustomer":
{
- "orderCustomerId": "19ef6882-8eda-43bf-b48e-9b4ff8745a50",
"birthname": "Jan",
"surname": "Vries",
"prefix": "de",
@@ -644,9 +1192,7 @@ paths:
"orderCustomerAddresses":
[
{
- "orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
- "addressType":
- { "addressTypeId": 1, "name": "Billing" },
+ "addressTypeId": 1,
"street": "Kon. Julianaplein",
"houseNumber": 10,
"houseNumberSuffix": "a",
@@ -656,156 +1202,283 @@ paths:
},
],
},
- },
- ]
- /orders:
- parameters:
- - in: header
- name: X-HTM-JWT-AUTH-HEADER
- schema:
- type: string
- example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
- description: The JWT of the logged in customer (in case of a web shop).
- post:
- tags:
- - Order Creation v2.1
- summary: Create a new order.
- description: Create a new order.
- requestBody:
- content:
- application/json:
- schema:
- $ref: "#/components/schemas/unavailable"
- example:
- {
- "externalOrderId": null,
- "customerProfileId": 1337,
- "totalAmount": 121,
- "touchPointId": 1,
- "languageId": 1,
- "billingAddressId": 1,
- "shippingAddressId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "order_OrderStatus":
- [
- {
- "orderStatusId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "description": "Concept order",
- },
- ],
- "orderLines":
- [
- {
- "externalOrderLineId": null,
- "productId": 1,
- "productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
- "productDescription": "HTM Maandkorting 20%",
- "taxAmount": 21,
- "taxMetadataId": "7275b910-37d9-40c1-aaac-80d8ceb62ff9",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "quantity": 1,
- "orderLineTerms":
- [{ "termsUrl": "generalTermsAndConditions.pdf" }],
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": "2025-03-22T09:00:00",
- "orderLineStatusId": 4,
- "createdOn": "2024-03-22T09:00:00",
- "customerTokens":
- [
- {
- "tokenTypeId": 1,
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
- {
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
- },
- },
- ],
- "orderAccountingStatuses":
- [
- {
- "accountingStatusId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "description": "Financiele transactie voor de FIKO.",
- },
- ],
- },
- ],
- "payments":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "amountDebit": 121,
- "paymentMethodId": 1,
- "touchPointId": 1,
- "isRefund": false,
- "htmPaymentReference": "HTM-1234",
- "pspPaymentReference": "Buckaroo-1234",
- "paymentStatuses":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "190",
- "statusDescription": "Success",
- "statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
- },
- ],
- "mandateInput":
- {
- "directDebitMandateTypeId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "bic": "RABONL2U",
- "iban": "NL44RABO0123456789",
- "ascription": "J. de Vries",
- "place": "Den Haag",
- },
- },
- ],
- "orderCustomer":
+ }
+ v1:
+ summary: Order creation v1.1
+ description: Order creation v1.1
+ value:
{
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "orderCustomerAddresses":
+ "externalOrderId": null,
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPointId": 3,
+ "languageId": 1,
+ "billingAddressId": 1,
+ "shippingAddressId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "order_OrderStatus":
[
{
- "addressTypeId": 1,
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
+ "orderStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Concept order",
},
],
- },
- }
+ "orderLines":
+ [
+ {
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "productCode": "HTM-MND-20",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxAmount": 21,
+ "taxMetadataId": "7275b910-37d9-40c1-aaac-80d8ceb62ff9",
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [{ "termsUrl": "generalTermsAndConditions.pdf" }],
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": "2025-03-22T09:00:00",
+ "orderLineStatusId": 4,
+ "createdOn": "2024-03-22T09:00:00",
+ "customerTokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "dateOfBirth": "1970-01-01",
+ "photoReference": "DSC_0502.JPG",
+ "fileType": "image/jpg",
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses":
+ [
+ {
+ "accountingStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Financiele transactie voor de FIKO.",
+ },
+ ],
+ },
+ ],
+ "payments":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethodId": 1,
+ "touchPointId": 1,
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "mandateInput":
+ {
+ "directDebitMandateTypeId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ },
+ ],
+ "orderCustomer":
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
responses:
"201":
description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "invalid",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/0/startDate",
+ },
+ ],
+ },
+ ],
+ "payments": [],
+ "orderCustomer": null,
+ }
+ v1.2:
+ value:
+ {
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "orderNumber": "ORD-123456",
+ }
+ "400":
+ description: Bad request
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
{
- "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
- "orderNumber": "ORD-123456",
+ "type": "https://htm.nl/api/v1/probs/validationerror",
+ "title": "Your request is not valid.",
+ "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/0/startDate",
+ "ovPayTokenId": 123,
+ "productId": 2,
+ },
+ {
+ "detail": "Combination of product and token type is not valid.",
+ "pointer": "#/1/ovPayTokenId",
+ "ovPayTokenId": 123,
+ "productId": 3,
+ },
+ ],
}
/orders/{orderId}:
parameters:
@@ -826,8 +1499,8 @@ paths:
description: The JWT of the logged in customer (in case of a web shop).
get:
tags:
- - Order Retrieval v2.1
- summary: Get a single order.
+ - Order Retrieval v1 & v2
+ summary: Get a single order. P1
description: Get a single order.
responses:
"200":
@@ -836,180 +1509,206 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
- "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7",
- "orderNumber": "123456",
- "customerProfileId": 42,
- "totalAmount": 121,
- "touchPointId": 1,
- "language":
+ examples:
+ v2.2:
+ summary: Order details v2.2
+ description: Order details v2.2
+ value:
{
- "languageId": 1,
- "name": "Nederlands",
- "iso639Code": "nl-NL",
- "ietfCode": "nl",
- },
- "billingAddressId": 1,
- "shippingAddressId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "lastUpdatedOn": "2024-03-22T09:00:00",
- "order_OrderStatus":
- [
- {
- "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
- "orderStatus": { "orderStatusId": 4, "name": "paid" },
- "createdOn": "2024-03-22T09:00:00",
- "description": "Order succesvol betaald",
- },
- {
- "order_orderStatusId": "2b9b7943-3a74-4f2e-ad65-012b62c80821",
- "orderStatus":
- { "orderStatusId": 3, "name": "pendingPayment" },
- "createdOn": "2024-03-22T08:55:00",
- "description": "Betaling in behandeling",
- },
- ],
- "orderLines":
- [
- {
- "orderLineId": "7a7a9d1a-3fc8-4058-a28b-082860aaa311",
- "externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
- "productId": 1,
- "productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
- "productDescription": "HTM Maandkorting 20%",
- "taxAmount": 21,
- "taxMetadata":
- {
- "taxMetadataId": "06270769-a263-4325-82d6-f49396f39d03",
- "taxCode": "V21",
- "taxPercentageAmount": 21,
- "description": "21% BTW",
- },
- "amountExclTax": 100,
- "amountInclTax": 121,
- "quantity": 1,
- "orderLineTerms":
- [
- {
- "orderLineTermsId": "fe354db7-12ad-4fc1-bc63-a704c4e0d91e",
- "termsUrl": "generalTermsAndConditions.pdf",
- },
- ],
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": "2025-03-22T09:00:00",
- "orderLineStatus":
- { "orderLineStatusId": 4, "name": "delivered" },
- "createdOn": "2024-03-22T09:00:00",
- "lastUpdatedOn": "2024-03-22T09:00:00",
- "customerTokens":
- [
- {
- "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
- "tokenType": { "tokenTypeId": 1, "name": "EMV" },
-
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
- {
- "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeType":
- { "challengeTypeId": 1, "name": "email" },
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
- },
- },
- ],
- "orderAccountingStatuses":
- [
- {
- "orderAccountingStatusId": "7c5118d0-8535-4464-9239-83a7ba8fd2db",
- "accountingStatus":
- { "accountingStatusId": 1, "name": "open" },
- "createdOn": "2024-03-22T09:00:00",
- "description": "Financiele transactie voor de FIKO.",
- },
- ],
- },
- ],
- "payments":
- [
- {
- "paymentId": "3ba4a3c7-0803-4214-800b-365851b8903d",
- "createdOn": "2024-03-22T09:00:00",
- "amountDebit": 121,
- "paymentMethod":
- {
- "paymentMethodId": 1,
- "name": "ideal",
- "provider": "Buckaroo",
- },
- "touchPointId": 1,
- "isRefund": false,
- "htmPaymentReference": "HTM-1234",
- "pspPaymentReference": "Buckaroo-1234",
- "paymentStatuses":
- [
- {
- "paymentStatusId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "190",
- "statusDescription": "Success",
- "statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
- },
- ],
- "mandateInput":
- {
- "mandateInputId": "0a875e67-dc9f-4825-a030-d732a2adbfbc",
- "directDebitMandateType":
- {
- "directDebitMandateTypeId": 1,
- "name": "import",
- },
- "createdOn": "2024-03-22T09:00:00",
- "bic": "RABONL2U",
- "iban": "NL44RABO0123456789",
- "ascription": "J. de Vries",
- "place": "Den Haag",
- },
- },
- ],
- "orderCustomer":
- {
- "orderCustomerId": "19ef6882-8eda-43bf-b48e-9b4ff8745a50",
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "orderCustomerAddresses":
+ "validContents": null,
+ "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d",
+ "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7",
+ "orderNumber": "123456",
+ "customerProfileId": 42,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
[
{
- "orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
- "addressType":
- { "addressTypeId": 1, "name": "Billing" },
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 4, "name": "paid" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order succesvol betaald",
+ },
+ {
+ "order_orderStatusId": "2b9b7943-3a74-4f2e-ad65-012b62c80821",
+ "orderStatus":
+ { "orderStatusId": 3, "name": "pendingPayment" },
+ "createdOn": "2024-03-22T08:55:00",
+ "description": "Betaling in behandeling",
},
],
- },
- }
+ "orderLines":
+ [
+ {
+ "orderLineId": "7a7a9d1a-3fc8-4058-a28b-082860aaa311",
+ "externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69",
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "fe354db7-12ad-4fc1-bc63-a704c4e0d91e",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ ],
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": "2025-03-22T09:00:00",
+ "orderLineStatus":
+ { "orderLineStatusId": 4, "name": "delivered" },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses":
+ [
+ {
+ "orderAccountingStatusId": "7c5118d0-8535-4464-9239-83a7ba8fd2db",
+ "accountingStatus":
+ { "accountingStatusId": 1, "name": "open" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Financiele transactie voor de FIKO.",
+ },
+ ],
+ "validationResult": null,
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments":
+ [
+ {
+ "paymentId": "3ba4a3c7-0803-4214-800b-365851b8903d",
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethod":
+ {
+ "paymentMethodId": 1,
+ "name": "ideal",
+ "provider": "Buckaroo",
+ },
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "paymentStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "mandateInput":
+ {
+ "mandateInputId": "0a875e67-dc9f-4825-a030-d732a2adbfbc",
+ "directDebitMandateType":
+ {
+ "directDebitMandateTypeId": 1,
+ "name": "import",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ },
+ ],
+ "orderCustomer":
+ {
+ "orderCustomerId": "19ef6882-8eda-43bf-b48e-9b4ff8745a50",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
+ "addressType":
+ { "addressTypeId": 3, "name": "Billing" },
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ "_links":
+ {
+ "self":
+ {
+ "href": "https://api.example.com/items/1",
+ "method": "GET",
+ "templated": true,
+ },
+ },
+ }
patch:
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Update an existing order.
description: Update an existing order.
requestBody:
@@ -1017,35 +1716,204 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "customerProfileId": 1337,
- "totalAmount": 121,
- "languageId": 1,
- "billingAddressId": 1,
- "shippingAddressId": 1,
- "lastUpdatedOn": "2024-03-22T09:00:00",
- }
+ examples:
+ v2.2:
+ summary: Order update v2.2
+ description: Order update v2.2
+ value:
+ {
+ "languageId": 1,
+ }
+ v1.2:
+ summary: Order update v1.2
+ description: Order update v1.2
+ value:
+ {
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "languageId": 1,
+ "billingAddressId": 1,
+ "shippingAddressId": 1,
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ }
responses:
"200":
description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenTypeId":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "preliminary",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomer": null,
+ }
+ v1.2:
+ value:
+ {
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "orderNumber": "ORD-123456",
+ }
+ "400":
+ description: Bad request
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
{
- "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
- "orderNumber": "ORD-123456"
+ "type": "https://htm.nl/api/v1/probs/validationerror",
+ "title": "Your request is not valid.",
+ "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/0/startDate",
+ "ovPayTokenId": 123,
+ "productId": 2,
+ },
+ {
+ "detail": "Combination of product and token type is not valid.",
+ "pointer": "#/1/ovPayTokenId",
+ "ovPayTokenId": 123,
+ "productId": 3,
+ },
+ ],
}
delete:
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Delete an existing order.
description: Delete an existing order.
responses:
"200":
description: OK
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ "type": "https://htm.nl/api/v1/probs/validationerror",
+ "title": "Your request is not valid.",
+ "detail": "The order can not be deleted.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Order status is paid",
+ "pointer": "#/order_OrderStatus/1/orderStatus/orderStatusId",
+ "orderStatusId": 4,
+ },
+ ],
+ }
/orders/{orderId}/orderlines:
parameters:
- in: path
@@ -1065,7 +1933,7 @@ paths:
description: The JWT of the logged in customer (in case of a web shop).
post:
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Add a new order line to an existing order.
description: Add a new order line to an existing order.
requestBody:
@@ -1073,53 +1941,81 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "externalOrderLineId": null,
- "productId": 1,
- "productName": "HTM Maandkorting 20%",
- "productCode": "HTM-MND-20",
- "productDescription": "HTM Maandkorting 20%",
- "taxAmount": 21,
- "taxMetadataId": "1d6f1725-1072-4f08-982c-3df51dd854a1",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "quantity": 1,
- "orderLineTerms":
- [{ "termsUrl": "generalTermsAndConditions.pdf" }],
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": "2025-03-22T09:00:00",
- "orderLineStatusId": 4,
- "createdOn": "2024-03-22T09:00:00",
- "customerTokens":
- [
- {
- "tokenTypeId": 1,
- "ovPayTokenId": 1,
- "serviceReferenceId": "NLOV1234567ABCDEFG",
- "amount": 34,
- "ovpasNumber": "OV34567",
- "verificationCode": "A7H6",
- "personalAccountData":
+ examples:
+ v2.2:
+ summary: Create order line v2.2
+ description: Create order line v2.2
+ value:
+ {
+ "externalOrderLineId": null,
+ "productId": 2,
+ "quantity": 1,
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "createdOn": "2024-03-22T09:00:00",
+ "customerTokens":
+ [
{
- "name": "Jan de Vries",
- "dateOfBirth": "01-01-1970",
- "photoReference": "DSC_0502.JPG",
- "fileType": "image/jpg",
- "challengeTypeId": 1,
- "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ "tokenTypeId": 1,
+ "ovPayTokenId": 4,
+ "serviceReferenceId": null,
+ "amount": null,
+ "ovpasNumber": null,
+ "verificationCode": null,
+ "personalAccountData": null,
},
- },
- ],
- "orderAccountingStatuses":
- [
- {
- "accountingStatusId": 1,
- "createdOn": "2024-03-22T09:00:00",
- "description": "Financiele transactie voor de FIKO.",
- },
- ],
- }
+ ],
+ }
+ v1.2:
+ summary: Create orderLine v1.2
+ description: Create orderLine v1.2
+ value:
+ {
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "productCode": "HTM-MND-20",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxAmount": 21,
+ "taxMetadataId": "1d6f1725-1072-4f08-982c-3df51dd854a1",
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [{ "termsUrl": "generalTermsAndConditions.pdf" }],
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": "2025-03-22T09:00:00",
+ "orderLineStatusId": 4,
+ "createdOn": "2024-03-22T09:00:00",
+ "tokens":
+ [
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "name": "Jan de Vries",
+ "dateOfBirth": "1970-01-01",
+ "photoReference": "DSC_0502.JPG",
+ "fileType": "image/jpg",
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses":
+ [
+ {
+ "accountingStatusId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Financiele transactie voor de FIKO.",
+ },
+ ],
+ }
responses:
"200":
description: OK
@@ -1127,7 +2023,191 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" }
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenTypeId": 1,
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "preliminary",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors": [],
+ },
+ {
+ "orderLineId": "2cb04b38-e9a8-465a-a273-261c55a21b71",
+ "externalOrderLineId": null,
+ "productId": 2,
+ "productName": "HTM Maandkorting 40%",
+ "fikoArticleNumber": "6610",
+ "productDescription": "HTM Maandkorting 40%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 42,
+ "amountExclTax": 200,
+ "amountInclTax": 242,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenTypeId": 1,
+ "ovPayTokenId": 4,
+ "serviceReferenceId": null,
+ "amount": null,
+ "ovpasNumber": null,
+ "verificationCode": null,
+ "personalAccountData": null,
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomer": null,
+ }
+ v1.2:
+ value:
+ { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" }
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ "type": "https://htm.nl/api/v1/probs/validationerror",
+ "title": "Your request is not valid.",
+ "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/0/startDate",
+ "ovPayTokenId": 123,
+ "productId": 2,
+ },
+ {
+ "detail": "Combination of product and token type is not valid.",
+ "pointer": "#/1/ovPayTokenId",
+ "ovPayTokenId": 123,
+ "productId": 3,
+ },
+ ],
+ }
/orderlines/{orderLineId}:
parameters:
- in: path
@@ -1147,7 +2227,7 @@ paths:
description: The JWT of the logged in customer (in case of a web shop).
patch:
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Update an existing order line.
description: Update an existing order line.
requestBody:
@@ -1155,17 +2235,30 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "taxAmount": 21,
- "taxMetadataId": "0574440e-7fa0-401f-b907-539c91633a5d",
- "amountExclTax": 100,
- "amountInclTax": 121,
- "quantity": 1,
- "validFrom": "2024-03-22T09:00:00",
- "validUntil": "2025-03-22T09:00:00",
- "orderLineStatusId": 4,
- }
+ examples:
+ v2.2:
+ summary: Update order line v2.2
+ description: Update order line v2.2
+ value:
+ {
+ "quantity": 1,
+ "validFrom": "2024-03-25T09:00:00",
+ "validUntil": null,
+ }
+ v1.2:
+ summary: Orderline update v1.2
+ description: Orderline update v1.2
+ value:
+ {
+ "taxAmount": 21,
+ "taxMetadataId": "0574440e-7fa0-401f-b907-539c91633a5d",
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": "2025-03-22T09:00:00",
+ "orderLineStatusId": 4,
+ }
responses:
"200":
description: OK
@@ -1173,15 +2266,1068 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" }
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 112,
+ "productName": "HTM Regio Vrij - HL65 - Voltarief",
+ "fikoArticleNumber": "6609",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65",
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ "taxAmount": 488,
+ "amountExclTax": 5412,
+ "amountInclTax": 5900,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "cac42e50-b1d3-4745-9a5d-a793bd27aad1",
+ "termsUrl": "RegiovrijTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2025-05-22T09:00:00",
+ "validFrom": "2025-05-25T04:00:00",
+ "validUntil": "2025-06-25T04:00:00",
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens": [],
+ "orderAccountingStatuses": [],
+ "validationResult": "preliminary",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ {
+ "code": "CUSTOMERTOKEN_REQUIRED",
+ "parameter": "customerTokenId",
+ },
+ ],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomer": null,
+ }
+ v2.1:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-25T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "ca15ccfb-ff5c-4c3b-b7c5-d65fc39f499d",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomer": null,
+ }
+ v1.2:
+ value:
+ { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" }
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ "type": "https://htm.nl/api/v1/probs/validationerror",
+ "title": "Your request is not valid.",
+ "detail": "The start date of the product is not allowed. See errors for more details.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/0/startDate",
+ "ovPayTokenId": 123,
+ "productId": 2,
+ },
+ ],
+ }
delete:
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Delete an existing order line.
description: Delete an existing order line.
responses:
"200":
description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 0,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines": [],
+ "payments": [],
+ "orderCustomer": null,
+ }
+ "400":
+ description: Bad request
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ example:
+ {
+ "type": "https://htm.nl/api/v1/probs/validationerror",
+ "title": "Your request is not valid.",
+ "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Product requires product with productId=2",
+ "pointer": "#/1/orderLine",
+ "orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d",
+ "productId": 3,
+ },
+ ],
+ }
+ /orderlines/{orderLineId}/customertokens:
+ parameters:
+ - in: path
+ name: orderLineId
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ format: uuid
+ example: a0ef57fa-395c-4a03-96e9-234c26dccea9
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ description: The JWT of the logged in customer (in case of a web shop).
+ post:
+ tags:
+ - Order Creation v2
+ summary: Add a customer token to an orderLine. P1
+ description: Add a customer token to an orderLine
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2.1:
+ summary: Add an existing customer token to an orderline v2.2
+ description: Add an existing customer token to an orderline v2.2
+ value:
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": 12}
+ v2.2.2:
+ summary: Add a new customer token (emv) to an orderline v2.2
+ description: Add a new customer token (emv) to an orderline v2.2
+ value:
+ {
+ "tokenTypeId": 1,
+ "serviceReferenceId": "NLOV485456456445",
+ "amount": 100}
+ v2.2.3:
+ summary: Add a new customer token (ov pas) to an orderline v2.2
+ description: Add a new customer token (ov pas) to an orderline v2.2
+ value:
+ {
+ "tokenTypeId": 2,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",}
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 12,
+ "serviceReferenceId": null,
+ "amount": null,
+ "ovpasNumber": null,
+ "verificationCode": null,
+ "personalAccountData": null
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "preliminary",
+ "additionalRemarks": [
+ {
+ "code": "PERSONALACCOUNTDATA_BIRTHDATE_REQUIRED",
+ "parameter": "personalaccountdata.birthdate",
+ }
+ ],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomers": null
+ }
+ /customertokens/{customerTokenId}:
+ parameters:
+ - in: path
+ name: customerTokenId
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ format: uuid
+ example: a0ef57fa-395c-4a03-96e9-234c26dccea9
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ description: The JWT of the logged in customer (in case of a web shop).
+ patch:
+ tags:
+ - Order Creation v2
+ summary: Update a customer token. P1
+ description: Update a customer token
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ summary: Update a customer token v2.2
+ description: Update a customer tokenv2.2
+ value:
+ {
+ "tokenTypeId": 1,
+ "ovPayTokenId": null,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34}
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens": [
+ {
+ "customerTokenId":"a0ef57fa-395c-4a03-96e9-234c26dccea9",
+ "tokenTypeId": 1,
+ "ovPayTokenId": null,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "personalAccountData": null}
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomers": null
+ }
+ delete:
+ tags:
+ - Order Creation v2
+ summary: Delete a customer token from an orderline. P1
+ description: Delete a customer token from an orderline
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens": [],
+ "orderAccountingStatuses": [],
+ "validationResult": "preliminary",
+ "additionalRemarks": [
+ {
+ "code": "CUSTOMERTOKEN_REQUIRED",
+ "parameter": "customerTokenId",
+ },
+ ],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomers": null
+ }
+ /customertokens/{customerTokenId}/personalaccountdata:
+ parameters:
+ - in: path
+ name: customerTokenId
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ format: uuid
+ example: a0ef57fa-395c-4a03-96e9-234c26dccea9
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ description: The JWT of the logged in customer (in case of a web shop).
+ post:
+ tags:
+ - Order Creation v2
+ summary: Add personal account data to a customer token. P1
+ description: Add personal account data to a customer token
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ summary: Add personal account data to a customer token v2.2
+ description: Add personal account data to a customer token v2.2
+ value:
+ {
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 12,
+ "serviceReferenceId": null,
+ "amount": null,
+ "ovpasNumber": null,
+ "verificationCode": null,
+ "personalAccountData":{
+ "personalAccountDataId": "d9021fdd-6e83-45c0-9aef-71680f0b4e74",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ }
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomers": null
+ }
+ /personalaccountdata/{personalAccountDataId}:
+ parameters:
+ - in: path
+ name: personalAccountDataId
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ format: uuid
+ example: d9021fdd-6e83-45c0-9aef-71680f0b4e74
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ description: The JWT of the logged in customer (in case of a web shop).
+ patch:
+ tags:
+ - Order Creation v2
+ summary: Update personal account data. P2
+ description: Update personal account data
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ summary: Update personal account data v2.2
+ description: Update personal account data v2.2
+ value:
+ {
+ "birthdate": "2010-01-01",
+ }
+ responses:
+ "201":
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 12,
+ "serviceReferenceId": null,
+ "amount": null,
+ "ovpasNumber": null,
+ "verificationCode": null,
+ "personalAccountData":{
+ "personalAccountDataId": "d9021fdd-6e83-45c0-9aef-71680f0b4e74",
+ "name": "Jan de Vries",
+ "birthdate": "2010-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" ,
+ "challengeTypeId": 1,
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ }
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "invalid",
+ "additionalRemarks": [],
+ "validationErrors": [
+ {
+ "detail": "Product is for gboAgeProfile 19-65, given gboAgeProfile is 12-19",
+ "pointer": "#/customerTokens/878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e/personalAccountData/birthdate",
+ },
+ ],
+ },
+ ],
+ "payments": [],
+ "orderCustomers": null
+ }
+ delete:
+ tags:
+ - Order Creation v2
+ summary: Delete personal account data. P2
+ description: Delete personal account data
+ responses:
+ "200":
+ description: Ok
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 12,
+ "serviceReferenceId": null,
+ "amount": null,
+ "ovpasNumber": null,
+ "verificationCode": null,
+ "personalAccountData": null
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomers": null
+ }
/orders/{orderId}/payments:
parameters:
- in: path
@@ -1194,14 +3340,14 @@ paths:
format: uuid
example: a0ef57fa-395c-4a03-96e9-234c26dccea9
- in: header
- name: X-HM-JWT-AUTH-HEADER
+ name: X-HTM-JWT-AUTH-HEADER
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
description: The JWT of the logged in customer (in case of a web shop).
post:
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Add a payment to an existing order.
description: Add a payment to an existing order.
requestBody:
@@ -1209,35 +3355,52 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "createdOn": "2024-03-22T09:00:00",
- "amountDebit": 121,
- "paymentMethodId": 1,
- "touchPointId": 1,
- "isRefund": false,
- "htmPaymentReference": "HTM-1234",
- "pspPaymentReference": "Buckaroo-1234",
- "paymentStatuses":
- [
- {
- "createdOn": "2024-03-22T09:00:00",
- "statusCode": "190",
- "statusDescription": "Success",
- "statusSubCode": "S001",
- "statusSubDescription": "PaymentSuccessFul",
- },
- ],
- "mandateInput":
+ examples:
+ v2.2:
+ summary: 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:
{
- "directDebitMandateTypeId": 1,
"createdOn": "2024-03-22T09:00:00",
- "bic": "RABONL2U",
- "iban": "NL44RABO0123456789",
- "ascription": "J. de Vries",
- "place": "Den Haag",
- },
- }
+ "amountDebit": 121,
+ "paymentMethodId": 1,
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ }
+ v1.2:
+ summary: Order creation v1.2
+ description: Order creation v1.2
+ value:
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethodId": 1,
+ "touchpointId": 1,
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "mandateInput":
+ {
+ "directDebitMandateTypeId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ }
responses:
"201":
description: Created
@@ -1245,7 +3408,212 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" }
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "99137e30-2bf5-4c9b-95f0-ca432adcae5f",
+ "orderStatus":
+ { "orderStatusId": 2, "name": "awaitingPayment" },
+ "createdOn": "2024-03-22T09:05:00",
+ "description": "Betaling is geinitieerd",
+ },
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ {
+ "orderLineId": "2cb04b38-e9a8-465a-a273-261c55a21b71",
+ "externalOrderLineId": null,
+ "productId": 2,
+ "productName": "HTM Maandkorting 40%",
+ "fikoArticleNumber": "6610",
+ "productDescription": "HTM Maandkorting 40%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 42,
+ "amountExclTax": 200,
+ "amountInclTax": 242,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 4,
+ "serviceReferenceId": null,
+ "amount": null,
+ "ovpasNumber": null,
+ "verificationCode": null,
+ "personalAccountData": null,
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments":
+ [
+ {
+ "paymentId": "1a973c85-7a96-41b5-bbf2-7919d6a6db15",
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethod":
+ {
+ "paymentMethodId": 1,
+ "name": "ideal",
+ "provider": "Buckaroo",
+ },
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": null,
+ "paymentStatuses": [],
+ "mandateInput": null,
+ },
+ ],
+ "orderCustomer":
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "orderCustomerAddressId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "addressType":
+ { "addressTypeId": 3, "name": "Billing" },
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ v1.2:
+ value: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" }
/payments/{paymentId}:
parameters:
- in: path
@@ -1258,14 +3626,14 @@ paths:
format: uuid
example: a0ef57fa-395c-4a03-96e9-234c26dccea9
- in: header
- name: X-HM-JWT-AUTH-HEADER
+ name: X-HTM-JWT-AUTH-HEADER
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
description: The JWT of the logged in customer (in case of a web shop).
patch:
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Update a payment on an existing order.
description: Update a payment on an existing order.
requestBody:
@@ -1273,11 +3641,42 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "htmPaymentReference": "HTM-1234",
- "pspPaymentReference": "Buckaroo-1234",
- }
+ examples:
+ v2.2:
+ summary: Update payment v2.2
+ description: Update payment v2.2
+ value:
+ {
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "mandateInput":
+ {
+ "directDebitMandateTypeId": 1,
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ }
+ v1.2:
+ summary: Order payment update v1.2
+ description: Order payment update v1.2
+ value:
+ {
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ }
responses:
"200":
description: OK
@@ -1285,7 +3684,404 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" }
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments":
+ [
+ {
+ "paymentId": "1a973c85-7a96-41b5-bbf2-7919d6a6db15",
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethod":
+ {
+ "paymentMethodId": 1,
+ "name": "ideal",
+ "provider": "Buckaroo",
+ },
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "paymentStatusId": "42eee610-1a17-4f02-be14-7e25d69d35f3",
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "?",
+ "statusDescription": "Initiated",
+ "statusSubCode": "?",
+ "statusSubDescription": "PaymentInitiated",
+ },
+ {
+ "paymentStatusId": "b9893367-0cab-45a8-89f9-03a14d6cd138",
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "791",
+ "statusDescription": "Pending processing",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PendingProcessing",
+ },
+ {
+ "paymentStatusId": "9edfb9ad-f5b3-4edc-8216-7cd0070b03f3",
+ "createdOn": "2024-03-22T09:01:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "mandateInput":
+ {
+ "mandateInputId": "7e3c7b4e-2b4d-4e0b-8f8b-0e8d9f0a2c3b",
+ "directDebitMandateType":
+ {
+ "directDebitMandateTypeId": 1,
+ "name": "import",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ },
+ ],
+ "orderCustomers":
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "orderCustomerAddressId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "addressTypeId":
+ { "addressTypeId": 3, "name": "Billing" },
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ v1.2:
+ value: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" }
+ v9.9 (Nick Pows):
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": "be8160b3-a7f7-4a63-ad63-09503b2fc4a3",
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": "0211f11b-270e-43f2-8ecc-3fe85773a0a2",
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": "2024-03-22T09:00:00",
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses":
+ [
+ {
+ "orderAccountingStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "accountingStatus":
+ { "accountingStatusId": 1, "name": "open" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "validationResult": "invalid",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors":
+ [
+ {
+ "detail": "Startdate of this product should be at most 60 days in the future.",
+ "pointer": "#/0/startDate",
+ },
+ ],
+ },
+ ],
+ "payments":
+ [
+ {
+ "paymentId": "1a973c85-7a96-41b5-bbf2-7919d6a6db15",
+ "createdOn": "2024-03-22T09:00:00",
+ "amountDebit": 121,
+ "paymentMethod":
+ {
+ "paymentMethodId": 1,
+ "name": "ideal",
+ "provider": "Buckaroo",
+ },
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "isRefund": false,
+ "htmPaymentReference": "HTM-1234",
+ "pspPaymentReference": "Buckaroo-1234",
+ "paymentStatuses":
+ [
+ {
+ "paymentStatusId": "42eee610-1a17-4f02-be14-7e25d69d35f3",
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "?",
+ "statusDescription": "Initiated",
+ "statusSubCode": "?",
+ "statusSubDescription": "PaymentInitiated",
+ },
+ {
+ "paymentStatusId": "b9893367-0cab-45a8-89f9-03a14d6cd138",
+ "createdOn": "2024-03-22T09:00:00",
+ "statusCode": "791",
+ "statusDescription": "Pending processing",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PendingProcessing",
+ },
+ {
+ "paymentStatusId": "9edfb9ad-f5b3-4edc-8216-7cd0070b03f3",
+ "createdOn": "2024-03-22T09:01:00",
+ "statusCode": "190",
+ "statusDescription": "Success",
+ "statusSubCode": "S001",
+ "statusSubDescription": "PaymentSuccessful",
+ },
+ ],
+ "mandateInput":
+ {
+ "mandateInputId": "1d6626cd-b93b-4ea6-85d5-a8e3a24a2725",
+ "directDebitMandateType":
+ {
+ "directDebitMandateTypeId": 1,
+ "name": "import",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "bic": "RABONL2U",
+ "iban": "NL44RABO0123456789",
+ "ascription": "J. de Vries",
+ "place": "Den Haag",
+ },
+ },
+ ],
+ "orderCustomers":
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "orderCustomerAddressId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "addressTypeId":
+ { "addressTypeId": 3, "name": "Billing" },
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
/orders/{orderId}/ordercustomers:
parameters:
- in: path
@@ -1298,14 +4094,14 @@ paths:
format: uuid
example: a0ef57fa-395c-4a03-96e9-234c26dccea9
- in: header
- name: X-HM-JWT-AUTH-HEADER
+ name: X-HTM-JWT-AUTH-HEADER
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
description: The JWT of the logged in customer (in case of a web shop).
post:
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Add a customer to an existing order.
description: Add a customer to an existing order.
requestBody:
@@ -1313,26 +4109,53 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- "orderCustomerAddresses":
- [
- {
- "addressTypeId": 1,
- "street": "Kon. Julianaplein",
- "houseNumber": 10,
- "houseNumberSuffix": "a",
- "postalCode": "2595 AA",
- "city": "Den Haag",
- "country": "NL",
- },
- ],
- }
+ examples:
+ v2.2:
+ summary: Add order customer v2.2
+ description: Add order customer v2.2
+ value:
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "addressTypeId": 3,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ }
+ v1.2:
+ summary: Add order customer v1.2
+ description: Add order customer v1.2
+ value:
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ }
responses:
"201":
description: Created
@@ -1340,8 +4163,135 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" }
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenTypeId":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomer":
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "orderCustomerAddressId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "addressType":
+ { "addressTypeId": 3, "name": "Billing" },
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ v1.2:
+ value:
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ }
/ordercustomers/{orderCustomerId}:
patch:
parameters:
@@ -1355,13 +4305,13 @@ paths:
format: uuid
example: a0ef57fa-395c-4a03-96e9-234c26dccea9
- in: header
- name: X-HM-JWT-AUTH-HEADER
+ name: X-HTM-JWT-AUTH-HEADER
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
description: The JWT of the logged in customer (in case of a web shop).
tags:
- - Order Creation v2.1
+ - Order Creation v2
summary: Update a customer on an existing order.
description: Update a customer on an existing order.
requestBody:
@@ -1369,23 +4319,633 @@ paths:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
- example:
- {
- "birthname": "Jan",
- "surname": "Vries",
- "prefix": "de",
- "emailAddress": "jandevries@outlook.com",
- "dateOfBirth": "1970-01-01",
- }
+ examples:
+ v2.2:
+ summary: Update order customer v2.2
+ description: Update order customer v2.2
+ value:
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ }
+ v1.2:
+ summary: Update order customer v1.2
+ description: Update order customer v1.2
+ value:
+ {
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ }
responses:
"200":
description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenTypeId":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "valid",
+ "additionalRemarks": [],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomer":
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "orderCustomerAddressId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "addressType":
+ { "addressTypeId": 3, "name": "Billing" },
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ v1.2:
+ value:
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ }
+ /ordercustomers/{orderCustomerId}/orderCustomerAddress:
+ post:
+ parameters:
+ - in: path
+ name: orderCustomerId
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ format: uuid
+ example: a0ef57fa-395c-4a03-96e9-234c26dccea9
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ description: The JWT of the logged in customer (in case of a web shop).
+ tags:
+ - Order Creation v2
+ summary: Create a customer address for an existing order.
+ description: Create a customer address for an existing order.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ summary: Add order customer address v2.2
+ description: Add order customer address v2.2
+ value:
+ {
+ "addressTypeId": 3,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ }
+ v1.2:
+ summary: Order customer address create v1.2
+ description: Order customer address create v1.2
+ value:
+ {
+ "addressTypeId": 1,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ }
+ responses:
+ "201":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "preliminary",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomer":
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "orderCustomerAddressId": "a0ef57fa-395c-4a03-96e9-234c26dccea9",
+ "addressType":
+ { "addressTypeId": 3, "name": "Billing" },
+ "street": "Kon. Julianaplein",
+ "houseNumber": 10,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ /orderCustomerAddress/{orderCustomerAddressId}:
+ patch:
+ parameters:
+ - in: path
+ name: orderCustomerAddressId
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ format: uuid
+ example: a0ef57fa-395c-4a03-96e9-234c26dccea9
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ description: The JWT of the logged in customer (in case of a web shop).
+ tags:
+ - Order Creation v2
+ summary: Update a customer address for an existing order.
+ description: Update a customer address for an existing order.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ summary: Update order customer address v2.2
+ description: Update order customer address v2.2
+ value:
+ {
+ "addressTypeId": 3,
+ "street": "Kon. Julianaplein",
+ "houseNumber": 101,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ }
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.2:
+ value:
+ {
+ "validContents": false,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 121,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines":
+ [
+ {
+ "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "externalOrderLineId": null,
+ "productId": 1,
+ "productName": "HTM Maandkorting 20%",
+ "fikoArticleNumber": "6609",
+ "productDescription": "HTM Maandkorting 20%",
+ "taxCode": "V21",
+ "taxPercentage": 21.0000,
+ "taxAmount": 21,
+ "amountExclTax": 100,
+ "amountInclTax": 121,
+ "quantity": 1,
+ "orderLineTerms":
+ [
+ {
+ "orderLineTermsId": "cccada2c-d5ea-48ab-b4be-f590e16b5468",
+ "termsUrl": "generalTermsAndConditions.pdf",
+ },
+ {
+ "orderLineTermsId": "bd76f723-9308-4629-a291-4c4fafd7ed87",
+ "termsUrl": "productTermsAndConditions.pdf",
+ },
+ ],
+ "createdOn": "2024-03-22T09:00:00",
+ "validFrom": "2024-03-22T09:00:00",
+ "validUntil": null,
+ "orderLineStatus":
+ { "orderLineStatusId": 1, "name": "pending" },
+ "customerTokens":
+ [
+ {
+ "customerTokenId": "53a23772-0631-4eb8-b06a-8b4b74d120d5",
+ "tokenType":
+ { "tokenTypeId": 1, "name": "EMV" },
+ "ovPayTokenId": 1,
+ "serviceReferenceId": "NLOV1234567ABCDEFG",
+ "amount": 34,
+ "ovpasNumber": "OV34567",
+ "verificationCode": "A7H6",
+ "personalAccountData":
+ {
+ "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47",
+ "name": "Jan de Vries",
+ "birthdate": "1970-01-01",
+ "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC",
+ "challengeType":
+ {
+ "challengeTypeId": 1,
+ "name": "email",
+ },
+ "oneTimePassword": "H5Iiz3JTaQeIV8p",
+ },
+ },
+ ],
+ "orderAccountingStatuses": [],
+ "validationResult": "preliminary",
+ "additionalRemarks":
+ [
+ {
+ "code": "MANDATE_REQUIRED",
+ "parameter": "directDebitMandateId",
+ },
+ ],
+ "validationErrors": [],
+ },
+ ],
+ "payments": [],
+ "orderCustomer":
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "orderCustomerAddresses":
+ [
+ {
+ "orderCustomerAddressId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "addressType":
+ { "addressTypeId": 3, "name": "Billing" },
+ "street": "Kon. Julianaplein",
+ "houseNumber": 101,
+ "houseNumberSuffix": "a",
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "NL",
+ },
+ ],
+ },
+ }
+ delete:
+ tags:
+ - Order Creation v2
+ summary: Delete an existing order address.
+ description: Delete an existing order address.
+ parameters:
+ - in: path
+ name: orderCustomerAddressId
+ required: true
+ style: simple
+ explode: false
+ schema:
+ type: string
+ format: uuid
+ example: a0ef57fa-395c-4a03-96e9-234c26dccea9
+ - in: header
+ name: X-HTM-JWT-AUTH-HEADER
+ schema:
+ type: string
+ example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+ description: The JWT of the logged in customer (in case of a web shop).
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/unavailable"
+ examples:
+ v2.1:
+ value:
+ {
+ "validContents": true,
+ "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df",
+ "externalOrderId": null,
+ "orderNumber": "ORD-123456",
+ "customerProfileId": 1337,
+ "totalAmount": 0,
+ "touchPoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailerId": 1001,
+ },
+ "language":
+ {
+ "languageId": 1,
+ "name": "Nederlands",
+ "iso639Code": "nl-NL",
+ "ietfCode": "nl",
+ },
+ "createdOn": "2024-03-22T09:00:00",
+ "lastUpdatedOn": "2024-03-22T09:00:00",
+ "order_OrderStatuses":
+ [
+ {
+ "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f",
+ "orderStatus":
+ { "orderStatusId": 1, "name": "concept" },
+ "createdOn": "2024-03-22T09:00:00",
+ "description": "Order is aangemaakt",
+ },
+ ],
+ "orderLines": [],
+ "payments": [],
+ "orderCustomer":
+ {
+ "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073",
+ "birthname": "Jan",
+ "surname": "Vries",
+ "prefix": "de",
+ "emailAddress": "jandevries@outlook.com",
+ "dateOfBirth": "1970-01-01",
+ "addresses": null,
+ },
+ }
+ "400":
+ description: Bad request
content:
application/json:
schema:
$ref: "#/components/schemas/unavailable"
example:
- { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" }
+ {
+ "type": "https://htm.nl/api/v1/probs/validationerror",
+ "title": "Your request is not valid.",
+ "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.",
+ "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
+ "errors":
+ [
+ {
+ "detail": "Product requires product with productId=2",
+ "pointer": "#/1/orderLine",
+ "orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d",
+ "productId": 3,
+ },
+ ],
+ }
/orders/{orderId}/fulfill:
parameters:
- in: path
@@ -1398,14 +4958,14 @@ paths:
format: uuid
example: a0ef57fa-395c-4a03-96e9-234c26dccea9
- in: header
- name: X-HM-JWT-AUTH-HEADER
+ name: X-HTM-JWT-AUTH-HEADER
schema:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
description: The JWT of the logged in customer (in case of a web shop).
post:
tags:
- - Order Fulfillment v2.1
+ - Order Fulfill v2
summary: Fulfill an order without creating or updating the order as a resource.
description: Fulfill an order without creating or updating the order as a resource.
responses:
diff --git a/src/openapi/pad/padp-poc-openapi.yaml b/src/openapi/pad/padp-poc-openapi.yaml
new file mode 100644
index 0000000..481e878
--- /dev/null
+++ b/src/openapi/pad/padp-poc-openapi.yaml
@@ -0,0 +1,760 @@
+openapi: 3.0.1
+info:
+ title: PadpReferenceApi
+ version: '1.0'
+paths:
+ /poc/encrypt-decrypt-poc:
+ get:
+ tags:
+ - Encrypt/decrypt POC
+ summary: Encrypt/Decrypt POC
+ operationId: EncryptDecryptPoc
+ parameters:
+ - name: textToEncrypt
+ in: header
+ required: true
+ schema:
+ type: string
+ - name: encryptedEphemeralKey
+ in: query
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ text/plain:
+ schema:
+ type: string
+ /poc/encrypt-poc:
+ get:
+ tags:
+ - Encrypt/decrypt POC
+ summary: Encrypt POC
+ operationId: EncryptPoc
+ parameters:
+ - name: textToEncrypt
+ in: header
+ required: true
+ schema:
+ type: string
+ - name: encryptedEphemeralKey
+ in: query
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ text/plain:
+ schema:
+ type: string
+ /poc/decrypt-poc:
+ get:
+ tags:
+ - Encrypt/decrypt POC
+ summary: Decrypt POC
+ operationId: DecryptPoc
+ parameters:
+ - name: textToDecrypt
+ in: header
+ required: true
+ schema:
+ type: string
+ - name: encryptedEphemeralKey
+ in: query
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ text/plain:
+ schema:
+ type: string
+ /idp/b2b-access-token:
+ get:
+ tags:
+ - PADP Reference API
+ summary: API 1020 - Get B2B Access Token
+ description: Returns a client access token, needed for most other PADP APIs.
+ operationId: GetB2bAccessToken
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/B2bAccessToken'
+ '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-image-from-base64:
+ get:
+ tags:
+ - PADP Reference API
+ summary: Get rendered image from Base64 encoded String
+ operationId: GetImageFromBase64
+ parameters:
+ - name: base64String
+ in: header
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ image/jpeg:
+ schema:
+ $ref: '#/components/schemas/FileContentHttpResult'
+ /personal-data/{xtat}:
+ post:
+ tags:
+ - PADP Reference API
+ summary: API 1201 - Create Personal Data - First create an ephemeral key using API 1210!
+ description: First create an ephemeral key using API 1210!
+ operationId: CreatePersonalData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ - name: email
+ in: query
+ description: Email address to be used for OTP challenges
+ required: true
+ schema:
+ type: string
+ - name: name
+ in: query
+ description: Should be at least two words (first name and last name)
+ schema:
+ type: string
+ - name: birthDate
+ in: query
+ description: Should be a date between 1900-01-01 and now, in the format YYYY-MM-DD
+ schema:
+ type: string
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ photo:
+ type: string
+ description: Should be a JPG image, of max. 512KB and resolution between 520x520 and 720x720
+ format: binary
+ encoding:
+ photo:
+ style: form
+ 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:
+ - PADP Reference API
+ summary: API 1202 - Get Personal Data- First perform an OTP challenge using API 1206 and 1207!
+ description: First perform an OTP challenge using API 1206 and 1207!
+ operationId: GetPersonalData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PersonalData'
+ '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'
+ delete:
+ tags:
+ - PADP Reference API
+ summary: API 1204 - Delete Personal Data - First perform an OTP challenge using API 1206 and 1207!
+ description: First perform an OTP challenge using API 1206 and 1207!
+ operationId: DeletePersonalData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/DeletePersonalDataResponse'
+ '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'
+ put:
+ tags:
+ - PADP Reference API
+ summary: API 1205 - Update Personal Data - First perform an OTP challenge using API 1206 and 1207!
+ description: First perform an OTP challenge using API 1206 and 1207!Performs a complete replacement; empty request parameters will result in the corresponding PADP attribute being deleted.
+ operationId: UpdatePersonalData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ - name: skipUpdateCounter
+ in: query
+ required: true
+ schema:
+ type: boolean
+ - name: name
+ in: query
+ description: Should be at least two words (first name and last name)
+ schema:
+ type: string
+ - name: birthDate
+ in: query
+ description: Should be a date between 1900-01-01 and now, in the format YYYY-MM-DD
+ schema:
+ type: string
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ photo:
+ type: string
+ description: Should be a JPG image, of max. 512KB and resolution between 520x520 and 720x720
+ format: binary
+ encoding:
+ photo:
+ style: form
+ responses:
+ '200':
+ description: OK
+ /personal-data/{xtat}/decrypted:
+ get:
+ tags:
+ - PADP Reference API
+ summary: API 1202 - Get Personal Data AND decrypt response - First perform an OTP challenge using API 1206 and 1207!
+ description: First perform an OTP challenge using API 1206 and 1207!
+ operationId: GetDecryptedPersonalData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ 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'
+ /personal-data/{xtat}/generate-otp:
+ get:
+ tags:
+ - PADP Reference API
+ summary: API 1206 - Generate OTP
+ operationId: GenerateOtp
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ 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}/validate-otp:
+ get:
+ tags:
+ - PADP Reference API
+ summary: API 1207 - Validate OTP
+ operationId: ValidateOtp
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ - name: otp
+ in: query
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserAccessToken'
+ '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}/encrypted-update-init:
+ get:
+ tags:
+ - PADP Reference API
+ summary: API 1210 - Create Ephemeral Key
+ operationId: CreateEphemeralKey
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EphemeralKey'
+ '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:
+ - PADP Reference API
+ summary: API 1211 - Get Administrative Data
+ operationId: GetAdministrativeData
+ parameters:
+ - name: xtat
+ in: path
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AdministrativeData'
+ '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'
+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
+ B2bAccessToken:
+ type: object
+ properties:
+ access_token:
+ type: string
+ nullable: true
+ expires_in:
+ type: integer
+ format: int32
+ refresh_expires_in:
+ type: integer
+ format: int32
+ refresh_token:
+ type: string
+ nullable: true
+ token_type:
+ type: string
+ nullable: true
+ not-before-policy:
+ type: integer
+ format: int32
+ scope:
+ type: string
+ nullable: true
+ BE_ID:
+ type: string
+ nullable: true
+ additionalProperties: false
+ ByteReadOnlyMemory:
+ type: object
+ properties:
+ length:
+ type: integer
+ format: int32
+ readOnly: true
+ isEmpty:
+ type: boolean
+ readOnly: true
+ span:
+ $ref: '#/components/schemas/ByteReadOnlySpan'
+ additionalProperties: false
+ ByteReadOnlySpan:
+ type: object
+ properties:
+ length:
+ type: integer
+ format: int32
+ readOnly: true
+ isEmpty:
+ type: boolean
+ readOnly: true
+ additionalProperties: false
+ Data:
+ type: object
+ properties:
+ name:
+ type: string
+ nullable: true
+ birthdate:
+ type: string
+ nullable: true
+ photo:
+ type: string
+ nullable: true
+ additionalProperties: false
+ DecryptedData:
+ type: object
+ properties:
+ decryptedName:
+ type: string
+ nullable: true
+ decryptedBirthdate:
+ type: string
+ nullable: true
+ decryptedPhoto:
+ type: string
+ description: Base64 encoded photo
+ format: byte
+ nullable: true
+ additionalProperties: false
+ DecryptedPersonalData:
+ type: object
+ properties:
+ decryptedData:
+ $ref: '#/components/schemas/DecryptedData'
+ encryptedData:
+ $ref: '#/components/schemas/PersonalData'
+ additionalProperties: false
+ DeletePersonalDataResponse:
+ type: object
+ properties:
+ deletedAttributes:
+ type: array
+ items:
+ type: string
+ nullable: true
+ additionalProperties: false
+ EntityTagHeaderValue:
+ type: object
+ properties:
+ tag:
+ $ref: '#/components/schemas/StringSegment'
+ isWeak:
+ type: boolean
+ readOnly: true
+ additionalProperties: false
+ EphemeralKey:
+ type: object
+ properties:
+ ephemeralKeyAlias:
+ type: string
+ nullable: true
+ encryptedEphemeralKey:
+ type: string
+ nullable: true
+ 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
+ FileContentHttpResult:
+ type: object
+ properties:
+ contentType:
+ type: string
+ nullable: true
+ readOnly: true
+ fileDownloadName:
+ type: string
+ nullable: true
+ readOnly: true
+ lastModified:
+ type: string
+ format: date-time
+ nullable: true
+ readOnly: true
+ entityTag:
+ $ref: '#/components/schemas/EntityTagHeaderValue'
+ enableRangeProcessing:
+ type: boolean
+ readOnly: true
+ fileLength:
+ type: integer
+ format: int64
+ nullable: true
+ readOnly: true
+ fileContents:
+ $ref: '#/components/schemas/ByteReadOnlyMemory'
+ additionalProperties: false
+ Metadata:
+ type: object
+ properties:
+ encryptedEphemeralKey:
+ type: string
+ nullable: true
+ additionalProperties: false
+ OtpResponse:
+ type: object
+ properties:
+ maskedEmailAddress:
+ type: string
+ nullable: true
+ additionalProperties: false
+ PersonalData:
+ type: object
+ properties:
+ metadata:
+ $ref: '#/components/schemas/Metadata'
+ data:
+ $ref: '#/components/schemas/Data'
+ additionalProperties: false
+ StringSegment:
+ type: object
+ properties:
+ buffer:
+ type: string
+ nullable: true
+ offset:
+ type: integer
+ format: int32
+ readOnly: true
+ length:
+ type: integer
+ format: int32
+ readOnly: true
+ value:
+ type: string
+ nullable: true
+ readOnly: true
+ hasValue:
+ type: boolean
+ readOnly: true
+ additionalProperties: false
+ UserAccessToken:
+ type: object
+ properties:
+ accessToken:
+ type: string
+ nullable: true
+ additionalProperties: false
diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml
new file mode 100644
index 0000000..2bc6a50
--- /dev/null
+++ b/src/openapi/products/SE-products-SE.yaml
@@ -0,0 +1,2517 @@
+openapi: 3.0.1
+info:
+ title: Service Engine APIs for Products
+ description: |-
+ Service Engine APIs for HTM products. These are NOT the CRUD APIs to access raw data in the database.
+ To be used by touchpoints to get information about HTM products they are allowed to see and/or sell.
+ version: "1.0"
+servers:
+ - url: https://services.acc.api.htm.nl/abt/abtserviceengine/1.0
+tags:
+ - name: ServiceEngine Products
+ description: |-
+ To be used by touchpoints to get information about HTM products they are allowed to see and/or sell.
+paths:
+ /products:
+ get:
+ tags:
+ - ServiceEngine Products
+ summary: Get a list of all HTM products that a touchpoint is allowed to see and/or sell
+ description: |-
+ Get a list of all HTM products that refers to a given parentProductId (or without parent, if not specified),
+ and that the calling touchpoint is allowed to see and/or sell. \
+ Essentially, this means that only products that have active sellingPeriods for touchpoints within the same
+ retailer as the calling touchpoint are returned. \
+ Only a few details are returned per product - use the `GET /products/{productId}` endpoint
+ to get more details. \
+ Nb: touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2.
+ parameters:
+ - name: parentProductId
+ in: query
+ required: false
+ description: |-
+ Only return products that refer to the given parentProductId. \
+ Returns parent-products (i.e. products with parentProductId = null) if left empty.
+ schema:
+ type: integer
+ example: 1
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ProductPayloadListResponse"
+ examples:
+ No products / Empty list:
+ summary: No products / Empty list
+ description: No products
+ value: { "Entries": [] }
+ List containing one product with many null attributes:
+ summary: List containing one product with many null attributes
+ description: |-
+ Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \
+ **Empty lists/arrays show up as "[]", not as null!**
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 99,
+ "productName": null,
+ "productDescription": null,
+ "productCategory": null,
+ "tokenTypes": [],
+ "sellableTouchpointIds": [],
+ "amountInclTax": null,
+ "imageReference": null,
+ "productPageUrl": null,
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/99",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing one product with 4 currently active SellingPeriods (called by touchpointId 1):
+ summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1)
+ description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 2,
+ "productName": "HTM dagkaart",
+ "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
+ "productCategory":
+ {
+ "productCategoryId": 5,
+ "isTravelProduct": false,
+ "name": "Barcode",
+ },
+ "tokenTypes": [],
+ "sellableTouchpointIds": [1, 2],
+ "amountInclTax": 300,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/2",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing one product with 4 currently active SellingPeriods (called by touchpointId 3):
+ summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3)
+ description: Only two sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - the price for touchpointId 3 is returned
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 2,
+ "productName": "HTM dagkaart",
+ "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
+ "productCategory":
+ {
+ "productCategoryId": 5,
+ "isTravelProduct": false,
+ "name": "Barcode",
+ },
+ "tokenTypes": [],
+ "sellableTouchpointIds": [3, 4],
+ "amountInclTax": 300,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/2",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4):
+ summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4)
+ description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product.
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 49,
+ "productName": "HTM Regio Vrij",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "tokenTypes": [],
+ "sellableTouchpointIds": [3],
+ "amountInclTax": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/49",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4):
+ summary: List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4)
+ description: Product is returned
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 126,
+ "productName": "HTM-30001",
+ "productDescription": "Reis met 20% korting op je betaalpas bij HTM.",
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "sellableTouchpointIds": [3, 4],
+ "amountInclTax": 300,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/126",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing multiple products (called by touchpointId 3):
+ summary: List containing multiple products (called by touchpointId 3)
+ description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 2,
+ "productName": "HTM dagkaart",
+ "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
+ "productCategory":
+ {
+ "productCategoryId": 5,
+ "isTravelProduct": false,
+ "name": "Barcode",
+ },
+ "tokenTypes": [],
+ "sellableTouchpointIds": [3, 4],
+ "amountInclTax": 300,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/2",
+ "method": "GET",
+ },
+ },
+ },
+ {
+ "productId": 4,
+ "productName": "HTM 40% korting",
+ "productDescription": "Reis een maand lang met 40% korting!",
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "sellableTouchpointIds": [3, 4],
+ "amountInclTax": 800,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/4",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ /products/{productId}:
+ get:
+ tags:
+ - ServiceEngine Products
+ summary: Get more details for a single HTM product (including all child products), specified by the productId
+ description: |-
+ Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \
+ Only information that is allowed to be seen by the calling touchpoint is returned - i.e. only currently
+ active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices
+ for other touchpoints are thus filtered out. **Empty lists/arrays show up as "[]", not as null!**
+
+ The response contains a product tree, including all child products (`productVariants`) of the given
+ productId that the touchpoint is allowed to see and/or sell.
+
+ Touchpoints can only retrieve details for products that they are allowed to see and/or sell at the time of the request
+ (i.e. the product is returned in the products list response).
+ Thus, productVariants that are not available to the calling touchpoint are not returned in the response.
+
+ When no product exists for the given productId, a 404 Error response is returned.
+ parameters:
+ - name: productId
+ in: path
+ required: true
+ style: simple
+ description: Id of the product to get details for
+ schema:
+ type: integer
+ example: 1
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ProductPayloadResponse"
+ examples:
+ 90% Discount F&F pilot product (called by touchpointId 3):
+ summary: 90% Discount F&F pilot product (called by touchpointId 3)
+ description: |-
+ All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\
+ Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned.
+
+ This product has no child products, so its `productVariants` array is empty.
+ value:
+ {
+ "productId": 24,
+ "parentProductId": null,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "30901",
+ "tapConnectProductCode": null,
+ "productName": "HTM 90% Korting",
+ "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!",
+ "validityPeriod":
+ {
+ "validityPeriodId": 144,
+ "fromInclusive": "2023-12-31T23:00:00.000+00:00",
+ "toInclusive": "2028-11-25T04:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM 90% Discount",
+ "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM",
+ },
+ "marketSegments":
+ [{ "marketSegmentId": 1, "name": "B2C" }],
+ "allowedGboAgeProfiles": [],
+ "customerSegments": [],
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 1, "name": "guest" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems": [],
+ "requiredGboPersonalAttributes": [],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P7D",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": false,
+ "sendInvoice": false,
+ "imageReference": "https://www.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/media/hkfak1dj/pv-pilotproduct.pdf",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 78,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 78,
+ "amountExclTax": null,
+ "amountInclTax": 100,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ }
+ 20% Discount product (called by touchpointId 4):
+ summary: 20% Discount product (called by touchpointId 4)
+ description: |-
+ All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\
+ Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned.
+
+ This product has two `productVariants`: a single month variant and a subscription variant.\
+ The top-level parent contains `LayerInfo` to communicate what differentiates
+ the underlying product-variants.\
+ When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product.
+ value:
+ {
+ "productId": 126,
+ "parentProductId": null,
+ "layerInfo": {
+ "layerInfoId": 1,
+ "choiceKey": "isRenewable",
+ "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "30001",
+ "tapConnectProductCode": null,
+ "productName": "HTM 20% Korting",
+ "productDescription": "Reis met 20% korting op je betaalpas bij HTM.",
+ "validityPeriod":
+ {
+ "validityPeriodId": 236,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-25T04:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM 20% Discount",
+ "description": "Travel with 20% discount using your bank card with HTM.",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM",
+ },
+ "marketSegments":
+ [{ "marketSegmentId": 1, "name": "B2C" }],
+ "customerSegments": [],
+ "allowedGboAgeProfiles": [],
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 1, "name": "guest" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 7,
+ "customerDataItem": "ovPayToken",
+ },
+ ],
+ "requiredGboPersonalAttributes": [],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 172,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 4,
+ "name": "App (Infoplaza)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices": [],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants":
+ [
+ {
+ "productId": 119,
+ "parentProductId": 126,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "30001",
+ "tapConnectProductCode": null,
+ "productName": "HTM 20% Korting (losse maand)",
+ "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.",
+ "validityPeriod":
+ {
+ "validityPeriodId": 229,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-25T04:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM 20% Discount (single month)",
+ "description": "Travel with 20% discount for a month using your bank card with HTM.",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM",
+ },
+ "marketSegments":
+ [{ "marketSegmentId": 1, "name": "B2C" }],
+ "customerSegments": [],
+ "allowedGboAgeProfiles": [],
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 1, "name": "guest" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 7,
+ "customerDataItem": "ovPayToken",
+ },
+ ],
+ "requiredGboPersonalAttributes": [],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": false,
+ "sendInvoice": false,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 160,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 4,
+ "name": "App (Infoplaza)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 149,
+ "amountExclTax": null,
+ "amountInclTax": 300,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ {
+ "productId": 120,
+ "parentProductId": 126,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "30001",
+ "tapConnectProductCode": null,
+ "productName": "HTM 20% Korting (doorlopend abonnement)",
+ "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.",
+ "validityPeriod":
+ {
+ "validityPeriodId": 230,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-25T04:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM 20% Discount (subscription)",
+ "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM.",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM",
+ },
+ "marketSegments":
+ [{ "marketSegmentId": 1, "name": "B2C" }],
+ "customerSegments": [],
+ "allowedGboAgeProfiles": [],
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 1, "name": "guest" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 7,
+ "customerDataItem": "ovPayToken",
+ },
+ ],
+ "requiredGboPersonalAttributes": [],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": true,
+ "sendInvoice": true,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 159,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 4,
+ "name": "App (Infoplaza)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 148,
+ "amountExclTax": null,
+ "amountInclTax": 300,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ ],
+ }
+ Regio Vrij product and (part of) its productVariants (called by touchpointId 3):
+ summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3)
+ description: |-
+ All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product
+ and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example.
+
+ The full depth of the tree is included in the example for the HL62 Reduced Fare Variant.\
+ Each non-leaf-node product contains `LayerInfo` to communicate what differentiates the underlying product-variants.\
+ When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product.
+ value:
+ {
+ "productId": 49,
+ "parentProductId": null,
+ "layerInfo": {
+ "layerInfoId": 2,
+ "choiceKey": "regio",
+ "choiceLabel": "Kies de gewenste regio",
+ "isCustomChoice": true,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": null,
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
+ "validityPeriod":
+ {
+ "validityPeriodId": 161,
+ "fromInclusive": "2024-11-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region.",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ {
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64,
+ },
+ {
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 3, "name": "profile" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 99,
+ "fromInclusive": "2024-11-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices": [],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants":
+ [
+ {
+ "productId": 109,
+ "parentProductId": 49,
+ "layerInfo": {
+ "layerInfoId": 3,
+ "choiceKey": "allowedGboAgeProfiles",
+ "choiceLabel": "Wat is uw geboortedatum?",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 219,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ {
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64,
+ },
+ {
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 143,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices": [],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants":
+ [
+ {
+ "productId": 114,
+ "parentProductId": 109,
+ "layerInfo": {
+ "layerInfoId": 1,
+ "choiceKey": "isRenewable",
+ "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - Voltarief - HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 224,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - Full Fare - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64,
+ },
+ {
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes":
+ [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "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": 148,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 139,
+ "amountExclTax": null,
+ "amountInclTax": 5900,
+ "fromInclusive": "2024-12-31T23:00:00.000+00:00",
+ "toInclusive": "2025-12-31T23:00:00.000+00:00",
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ {
+ "productId": 115,
+ "parentProductId": 109,
+ "layerInfo": {
+ "layerInfoId": 1,
+ "choiceKey": "isRenewable",
+ "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - Reductietarief - HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 225,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - Reduced Fare - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes":
+ [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 149,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 140,
+ "amountExclTax": null,
+ "amountInclTax": 9700,
+ "fromInclusive": "2024-12-31T23:00:00.000+00:00",
+ "toInclusive": "2025-12-31T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants":
+ [
+ {
+ "productId": 116,
+ "parentProductId": 115,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 226,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes":
+ [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ {
+ "paymentMomentId": 1,
+ "name": "prepaid",
+ },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": false,
+ "sendInvoice": false,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 150,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 141,
+ "amountExclTax": null,
+ "amountInclTax": 9700,
+ "fromInclusive": "2024-12-31T23:00:00.000+00:00",
+ "toInclusive": "2025-12-31T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ {
+ "productId": 117,
+ "parentProductId": 115,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 227,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes":
+ [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ {
+ "paymentMomentId": 1,
+ "name": "prepaid",
+ },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": true,
+ "sendInvoice": true,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 151,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": 572309345923,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 142,
+ "amountExclTax": null,
+ "amountInclTax": 9700,
+ "fromInclusive": "2024-12-31T23:00:00.000+00:00",
+ "toInclusive": "2025-12-31T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ "productId": 112,
+ "parentProductId": 49,
+ "layerInfo": {
+ "layerInfoId": 3,
+ "choiceKey": "allowedGboAgeProfiles",
+ "choiceLabel": "Wat is uw geboortedatum?",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33618",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - HL65",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65",
+ "validityPeriod":
+ {
+ "validityPeriodId": 222,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - HL65",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ {
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64,
+ },
+ {
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "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": 146,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": 572309345923,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices": [],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ ],
+ }
+ "404":
+ description: "404"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rfc9457Response"
+ examples:
+ Non-existing productId:
+ summary: Non-existing productId
+ value:
+ {
+ "type": "https://www.htm.nl/api/v1/404Error",
+ "title": "Product not found.",
+ "detail": "No product found for productId: 1000.",
+ "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
+ "apiErrorCode": "htm.api.err.404.2",
+ }
+components:
+ schemas:
+ LayerInfoResponse:
+ type: object
+ description: >-
+ Gives information on the choice that the customer has to make, to enable the touchpoint
+ to proceed further "down the product-tree" by selecting (PATCH-ing) the correct product-variant.
+ LayerInfo is not a mandatory product-attribute, but it should always be present on all products for which
+ there are underlying products, i.e. for which `GET /products?parentProductId=...` returns a non-empty list.
+ When no LayerInfo is present, the touchpoint can conclude that the product is a final fulfillable product. \
+
+ **PMT should ensure that all non-leaf-node products (i.e. products that have underlying products) have a `layerInfoId`
+ referenced. If a product is found to be in violation of this rule, its attribtue `isValid` should be set to `false`.**
+ required:
+ - layerInfoId
+ - choiceKey
+ - choiceLabel
+ - isCustomChoice
+ properties:
+ layerInfoId:
+ example: 1
+ type: integer
+ choiceKey:
+ example: isRenewable
+ type: string
+ description: >-
+ Contains the JSON Key of the product-attribute that the customer has to make some
+ choice on (determined by PMT), so that te correct product-variant (one of the direct child-products) can be
+ selected by the touchpoint. For some decisions (like region), there is no product attribute, and thus
+ `isCustomChoice` will be set to `true`, and `choiceKey` can then be set to any string on which touchpoints
+ can also trigger behaviour if desired (think "region picker tool"). Therefore, reuse of `choiceKeys` should be
+ the goal, so touchoints can keep their triggers simple and prevent duplication of
+ similar `choiceKeys` to trigger the same behaviour.
+ choiceLabel:
+ example: Kies voor een doorlopend abonnement of een enkele termijn
+ type: string
+ description: >-
+ Contains a human-readable label for the choice that the customer has to make - this label
+ should be something that is easy to understand for the customer. Only one label (and thus, one language)
+ is supported; label translations should be handled by the touchpoint.
+ isCustomChoice:
+ example: false
+ type: boolean
+ description: >-
+ Indicates if the choice is a custom choice. If `false`, the PMT should validate that the `choiceKey` is a
+ differentiating attribute for the underlying product-variants. When the attribute denoted by the `choiceKey` is
+ the same for all underlying variants, PMT validation will fail and the product will become invalid (`isValid == false`)
+ until either the underlying products are updated, or a `LayerInfo` with `isCustomChoice == true` is configured.
+ GboAgeProfileResponse:
+ type: object
+ required:
+ - gboAgeProfileId
+ - name
+ - ageFromInclusive
+ - ageUntilInclusive
+ properties:
+ gboAgeProfileId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kind (4 t/m 11 jaar)
+ ageFromInclusive:
+ type: integer
+ description: The minimum age that the GBO age profile applies to
+ example: 4
+ ageUntilInclusive:
+ type: integer
+ description: The maximum age that the GBO age profile applies to
+ example: 11
+ ProductTranslationResponse:
+ type: object
+ required:
+ - language
+ properties:
+ language:
+ type: string
+ example: en
+ name:
+ type: string
+ example: HTM F&F 90% korting
+ description:
+ type: string
+ example: >-
+ Travel with 90% discount for a week during the first HTM F&F OVpay
+ pilot!
+ SellingPriceResponse:
+ type: object
+ required:
+ - sellingPriceId
+ - amountInclTax
+ - fromInclusive
+ - toInclusive
+ - internalPrice
+ properties:
+ sellingPriceId:
+ type: integer
+ example: 1
+ amountExclTax:
+ type: integer
+ example: null
+ taxCode:
+ type: string
+ example: "V09"
+ taxPercentage:
+ type: number
+ example: 9.0000
+ amountInclTax:
+ type: integer
+ example: 908
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-03-01T00:00:00.000+00:00"
+ toInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-06-01T00:00:00.000+00:00"
+ internalPrice:
+ type: number
+ example: 908.1234
+ PurchasePriceResponse:
+ type: object
+ required:
+ - purchasePriceId
+ - amountInclTax
+ - fromInclusive
+ - toInclusive
+ properties:
+ purchasePriceId:
+ type: integer
+ example: 1
+ amountExclTax:
+ type: integer
+ example: null
+ taxCode:
+ type: string
+ example: "V09"
+ taxPercentage:
+ type: number
+ example: 9.0000
+ amountInclTax:
+ type: integer
+ example: 908
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-03-01T00:00:00.000+00:00"
+ toInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-06-01T00:00:00.000+00:00"
+ SalesTouchpointResponse:
+ type: object
+ required:
+ - salesTouchpointId
+ - name
+ - isActive
+ - retailer
+ properties:
+ salesTouchpointId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: HTM App
+ isActive:
+ type: boolean
+ example: true
+ retailer:
+ type: object
+ required:
+ - retailerId
+ - name
+ properties:
+ retailerId:
+ type: integer
+ example: 1001
+ name:
+ type: string
+ example: HTM
+ street:
+ type: string
+ example: Kon. Julianaplein
+ number:
+ type: string
+ example: "10"
+ numberAddition:
+ type: string
+ example: a
+ postalCode:
+ type: string
+ example: 2595 AA
+ city:
+ type: string
+ example: Den Haag
+ country:
+ type: string
+ example: Nederland
+ emailAddress:
+ type: string
+ format: email
+ example: info@htm.nl
+ phoneNumber:
+ type: string
+ example: "09004864636"
+ taxId:
+ type: string
+ example: "09004864636"
+ imageReference:
+ type: string
+ example: https://htm.azure.net/abt/retailers/htm.svg
+ ProductPayloadListResponse:
+ type: object
+ required:
+ - Entries
+ properties:
+ Entries:
+ type: array
+ items:
+ type: object
+ required:
+ - productId
+ properties:
+ productId:
+ type: integer
+ example: 1
+ productName:
+ type: string
+ example: HTM pilot 90% korting
+ productDescription:
+ type: string
+ example: Reis met 90% korting gedurende de eerste F&F pilot!
+ productCategory:
+ type: object
+ required:
+ - productCategoryId
+ - isTravelProduct
+ - name
+ properties:
+ productCategoryId:
+ type: integer
+ example: 1
+ isTravelProduct:
+ type: boolean
+ example: true
+ name:
+ type: string
+ example: Kortingsabonnement
+ tokenTypes:
+ type: array
+ items:
+ type: object
+ required:
+ - tokenTypeId
+ - name
+ properties:
+ tokenTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: EMV
+ sellableTouchpointIds:
+ type: array
+ items:
+ type: integer
+ example: 3
+ amountInclTax:
+ type: number
+ example: 100
+ imageReference:
+ type: string
+ example: https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg
+ productPageUrl:
+ type: string
+ format: uri
+ example: https://www.htm.nl/nog-onbekende-product-pagina
+ _links:
+ type: object
+ properties:
+ get_details:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/abtserviceengine/1.0/products/1
+ method:
+ type: string
+ example: GET
+
+ ProductPayloadResponse:
+ type: object
+ required:
+ - productId
+ - productOwner
+ - isSellableAtHtm
+ properties:
+ productId:
+ type: integer
+ example: 1
+ parentProductId:
+ type: integer
+ example: 1
+ layerInfo:
+ $ref: '#/components/schemas/LayerInfoResponse'
+ fikoArticleNumber:
+ type: string
+ description: The article number of the product in FIKO
+ example: 1234
+ gboPackageTemplateId:
+ type: string
+ example: "30901"
+ tapConnectProductCode:
+ type: string
+ example: 1234AB
+ productName:
+ type: string
+ example: HTM pilot 90% korting
+ productDescription:
+ type: string
+ example: Reis met 90% korting gedurende de eerste F&F pilot!
+ validityPeriod:
+ type: object
+ required:
+ - validityPeriodId
+ - fromInclusive
+ - toInclusive
+ properties:
+ validityPeriodId:
+ type: integer
+ example: 1
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2024-09-03T10:01:34.000+00:00"
+ toInclusive:
+ type: string
+ format: date-time-offset
+ example: "2024-09-03T23:59:59.999+00:00"
+ productTranslations:
+ type: array
+ items:
+ $ref: "#/components/schemas/ProductTranslationResponse"
+ productOwner:
+ type: object
+ required:
+ - productOwnerId
+ - name
+ properties:
+ productOwnerId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: John Doe
+ organization:
+ type: string
+ example: HTM
+ marketSegmentse:
+ type: array
+ items:
+ type: object
+ required:
+ - marketSegmentId
+ - name
+ properties:
+ marketSegmentId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: B2C
+ customerSegments:
+ type: array
+ items:
+ type: object
+ required:
+ - customerSegmentId
+ - name
+ properties:
+ customerSegmentId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kind (4-11)
+ allowedGboAgeProfiles:
+ type: array
+ items:
+ $ref: "#/components/schemas/GboAgeProfileResponse"
+ productCategory:
+ type: object
+ required:
+ - productCategoryId
+ - name
+ - isTravelProduct
+ properties:
+ productCategoryId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kortingsabonnement
+ isTravelProduct:
+ type: boolean
+ example: true
+ requiredCustomerLevel:
+ type: object
+ required:
+ - requiredCustomerLevelId
+ - name
+ properties:
+ requiredCustomerLevelId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: anonymous
+ requiredProducts:
+ type: array
+ items:
+ type: object
+ required:
+ - requiredProductId
+ - productName
+ properties:
+ requiredProductId:
+ type: integer
+ example: 2
+ productName:
+ type: string
+ example: Product name
+ description:
+ type: string
+ description: Reason why the product is required
+ example: Description
+ incompatibleProducts:
+ type: array
+ items:
+ type: object
+ required:
+ - incompatibleProductId
+ - productName
+ properties:
+ incompatibleProductId:
+ type: integer
+ example: 4
+ productName:
+ type: string
+ example: Product name
+ description:
+ type: string
+ description: >-
+ Reason why the product is incompatible with the selected
+ product
+ example: Description
+ mandatoryCustomerDataItems:
+ type: array
+ items:
+ type: object
+ required:
+ - mandatoryCustomerDataItemId
+ - customerDataItem
+ properties:
+ mandatoryCustomerDataItemId:
+ type: integer
+ example: 3
+ customerDataItem:
+ type: string
+ example: dateOfBirth
+ requiredGboPersonalAttributes:
+ type: array
+ description: >-
+ List of required GBO personal attributes (PAD) - should not be
+ user-editable, but automatically populated by PMT backend, based on
+ the selected gboPackageTemplateId (if any)
+ items:
+ type: object
+ required:
+ - requiredGboPersonalAttributeId
+ - name
+ properties:
+ requiredGboPersonalAttributeId:
+ type: integer
+ example: 2
+ name:
+ type: string
+ example: BIRTHDATE
+ tokenTypes:
+ type: array
+ items:
+ type: object
+ required:
+ - tokenTypeId
+ - name
+ properties:
+ tokenTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: EMV
+ paymentMoment:
+ type: object
+ required:
+ - paymentMomentId
+ - name
+ properties:
+ paymentMomentId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: prepaid
+ serviceOptions:
+ type: array
+ items:
+ type: object
+ required:
+ - serviceOptionId
+ - action
+ properties:
+ serviceOptionId:
+ type: integer
+ example: 1
+ action:
+ type: string
+ example: cancellableTermAhead
+ description:
+ type: string
+ example: Per termijn vooruit opzegbaar
+ validityDuration:
+ type: string
+ format: duration
+ example: P1M
+ maxStartInFutureDuration:
+ type: string
+ format: duration
+ example: P6W
+ isRenewable:
+ type: boolean
+ example: true
+ sendInvoice:
+ type: boolean
+ example: false
+ imageReference:
+ type: string
+ format: uri
+ example: https://htm.azure.net/abt/products/product_1.svg
+ productPageUrl:
+ type: string
+ format: uri
+ example: https://www.htm.nl/nog-onbekende-product-pagina
+ termsUrl:
+ type: string
+ format: uri
+ example: https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina
+ isSellableAtHtm:
+ type: boolean
+ example: true
+ needsSolvencyCheckConsumer:
+ type: boolean
+ example: false
+ needsSolvencyCheckBusiness:
+ type: boolean
+ example: false
+ sellingPeriods:
+ type: array
+ items:
+ type: object
+ required:
+ - sellingPeriodId
+ - fromInclusive
+ - toInclusive
+ - salesTouchpoint
+ properties:
+ sellingPeriodId:
+ type: integer
+ example: 1
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-03-01T00:00:00.000+00:00"
+ toInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-06-01T00:00:00.000+00:00"
+ salesTouchpoint:
+ $ref: "#/components/schemas/SalesTouchpointResponse"
+ forbiddenPaymentMethods:
+ type: array
+ items:
+ type: object
+ required:
+ - forbiddenPaymentMethodId
+ - name
+ properties:
+ forbiddenPaymentMethodId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Credit Card
+ issuer:
+ type: string
+ example: American Express
+ sellingPrices:
+ type: array
+ items:
+ $ref: "#/components/schemas/SellingPriceResponse"
+ purchasePrices:
+ type: array
+ items:
+ $ref: "#/components/schemas/PurchasePriceResponse"
+ auditTrail:
+ type: array
+ items:
+ type: object
+ required:
+ - auditTrailId
+ - action
+ - user
+ - timestamp
+ properties:
+ auditTrailId:
+ type: integer
+ example: 1
+ action:
+ type: string
+ example: insert
+ user:
+ type: string
+ example: username
+ timestamp:
+ type: string
+ format: date-time-offset
+ example: "2024-09-03T10:01:34.000+00:00"
+ rfc9457Response:
+ type: object
+ properties:
+ type:
+ type: string
+ format: url
+ example: "https://www.htm.nl/api/v1/rfc9457Error"
+ title:
+ type: string
+ description: "Short summary of the error."
+ example: "The request is not valid."
+ detail:
+ type: string
+ description: "More detailed descriptionof the error."
+ example: "Some required parameters are missing."
+ instance:
+ type: string
+ description: "Unique identifier to correlate this specific error with logging in other applications."
+ example: "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c"
+ additionalProperty1:
+ type: string
+ description: "Example of an additional property value to be used for error reporting."
+ example: "additionalValue1"
+ additionalProperty2:
+ type: array
+ description: "Example of an additional property array to be used for error reporting."
+ items:
+ type: string
+ example:
+ - "additionalValue2-1"
+ - "additionalValue2-2"
diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml
new file mode 100644
index 0000000..3368437
--- /dev/null
+++ b/src/openapi/products/SE-products-TP.yaml
@@ -0,0 +1,2517 @@
+openapi: 3.0.1
+info:
+ title: Service Engine APIs for Products
+ description: |-
+ Service Engine APIs for HTM products. These are NOT the CRUD APIs to access raw data in the database.
+ To be used by touchpoints to get information about HTM products they are allowed to see and/or sell.
+ version: "1.0"
+servers:
+ - url: https://services.acc.api.htm.nl/abt/touchpoint/1.0
+tags:
+ - name: ServiceEngine Products
+ description: |-
+ To be used by touchpoints to get information about HTM products they are allowed to see and/or sell.
+paths:
+ /products:
+ get:
+ tags:
+ - ServiceEngine Products
+ summary: Get a list of all HTM products that a touchpoint is allowed to see and/or sell
+ description: |-
+ Get a list of all HTM products that refers to a given parentProductId (or without parent, if not specified),
+ and that the calling touchpoint is allowed to see and/or sell. \
+ Essentially, this means that only products that have active sellingPeriods for touchpoints within the same
+ retailer as the calling touchpoint are returned. \
+ Only a few details are returned per product - use the `GET /products/{productId}` endpoint
+ to get more details. \
+ Nb: touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2.
+ parameters:
+ - name: parentProductId
+ in: query
+ required: false
+ description: |-
+ Only return products that refer to the given parentProductId. \
+ Returns parent-products (i.e. products with parentProductId = null) if left empty.
+ schema:
+ type: integer
+ example: 1
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ProductPayloadListResponse"
+ examples:
+ No products / Empty list:
+ summary: No products / Empty list
+ description: No products
+ value: { "Entries": [] }
+ List containing one product with many null attributes:
+ summary: List containing one product with many null attributes
+ description: |-
+ Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \
+ **Empty lists/arrays show up as "[]", not as null!**
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 99,
+ "productName": null,
+ "productDescription": null,
+ "productCategory": null,
+ "tokenTypes": [],
+ "sellableTouchpointIds": [],
+ "amountInclTax": null,
+ "imageReference": null,
+ "productPageUrl": null,
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/99",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing one product with 4 currently active SellingPeriods (called by touchpointId 1):
+ summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1)
+ description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 2,
+ "productName": "HTM dagkaart",
+ "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
+ "productCategory":
+ {
+ "productCategoryId": 5,
+ "isTravelProduct": false,
+ "name": "Barcode",
+ },
+ "tokenTypes": [],
+ "sellableTouchpointIds": [1, 2],
+ "amountInclTax": 300,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/2",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing one product with 4 currently active SellingPeriods (called by touchpointId 3):
+ summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3)
+ description: Only two sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - the price for touchpointId 3 is returned
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 2,
+ "productName": "HTM dagkaart",
+ "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
+ "productCategory":
+ {
+ "productCategoryId": 5,
+ "isTravelProduct": false,
+ "name": "Barcode",
+ },
+ "tokenTypes": [],
+ "sellableTouchpointIds": [3, 4],
+ "amountInclTax": 300,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/2",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4):
+ summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4)
+ description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product.
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 49,
+ "productName": "HTM Regio Vrij",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "tokenTypes": [],
+ "sellableTouchpointIds": [3],
+ "amountInclTax": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/49",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4):
+ summary: List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4)
+ description: Product is returned
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 126,
+ "productName": "HTM-30001",
+ "productDescription": "Reis met 20% korting op je betaalpas bij HTM.",
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "sellableTouchpointIds": [3, 4],
+ "amountInclTax": 300,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/126",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ List containing multiple products (called by touchpointId 3):
+ summary: List containing multiple products (called by touchpointId 3)
+ description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned
+ value:
+ {
+ "Entries":
+ [
+ {
+ "productId": 2,
+ "productName": "HTM dagkaart",
+ "productDescription": "Reis een dag met het openbaar vervoer bij HTM",
+ "productCategory":
+ {
+ "productCategoryId": 5,
+ "isTravelProduct": false,
+ "name": "Barcode",
+ },
+ "tokenTypes": [],
+ "sellableTouchpointIds": [3, 4],
+ "amountInclTax": 300,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/2",
+ "method": "GET",
+ },
+ },
+ },
+ {
+ "productId": 4,
+ "productName": "HTM 40% korting",
+ "productDescription": "Reis een maand lang met 40% korting!",
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "sellableTouchpointIds": [3, 4],
+ "amountInclTax": 800,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "_links":
+ {
+ "get_details":
+ {
+ "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/4",
+ "method": "GET",
+ },
+ },
+ },
+ ],
+ }
+ /products/{productId}:
+ get:
+ tags:
+ - ServiceEngine Products
+ summary: Get more details for a single HTM product (including all child products), specified by the productId
+ description: |-
+ Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \
+ Only information that is allowed to be seen by the calling touchpoint is returned - i.e. only currently
+ active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices
+ for other touchpoints are thus filtered out. **Empty lists/arrays show up as "[]", not as null!**
+
+ The response contains a product tree, including all child products (`productVariants`) of the given
+ productId that the touchpoint is allowed to see and/or sell.
+
+ Touchpoints can only retrieve details for products that they are allowed to see and/or sell at the time of the request
+ (i.e. the product is returned in the products list response).
+ Thus, productVariants that are not available to the calling touchpoint are not returned in the response.
+
+ When no product exists for the given productId, a 404 Error response is returned.
+ parameters:
+ - name: productId
+ in: path
+ required: true
+ style: simple
+ description: Id of the product to get details for
+ schema:
+ type: integer
+ example: 1
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ProductPayloadResponse"
+ examples:
+ 90% Discount F&F pilot product (called by touchpointId 3):
+ summary: 90% Discount F&F pilot product (called by touchpointId 3)
+ description: |-
+ All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\
+ Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned.
+
+ This product has no child products, so its `productVariants` array is empty.
+ value:
+ {
+ "productId": 24,
+ "parentProductId": null,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "30901",
+ "tapConnectProductCode": null,
+ "productName": "HTM 90% Korting",
+ "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!",
+ "validityPeriod":
+ {
+ "validityPeriodId": 144,
+ "fromInclusive": "2023-12-31T23:00:00.000+00:00",
+ "toInclusive": "2028-11-25T04:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM 90% Discount",
+ "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM",
+ },
+ "marketSegments":
+ [{ "marketSegmentId": 1, "name": "B2C" }],
+ "allowedGboAgeProfiles": [],
+ "customerSegments": [],
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 1, "name": "guest" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems": [],
+ "requiredGboPersonalAttributes": [],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P7D",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": false,
+ "sendInvoice": false,
+ "imageReference": "https://www.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/media/hkfak1dj/pv-pilotproduct.pdf",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 78,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 78,
+ "amountExclTax": null,
+ "amountInclTax": 100,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ }
+ 20% Discount product (called by touchpointId 4):
+ summary: 20% Discount product (called by touchpointId 4)
+ description: |-
+ All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\
+ Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned.
+
+ This product has two `productVariants`: a single month variant and a subscription variant.\
+ The top-level parent contains `LayerInfo` to communicate what differentiates
+ the underlying product-variants.\
+ When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product.
+ value:
+ {
+ "productId": 126,
+ "parentProductId": null,
+ "layerInfo": {
+ "layerInfoId": 1,
+ "choiceKey": "isRenewable",
+ "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "30001",
+ "tapConnectProductCode": null,
+ "productName": "HTM 20% Korting",
+ "productDescription": "Reis met 20% korting op je betaalpas bij HTM.",
+ "validityPeriod":
+ {
+ "validityPeriodId": 236,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-25T04:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM 20% Discount",
+ "description": "Travel with 20% discount using your bank card with HTM.",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM",
+ },
+ "marketSegments":
+ [{ "marketSegmentId": 1, "name": "B2C" }],
+ "customerSegments": [],
+ "allowedGboAgeProfiles": [],
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 1, "name": "guest" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 7,
+ "customerDataItem": "ovPayToken",
+ },
+ ],
+ "requiredGboPersonalAttributes": [],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 172,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 4,
+ "name": "App (Infoplaza)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices": [],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants":
+ [
+ {
+ "productId": 119,
+ "parentProductId": 126,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "30001",
+ "tapConnectProductCode": null,
+ "productName": "HTM 20% Korting (losse maand)",
+ "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.",
+ "validityPeriod":
+ {
+ "validityPeriodId": 229,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-25T04:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM 20% Discount (single month)",
+ "description": "Travel with 20% discount for a month using your bank card with HTM.",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM",
+ },
+ "marketSegments":
+ [{ "marketSegmentId": 1, "name": "B2C" }],
+ "customerSegments": [],
+ "allowedGboAgeProfiles": [],
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 1, "name": "guest" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 7,
+ "customerDataItem": "ovPayToken",
+ },
+ ],
+ "requiredGboPersonalAttributes": [],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": false,
+ "sendInvoice": false,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 160,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 4,
+ "name": "App (Infoplaza)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 149,
+ "amountExclTax": null,
+ "amountInclTax": 300,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ {
+ "productId": 120,
+ "parentProductId": 126,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "30001",
+ "tapConnectProductCode": null,
+ "productName": "HTM 20% Korting (doorlopend abonnement)",
+ "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.",
+ "validityPeriod":
+ {
+ "validityPeriodId": 230,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-25T04:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM 20% Discount (subscription)",
+ "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM.",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM",
+ },
+ "marketSegments":
+ [{ "marketSegmentId": 1, "name": "B2C" }],
+ "customerSegments": [],
+ "allowedGboAgeProfiles": [],
+ "productCategory":
+ {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 1, "name": "guest" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 7,
+ "customerDataItem": "ovPayToken",
+ },
+ ],
+ "requiredGboPersonalAttributes": [],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": true,
+ "sendInvoice": true,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 159,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 4,
+ "name": "App (Infoplaza)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 148,
+ "amountExclTax": null,
+ "amountInclTax": 300,
+ "fromInclusive": "2025-01-19T23:00:00.000+00:00",
+ "toInclusive": "2028-11-17T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ ],
+ }
+ Regio Vrij product and (part of) its productVariants (called by touchpointId 3):
+ summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3)
+ description: |-
+ All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product
+ and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example.
+
+ The full depth of the tree is included in the example for the HL62 Reduced Fare Variant.\
+ Each non-leaf-node product contains `LayerInfo` to communicate what differentiates the underlying product-variants.\
+ When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product.
+ value:
+ {
+ "productId": 49,
+ "parentProductId": null,
+ "layerInfo": {
+ "layerInfoId": 2,
+ "choiceKey": "regio",
+ "choiceLabel": "Kies de gewenste regio",
+ "isCustomChoice": true,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": null,
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
+ "validityPeriod":
+ {
+ "validityPeriodId": 161,
+ "fromInclusive": "2024-11-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region.",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ {
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64,
+ },
+ {
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ { "requiredCustomerLevelId": 3, "name": "profile" },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 99,
+ "fromInclusive": "2024-11-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices": [],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants":
+ [
+ {
+ "productId": 109,
+ "parentProductId": 49,
+ "layerInfo": {
+ "layerInfoId": 3,
+ "choiceKey": "allowedGboAgeProfiles",
+ "choiceLabel": "Wat is uw geboortedatum?",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 219,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ {
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64,
+ },
+ {
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 143,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices": [],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants":
+ [
+ {
+ "productId": 114,
+ "parentProductId": 109,
+ "layerInfo": {
+ "layerInfoId": 1,
+ "choiceKey": "isRenewable",
+ "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - Voltarief - HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 224,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - Full Fare - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64,
+ },
+ {
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes":
+ [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "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": 148,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 139,
+ "amountExclTax": null,
+ "amountInclTax": 5900,
+ "fromInclusive": "2024-12-31T23:00:00.000+00:00",
+ "toInclusive": "2025-12-31T23:00:00.000+00:00",
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ {
+ "productId": 115,
+ "parentProductId": 109,
+ "layerInfo": {
+ "layerInfoId": 1,
+ "choiceKey": "isRenewable",
+ "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - Reductietarief - HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 225,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - Reduced Fare - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes":
+ [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 149,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 140,
+ "amountExclTax": null,
+ "amountInclTax": 9700,
+ "fromInclusive": "2024-12-31T23:00:00.000+00:00",
+ "toInclusive": "2025-12-31T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants":
+ [
+ {
+ "productId": 116,
+ "parentProductId": 115,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 226,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes":
+ [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ {
+ "paymentMomentId": 1,
+ "name": "prepaid",
+ },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": false,
+ "sendInvoice": false,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 150,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": "572309345923",
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 141,
+ "amountExclTax": null,
+ "amountInclTax": 9700,
+ "fromInclusive": "2024-12-31T23:00:00.000+00:00",
+ "toInclusive": "2025-12-31T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ {
+ "productId": 117,
+ "parentProductId": 115,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33615",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
+ "validityPeriod":
+ {
+ "validityPeriodId": 227,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes":
+ [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ {
+ "paymentMomentId": 1,
+ "name": "prepaid",
+ },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": true,
+ "sendInvoice": true,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij",
+ "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods":
+ [
+ {
+ "sellingPeriodId": 151,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": 572309345923,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices":
+ [
+ {
+ "sellingPriceId": 142,
+ "amountExclTax": null,
+ "amountInclTax": 9700,
+ "fromInclusive": "2024-12-31T23:00:00.000+00:00",
+ "toInclusive": "2025-12-31T23:00:00.000+00:00",
+ "internalPrice": 0.0000,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ },
+ ],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ ],
+ },
+ ],
+ },
+ {
+ "productId": 112,
+ "parentProductId": 49,
+ "layerInfo": {
+ "layerInfoId": 3,
+ "choiceKey": "allowedGboAgeProfiles",
+ "choiceLabel": "Wat is uw geboortedatum?",
+ "isCustomChoice": false,
+ },
+ "fikoArticleNumber": "1234",
+ "gboPackageTemplateId": "33618",
+ "tapConnectProductCode": null,
+ "productName": "HTM Regio Vrij - HL65",
+ "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65",
+ "validityPeriod":
+ {
+ "validityPeriodId": 222,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ },
+ "productTranslations":
+ [
+ {
+ "language": "en",
+ "name": "HTM Regio Free - HL65",
+ "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65",
+ },
+ ],
+ "productOwner":
+ {
+ "productOwnerId": 19,
+ "name": "MRDH",
+ "organization": "MRDH",
+ },
+ "marketSegments": [],
+ "customerSegments": [],
+ "allowedGboAgeProfiles":
+ [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11,
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18,
+ },
+ {
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64,
+ },
+ {
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999,
+ },
+ ],
+ "productCategory":
+ {
+ "productCategoryId": 2,
+ "isTravelProduct": true,
+ "name": "Afgekocht reisrecht",
+ },
+ "requiredCustomerLevel":
+ {
+ "requiredCustomerLevelId": 3,
+ "name": "profile",
+ },
+ "requiredProducts": [],
+ "incompatibleProducts": [],
+ "mandatoryCustomerDataItems":
+ [
+
+ {
+ "mandatoryCustomerDataItemId": 4,
+ "customerDataItem": "emailAddress",
+ },
+ {
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate",
+ },
+ ],
+ "requiredGboPersonalAttributes":
+ [
+ {
+ "requiredGboPersonalAttributeId": 1,
+ "name": "NAME",
+ },
+ {
+ "requiredGboPersonalAttributeId": 2,
+ "name": "BIRTHDATE",
+ },
+ {
+ "requiredGboPersonalAttributeId": 3,
+ "name": "PHOTO",
+ },
+ ],
+ "tokenTypes": [{ "tokenTypeId": 1, "name": "EMV" }],
+ "paymentMoment":
+ { "paymentMomentId": 1, "name": "prepaid" },
+ "serviceOptions": [],
+ "validityDuration": "P1M",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "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": 146,
+ "fromInclusive": "2024-10-30T23:00:00.000+00:00",
+ "toInclusive": "2029-12-30T23:00:00.000+00:00",
+ "salesTouchpoint":
+ {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer":
+ {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": "10",
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": 572309345923,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ },
+ },
+ "forbiddenPaymentMethods": [],
+ "sellingPrices": [],
+ },
+ ],
+ "purchasePrices": [],
+ "productVariants": [],
+ },
+ ],
+ }
+ "404":
+ description: "404"
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/rfc9457Response"
+ examples:
+ Non-existing productId:
+ summary: Non-existing productId
+ value:
+ {
+ "type": "https://www.htm.nl/api/v1/404Error",
+ "title": "Product not found.",
+ "detail": "No product found for productId: 1000.",
+ "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
+ "apiErrorCode": "htm.api.err.404.2",
+ }
+components:
+ schemas:
+ LayerInfoResponse:
+ type: object
+ description: >-
+ Gives information on the choice that the customer has to make, to enable the touchpoint
+ to proceed further "down the product-tree" by selecting (PATCH-ing) the correct product-variant.
+ LayerInfo is not a mandatory product-attribute, but it should always be present on all products for which
+ there are underlying products, i.e. for which `GET /products?parentProductId=...` returns a non-empty list.
+ When no LayerInfo is present, the touchpoint can conclude that the product is a final fulfillable product. \
+
+ **PMT should ensure that all non-leaf-node products (i.e. products that have underlying products) have a `layerInfoId`
+ referenced. If a product is found to be in violation of this rule, its attribtue `isValid` should be set to `false`.**
+ required:
+ - layerInfoId
+ - choiceKey
+ - choiceLabel
+ - isCustomChoice
+ properties:
+ layerInfoId:
+ example: 1
+ type: integer
+ choiceKey:
+ example: isRenewable
+ type: string
+ description: >-
+ Contains the JSON Key of the product-attribute that the customer has to make some
+ choice on (determined by PMT), so that te correct product-variant (one of the direct child-products) can be
+ selected by the touchpoint. For some decisions (like region), there is no product attribute, and thus
+ `isCustomChoice` will be set to `true`, and `choiceKey` can then be set to any string on which touchpoints
+ can also trigger behaviour if desired (think "region picker tool"). Therefore, reuse of `choiceKeys` should be
+ the goal, so touchoints can keep their triggers simple and prevent duplication of
+ similar `choiceKeys` to trigger the same behaviour.
+ choiceLabel:
+ example: Kies voor een doorlopend abonnement of een enkele termijn
+ type: string
+ description: >-
+ Contains a human-readable label for the choice that the customer has to make - this label
+ should be something that is easy to understand for the customer. Only one label (and thus, one language)
+ is supported; label translations should be handled by the touchpoint.
+ isCustomChoice:
+ example: false
+ type: boolean
+ description: >-
+ Indicates if the choice is a custom choice. If `false`, the PMT should validate that the `choiceKey` is a
+ differentiating attribute for the underlying product-variants. When the attribute denoted by the `choiceKey` is
+ the same for all underlying variants, PMT validation will fail and the product will become invalid (`isValid == false`)
+ until either the underlying products are updated, or a `LayerInfo` with `isCustomChoice == true` is configured.
+ GboAgeProfileResponse:
+ type: object
+ required:
+ - gboAgeProfileId
+ - name
+ - ageFromInclusive
+ - ageUntilInclusive
+ properties:
+ gboAgeProfileId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kind (4 t/m 11 jaar)
+ ageFromInclusive:
+ type: integer
+ description: The minimum age that the GBO age profile applies to
+ example: 4
+ ageUntilInclusive:
+ type: integer
+ description: The maximum age that the GBO age profile applies to
+ example: 11
+ ProductTranslationResponse:
+ type: object
+ required:
+ - language
+ properties:
+ language:
+ type: string
+ example: en
+ name:
+ type: string
+ example: HTM F&F 90% korting
+ description:
+ type: string
+ example: >-
+ Travel with 90% discount for a week during the first HTM F&F OVpay
+ pilot!
+ SellingPriceResponse:
+ type: object
+ required:
+ - sellingPriceId
+ - amountInclTax
+ - fromInclusive
+ - toInclusive
+ - internalPrice
+ properties:
+ sellingPriceId:
+ type: integer
+ example: 1
+ amountExclTax:
+ type: integer
+ example: null
+ taxCode:
+ type: string
+ example: "V09"
+ taxPercentage:
+ type: number
+ example: 9.0000
+ amountInclTax:
+ type: integer
+ example: 908
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-03-01T00:00:00.000+00:00"
+ toInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-06-01T00:00:00.000+00:00"
+ internalPrice:
+ type: number
+ example: 908.1234
+ PurchasePriceResponse:
+ type: object
+ required:
+ - purchasePriceId
+ - amountInclTax
+ - fromInclusive
+ - toInclusive
+ properties:
+ purchasePriceId:
+ type: integer
+ example: 1
+ amountExclTax:
+ type: integer
+ example: null
+ taxCode:
+ type: string
+ example: "V09"
+ taxPercentage:
+ type: number
+ example: 9.0000
+ amountInclTax:
+ type: integer
+ example: 908
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-03-01T00:00:00.000+00:00"
+ toInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-06-01T00:00:00.000+00:00"
+ SalesTouchpointResponse:
+ type: object
+ required:
+ - salesTouchpointId
+ - name
+ - isActive
+ - retailer
+ properties:
+ salesTouchpointId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: HTM App
+ isActive:
+ type: boolean
+ example: true
+ retailer:
+ type: object
+ required:
+ - retailerId
+ - name
+ properties:
+ retailerId:
+ type: integer
+ example: 1001
+ name:
+ type: string
+ example: HTM
+ street:
+ type: string
+ example: Kon. Julianaplein
+ number:
+ type: string
+ example: "10"
+ numberAddition:
+ type: string
+ example: a
+ postalCode:
+ type: string
+ example: 2595 AA
+ city:
+ type: string
+ example: Den Haag
+ country:
+ type: string
+ example: Nederland
+ emailAddress:
+ type: string
+ format: email
+ example: info@htm.nl
+ phoneNumber:
+ type: string
+ example: "09004864636"
+ taxId:
+ type: string
+ example: "09004864636"
+ imageReference:
+ type: string
+ example: https://htm.azure.net/abt/retailers/htm.svg
+ ProductPayloadListResponse:
+ type: object
+ required:
+ - Entries
+ properties:
+ Entries:
+ type: array
+ items:
+ type: object
+ required:
+ - productId
+ properties:
+ productId:
+ type: integer
+ example: 1
+ productName:
+ type: string
+ example: HTM pilot 90% korting
+ productDescription:
+ type: string
+ example: Reis met 90% korting gedurende de eerste F&F pilot!
+ productCategory:
+ type: object
+ required:
+ - productCategoryId
+ - isTravelProduct
+ - name
+ properties:
+ productCategoryId:
+ type: integer
+ example: 1
+ isTravelProduct:
+ type: boolean
+ example: true
+ name:
+ type: string
+ example: Kortingsabonnement
+ tokenTypes:
+ type: array
+ items:
+ type: object
+ required:
+ - tokenTypeId
+ - name
+ properties:
+ tokenTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: EMV
+ sellableTouchpointIds:
+ type: array
+ items:
+ type: integer
+ example: 3
+ amountInclTax:
+ type: number
+ example: 100
+ imageReference:
+ type: string
+ example: https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg
+ productPageUrl:
+ type: string
+ format: uri
+ example: https://www.htm.nl/nog-onbekende-product-pagina
+ _links:
+ type: object
+ properties:
+ get_details:
+ type: object
+ properties:
+ href:
+ type: string
+ example: https://api.integratielaag.nl/abt/touchpoint/1.0/products/1
+ method:
+ type: string
+ example: GET
+
+ ProductPayloadResponse:
+ type: object
+ required:
+ - productId
+ - productOwner
+ - isSellableAtHtm
+ properties:
+ productId:
+ type: integer
+ example: 1
+ parentProductId:
+ type: integer
+ example: 1
+ layerInfo:
+ $ref: '#/components/schemas/LayerInfoResponse'
+ fikoArticleNumber:
+ type: string
+ description: The article number of the product in FIKO
+ example: 1234
+ gboPackageTemplateId:
+ type: string
+ example: "30901"
+ tapConnectProductCode:
+ type: string
+ example: 1234AB
+ productName:
+ type: string
+ example: HTM pilot 90% korting
+ productDescription:
+ type: string
+ example: Reis met 90% korting gedurende de eerste F&F pilot!
+ validityPeriod:
+ type: object
+ required:
+ - validityPeriodId
+ - fromInclusive
+ - toInclusive
+ properties:
+ validityPeriodId:
+ type: integer
+ example: 1
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2024-09-03T10:01:34.000+00:00"
+ toInclusive:
+ type: string
+ format: date-time-offset
+ example: "2024-09-03T23:59:59.999+00:00"
+ productTranslations:
+ type: array
+ items:
+ $ref: "#/components/schemas/ProductTranslationResponse"
+ productOwner:
+ type: object
+ required:
+ - productOwnerId
+ - name
+ properties:
+ productOwnerId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: John Doe
+ organization:
+ type: string
+ example: HTM
+ marketSegmentse:
+ type: array
+ items:
+ type: object
+ required:
+ - marketSegmentId
+ - name
+ properties:
+ marketSegmentId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: B2C
+ customerSegments:
+ type: array
+ items:
+ type: object
+ required:
+ - customerSegmentId
+ - name
+ properties:
+ customerSegmentId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kind (4-11)
+ allowedGboAgeProfiles:
+ type: array
+ items:
+ $ref: "#/components/schemas/GboAgeProfileResponse"
+ productCategory:
+ type: object
+ required:
+ - productCategoryId
+ - name
+ - isTravelProduct
+ properties:
+ productCategoryId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kortingsabonnement
+ isTravelProduct:
+ type: boolean
+ example: true
+ requiredCustomerLevel:
+ type: object
+ required:
+ - requiredCustomerLevelId
+ - name
+ properties:
+ requiredCustomerLevelId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: anonymous
+ requiredProducts:
+ type: array
+ items:
+ type: object
+ required:
+ - requiredProductId
+ - productName
+ properties:
+ requiredProductId:
+ type: integer
+ example: 2
+ productName:
+ type: string
+ example: Product name
+ description:
+ type: string
+ description: Reason why the product is required
+ example: Description
+ incompatibleProducts:
+ type: array
+ items:
+ type: object
+ required:
+ - incompatibleProductId
+ - productName
+ properties:
+ incompatibleProductId:
+ type: integer
+ example: 4
+ productName:
+ type: string
+ example: Product name
+ description:
+ type: string
+ description: >-
+ Reason why the product is incompatible with the selected
+ product
+ example: Description
+ mandatoryCustomerDataItems:
+ type: array
+ items:
+ type: object
+ required:
+ - mandatoryCustomerDataItemId
+ - customerDataItem
+ properties:
+ mandatoryCustomerDataItemId:
+ type: integer
+ example: 3
+ customerDataItem:
+ type: string
+ example: dateOfBirth
+ requiredGboPersonalAttributes:
+ type: array
+ description: >-
+ List of required GBO personal attributes (PAD) - should not be
+ user-editable, but automatically populated by PMT backend, based on
+ the selected gboPackageTemplateId (if any)
+ items:
+ type: object
+ required:
+ - requiredGboPersonalAttributeId
+ - name
+ properties:
+ requiredGboPersonalAttributeId:
+ type: integer
+ example: 2
+ name:
+ type: string
+ example: BIRTHDATE
+ tokenTypes:
+ type: array
+ items:
+ type: object
+ required:
+ - tokenTypeId
+ - name
+ properties:
+ tokenTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: EMV
+ paymentMoment:
+ type: object
+ required:
+ - paymentMomentId
+ - name
+ properties:
+ paymentMomentId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: prepaid
+ serviceOptions:
+ type: array
+ items:
+ type: object
+ required:
+ - serviceOptionId
+ - action
+ properties:
+ serviceOptionId:
+ type: integer
+ example: 1
+ action:
+ type: string
+ example: cancellableTermAhead
+ description:
+ type: string
+ example: Per termijn vooruit opzegbaar
+ validityDuration:
+ type: string
+ format: duration
+ example: P1M
+ maxStartInFutureDuration:
+ type: string
+ format: duration
+ example: P6W
+ isRenewable:
+ type: boolean
+ example: true
+ sendInvoice:
+ type: boolean
+ example: false
+ imageReference:
+ type: string
+ format: uri
+ example: https://htm.azure.net/abt/products/product_1.svg
+ productPageUrl:
+ type: string
+ format: uri
+ example: https://www.htm.nl/nog-onbekende-product-pagina
+ termsUrl:
+ type: string
+ format: uri
+ example: https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina
+ isSellableAtHtm:
+ type: boolean
+ example: true
+ needsSolvencyCheckConsumer:
+ type: boolean
+ example: false
+ needsSolvencyCheckBusiness:
+ type: boolean
+ example: false
+ sellingPeriods:
+ type: array
+ items:
+ type: object
+ required:
+ - sellingPeriodId
+ - fromInclusive
+ - toInclusive
+ - salesTouchpoint
+ properties:
+ sellingPeriodId:
+ type: integer
+ example: 1
+ fromInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-03-01T00:00:00.000+00:00"
+ toInclusive:
+ type: string
+ format: date-time-offset
+ example: "2022-06-01T00:00:00.000+00:00"
+ salesTouchpoint:
+ $ref: "#/components/schemas/SalesTouchpointResponse"
+ forbiddenPaymentMethods:
+ type: array
+ items:
+ type: object
+ required:
+ - forbiddenPaymentMethodId
+ - name
+ properties:
+ forbiddenPaymentMethodId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Credit Card
+ issuer:
+ type: string
+ example: American Express
+ sellingPrices:
+ type: array
+ items:
+ $ref: "#/components/schemas/SellingPriceResponse"
+ purchasePrices:
+ type: array
+ items:
+ $ref: "#/components/schemas/PurchasePriceResponse"
+ auditTrail:
+ type: array
+ items:
+ type: object
+ required:
+ - auditTrailId
+ - action
+ - user
+ - timestamp
+ properties:
+ auditTrailId:
+ type: integer
+ example: 1
+ action:
+ type: string
+ example: insert
+ user:
+ type: string
+ example: username
+ timestamp:
+ type: string
+ format: date-time-offset
+ example: "2024-09-03T10:01:34.000+00:00"
+ rfc9457Response:
+ type: object
+ properties:
+ type:
+ type: string
+ format: url
+ example: "https://www.htm.nl/api/v1/rfc9457Error"
+ title:
+ type: string
+ description: "Short summary of the error."
+ example: "The request is not valid."
+ detail:
+ type: string
+ description: "More detailed descriptionof the error."
+ example: "Some required parameters are missing."
+ instance:
+ type: string
+ description: "Unique identifier to correlate this specific error with logging in other applications."
+ example: "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c"
+ additionalProperty1:
+ type: string
+ description: "Example of an additional property value to be used for error reporting."
+ example: "additionalValue1"
+ additionalProperty2:
+ type: array
+ description: "Example of an additional property array to be used for error reporting."
+ items:
+ type: string
+ example:
+ - "additionalValue2-1"
+ - "additionalValue2-2"
diff --git a/src/openapi/products/productreference-crud.yaml b/src/openapi/products/productreference-crud.yaml
new file mode 100644
index 0000000..b8b7526
--- /dev/null
+++ b/src/openapi/products/productreference-crud.yaml
@@ -0,0 +1,2067 @@
+openapi: 3.0.1
+info:
+ title: ABTProductReference
+ description: >-
+ CRUD APIs for HTM product reference tables (based on the new domainmodel v2.6).
+ Internal use only; external touchpoints can get (some)) access via the HTM
+ Service Engine, using a different endpoint.
+ version: '1.0'
+servers:
+ - url: https://services.acc.api.htm.nl/abt/productreference/1.0
+tags:
+ - name: ABTProductReference CRUD
+ description: >-
+ Internal use only; external touchpoints can get (some) access
+ via the HTM Service Engine.
+paths:
+ /clientattributes:
+ get:
+ description: |
+ This method will get the list of all client attributes.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/clientAttributesGetList'
+ description: A list of client attributes
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get all client attributes.
+ tags:
+ - ABTProductReference CRUD
+ post:
+ description: "This method will create a single client attribute. \n"
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/clientAttributesPostPutEntity'
+ required: true
+ responses:
+ "201":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Create a client attribute.
+ tags:
+ - ABTProductReference CRUD
+ /clientattributes/{clientAttributeId}:
+ delete:
+ description: "This method will delete the client attributes when provided the\n\
+ clientAttributeId. \n"
+ parameters:
+ - explode: false
+ in: path
+ name: clientAttributeId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ responses:
+ "202":
+ description: Deleted record successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Delete a client attribute.
+ tags:
+ - ABTProductReference CRUD
+ put:
+ description: "This method will update the client attributes when provided the\n\
+ clientAttributesId. \n"
+ parameters:
+ - explode: false
+ in: path
+ name: clientAttributeId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/clientAttributesPostPutEntity'
+ required: true
+ responses:
+ "202":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "409":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ description: Conflict
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Modify a client attribute.
+ tags:
+ - ABTProductReference CRUD
+ /layerinfo:
+ get:
+ description: |
+ This method will get the list of all LayerInfo entries.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/layerInfoGetList'
+ description: A list of LayerInfo entries
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get all LayerInfo entries.
+ tags:
+ - ABTProductReference CRUD
+ post:
+ description: "This method will create new LayerInfo entry. \n"
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/layerInfoPostPutEntity'
+ required: true
+ responses:
+ "201":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Create a new LayerInfo entry.
+ tags:
+ - ABTProductReference CRUD
+ /layerinfo/{layerInfoId}:
+ delete:
+ description: "This method will delete the LayerInfo entry for the given layerInfoId. \n"
+ parameters:
+ - explode: false
+ in: path
+ name: layerInfoId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ responses:
+ "202":
+ description: Deleted record successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Delete a LayerInfo entry.
+ tags:
+ - ABTProductReference CRUD
+ put:
+ description: "This method will update the LayerInfo entry for the given layerInfoId. \n"
+ parameters:
+ - explode: false
+ in: path
+ name: layerInfoId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/layerInfoPostPutEntity'
+ required: true
+ responses:
+ "202":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "409":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ description: Conflict
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Modify a LayerInfo entry.
+ tags:
+ - ABTProductReference CRUD
+ /productowners:
+ get:
+ description: |
+ This method will get the list of all productowners.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/productOwnerGetList'
+ description: A list of users
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get all productowners.
+ tags:
+ - ABTProductReference CRUD
+ post:
+ description: "This method will create a single productowner. \n"
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/productOwnerPostPutEntity'
+ required: true
+ responses:
+ "201":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Create a new productowner.
+ tags:
+ - ABTProductReference CRUD
+ /productowners/{productOwnerId}:
+ delete:
+ description: "This method will delete the productOwner when provided the\nproductOwnerId.\
+ \ \n"
+ parameters:
+ - explode: false
+ in: path
+ name: productOwnerId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ responses:
+ "202":
+ description: Deleted record successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Delete a productowner.
+ tags:
+ - ABTProductReference CRUD
+ put:
+ description: "This method will update the productOwner when provided the\nproductOwnerId.\
+ \ \n"
+ parameters:
+ - explode: false
+ in: path
+ name: productOwnerId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/productOwnerPostPutEntity'
+ required: true
+ responses:
+ "202":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "409":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ description: Conflict
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Modify a productowner.
+ tags:
+ - ABTProductReference CRUD
+ /productcategories:
+ get:
+ description: |
+ This method will get the list of productCategories
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/productCategoryGetList'
+ description: A list of users
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get all productcategories.
+ tags:
+ - ABTProductReference CRUD
+ /customersegments:
+ get:
+ description: This method will get the list of customer segments.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/customerSegmentGetList'
+ description: A list of users
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get all customer segments.
+ tags:
+ - ABTProductReference CRUD
+ /marketsegments:
+ get:
+ description: This method will get the list of market segments.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/marketSegmentGetList'
+ description: A list of users
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get all market segments.
+ tags:
+ - ABTProductReference CRUD
+ /paymentmoments:
+ get:
+ description: |
+ This method will retrieve the list of payment moments.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/paymentMomentGetList'
+ description: A list of payment moments
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of payment moments.
+ tags:
+ - ABTProductReference CRUD
+ /retailers:
+ get:
+ description: |
+ This method will retrieve the list of retailers.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/retailerGetList'
+ description: A list of retailers
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of retailers.
+ tags:
+ - ABTProductReference CRUD
+ post:
+ description: |
+ This method will create a new retailer.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/retailerPostPutEntity'
+ responses:
+ "201":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "409":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ description: Conflict
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Create a retailer.
+ tags:
+ - ABTProductReference CRUD
+ /retailers/{retailerId}:
+ delete:
+ description: |
+ This method will delete a retailer when provided the retailerId.
+ parameters:
+ - explode: false
+ in: path
+ name: retailerId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ responses:
+ "202":
+ description: Deleted record successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Delete a retailer.
+ tags:
+ - ABTProductReference CRUD
+ put:
+ description: |
+ This method will update a retailer when provided the retailerId.
+ parameters:
+ - explode: false
+ in: path
+ name: retailerId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/retailerPostPutEntity'
+ required: true
+ responses:
+ "202":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "409":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ description: Conflict
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Update a retailer.
+ tags:
+ - ABTProductReference CRUD
+ /salestouchpoints:
+ get:
+ description: |
+ This method will get the list of sales touchpoints. It can also return
+ sales touchpoints based on retailerId.
+ parameters:
+ - description: retailerId
+ explode: true
+ in: query
+ name: retailerId
+ required: false
+ schema:
+ format: integer
+ type: integer
+ style: form
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/salesTouchpointGetList'
+ description: A list of users
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of salestouchpoints or a single salestouchpoints for a
+ given retailerId.
+ tags:
+ - ABTProductReference CRUD
+ post:
+ description: |
+ This method will create a new salestouchpoint.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/salesTouchpointPostPutEntity'
+ responses:
+ "201":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Create a salestouchpoint.
+ tags:
+ - ABTProductReference CRUD
+ /salestouchpoints/{salesTouchpointId}:
+ delete:
+ description: |
+ This method will delete salesTouchpoint when provided the
+ salesTouchpointId.
+ parameters:
+ - explode: false
+ in: path
+ name: salesTouchpointId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ responses:
+ "202":
+ description: Deleted record successfully
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Delete a retailer.
+ tags:
+ - ABTProductReference CRUD
+ put:
+ description: |
+ This method will update sales touchpoints when provided the
+ salesTouchpointId.
+ parameters:
+ - explode: false
+ in: path
+ name: salesTouchpointId
+ required: true
+ schema:
+ format: integer
+ type: integer
+ style: simple
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/salesTouchpointPostPutEntity'
+ required: true
+ responses:
+ "202":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPutSuccessResponse'
+ description: ok
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/postPut404Response'
+ description: Not Found
+ "409":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/409Response'
+ description: Conflict
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Update a salestouchpoints.
+ tags:
+ - ABTProductReference CRUD
+ /serviceoptions:
+ get:
+ description: |
+ This method will retrieve the list of serviceoptions.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/serviceOptionGetList'
+ description: A list of users
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of serviceoptions.
+ tags:
+ - ABTProductReference CRUD
+ /mandatorycustomerdataitems:
+ get:
+ description: |
+ This method will retrieve the list of mandatorycustomerdataitems.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/mandatoryCustomerDataItemGetList'
+ description: A list of users
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of mandatorycustomerdataitems.
+ tags:
+ - ABTProductReference CRUD
+ /requiredcustomerlevels:
+ get:
+ description: |
+ This method will retrieve the list of requiredcustomerlevels.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/requiredCustomerLevelGetList'
+ description: The list possible requiredcustomerlevels
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of requiredcustomerlevels.
+ tags:
+ - ABTProductReference CRUD
+ /forbiddenpaymentmethod:
+ get:
+ description: This method will retrieve the list of forbidden payments.
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/forbiddenPaymentMethodGetList'
+ description: A list of forbidden payment methods
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of forbidden payments.
+ tags:
+ - ABTProductReference CRUD
+ /requiredgbopersonalattribute:
+ get:
+ description: |
+ This method will retrieve the list of required personal attribute.
+ parameters: []
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/requiredGboPersonalAttributeGetList'
+ description: A list of Required GBO personal attributes
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of required personal attribute .
+ tags:
+ - ABTProductReference CRUD
+ /gboageprofiles:
+ get:
+ description: |
+ This method will retrieve the list of GBO age profiles.
+ parameters: []
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ Entries:
+ $ref: '#/components/schemas/gboAgeProfileGetList'
+ description: A list of GBO age profiles
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: Get the list of required personal attribute .
+ tags:
+ - ABTProductReference CRUD
+ /productreferences:
+ get:
+ description: gives list of all possible product reference values availbale
+ parameters: []
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/productReferencesGetList'
+ description: Successful retrieved list of all possible product reference
+ values
+ "400":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/400Response'
+ description: Bad Request
+ "401":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/401Response'
+ description: Unauthorized
+ "404":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/404Response'
+ description: Not Found
+ "500":
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/500Response'
+ description: Internal Server Error
+ summary: List of all possible product reference values
+ tags:
+ - ABTProductReference CRUD
+components:
+ schemas:
+ clientAttributesGetList:
+ example:
+ - clientAttributesId: 1
+ clientId: 34r0QSQfr46rKmNezXpAteSymkLe
+ description: description1
+ isActive: "true"
+ retailerId: 1001
+ salesTouchpointId: 3
+ - clientAttributesId: 2
+ clientId: 65TkBRk5DyQkKmNezXpAteKlRzE6
+ description: description2
+ isActive: "false"
+ retailerId: 1000
+ salesTouchpointId: 2
+ type: array
+ items:
+ $ref: '#/components/schemas/clientAttributesGetEntity'
+ clientAttributesGetEntity:
+ properties:
+ clientAttributesId:
+ example: 1
+ type: integer
+ clientId:
+ example: htm
+ type: string
+ description:
+ example: description
+ type: string
+ isActive:
+ example: "true"
+ type: string
+ retailerId:
+ example: 1
+ type: integer
+ salesTouchpointId:
+ example: 2
+ type: integer
+ type: object
+ clientAttributesPostPutEntity:
+ properties:
+ clientId:
+ example: 34r0QSQfr46rKmNezXpAteSymkLe
+ type: string
+ description:
+ example: description
+ type: string
+ isActive:
+ example: true
+ type: boolean
+ retailerId:
+ example: 1001
+ type: integer
+ salesTouchpointId:
+ example: 3
+ type: integer
+ type: object
+ layerInfoGetList:
+ example:
+ - layerInfoId: 1
+ choiceKey: isRenewable
+ choiceLabel: Kies voor een doorlopend abonnement of een enkele termijn
+ isCustomChoice: false
+ - layerInfoId: 2
+ choiceKey: regio
+ choiceLabel: Kies een regio
+ isCustomChoice: true
+ type: array
+ items:
+ $ref: '#/components/schemas/layerInfoGetEntity'
+ layerInfoGetEntity:
+ properties:
+ layerInfoId:
+ example: 1
+ type: integer
+ choiceKey:
+ example: isRenewable
+ type: string
+ choiceLabel:
+ example: Kies voor een doorlopend abonnement of een enkele termijn
+ type: string
+ isCustomChoice:
+ example: false
+ type: boolean
+ type: object
+ layerInfoPostPutEntity:
+ properties:
+ choiceKey:
+ example: isRenewable
+ type: string
+ choiceLabel:
+ example: Kies voor een doorlopend abonnement of een enkele termijn
+ type: string
+ isCustomChoice:
+ example: false
+ type: boolean
+ type: object
+ productOwnerGetList:
+ example:
+ - productOwnerId: 1
+ organization: HTM
+ name: Corneel Verstoep
+ - productOwnerId: 2
+ organization: ABC
+ name: Pietje Puk
+ items:
+ $ref: '#/components/schemas/productOwnerGetEntity'
+ type: array
+ productOwnerGetEntity:
+ properties:
+ productOwnerId:
+ example: 1
+ type: integer
+ organization:
+ example: HTM
+ type: string
+ name:
+ example: Corneel Verstoep
+ type: string
+ type: object
+ productOwnerPostPutEntity:
+ properties:
+ organization:
+ example: HTM
+ type: string
+ name:
+ example: Corneel Verstoep
+ type: string
+ type: object
+ productCategoryGetList:
+ example:
+ - productCategoryId: 1
+ name: Kortingsabonnement
+ isTravelProduct: true
+ - productCategoryId: 2
+ name: Afgekocht reisrecht
+ isTravelProduct: true
+ - productCategoryId: 3
+ name: Supplement
+ isTravelProduct: true
+ - productCategoryId: 4
+ name: Productdrager
+ isTravelProduct: false
+ - productCategoryId: 5
+ name: Barcode
+ isTravelProduct: false
+ - productCategoryId: 6
+ name: Merchandise
+ isTravelProduct: false
+ - productCategoryId: 7
+ name: Functioneel product
+ isTravelProduct: false
+ - productCategoryId: 8
+ name: Saldo
+ isTravelProduct: true
+ type: array
+ items:
+ $ref: '#/components/schemas/productCategoryGetEntity'
+ productCategoryGetEntity:
+ properties:
+ productCategoryId:
+ example: 1
+ type: integer
+ name:
+ example: Kortingsabonnement
+ type: string
+ isTravelProduct:
+ example: true
+ type: boolean
+ type: object
+ customerSegmentGetList:
+ example:
+ - customerSegmentId: 1
+ name: Kind (4-11)
+ - customerSegmentId: 2
+ name: Jongere (12-17)
+ - customerSegmentId: 3
+ name: Volwassene (18-64)
+ - customerSegmentId: 4
+ name: Oudere (65+)
+ - customerSegmentId: 5
+ name: Student
+ - customerSegmentId: 6
+ name: Ooievaarspas-gerechtigde
+ items:
+ $ref: '#/components/schemas/customerSegmentGetEntity'
+ type: array
+ customerSegmentGetEntity:
+ properties:
+ customerSegmentId:
+ example: 1
+ type: integer
+ name:
+ example: Kind (4-11)
+ type: string
+ type: object
+ marketSegmentGetList:
+ example:
+ Entries:
+ - marketSegmentId: 1
+ name: B2C
+ - marketSegmentId: 2
+ name: B2B2C
+ - marketSegmentId: 3
+ name: B2B
+ items:
+ $ref: '#/components/schemas/marketSegmentGetEntity'
+ type: array
+ marketSegmentGetEntity:
+ properties:
+ marketSegmentId:
+ example: 1
+ type: integer
+ name:
+ example: name
+ type: string
+ paymentMomentGetList:
+ example:
+ - paymentMomentId: 1
+ name: prepaid
+ - paymentMomentId: 2
+ name: postpaid
+ - paymentMomentId: 3
+ name: prepaid and postpaid
+ items:
+ $ref: '#/components/schemas/paymentMomentGetEntity'
+ type: array
+ paymentMomentGetEntity:
+ properties:
+ paymentMomentId:
+ example: 1
+ type: integer
+ name:
+ example: prepaid
+ type: string
+ retailerGetList:
+ example:
+ - retailerId: 1000
+ name: HTM interne touchpoints
+ street: Koningin Julianaplein
+ number: "10"
+ numberAddition:
+ postalCode: 2595 AA
+ city: Den Haag
+ country: NL
+ emailAddress: info@htm.nl
+ phoneNumber: "070 374 9002"
+ taxId: "572309345923"
+ imageReference: https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg
+ - retailerId: 1001
+ name: HTM externe touchpoints
+ street: Koningin Julianaplein
+ number: "10"
+ numberAddition:
+ postalCode: 2595 AA
+ city: Den Haag
+ country: NL
+ emailAddress: info@htm.nl
+ phoneNumber: "070 374 9002"
+ taxId: "572309345923"
+ imageReference: https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg
+ items:
+ $ref: '#/components/schemas/retailerGetEntity'
+ type: array
+ retailerGetEntity:
+ properties:
+ retailerId:
+ example: 1
+ type: integer
+ name:
+ example: name
+ type: string
+ street:
+ example: StreetName
+ type: string
+ number:
+ example: "12"
+ type: string
+ numberAddition:
+ example: E
+ type: string
+ postalCode:
+ example: 2222 BV
+ type: string
+ city:
+ example: Amsterdam
+ type: string
+ country:
+ example: NL
+ type: string
+ emailAddress:
+ example: sample@email.com
+ type: string
+ phoneNumber:
+ example: "6123456789"
+ type: string
+ taxId:
+ example: taxId
+ type: string
+ imageReference:
+ example: imageReference
+ type: string
+ retailerPostPutEntity:
+ properties:
+ name:
+ example: name
+ type: string
+ street:
+ example: StreetName
+ type: string
+ number:
+ example: "12"
+ type: string
+ numberAddition:
+ example: E
+ type: string
+ postalCode:
+ example: 2222 BV
+ type: string
+ city:
+ example: Amsterdam
+ type: string
+ country:
+ example: NL
+ type: string
+ emailAddress:
+ example: sample@email.com
+ type: string
+ phoneNumber:
+ example: "6123456789"
+ type: string
+ taxId:
+ example: taxId
+ type: string
+ imageReference:
+ example: imageReference
+ type: string
+ salesTouchpointGetList:
+ example:
+ - salesTouchpointId: 1
+ name: SMP (Service Medewerker Portaal)
+ isActive: true
+ retailerId: 1000
+ - salesTouchpointId: 2
+ name: Website (Perplex)
+ isActive: true
+ retailerId: 1001
+ items:
+ $ref: '#/components/schemas/salesTouchpointGetEntity'
+ type: array
+ salesTouchpointGetEntity:
+ properties:
+ salesTouchpointId:
+ example: 1
+ type: integer
+ name:
+ example: name
+ type: string
+ isActive:
+ example: true
+ type: boolean
+ retailerId:
+ example: 1
+ type: integer
+ type: object
+ salesTouchpointPostPutEntity:
+ properties:
+ name:
+ example: name
+ type: string
+ isActive:
+ example: true
+ type: boolean
+ retailerId:
+ example: 1
+ type: integer
+ type: object
+ serviceOptionGetList:
+ example:
+ - serviceOptionId: 1
+ action: refundablePerDay
+ description: Per dag opzegbaar met geldteruggave naar rato
+ - serviceOptionId: 2
+ action: cancellableTermAhead
+ description: Per termijn vooruit opzegbaar, dus géén terugwerkende geldteruggave
+ items:
+ $ref: '#/components/schemas/serviceOptionGetEntity'
+ type: array
+ serviceOptionGetEntity:
+ properties:
+ serviceOptionId:
+ example: 1
+ type: integer
+ action:
+ example: action
+ type: string
+ description:
+ example: description
+ type: string
+ type: object
+ mandatoryCustomerDataItemGetList:
+ example:
+ - mandatoryCustomerDataItemId: 1
+ customerDataItem: birthname
+ - mandatoryCustomerDataItemId: 2
+ customerDataItem: surname
+ - mandatoryCustomerDataItemId: 3
+ customerDataItem: dateOfBirth
+ - mandatoryCustomerDataItemId: 4
+ customerDataItem: emailAddress
+ - mandatoryCustomerDataItemId: 5
+ customerDataItem: address
+ - mandatoryCustomerDataItemId: 6
+ customerDataItem: phone
+ - mandatoryCustomerDataItemId: 7
+ customerDataItem: ovPayToken
+ - mandatoryCustomerDataItemId: 8
+ customerDataItem: padBirthDate
+ - mandatoryCustomerDataItemId: 9
+ customerDataItem: shippingAddress
+ - mandatoryCustomerDataItemId: 10
+ customerDataItem: billingAddress
+ items:
+ $ref: '#/components/schemas/mandatoryCustomerDataItemGetEntity'
+ type: array
+ mandatoryCustomerDataItemGetEntity:
+ properties:
+ mandatoryCustomerDataItemId:
+ example: 1
+ type: integer
+ customerDataItem:
+ example: customerDataItem
+ type: string
+ type: object
+ requiredCustomerLevelGetList:
+ example:
+ - requiredCustomerLevelId: 1
+ name: guest
+ - requiredCustomerLevelId: 2
+ name: contact
+ - requiredCustomerLevelId: 3
+ name: profile
+ items:
+ $ref: '#/components/schemas/requiredCustomerLevelGetEntity'
+ type: array
+ requiredCustomerLevelGetEntity:
+ type: object
+ properties:
+ requiredCustomerLevelId:
+ example: 1
+ type: integer
+ name:
+ example: guest
+ type: string
+ forbiddenPaymentMethodGetList:
+ example:
+ - forbiddenPaymentMethodId: 1
+ name: creditcard
+ issuer: Mastercard
+ - forbiddenPaymentMethodId: 2
+ name: creditcard
+ issuer: Visa
+ - forbiddenPaymentMethodId: 3
+ name: creditcard
+ issuer: American Express
+ items:
+ $ref: '#/components/schemas/forbiddenPaymentMethodGetEntity'
+ type: array
+ forbiddenPaymentMethodGetEntity:
+ properties:
+ forbiddenPaymentMethodId:
+ example: 3
+ type: integer
+ name:
+ example: creditcard
+ type: string
+ issuer:
+ example: American Express
+ type: string
+ type: object
+ requiredGboPersonalAttributeGetList:
+ example:
+ - name: NAME
+ requiredGboPersonalAttributeId: 1
+ - name: BIRTHDATE
+ requiredGboPersonalAttributeId: 2
+ - name: PHOTO
+ requiredGboPersonalAttributeId: 3
+ items:
+ $ref: '#/components/schemas/requiredGboPersonalAttributeGetEntity'
+ type: array
+ requiredGboPersonalAttributeGetEntity:
+ properties:
+ requiredGboPersonalAttributeId:
+ example: 1
+ type: integer
+ name:
+ example: NAME
+ type: string
+ type: object
+ gboAgeProfileGetList:
+ items:
+ $ref: '#/components/schemas/gboAgeProfileGetEntity'
+ type: array
+ example:
+ Entries:
+ - gboAgeProfileId: 1
+ name: Kind (0 t/m 3 jaar)
+ ageFromInclusive: 0
+ ageToInclusive: 3
+ - gboAgeProfileId: 2
+ name: Kind (4 t/m 11 jaar)
+ ageFromInclusive: 4
+ ageToInclusive: 11
+ - gboAgeProfileId: 3
+ name: Jongere (12 t/m 18 jaar)
+ ageFromInclusive: 12
+ ageToInclusive: 18
+ - gboAgeProfileId: 4
+ name: Volwassene (19 t/m 64 jaar)
+ ageFromInclusive: 19
+ ageToInclusive: 64
+ - gboAgeProfileId: 5
+ name: Oudere (65 jaar of ouder)
+ ageFromInclusive: 65
+ ageToInclusive: 999
+ gboAgeProfileGetEntity:
+ type: object
+ required:
+ - gboAgeProfileId
+ - name
+ - ageFromInclusive
+ - ageToInclusive
+ properties:
+ gboAgeProfileId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: Kind (4 t/m 11 jaar)
+ ageFromInclusive:
+ type: integer
+ description: The minimum age that the GBO age profile applies to
+ example: 4
+ ageToInclusive:
+ type: integer
+ description: The maximum age that the GBO age profile applies to
+ example: 11
+ productReferencesGetList:
+ type: object
+ required:
+ - Entries
+ properties:
+ Entries:
+ type: object
+ properties:
+ clientAttributes:
+ $ref: '#/components/schemas/clientAttributesGetList'
+ layerInfos:
+ $ref: '#/components/schemas/layerInfoGetList'
+ productOwners:
+ $ref: '#/components/schemas/productOwnerGetList'
+ productCategories:
+ $ref: '#/components/schemas/productCategoryGetList'
+ customerSegments:
+ $ref: '#/components/schemas/customerSegmentGetList'
+ marketSegments:
+ $ref: '#/components/schemas/marketSegmentGetList'
+ paymentMoments:
+ $ref: '#/components/schemas/paymentMomentGetList'
+ retailers:
+ $ref: '#/components/schemas/retailerGetList'
+ salesTouchpoints:
+ $ref: '#/components/schemas/salesTouchpointGetList'
+ serviceOptions:
+ $ref: '#/components/schemas/serviceOptionGetList'
+ mandatoryCustomerDataItems:
+ $ref: '#/components/schemas/mandatoryCustomerDataItemGetList'
+ requiredCustomerLevels:
+ $ref: '#/components/schemas/requiredCustomerLevelGetList'
+ forbiddenPaymentMethods:
+ $ref: '#/components/schemas/forbiddenPaymentMethodGetList'
+ requiredGboPersonalAttributes:
+ $ref: '#/components/schemas/requiredGboPersonalAttributeGetList'
+ gboAgeProfiles:
+ $ref: '#/components/schemas/gboAgeProfileGetList'
+ 400Response:
+ properties:
+ code:
+ example: "400"
+ type: string
+ type:
+ type: string
+ message:
+ example: Bad Request
+ type: string
+ description:
+ example: '''2023-02-01 00:00:00'' is not a valid Datetime'
+ type: string
+ type: object
+ 401Response:
+ properties:
+ code:
+ example: "900901"
+ type: string
+ type:
+ type: string
+ message:
+ example: Invalid Credentials
+ type: string
+ description:
+ example: Invalid Credentials. Make sure you have provided the correct security
+ credentials
+ type: string
+ type: object
+ 404Response:
+ properties:
+ code:
+ example: "404"
+ type: string
+ type:
+ example: Status report
+ type: string
+ message:
+ example: Not Found
+ type: string
+ description:
+ example: The requested resource is not available.
+ type: string
+ type: object
+ 404ResponseId:
+ properties:
+ error:
+ example: "No record found for id: 5"
+ type: string
+ type: object
+ 409Response:
+ properties:
+ error:
+ example: Entry already exists
+ type: string
+ type: object
+ 500Response:
+ properties:
+ code:
+ example: "500"
+ type: string
+ type:
+ type: string
+ message:
+ example: Internal Server Error
+ type: string
+ description:
+ type: string
+ type: object
+ postPutSuccessResponse:
+ example:
+ id: 1
+ properties:
+ id:
+ example: 1
+ type: integer
+ type: object
+ postPut404Response:
+ oneOf:
+ - $ref: '#/components/schemas/404ResponseId'
+ - $ref: '#/components/schemas/404Response'
diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud.yaml
similarity index 69%
rename from src/openapi/products/products-crud-v2.2.yaml
rename to src/openapi/products/products-crud.yaml
index d73bc24..1065260 100644
--- a/src/openapi/products/products-crud-v2.2.yaml
+++ b/src/openapi/products/products-crud.yaml
@@ -1,13 +1,13 @@
openapi: 3.0.1
info:
- title: ABTProducts (based on domainmodel v2.2)
+ title: ABTProducts
description: >-
- CRUD APIs for HTM products (based on the new domainmodel v2.2). Internal use
+ CRUD APIs for HTM products (based on the new domainmodel v2.6). Internal use
only; external touchpoints can get read-only, filtered access via the HTM
Service Engine, using a different endpoint.
- version: '2.2'
+ version: '1.0'
servers:
- - url: https://api.integratielaag.nl/abt/products/2.2
+ - url: https://services.acc.api.htm.nl/abt/abtproducts/1.0
tags:
- name: ABTProducts CRUD
description: >-
@@ -20,13 +20,32 @@ paths:
- ABTProducts CRUD
summary: Get a list of all defined HTM products
description: |-
- Get a list of all HTM products, without any filters. Only a few details
- are returned per product - use the `GET /products/{productId}` endpoint
+ Get a list of all HTM products that refer to a given parentProductId (or without parent, if not specified), without any other filters. \
+ Only a few details are returned per product - use the `GET /products/{productId}` endpoint
to get more details. \
+ Two attributes are only returned if no touchpoint HTTP header is present: `isValid` and `isArchived`. \
In the examples, it can be seen that (when a touchpoint HTTP header is present)
only products that have active sellingPeriods for touchpoints within the same
retailer as the calling retailer are returned. \
Touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2.
+ parameters:
+ - name: parentProductId
+ in: query
+ required: false
+ description: |-
+ Only return products that refer to the given parentProductId. \
+ Returns parent-products (i.e. products with parentProductId = null) if left empty.
+ schema:
+ type: integer
+ example: 1
+ - name: isArchived
+ in: query
+ required: false
+ description: |-
+ When omitted, return all products; when true, return only archived products (isArchived = true);
+ when false, return only non-archived products (isArchived = false).
+ schema:
+ type: boolean
responses:
'200':
description: OK
@@ -40,18 +59,18 @@ paths:
description: No products
value:
{
- "Entries": [],
- "href": null
+ "Entries": []
}
- getListOneProductNoSellingPeriodsNoTouchpointId:
- summary: List containing one product without any SellingPeriods (no touchpointId in HTTP-headers)
- description: All products are returned, even if they have no activesellingPeriods
+ getListOneValidProductNoSellingPeriodsNoTouchpointId:
+ summary: List containing one (valid) product without any SellingPeriods (no touchpointId in HTTP-headers)
+ description: All products are returned, even if they have no active sellingPeriods or are invalid or archived
value:
{
"Entries": [
{
"productId": 1,
- "productCode": "30901-WL",
+ "isValid": true,
+ "isArchived": false,
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
"productCategory": {
@@ -59,31 +78,68 @@ paths:
"isTravelProduct": true,
"name": "Kortingsabonnement"
},
- "sellableTouchPointIds": null,
+ "tokenTypes": [
+ {
+ "tokenTypeId": 1,
+ "name": "EMV"
+ }
+ ],
+ "sellableTouchpointIds": null,
"amountInclTax": null,
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
}
- ],
- "href": null
+ ]
+ }
+ getListOneInvalidProductNoSellingPeriodsNoTouchpointId:
+ summary: List containing one (invalid) product without any SellingPeriods (no touchpointId in HTTP-headers)
+ description: All products are returned, even if they have no active sellingPeriods or are invalid or archived
+ value:
+ {
+ "Entries": [
+ {
+ "productId": 1,
+ "isValid": false,
+ "isArchived": false,
+ "productName": "HTM pilot 90% korting",
+ "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
+ "productCategory": {
+ "productCategoryId": 1,
+ "isTravelProduct": true,
+ "name": "Kortingsabonnement"
+ },
+ "tokenTypes": [
+ {
+ "tokenTypeId": 1,
+ "name": "EMV"
+ }
+ ],
+ "sellableTouchpointIds": null,
+ "amountInclTax": null,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
+ }
+ ]
}
getListOneProductNoTouchpointId:
summary: List containing one product with 4 currently active SellingPeriods (no touchpointId in HTTP-headers)
- description: All products are returned, even if they have no active SellingPeriods
+ description: All products are returned, even if they have no active SellingPeriods or are invalid or archived
value:
{
"Entries": [
{
"productId": 2,
- "productCode": "312AB-WL",
+ "isValid": true,
+ "isArchived": false,
"productName": "HTM dagkaart",
"productDescription": "Reis een dag met het openbaar vervoer bij HTM",
"productCategory": {
- "productCategoryId": 6,
+ "productCategoryId": 5,
"isTravelProduct": false,
"name": "Barcode"
},
- "sellableTouchPointIds": [
+ "tokenTypes": null,
+ "sellableTouchpointIds": [
1,
2,
3,
@@ -93,26 +149,25 @@ paths:
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
}
- ],
- "href": null
+ ]
}
getListOneProductTouchpointId3:
summary: List containing one product with 4 currently active SellingPeriods (touchpointId 3 in HTTP-headers)
- description: Only products that have active sellingPeriods for touchpoint 3 are returned
+ description: Only products that have active sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned
value:
{
"Entries": [
{
"productId": 2,
- "productCode": "312AB-WL",
"productName": "HTM dagkaart",
"productDescription": "Reis een dag met het openbaar vervoer bij HTM",
"productCategory": {
- "productCategoryId": 6,
+ "productCategoryId": 5,
"isTravelProduct": false,
"name": "Barcode"
},
- "sellableTouchPointIds": [
+ "tokenTypes": null,
+ "sellableTouchpointIds": [
3,
4
],
@@ -120,18 +175,18 @@ paths:
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
}
- ],
- "href": null
+ ]
}
- getListMultipleProductsWithPaginationNoTouchpointId:
- summary: List containing multiple products with pagination (no touchpointId in HTTP-headers)
- description: All products are returned, even if they have no active SellingPeriods
+ getListMultipleProductsNoTouchpointId:
+ summary: List containing multiple products (no touchpointId in HTTP-headers)
+ description: All products are returned, even if they have no active SellingPeriods or are invalid or archived
value:
{
"Entries": [
{
"productId": 1,
- "productCode": "30901-WL",
+ "isValid": true,
+ "isArchived": false,
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
"productCategory": {
@@ -139,22 +194,30 @@ paths:
"isTravelProduct": true,
"name": "Kortingsabonnement"
},
- "sellableTouchPointIds": null,
+ "tokenTypes": [
+ {
+ "tokenTypeId": 1,
+ "name": "EMV"
+ }
+ ],
+ "sellableTouchpointIds": null,
"amountInclTax": null,
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
},
{
"productId": 2,
- "productCode": "312AB-WL",
+ "isValid": true,
+ "isArchived": false,
"productName": "HTM dagkaart",
"productDescription": "Reis een dag met het openbaar vervoer bij HTM",
"productCategory": {
- "productCategoryId": 6,
+ "productCategoryId": 5,
"isTravelProduct": false,
"name": "Barcode"
},
- "sellableTouchPointIds": [
+ "tokenTypes": null,
+ "sellableTouchpointIds": [
1,
2,
3,
@@ -166,7 +229,8 @@ paths:
},
{
"productId": 3,
- "productCode": "30001-ML",
+ "isValid": true,
+ "isArchived": false,
"productName": "HTM 20% korting",
"productDescription": "Reis een maand lang met 20% korting!",
"productCategory": {
@@ -174,7 +238,13 @@ paths:
"isTravelProduct": true,
"name": "Kortingsabonnement"
},
- "sellableTouchPointIds": [
+ "tokenTypes": [
+ {
+ "tokenTypeId": 1,
+ "name": "EMV"
+ }
+ ],
+ "sellableTouchpointIds": [
1,
2
],
@@ -184,7 +254,8 @@ paths:
},
{
"productId": 4,
- "productCode": "30002-ML",
+ "isValid": true,
+ "isArchived": false,
"productName": "HTM 40% korting",
"productDescription": "Reis een maand lang met 40% korting!",
"productCategory": {
@@ -192,7 +263,13 @@ paths:
"isTravelProduct": true,
"name": "Kortingsabonnement"
},
- "sellableTouchPointIds": [
+ "tokenTypes": [
+ {
+ "tokenTypeId": 1,
+ "name": "EMV"
+ }
+ ],
+ "sellableTouchpointIds": [
3,
4
],
@@ -200,26 +277,25 @@ paths:
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
}
- ],
- "href": "https://api.htm.nl/products?pageNumber=2"
+ ]
}
- getListMultipleProductsWithPaginationTuchpointId1:
- summary: List containing multiple products with pagination (touchpointId 3 in HTTP-headers)
- description: Only products that have active SellingPeriods for touchpoint 3 are returned
+ getListMultipleProductsTouchpointId1:
+ summary: List containing multiple products (touchpointId 3 in HTTP-headers)
+ description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned
value:
{
"Entries": [
{
"productId": 2,
- "productCode": "312AB-WL",
"productName": "HTM dagkaart",
"productDescription": "Reis een dag met het openbaar vervoer bij HTM",
"productCategory": {
- "productCategoryId": 6,
+ "productCategoryId": 5,
"isTravelProduct": false,
"name": "Barcode"
},
- "sellableTouchPointIds": [
+ "tokenTypes": null,
+ "sellableTouchpointIds": [
3,
4
],
@@ -229,7 +305,6 @@ paths:
},
{
"productId": 4,
- "productCode": "30002-ML",
"productName": "HTM 40% korting",
"productDescription": "Reis een maand lang met 40% korting!",
"productCategory": {
@@ -237,7 +312,13 @@ paths:
"isTravelProduct": true,
"name": "Kortingsabonnement"
},
- "sellableTouchPointIds": [
+ "tokenTypes": [
+ {
+ "tokenTypeId": 1,
+ "name": "EMV"
+ }
+ ],
+ "sellableTouchpointIds": [
3,
4
],
@@ -245,8 +326,7 @@ paths:
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina"
}
- ],
- "href": "https://api.htm.nl/products?pageNumber=2"
+ ]
}
'400':
description: '400'
@@ -296,16 +376,17 @@ paths:
value:
{
"productOwnerId": 1,
- "isRenewable": false,
- "isSellableAtHtm": false,
- "needsSolvencyCheckConsumer": false,
- "needsSolvencyCheckBusiness": false
+ "isValid": false,
+ "isArchived": false,
+ "isSellableAtHtm": false
}
postGboProduct:
summary: Add new GBO product (non-renewable)
value:
{
- "productCode": "30901-WL",
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
"gboPackageTemplateId": "30901",
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
@@ -325,11 +406,10 @@ paths:
1
],
"customerSegmentIds": [
- 2,
- 3,
- 4,
- 5
+ 5,
+ 6
],
+ "allowedGboAgeProfileIds": [],
"productCategoryId": 1,
"requiredCustomerLevelId": 1,
"incompatibleProducts": [
@@ -340,7 +420,7 @@ paths:
],
"mandatoryCustomerDataItemIds": [
4,
- 5
+ 7
],
"tokenTypeIds": [
1
@@ -363,9 +443,10 @@ paths:
"salesTouchpointId": 3,
"sellingPrices": [
{
- "amountExclTax": 92,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 92.0000
@@ -375,9 +456,97 @@ paths:
],
"purchasePrices": [
{
- "amountExclTax": 0,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
+ "amountExclTax": null,
"amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ "fromInclusive": "2024-09-01T00:00:00.000",
+ "toInclusive": "2024-12-31T23:59:59.999"
+ }
+ ]
+ }
+ postGboProductWithParent:
+ summary: Add new GBO product with parent and layerInfo (non-renewable)
+ value:
+ {
+ "parentProductId": 1,
+ "layerInfoId": 1,
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
+ "gboPackageTemplateId": "30901",
+ "productName": "HTM pilot 90% korting",
+ "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
+ "validityPeriod": {
+ "fromInclusive": "2024-09-01T00:00:00.000",
+ "toInclusive": "2024-12-31T23:59:59.999"
+ },
+ "productTranslations": [
+ {
+ "language": "en",
+ "name": "HTM pilot 90% discount",
+ "description": "Travel with 90% discount during the first F&F pilot!"
+ }
+ ],
+ "productOwnerId": 1,
+ "marketSegmentIds": [
+ 1
+ ],
+ "customerSegmentIds": [
+ 5,
+ 6
+ ],
+ "allowedGboAgeProfileIds": [],
+ "productCategoryId": 1,
+ "requiredCustomerLevelId": 1,
+ "incompatibleProducts": [
+ {
+ "incompatibleProductId": 2,
+ "description": "Kan niet combineren met zichzelf"
+ }
+ ],
+ "mandatoryCustomerDataItemIds": [
+ 4,
+ 7
+ ],
+ "tokenTypeIds": [
+ 1
+ ],
+ "paymentMomentId": 1,
+ "validityDuration": "P7D",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": false,
+ "sendInvoice": false,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods": [
+ {
+ "fromInclusive": "2024-09-01T00:00:00.000",
+ "toInclusive": "2024-12-31T23:59:59.999",
+ "salesTouchpointId": 3,
+ "sellingPrices": [
+ {
+ "amountExclTax": null,
+ "amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ "fromInclusive": "2024-09-01T00:00:00.000",
+ "toInclusive": "2024-12-31T23:59:59.999",
+ "internalPrice": 92.0000
+ }
+ ]
+ }
+ ],
+ "purchasePrices": [
+ {
+ "amountExclTax": null,
+ "amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999"
}
@@ -385,11 +554,12 @@ paths:
}
postGboProductMultiplePeriods:
summary: >-
- Add new GBO product (non-renewable, multiple
- sellingPeriods/prices per period)
+ Add new GBO product (non-renewable, multiple sellingPeriods/prices per period)
value:
{
- "productCode": "30901-WL",
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
"gboPackageTemplateId": "30901",
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
@@ -409,11 +579,10 @@ paths:
1
],
"customerSegmentIds": [
- 2,
- 3,
- 4,
- 5
+ 5,
+ 6
],
+ "allowedGboAgeProfileIds": [],
"productCategoryId": 1,
"requiredCustomerLevelId": 1,
"incompatibleProducts": [
@@ -424,7 +593,7 @@ paths:
],
"mandatoryCustomerDataItemIds": [
4,
- 5
+ 7
],
"tokenTypeIds": [
1
@@ -447,17 +616,19 @@ paths:
"salesTouchpointId": 3,
"sellingPrices": [
{
- "amountExclTax": 92,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 92.0000
},
{
- "amountExclTax": 101,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 110,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2025-01-01T00:00:00.000",
"toInclusive": "2025-12-31T23:59:59.999",
"internalPrice": 101.0000
@@ -470,17 +641,19 @@ paths:
"salesTouchpointId": 2,
"sellingPrices": [
{
- "amountExclTax": 92,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 92.0000
},
{
- "amountExclTax": 101,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 110,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2025-01-01T00:00:00.000",
"toInclusive": "2025-12-31T23:59:59.999",
"internalPrice": 101.0000
@@ -490,9 +663,10 @@ paths:
],
"purchasePrices": [
{
- "amountExclTax": 0,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
+ "amountExclTax": null,
"amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2025-12-31T23:59:59.999"
}
@@ -500,12 +674,13 @@ paths:
}
postGboPadProduct:
summary: >-
- Add new GBO product (PAD required, renewable, serviceOptions,
- forbiddenPaymentMethods)
+ Add new GBO product (PAD required, renewable, allowedGboAgeProfiles, padBirthDate)
value:
{
- "productCode": "35301-MA",
- "gboPackageTemplateId": "35301",
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
+ "gboPackageTemplateId": "33610",
"productName": "HTM Regio Vrij DH73",
"productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
"validityPeriod": {
@@ -524,12 +699,16 @@ paths:
1
],
"customerSegmentIds": [
+ 5,
+ 6
+ ],
+ "allowedGboAgeProfileIds": [
2,
3,
4,
5
],
- "productCategoryId": 3,
+ "productCategoryId": 2,
"requiredCustomerLevelId": 3,
"requiredProducts": [
{
@@ -544,10 +723,8 @@ paths:
}
],
"mandatoryCustomerDataItemIds": [
- 3,
4,
- 5,
- 6
+ 8
],
"requiredGboPersonalAttributeIds": [
1,
@@ -560,10 +737,7 @@ paths:
3
],
"paymentMomentId": 1,
- "serviceOptionIds": [
- 1,
- 2
- ],
+ "serviceOptionIds": [],
"validityDuration": "P1M",
"maxStartInFutureDuration": "P6W",
"isRenewable": true,
@@ -580,13 +754,14 @@ paths:
"toInclusive": "2024-12-31T23:59:59.999",
"salesTouchpointId": 3,
"forbiddenPaymentMethodIds": [
- 1
+ 3
],
"sellingPrices": [
{
- "amountExclTax": 5413,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 5900,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 5413.0000
@@ -596,9 +771,10 @@ paths:
],
"purchasePrices": [
{
- "amountExclTax": 0,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
+ "amountExclTax": null,
"amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999"
}
@@ -686,10 +862,12 @@ paths:
{
"productId": 1,
"parentProductId": null,
- "productCode": "30901-WL",
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
"gboPackageTemplateId": "30901",
"tapConnectProductCode": null,
- "productGroupMetadata": null,
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
"validityPeriod": {
@@ -716,23 +894,16 @@ paths:
}
],
"customerSegments": [
- {
- "customerSegmentId": 2,
- "name": "Kind (4-11)"
- },
- {
- "customerSegmentId": 3,
- "name": "Jongere (12-17)"
- },
- {
- "customerSegmentId": 4,
- "name": "Volwassene (18-64)"
- },
{
"customerSegmentId": 5,
- "name": "Oudere (65+)"
+ "name": "Student"
+ },
+ {
+ "customerSegmentId": 6,
+ "name": "Ooievaarspas-gerechtigde"
}
],
+ "allowedGboAgeProfiles": null,
"productCategory": {
"productCategoryId": 1,
"isTravelProduct": true,
@@ -740,7 +911,7 @@ paths:
},
"requiredCustomerLevel": {
"requiredCustomerLevelId": 1,
- "name": "anonymous"
+ "name": "guest"
},
"requiredProducts": null,
"incompatibleProducts": [
@@ -756,7 +927,7 @@ paths:
"customerDataItem": "emailAddress"
},
{
- "mandatoryCustomerDataItemId": 5,
+ "mandatoryCustomerDataItemId": 7,
"customerDataItem": "ovPayToken"
}
],
@@ -810,14 +981,10 @@ paths:
"sellingPrices": [
{
"sellingPriceId": 1,
- "amountExclTax": 92,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%"
- },
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
"toInclusive": "2024-12-31T23:59:59.999+00:00",
"internalPrice": 92.0000
@@ -828,13 +995,9 @@ paths:
"purchasePrices": [
{
"purchasePriceId": 1,
- "amountExclTax": 0,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
- "taxCode": "V0",
- "taxPercentageAmount": 0,
- "description": "BTW VERKOOP NUL"
- },
+ "amountExclTax": null,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"amountInclTax": 0,
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
"toInclusive": "2024-12-31T23:59:59.999+00:00"
@@ -861,10 +1024,12 @@ paths:
{
"productId": 2,
"parentProductId": null,
- "productCode": "30901-WL",
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
"gboPackageTemplateId": "30901",
"tapConnectProductCode": null,
- "productGroupMetadata": null,
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
"validityPeriod": {
@@ -891,21 +1056,27 @@ paths:
}
],
"customerSegments": [
- {
- "customerSegmentId": 2,
- "name": "Kind (4-11)"
- },
- {
- "customerSegmentId": 3,
- "name": "Jongere (12-17)"
- },
- {
- "customerSegmentId": 4,
- "name": "Volwassene (18-64)"
- },
{
"customerSegmentId": 5,
- "name": "Oudere (65+)"
+ "name": "Student"
+ },
+ {
+ "customerSegmentId": 6,
+ "name": "Ooievaarspas-gerechtigde"
+ }
+ ],
+ "allowedGboAgeProfiles": [
+ {
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageUntilInclusive": 11
+ },
+ {
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageUntilInclusive": 18
}
],
"productCategory": {
@@ -915,7 +1086,7 @@ paths:
},
"requiredCustomerLevel": {
"requiredCustomerLevelId": 1,
- "name": "anonymous"
+ "name": "guest"
},
"requiredProducts": null,
"incompatibleProducts": [
@@ -931,7 +1102,7 @@ paths:
"customerDataItem": "emailAddress"
},
{
- "mandatoryCustomerDataItemId": 5,
+ "mandatoryCustomerDataItemId": 7,
"customerDataItem": "ovPayToken"
}
],
@@ -985,13 +1156,9 @@ paths:
"sellingPrices": [
{
"sellingPriceId": 1,
- "amountExclTax": 92,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%"
- },
+ "amountExclTax": null,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"amountInclTax": 100,
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
"toInclusive": "2024-12-31T23:59:59.999+00:00",
@@ -999,13 +1166,9 @@ paths:
},
{
"sellingPriceId": 2,
- "amountExclTax": 101,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%"
- },
+ "amountExclTax": null,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"amountInclTax": 110,
"fromInclusive": "2025-01-01T00:00:00.000+00:00",
"toInclusive": "2025-12-31T23:59:59.999+00:00",
@@ -1040,28 +1203,20 @@ paths:
"sellingPrices": [
{
"sellingPriceId": 3,
- "amountExclTax": 92,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%"
- },
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
"toInclusive": "2024-12-31T23:59:59.999+00:00",
"internalPrice": 92.0000
},
{
"sellingPriceId": 4,
- "amountExclTax": 101,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%"
- },
+ "amountExclTax": null,
"amountInclTax": 110,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2025-01-01T00:00:00.000+00:00",
"toInclusive": "2025-12-31T23:59:59.999+00:00",
"internalPrice": 101.0000
@@ -1072,14 +1227,10 @@ paths:
"purchasePrices": [
{
"purchasePriceId": 1,
- "amountExclTax": 0,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
- "taxCode": "V0",
- "taxPercentageAmount": 0,
- "description": "BTW VERKOOP NUL"
- },
+ "amountExclTax": null,
"amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
"toInclusive": "2025-12-31T23:59:59.999+00:00"
}
@@ -1098,17 +1249,29 @@ paths:
"timestamp": "2024-09-03T08:38:24.000+00:00"
}
]
- }
+ }
getDetailsGboPadProduct:
- summary: GBO product (PAD required, renewable, serviceOptions, forbiddenPaymentMethods)
+ summary: GBO product (PAD required, layerInfo, allowedGboAgeProfiles, padBirthDate)
+ description: >-
+ This product has `layerInfo` defined, which means that this product is not a final fulfillable product, but that there are underlying variants
+ that the customer has to choose between. The `layerInfo` defines what distinguishes the underlying variants - in this case the
+ `allowedGboAgeProfiles` array contains different values for the underlying variants. Based on age information provided by the customer,
+ the correct underlying variant can be selected.
value:
{
"productId": 3,
"parentProductId": null,
- "productCode": "35301-MA",
- "gboPackageTemplateId": "35301",
+ "layerInfo": {
+ "layerInfoId": 1,
+ "choiceKey": "allowedGboAgeProfiles",
+ "choiceLabel": "Wat is uw geboortedatum?",
+ "isCustomChoice": false
+ },
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
+ "gboPackageTemplateId": "33610",
"tapConnectProductCode": null,
- "productGroupMetadata": null,
"productName": "HTM Regio Vrij DH73",
"productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
"validityPeriod": {
@@ -1134,32 +1297,41 @@ paths:
"name": "B2C"
}
],
- "customerSegments": [
+ "customerSegments": null,
+ "allowedGboAgeProfiles": [
{
- "customerSegmentId": 2,
- "name": "Kind (4-11)"
+ "gboAgeProfileId": 2,
+ "name": "Kind (4 t/m 11 jaar)",
+ "ageFromInclusive": 4,
+ "ageToInclusive": 11
},
{
- "customerSegmentId": 3,
- "name": "Jongere (12-17)"
+ "gboAgeProfileId": 3,
+ "name": "Jongere (12 t/m 18 jaar)",
+ "ageFromInclusive": 12,
+ "ageToInclusive": 18
},
{
- "customerSegmentId": 4,
- "name": "Volwassene (18-64)"
+ "gboAgeProfileId": 4,
+ "name": "Volwassene (19 t/m 64 jaar)",
+ "ageFromInclusive": 19,
+ "ageToInclusive": 64
},
{
- "customerSegmentId": 5,
- "name": "Oudere (65+)"
+ "gboAgeProfileId": 5,
+ "name": "Oudere (65 jaar of ouder)",
+ "ageFromInclusive": 65,
+ "ageToInclusive": 999
}
],
"productCategory": {
- "productCategoryId": 3,
+ "productCategoryId": 2,
"isTravelProduct": true,
"name": "Afgekocht reisrecht"
},
"requiredCustomerLevel": {
"requiredCustomerLevelId": 3,
- "name": "account"
+ "name": "profile"
},
"requiredProducts": null,
"incompatibleProducts": [
@@ -1170,21 +1342,13 @@ paths:
}
],
"mandatoryCustomerDataItems": [
- {
- "mandatoryCustomerDataItemId": 3,
- "customerDataItem": "dateOfBirth"
- },
{
"mandatoryCustomerDataItemId": 4,
"customerDataItem": "emailAddress"
},
{
- "mandatoryCustomerDataItemId": 5,
- "customerDataItem": "ovPayToken"
- },
- {
- "mandatoryCustomerDataItemId": 6,
- "customerDataItem": "directDebitMandate"
+ "mandatoryCustomerDataItemId": 8,
+ "customerDataItem": "padBirthDate"
}
],
"requiredGboPersonalAttributes": [
@@ -1219,22 +1383,11 @@ paths:
"paymentMomentId": 1,
"name": "prepaid"
},
- "serviceOptions": [
- {
- "serviceOptionId": 1,
- "action": "cancellableTermAhead",
- "description": "Per termijn vooruit opzegbaar"
- },
- {
- "serviceOptionId": 2,
- "action": "cancellableWithin14Days",
- "description": "Binnen 14 dagen na aanschaf opzegbaar, met restitutie en herberekening ritten met product"
- }
- ],
+ "serviceOptions": [],
"validityDuration": "P1M",
"maxStartInFutureDuration": "P6W",
- "isRenewable": true,
- "sendInvoice": true,
+ "isRenewable": null,
+ "sendInvoice": null,
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
@@ -1267,22 +1420,18 @@ paths:
},
"forbiddenPaymentMethods": [
{
- "forbiddenPaymentMethodId": 1,
- "name": "Credit Card",
+ "forbiddenPaymentMethodId": 3,
+ "name": "creditcard",
"issuer": "American Express"
}
],
"sellingPrices": [
{
"sellingPriceId": 5,
- "amountExclTax": 5413,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
- "taxCode": "V09",
- "taxPercentageAmount": 9,
- "description": "BTW VERKOOP LAAG 9%"
- },
+ "amountExclTax": null,
"amountInclTax": 5900,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
"toInclusive": "2024-12-31T23:59:59.999+00:00",
"internalPrice": 5413.0000
@@ -1293,13 +1442,9 @@ paths:
"purchasePrices": [
{
"purchasePriceId": 1,
- "amountExclTax": 0,
- "taxMetadata": {
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
- "taxCode": "V0",
- "taxPercentageAmount": 0,
- "description": "BTW VERKOOP NUL"
- },
+ "amountExclTax": null,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"amountInclTax": 0,
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
"toInclusive": "2024-12-31T23:59:59.999+00:00"
@@ -1320,6 +1465,340 @@ paths:
}
]
}
+ getDetailsFunctionalProductChangeIbanMandate:
+ summary: Functional product (change IBAN mandate)
+ value:
+ {
+ "productId": 143,
+ "parentProductId": null,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
+ "gboPackageTemplateId": null,
+ "tapConnectProductCode": null,
+ "productName": "IBAN wijzigen functioneel product",
+ "productDescription": "IBAN wijzigen functioneel product",
+ "validityPeriod": {
+ "validityPeriodId": 254,
+ "fromInclusive": "2023-12-31T23:00:00.000+00:00",
+ "toInclusive": "2100-12-08T04:00:00.000+00:00"
+ },
+ "productTranslations": [
+ {
+ "language": "en",
+ "name": "Change IBAN functional product",
+ "description": "Change IBAN functional product"
+ }
+ ],
+ "productOwner": {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM"
+ },
+ "marketSegments": [
+ {
+ "marketSegmentId": 1,
+ "name": "B2C"
+ }
+ ],
+ "customerSegments": null,
+ "allowedGboAgeProfiles": null,
+ "productCategory": {
+ "productCategoryId": 7,
+ "isTravelProduct": false,
+ "name": "Functioneel product"
+ },
+ "requiredCustomerLevel": {
+ "requiredCustomerLevelId": 3,
+ "name": "profile"
+ },
+ "requiredProducts": null,
+ "incompatibleProducts": null,
+ "mandatoryCustomerDataItems": null,
+ "requiredGboPersonalAttributes": null,
+ "tokenTypes": null,
+ "paymentMoment": {
+ "paymentMomentId": 1,
+ "name": "prepaid"
+ },
+ "serviceOptions": [
+ {
+ "serviceOptionId": 4,
+ "action": "cancel_notAllowed",
+ "description": "Stopzetting is niet toegestaan (doorgaans in combinatie met refund_notAllowed)"
+ },
+ {
+ "serviceOptionId": 10,
+ "action": "refund_notAllowed",
+ "description": "Terugbetaling niet toegestaan (doorgaans in combinatie met cancel_notAllowed)"
+ }
+ ],
+ "validityDuration": null,
+ "maxStartInFutureDuration": null,
+ "isRenewable": null,
+ "sendInvoice": null,
+ "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/onbekend/",
+ "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/onbekend/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods": [
+ {
+ "sellingPeriodId": 204,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ "salesTouchpoint": {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer": {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": 10,
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": 572309345923,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg"
+ }
+ },
+ "forbiddenPaymentMethods": [
+ {
+ "forbiddenPaymentMethodId": 1,
+ "name": "creditcard",
+ "issuer": "Mastercard"
+ },
+ {
+ "forbiddenPaymentMethodId": 2,
+ "name": "creditcard",
+ "issuer": "Visa"
+ },
+ {
+ "forbiddenPaymentMethodId": 3,
+ "name": "creditcard",
+ "issuer": "American Express"
+ }
+ ],
+ "sellingPrices": [
+ {
+ "sellingPriceId": 187,
+ "taxCode": "V0",
+ "taxPercentage": 0.0000,
+ "amountExclTax": null,
+ "amountInclTax": 1,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ "internalPrice": 0.0000
+ }
+ ]
+ },
+ {
+ "sellingPeriodId": 448,
+ "fromInclusive": "2023-12-31T23:00:00.000+00:00",
+ "toInclusive": "2099-12-08T04:00:00.000+00:00",
+ "salesTouchpoint": {
+ "salesTouchpointId": 6,
+ "name": "SMP (Service Medewerker Portaal)",
+ "isActive": true,
+ "retailer": {
+ "retailerId": 1000,
+ "name": "HTM interne touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": 10,
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": 572309345923,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg"
+ }
+ },
+ "forbiddenPaymentMethods": [
+ {
+ "forbiddenPaymentMethodId": 1,
+ "name": "creditcard",
+ "issuer": "Mastercard"
+ },
+ {
+ "forbiddenPaymentMethodId": 2,
+ "name": "creditcard",
+ "issuer": "Visa"
+ },
+ {
+ "forbiddenPaymentMethodId": 3,
+ "name": "creditcard",
+ "issuer": "American Express"
+ }
+ ],
+ "sellingPrices": [
+ {
+ "sellingPriceId": 383,
+ "taxCode": "V00",
+ "taxPercentage": 0.0000,
+ "amountExclTax": null,
+ "amountInclTax": 1,
+ "fromInclusive": "2025-01-31T23:00:00.000+00:00",
+ "toInclusive": "2030-12-08T04:00:00.000+00:00",
+ "internalPrice": 1.0000
+ }
+ ]
+ }
+ ],
+ "purchasePrices": null,
+ "auditTrail": [
+ {
+ "auditTrailId": 5124,
+ "action": "update",
+ "user": "api",
+ "timestamp": "2025-09-05T16:06:25.823+00:00"
+ }
+ ]
+ }
+ getDetailsSaldoProduct:
+ summary: Saldo product
+ value:
+ {
+ "productId": 123,
+ "parentProductId": null,
+ "layerInfo": null,
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
+ "gboPackageTemplateId": null,
+ "tapConnectProductCode": null,
+ "productName": "OV-pas saldo (1 eurocent)",
+ "productDescription": "1 eurocent saldo voor de OV-pas ",
+ "validityPeriod": {
+ "validityPeriodId": 123,
+ "fromInclusive": "2023-12-31T23:00:00.000+00:00",
+ "toInclusive": "2100-12-08T04:00:00.000+00:00"
+ },
+ "productTranslations": [
+ {
+ "language": "en",
+ "name": "OV-pas credit (1 eurocent)",
+ "description": "1 eurocent credit for the OV-pas"
+ }
+ ],
+ "productOwner": {
+ "productOwnerId": 17,
+ "name": "Corneel Verstoep",
+ "organization": "HTM"
+ },
+ "marketSegments": [
+ {
+ "marketSegmentId": 1,
+ "name": "B2C"
+ }
+ ],
+ "customerSegments": null,
+ "allowedGboAgeProfiles": null,
+ "productCategory": {
+ "productCategoryId": 8,
+ "isTravelProduct": true,
+ "name": "Saldo"
+ },
+ "requiredCustomerLevel": {
+ "requiredCustomerLevelId": 1,
+ "name": "guest"
+ },
+ "requiredProducts": null,
+ "incompatibleProducts": null,
+ "mandatoryCustomerDataItems": null,
+ "requiredGboPersonalAttributes": null,
+ "tokenTypes": [
+ {
+ "tokenTypeId": 2,
+ "name": "OVPas physical"
+ },
+ {
+ "tokenTypeId": 3,
+ "name": "OVPas digital"
+ }
+ ],
+ "paymentMoment": {
+ "paymentMomentId": 1,
+ "name": "prepaid"
+ },
+ "serviceOptions": [
+ {
+ "serviceOptionId": 4,
+ "action": "cancel_notAllowed",
+ "description": "Stopzetting is niet toegestaan (doorgaans in combinatie met refund_notAllowed)"
+ },
+ {
+ "serviceOptionId": 10,
+ "action": "refund_notAllowed",
+ "description": "Terugbetaling niet toegestaan (doorgaans in combinatie met cancel_notAllowed)"
+ }
+ ],
+ "validityDuration": null,
+ "maxStartInFutureDuration": null,
+ "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/onbekend/",
+ "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/onbekend/",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods": [
+ {
+ "sellingPeriodId": 123,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ "salesTouchpoint": {
+ "salesTouchpointId": 3,
+ "name": "Website (Perplex)",
+ "isActive": true,
+ "retailer": {
+ "retailerId": 1001,
+ "name": "HTM externe touchpoints",
+ "street": "Koningin Julianaplein",
+ "number": 10,
+ "numberAddition": null,
+ "postalCode": "2595 AA",
+ "city": "Den Haag",
+ "country": "Nederland",
+ "emailAddress": "info@htm.nl",
+ "phoneNumber": "070 374 9002",
+ "taxId": 572309345923,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg"
+ }
+ },
+ "forbiddenPaymentMethods": null,
+ "sellingPrices": [
+ {
+ "sellingPriceId": 123,
+ "taxCode": null,
+ "taxPercentage": null,
+ "amountExclTax": null,
+ "amountInclTax": 1,
+ "fromInclusive": "2024-09-30T23:00:00.000+00:00",
+ "toInclusive": "2099-12-30T23:00:00.000+00:00",
+ "internalPrice": 0.0000
+ }
+ ]
+ }
+ ],
+ "purchasePrices": null,
+ "auditTrail": [
+ {
+ "auditTrailId": 5124,
+ "action": "update",
+ "user": "api",
+ "timestamp": "2025-09-05T16:06:25.823+00:00"
+ }
+ ]
+ }
getDetailsGboProductSupplement:
summary: TODO - GBO product (supplement with requirements)
value:
@@ -1332,12 +1811,7 @@ paths:
{
"productName": "TODO"
}
- getDetailsIbanMandate:
- summary: TODO - IBAN mandate (functional product)
- value:
- {
- "productName": "TODO"
- }
+
'400':
description: '400'
content:
@@ -1393,16 +1867,17 @@ paths:
value:
{
"productOwnerId": 1,
- "isRenewable": false,
- "isSellableAtHtm": false,
- "needsSolvencyCheckConsumer": false,
- "needsSolvencyCheckBusiness": false
+ "isValid": false,
+ "isArchived": false,
+ "isSellableAtHtm": false
}
updateGboProduct:
summary: Update existing GBO product (non-renewable)
value:
{
- "productCode": "30901-WL",
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
"gboPackageTemplateId": "30901",
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
@@ -1423,11 +1898,10 @@ paths:
1
],
"customerSegmentIds": [
- 2,
- 3,
- 4,
- 5
+ 5,
+ 6
],
+ "allowedGboAgeProfileIds": [],
"productCategoryId": 1,
"requiredCustomerLevelId": 1,
"incompatibleProducts": [
@@ -1438,7 +1912,7 @@ paths:
],
"mandatoryCustomerDataItemIds": [
4,
- 5
+ 7
],
"tokenTypeIds": [
1
@@ -1463,9 +1937,10 @@ paths:
"sellingPrices": [
{
"sellingPriceId": 1,
- "amountExclTax": 92,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 92.0000
@@ -1476,21 +1951,24 @@ paths:
"purchasePrices": [
{
"purchasePriceId": 1,
- "amountExclTax": 0,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
+ "amountExclTax": null,
"amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999"
}
]
}
- advancedUpdateGboProduct:
- summary: >-
- Advanced update (remove mandatoryCustomerDataItem references,
- add new second sellingPeriod)
+ updateGboProductWithParent:
+ summary: Update existing GBO product with parent and layerInfo (non-renewable)
value:
{
- "productCode": "30901-WL",
+ "parentProductId": 1,
+ "layerInfoId": 1,
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
"gboPackageTemplateId": "30901",
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
@@ -1511,11 +1989,100 @@ paths:
1
],
"customerSegmentIds": [
- 2,
- 3,
- 4,
- 5
+ 5,
+ 6
],
+ "allowedGboAgeProfileIds": [],
+ "productCategoryId": 1,
+ "requiredCustomerLevelId": 1,
+ "incompatibleProducts": [
+ {
+ "incompatibleProductId": 2,
+ "description": "Kan niet combineren met zichzelf"
+ }
+ ],
+ "mandatoryCustomerDataItemIds": [
+ 4,
+ 7
+ ],
+ "tokenTypeIds": [
+ 1
+ ],
+ "paymentMomentId": 1,
+ "validityDuration": "P7D",
+ "maxStartInFutureDuration": "P6W",
+ "isRenewable": false,
+ "sendInvoice": false,
+ "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
+ "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
+ "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
+ "isSellableAtHtm": true,
+ "needsSolvencyCheckConsumer": false,
+ "needsSolvencyCheckBusiness": false,
+ "sellingPeriods": [
+ {
+ "sellingPeriodId": 1,
+ "fromInclusive": "2024-09-01T00:00:00.000",
+ "toInclusive": "2024-12-31T23:59:59.999",
+ "salesTouchpointId": 3,
+ "sellingPrices": [
+ {
+ "sellingPriceId": 1,
+ "amountExclTax": null,
+ "amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ "fromInclusive": "2024-09-01T00:00:00.000",
+ "toInclusive": "2024-12-31T23:59:59.999",
+ "internalPrice": 92.0000
+ }
+ ]
+ }
+ ],
+ "purchasePrices": [
+ {
+ "purchasePriceId": 1,
+ "amountExclTax": null,
+ "amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
+ "fromInclusive": "2024-09-01T00:00:00.000",
+ "toInclusive": "2024-12-31T23:59:59.999"
+ }
+ ]
+ }
+ advancedUpdateGboProduct:
+ summary: >-
+ Advanced update (remove mandatoryCustomerDataItem references, add new second sellingPeriod)
+ value:
+ {
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
+ "gboPackageTemplateId": "30901",
+ "productName": "HTM pilot 90% korting",
+ "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
+ "validityPeriod": {
+ "validityPeriodId": 1,
+ "fromInclusive": "2024-09-01T00:00:00.000",
+ "toInclusive": "2024-12-31T23:59:59.999"
+ },
+ "productTranslations": [
+ {
+ "language": "en",
+ "name": "HTM pilot 90% discount",
+ "description": "Travel with 90% discount during the first F&F pilot!"
+ }
+ ],
+ "productOwnerId": 1,
+ "marketSegmentIds": [
+ 1
+ ],
+ "customerSegmentIds": [
+ 5,
+ 6
+ ],
+ "allowedGboAgeProfileIds": [],
"productCategoryId": 1,
"requiredCustomerLevelId": 1,
"incompatibleProducts": [
@@ -1548,8 +2115,9 @@ paths:
"sellingPrices": [
{
"sellingPriceId": 1,
- "amountExclTax": 92,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"amountInclTax": 100,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
@@ -1563,17 +2131,19 @@ paths:
"salesTouchpointId": 2,
"sellingPrices": [
{
- "amountExclTax": 92,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 92.0000
},
{
- "amountExclTax": 101,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 110,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2025-01-01T00:00:00.000",
"toInclusive": "2025-12-31T23:59:59.999",
"internalPrice": 101.0000
@@ -1584,9 +2154,10 @@ paths:
"purchasePrices": [
{
"purchasePriceId": 1,
- "amountExclTax": 0,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
+ "amountExclTax": null,
"amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999"
}
@@ -1594,11 +2165,12 @@ paths:
}
updateGboProductMultiplePeriods:
summary: >-
- Update existing GBO product (non-renewable, multiple
- sellingPeriods/prices per period)
+ Update existing GBO product (non-renewable, multiple sellingPeriods/prices per period)
value:
{
- "productCode": "30901-WL",
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
"gboPackageTemplateId": "30901",
"productName": "HTM pilot 90% korting",
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
@@ -1619,11 +2191,10 @@ paths:
1
],
"customerSegmentIds": [
- 2,
- 3,
- 4,
- 5
+ 5,
+ 6
],
+ "allowedGboAgeProfileIds": [],
"productCategoryId": 1,
"requiredCustomerLevelId": 1,
"incompatibleProducts": [
@@ -1634,7 +2205,7 @@ paths:
],
"mandatoryCustomerDataItemIds": [
4,
- 5
+ 7
],
"tokenTypeIds": [
1
@@ -1659,18 +2230,20 @@ paths:
"sellingPrices": [
{
"sellingPriceId": 1,
- "amountExclTax": 92,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 92.0000
},
{
"sellingPriceId": 2,
- "amountExclTax": 101,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 110,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2025-01-01T00:00:00.000",
"toInclusive": "2025-12-31T23:59:59.999",
"internalPrice": 101.0000
@@ -1685,18 +2258,20 @@ paths:
"sellingPrices": [
{
"sellingPriceId": 3,
- "amountExclTax": 92,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 100,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 92.0000
},
{
"sellingPriceId": 4,
- "amountExclTax": 101,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 110,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2025-01-01T00:00:00.000",
"toInclusive": "2025-12-31T23:59:59.999",
"internalPrice": 101.0000
@@ -1707,9 +2282,10 @@ paths:
"purchasePrices": [
{
"purchasePriceId": 1,
- "amountExclTax": 0,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
+ "amountExclTax": null,
"amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2025-12-31T23:59:59.999"
}
@@ -1717,12 +2293,13 @@ paths:
}
updateGboPadProduct:
summary: >-
- Update existing GBO product (PAD required, renewable,
- serviceOptions, forbiddenPaymentMethods)
+ Update existing GBO product (PAD required, renewable, allowedGboAgeProfiles, padBirthDate)
value:
{
- "productCode": "35301-MA",
- "gboPackageTemplateId": "35301",
+ "fikoArticleNumber": "1234",
+ "isValid": true,
+ "isArchived": false,
+ "gboPackageTemplateId": "33610",
"productName": "HTM Regio Vrij DH73",
"productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.",
"validityPeriod": {
@@ -1742,12 +2319,16 @@ paths:
1
],
"customerSegmentIds": [
+ 5,
+ 6
+ ],
+ "allowedGboAgeProfileIds": [
2,
3,
4,
5
],
- "productCategoryId": 3,
+ "productCategoryId": 2,
"requiredCustomerLevelId": 3,
"requiredProducts": [
{
@@ -1762,10 +2343,8 @@ paths:
}
],
"mandatoryCustomerDataItemIds": [
- 3,
4,
- 5,
- 6
+ 8
],
"requiredGboPersonalAttributeIds": [
1,
@@ -1778,10 +2357,7 @@ paths:
3
],
"paymentMomentId": 1,
- "serviceOptionIds": [
- 1,
- 2
- ],
+ "serviceOptionIds": [],
"validityDuration": "P1M",
"maxStartInFutureDuration": "P6W",
"isRenewable": true,
@@ -1799,14 +2375,15 @@ paths:
"toInclusive": "2024-12-31T23:59:59.999",
"salesTouchpointId": 3,
"forbiddenPaymentMethodIds": [
- 1
+ 3
],
"sellingPrices": [
{
"sellingPriceId": 1,
- "amountExclTax": 5413,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E",
+ "amountExclTax": null,
"amountInclTax": 5900,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999",
"internalPrice": 5413.0000
@@ -1817,9 +2394,10 @@ paths:
"purchasePrices": [
{
"purchasePriceId": 1,
- "amountExclTax": 0,
- "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F",
+ "amountExclTax": null,
"amountInclTax": 0,
+ "taxCode": "V09",
+ "taxPercentage": 9.0000,
"fromInclusive": "2024-09-01T00:00:00.000",
"toInclusive": "2024-12-31T23:59:59.999"
}
@@ -1876,26 +2454,74 @@ paths:
$ref: '#/components/schemas/500Response'
components:
schemas:
- TaxMetadataResponse:
+ LayerInfoResponse:
+ type: object
+ description: >-
+ Gives information on the choice that the customer has to make, to enable the touchpoint
+ to proceed further "down the product-tree" by selecting (PATCH-ing) the correct product-variant.
+ LayerInfo is not a mandatory product-attribute, but it should always be present on all products for which
+ there are underlying products, i.e. for which `GET /products?parentProductId=...` returns a non-empty list.
+ When no LayerInfo is present, the touchpoint can conclude that the product is a final fulfillable product. \
+
+ **PMT should ensure that all non-leaf-node products (i.e. products that have underlying products) have a `layerInfoId`
+ referenced. If a product is found to be in violation of this rule, its attribtue `isValid` should be set to `false`.**
+ required:
+ - layerInfoId
+ - choiceKey
+ - choiceLabel
+ - isCustomChoice
+ properties:
+ layerInfoId:
+ example: 1
+ type: integer
+ choiceKey:
+ example: isRenewable
+ type: string
+ description: >-
+ Contains the JSON Key of the product-attribute that the customer has to make some
+ choice on (determined by PMT), so that te correct product-variant (one of the direct child-products) can be
+ selected by the touchpoint. For some decisions (like region), there is no product attribute, and thus
+ `isCustomChoice` will be set to `true`, and `choiceKey` can then be set to any string on which touchpoints
+ can also trigger behaviour if desired (think "region picker tool"). Therefore, reuse of `choiceKeys` should be
+ the goal, so touchoints can keep their triggers simple and prevent duplication of
+ similar `choiceKeys` to trigger the same behaviour.
+ choiceLabel:
+ example: Kies voor een doorlopend abonnement of een enkele termijn
+ type: string
+ description: >-
+ Contains a human-readable label for the choice that the customer has to make - this label
+ should be something that is easy to understand for the customer. Only one label (and thus, one language)
+ is supported; label translations should be handled by the touchpoint.
+ isCustomChoice:
+ example: false
+ type: boolean
+ description: >-
+ Indicates if the choice is a custom choice. If `false`, the PMT should validate that the `choiceKey` is a
+ differentiating attribute for the underlying product-variants. When the attribute denoted by the `choiceKey` is
+ the same for all underlying variants, PMT validation will fail and the product will become invalid (`isValid == false`)
+ until either the underlying products are updated, or a `LayerInfo` with `isCustomChoice == true` is configured.
+ GboAgeProfileResponse:
type: object
required:
- - taxMetadataId
- - taxCode
- - taxPercentageAmount
+ - gboAgeProfileId
+ - name
+ - ageFromInclusive
+ - ageUntilInclusive
properties:
- taxMetadataId:
- type: string
- format: uuid
- example: 501B17EF-36C4-4039-B92C-6517969B464E
- taxCode:
- type: string
- example: V09
- taxPercentageAmount:
+ gboAgeProfileId:
type: integer
- example: 21
- description:
+ example: 1
+ name:
type: string
- example: BTW VERKOOP LAAG 9%
+ example: Kind (4 t/m 11 jaar)
+ ageFromInclusive:
+ type: integer
+ description: The minimum age that the GBO age profile applies to
+ example: 4
+ ageUntilInclusive:
+ type: integer
+ description: The maximum age that the GBO age profile applies to
+ example: 11
ProductTranslationResponse:
type: object
required:
@@ -1916,8 +2542,6 @@ components:
type: object
required:
- sellingPriceId
- - amountExclTax
- - taxMetadata
- amountInclTax
- fromInclusive
- toInclusive
@@ -1928,9 +2552,13 @@ components:
example: 1
amountExclTax:
type: integer
- example: 750
- taxMetadata:
- $ref: '#/components/schemas/TaxMetadataResponse'
+ example: null
+ taxCode:
+ type: string
+ example: 'V09'
+ taxPercentage:
+ type: number
+ example: 9.0000
amountInclTax:
type: integer
example: 908
@@ -1949,8 +2577,6 @@ components:
type: object
required:
- purchasePriceId
- - amountExclTax
- - taxMetadata
- amountInclTax
- fromInclusive
- toInclusive
@@ -1960,9 +2586,13 @@ components:
example: 1
amountExclTax:
type: integer
- example: 750
- taxMetadata:
- $ref: '#/components/schemas/TaxMetadataResponse'
+ example: null
+ taxCode:
+ type: string
+ example: 'V09'
+ taxPercentage:
+ type: number
+ example: 9.0000
amountInclTax:
type: integer
example: 908
@@ -2045,13 +2675,26 @@ components:
type: object
required:
- productId
+ - productName
+ - productDescription
+ - productCategory
+ - tokenTypes
+ - sellableTouchpointIds
+ - amountInclTax
+ - imageReference
+ - productPageUrl
properties:
productId:
type: integer
example: 1
- productCode:
- type: string
- example: 30901-WL
+ isValid:
+ type: boolean
+ description: Not returned for external touchpoints
+ example: true
+ isArchived:
+ type: boolean
+ description: Not returned for external touchpoints
+ example: false
productName:
type: string
example: HTM pilot 90% korting
@@ -2074,7 +2717,21 @@ components:
name:
type: string
example: Kortingsabonnement
- sellableTouchPointIds:
+ tokenTypes:
+ type: array
+ items:
+ type: object
+ required:
+ - tokenTypeId
+ - name
+ properties:
+ tokenTypeId:
+ type: integer
+ example: 1
+ name:
+ type: string
+ example: EMV
+ sellableTouchpointIds:
type: array
items:
type: integer
@@ -2089,19 +2746,14 @@ components:
type: string
format: uri
example: https://www.htm.nl/nog-onbekende-product-pagina
- href:
- type: string
- format: uri
- example: https://api.htm.nl/products?page=2
ProductPayloadResponse:
type: object
required:
- productId
- productOwner
- - isRenewable
+ - isValid
+ - isArchived
- isSellableAtHtm
- - needsSolvencyCheckConsumer
- - needsSolvencyCheckBusiness
properties:
productId:
type: integer
@@ -2109,66 +2761,26 @@ components:
parentProductId:
type: integer
example: 1
- productCode:
+ layerInfo:
+ $ref: '#/components/schemas/LayerInfoResponse'
+ fikoArticleNumber:
type: string
- example: 30901-WL
+ description: The article number of the product in FIKO
+ example: 1234
+ isValid:
+ type: boolean
+ description: Indicates if the product is valid - if false, the Service Engine will prevent touchpoints from seeing this product
+ example: true
+ isArchived:
+ type: boolean
+ description: Indicates if the product is archived - if true, the Service Engine will prevent touchpoints from seeing this product
+ example: false
gboPackageTemplateId:
type: string
example: '30901'
tapConnectProductCode:
type: string
example: 1234AB
- productGroupMetadata:
- type: object
- required:
- - productGroupMetadataId
- - productGroupCode
- - department
- - costCenter
- - costType
- - description
- - documentCode
- - user
- - timestampUpdated
- - validFrom
- properties:
- productGroupMetadataId:
- type: string
- format: uuid
- example: 501B17EF-36C4-4039-B92C-6517969B464E
- productGroupCode:
- type: string
- example: TBD
- department:
- type: string
- example: TBD
- costCenter:
- type: string
- example: TBD
- costType:
- type: string
- example: TBD
- description:
- type: string
- example: TBD
- documentCode:
- type: string
- example: TBD
- user:
- type: string
- example: TBD
- timestampUpdated:
- type: string
- format: date-time-offset
- example: '2024-09-03T10:01:34.000+00:00'
- validFrom:
- type: string
- format: date-time-offset
- example: '2024-09-03T10:01:34.000+00:00'
- validUntil:
- type: string
- format: date-time-offset
- example: '2024-09-03T10:01:34.000+00:00'
productName:
type: string
example: HTM pilot 90% korting
@@ -2240,6 +2852,11 @@ components:
name:
type: string
example: Kind (4-11)
+ allowedGboAgeProfiles:
+ type: array
+ items:
+ type: object
+ $ref: '#/components/schemas/GboAgeProfileResponse'
productCategory:
type: object
required:
@@ -2267,7 +2884,7 @@ components:
example: 1
name:
type: string
- example: anonymous
+ example: guest
requiredProducts:
type: array
items:
@@ -2449,10 +3066,10 @@ components:
properties:
forbiddenPaymentMethodId:
type: integer
- example: 1
+ example: 3
name:
type: string
- example: Credit Card
+ example: creditcard
issuer:
type: string
example: American Express
@@ -2490,20 +3107,31 @@ components:
CreateProductRequest:
required:
- productOwnerId
- - isRenewable
+ - isValid
+ - isArchived
- isSellableAtHtm
- - needsSolvencyCheckConsumer
- - needsSolvencyCheckBusiness
type: object
properties:
parentProductId:
type: integer
description: The ID of the parent product (if any)
example: 1
- productCode:
+ layerInfoId:
+ type: integer
+ description: Only relevant when `parentProductId != null`; the ID of the layerInfo reference, giving information on why this layer of product-variants exists (PMT should enforce that this is filled for all products for which `parentProductId != null`)
+ example: 1
+ fikoArticleNumber:
type: string
- description: The HTM-internal product code
- example: 30901-WL
+ description: The article number of the product in FIKO
+ example: 1234
+ isValid:
+ type: boolean
+ description: Indicates if the product is valid - if false, the Service Engine will prevent touchpoints from seeing this product
+ example: true
+ isArchived:
+ type: boolean
+ description: Indicates if the product is archived - if true, the Service Engine will prevent touchpoints from seeing this product
+ example: false
gboPackageTemplateId:
type: string
description: >-
@@ -2516,11 +3144,6 @@ components:
The productCode of the TapConnect product that should be issued
after buying this product
example: 1234AB
- productGroupMetadataId:
- type: string
- format: uuid
- description: The ID of the productGroupMetadata for administration in U4F
- example: 501B17EF-36C4-4039-B92C-6517969B464E
productName:
type: string
description: The name of the product
@@ -2587,6 +3210,12 @@ components:
items:
type: integer
example: 1
+ allowedGboAgeProfileIds:
+ type: array
+ description: The IDs of the allowed GBO age profiles
+ items:
+ type: integer
+ example: 1
productCategoryId:
type: integer
description: The ID of the category the product belongs to
@@ -2774,8 +3403,6 @@ components:
items:
type: object
required:
- - amountExclTax
- - taxMetadataId
- amountInclTax
- fromInclusive
- toInclusive
@@ -2783,11 +3410,13 @@ components:
properties:
amountExclTax:
type: integer
- example: 750
- taxMetadataId:
+ example: null
+ taxCode:
type: string
- format: uuid
- example: 501B17EF-36C4-4039-B92C-6517969B464E
+ example: 'V09'
+ taxPercentage:
+ type: number
+ example: 9.0000
amountInclTax:
type: integer
example: 908
@@ -2816,19 +3445,19 @@ components:
items:
type: object
required:
- - amountExclTax
- - taxMetadataId
- amountInclTax
- fromInclusive
- toInclusive
properties:
amountExclTax:
type: integer
- example: 750
- taxMetadataId:
+ example: null
+ taxCode:
type: string
- format: uuid
- example: 501B17EF-36C4-4039-B92C-6517969B464E
+ example: 'V09'
+ taxPercentage:
+ type: number
+ example: 9.0000
amountInclTax:
type: integer
example: 908
@@ -2849,20 +3478,31 @@ components:
UpdateProductRequest:
required:
- productOwnerId
- - isRenewable
+ - isValid
+ - isArchived
- isSellableAtHtm
- - needsSolvencyCheckConsumer
- - needsSolvencyCheckBusiness
type: object
properties:
parentProductId:
type: integer
description: The ID of the parent product (if any)
example: 1
- productCode:
+ layerInfoId:
+ type: integer
+ description: Only relevant when `parentProductId != null`; the ID of the layerInfo reference, giving information on why this layer of product-variants exists (PMT should enforce that this is filled for all products for which `parentProductId != null`)
+ example: 1
+ fikoArticleNumber:
type: string
- description: The HTM-internal product code
- example: 30901-WL
+ description: The article number of the product in FIKO
+ example: 1234
+ isValid:
+ type: boolean
+ description: Indicates if the product is valid - if false, the Service Engine will prevent touchpoints from seeing this product
+ example: true
+ isArchived:
+ type: boolean
+ description: Indicates if the product is archived - if true, the Service Engine will prevent touchpoints from seeing this product
+ example: false
gboPackageTemplateId:
type: string
description: >-
@@ -2875,11 +3515,6 @@ components:
The productCode of the TapConnect product that should be issued
after buying this product
example: 1234AB
- productGroupMetadataId:
- type: string
- format: uuid
- description: The ID of the productGroupMetadata for administration in U4F
- example: 501B17EF-36C4-4039-B92C-6517969B464E
productName:
type: string
description: The name of the product
@@ -2953,6 +3588,12 @@ components:
items:
type: integer
example: 1
+ allowedGboAgeProfileIds:
+ type: array
+ description: The IDs of the allowed GBO age profiles
+ items:
+ type: integer
+ example: 1
productCategoryId:
type: integer
description: The ID of the category the product belongs to
@@ -3147,8 +3788,6 @@ components:
items:
type: object
required:
- - amountExclTax
- - taxMetadataId
- amountInclTax
- fromInclusive
- toInclusive
@@ -3163,14 +3802,16 @@ components:
example: 1
amountExclTax:
type: integer
- example: 750
- taxMetadataId:
- type: string
- format: uuid
- example: 501B17EF-36C4-4039-B92C-6517969B464E
+ example: null
amountInclTax:
type: integer
example: 908
+ taxCode:
+ type: string
+ example: V09
+ taxPercentage:
+ type: number
+ example: 9.0000
fromInclusive:
type: string
format: date-time
@@ -3196,8 +3837,6 @@ components:
items:
type: object
required:
- - amountExclTax
- - taxMetadataId
- amountInclTax
- fromInclusive
- toInclusive
@@ -3211,14 +3850,16 @@ components:
example: 1
amountExclTax:
type: integer
- example: 750
- taxMetadataId:
- type: string
- format: uuid
- example: 501B17EF-36C4-4039-B92C-6517969B464E
+ example: null
amountInclTax:
type: integer
example: 908
+ taxCode:
+ type: string
+ example: V09
+ taxPercentage:
+ type: number
+ example: 9.0000
fromInclusive:
type: string
format: date-time
diff --git a/src/openapi/products/purchased_products-crud.yaml b/src/openapi/products/purchased_products-crud.yaml
index 1a77eda..7bacd3b 100644
--- a/src/openapi/products/purchased_products-crud.yaml
+++ b/src/openapi/products/purchased_products-crud.yaml
@@ -4,7 +4,7 @@ info:
version: "1.0"
description: CRUD APIs for ABT Purchased Products database. These are NOT the functional APIs from Service Engine.
servers:
- - url: https://api.integratielaag.nl/v1
+ - url: https://services.acc.api.htm.nl/abt/abtproducts/1.0
paths:
/purchasedproducts:
get:
@@ -52,6 +52,13 @@ paths:
example: 2024-10-04T12:34:56.000
required: false
description: The purchased product should be last updated after this timestamp.
+ - in: query
+ name: resourceNameId
+ schema:
+ type: integer
+ example: 2
+ required: false
+ description: The id of the resource.
- in: query
name: resourceName
schema:
diff --git a/src/openapi/sendgrid/sendgrid-oas_v3.yaml b/src/openapi/sendgrid/sendgrid-oas_v3.yaml
new file mode 100644
index 0000000..153393f
--- /dev/null
+++ b/src/openapi/sendgrid/sendgrid-oas_v3.yaml
@@ -0,0 +1,593 @@
+openapi: "3.0.3"
+info:
+ title: Twilio SendGrid v3 API
+ description: >-
+ The Twilio SendGrid v3 API provides a simple, intuitive RESTful-like
+ interface for sending email at scale, monitoring email engagement data
+ programmatically, managing account settings, and more. This OpenAPI
+ representation of the Twilio SendGrid v3 API allows you to generate helper
+ libraries (in addition to the libraries officially released by Twilio
+ SendGrid) and build mock servers for testing.
+ termsOfService: https://www.twilio.com/legal/tos
+ contact:
+ name: Twilio SendGrid Support
+ url: https://support.sendgrid.com/hc/en-us
+ license:
+ name: MIT
+ url: https://github.com/sendgrid/sendgrid-oai/blob/main/LICENSE
+ version: 1.8.1
+servers:
+ - url: https://https://services.acc.api.htm.nl/sendgrid
+ description: The Integration Layer SendGrid API integration (Acceptance).
+paths:
+ /v3/mail/send:
+ post:
+ operationId: POST_mail-send
+ summary: v3 Mail Send
+ tags:
+ - Mail Send
+ description: |-
+ The Mail Send endpoint allows you to send email over SendGrid's v3 Web API, the most recent version of our API. If you are looking for documentation about the v2 Mail Send endpoint, see our [v2 API Reference](https://sendgrid.com/docs/API_Reference/Web_API/mail.html).
+
+ ## Helper Libraries
+
+ Twilio SendGrid provides libraries to help you quickly and easily integrate with the v3 Web API in 7 different languages:
+
+ * [C#](https://github.com/sendgrid/sendgrid-csharp)
+ * [Go](https://github.com/sendgrid/sendgrid-go)
+ * [Java](https://github.com/sendgrid/sendgrid-java)
+ * [Node JS](https://github.com/sendgrid/sendgrid-nodejs)
+ * [PHP](https://github.com/sendgrid/sendgrid-php)
+ * [Python](https://github.com/sendgrid/sendgrid-python)
+ * [Ruby](https://github.com/sendgrid/sendgrid-ruby)
+
+ ## Dynamic Transactional Templates and Handlebars
+
+ In order to send a dynamic template, specify the template ID with the `template_id` parameter.
+
+ To specify handlebar substitutions, define your substitutions in the request JSON with this syntax:
+
+ ```
+ "dynamic_template_data": {
+ "guest": "Jane Doe",
+ "partysize": "4",
+ "english": true,
+ "date": "April 1st, 2021"
+ }
+ ```
+
+ For more information about Dynamic Transactional Templates and Handlebars, see our documentation and reference pages.
+
+ * [How to send an email with Dynamic Transactional Templates
+ ](https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/)
+ * [Using Handlebars](https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/)
+
+ ## Mail Body Compression
+
+ Mail body compression is available to some high volume accounts. Talk to your CSM if you are interested in this functionality. Mail body compression works by setting up a JSON payload as defined on this page, then compressing it with gzip (the gzip file can be no more than 30mb).
+
+ To use mail body compression:
+
+ 1. Add a `Content-Encoding` header, with a value of `gzip`.
+ a. `Content-Encoding: gzip`
+ 2. Send the gzip as a data-binary.
+ a. `--data-binary '@data.json.gz'
+ `
+
+ ## Multiple Reply-To Emails
+
+ Using `reply_to_list` allows senders to include more than one recipient email address to receive reply and/or bounce messages from the recipient of the email.
+
+ ### Usage Considerations
+
+ * `reply_to` is mutually exclusive with `reply_to_list`. If both are used, then the API call will be rejected.
+ * The `reply_to_list` object, when used, must at least have an email parameter and may also contain a name parameter.
+ * Each email address in the `reply_to_list` should be unique.
+ * There is a limit of 1000 `reply_to_list` emails per mail/send request.
+ * In SMTP calls, we will omit any invalid emails.
+
+ ### Possible 400 Error Messages
+
+ * `reply_to` is mutually exclusive with `reply_to_list`.
+ * The `reply_to_list` object, when used, must at least have an email parameter and may also contain a name parameter.
+ * Each email address in the `reply_to_list` should be unique.
+ * There is a limit of X `reply_to` emails per mail/send request.
+ * The `reply_to_list` email does not contain a valid address.
+ * The `reply_to_list` email exceeds the maximum total length of X characters.
+ * The `reply_to_list` email parameter is required.
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ properties:
+ personalizations:
+ type: array
+ description: An array of messages and their metadata. Each object within personalizations can be thought of as an envelope - it defines who should receive an individual message and how that message should be handled. See our [Personalizations documentation](https://sendgrid.com/docs/for-developers/sending-email/personalizations/) for examples.
+ uniqueItems: false
+ maxItems: 1000
+ items:
+ type: object
+ properties:
+ from:
+ $ref: "#/components/schemas/from_email_object"
+ to:
+ $ref: "#/components/schemas/to_email_array"
+ cc:
+ type: array
+ description: An array of recipients who will receive a copy of your email. Each object in this array must contain the recipient's email address. Each object in the array may optionally contain the recipient's name.
+ maxItems: 1000
+ items:
+ $ref: "#/components/schemas/cc_bcc_email_object"
+ bcc:
+ type: array
+ description: An array of recipients who will receive a blind carbon copy of your email. Each object in this array must contain the recipient's email address. Each object in the array may optionally contain the recipient's name.
+ maxItems: 1000
+ items:
+ $ref: "#/components/schemas/cc_bcc_email_object"
+ subject:
+ type: string
+ description: The subject of your email. See character length requirements according to [RFC 2822](http://stackoverflow.com/questions/1592291/what-is-the-email-subject-length-limit#answer-1592310).
+ minLength: 1
+ headers:
+ type: object
+ description: 'A collection of JSON key/value pairs allowing you to specify handling instructions for your email. You may not overwrite the following headers: `x-sg-id`, `x-sg-eid`, `received`, `dkim-signature`, `Content-Type`, `Content-Transfer-Encoding`, `To`, `From`, `Subject`, `Reply-To`, `CC`, `BCC`'
+ substitutions:
+ type: object
+ description: Substitutions allow you to insert data without using Dynamic Transactional Templates. This field should **not** be used in combination with a Dynamic Transactional Template, which can be identified by a `template_id` starting with `d-`. This field is a collection of key/value pairs following the pattern "substitution_tag":"value to substitute". The key/value pairs must be strings. These substitutions will apply to the text and html content of the body of your email, in addition to the `subject` and `reply-to` parameters. The total collective size of your substitutions may not exceed 10,000 bytes per personalization object.
+ maxProperties: 10000
+ dynamic_template_data:
+ type: object
+ description: Dynamic template data is available using Handlebars syntax in Dynamic Transactional Templates. This field should be used in combination with a Dynamic Transactional Template, which can be identified by a `template_id` starting with `d-`. This field is a collection of key/value pairs following the pattern "variable_name":"value to insert".
+ custom_args:
+ type: object
+ description: Values that are specific to this personalization that will be carried along with the email and its activity data. Substitutions will not be made on custom arguments, so any string that is entered into this parameter will be assumed to be the custom argument that you would like to be used. This field may not exceed 10,000 bytes.
+ maxProperties: 10000
+ send_at:
+ type: integer
+ description: A unix timestamp allowing you to specify when your email should be delivered. Scheduling delivery more than 72 hours in advance is forbidden.
+ required:
+ - to
+ from:
+ $ref: "#/components/schemas/from_email_object"
+ reply_to:
+ $ref: "#/components/schemas/reply_to_email_object"
+ reply_to_list:
+ type: array
+ description: An array of recipients who will receive replies and/or bounces. Each object in this array must contain the recipient's email address. Each object in the array may optionally contain the recipient's name. You can either choose to use “reply_to” field or “reply_to_list” but not both.
+ uniqueItems: true
+ maxItems: 1000
+ items:
+ type: object
+ properties:
+ email:
+ type: string
+ description: The email address where any replies or bounces will be returned.
+ format: email
+ name:
+ type: string
+ description: A name or title associated with the `reply_to_list` email address.
+ required:
+ - email
+ subject:
+ type: string
+ description: The global or 'message level' subject of your email. This may be overridden by subject lines set in personalizations.
+ minLength: 1
+ content:
+ type: array
+ description: An array where you can specify the content of your email. You can include multiple [MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of content, but you must specify at least one MIME type. To include more than one MIME type, add another object to the array containing the `type` and `value` parameters.
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ description: The MIME type of the content you are including in your email (e.g., `“text/plain”` or `“text/html”`).
+ minLength: 1
+ value:
+ type: string
+ description: The actual content of the specified MIME type that you are including in your email.
+ minLength: 1
+ required:
+ - type
+ - value
+ attachments:
+ type: array
+ description: An array of objects where you can specify any attachments you want to include.
+ items:
+ type: object
+ properties:
+ content:
+ type: string
+ description: The Base64 encoded content of the attachment.
+ minLength: 1
+ type:
+ type: string
+ description: The MIME type of the content you are attaching (e.g., `“text/plain”` or `“text/html”`).
+ minLength: 1
+ filename:
+ type: string
+ description: The attachment's filename.
+ disposition:
+ type: string
+ default: attachment
+ description: The attachment's content-disposition, specifying how you would like the attachment to be displayed. For example, `“inline”` results in the attached file are displayed automatically within the message while `“attachment”` results in the attached file require some action to be taken before it is displayed, such as opening or downloading the file.
+ enum:
+ - inline
+ - attachment
+ content_id:
+ type: string
+ description: The attachment's content ID. This is used when the disposition is set to `“inline”` and the attachment is an image, allowing the file to be displayed within the body of your email.
+ required:
+ - content
+ - filename
+ template_id:
+ type: string
+ description: An email template ID. A template that contains a subject and content — either text or html — will override any subject and content values specified at the personalizations or message level.
+ headers:
+ description: An object containing key/value pairs of header names and the value to substitute for them. The key/value pairs must be strings. You must ensure these are properly encoded if they contain unicode characters. These headers cannot be one of the reserved headers.
+ type: object
+ categories:
+ type: array
+ description: 'An array of category names for this message. Each category name may not exceed 255 characters. '
+ uniqueItems: true
+ maxItems: 10
+ items:
+ type: string
+ maxLength: 255
+ custom_args:
+ description: Values that are specific to the entire send that will be carried along with the email and its activity data. Key/value pairs must be strings. Substitutions will not be made on custom arguments, so any string that is entered into this parameter will be assumed to be the custom argument that you would like to be used. This parameter is overridden by `custom_args` set at the personalizations level. Total `custom_args` size may not exceed 10,000 bytes.
+ type: string
+ send_at:
+ type: integer
+ description: A unix timestamp allowing you to specify when you want your email to be delivered. This may be overridden by the `send_at` parameter set at the personalizations level. Delivery cannot be scheduled more than 72 hours in advance. If you have the flexibility, it's better to schedule mail for off-peak times. Most emails are scheduled and sent at the top of the hour or half hour. Scheduling email to avoid peak times — for example, scheduling at 10:53 — can result in lower deferral rates due to the reduced traffic during off-peak times.
+ batch_id:
+ type: string
+ description: An ID representing a batch of emails to be sent at the same time. Including a `batch_id` in your request allows you include this email in that batch. It also enables you to cancel or pause the delivery of that batch. For more information, see the [Cancel Scheduled Sends API](https://sendgrid.com/docs/api-reference/).
+ asm:
+ type: object
+ description: An object allowing you to specify how to handle unsubscribes.
+ properties:
+ group_id:
+ type: integer
+ description: The unsubscribe group to associate with this email.
+ groups_to_display:
+ type: array
+ description: An array containing the unsubscribe groups that you would like to be displayed on the unsubscribe preferences page.
+ maxItems: 25
+ items:
+ type: integer
+ required:
+ - group_id
+ ip_pool_name:
+ type: string
+ description: The IP Pool that you would like to send this email from.
+ minLength: 2
+ maxLength: 64
+ mail_settings:
+ type: object
+ description: A collection of different mail settings that you can use to specify how you would like this email to be handled.
+ properties:
+ bypass_list_management:
+ type: object
+ description: Allows you to bypass all unsubscribe groups and suppressions to ensure that the email is delivered to every single recipient. This should only be used in emergencies when it is absolutely necessary that every recipient receives your email. This filter cannot be combined with any other bypass filters. See our [documentation](https://sendgrid.com/docs/ui/sending-email/index-suppressions/#bypass-suppressions) for more about bypass filters.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ bypass_spam_management:
+ type: object
+ description: Allows you to bypass the spam report list to ensure that the email is delivered to recipients. Bounce and unsubscribe lists will still be checked; addresses on these other lists will not receive the message. This filter cannot be combined with the `bypass_list_management` filter. See our [documentation](https://sendgrid.com/docs/ui/sending-email/index-suppressions/#bypass-suppressions) for more about bypass filters.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ bypass_bounce_management:
+ type: object
+ description: Allows you to bypass the bounce list to ensure that the email is delivered to recipients. Spam report and unsubscribe lists will still be checked; addresses on these other lists will not receive the message. This filter cannot be combined with the `bypass_list_management` filter. See our [documentation](https://sendgrid.com/docs/ui/sending-email/index-suppressions/#bypass-suppressions) for more about bypass filters.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ bypass_unsubscribe_management:
+ type: object
+ description: Allows you to bypass the global unsubscribe list to ensure that the email is delivered to recipients. Bounce and spam report lists will still be checked; addresses on these other lists will not receive the message. This filter applies only to global unsubscribes and will not bypass group unsubscribes. This filter cannot be combined with the `bypass_list_management` filter. See our [documentation](https://sendgrid.com/docs/ui/sending-email/index-suppressions/#bypass-suppressions) for more about bypass filters.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ footer:
+ type: object
+ description: The default footer that you would like included on every email.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ text:
+ type: string
+ description: The plain text content of your footer.
+ html:
+ type: string
+ description: The HTML content of your footer.
+ sandbox_mode:
+ type: object
+ description: Sandbox Mode allows you to send a test email to ensure that your request body is valid and formatted correctly.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ tracking_settings:
+ type: object
+ description: Settings to determine how you would like to track the metrics of how your recipients interact with your email.
+ properties:
+ click_tracking:
+ type: object
+ description: Allows you to track if a recipient clicked a link in your email.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ enable_text:
+ type: boolean
+ description: Indicates if this setting should be included in the `text/plain` portion of your email.
+ open_tracking:
+ type: object
+ description: Allows you to track if the email was opened by including a single pixel image in the body of the content. When the pixel is loaded, Twilio SendGrid can log that the email was opened.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ substitution_tag:
+ type: string
+ description: Allows you to specify a substitution tag that you can insert in the body of your email at a location that you desire. This tag will be replaced by the open tracking pixel.
+ subscription_tracking:
+ type: object
+ description: Allows you to insert a subscription management link at the bottom of the text and HTML bodies of your email. If you would like to specify the location of the link within your email, you may use the `substitution_tag`.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ text:
+ type: string
+ description: Text to be appended to the email with the subscription tracking link. You may control where the link is by using the tag <% %>
+ html:
+ type: string
+ description: HTML to be appended to the email with the subscription tracking link. You may control where the link is by using the tag <% %>
+ substitution_tag:
+ type: string
+ description: "A tag that will be replaced with the unsubscribe URL. for example: `[unsubscribe_url]`. If this parameter is used, it will override both the `text` and `html` parameters. The URL of the link will be placed at the substitution tag's location with no additional formatting."
+ ganalytics:
+ type: object
+ description: Allows you to enable tracking provided by Google Analytics.
+ properties:
+ enable:
+ type: boolean
+ description: Indicates if this setting is enabled.
+ utm_source:
+ type: string
+ description: Name of the referrer source. (e.g. Google, SomeDomain.com, or Marketing Email)
+ utm_medium:
+ type: string
+ description: Name of the marketing medium. (e.g. Email)
+ utm_term:
+ type: string
+ description: Used to identify any paid keywords.
+ utm_content:
+ type: string
+ description: Used to differentiate your campaign from advertisements.
+ utm_campaign:
+ type: string
+ description: The name of the campaign.
+ required:
+ - personalizations
+ - from
+ - subject
+ - content
+ example:
+ personalizations:
+ - to:
+ - email: john_doe@example.com
+ name: John Doe
+ - email: julia_doe@example.com
+ name: Julia Doe
+ cc:
+ - email: jane_doe@example.com
+ name: Jane Doe
+ bcc:
+ - email: james_doe@example.com
+ name: Jim Doe
+ - from:
+ email: sales@example.com
+ name: Example Sales Team
+ to:
+ - email: janice_doe@example.com
+ name: Janice Doe
+ bcc:
+ - email: jordan_doe@example.com
+ name: Jordan Doe
+ from:
+ email: orders@example.com
+ name: Example Order Confirmation
+ reply_to:
+ email: customer_service@example.com
+ name: Example Customer Service Team
+ subject: Your Example Order Confirmation
+ content:
+ - type: text/html
+ value: Hello from Twilio SendGrid!
Sending with the email service trusted by developers and marketers for time-savings, scalability, and delivery expertise.
%open-track%
+ attachments:
+ - content: PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KICAgICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICAgICAgPHRpdGxlPkRvY3VtZW50PC90aXRsZT4KICAgIDwvaGVhZD4KCiAgICA8Ym9keT4KCiAgICA8L2JvZHk+Cgo8L2h0bWw+Cg==
+ filename: index.html
+ type: text/html
+ disposition: attachment
+ categories:
+ - cake
+ - pie
+ - baking
+ send_at: 1617260400
+ batch_id: AsdFgHjklQweRTYuIopzXcVBNm0aSDfGHjklmZcVbNMqWert1znmOP2asDFjkl
+ asm:
+ group_id: 12345
+ groups_to_display:
+ - 12345
+ ip_pool_name: transactional email
+ mail_settings:
+ bypass_list_management:
+ enable: false
+ footer:
+ enable: false
+ sandbox_mode:
+ enable: false
+ tracking_settings:
+ click_tracking:
+ enable: true
+ enable_text: false
+ open_tracking:
+ enable: true
+ substitution_tag: '%open-track%'
+ subscription_tracking:
+ enable: false
+ responses:
+ '202':
+ description: ''
+ '400':
+ description: ''
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/global_error_response_schema"
+ '401':
+ description: ''
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/global_error_response_schema"
+ '403':
+ description: ''
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/global_error_response_schema"
+ '404':
+ description: ''
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/global_error_response_schema"
+ '413':
+ description: ''
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/global_error_response_schema"
+ '500':
+ description: ''
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/global_error_response_schema"
+ security:
+ - Authorization: []
+components:
+ securitySchemes:
+ Authorization:
+ type: http
+ scheme: bearer
+ bearerFormat: JWT
+ description: >-
+ The API key used to authenticate with the SendGrid v3 API. You can find
+ your API key in the [Twilio SendGrid UI](https://app.sendgrid.com/settings/api_keys).
+ For more information, see our [API Key documentation](https://sendgrid.com/docs/ui/account-and-settings/api-keys/).
+ schemas:
+ from_email_object:
+ title: From Email Object
+ type: object
+ properties:
+ email:
+ type: string
+ format: email
+ description: The 'From' email address used to deliver the message. This address should be a verified sender in your Twilio SendGrid account.
+ name:
+ type: string
+ description: A name or title associated with the sending email address.
+ required:
+ - email
+ example:
+ email: jane_doe@example.com
+ name: Jane Doe
+ to_email_array:
+ title: To Email Array
+ type: array
+ items:
+ type: object
+ properties:
+ email:
+ type: string
+ format: email
+ description: The intended recipient's email address.
+ name:
+ type: string
+ description: The intended recipient's name.
+ required:
+ - email
+ example:
+ - email: john_doe@example.com
+ name: John Doe
+ cc_bcc_email_object:
+ title: CC BCC Email Object
+ type: object
+ properties:
+ email:
+ type: string
+ format: email
+ description: The intended recipient's email address.
+ name:
+ type: string
+ description: The intended recipient's name.
+ required:
+ - email
+ example:
+ email: jane_doe@example.com
+ name: Jane Doe
+ reply_to_email_object:
+ title: Reply_to Email Object
+ type: object
+ properties:
+ email:
+ type: string
+ format: email
+ description: The email address where any replies or bounces will be returned.
+ name:
+ type: string
+ description: A name or title associated with the `reply_to` email address.
+ required:
+ - email
+ example:
+ email: jane_doe@example.com
+ name: Jane Doe
+ global_error_response_schema:
+ title: Global Error Response Schema
+ type: object
+ properties:
+ errors:
+ type: array
+ items:
+ type: object
+ properties:
+ message:
+ type: string
+ description: the error message
+ field:
+ description: the field that generated the error
+ nullable: true
+ type: string
+ help:
+ type: object
+ description: helper text or docs for troubleshooting
+ required:
+ - message
+ id:
+ type: string
+ example:
+ errors:
+ - field: field_name
+ message: error message
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/openapi/util/util-crud.yaml b/src/openapi/util/util-crud.yaml
index bb881b2..f0c64bb 100644
--- a/src/openapi/util/util-crud.yaml
+++ b/src/openapi/util/util-crud.yaml
@@ -4,7 +4,7 @@ info:
version: "1.0"
description: CRUD APIs for ABT Utility tables. These are NOT the functional APIs from Service Engine.
servers:
- - url: https://api.integratielaag.nl/v1
+ - url: https://services.acc.api.htm.nl/abt/abtutility/1.0
paths:
/scheduledactions:
get:
@@ -86,6 +86,20 @@ paths:
example: 65ad5520-4e62-41b7-89dd-a01be6cb78bf
required: false
description: Pointer to executor of this action (e.g. the batch job).
+ - in: query
+ name: role
+ schema:
+ type: string
+ example: customer
+ required: false
+ description: Role of the user or process that initiated the action.
+ - in: query
+ name: user
+ schema:
+ type: string
+ example: 1255ab39-2f10-409a-bf61-38c07e1b8a9e
+ required: false
+ description: User that initiated the action. In case of a customer this is the customer id.
- in: query
name: resourceName
schema:
@@ -123,6 +137,8 @@ paths:
"created": "2024-07-02 15:01:00.000",
"updated": "2024-07-02 15:01:00.000",
"correlationId": "fb4443c6-5a6a-47a3-adf0-db3dfc183399",
+ "role": "customer",
+ "user": "1255ab39-2f10-409a-bf61-38c07e1b8a9e",
"scheduledActionResources":
[
{
@@ -157,6 +173,8 @@ paths:
"created": "2024-07-02 15:01:00.000",
"updated": "2024-07-02 15:01:00.000",
"correlationId": "fb4443c6-5a6a-47a3-adf0-db3dfc183399",
+ "role": "customer",
+ "user": "1255ab39-2f10-409a-bf61-38c07e1b8a9e",
"scheduledActionResources":
[
{
@@ -217,6 +235,8 @@ paths:
"created": "2024-07-02 15:01:00.000",
"updated": "2024-07-02 15:01:00.000",
"correlationId": "fb4443c6-5a6a-47a3-adf0-db3dfc183399",
+ "role": "customer",
+ "user": "1255ab39-2f10-409a-bf61-38c07e1b8a9e",
"scheduledActionResources":
[
{
@@ -390,6 +410,12 @@ components:
type: string
format: uuid
example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f
+ role:
+ type: string
+ example: customer
+ user:
+ type: string
+ example: 1255ab39-2f10-409a-bf61-38c07e1b8a9e
ScheduledActionType:
type: object
properties:
diff --git a/src/plugins/gitea-add-swagger-button.user.js b/src/plugins/gitea-add-swagger-button.user.js
new file mode 100644
index 0000000..e702cc3
--- /dev/null
+++ b/src/plugins/gitea-add-swagger-button.user.js
@@ -0,0 +1,52 @@
+// ==UserScript==
+// @name gitea-add-swagger-button
+// @namespace https://integratielaag.nl/
+// @version 0.1.1
+// @description Creates a button in Gitea to view Swagger
+// @author bboterm
+// @match https://git.integratielaag.nl/*.yaml
+// @match https://git.integratielaag.nl/*.json
+// @icon https://www.google.com/s2/favicons?sz=64&domain=gitea.com
+// @grant none
+// @updateURL https://git.integratielaag.nl/HTM/ovpay/raw/branch/develop/src/plugins/gitea-add-swagger-button.user.js
+// @downloadURL https://git.integratielaag.nl/HTM/ovpay/raw/branch/develop/src/plugins/gitea-add-swagger-button.user.js
+// ==/UserScript==
+// @history 0.1.0 Initial release
+// @history 0.1.1 Added support for YAML and JSON files
+
+(function() {
+ 'use strict';
+
+ // Set the base URL for the Swagger instance
+ const swaggerBaseURL = 'https://swagger.integratielaag.nl/?url=';
+ // Get the base URL from the current webpage
+ const gitBaseURL = window.location.origin;
+
+ // Replace 'parent-class-name' with the class name of the parent div
+ const parentClassName = 'file-actions';
+ // Replace 'child-class-name' with the class name of the child div
+ const childClassName = 'buttons';
+
+ const parentDiv = document.querySelector('div.file-actions');
+ if (parentDiv) {
+ const childDiv = parentDiv.querySelector('div.buttons');
+ if (childDiv) {
+ const firstATag = childDiv.querySelector('a');
+ if (firstATag) {
+ // Get the URL of the raw file
+ const hrefValue = firstATag.getAttribute('href');
+ // Create a string literal for the new Swagger button
+ const swaggerButton = `Swagger`;
+ // Add the Swagger button to the HTML
+ childDiv.innerHTML = swaggerButton + childDiv.innerHTML;
+ } else {
+ console.log('No tag found inside the child div.');
+ }
+ } else {
+ console.log(`Child div with class '${childClassName}' not found.`);
+ }
+ } else {
+ console.log(`Parent div with class '${parentClassName}' not found.`);
+ }
+})();
+
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