Compare commits
193 Commits
features/O
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
| b6a490c979 | |||
|
|
1ac734de96 | ||
|
|
c692cd45ea | ||
|
|
0f2eaed9dd | ||
| 11ea8f5fea | |||
| e52fde1bb3 | |||
| 1761c662e7 | |||
|
|
6a0e5a5fba | ||
|
|
7953e035bb | ||
|
|
3c4ca6e00c | ||
|
|
f87baaca06 | ||
| 257f8f939b | |||
| c1bb52277e | |||
| e79ac51966 | |||
| c6b395a05b | |||
| 1d4fbf5004 | |||
|
|
8eed2a9dd6 | ||
|
|
5e255b7bac | ||
|
|
e2f70a78af | ||
|
|
ee0147b963 | ||
| 0a8a706675 | |||
| d42236dafc | |||
| 1aae9729b2 | |||
| f7975ed5a1 | |||
| f0c216be9b | |||
| 3db0d113a0 | |||
| f4e7bd9385 | |||
| c2a6b1c9c2 | |||
|
|
17f52cd914 | ||
| a493694021 | |||
| 96fd6341b0 | |||
| f1022c0d8d | |||
| 5b3264d9cd | |||
|
|
3d387e451b | ||
|
|
851f60d665 | ||
|
|
0987cedb4f | ||
| 23dd83fac9 | |||
| a637cfb4f2 | |||
| 42ff41baea | |||
| 699c633a4e | |||
| 95bc19d7ff | |||
| 8e77863480 | |||
| 07e1dc91e3 | |||
| 75531b4fdc | |||
| 00a98a6178 | |||
| 937a0323ed | |||
| ebee1178ef | |||
| 6e37b7c4fe | |||
| a0ebde6ae2 | |||
| 1f8e8f1381 | |||
| 1f0481119c | |||
| 3d2885f2b8 | |||
| 280d3b1fcd | |||
| f28a797b6b | |||
| 87d8f7df58 | |||
| 30e8860a39 | |||
| d18afcae8c | |||
| eb03aa04e6 | |||
| aca160f65c | |||
| 3f090c76b6 | |||
| 25788e0976 | |||
|
|
90bb7c11b5 | ||
|
|
0c23571085 | ||
|
|
f1a0850871 | ||
|
|
cc8881b9d5 | ||
|
|
d484acbc69 | ||
| e5a0b52d1b | |||
| 89833680db | |||
|
|
ff225ea00c | ||
|
|
bd870d0fa8 | ||
| 531eaa2ff6 | |||
|
|
7173bd3727 | ||
|
|
a09ad1ad08 | ||
|
|
f198c1633b | ||
| 5f7893b057 | |||
|
|
383d43122b | ||
|
|
f8010560cc | ||
|
|
69908f58b0 | ||
|
|
9fb20a491f | ||
|
|
2fca37628e | ||
|
|
8a10320c26 | ||
|
|
e13b643c99 | ||
| 7954e8012d | |||
| 7d84691c4b | |||
| 354a8bf75d | |||
| 534ee3f8fd | |||
| 3e4a59bdcc | |||
| 4f54aaf027 | |||
| 8dd6f7211b | |||
| b59b8ca32b | |||
| c35c44a1cf | |||
| 8fc5d3b55e | |||
| 50bff1d3f7 | |||
| b1fb842046 | |||
| a621b1f06c | |||
|
|
6a4b1a1d58 | ||
| c4d99bb8d6 | |||
| db5d2ac324 | |||
| 175c81f5cd | |||
|
|
4f183fe4ab | ||
|
|
e295a570f0 | ||
| 2094ef46e4 | |||
|
|
cf7dcc8dd4 | ||
|
|
f033ab6bbe | ||
|
|
58ca9326dc | ||
|
|
d3c9e3d36b | ||
|
|
38094e7b29 | ||
| 974f737777 | |||
| 868ac3e6bd | |||
| 5c950701e0 | |||
| f193a1204b | |||
| dc21af3cef | |||
| c45f2059f4 | |||
| 53185d10b1 | |||
| f237f677e3 | |||
| 9bb7320299 | |||
| 1bf9fa2fd0 | |||
| 903adbe238 | |||
| b6586891fc | |||
| 8b148b22ac | |||
| 44dae159b8 | |||
| a7e32f6122 | |||
| 513045c146 | |||
| 8c4542a151 | |||
| 0749e927dc | |||
| 2b02e52c22 | |||
| 2cb6f910df | |||
| 1269f8916f | |||
| c3af1e9adf | |||
| 5d307d9808 | |||
| 105e81b5c4 | |||
| 24b4832c69 | |||
| 03372074d9 | |||
| bf0ebee435 | |||
| 541b0662f1 | |||
| 594475331f | |||
| 42c49693f1 | |||
| 62f001c902 | |||
| a71aa2e4df | |||
| 5e2b646a30 | |||
| 7ab0de07c4 | |||
|
|
39e5042350 | ||
| 2d742ca3f1 | |||
| 97c58dc3fe | |||
| d06da1401e | |||
| 04d46e0891 | |||
| c31554a526 | |||
| 9d9039d732 | |||
| 93efb6b8f7 | |||
| 77953a726a | |||
|
|
bbf21e61f7 | ||
| 681e9f7671 | |||
| c9b54a095d | |||
| e3139fdd6d | |||
| 4b932a0628 | |||
| 43bf7bfff3 | |||
| 007cf4bdef | |||
| baee1e8622 | |||
| ba314674a3 | |||
| 1f51eaadc6 | |||
| 5838b14ac5 | |||
| 14817cc621 | |||
| c1fbc0dc90 | |||
| 9b8cf65525 | |||
| 8f907896be | |||
| 591347e080 | |||
| da7afd63fc | |||
| 2c88fac238 | |||
| 6a24636d50 | |||
| c7fa48b554 | |||
| 5133903efb | |||
| 447912e081 | |||
| e2d78ec969 | |||
| c6facc5a70 | |||
| cf0d24632f | |||
| aa4721c651 | |||
| 46bf7874d9 | |||
| 1a14918f4a | |||
| 7147318900 | |||
| e0f78d2e38 | |||
| ab57e27c1d | |||
| 68c7ccc279 | |||
| 80c9fe7599 | |||
| 8946026860 | |||
| e6b2146706 | |||
| fb8723124a | |||
| 6d7c260e9e | |||
| 292588b7ba | |||
| 4bd216bd37 | |||
| bfaa1ddcb1 | |||
| 55bac27561 | |||
|
|
715a9668fc | ||
| b4f20a9758 |
0
src/AGO_Examples_20260904.curl
Normal file
0
src/AGO_Examples_20260904.curl
Normal file
@ -8,7 +8,7 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
Binary file not shown.
@ -1,7 +1,9 @@
|
||||
# ABTProducts PUT request body generator
|
||||
Simple tool to quickly edit HTM products via ABTProducts REST API.
|
||||
|
||||
- Requires JRE 21
|
||||
- Requires JRE 17
|
||||
|
||||
## Generating a PUT output (that you need to supply to PUT API yourself):
|
||||
- Run via: `java -jar ABTProductsPUTGenerator.jar`
|
||||
- Specify custom input/output path via: `java -jar ABTProductsPUTGenerator.jar <inputPath> <outputPath>`
|
||||
- Takes a ABTProducts GET response body in JSON format (product details)
|
||||
@ -10,3 +12,14 @@ Simple tool to quickly edit HTM products via ABTProducts REST API.
|
||||
- `curl -X PUT -H 'Content-Type: application/json' {baseUrl}/abt/abtproducts/1.0/38 --data @output.json`
|
||||
- Default input path: /input.json
|
||||
- Default output path: /output.json (output is overwritten if it exists)
|
||||
|
||||
## Bulk clearing (set to null) of a certain product attribute for all productIds in a product-tree (SE product reponse)
|
||||
- Run via: `java -jar ABTProductsPUTGenerator.jar clearAttribute <inputPath> <attributeToClear> <environment> <wso2BearerToken>`
|
||||
- Takes a SE GET product tree response body or ABTProducts GET response body in JSON format
|
||||
- Also needs the attribute to clear and the WSO2 environment and valid WSO2 bearer token for that environment
|
||||
- Performs the following operations:
|
||||
- Finds all productId's in the given product(tree) and for each productId found:
|
||||
- GETs productdetails via ABTProducts API
|
||||
- Converts it to PUT request body using the functionality in the previous section
|
||||
- Replaces <attributeToClear> with `null`
|
||||
- Actually sends the modified PUT request body to ABTProducts PUT API
|
||||
|
||||
@ -58,8 +58,8 @@
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>21</source>
|
||||
<target>21</target>
|
||||
<source>17</source>
|
||||
<target>17</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
@ -3,8 +3,11 @@ package nl.htm.ovpay.abt;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Scanner;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -19,6 +22,15 @@ public class ABTProductsPUTGenerator {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ABTProductsPUTGenerator.class);
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
LOGGER.info("Starting ABTProductsPUTGenerator with arguments {}", Arrays.stream(args).toList());
|
||||
if (args.length > 0 && args[0].equalsIgnoreCase("clearAttribute")) {
|
||||
clearAttribute(args);
|
||||
} else {
|
||||
generateOutput(args);
|
||||
}
|
||||
}
|
||||
|
||||
private static void generateOutput(String[] args) throws Exception {
|
||||
if (args.length != 2) {
|
||||
LOGGER.info("To modify input/output path, use: java -jar ABTProductsPUTGenerator.jar <inputPath> <outputPath>");
|
||||
}
|
||||
@ -40,6 +52,49 @@ public class ABTProductsPUTGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
private static void clearAttribute(String[] args) throws Exception {
|
||||
if (args.length != 5) {
|
||||
LOGGER.error("Incorrect input parameters!");
|
||||
LOGGER.error("To clear attribute, use: java -jar ABTProductsPUTGenerator.jar clearAttribute <inputPath> <attributeToClear> <environment> <wso2BearerToken>");
|
||||
return;
|
||||
}
|
||||
|
||||
var inputFile = args[1];
|
||||
var attributeToClear = args[2];
|
||||
var environment = args[3];
|
||||
var wso2BearerToken = args[4];
|
||||
|
||||
try (InputStream is = getInputStream(inputFile)) {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
JsonNode jsonNode = mapper.readTree(is);
|
||||
var productIds = jsonNode.findValues("productId").stream().filter(JsonNode::isValueNode).map(JsonNode::asText).toList();
|
||||
|
||||
LOGGER.info("Found productIds to process: {}", productIds);
|
||||
LOGGER.warn("Are you SURE you want to set attribute \"{}\" for all these productIds on environment {} to NULL?", attributeToClear, environment);
|
||||
LOGGER.warn("Type 'yes' to continue...");
|
||||
var input = new Scanner(System.in).nextLine();
|
||||
if (!input.equalsIgnoreCase("yes")) {
|
||||
LOGGER.info("Aborting...");
|
||||
return;
|
||||
}
|
||||
|
||||
for (var productId : productIds) {
|
||||
LOGGER.info("Getting product details for product {}...", productId);
|
||||
var productJsonString = APIHelper.getProductDetails(environment, productId, wso2BearerToken);
|
||||
var productJsonNode = mapper.readTree(productJsonString);
|
||||
var putJsonNode = processJsonNode(productJsonNode);
|
||||
LOGGER.info("Clearing attribute \"{}\" from product with productId {}...", attributeToClear, productId);
|
||||
((ObjectNode)putJsonNode).putRawValue(attributeToClear, null);
|
||||
|
||||
LOGGER.info("PUT product details for product with productId {} with cleared attribute \"{}\"...", productId, attributeToClear);
|
||||
LOGGER.info("PUT product details with JSON body: {}", putJsonNode.toPrettyString());
|
||||
APIHelper.putProductDetails(environment, productId, putJsonNode.toString(), wso2BearerToken);
|
||||
}
|
||||
|
||||
LOGGER.info("DONE clearing attribute \"{}\" for productIds {}!", attributeToClear, productIds);
|
||||
}
|
||||
}
|
||||
|
||||
private static InputStream getInputStream(String filePath) throws IOException {
|
||||
var externalResource = new File(filePath);
|
||||
if (externalResource.exists()) {
|
||||
@ -160,8 +215,13 @@ public class ABTProductsPUTGenerator {
|
||||
}
|
||||
case "paymentMoment" -> {
|
||||
LOGGER.info("Rewriting paymentMoment to paymentMomentId...");
|
||||
Long paymentMomentId = jsonField.getValue().get("paymentMomentId").asLong();
|
||||
((ObjectNode)newJsonNode).put("paymentMomentId", paymentMomentId);
|
||||
if (jsonField.getValue().get("paymentMomentId").isNull()) {
|
||||
LOGGER.info("Rewriting null paymentMomentId...");
|
||||
((ObjectNode)newJsonNode).putRawValue("paymentMomentId", null);
|
||||
} else {
|
||||
Long paymentMomentId = jsonField.getValue().get("paymentMomentId").asLong();
|
||||
((ObjectNode)newJsonNode).put("paymentMomentId", paymentMomentId);
|
||||
}
|
||||
}
|
||||
case "requiredCustomerLevel" -> {
|
||||
LOGGER.info("Rewriting requiredCustomerLevel to requiredCustomerLevelId...");
|
||||
|
||||
@ -0,0 +1,89 @@
|
||||
package nl.htm.ovpay.abt;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.StringJoiner;
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import javax.net.ssl.SSLContext;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class APIHelper {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(APIHelper.class);
|
||||
private static final String PRODUCT_DETAILS_URI = "https://services.<ENV>.api.htm.nl/abt/abtproducts/1.0/products/<PRODUCTID>";
|
||||
|
||||
|
||||
public static String envToUriPart(String environment) {
|
||||
return switch (environment) {
|
||||
case "DEV" -> "dev";
|
||||
case "ACC" -> "acc";
|
||||
case "PRD" -> "";
|
||||
default -> throw new IllegalArgumentException("Invalid environment: " + environment);
|
||||
};
|
||||
}
|
||||
|
||||
public static String getProductDetails(String environment, String productId, String wso2BearerToken) throws Exception {
|
||||
var envUriPart = envToUriPart(environment);
|
||||
var getProductDetailsUri = PRODUCT_DETAILS_URI.replace("<ENV>", envUriPart).replace("<PRODUCTID>", productId);
|
||||
|
||||
SSLContext sc = SSLContext.getInstance("SSL");
|
||||
sc.init(null, DummyX509TrustManager.getDummyArray(), new java.security.SecureRandom());
|
||||
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||
|
||||
URL url = new URL(getProductDetailsUri);
|
||||
URLConnection con = url.openConnection();
|
||||
HttpURLConnection http = (HttpURLConnection)con;
|
||||
http.setRequestMethod("GET");
|
||||
http.setDoOutput(false);
|
||||
http.setRequestProperty("Authorization", "Bearer " + wso2BearerToken);
|
||||
http.connect();
|
||||
|
||||
try(InputStream is = http.getInputStream()) {
|
||||
return new String(is.readAllBytes(), StandardCharsets.UTF_8);
|
||||
}
|
||||
}
|
||||
|
||||
public static void putProductDetails(String environment, String productId, String jsonBody, String wso2BearerToken) throws Exception {
|
||||
var envUriPart = envToUriPart(environment);
|
||||
var putProductDetailsUri = PRODUCT_DETAILS_URI.replace("<ENV>", envUriPart).replace("<PRODUCTID>", productId);
|
||||
|
||||
LOGGER.info("PUT product details to URI: {}", putProductDetailsUri);
|
||||
|
||||
SSLContext sc = SSLContext.getInstance("SSL");
|
||||
sc.init(null, DummyX509TrustManager.getDummyArray(), new java.security.SecureRandom());
|
||||
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
|
||||
|
||||
URL url = new URL(putProductDetailsUri);
|
||||
URLConnection con = url.openConnection();
|
||||
HttpURLConnection http = (HttpURLConnection)con;
|
||||
http.setRequestMethod("PUT");
|
||||
http.setDoOutput(true);
|
||||
http.setRequestProperty("Authorization", "Bearer " + wso2BearerToken);
|
||||
http.setRequestProperty("Content-Type", "application/json");
|
||||
|
||||
byte[] out = jsonBody.getBytes(StandardCharsets.UTF_8);
|
||||
int length = out.length;
|
||||
http.setFixedLengthStreamingMode(length);
|
||||
http.connect();
|
||||
|
||||
try(OutputStream os = http.getOutputStream()) {
|
||||
os.write(out);
|
||||
}
|
||||
|
||||
try(InputStream is = http.getInputStream()) {
|
||||
LOGGER.info("Got response from PUT API: {}", new String(is.readAllBytes(), StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,38 @@
|
||||
package nl.htm.ovpay.abt;
|
||||
|
||||
import java.security.cert.X509Certificate;
|
||||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
|
||||
public final class DummyX509TrustManager implements X509TrustManager {
|
||||
|
||||
private static DummyX509TrustManager INSTANCE;
|
||||
|
||||
private DummyX509TrustManager() {
|
||||
// prevent instantiation
|
||||
}
|
||||
|
||||
public static DummyX509TrustManager getInstance() {
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = new DummyX509TrustManager();
|
||||
}
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
public static TrustManager[] getDummyArray() {
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = new DummyX509TrustManager();
|
||||
}
|
||||
return new TrustManager[] { INSTANCE };
|
||||
}
|
||||
|
||||
public X509Certificate[] getAcceptedIssuers() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void checkClientTrusted(X509Certificate[] certs, String authType) {
|
||||
}
|
||||
|
||||
public void checkServerTrusted(X509Certificate[] certs, String authType) {
|
||||
}
|
||||
}
|
||||
@ -1,23 +1,33 @@
|
||||
{
|
||||
"productId": 251,
|
||||
"fikoArticleNumber": null,
|
||||
"productId": 663,
|
||||
"parentProductId": null,
|
||||
"gboPackageTemplateId": "30901",
|
||||
"layerInfo": {
|
||||
"layerInfoId": 7,
|
||||
"choiceKey": "isRenewable",
|
||||
"choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn",
|
||||
"isCustomChoice": false
|
||||
},
|
||||
"fikoArticleNumber": null,
|
||||
"gboPackageTemplateId": "30001",
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "MaxTestPOST-21-okt-test-1 edited PUT",
|
||||
"productDescription": "21-okt-test-1 edited PUT - reis met 90% korting gedurende de eerste F&F pilot!",
|
||||
"validityPeriod": null,
|
||||
"productTranslations": null,
|
||||
"productName": "Test OVPAY-2306",
|
||||
"productDescription": "Test OVPAY-2306 (sellingPeriods in kindje verwijderen en later opnieuw weer kunnen toevoegen)",
|
||||
"validityPeriod": {
|
||||
"validityPeriodId": 782,
|
||||
"fromInclusive": "2025-12-31T23:00:00.000Z",
|
||||
"toInclusive": "2026-03-30T22:00:00.000Z"
|
||||
},
|
||||
"productTranslations": [],
|
||||
"allowedGboAgeProfiles": [],
|
||||
"productOwner": {
|
||||
"productOwnerId": 1,
|
||||
"name": "Corneel Verstoep",
|
||||
"organization": "HTM"
|
||||
"name": "Wie dit leest",
|
||||
"organization": "... is een aap."
|
||||
},
|
||||
"marketSegments": null,
|
||||
"customerSegments": null,
|
||||
"allowedGboAgeProfiles": null,
|
||||
"marketSegments": [],
|
||||
"customerSegments": [],
|
||||
"productCategory": {
|
||||
"productCategoryId": 9,
|
||||
"productCategoryId": 1,
|
||||
"isTravelProduct": true,
|
||||
"name": "Kortingsabonnement"
|
||||
},
|
||||
@ -25,32 +35,10 @@
|
||||
"requiredCustomerLevelId": 1,
|
||||
"name": "guest"
|
||||
},
|
||||
"requiredProducts": null,
|
||||
"incompatibleProducts": null,
|
||||
"mandatoryCustomerDataItems": [
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 4,
|
||||
"customerDataItem": "emailAddress"
|
||||
},
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 5,
|
||||
"customerDataItem": "address"
|
||||
}
|
||||
],
|
||||
"requiredGboPersonalAttributes": [
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 1,
|
||||
"name": "NAME"
|
||||
},
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 2,
|
||||
"name": "BIRTHDATE"
|
||||
},
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 3,
|
||||
"name": "PHOTO"
|
||||
}
|
||||
],
|
||||
"requiredProducts": [],
|
||||
"incompatibleProducts": [],
|
||||
"mandatoryCustomerDataItems": [],
|
||||
"requiredGboPersonalAttributes": [],
|
||||
"tokenTypes": [
|
||||
{
|
||||
"tokenTypeId": 1,
|
||||
@ -61,72 +49,36 @@
|
||||
"paymentMomentId": 1,
|
||||
"name": "prepaid"
|
||||
},
|
||||
"serviceOptions": null,
|
||||
"validityDuration": "P7D",
|
||||
"maxStartInFutureDuration": "P6W",
|
||||
"isRenewable": false,
|
||||
"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": "P1W",
|
||||
"maxStartInFutureDuration": "P1W",
|
||||
"isRenewable": null,
|
||||
"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",
|
||||
"imageReference": null,
|
||||
"productPageUrl": null,
|
||||
"termsUrl": null,
|
||||
"isSellableAtHtm": true,
|
||||
"needsSolvencyCheckConsumer": false,
|
||||
"needsSolvencyCheckBusiness": false,
|
||||
"sellingPeriods": [
|
||||
{
|
||||
"sellingPeriodId": 240,
|
||||
"fromInclusive": "2024-09-06T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-29T23:59:59.000+00:00",
|
||||
"sellingPeriodId": 1382,
|
||||
"fromInclusive": "2025-12-31T23:00:00.000Z",
|
||||
"toInclusive": "2026-03-30T22:00:00.000Z",
|
||||
"salesTouchpoint": {
|
||||
"salesTouchpointId": 6,
|
||||
"name": "Service-engine",
|
||||
"isActive": true,
|
||||
"retailer": {
|
||||
"retailerId": 1000,
|
||||
"name": "HTM intern beheer",
|
||||
"street": "Koningin Julianaplein",
|
||||
"number": 10,
|
||||
"numberAddition": null,
|
||||
"postalCode": "2595 AA",
|
||||
"city": "Den Haag",
|
||||
"country": "Nederland",
|
||||
"emailAddress": "info@htm.nl",
|
||||
"phoneNumber": "070 374 9002",
|
||||
"taxId": null,
|
||||
"imageReference": "https://www.htm.nl/typo3conf/ext/htm_template/Resources/Public/img/logo.svg"
|
||||
}
|
||||
},
|
||||
"forbiddenPaymentMethods": null,
|
||||
"sellingPrices": [
|
||||
{
|
||||
"sellingPriceId": 318,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 94,
|
||||
"amountInclTax": 100,
|
||||
"fromInclusive": "2024-09-06T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-18T23:59:59.000+00:00",
|
||||
"internalPrice": 92.0000
|
||||
},
|
||||
{
|
||||
"sellingPriceId": 319,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 98,
|
||||
"amountInclTax": 102,
|
||||
"fromInclusive": "2024-12-19T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-29T23:59:59.000+00:00",
|
||||
"internalPrice": 0.0000
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sellingPeriodId": 241,
|
||||
"fromInclusive": "2024-09-06T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-29T23:59:59.000+00:00",
|
||||
"salesTouchpoint": {
|
||||
"salesTouchpointId": 5,
|
||||
"name": "Servicewinkel (Team Incident Masters)",
|
||||
"salesTouchpointId": 3,
|
||||
"name": "Website",
|
||||
"isActive": true,
|
||||
"retailer": {
|
||||
"retailerId": 1001,
|
||||
@ -139,64 +91,196 @@
|
||||
"country": "Nederland",
|
||||
"emailAddress": "info@htm.nl",
|
||||
"phoneNumber": "070 374 9002",
|
||||
"taxId": null,
|
||||
"imageReference": "https://www.htm.nl/typo3conf/ext/htm_template/Resources/Public/img/logo.svg"
|
||||
"taxId": 572309345923,
|
||||
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg"
|
||||
}
|
||||
},
|
||||
"forbiddenPaymentMethods": [
|
||||
"forbiddenPaymentMethods": [],
|
||||
"sellingPrices": []
|
||||
}
|
||||
],
|
||||
"purchasePrices": [],
|
||||
"productVariants": [
|
||||
{
|
||||
"productId": 664,
|
||||
"parentProductId": 663,
|
||||
"layerInfo": {
|
||||
"layerInfoId": null,
|
||||
"choiceKey": null,
|
||||
"choiceLabel": null,
|
||||
"isCustomChoice": false
|
||||
},
|
||||
"fikoArticleNumber": null,
|
||||
"gboPackageTemplateId": "30001",
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "Losse week - Test OVPAY-2306",
|
||||
"productDescription": "Test OVPAY-2306 (sellingPeriods in kindje verwijderen en later opnieuw weer kunnen toevoegen)",
|
||||
"validityPeriod": {
|
||||
"validityPeriodId": 783,
|
||||
"fromInclusive": "2025-12-31T23:00:00.000Z",
|
||||
"toInclusive": "2026-03-30T22:00:00.000Z"
|
||||
},
|
||||
"productTranslations": [],
|
||||
"allowedGboAgeProfiles": [],
|
||||
"productOwner": {
|
||||
"productOwnerId": 1,
|
||||
"name": "Wie dit leest",
|
||||
"organization": "... is een aap."
|
||||
},
|
||||
"marketSegments": [],
|
||||
"customerSegments": [],
|
||||
"productCategory": {
|
||||
"productCategoryId": 1,
|
||||
"isTravelProduct": true,
|
||||
"name": "Kortingsabonnement"
|
||||
},
|
||||
"requiredCustomerLevel": {
|
||||
"requiredCustomerLevelId": 1,
|
||||
"name": "guest"
|
||||
},
|
||||
"requiredProducts": [],
|
||||
"incompatibleProducts": [],
|
||||
"mandatoryCustomerDataItems": [],
|
||||
"requiredGboPersonalAttributes": [],
|
||||
"tokenTypes": [
|
||||
{
|
||||
"forbiddenPaymentMethodId": 2,
|
||||
"name": "creditcard",
|
||||
"issuer": "Visa"
|
||||
"tokenTypeId": 1,
|
||||
"name": "EMV"
|
||||
}
|
||||
],
|
||||
"sellingPrices": [
|
||||
"paymentMoment": {
|
||||
"paymentMomentId": 1,
|
||||
"name": "prepaid"
|
||||
},
|
||||
"serviceOptions": [
|
||||
{
|
||||
"sellingPriceId": 320,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 94,
|
||||
"amountInclTax": 100,
|
||||
"fromInclusive": "2024-09-06T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-18T23:59:59.000+00:00",
|
||||
"internalPrice": 92.0000
|
||||
"serviceOptionId": 4,
|
||||
"action": "cancel_notAllowed",
|
||||
"description": "Stopzetting is niet toegestaan (doorgaans in combinatie met refund_notAllowed)"
|
||||
},
|
||||
{
|
||||
"sellingPriceId": 321,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 98,
|
||||
"amountInclTax": 102,
|
||||
"fromInclusive": "2024-12-19T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-29T23:59:59.000+00:00",
|
||||
"internalPrice": 0.0000
|
||||
"serviceOptionId": 10,
|
||||
"action": "refund_notAllowed",
|
||||
"description": "Terugbetaling niet toegestaan (doorgaans in combinatie met cancel_notAllowed)"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"purchasePrices": [
|
||||
{
|
||||
"purchasePriceId": 184,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 0,
|
||||
"amountInclTax": 0,
|
||||
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-31T23:59:59.000+00:00"
|
||||
}
|
||||
],
|
||||
"auditTrail": [
|
||||
{
|
||||
"auditTrailId": 228,
|
||||
"action": "update",
|
||||
"user": "api",
|
||||
"timestamp": "2024-10-21T09:00:30.410+00:00"
|
||||
],
|
||||
"validityDuration": "P1W",
|
||||
"maxStartInFutureDuration": "P1W",
|
||||
"isRenewable": false,
|
||||
"sendInvoice": false,
|
||||
"imageReference": null,
|
||||
"productPageUrl": null,
|
||||
"termsUrl": null,
|
||||
"isSellableAtHtm": true,
|
||||
"needsSolvencyCheckConsumer": false,
|
||||
"needsSolvencyCheckBusiness": false,
|
||||
"sellingPeriods": [
|
||||
{
|
||||
"sellingPeriodId": 1384,
|
||||
"fromInclusive": "2025-12-31T23:00:00.000Z",
|
||||
"toInclusive": "2026-03-30T22:00:00.000Z",
|
||||
"salesTouchpoint": {
|
||||
"salesTouchpointId": 3,
|
||||
"name": "Website",
|
||||
"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": []
|
||||
},
|
||||
{
|
||||
"auditTrailId": 227,
|
||||
"action": "insert",
|
||||
"user": "api",
|
||||
"timestamp": "2024-10-21T08:58:39.237+00:00"
|
||||
"productId": 665,
|
||||
"parentProductId": 663,
|
||||
"layerInfo": {
|
||||
"layerInfoId": null,
|
||||
"choiceKey": null,
|
||||
"choiceLabel": null,
|
||||
"isCustomChoice": false
|
||||
},
|
||||
"fikoArticleNumber": null,
|
||||
"gboPackageTemplateId": "30001",
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "Doorlopend - Test OVPAY-2306",
|
||||
"productDescription": "Test OVPAY-2306 (sellingPeriods in kindje verwijderen en later opnieuw weer kunnen toevoegen)",
|
||||
"validityPeriod": {
|
||||
"validityPeriodId": 784,
|
||||
"fromInclusive": "2025-12-31T23:00:00.000Z",
|
||||
"toInclusive": "2026-03-30T22:00:00.000Z"
|
||||
},
|
||||
"productTranslations": [],
|
||||
"allowedGboAgeProfiles": [],
|
||||
"productOwner": {
|
||||
"productOwnerId": 1,
|
||||
"name": "Wie dit leest",
|
||||
"organization": "... is een aap."
|
||||
},
|
||||
"marketSegments": [],
|
||||
"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": [
|
||||
{
|
||||
"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": "P1W",
|
||||
"maxStartInFutureDuration": "P1W",
|
||||
"isRenewable": true,
|
||||
"sendInvoice": false,
|
||||
"imageReference": null,
|
||||
"productPageUrl": null,
|
||||
"termsUrl": null,
|
||||
"isSellableAtHtm": true,
|
||||
"needsSolvencyCheckConsumer": false,
|
||||
"needsSolvencyCheckBusiness": false,
|
||||
"sellingPeriods": [],
|
||||
"purchasePrices": [],
|
||||
"productVariants": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -17,10 +17,10 @@ paths:
|
||||
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.
|
||||
a claim for OV chipcard will be sent to the OVC API. If no
|
||||
chipcardnumber is specified under 'chipkaart', a claim for EMV/OV-pas is sent
|
||||
to Mendix, where it can be handled according to the fields present
|
||||
(serviceRefId + totaalbedrag or ovPasNumber + verificationCode)
|
||||
parameters: []
|
||||
requestBody:
|
||||
content:
|
||||
@ -47,8 +47,6 @@ paths:
|
||||
toelichting: string
|
||||
lijn: '1'
|
||||
vervoertype: '1'
|
||||
serviceRefId: '1'
|
||||
Totaalbedrag: 0
|
||||
EMV:
|
||||
value:
|
||||
aankomsthalte: '1'
|
||||
@ -67,8 +65,28 @@ paths:
|
||||
toelichting: string
|
||||
lijn: '1'
|
||||
vervoertype: '1'
|
||||
serviceRefId: '1'
|
||||
Totaalbedrag: 0
|
||||
serviceRefId: 'NLOV1234567ABCDEFG'
|
||||
totaalbedrag: 3.14
|
||||
OV-pas:
|
||||
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'
|
||||
ovPasNumber: '63AW974'
|
||||
verificationCode: '2FQ8'
|
||||
responses:
|
||||
'200':
|
||||
description: ok
|
||||
@ -103,18 +121,19 @@ paths:
|
||||
examples:
|
||||
EMV:
|
||||
value:
|
||||
emailAddress: 'j.beek@htm.nl'
|
||||
emailAddress: 'stasjo@htm.nl'
|
||||
orderNumber: 'ORD1000046'
|
||||
serviceReferenceId: 'NLOVA5BCD124H3Z21X'
|
||||
amount: 2305
|
||||
iban: 'NL98INGB0003856625'
|
||||
orderDate: '2025-01-13'
|
||||
productName: 'HTM 20% korting'
|
||||
OVpas:
|
||||
OV-pas:
|
||||
value:
|
||||
emailAddress: 'j.beek@htm.nl'
|
||||
emailAddress: 'stasjo@htm.nl'
|
||||
orderNumber: 'ORD1000046'
|
||||
ovpasNumber: '63AW974'
|
||||
verificationCode: '2FQ8'
|
||||
iban: 'NL98INGB0003856625'
|
||||
orderDate: '2025-01-13'
|
||||
productName: 'HTM 20% korting'
|
||||
@ -181,7 +200,7 @@ components:
|
||||
iban:
|
||||
type: string
|
||||
description: String of length between 15 en 32 characters
|
||||
example: '1234123412341234'
|
||||
example: NL98INGB0003856625
|
||||
naam:
|
||||
type: string
|
||||
emailadres:
|
||||
@ -201,9 +220,16 @@ components:
|
||||
type: string
|
||||
serviceRefId:
|
||||
type: string
|
||||
Totaalbedrag:
|
||||
example: NLOV1234567ABCDEFG
|
||||
totaalbedrag:
|
||||
type: number
|
||||
format: float
|
||||
ovPasNumber:
|
||||
type: string
|
||||
example: 63AW974
|
||||
verificationCode:
|
||||
type: string
|
||||
example: 2FQ8
|
||||
refundsEntity:
|
||||
required:
|
||||
- emailAddress
|
||||
@ -213,7 +239,7 @@ components:
|
||||
emailAddress:
|
||||
type: string
|
||||
format: email
|
||||
example: j.beek@htm.nl
|
||||
example: stasjo@htm.nl
|
||||
orderNumber:
|
||||
type: string
|
||||
example: ORD1000046
|
||||
@ -226,6 +252,9 @@ components:
|
||||
ovpasNumber:
|
||||
type: string
|
||||
example: 63AW974
|
||||
verificationCode:
|
||||
type: string
|
||||
example: 2FQ8
|
||||
iban:
|
||||
type: string
|
||||
example: NL00RABO000001337
|
||||
|
||||
1845
src/openapi/container/abt-container-notifications.yaml
Normal file
1845
src/openapi/container/abt-container-notifications.yaml
Normal file
File diff suppressed because it is too large
Load Diff
417
src/openapi/container/abt-container-tokens.yaml
Normal file
417
src/openapi/container/abt-container-tokens.yaml
Normal file
@ -0,0 +1,417 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Integration layer APIs for token storage for ABT
|
||||
description: >-
|
||||
APIs that give business processes access to the security and authorization state of a token within the scope of HTM. In the backend this is connected to a container which handles the accessToken en refreshToken management for an OVpas as given by GBO.
|
||||
version: "1.0"
|
||||
servers:
|
||||
- url: https://services.acc.api.htm.nl/abt/containertokens/1.0
|
||||
security:
|
||||
- oAuthSample: [profile]
|
||||
tags:
|
||||
- name: securitytokens
|
||||
paths:
|
||||
/securitytokens:
|
||||
post:
|
||||
tags:
|
||||
- securitytokens
|
||||
summary: Create a new security token entry in the vault
|
||||
description: Create a new security token entry in the vault, if the customerProfileId has been supplied create in the customerToken DB otherwise in the AnonymousToken DB
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/CreateSecurityTokenBody"
|
||||
examples:
|
||||
token details:
|
||||
value:
|
||||
{
|
||||
"xTat": "cf694905-7f76-4799-b0bc-490716921323",
|
||||
"otpKey": "123456789123456789123456789abcde",
|
||||
"customerProfileId": 12314
|
||||
}
|
||||
responses:
|
||||
"201":
|
||||
description: Created
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Missing Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Missing Mandatory Parameter
|
||||
detail: Required parameter {0} is missing.
|
||||
Invalid Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Invalid Parameter
|
||||
detail: Required parameter {0} is invalid.
|
||||
"401":
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unauthorized:
|
||||
value:
|
||||
status: 401
|
||||
title: Unauthorized
|
||||
detail: Invalid Access Token
|
||||
"404":
|
||||
description: Not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
TAT not found:
|
||||
value:
|
||||
status: 404
|
||||
title: Not Found
|
||||
detail: TAT Account Not Found
|
||||
"409":
|
||||
description: Conflict
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
TAT already exists:
|
||||
value:
|
||||
status: 409
|
||||
title: Conflict
|
||||
detail: Security Token already exists
|
||||
"500":
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Internal Server Error:
|
||||
value:
|
||||
status: 500
|
||||
title: Internal Server Error
|
||||
detail: An unknown error has occurred
|
||||
/securitytokens/{xTat}/status:
|
||||
parameters:
|
||||
- name: xTat
|
||||
in: path
|
||||
schema:
|
||||
type: string
|
||||
example: 85dbeacc-b9aa-4d5b-bdec-9319010c597f
|
||||
required: true
|
||||
description: The xTat of the OVpastoken for which the status needs to be checked
|
||||
- name: customerProfileId
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
example: 323
|
||||
required: false
|
||||
description: The id of the customer Profile for which the request is being done, if customer has identified themselves
|
||||
get:
|
||||
tags:
|
||||
- securitytokens
|
||||
summary: Request the security and authorization status of an OV pas token
|
||||
description: Request the security and authorization status of an OV pas token, if the customerProfileId has been supplied look in the customerToken DB otherwise check the AnonymousToken DB.
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SecurityTokenStatusResponse"
|
||||
examples:
|
||||
Not secured and not authorized :
|
||||
summary: Not secured, not authorized
|
||||
value:
|
||||
{
|
||||
"isAuthorized": false,
|
||||
"isSecured": false
|
||||
}
|
||||
Secured and not authorized :
|
||||
summary: Secured, not authorized
|
||||
value:
|
||||
{
|
||||
"isAuthorized": false,
|
||||
"isSecured": true
|
||||
}
|
||||
Secured and authorized :
|
||||
summary: Secured and authorized
|
||||
value:
|
||||
{
|
||||
"isAuthorized": true,
|
||||
"isSecured": true
|
||||
}
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Missing Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Missing Mandatory Parameter
|
||||
detail: Required parameter {0} is missing.
|
||||
Invalid Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Invalid Parameter
|
||||
detail: Required parameter {0} is invalid.
|
||||
"401":
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unauthorized:
|
||||
value:
|
||||
status: 401
|
||||
title: Unauthorized
|
||||
detail: Invalid Access Token
|
||||
"404":
|
||||
description: Not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
TAT not found:
|
||||
value:
|
||||
status: 404
|
||||
title: Not Found
|
||||
detail: TAT Account Not Found
|
||||
"500":
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Internal Server Error:
|
||||
value:
|
||||
status: 500
|
||||
title: Internal Server Error
|
||||
detail: An unknown error has occurred
|
||||
/securitytokens/{xTat}:
|
||||
parameters:
|
||||
- name: xTat
|
||||
in: path
|
||||
schema:
|
||||
type: string
|
||||
example: uuid
|
||||
required: true
|
||||
description: The xTat of the ovPastoken for which the status needs to be checked
|
||||
- name: customerProfileId
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
example: 323
|
||||
required: false
|
||||
description: The id of the customer Profile for which the request is being done, if customer has identified themselves
|
||||
patch:
|
||||
tags:
|
||||
- securitytokens
|
||||
summary: Validate the supplied OTP and secure and/or authorize the token
|
||||
description: Validate the supplied OTP and secure and/or authorize the token if the customerProfileId has been supplied look in the customerToken DB otherwise check the AnonymousToken DB.
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SecurityValidateTokenBody"
|
||||
examples:
|
||||
token:
|
||||
value:
|
||||
{
|
||||
"otp": "123456"
|
||||
}
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SecurityTokenStatusResponse"
|
||||
examples:
|
||||
Not secured and not authorized :
|
||||
summary: Not secured, not authorized
|
||||
value:
|
||||
{
|
||||
"isAuthorized": false,
|
||||
"isSecured": false
|
||||
}
|
||||
Secured and not authorized :
|
||||
summary: Secured, not authorized
|
||||
value:
|
||||
{
|
||||
"isAuthorized": false,
|
||||
"isSecured": true
|
||||
}
|
||||
Secured and authorized :
|
||||
summary: Secured and authorized
|
||||
value:
|
||||
{
|
||||
"isAuthorized": true,
|
||||
"isSecured": true
|
||||
}
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Missing Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Missing Mandatory Parameter
|
||||
detail: Required parameter {0} is missing.
|
||||
Invalid Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Invalid Parameter
|
||||
detail: Required parameter {0} is invalid.
|
||||
"422":
|
||||
description: Unprocessable Entity
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Validation failed:
|
||||
value:
|
||||
status: 422
|
||||
title: OTP validation failed
|
||||
detail: The supplied OTP could not be validated
|
||||
"401":
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unauthorized:
|
||||
value:
|
||||
status: 401
|
||||
title: Unauthorized
|
||||
detail: Invalid Access Token
|
||||
"404":
|
||||
description: Not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
TAT not found:
|
||||
value:
|
||||
status: 404
|
||||
title: Not Found
|
||||
detail: TAT Account Not Found
|
||||
"500":
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Internal Server Error:
|
||||
value:
|
||||
status: 500
|
||||
title: Internal Server Error
|
||||
detail: An unknown error has occurred
|
||||
delete:
|
||||
tags:
|
||||
- securitytokens
|
||||
summary: Delete the authorization for HTM for an ovpaytoken
|
||||
description: Delete the authorization for HTM for an ovpaytoken if the customerProfileId has been supplied look in the customerToken DB otherwise check the AnonymousToken DB.
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SecurityTokenStatusResponse"
|
||||
example:
|
||||
{}
|
||||
components:
|
||||
securitySchemes:
|
||||
oAuthSample:
|
||||
type: oauth2
|
||||
description: This API uses OAuth 2 with the clientCredentials flow. [More info](https://api.example.com/docs/auth)
|
||||
flows:
|
||||
clientCredentials: # <---- OAuth flow( clientCredentials)
|
||||
tokenUrl: https://identity.{env}.api.htm.nl/oauth2/token
|
||||
scopes:
|
||||
profile: "Access user profile"
|
||||
schemas:
|
||||
ErrorResponse:
|
||||
description: Default response when an invalid request has been sent
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: integer
|
||||
description: >-
|
||||
A status IS An integer that represents the HTTP status code of the
|
||||
response.
|
||||
example: 400
|
||||
title:
|
||||
type: string
|
||||
description: A title IS A string that provides a brief summary of the error.
|
||||
detail:
|
||||
type: string
|
||||
description: A detail IS A string that provides more details about the error.
|
||||
CreateSecurityTokenBody:
|
||||
description: Body for when the a new security token entry is created
|
||||
type: object
|
||||
required:
|
||||
- xTat
|
||||
- otpKey
|
||||
properties:
|
||||
xTat:
|
||||
type : string
|
||||
description: >-
|
||||
Unique identifier for the GBO transit account
|
||||
example: 03071794-482a-4168-b60f-84669a9e6a76
|
||||
otpKey:
|
||||
type : string
|
||||
description: >-
|
||||
Key used to validate the OTP at GBO
|
||||
example: 123456789123456789123456789abcde
|
||||
customerProfileId:
|
||||
type : integer
|
||||
description: >-
|
||||
CustomerProfileId of the account requesting security or giving authorization
|
||||
example: 123456
|
||||
SecurityTokenStatusResponse:
|
||||
description: Response for when the status of a token is requested
|
||||
type: object
|
||||
properties:
|
||||
isSecured:
|
||||
type: boolean
|
||||
description: >-
|
||||
Is the OVpas secured according to the GBO
|
||||
example: false
|
||||
isAuthorized:
|
||||
type: boolean
|
||||
description: >-
|
||||
Does HTM have the authorization to access the secured the data of the OVpas
|
||||
example: false
|
||||
SecurityValidateTokenBody:
|
||||
description: Body for when the a token entry is validated
|
||||
type: object
|
||||
required:
|
||||
- otp
|
||||
properties:
|
||||
otp:
|
||||
type : string
|
||||
description: >-
|
||||
OTP to be used to secure the token and retrieve the JWT at GBO
|
||||
example: 123456
|
||||
@ -45,12 +45,36 @@ paths:
|
||||
"contractStatus":
|
||||
{ "contractStatusId": 2, "name": "active" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"productName": "HTM Maand 20% korting doorlopend",
|
||||
"termDuration": "P1M",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"created": "2024-08-01 15:01:00.000",
|
||||
"created": "2024-08-01T15:01:00.000Z",
|
||||
"ovPayTokenId": 1337,
|
||||
"contractVersions": [
|
||||
{
|
||||
"contractVersionId": 1,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting doorlopend",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9,
|
||||
"termAmountInclTax": 400,
|
||||
"start": "2024-08-01T15:01:00.000Z",
|
||||
"end": "2025-01-01T03:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"contractVersionId": 2,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting doorlopend",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9,
|
||||
"termAmountInclTax": 500,
|
||||
"start": "2025-01-01T03:00:00.000Z",
|
||||
"end": null
|
||||
}
|
||||
],
|
||||
"_links":
|
||||
{
|
||||
"get_token":
|
||||
@ -68,14 +92,38 @@ paths:
|
||||
"orderLineId": "42f68042-908f-41f4-9d9b-4cab843ff0e8",
|
||||
"touchpointId": 2,
|
||||
"contractStatus":
|
||||
{ "contractStatusId": 1, "name": "new" },
|
||||
{ "contractStatusId": 6, "name": "pending cancellation" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"productName": "HTM 20% Korting doorlopend",
|
||||
"termDuration": "P1M",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"created": "2024-08-01 15:01:00.000",
|
||||
"created": "2024-08-01T15:01:00.000Z",
|
||||
"ovPayTokenId": 1338,
|
||||
"contractVersions": [
|
||||
{
|
||||
"contractVersionId": 1,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"productId": 1,
|
||||
"productName": "HTM 20% Korting doorlopend",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9,
|
||||
"termAmountInclTax": 400,
|
||||
"start": "2024-08-01T15:01:00.000Z",
|
||||
"end": "2025-01-01T03:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"contractVersionId": 2,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"productId": 1,
|
||||
"productName": "HTM 20% Korting doorlopend",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9,
|
||||
"termAmountInclTax": 500,
|
||||
"start": "2025-01-01T03:00:00.000Z",
|
||||
"end": "2025-02-01T03:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"_links":
|
||||
{
|
||||
"get_token":
|
||||
@ -154,8 +202,8 @@ paths:
|
||||
"contractStatus":
|
||||
{ "contractStatusId": 2, "name": "active" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"productName": "HTM 20% Korting doorlopend",
|
||||
"termDuration": "P1M",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"ovPayTokenId": 1337,
|
||||
@ -165,22 +213,22 @@ paths:
|
||||
"contractVersionId": 1,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"productName": "HTM 20% Korting doorlopend",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9.0,
|
||||
"termAmountInclTax": 400,
|
||||
"start": "2024-07-04 15:01:00.000",
|
||||
"end": "2024-12-31 15:01:00.000",
|
||||
"start": "2024-08-01T15:01:00.000Z",
|
||||
"end": "2025-01-01T03:00:00.000Z",
|
||||
},
|
||||
{
|
||||
"contractVersionId": 2,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"productName": "HTM 20% Korting doorlopend",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9.0,
|
||||
"termAmountInclTax": 400,
|
||||
"start": "2025-01-01 15:01:00.000",
|
||||
"start": "2025-01-01T03:00:00.000Z",
|
||||
},
|
||||
],
|
||||
"contractActions":
|
||||
@ -190,7 +238,7 @@ paths:
|
||||
"actionType":
|
||||
{ "actionTypeId": 1, "name": "create" },
|
||||
"user": "subid123456",
|
||||
"timestamp": "2024-07-02 15:01:00.000",
|
||||
"timestamp": "2024-07-02T15:01:00.000Z",
|
||||
"details": "Contract created",
|
||||
"correlationId": "976e7a4c-bf24-43d2-b444-55817556e7ee",
|
||||
},
|
||||
@ -199,7 +247,7 @@ paths:
|
||||
"actionType":
|
||||
{ "actionTypeId": 2, "name": "change" },
|
||||
"user": "subid123456",
|
||||
"timestamp": "2024-07-03 15:01:00.000",
|
||||
"timestamp": "2024-07-03T15:01:00.000Z",
|
||||
"details": "Contract changed",
|
||||
"correlationId": "e2462347-6749-4841-b42a-cf8de19ec727",
|
||||
},
|
||||
@ -211,8 +259,8 @@ paths:
|
||||
"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",
|
||||
"created": "2024-07-02T15:01:00.000Z",
|
||||
"updated": "2024-07-02T15:01:00.000Z",
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
@ -270,8 +318,8 @@ paths:
|
||||
"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",
|
||||
"created": "2024-07-02T15:01:34.000Z",
|
||||
"updated": "2024-07-04T00:04:56.000Z",
|
||||
"state": "invoice_created",
|
||||
"public_link": "http://mijnfactuurinzien.nl/F2024-0001",
|
||||
"isCredit": false,
|
||||
@ -282,8 +330,8 @@ paths:
|
||||
"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",
|
||||
"created": "2024-08-02T15:01:34.000Z",
|
||||
"updated": "2024-08-04T00:04:56.000Z",
|
||||
"state": "invoice_created",
|
||||
"public_link": "http://mijnfactuurinzien.nl/F2024-0002",
|
||||
"isCredit": false,
|
||||
@ -328,8 +376,8 @@ paths:
|
||||
"cancellationMoment": "termBound",
|
||||
"termDuration": "P1M",
|
||||
"billingDay": 18,
|
||||
"cancellationFrom": "2024-08-10T00:00:00",
|
||||
"cancellationUntil": "2026-08-10T00:00:00",
|
||||
"cancellationFrom": "2024-08-10T00:00:00Z",
|
||||
"cancellationUntil": "2026-08-10T00:00:00Z",
|
||||
}
|
||||
/contracts/{contractId}/cancellationvalidation:
|
||||
parameters:
|
||||
@ -382,14 +430,14 @@ paths:
|
||||
{
|
||||
"validationResult": true,
|
||||
"validationMessage": "",
|
||||
"end": "2024-08-10T03:59:59",
|
||||
"end": "2024-08-10T03:59:59Z",
|
||||
"refundAmount": 2489,
|
||||
"refundMethods": ["creditInvoice", "iDeal"],
|
||||
}
|
||||
Unsuccesful validation:
|
||||
summary: Unsuccesful validation
|
||||
Unsuccessful validation:
|
||||
summary: Unsuccessful validation
|
||||
description: |
|
||||
Unsuccesful validation. The response contains the error message.
|
||||
Unsuccessful validation. The response contains the error message.
|
||||
value:
|
||||
{
|
||||
"validationResult": false,
|
||||
@ -451,7 +499,7 @@ paths:
|
||||
the refund amount and refund method.
|
||||
value:
|
||||
{
|
||||
"end": "2024-08-10T03:59:59",
|
||||
"end": "2024-08-10T03:59:59Z",
|
||||
"refundAmount": 2489,
|
||||
"refundMethod": "creditInvoice",
|
||||
}
|
||||
@ -516,8 +564,8 @@ paths:
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9.0,
|
||||
"termAmountInclTax": 400,
|
||||
"start": "2024-07-04 15:01:00.000",
|
||||
"end": "2024-12-31 15:01:00.000",
|
||||
"start": "2024-07-04T15:01:00.000Z",
|
||||
"end": "2024-12-31T15:01:00.000Z",
|
||||
},
|
||||
{
|
||||
"contractVersionId": 2,
|
||||
@ -527,7 +575,8 @@ paths:
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9.0,
|
||||
"termAmountInclTax": 400,
|
||||
"start": "2025-01-01 15:01:00.000",
|
||||
"start": "2025-01-01T15:01:00.000Z",
|
||||
"end": null
|
||||
},
|
||||
],
|
||||
"contractActions":
|
||||
@ -537,7 +586,7 @@ paths:
|
||||
"actionType":
|
||||
{ "actionTypeId": 1, "name": "create" },
|
||||
"user": "subid123456",
|
||||
"timestamp": "2024-07-02 15:01:00.000",
|
||||
"timestamp": "2024-07-02T15:01:00.000Z",
|
||||
"details": "Contract created",
|
||||
"correlationId": "976e7a4c-bf24-43d2-b444-55817556e7ee",
|
||||
},
|
||||
@ -546,7 +595,7 @@ paths:
|
||||
"actionType":
|
||||
{ "actionTypeId": 2, "name": "change" },
|
||||
"user": "subid123456",
|
||||
"timestamp": "2024-07-03 15:01:00.000",
|
||||
"timestamp": "2024-07-03T15:01:00.000Z",
|
||||
"details": "Contract changed",
|
||||
"correlationId": "e2462347-6749-4841-b42a-cf8de19ec727",
|
||||
},
|
||||
@ -558,8 +607,8 @@ paths:
|
||||
"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",
|
||||
"created": "2024-07-02T15:01:00.000Z",
|
||||
"updated": "2024-07-02T15:01:00.000Z",
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
@ -574,6 +623,267 @@ paths:
|
||||
},
|
||||
},
|
||||
}
|
||||
/contracts/{uuid}/changemoments:
|
||||
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: uuid
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 9e224750-3065-471d-af57-85b9cffa7c89
|
||||
required: true
|
||||
description: The id of the contract to process.
|
||||
get:
|
||||
summary: Get all change moments for a given contract.
|
||||
description: Get all change moments for a given contract.
|
||||
tags:
|
||||
- SE Contract Changes v2
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
All change moments of a contract:
|
||||
summary: All change moments of a contract
|
||||
description: |
|
||||
All change moments of a contract. The response contains the
|
||||
allowed change moments for the current contract term.
|
||||
value:
|
||||
{
|
||||
"changeMoment": "termBound",
|
||||
"termDuration": "P1M",
|
||||
"billingDay": 18,
|
||||
"changeFrom": "2024-08-10T00:00:00",
|
||||
"changeUntil": "2024-08-10T03:59:59",
|
||||
}
|
||||
/contracts/{uuid}/changevalidation:
|
||||
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: uuid
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 9e224750-3065-471d-af57-85b9cffa7c89
|
||||
required: true
|
||||
description: The id of the contract to process.
|
||||
post:
|
||||
summary: Validate a change for a given contract.
|
||||
description: Validate a change for a given contract.
|
||||
tags:
|
||||
- SE Contract Changes v2
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Validate a change to another product:
|
||||
summary: Validate a change to another product
|
||||
description: |
|
||||
Validate a change to another product. The response contains the allowed change moments for the current contract term.
|
||||
value: { "productId": 124, "startDate": "2025-10-08" }
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Successfully validated change:
|
||||
summary: Successfully validated change
|
||||
description: |
|
||||
Successfully validated a change. The response contains the allowed change moments for the current contract term.
|
||||
value:
|
||||
{
|
||||
"validationResult": true,
|
||||
"validationMessage": "",
|
||||
"contract":
|
||||
{
|
||||
"contractId": "15b43d9b-367a-4952-87f6-3e0fa902486f",
|
||||
"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-01T15:01:00.000Z",
|
||||
"ovPayTokenId": 1337,
|
||||
"contractVersions":
|
||||
[
|
||||
{
|
||||
"contractVersionId": 2,
|
||||
"termsAndConditions": "https://www.htm.nl",
|
||||
"productId": 124,
|
||||
"productName": "Regiovrij Regio Centrum",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9.0,
|
||||
"termAmountInclTax": 12,
|
||||
"start": "2025-10-08",
|
||||
},
|
||||
{
|
||||
"contractVersionId": 1,
|
||||
"termsAndConditions": "https://www.htm.nl",
|
||||
"productId": 123,
|
||||
"productName": "Regiovrij Regio Zuid",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9.0,
|
||||
"termAmountInclTax": 10,
|
||||
"start": "2025-01-08",
|
||||
"end": "2025-10-07",
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
Unsuccessful validation:
|
||||
summary: Unsuccessful validation
|
||||
description: |
|
||||
Unsuccessful validation. The response contains the error message.
|
||||
value:
|
||||
{
|
||||
"validationResult": false,
|
||||
"validationMessage": "Contract status is not ACTIVE",
|
||||
"contract": null,
|
||||
}
|
||||
/contracts/{uuid}/change:
|
||||
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: uuid
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 9e224750-3065-471d-af57-85b9cffa7c89
|
||||
required: true
|
||||
description: The id of the contract to process.
|
||||
post:
|
||||
summary: Change a contract.
|
||||
description: Change a contract.
|
||||
tags:
|
||||
- SE Contract Changes v2
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Change to another product:
|
||||
summary: Change to another product
|
||||
description: |
|
||||
Change to another product. The response contains the details of the changed contract.
|
||||
value: { "productId": 124, "startDate": "2025-10-08" }
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Successfully changed contract:
|
||||
summary: Successfully changed contract
|
||||
description: |
|
||||
Successfully changed a contract. The response contains the details of the changed contract.
|
||||
value:
|
||||
{
|
||||
"contractId": "15b43d9b-367a-4952-87f6-3e0fa902486f",
|
||||
"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-01T15:01:00.000Z",
|
||||
"ovPayTokenId": 1337,
|
||||
"contractVersions":
|
||||
[
|
||||
{
|
||||
"contractVersionId": 2,
|
||||
"termsAndConditions": "https://www.htm.nl",
|
||||
"productId": 124,
|
||||
"productName": "Regiovrij Regio Centrum",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9.0,
|
||||
"termAmountInclTax": 12,
|
||||
"start": "2025-10-08",
|
||||
},
|
||||
{
|
||||
"contractVersionId": 1,
|
||||
"termsAndConditions": "https://www.htm.nl",
|
||||
"productId": 123,
|
||||
"productName": "Regiovrij Regio Zuid",
|
||||
"taxCode": "V9",
|
||||
"taxPercentage": 9.0,
|
||||
"termAmountInclTax": 10,
|
||||
"start": "2025-01-08",
|
||||
"end": "2025-10-07",
|
||||
},
|
||||
],
|
||||
}
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Unsuccessful change due to invalid productId:
|
||||
summary: Unsuccessful change due to invalid productId
|
||||
description: |
|
||||
Unsuccessful change due to invalid productId. The response contains the error message.
|
||||
value:
|
||||
{
|
||||
"type": "https://htm.nl/api/v1/probs/validationerror",
|
||||
"title": "Your request is not valid.",
|
||||
"detail": "The chosen parameters for this contract change are not valid.",
|
||||
"instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b",
|
||||
"errors":
|
||||
[
|
||||
{
|
||||
"code": "CHANGE_DATE_IN_THE_PAST",
|
||||
"detail": "Chosen date of contract change is in the past. This is not alllowed.",
|
||||
"path": "$.startDate",
|
||||
"parameter": null,
|
||||
},
|
||||
],
|
||||
}
|
||||
/contractpayments:
|
||||
parameters:
|
||||
- in: header
|
||||
@ -597,9 +907,13 @@ paths:
|
||||
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'.
|
||||
Empty list:
|
||||
summary: Empty list
|
||||
description: List all contract payments for a debtor with no payments.
|
||||
value: { "contractPayments": [] }
|
||||
Successful direct debit:
|
||||
summary: Successful direct debit
|
||||
description: One payment for a debtor with a successful direct debit.
|
||||
value:
|
||||
{
|
||||
"contractPayments":
|
||||
@ -607,8 +921,133 @@ paths:
|
||||
{
|
||||
"paymentId": "151845776",
|
||||
"totalAmount": "26.62",
|
||||
"paymentMethod": "Twikey",
|
||||
"paymentMethod": "Automatische incasso",
|
||||
"paymentDate": "2024-09-12",
|
||||
"iban": "NL25INGB******1337",
|
||||
"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",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
Direct debit reversal:
|
||||
summary: Direct debit reversal
|
||||
description: One payment for a debtor with a reversed direct debit.
|
||||
value:
|
||||
{
|
||||
"contractPayments":
|
||||
[
|
||||
{
|
||||
"paymentId": "151845776",
|
||||
"totalAmount": "-26.62",
|
||||
"paymentMethod": "Stornering",
|
||||
"paymentDate": "2024-09-12",
|
||||
"iban": "NL25INGB******1337",
|
||||
"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",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
iDEAL payment:
|
||||
summary: iDEAL payment
|
||||
description: One payment for a debtor with an iDEAL payment.
|
||||
value:
|
||||
{
|
||||
"contractPayments":
|
||||
[
|
||||
{
|
||||
"paymentId": "151845776",
|
||||
"totalAmount": "26.62",
|
||||
"paymentMethod": "iDEAL",
|
||||
"paymentDate": "2024-09-12",
|
||||
"iban": "NL25INGB******1337",
|
||||
"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",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
Bank transfer:
|
||||
summary: Bank transfer
|
||||
description: One payment for a debtor with a bank transfer.
|
||||
value:
|
||||
{
|
||||
"contractPayments":
|
||||
[
|
||||
{
|
||||
"paymentId": "151845776",
|
||||
"totalAmount": "26.62",
|
||||
"paymentMethod": "Overboeking",
|
||||
"paymentDate": "2024-09-12",
|
||||
"iban": "NL25INGB******1337",
|
||||
"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",
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
List of four payments for one invoice:
|
||||
summary: List of four payments for one invoice
|
||||
description: Four payments for a debtor for one invoice; a direct debit, a direct debit reversal, a bank transfer and an iDEAL payment.
|
||||
value:
|
||||
{
|
||||
"contractPayments":
|
||||
[
|
||||
{
|
||||
"paymentId": "151845776",
|
||||
"totalAmount": "26.62",
|
||||
"paymentMethod": "Automatische incasso",
|
||||
"paymentDate": "2024-09-12",
|
||||
"iban": "NL25INGB******1337",
|
||||
"invoice":
|
||||
{
|
||||
"invoiceId": "147722263",
|
||||
@ -626,22 +1065,67 @@ paths:
|
||||
},
|
||||
},
|
||||
{
|
||||
"paymentId": "151845851",
|
||||
"totalAmount": "45.21",
|
||||
"paymentMethod": "Twikey",
|
||||
"paymentId": "151845776",
|
||||
"totalAmount": "-26.62",
|
||||
"paymentMethod": "Stornering",
|
||||
"paymentDate": "2024-09-12",
|
||||
"iban": "NL25INGB******1337",
|
||||
"invoice":
|
||||
{
|
||||
"invoiceId": "147722266",
|
||||
"invoiceNumber": "F2024-0002",
|
||||
"invoiceId": "147722263",
|
||||
"invoiceNumber": "F2024-0001",
|
||||
"description": "HTM Maandkorting 20%",
|
||||
"publicLink": "https://factuurinzien.nl/d/ddb245d6df67999eca48c4a71b5661b93038e20a/i/dp5h1i5cuu94nopiolkdst3u17vkmzo",
|
||||
"publicLink": "https://factuurinzien.nl/d/b0aac3f42f325f5dd6abc172f723caab5956524d/i/ddb245d6df67999eca48c4a71b5661b93038e20a",
|
||||
},
|
||||
"_links":
|
||||
{
|
||||
"get_contractdetails":
|
||||
{
|
||||
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/7b2f8c1a-3d9d-4c2d-960e-4471e8e28b6a",
|
||||
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/contracts/5ca46c1a-cb9d-4c2d-960e-4471e8e28b6a",
|
||||
"method": "GET",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"paymentId": "151845777",
|
||||
"totalAmount": "10.00",
|
||||
"paymentMethod": "Overboeking",
|
||||
"paymentDate": "2024-09-13",
|
||||
"iban": "NL25INGB******1337",
|
||||
"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": "151845778",
|
||||
"totalAmount": "16.62",
|
||||
"paymentMethod": "iDEAL",
|
||||
"paymentDate": "2024-09-14",
|
||||
"iban": "NL25INGB******1337",
|
||||
"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",
|
||||
},
|
||||
},
|
||||
|
||||
4737
src/openapi/customers/SE-customers-v2.yaml
Normal file
4737
src/openapi/customers/SE-customers-v2.yaml
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
617
src/openapi/customers/SE-tat-security.yaml
Normal file
617
src/openapi/customers/SE-tat-security.yaml
Normal file
@ -0,0 +1,617 @@
|
||||
openapi: 3.0.1
|
||||
info:
|
||||
title: Service Engine APIs for TAT security
|
||||
description: >-
|
||||
Service Engine APIs for TAT security. These are NOT the raw GBO APIs to access TAT security at GBO directly.
|
||||
To be used by touch points to get secure a TAT.
|
||||
version: "2.0"
|
||||
servers:
|
||||
- url: https://services.acc.api.htm.nl/abt/touchpoint/2.0
|
||||
tags:
|
||||
- name: TAT Security
|
||||
paths:
|
||||
/tokens/status:
|
||||
parameters:
|
||||
- name: X-HTM-JWT-AUTH-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|
||||
required: false
|
||||
description: The JWT of a customer in case of touchpoint were customer logs in themselves
|
||||
- name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: integer
|
||||
example: 323
|
||||
required: false
|
||||
description: The id of the customer Profile
|
||||
- name: X-HTM-ROLE-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
example: Customer
|
||||
required: false
|
||||
description: The role of the HTM employee in the case of the SMP
|
||||
- name: xTat
|
||||
in: query
|
||||
schema:
|
||||
type: string
|
||||
format : uuid
|
||||
example: 5c4cba83-1ecd-46a4-b712-a8de0dcb7bbf
|
||||
required: false
|
||||
description: The xtat of the customerToken
|
||||
- name: ovPayTokenId
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
example: 1
|
||||
required: false
|
||||
description: The ovpay token id of a specific customer token
|
||||
- name: serviceReferenceId
|
||||
in: query
|
||||
schema:
|
||||
type: string
|
||||
example: NLOV1234567ABCDEFG
|
||||
required: false
|
||||
description: The serviceReferencId found on the bankstatement for a given trip with a bankcard, required for an unknown EMV card
|
||||
- name: amount
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
example: 0
|
||||
required: false
|
||||
description: The amount of the value of the bankstatement in cents, required for an unknown EMV card
|
||||
- name: ovpasNumber
|
||||
in: query
|
||||
schema:
|
||||
type: string
|
||||
example: OV34567
|
||||
required: false
|
||||
description: The number of the ovpas, required for an unknown Ovpas card
|
||||
- name: verificationCode
|
||||
in: query
|
||||
schema:
|
||||
type: string
|
||||
example: HL78
|
||||
required: false
|
||||
description: The 4 digit verificationCode found on the backside of the Ovpas, required for an unknown Ovpas card
|
||||
get:
|
||||
tags:
|
||||
- TAT Security
|
||||
summary: Check the status of the security and authorization status of the given token
|
||||
description: Check the status of the security and authorization status of the given token, check anonymous tokenDB if no customer headers are supplied otherwise check customer tokenDB
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TokenStatusResponse"
|
||||
examples:
|
||||
isSecuredandnotAuthorized:
|
||||
summary: Token is secured but HTM is not authorized
|
||||
description: Token is secured but HTM is not authorized
|
||||
value:
|
||||
isSecured: true
|
||||
isAuthorized: false
|
||||
xTat: 12da8f2a-6390-408a-94eb-a6701b5daf27
|
||||
_links: {
|
||||
"authorize": {
|
||||
"href": "/tokens/authorizetoken",
|
||||
"method": "POST"
|
||||
}
|
||||
}
|
||||
notSecuredandnotAuthorized:
|
||||
summary: Token is not secured but HTM is not authorized
|
||||
description: Token is not secured but HTM is not authorized
|
||||
value:
|
||||
isSecured: false
|
||||
isAuthorized: false
|
||||
xTat: 12da8f2a-6390-408a-94eb-a6701b5daf27
|
||||
_links: {
|
||||
"secure": {
|
||||
"href": "/tokens/securetoken",
|
||||
"method": "POST"
|
||||
}
|
||||
}
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Missing Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Missing Mandatory Parameter
|
||||
detail: Required parameter {0} is missing.
|
||||
Invalid Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Invalid Parameter
|
||||
detail: Required parameter {0} is invalid.
|
||||
"404":
|
||||
description: Not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
TAT not found:
|
||||
value:
|
||||
status: 404
|
||||
title: Not Found
|
||||
detail: XTAT Account Not Found
|
||||
"500":
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
example:
|
||||
error: An unknown error has occurred
|
||||
/tokens/securetoken:
|
||||
parameters:
|
||||
- name: X-HTM-JWT-AUTH-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|
||||
required: false
|
||||
description: The JWT of a customer in case of touchpoint were customer logs in themselves
|
||||
- name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: integer
|
||||
example: 323
|
||||
required: false
|
||||
description: The id of the customer Profile
|
||||
- name: X-HTM-ROLE-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
example: Customer
|
||||
required: false
|
||||
description: The role of the HTM employee in the case of the SMP
|
||||
post:
|
||||
tags:
|
||||
- TAT Security
|
||||
summary: Request additional OV-pas security for a token either in profile or anonymous.
|
||||
description: Request additional OV-pas security for a token either in profile or anonymous
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/SecureTokenRequest"
|
||||
examples:
|
||||
With customer account:
|
||||
value:
|
||||
ovPayTokenId: 42
|
||||
emailAddress: stasjo@htm.nl
|
||||
Without customer account:
|
||||
value:
|
||||
xTat: 62914b49-2c7f-437f-b4b0-2ad61a9f902d
|
||||
emailAddress: stasjo@htm.nl
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/EmailNotPreApprovedResponse"
|
||||
example:
|
||||
recipient: xxxxxx.user@gmail.com
|
||||
description: OTP Sent
|
||||
_links: {
|
||||
"verifyotp": {
|
||||
"href": "/tokens/verifyotp",
|
||||
"method": "POST"
|
||||
}
|
||||
}
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Missing Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Missing Mandatory Parameter
|
||||
detail: Required parameter {0} is missing.
|
||||
Invalid Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Invalid Parameter
|
||||
detail: Required parameter {0} is invalid.
|
||||
"401":
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unauthorized:
|
||||
value:
|
||||
status: 401
|
||||
title: Unauthorized
|
||||
detail: Invalid Access Token
|
||||
"404":
|
||||
description: Not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
TAT not found:
|
||||
value:
|
||||
status: 404
|
||||
title: Not Found
|
||||
detail: TAT Account Not Found
|
||||
"409":
|
||||
description: Conflict
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
examples:
|
||||
TAT Already Secured:
|
||||
value:
|
||||
status: 409
|
||||
title: Conflict
|
||||
detail: TAT Already Secured
|
||||
"500":
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
example:
|
||||
error: An unknown error has occurred
|
||||
/tokens/authorizetoken:
|
||||
parameters:
|
||||
- name: X-HTM-JWT-AUTH-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|
||||
required: false
|
||||
description: The JWT of a customer in case of touchpoint were customer logs in themselves
|
||||
- name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: integer
|
||||
example: 323
|
||||
required: false
|
||||
description: The id of the customer Profile
|
||||
- name: X-HTM-ROLE-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
example: Customer
|
||||
required: false
|
||||
description: The role of the HTM employee in the case of the SMP
|
||||
post:
|
||||
tags:
|
||||
- TAT Authorization
|
||||
summary: Request authorization for HTM to access the data secured by additional OV-pas security for a token either in profile or anonymous.
|
||||
description: Request authorization for HTM to access the data secured by additional OV-pas security for a token either in profile or anonymous.
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/AuthorizeTokenRequest"
|
||||
examples:
|
||||
With customer account:
|
||||
value:
|
||||
ovPayTokenId: 42
|
||||
Without customer account:
|
||||
value:
|
||||
xTat: 62914b49-2c7f-437f-b4b0-2ad61a9f902d
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/EmailNotPreApprovedResponse"
|
||||
example:
|
||||
recipient: xxxxxx.user@gmail.com
|
||||
description: OTP Sent
|
||||
_links: {
|
||||
"verifyotp": {
|
||||
"href": "/tokens/verifyotp",
|
||||
"method": "POST"
|
||||
}
|
||||
}
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Missing Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Missing Mandatory Parameter
|
||||
detail: Required parameter {0} is missing.
|
||||
Invalid Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Invalid Parameter
|
||||
detail: Required parameter {0} is invalid.
|
||||
"401":
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unauthorized:
|
||||
value:
|
||||
status: 401
|
||||
title: Unauthorized
|
||||
detail: Invalid Access Token
|
||||
"404":
|
||||
description: Not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
TAT not found:
|
||||
value:
|
||||
status: 404
|
||||
title: Not Found
|
||||
detail: TAT Account Not Found
|
||||
"500":
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
example:
|
||||
error: An unknown error has occurred
|
||||
/tokens/verifyotp:
|
||||
parameters:
|
||||
- name: X-HTM-JWT-AUTH-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|
||||
required: false
|
||||
description: The JWT of a customer in case of touchpoint were customer logs in themselves
|
||||
- name: X-HTM-CUSTOMER-PROFILE-ID-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: integer
|
||||
example: 323
|
||||
required: false
|
||||
description: The id of the customer Profile
|
||||
- name: X-HTM-ROLE-HEADER
|
||||
in: header
|
||||
schema:
|
||||
type: string
|
||||
example: Customer
|
||||
required: false
|
||||
description: The role of the HTM employee in the case of the SMP
|
||||
post:
|
||||
tags:
|
||||
- TAT Verification
|
||||
summary: Submit an OTP for a triggered OTP flow.
|
||||
description: |
|
||||
Submit an OTP for a triggered OTP flow. This can either be result of an AGO activation, or
|
||||
result of an AGO authorization flow. Since the backoffice behaves slightly different depending
|
||||
on which use case is executed, the calling TP needs to provide an `action` in the request body.
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/VerifyOtpRequest"
|
||||
examples:
|
||||
OTP verification for TAT security activation for token in customer account:
|
||||
value:
|
||||
ovPayTokenId: 42
|
||||
otp: 123456
|
||||
action: secure
|
||||
OTP verification for TAT security authorization for anonymous token:
|
||||
value:
|
||||
xTat: 0f0defe8-828c-48e5-97e5-26d1d0179ef0
|
||||
otp: 123456
|
||||
action: authorize
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/VerifyOtpResponse'
|
||||
examples:
|
||||
Tat Secured:
|
||||
value:
|
||||
status: Success
|
||||
description: TAT Secured
|
||||
Tat Unsecured:
|
||||
value:
|
||||
status: Success
|
||||
description: TAT Unsecured
|
||||
Tat Authorized:
|
||||
value:
|
||||
status: Success
|
||||
description: TAT Authorized
|
||||
"400":
|
||||
description: Bad request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Missing Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Missing Mandatory Parameter
|
||||
detail: Required parameter {0} is missing.
|
||||
Invalid Parameters:
|
||||
value:
|
||||
status: 400
|
||||
title: Invalid Parameter
|
||||
detail: Required parameter {0} is invalid.
|
||||
"401":
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unauthorized:
|
||||
value:
|
||||
status: 401
|
||||
title: Unauthorized
|
||||
detail: Invalid Access Token
|
||||
"500":
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
example:
|
||||
error: An unknown error has occurred
|
||||
components:
|
||||
schemas:
|
||||
unavailable:
|
||||
type: object
|
||||
GenerateTatOutput:
|
||||
type: object
|
||||
properties:
|
||||
uid:
|
||||
type: string
|
||||
description: >-
|
||||
An uid IS A unique identifier THAT is associated with the
|
||||
user.
|
||||
recipient:
|
||||
type: string
|
||||
description: >-
|
||||
A recipient IS A unique identifier THAT is associated with the
|
||||
TAT owner.
|
||||
key:
|
||||
type: string
|
||||
description: >-
|
||||
A key IS a 32 character string THAT uniquely identifies the
|
||||
OTP session.
|
||||
EmailNotPreApprovedResponse:
|
||||
type: object
|
||||
description: >-
|
||||
EmailNotPreApprovedResponse IS AN object THAT represents the response of
|
||||
email pre-approval check.
|
||||
properties:
|
||||
recipient:
|
||||
type: string
|
||||
description: >-
|
||||
A recipient IS A unique identifier THAT is associated with the TAT
|
||||
owner.
|
||||
example: xxxxxx.user@gmail.com
|
||||
description:
|
||||
type: string
|
||||
description: >-
|
||||
A description IS A string THAT describes the reason why the email is
|
||||
not pre-approved.
|
||||
example: OTP Sent
|
||||
SecureTokenRequest:
|
||||
type: object
|
||||
properties:
|
||||
ovPayTokenId:
|
||||
type: integer
|
||||
example: 42
|
||||
xTat:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 6134db53-9ae5-41d1-a343-36656b60b510
|
||||
emailAddress:
|
||||
type: string
|
||||
format: email
|
||||
example: stasjo@htm.nl
|
||||
required:
|
||||
- emailAddress
|
||||
AuthorizeTokenRequest:
|
||||
type: object
|
||||
properties:
|
||||
ovPayTokenId:
|
||||
type: integer
|
||||
example: 42
|
||||
xTat:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 6134db53-9ae5-41d1-a343-36656b60b510
|
||||
VerifyOtpRequest:
|
||||
type: object
|
||||
properties:
|
||||
ovPayTokenId:
|
||||
type: integer
|
||||
example: 42
|
||||
xTat:
|
||||
type: string
|
||||
format: uuid
|
||||
example: f3474452-e1d4-428c-b366-e5ad5965eb8c
|
||||
otp:
|
||||
type: string
|
||||
example: 123456
|
||||
action:
|
||||
type: string
|
||||
example: secure
|
||||
required:
|
||||
- otp
|
||||
- action
|
||||
VerifyOtpResponse:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
example: Success
|
||||
description:
|
||||
type: string
|
||||
example: TAT Secured
|
||||
ErrorResponse:
|
||||
description: Default response when an invalid request has been sent
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: integer
|
||||
description: >-
|
||||
A status IS An integer that represents the HTTP status code of the
|
||||
response.
|
||||
example: 400
|
||||
title:
|
||||
type: string
|
||||
description: A title IS A string that provides a brief summary of the error.
|
||||
detail:
|
||||
type: string
|
||||
description: A detail IS A string that provides more details about the error.
|
||||
TokenStatusResponse:
|
||||
type: object
|
||||
description: >-
|
||||
TokenStatusResponse IS AN object THAT represents the current state of the token in relation to the AGO security and authorization status of HTM.
|
||||
required:
|
||||
- isSecured
|
||||
- isAuthorized
|
||||
properties:
|
||||
isSecured:
|
||||
type: boolean
|
||||
description: >-
|
||||
Is the token secured in the national database (GBO)
|
||||
example: false
|
||||
isAuthorized:
|
||||
type: boolean
|
||||
description: >-
|
||||
Does HTM have the authorization to access the secured data for this token, only applicable when isSecured equals True.
|
||||
example: false
|
||||
xTat:
|
||||
type: string
|
||||
format: uuid
|
||||
description: >-
|
||||
The xtat of the customerToken given when token is unknown for the customer
|
||||
example: 883674e5-54c7-47d6-a3e3-8781f0d3ffea
|
||||
|
||||
@ -243,7 +243,7 @@ paths:
|
||||
suffix: PhD
|
||||
dateOfBirth: "2002-10-29"
|
||||
emailAddresses: TEST@HTM.NL
|
||||
isEmailVerified: True
|
||||
isEmailVerified: false
|
||||
addresses:
|
||||
- addressId: 1
|
||||
street: mystreet
|
||||
@ -332,14 +332,6 @@ paths:
|
||||
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
|
||||
@ -377,7 +369,7 @@ paths:
|
||||
suffix: PhD
|
||||
dateOfBirth: "2002-10-29"
|
||||
emailAddresses: TEST@HTM.NL
|
||||
isEmailVerified: False
|
||||
isEmailVerified: false
|
||||
address:
|
||||
- addressId: 1
|
||||
street: mystreet
|
||||
@ -467,32 +459,7 @@ paths:
|
||||
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",
|
||||
},
|
||||
}
|
||||
href: "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?offset=20&limit=20"
|
||||
getCustomerActive:
|
||||
summary: getCustomerActive
|
||||
description: >-
|
||||
@ -526,7 +493,7 @@ paths:
|
||||
suffix: PhD
|
||||
dateOfBirth: "2002-10-29"
|
||||
emailAddresses: TEST@HTM.NL
|
||||
isEmailVerified: False
|
||||
isEmailVerified: false
|
||||
addresses:
|
||||
- addressId: 1
|
||||
street: mystreet
|
||||
@ -615,22 +582,7 @@ paths:
|
||||
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",
|
||||
},
|
||||
}
|
||||
href: https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?offset=20&limit=20
|
||||
getCustomerBlocked:
|
||||
summary: getCustomerBlocked
|
||||
description: >-
|
||||
@ -669,7 +621,7 @@ paths:
|
||||
suffix: PhD
|
||||
dateOfBirth: "2002-10-29"
|
||||
emailAddresses: TEST@HTM.NL
|
||||
isEmailVerified: True
|
||||
isEmailVerified: false
|
||||
addresses:
|
||||
- addressId: 1
|
||||
street: mystreet
|
||||
@ -758,22 +710,7 @@ paths:
|
||||
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",
|
||||
},
|
||||
}
|
||||
href: https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?offset=20&limit=20
|
||||
400:
|
||||
description: Bad Request
|
||||
content:
|
||||
@ -835,7 +772,7 @@ paths:
|
||||
suffix: jr
|
||||
dateOfBirth: "1970-01-01"
|
||||
emailAddress: j.jansen@hatseflats.nl
|
||||
isEmailVerified: False
|
||||
isEmailVerified: false
|
||||
addresses:
|
||||
- street: Laan van Meerdervoort
|
||||
houseNumber: 5
|
||||
@ -934,7 +871,7 @@ paths:
|
||||
suffix: "jr",
|
||||
dateOfBirth: "1970-01-01",
|
||||
emailAddress: "TEST@TEST1.NL",
|
||||
isEmailVerified: False
|
||||
isEmailVerified: false
|
||||
}
|
||||
updateCompleteEntity:
|
||||
value:
|
||||
@ -946,7 +883,7 @@ paths:
|
||||
suffix: "jr",
|
||||
dateOfBirth: "1970-01-01",
|
||||
emailAddress: "TEST@TEST1.NL",
|
||||
isEmailVerified: True
|
||||
isEmailVerified: false
|
||||
}
|
||||
required: true
|
||||
responses:
|
||||
@ -1303,7 +1240,6 @@ paths:
|
||||
name: externalDeviceId
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: c5545584-04af-4c60-a955-d6a70baab848
|
||||
required: false
|
||||
description: The external id of the device.
|
||||
@ -1439,13 +1375,7 @@ paths:
|
||||
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"
|
||||
$ref: "#/components/schemas/patchDeviceResponse"
|
||||
|
||||
security:
|
||||
- default: []
|
||||
@ -1608,24 +1538,7 @@ paths:
|
||||
"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",
|
||||
},
|
||||
},
|
||||
"href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/ovPayTokens?offset=20&limit=20"
|
||||
}
|
||||
/customers/{customerProfileId}/ovpaytokens:
|
||||
post:
|
||||
@ -1944,9 +1857,10 @@ paths:
|
||||
"created": "2024-10-20T17:05:52.000",
|
||||
},
|
||||
],
|
||||
"href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/billingInformations?offset=20&limit=20"
|
||||
}
|
||||
getBillingInformationSingleSpecificCustomer:
|
||||
summary: Get singel billing information entity for a specific customers
|
||||
summary: Get single billing information entity for a specific customers
|
||||
description: >-
|
||||
Found one billing information matching the search parameters
|
||||
value:
|
||||
@ -2136,59 +2050,7 @@ paths:
|
||||
"updateTimestamp": "2024-03-22T08:55:00",
|
||||
},
|
||||
],
|
||||
"_links":
|
||||
{
|
||||
"self":
|
||||
{
|
||||
"href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates",
|
||||
"method": "GET",
|
||||
},
|
||||
"next":
|
||||
{
|
||||
"href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=20",
|
||||
"method": "GET",
|
||||
},
|
||||
},
|
||||
}
|
||||
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",
|
||||
},
|
||||
},
|
||||
"href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=20&limit=20"
|
||||
}
|
||||
/billingInformation/{billingInformationId}/directdebitmandates:
|
||||
post:
|
||||
@ -2480,7 +2342,6 @@ components:
|
||||
format: uuid
|
||||
externalDeviceId:
|
||||
type: string
|
||||
format: uuid
|
||||
alias:
|
||||
type: string
|
||||
required:
|
||||
@ -2599,7 +2460,6 @@ components:
|
||||
properties:
|
||||
externalDeviceId:
|
||||
type: string
|
||||
format: uuid
|
||||
alias:
|
||||
type: string
|
||||
defaultCustomerProfileResponse:
|
||||
@ -2846,7 +2706,7 @@ components:
|
||||
emailAddress:
|
||||
type: string
|
||||
isEmailVerified:
|
||||
type: string
|
||||
type: boolean
|
||||
postOvPayTokenResponse:
|
||||
type: object
|
||||
properties:
|
||||
@ -2860,6 +2720,14 @@ components:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/getDeviceEntity"
|
||||
patchDeviceResponse:
|
||||
type: object
|
||||
properties:
|
||||
deviceId:
|
||||
type: string
|
||||
format: uuid
|
||||
example: "b2c8a8c6-3d1c-4b6b-8f8d-3a6a1b6a1b6a"
|
||||
|
||||
getDeviceEntity:
|
||||
type: object
|
||||
properties:
|
||||
@ -2870,7 +2738,6 @@ components:
|
||||
type: integer
|
||||
externalDeviceId:
|
||||
type: string
|
||||
format: uuid
|
||||
alias:
|
||||
type: string
|
||||
required:
|
||||
|
||||
1870
src/openapi/customers/customers-trips.yaml
Normal file
1870
src/openapi/customers/customers-trips.yaml
Normal file
File diff suppressed because it is too large
Load Diff
@ -417,38 +417,56 @@ paths:
|
||||
example:
|
||||
Entries:
|
||||
phoneTypes:
|
||||
- name: mobile
|
||||
- name: Mobiel
|
||||
id: 1
|
||||
- name: fixed line
|
||||
- name: Thuis
|
||||
id: 2
|
||||
- name: Ouders
|
||||
id: 3
|
||||
- name: Bewindvoerder
|
||||
id: 4
|
||||
- name: Home
|
||||
id: 5
|
||||
- name: Mobile
|
||||
id: 6
|
||||
- name: Work
|
||||
id: 7
|
||||
- name: Noodtelefoon
|
||||
id: 8
|
||||
addressTypes:
|
||||
- name: home
|
||||
- name: Shipping
|
||||
id: 1
|
||||
- name: office
|
||||
- name: Billing
|
||||
id: 2
|
||||
customerStatuses:
|
||||
- name: active
|
||||
- name: Inactive
|
||||
id: 1
|
||||
- name: blocked
|
||||
- name: Active
|
||||
id: 2
|
||||
- name: inactive
|
||||
- name: Blocked
|
||||
id: 3
|
||||
- name: new
|
||||
- name: Frozen
|
||||
id: 4
|
||||
- name: Cleared
|
||||
id: 5
|
||||
tokenTypes:
|
||||
- name: Debit card
|
||||
- name: EMV
|
||||
id: 1
|
||||
- name: Credit card
|
||||
id: 2
|
||||
- name: OVPas physical
|
||||
id: 3
|
||||
id: 2
|
||||
- name: OVPas digital
|
||||
id: 4
|
||||
id: 3
|
||||
directDebitMandateTypes:
|
||||
- name: Paper Contract
|
||||
id: 1
|
||||
- name: PIN transaction
|
||||
id: 2
|
||||
- name: SEPA eMandate
|
||||
id: 3
|
||||
- name: Digital signature
|
||||
id: 4
|
||||
- name: IDEAL transaction
|
||||
id: 5
|
||||
tokenStatuses:
|
||||
- name: Expired
|
||||
id: 1
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -49,6 +49,8 @@ paths:
|
||||
- status
|
||||
- aggregationReference
|
||||
- accountingSystemReference
|
||||
- createdOn
|
||||
- lastUpdatedOn
|
||||
- name: $select
|
||||
in: query
|
||||
description: Select properties to be returned
|
||||
@ -79,6 +81,8 @@ paths:
|
||||
- status
|
||||
- aggregationReference
|
||||
- accountingSystemReference
|
||||
- createdOn
|
||||
- lastUpdatedOn
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -118,6 +122,8 @@ paths:
|
||||
status: created
|
||||
aggregationReference: null
|
||||
accountingSystemReference: null
|
||||
createdOn: 2024-11-04T00:00:00Z
|
||||
lastUpdatedOn: 2024-11-04T04:00:00Z
|
||||
- "@odata.etag": e671c8a1-b918-4867-bf12-5289822479c3
|
||||
transactionItemRowId: 3232
|
||||
transactionItemId: 1c1fc1c8-57f4-4336-9b43-a974eae5afbf
|
||||
@ -137,6 +143,8 @@ paths:
|
||||
status: failed
|
||||
aggregationReference: null
|
||||
accountingSystemReference: null
|
||||
createdOn: 2024-11-04T00:00:00Z
|
||||
lastUpdatedOn: 2024-11-04T04:00:00Z
|
||||
- "@odata.etag": be2715d4-4eff-4562-9bf3-5c43ad23e2c8
|
||||
transactionItemRowId: 3233
|
||||
transactionItemId: 3f58441e-dc8f-4956-9bc5-c952312476db
|
||||
@ -156,6 +164,8 @@ paths:
|
||||
status: returned to src
|
||||
aggregationReference: FIKO-171f40609e
|
||||
accountingSystemReference: null
|
||||
createdOn: 2024-11-04T00:00:00Z
|
||||
lastUpdatedOn: 2024-11-04T04:00:00Z
|
||||
- "@odata.etag": 52130c4d-e944-4454-a73e-8d55449a4bd1
|
||||
transactionItemRowId: 3234
|
||||
transactionItemId: 4418825f-3f9b-45bc-b662-dc3cd4ce6599
|
||||
@ -175,6 +185,8 @@ paths:
|
||||
status: returned to trx-db
|
||||
aggregationReference: null
|
||||
accountingSystemReference: null
|
||||
createdOn: 2024-11-04T00:00:00Z
|
||||
lastUpdatedOn: 2024-11-04T04:00:00Z
|
||||
- "@odata.etag": 7da305e1-85cd-4250-ad77-8b54b2649cfb
|
||||
transactionItemRowId: 3235
|
||||
transactionItemId: 2ddc1831-cf7b-4a77-8aa1-11aaf8e98d9f
|
||||
@ -194,6 +206,8 @@ paths:
|
||||
status: re-entered
|
||||
aggregationReference: null
|
||||
accountingSystemReference: null
|
||||
createdOn: 2024-11-04T00:00:00Z
|
||||
lastUpdatedOn: 2024-11-04T04:00:00Z
|
||||
- "@odata.etag": c3b17d21-0506-474d-b3d4-7ff654f368b9
|
||||
transactionItemRowId: 3236
|
||||
transactionItemId: 5ab2513d-f334-4cf8-8895-4e7269374a4b
|
||||
@ -213,6 +227,8 @@ paths:
|
||||
status: succeeded
|
||||
aggregationReference: FIKO-6a4fca8cd6
|
||||
accountingSystemReference: U4F-123456
|
||||
createdOn: 2024-11-04T00:00:00Z
|
||||
lastUpdatedOn: 2024-11-04T04:00:00Z
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
@ -434,7 +450,7 @@ paths:
|
||||
summary: Add a processing failure.
|
||||
description: Add a processing failure.
|
||||
tags:
|
||||
- Failures v2.2
|
||||
- Failures v2.3
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
@ -455,6 +471,7 @@ paths:
|
||||
reasonCode: "012"
|
||||
reasonDescription: Transaction date is in the future.
|
||||
resolved: false
|
||||
journalEntryId: 0e53b984-16b2-4ef7-b669-29bcdad2a3ce
|
||||
responses:
|
||||
"201":
|
||||
description: Created
|
||||
@ -472,67 +489,6 @@ paths:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
/transactionitems/{transactionItemId}/transactionaudittrails:
|
||||
parameters:
|
||||
- in: path
|
||||
name: transactionItemId
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 9834b346-d68c-438d-9bd5-6716422c2657
|
||||
required: true
|
||||
description: The id of the transaction item to process.
|
||||
post:
|
||||
summary: Add an audit trail entry.
|
||||
description: Add an audit trail entry.
|
||||
tags:
|
||||
- Audit Trail v2.2
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$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/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.
|
||||
@ -564,6 +520,7 @@ paths:
|
||||
- action
|
||||
- status
|
||||
- correlationId
|
||||
- journalEntryId
|
||||
- name: $select
|
||||
in: query
|
||||
description: Select properties to be returned
|
||||
@ -584,6 +541,7 @@ paths:
|
||||
- action
|
||||
- status
|
||||
- correlationId
|
||||
- journalEntryId
|
||||
- name: $expand
|
||||
in: query
|
||||
description: Expand related entities
|
||||
@ -597,6 +555,7 @@ paths:
|
||||
type: string
|
||||
enum:
|
||||
- TransactionItem
|
||||
- JournalEntry
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -627,6 +586,7 @@ paths:
|
||||
status: created
|
||||
description: Transaction created.
|
||||
correlationId: null
|
||||
journalEntryId: null
|
||||
- "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5
|
||||
transactionAuditTrailRowId: 8219
|
||||
transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f
|
||||
@ -637,6 +597,7 @@ paths:
|
||||
status: created
|
||||
description: Transaction created.
|
||||
correlationId: null
|
||||
journalEntryId: null
|
||||
- "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb
|
||||
transactionAuditTrailRowId: 8220
|
||||
transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6
|
||||
@ -647,6 +608,7 @@ paths:
|
||||
status: return to src
|
||||
description: Transaction retunred to source.
|
||||
correlationId: a3891560-3084-42cb-867c-f289e7cda47d
|
||||
journalEntryId: null
|
||||
- "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc
|
||||
transactionAuditTrailRowId: 8221
|
||||
transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10
|
||||
@ -657,6 +619,7 @@ paths:
|
||||
status: failed
|
||||
description: Validation XYZ failed.
|
||||
correlationId: null
|
||||
journalEntryId: a062f64f-f39e-48e7-9793-efbfa86d2827
|
||||
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`).
|
||||
@ -673,6 +636,7 @@ paths:
|
||||
status: re-entered
|
||||
description: Transaction re-entered.
|
||||
correlationId: null
|
||||
journalEntryId: null
|
||||
- "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5
|
||||
transactionAuditTrailRowId: 8219
|
||||
transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f
|
||||
@ -683,6 +647,7 @@ paths:
|
||||
status: return to src
|
||||
description: Transaction retunred to source.
|
||||
correlationId: a3891560-3084-42cb-867c-f289e7cda47d
|
||||
journalEntryId: null
|
||||
- "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb
|
||||
transactionAuditTrailRowId: 8220
|
||||
transactionAuditTrailId: 1d759985-7f1a-48bd-8dd1-efa30ce26423
|
||||
@ -693,6 +658,7 @@ paths:
|
||||
status: failed
|
||||
description: Validation XYZ failed.
|
||||
correlationId: null
|
||||
journalEntryId: b479507a-a65d-48b5-8476-87c88ba3c560
|
||||
- "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc
|
||||
transactionAuditTrailRowId: 8221
|
||||
transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d
|
||||
@ -703,6 +669,7 @@ paths:
|
||||
status: created
|
||||
description: Transaction created.
|
||||
correlationId: null
|
||||
journalEntryId: 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).
|
||||
@ -719,6 +686,7 @@ paths:
|
||||
status: failed
|
||||
description: Validation XYZ failed.
|
||||
correlationId: null
|
||||
journalEntryId: null
|
||||
- "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5
|
||||
transactionAuditTrailRowId: 8219
|
||||
transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f
|
||||
@ -729,6 +697,7 @@ paths:
|
||||
status: failed
|
||||
description: Validation XYZ failed.
|
||||
correlationId: null
|
||||
journalEntryId: 43a98533-bb01-4aad-8d61-005051125969
|
||||
- "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb
|
||||
transactionAuditTrailRowId: 8220
|
||||
transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6
|
||||
@ -739,6 +708,7 @@ paths:
|
||||
status: failed
|
||||
description: Validation XYZ failed.
|
||||
correlationId: null
|
||||
journalEntryId: null
|
||||
- "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc
|
||||
transactionAuditTrailRowId: 8221
|
||||
transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10
|
||||
@ -749,6 +719,7 @@ paths:
|
||||
status: failed
|
||||
description: Validation XYZ failed.
|
||||
correlationId: null
|
||||
journalEntryId: null
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
@ -786,6 +757,7 @@ paths:
|
||||
- reasonDescription
|
||||
- resolved
|
||||
- change
|
||||
- journalEntryId
|
||||
- name: $select
|
||||
in: query
|
||||
description: Select properties to be returned
|
||||
@ -808,6 +780,7 @@ paths:
|
||||
- reasonDescription
|
||||
- resolved
|
||||
- change
|
||||
- journalEntryId
|
||||
- name: $expand
|
||||
in: query
|
||||
description: Expand related entities
|
||||
@ -821,6 +794,7 @@ paths:
|
||||
type: string
|
||||
enum:
|
||||
- TransactionItem
|
||||
- JournalEntry
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -856,6 +830,7 @@ paths:
|
||||
reasonDescription: Cost type does not exist.
|
||||
resolved: false
|
||||
change: null
|
||||
journalEntryId: null
|
||||
- "@odata.etag": ff49829d-a5de-4c1a-b331-15fd9c71dfe9
|
||||
processingFailureRowId: 10
|
||||
processingFailureId: ccc06dc9-956d-47d8-bde7-9644ddde2193
|
||||
@ -867,6 +842,7 @@ paths:
|
||||
reasonDescription: Cost center does not exist.
|
||||
resolved: true
|
||||
change: Adapt config
|
||||
journalEntryId: null
|
||||
- "@odata.etag": 5d5d3351-d3f1-49b2-905f-4dbbe1cc30e3
|
||||
processingFailureRowId: 11
|
||||
processingFailureId: 96bf8d44-0030-4509-b24e-2d62299779c5
|
||||
@ -878,6 +854,7 @@ paths:
|
||||
reasonDescription: Department does not exist.
|
||||
resolved: true
|
||||
change: Adapt config
|
||||
journalEntryId: null
|
||||
List of unfiltered processing failures:
|
||||
summary: List of unfiltered processing failures
|
||||
description: |
|
||||
@ -897,6 +874,7 @@ paths:
|
||||
reasonDescription: Transaction date is in the future
|
||||
resolved: false
|
||||
change: null
|
||||
journalEntryId: null
|
||||
- "@odata.etag": 584d3a8a-48bc-45f9-99be-8dd70399e6e4
|
||||
processingFailureRowId: 10
|
||||
processingFailureId: 76aa82e1-a10f-4664-a84f-1f30d60884b3
|
||||
@ -908,6 +886,7 @@ paths:
|
||||
reasonDescription: Cost center does not exist.
|
||||
resolved: false
|
||||
change: null
|
||||
journalEntryId: null
|
||||
- "@odata.etag": df4ade9b-1bda-4d91-a5ba-4dbe067568a0
|
||||
processingFailureRowId: 11
|
||||
processingFailureId: 25d2dd6f-ae17-44a7-b7a5-43eaf6de78e1
|
||||
@ -919,6 +898,7 @@ paths:
|
||||
reasonDescription: Department does not exist.
|
||||
resolved: false
|
||||
change: null
|
||||
journalEntryId: null
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
@ -969,6 +949,415 @@ paths:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
/Odata/JournalEntries:
|
||||
get:
|
||||
summary: Find journalEntry.
|
||||
description: Find journalEntry.
|
||||
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:
|
||||
- journalEntryId
|
||||
- aggregationReference
|
||||
- accountingSystemReference
|
||||
- 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:
|
||||
- journalEntryId
|
||||
- aggregationReference
|
||||
- accountingSystemReference
|
||||
- data
|
||||
- response
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/JournalEntryGetResponseBody"
|
||||
examples:
|
||||
List containing all journal entries:
|
||||
summary: List containing all journal entries
|
||||
description: Returns a list containing all journal entries (no filters applied).
|
||||
value:
|
||||
"@odata.context": "$metadata#JournalEntry"
|
||||
value:
|
||||
- "@odata.etag": 8f085711-eeae-44ed-bac1-06779bedb480
|
||||
journalEntryId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb
|
||||
aggregationReference: FIKO-123456
|
||||
accountingSystemReference: null
|
||||
data: {
|
||||
"transaction": {
|
||||
"header": {
|
||||
"key": {
|
||||
"cmpCode": "1HTM",
|
||||
"code": "OPBR-FIKO"
|
||||
},
|
||||
"timeStamp": 0,
|
||||
"inputDate": "2026-07-20T00:00:00Z",
|
||||
"period": "2026/6",
|
||||
"curCode": "EUR",
|
||||
"date": "2026-07-20T00:00:00Z",
|
||||
"originalCompany": "1HTM",
|
||||
"originalCode": "OPBR-FIKO",
|
||||
"completionWorkflow": {
|
||||
"completionStatus": "wfl_no_completion"
|
||||
},
|
||||
"salesInvoiceStatus": "salesinv_notyetinv"
|
||||
},
|
||||
"lines": {
|
||||
"line": [
|
||||
{
|
||||
"number": 1,
|
||||
"accountCode": "100.99999.D150000001",
|
||||
"docValue": 100.00,
|
||||
"lineType": "summary",
|
||||
"lineSense": "debit",
|
||||
"lineOrigin": "dl_orig_defined",
|
||||
"description": "test",
|
||||
"extRef1": "99999991",
|
||||
"extRef2": "99999",
|
||||
"sepaPaymentCategoryPurposeCode": "none",
|
||||
"sepaPaymentPurposeCode": "none"
|
||||
|
||||
},
|
||||
{
|
||||
"number": 2,
|
||||
"accountCode": "642.41236.609311",
|
||||
"docValue": 100.00,
|
||||
"userStatus": "",
|
||||
"lineType": "analysis",
|
||||
"lineSense": "credit",
|
||||
"lineOrigin": "dl_orig_defined",
|
||||
"sepaPaymentCategoryPurposeCode": "none",
|
||||
"sepaPaymentPurposeCode": "none"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
response: {
|
||||
"status": "failed",
|
||||
"message": [
|
||||
{
|
||||
"code": "352",
|
||||
"reason": "Documentregel 1 kan niet geboekt worden."
|
||||
},
|
||||
{
|
||||
"code": "159",
|
||||
"reason": "Element 99999 (niveau 2) is niet toegestaan in linkerlijst van element D150000001 (niveau 3)."
|
||||
}
|
||||
],
|
||||
"hints": [],
|
||||
"paths": [
|
||||
"/InputRequest/PostToBooks/Request/Transaction/Lines/Line[1]/AccountCode"
|
||||
]
|
||||
}
|
||||
- "@odata.etag": 66c033af-fc67-4eb2-9d17-d74a0166470f
|
||||
journalEntryId: 36a34bd8-2b84-4c89-87a4-22e809f6ed4a
|
||||
aggregationReference: FIKO-123457
|
||||
accountingSystemReference: "OPBR-FIKO10000090"
|
||||
data: {
|
||||
"transaction": {
|
||||
"header": {
|
||||
"key": {
|
||||
"cmpCode": "1HTM",
|
||||
"code": "OPBR-FIKO"
|
||||
},
|
||||
"timeStamp": 0,
|
||||
"inputDate": "2026-07-20T00:00:00Z",
|
||||
"period": "2026/6",
|
||||
"curCode": "EUR",
|
||||
"date": "2026-07-20T00:00:00Z",
|
||||
"originalCompany": "1HTM",
|
||||
"originalCode": "OPBR-FIKO",
|
||||
"completionWorkflow": {
|
||||
"completionStatus": "wfl_no_completion"
|
||||
},
|
||||
"salesInvoiceStatus": "salesinv_notyetinv"
|
||||
},
|
||||
"lines": {
|
||||
"line": [
|
||||
{
|
||||
"number": 1,
|
||||
"accountCode": "100.99999.D150000001",
|
||||
"docValue": 100.00,
|
||||
"lineType": "summary",
|
||||
"lineSense": "debit",
|
||||
"lineOrigin": "dl_orig_defined",
|
||||
"description": "test",
|
||||
"extRef1": "99999991",
|
||||
"extRef2": "99999",
|
||||
"sepaPaymentCategoryPurposeCode": "none",
|
||||
"sepaPaymentPurposeCode": "none"
|
||||
|
||||
},
|
||||
{
|
||||
"number": 2,
|
||||
"accountCode": "642.41236.609311",
|
||||
"docValue": 100.00,
|
||||
"userStatus": "",
|
||||
"lineType": "analysis",
|
||||
"lineSense": "credit",
|
||||
"lineOrigin": "dl_orig_defined",
|
||||
"sepaPaymentCategoryPurposeCode": "none",
|
||||
"sepaPaymentPurposeCode": "none"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
response: {
|
||||
"key": {
|
||||
"$type": "finance_transaction_txnKey",
|
||||
"cmpCode": "1HTM",
|
||||
"code": "OPBR-FIKO",
|
||||
"number": " 10000090"
|
||||
},
|
||||
"suppliedNumber": ""
|
||||
}
|
||||
- "@odata.etag": 159f526c-3c88-48a1-93a0-e16430500bef
|
||||
journalEntryId: 6097121f-f300-4c0b-ab8d-0a24685bda92
|
||||
aggregationReference: FIKO-123458
|
||||
accountingSystemReference: null
|
||||
data: {
|
||||
"transaction": {
|
||||
"header": {
|
||||
"key": {
|
||||
"cmpCode": "1HTM",
|
||||
"code": "OPBR-FIKO"
|
||||
},
|
||||
"timeStamp": 0,
|
||||
"inputDate": "2026-07-20T00:00:00Z",
|
||||
"period": "2026/6",
|
||||
"curCode": "EUR",
|
||||
"date": "2026-07-20T00:00:00Z",
|
||||
"originalCompany": "1HTM",
|
||||
"originalCode": "OPBR-FIKO",
|
||||
"completionWorkflow": {
|
||||
"completionStatus": "wfl_no_completion"
|
||||
},
|
||||
"salesInvoiceStatus": "salesinv_notyetinv"
|
||||
},
|
||||
"lines": {
|
||||
"line": [
|
||||
{
|
||||
"number": 1,
|
||||
"accountCode": "100.99999.D150000001",
|
||||
"docValue": 100.00,
|
||||
"lineType": "summary",
|
||||
"lineSense": "debit",
|
||||
"lineOrigin": "dl_orig_defined",
|
||||
"description": "test",
|
||||
"extRef1": "99999991",
|
||||
"extRef2": "99999",
|
||||
"sepaPaymentCategoryPurposeCode": "none",
|
||||
"sepaPaymentPurposeCode": "none"
|
||||
|
||||
},
|
||||
{
|
||||
"number": 2,
|
||||
"accountCode": "642.41236.609311",
|
||||
"docValue": 100.00,
|
||||
"userStatus": "",
|
||||
"lineType": "analysis",
|
||||
"lineSense": "credit",
|
||||
"lineOrigin": "dl_orig_defined",
|
||||
"sepaPaymentCategoryPurposeCode": "none",
|
||||
"sepaPaymentPurposeCode": "none"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
response: null
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
/journalEntries:
|
||||
post:
|
||||
summary: Add a journalEntry.
|
||||
description: Add a journalEntry.
|
||||
tags:
|
||||
- journalEntries v1.0
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/JournalEntryPostRequestBody"
|
||||
examples:
|
||||
Add a new journalEntry:
|
||||
summary: Add a new journalEntry
|
||||
description: In this example we add a new journalEntry.
|
||||
value:
|
||||
aggregationReference: FIKO-123456
|
||||
data: {
|
||||
"transaction": {
|
||||
"header": {
|
||||
"key": {
|
||||
"cmpCode": "1HTM",
|
||||
"code": "OPBR-FIKO"
|
||||
},
|
||||
"timeStamp": 0,
|
||||
"inputDate": "2026-07-20T00:00:00Z",
|
||||
"period": "2026/6",
|
||||
"curCode": "EUR",
|
||||
"date": "2026-07-20T00:00:00Z",
|
||||
"originalCompany": "1HTM",
|
||||
"originalCode": "OPBR-FIKO",
|
||||
"completionWorkflow": {
|
||||
"completionStatus": "wfl_no_completion"
|
||||
},
|
||||
"salesInvoiceStatus": "salesinv_notyetinv"
|
||||
},
|
||||
"lines": {
|
||||
"line": [
|
||||
{
|
||||
"number": 1,
|
||||
"accountCode": "100.99999.D150000001",
|
||||
"docValue": 100.00,
|
||||
"lineType": "summary",
|
||||
"lineSense": "debit",
|
||||
"lineOrigin": "dl_orig_defined",
|
||||
"description": "test",
|
||||
"extRef1": "99999991",
|
||||
"extRef2": "99999",
|
||||
"sepaPaymentCategoryPurposeCode": "none",
|
||||
"sepaPaymentPurposeCode": "none"
|
||||
|
||||
},
|
||||
{
|
||||
"number": 2,
|
||||
"accountCode": "642.41236.609311",
|
||||
"docValue": 100.00,
|
||||
"userStatus": "",
|
||||
"lineType": "analysis",
|
||||
"lineSense": "credit",
|
||||
"lineOrigin": "dl_orig_defined",
|
||||
"sepaPaymentCategoryPurposeCode": "none",
|
||||
"sepaPaymentPurposeCode": "none"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
responses:
|
||||
"201":
|
||||
description: Created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/JournalEntryPostResponseBody"
|
||||
examples:
|
||||
Journalentry created successfully:
|
||||
summary: Journalentry created successfully
|
||||
description: TheJournalentry was successfully added to the database.
|
||||
value:
|
||||
journalEntryId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
/journalEntries/{journalEntryId}:
|
||||
parameters:
|
||||
- in: path
|
||||
name: journalEntryId
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 37a8095b-19db-498f-9349-5f37d21c5bdf
|
||||
required: true
|
||||
description: The id of the journalEntry.
|
||||
patch:
|
||||
summary: Update journalEntry.
|
||||
description: Update journalEntry.
|
||||
tags:
|
||||
- journalEntries v1.0
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/JournalEntryPatchRequestBody"
|
||||
examples:
|
||||
Update an journalEntry after error:
|
||||
summary: Update an journalEntry after error
|
||||
description: Update an journalEntry after error by logging the response
|
||||
value:
|
||||
response: {
|
||||
"status": "failed",
|
||||
"message": [
|
||||
{
|
||||
"code": "352",
|
||||
"reason": "Documentregel 1 kan niet geboekt worden."
|
||||
},
|
||||
{
|
||||
"code": "159",
|
||||
"reason": "Element 99999 (niveau 2) is niet toegestaan in linkerlijst van element D150000001 (niveau 3)."
|
||||
}
|
||||
],
|
||||
"hints": [],
|
||||
"paths": [
|
||||
"/InputRequest/PostToBooks/Request/Transaction/Lines/Line[1]/AccountCode"
|
||||
]
|
||||
}
|
||||
Update an journalEntry after success:
|
||||
summary: Update an journalEntry after succesfull call
|
||||
description: Update an journalEntry after uccesfull call bij logging the response and the accountingSystemReference.
|
||||
value:
|
||||
accountingSystemReference: "OPBR-FIKO10000090"
|
||||
response: {
|
||||
"key": {
|
||||
"$type": "finance_transaction_txnKey",
|
||||
"cmpCode": "1HTM",
|
||||
"code": "OPBR-FIKO",
|
||||
"number": " 10000090"
|
||||
},
|
||||
"suppliedNumber": ""
|
||||
}
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/JournalEntryPatchResponseBody"
|
||||
examples:
|
||||
JournalEntry updated successfully:
|
||||
summary: JournalEntry updated successfully
|
||||
description: The journalEntry was successfully updated in the database.
|
||||
value:
|
||||
journalEntryId: 5bbf5abc-4da5-4bb4-894e-a7f553789a20
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
/Odata/BookingProcess:
|
||||
get:
|
||||
summary: Find booking processes.
|
||||
@ -3316,6 +3705,16 @@ components:
|
||||
- occurredOn
|
||||
- type
|
||||
- status
|
||||
createdOn:
|
||||
type: string
|
||||
nullable: false
|
||||
format: datetime
|
||||
example: "2026-07-20T00:00:00Z"
|
||||
updatedOn:
|
||||
type: string
|
||||
nullable: false
|
||||
format: datetime
|
||||
example: "2026-07-25T00:00:00Z"
|
||||
TransactionItemsBulkRequestBody:
|
||||
type: object
|
||||
properties:
|
||||
@ -3551,6 +3950,11 @@ components:
|
||||
type: string
|
||||
nullable: true
|
||||
example: Adapt config
|
||||
journalEntryId:
|
||||
type: string
|
||||
format: uuid
|
||||
nullable: true
|
||||
example: b51b377d-6c82-4c4f-9ed3-1068ab6e30c9
|
||||
required:
|
||||
- timestamp
|
||||
- element
|
||||
@ -3617,6 +4021,11 @@ components:
|
||||
type: string
|
||||
nullable: true
|
||||
example: Adapt config
|
||||
journalEntryId:
|
||||
type: string
|
||||
format: uuid
|
||||
nullable: true
|
||||
example: b51b377d-6c82-4c4f-9ed3-1068ab6e30c9
|
||||
required:
|
||||
- processingFailureId
|
||||
- transactionItemId
|
||||
@ -3681,6 +4090,11 @@ components:
|
||||
format: uuid
|
||||
nullable: true
|
||||
example: 37a8095b-19db-498f-9349-5f37d21c5bdf
|
||||
journalEntryId:
|
||||
type: string
|
||||
format: uuid
|
||||
nullable: true
|
||||
example: b51b377d-6c82-4c4f-9ed3-1068ab6e30c9
|
||||
required:
|
||||
- user
|
||||
- timestamp
|
||||
@ -3754,6 +4168,11 @@ components:
|
||||
format: uuid
|
||||
nullable: true
|
||||
example: a3891560-3084-42cb-867c-f289e7cda47d
|
||||
journalEntryId:
|
||||
type: string
|
||||
format: uuid
|
||||
nullable: true
|
||||
example: b51b377d-6c82-4c4f-9ed3-1068ab6e30c9
|
||||
required:
|
||||
- transactionAuditTrailId
|
||||
- transactionItemId
|
||||
@ -3761,6 +4180,89 @@ components:
|
||||
- timestamp
|
||||
- action
|
||||
- status
|
||||
JournalEntryGetResponseBody:
|
||||
type: object
|
||||
properties:
|
||||
"@odata.context":
|
||||
type: string
|
||||
example: $metadata#JournalEntry
|
||||
value:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/JournalEntry"
|
||||
JournalEntry:
|
||||
type: object
|
||||
properties:
|
||||
"@odata.etag":
|
||||
type: string
|
||||
example: 333d6b7d-b709-3b89-89e0-bcb3d5fdddfc
|
||||
journalEntryId:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 8871d779-512c-4d4d-9a8a-dee7c635179d
|
||||
aggregationReference:
|
||||
type: string
|
||||
example: FIKO-123456
|
||||
accountingSystemReference:
|
||||
type: string
|
||||
nullable: true
|
||||
example: U4F-123456
|
||||
data:
|
||||
type: object
|
||||
example: {}
|
||||
responses:
|
||||
type: object
|
||||
nullable: true
|
||||
example: {}
|
||||
required:
|
||||
- journalEntryId
|
||||
- aggregationReference
|
||||
- data
|
||||
JournalEntryPostRequestBody:
|
||||
type: object
|
||||
properties:
|
||||
aggregationReference:
|
||||
type: string
|
||||
example: FIKO-123456
|
||||
accountingSystemReference:
|
||||
type: string
|
||||
nullable: true
|
||||
example: U4F-123456
|
||||
data:
|
||||
type: object
|
||||
example: {}
|
||||
responses:
|
||||
type: object
|
||||
nullable: true
|
||||
example: {}
|
||||
required:
|
||||
- aggregationReference
|
||||
- data
|
||||
JournalEntryPostResponseBody:
|
||||
type: object
|
||||
properties:
|
||||
journalEntryId:
|
||||
type: string
|
||||
format: uuid
|
||||
example: c97a8123-8d0e-41ea-9737-35843ebe2385
|
||||
JournalEntryPatchRequestBody:
|
||||
type: object
|
||||
properties:
|
||||
accountingSystemReference:
|
||||
type: string
|
||||
nullable: true
|
||||
example: U4F-123456
|
||||
responses:
|
||||
type: object
|
||||
nullable: true
|
||||
example: {}
|
||||
JournalEntryPatchResponseBody:
|
||||
type: object
|
||||
properties:
|
||||
journalEntryId:
|
||||
type: string
|
||||
format: uuid
|
||||
example: c97a8123-8d0e-41ea-9737-35843ebe2385
|
||||
BookingProcessesGetResponseBody:
|
||||
type: object
|
||||
properties:
|
||||
|
||||
@ -57,12 +57,12 @@ paths:
|
||||
required: false
|
||||
description: The id of the touch point where the order was initiated.
|
||||
- in: query
|
||||
name: deviceId
|
||||
name: externalDeviceId
|
||||
schema:
|
||||
type: string
|
||||
example: "7a28bd54-7ca9-499a-a722-d15ab858ab99"
|
||||
required: false
|
||||
description: The id of the device used to place the order.
|
||||
description: The external id of the device used to place the order.
|
||||
- in: query
|
||||
name: languageId
|
||||
schema:
|
||||
@ -111,14 +111,6 @@ paths:
|
||||
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: issuedVoucherId
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: "b0a9f3c9-9b92-4f8c-b78d-6129be7218a6"
|
||||
required: false
|
||||
description: Filter on applied issuedVoucherId for the order.
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -140,7 +132,7 @@ paths:
|
||||
"touchPointId": 1,
|
||||
"name": "Perplex"
|
||||
},
|
||||
"deviceId": "42e77532-d831-41da-b07a-7edb9bb7f004",
|
||||
"externalDeviceId": "42e77532-d831-41da-b07a-7edb9bb7f004",
|
||||
"language":
|
||||
{
|
||||
"languageId": 1,
|
||||
@ -170,46 +162,24 @@ paths:
|
||||
"description": "Betaling in behandeling",
|
||||
},
|
||||
],
|
||||
"order_OrderVouchers": [
|
||||
"orderVouchers": [
|
||||
{
|
||||
"order_OrderVoucherId": "399bd3b3-9721-4f09-a936-d64637de1621",
|
||||
"orderVoucherId": "399bd3b3-9721-4f09-a936-d64637de1621",
|
||||
"issuedVoucher":{
|
||||
"issuedVoucherId": "a0996218-bc5e-4826-9020-cda98a32838d",
|
||||
"voucherCode": "Voucher1234",
|
||||
"voucherStatusInstances":
|
||||
[
|
||||
{
|
||||
"voucherStatus":
|
||||
{
|
||||
"voucherStatusId": 2,
|
||||
"name": "issued"
|
||||
},
|
||||
"createdOn": "2025-11-22T13:00:00"
|
||||
}
|
||||
],
|
||||
"productId": 31,
|
||||
"purchasedProductId": 31,
|
||||
"fromInclusive": "2025-03-22T08:55:00",
|
||||
"untillInclusive": "2026-03-22T08:55:00"
|
||||
},
|
||||
"orderLineId": null
|
||||
},
|
||||
{
|
||||
"order_OrderVoucherId": "f6c7ac42-1811-4e4d-82af-53e18fe16110",
|
||||
"orderVoucherId": "f6c7ac42-1811-4e4d-82af-53e18fe16110",
|
||||
"issuedVoucher":{
|
||||
"issuedVoucherId": "54668baf-4905-4e9a-af02-09c170f295ed",
|
||||
"voucherCode": "Voucher124",
|
||||
"voucherStatusInstances":
|
||||
[
|
||||
{
|
||||
"voucherStatus":
|
||||
{
|
||||
"voucherStatusId": 2,
|
||||
"name": "issued"
|
||||
},
|
||||
"createdOn": "2025-11-22T13:00:00"
|
||||
}
|
||||
],
|
||||
"productId": 35,
|
||||
"purchasedProductId": 35,
|
||||
"fromInclusive": "2025-03-22T08:55:00",
|
||||
"untillInclusive": "2026-03-22T08:55:00"
|
||||
},
|
||||
@ -345,7 +315,7 @@ paths:
|
||||
{
|
||||
"orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
|
||||
"addressType":
|
||||
{ "addressTypeId": 3, "name": "Billing" },
|
||||
{ "addressTypeId": 2, "name": "Billing" },
|
||||
"street": "Kon. Julianaplein",
|
||||
"houseNumber": 10,
|
||||
"houseNumberSuffix": "a",
|
||||
@ -395,7 +365,7 @@ paths:
|
||||
"customerProfileId": 1337,
|
||||
"totalAmount": 121,
|
||||
"touchPointId": 1,
|
||||
"deviceId": "b8ca9fdf-0bb9-4e49-b48d-41e395563377",
|
||||
"externalDeviceId": "b8ca9fdf-0bb9-4e49-b48d-41e395563377",
|
||||
"languageId": 1,
|
||||
"createdOn": "2024-03-22T09:00:00",
|
||||
"order_OrderStatus":
|
||||
@ -406,7 +376,7 @@ paths:
|
||||
"description": "Concept order",
|
||||
},
|
||||
],
|
||||
"order_OrderVouchers":
|
||||
"orderVouchers":
|
||||
[
|
||||
{
|
||||
"issuedVoucherId": "e81b2197-a6c2-45b6-9560-8ce8442e8604",
|
||||
@ -507,7 +477,7 @@ paths:
|
||||
"touchPointId": 1,
|
||||
"name": "Perplex"
|
||||
},
|
||||
"deviceId": null,
|
||||
"externalDeviceId": null,
|
||||
"language":
|
||||
{
|
||||
"languageId": 1,
|
||||
@ -533,7 +503,7 @@ paths:
|
||||
"description": "Betaling in behandeling",
|
||||
},
|
||||
],
|
||||
"order_OrderVouchers": null,
|
||||
"orderVouchers": null,
|
||||
"orderLines":
|
||||
[
|
||||
{
|
||||
@ -656,7 +626,7 @@ paths:
|
||||
{
|
||||
"orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
|
||||
"addressType":
|
||||
{ "addressTypeId": 3, "name": "Billing" },
|
||||
{ "addressTypeId": 2, "name": "Billing" },
|
||||
"street": "Kon. Julianaplein",
|
||||
"houseNumber": 10,
|
||||
"houseNumberSuffix": "a",
|
||||
@ -680,7 +650,7 @@ paths:
|
||||
example:
|
||||
{
|
||||
"customerProfileId": 1337,
|
||||
"deviceId": "fe68e624-b75f-48ca-a179-d5f86a8ab7d5",
|
||||
"externalDeviceId": "fe68e624-b75f-48ca-a179-d5f86a8ab7d5",
|
||||
"totalAmount": 121,
|
||||
"languageId": 1,
|
||||
"lastUpdatedOn": "2024-03-22T09:00:00",
|
||||
@ -773,12 +743,12 @@ paths:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
example:
|
||||
{
|
||||
"order_orderVoucherId": "b9cf0096-4211-4be6-ac21-7bc34bc8e066",
|
||||
"orderVoucherId": "b9cf0096-4211-4be6-ac21-7bc34bc8e066",
|
||||
}
|
||||
/ordervouchers:
|
||||
parameters:
|
||||
- in: query
|
||||
name: order_OrderVoucherId
|
||||
name: orderVoucherId
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
@ -799,6 +769,13 @@ paths:
|
||||
example: 9e3363c8-e776-4675-b108-99b8c2e38eb6
|
||||
required: false
|
||||
description: The id of the orderLine
|
||||
- in: query
|
||||
name: issuedVoucherId
|
||||
schema:
|
||||
type: string
|
||||
example: 9e3363c8-e776-4675-b108-99b8c2e38eb6
|
||||
required: false
|
||||
description: The id of the issuedVoucher
|
||||
get:
|
||||
summary: Find vouchers on the order
|
||||
description: Find vouchers on the order
|
||||
@ -814,15 +791,22 @@ paths:
|
||||
example:
|
||||
[
|
||||
{
|
||||
"order_OrderVoucherId": "19ef6882-8eda-43bf-b48e-9b4ff8745a50",
|
||||
"orderVoucherId": "19ef6882-8eda-43bf-b48e-9b4ff8745a50",
|
||||
"issuedVoucher":{
|
||||
"issuedVoucherId": "54668baf-4905-4e9a-af02-09c170f295ed",
|
||||
"voucherCode": "Voucher124",
|
||||
"purchasedProductId": 35,
|
||||
"fromInclusive": "2025-03-22T08:55:00",
|
||||
"untillInclusive": "2026-03-22T08:55:00"
|
||||
},
|
||||
"orderId": "f59e4769-53a0-4156-8991-6f9119ba629f",
|
||||
"orderLineId": "eeb86071-4f59-405d-b2be-7d7a77044bfa"
|
||||
}
|
||||
]
|
||||
/ordervouchers/{order_ordervoucherId}:
|
||||
/ordervouchers/{ordervoucherId}:
|
||||
parameters:
|
||||
- in: path
|
||||
name: order_ordervoucherId
|
||||
name: ordervoucherId
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
@ -853,7 +837,7 @@ paths:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
example:
|
||||
{
|
||||
"order_orderVoucherId": "b9cf0096-4211-4be6-ac21-7bc34bc8e066",
|
||||
"orderVoucherId": "b9cf0096-4211-4be6-ac21-7bc34bc8e066",
|
||||
}
|
||||
delete:
|
||||
summary: Delete an order voucher.
|
||||
@ -974,7 +958,7 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
example:
|
||||
examples:
|
||||
Minimum orderline requestBody:
|
||||
value:
|
||||
{
|
||||
@ -1060,7 +1044,7 @@ paths:
|
||||
"orderCustomerAddresses":
|
||||
[
|
||||
{
|
||||
"addressTypeId": 3,
|
||||
"addressTypeId": 2,
|
||||
"street": "Kon. Julianaplein",
|
||||
"houseNumber": 10,
|
||||
"houseNumberSuffix": "a",
|
||||
@ -1998,7 +1982,6 @@ paths:
|
||||
"touchPointId": 1,
|
||||
"name": "Perplex"
|
||||
},
|
||||
"deviceId": null,
|
||||
"isRefund": false,
|
||||
"htmPaymentReference": "HTM-1234",
|
||||
"pspPaymentReference": "Buckaroo-1234",
|
||||
@ -2342,7 +2325,7 @@ paths:
|
||||
{
|
||||
"orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
|
||||
"addressType":
|
||||
{ "addressTypeId": 3, "name": "Billing" },
|
||||
{ "addressTypeId": 2, "name": "Billing" },
|
||||
"street": "Kon. Julianaplein",
|
||||
"houseNumber": 10,
|
||||
"houseNumberSuffix": "a",
|
||||
@ -2412,7 +2395,7 @@ paths:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
example:
|
||||
{
|
||||
"addressTypeId": 3,
|
||||
"addressTypeId": 2,
|
||||
"street": "Kon. Julianaplein",
|
||||
"houseNumber": 10,
|
||||
"houseNumberSuffix": "a",
|
||||
@ -2462,7 +2445,7 @@ paths:
|
||||
type: integer
|
||||
explode: false
|
||||
required: false
|
||||
description: Filter on possible types of addresses. 1 = Shipping, 3 = Billing.
|
||||
description: Filter on possible types of addresses. 1 = Shipping, 2 = Billing.
|
||||
- in: query
|
||||
name: street
|
||||
schema:
|
||||
@ -2518,7 +2501,7 @@ paths:
|
||||
"orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893",
|
||||
"orderCustomerId": "540d8b7a-d626-443f-8f99-c24398604d7a",
|
||||
"orderId": "73cca95a-81d1-468f-a8bf-99b36367001a",
|
||||
"addressType": { "addressTypeId": 3, "name": "Billing" },
|
||||
"addressType": { "addressTypeId": 2, "name": "Billing" },
|
||||
"street": "Kon. Julianaplein",
|
||||
"houseNumber": 10,
|
||||
"houseNumberSuffix": "a",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -313,6 +313,7 @@ paths:
|
||||
{
|
||||
"productId": 24,
|
||||
"parentProductId": null,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "30901",
|
||||
@ -429,6 +430,7 @@ paths:
|
||||
{
|
||||
"productId": 126,
|
||||
"parentProductId": null,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 1,
|
||||
"choiceKey": "isRenewable",
|
||||
@ -537,6 +539,7 @@ paths:
|
||||
{
|
||||
"productId": 119,
|
||||
"parentProductId": 126,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "30001",
|
||||
@ -652,6 +655,7 @@ paths:
|
||||
{
|
||||
"productId": 120,
|
||||
"parentProductId": 126,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "30001",
|
||||
@ -779,6 +783,7 @@ paths:
|
||||
{
|
||||
"productId": 49,
|
||||
"parentProductId": null,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 2,
|
||||
"choiceKey": "regio",
|
||||
@ -926,6 +931,7 @@ paths:
|
||||
{
|
||||
"productId": 109,
|
||||
"parentProductId": 49,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 3,
|
||||
"choiceKey": "allowedGboAgeProfiles",
|
||||
@ -1076,6 +1082,7 @@ paths:
|
||||
{
|
||||
"productId": 114,
|
||||
"parentProductId": 109,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 1,
|
||||
"choiceKey": "isRenewable",
|
||||
@ -1226,6 +1233,7 @@ paths:
|
||||
{
|
||||
"productId": 115,
|
||||
"parentProductId": 109,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 1,
|
||||
"choiceKey": "isRenewable",
|
||||
@ -1377,6 +1385,7 @@ paths:
|
||||
{
|
||||
"productId": 116,
|
||||
"parentProductId": 115,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "33615",
|
||||
@ -1526,6 +1535,7 @@ paths:
|
||||
{
|
||||
"productId": 117,
|
||||
"parentProductId": 115,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "33615",
|
||||
@ -1679,6 +1689,7 @@ paths:
|
||||
{
|
||||
"productId": 112,
|
||||
"parentProductId": 49,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 3,
|
||||
"choiceKey": "allowedGboAgeProfiles",
|
||||
@ -2150,6 +2161,10 @@ components:
|
||||
parentProductId:
|
||||
type: integer
|
||||
example: 1
|
||||
needsVoucher:
|
||||
type: boolean
|
||||
description: Indicates if the product needs a voucher (with this productId as requiredProductId) to be bought - if false, this is optional, but still allowed
|
||||
example: false
|
||||
layerInfo:
|
||||
$ref: '#/components/schemas/LayerInfoResponse'
|
||||
fikoArticleNumber:
|
||||
|
||||
@ -313,6 +313,7 @@ paths:
|
||||
{
|
||||
"productId": 24,
|
||||
"parentProductId": null,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "30901",
|
||||
@ -429,6 +430,7 @@ paths:
|
||||
{
|
||||
"productId": 126,
|
||||
"parentProductId": null,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 1,
|
||||
"choiceKey": "isRenewable",
|
||||
@ -537,6 +539,7 @@ paths:
|
||||
{
|
||||
"productId": 119,
|
||||
"parentProductId": 126,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "30001",
|
||||
@ -652,6 +655,7 @@ paths:
|
||||
{
|
||||
"productId": 120,
|
||||
"parentProductId": 126,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "30001",
|
||||
@ -779,6 +783,7 @@ paths:
|
||||
{
|
||||
"productId": 49,
|
||||
"parentProductId": null,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 2,
|
||||
"choiceKey": "regio",
|
||||
@ -926,6 +931,7 @@ paths:
|
||||
{
|
||||
"productId": 109,
|
||||
"parentProductId": 49,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 3,
|
||||
"choiceKey": "allowedGboAgeProfiles",
|
||||
@ -1076,6 +1082,7 @@ paths:
|
||||
{
|
||||
"productId": 114,
|
||||
"parentProductId": 109,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 1,
|
||||
"choiceKey": "isRenewable",
|
||||
@ -1226,6 +1233,7 @@ paths:
|
||||
{
|
||||
"productId": 115,
|
||||
"parentProductId": 109,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 1,
|
||||
"choiceKey": "isRenewable",
|
||||
@ -1377,6 +1385,7 @@ paths:
|
||||
{
|
||||
"productId": 116,
|
||||
"parentProductId": 115,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "33615",
|
||||
@ -1526,6 +1535,7 @@ paths:
|
||||
{
|
||||
"productId": 117,
|
||||
"parentProductId": 115,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": null,
|
||||
"fikoArticleNumber": "1234",
|
||||
"gboPackageTemplateId": "33615",
|
||||
@ -1679,6 +1689,7 @@ paths:
|
||||
{
|
||||
"productId": 112,
|
||||
"parentProductId": 49,
|
||||
"needsVoucher": false,
|
||||
"layerInfo": {
|
||||
"layerInfoId": 3,
|
||||
"choiceKey": "allowedGboAgeProfiles",
|
||||
@ -2150,6 +2161,10 @@ components:
|
||||
parentProductId:
|
||||
type: integer
|
||||
example: 1
|
||||
needsVoucher:
|
||||
type: boolean
|
||||
description: Indicates if the product needs a voucher (with this productId as requiredProductId) to be bought - if false, this is optional, but still allowed
|
||||
example: false
|
||||
layerInfo:
|
||||
$ref: '#/components/schemas/LayerInfoResponse'
|
||||
fikoArticleNumber:
|
||||
|
||||
400
src/openapi/products/SE-vouchers-TP.yaml
Normal file
400
src/openapi/products/SE-vouchers-TP.yaml
Normal file
@ -0,0 +1,400 @@
|
||||
openapi: 3.0.1
|
||||
info:
|
||||
title: Service Engine APIs for HTM voucher for sales Touchpoint
|
||||
description: Service Engine APIs for HTM vouchers. These are NOT the CRUD APIs to the data hub. These ARE the APIs for sales touchpoints.
|
||||
version: "1.0"
|
||||
servers:
|
||||
- url: https://services.acc.api.htm.nl/abt/abtvouchersTouchpoint/1.0
|
||||
paths:
|
||||
/issuedvouchers/{voucherCode}:
|
||||
get:
|
||||
summary: Get details of a voucher, that was issued for a specific touchpoint
|
||||
description:
|
||||
Get details of an issued voucher for a specific touchpoint. This means that only products that the calling touchpoint is allowed to see or sell
|
||||
(i.e. has active sellingPeriods for touchPointId of the calling touchpoint) are returned.
|
||||
parameters:
|
||||
- name: voucherCode
|
||||
in: path
|
||||
required: true
|
||||
description: The unique code of the issued voucher to retrieve.
|
||||
schema:
|
||||
type: string
|
||||
example: VOUCHER123
|
||||
tags:
|
||||
- Vouchers
|
||||
responses:
|
||||
"200":
|
||||
description: Successful retrieval of voucher instance
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/salesTouchpointIssuedVoucherResponse"
|
||||
examples:
|
||||
Voucher that grants a voucher-only product for free:
|
||||
summary: Voucher that grants a voucher-only product for free
|
||||
description: |-
|
||||
Voucher that grants a product (that can only be acquired via a voucher) for free.
|
||||
In this case, the voucher has an amountInclTax of 0. If the requiredProduct has a
|
||||
non-zero sellingPrice (amountInclTax), the difference between sellingPrice and
|
||||
voucher amountInclTax represents the granted discount. If the requiredProduct has
|
||||
a sellingPrice of 0, no "discount" is shown; just the voucher's amountInclTax.
|
||||
value:
|
||||
{
|
||||
"issuedVoucherId": "d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90",
|
||||
"voucherCode": "HTM-A7J-128-PYT",
|
||||
"fromInclusive": "2024-10-04T00:00:00.000",
|
||||
"untilInclusive": "2024-11-04T00:00:00.000",
|
||||
"voucherStatus": { "voucherStatusId": 2, "name": "issued" },
|
||||
"product":
|
||||
{
|
||||
"productId": 263,
|
||||
"productName": "Voucher Ooievaarspas-product AOW",
|
||||
"productDescription": "Voucher voor AOW-ers in Den Haag met een Ooievaarspas, die ingewisseld kan worden voor het product \"Ooievaarspas voor AOW-ers in Den Haag\"",
|
||||
"amountInclTax": 0,
|
||||
"requiredProducts":
|
||||
[
|
||||
{
|
||||
"productId": 982,
|
||||
"productName": "Ooievaarspas voor AOW-ers in Den Haag",
|
||||
"productDescription": "Vrij reizen bij HTM voor Haagse AOW-gerechtigden met een Ooievaarspas.",
|
||||
"productCategory":
|
||||
{
|
||||
"productCategoryId": 2,
|
||||
"isTravelProduct": true,
|
||||
"name": "Afgekocht reisrecht",
|
||||
},
|
||||
"amountInclTax": 0,
|
||||
"_links":
|
||||
{
|
||||
"get_details":
|
||||
{
|
||||
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/982",
|
||||
"method": "GET",
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
},
|
||||
"mandatoryCustomerDataItems":
|
||||
[
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 8,
|
||||
"customerDataItem": "padBirthDate"
|
||||
}
|
||||
]
|
||||
}
|
||||
Voucher that grants a hybrid product for a reduced price:
|
||||
summary: Voucher that grants a hybrid product for a reduced price
|
||||
description: |-
|
||||
Voucher that grants a hybrid product (that can be acquired via voucher or via ordinary order flow)
|
||||
for a reduced price. In this case, the voucher has an amountInclTax > 0, which dictates the (modified)
|
||||
total amount that needs to be paid for said product. If the requiredProduct has a
|
||||
non-zero sellingPrice (amountInclTax), the difference between sellingPrice and
|
||||
voucher amountInclTax represents the granted discount. If the requiredProduct has
|
||||
a sellingPrice of 0, no "discount" is shown; just the voucher's amountInclTax./
|
||||
Specifically, in this example, the product "HTM 20% Korting" can be purchased for 1 euro instead of 5 euro.
|
||||
value:
|
||||
{
|
||||
"issuedVoucherId": "d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90",
|
||||
"voucherCode": "HTM-A7J-128-PYT",
|
||||
"fromInclusive": "2024-10-04T00:00:00.000",
|
||||
"untilInclusive": "2024-11-04T00:00:00.000",
|
||||
"voucherStatus": { "voucherStatusId": 2, "name": "issued" },
|
||||
"product":
|
||||
{
|
||||
"productId": 264,
|
||||
"productName": "Kortingsvoucher HTM 20% Korting ",
|
||||
"productDescription": "Voucher waarmee het product \"HTM 20% Korting\" voor een lagere prijs kan worden aangeschaft.",
|
||||
"amountInclTax": 100,
|
||||
"requiredProducts":
|
||||
[
|
||||
{
|
||||
"productId": 984,
|
||||
"productName": "HTM 20% Korting",
|
||||
"productDescription": "Reis met 20% korting op je betaalpas bij HTM.",
|
||||
"productCategory":
|
||||
{
|
||||
"productCategoryId": 1,
|
||||
"isTravelProduct": true,
|
||||
"name": "Kortingsabonnement",
|
||||
},
|
||||
"amountInclTax": 500,
|
||||
"_links":
|
||||
{
|
||||
"get_details":
|
||||
{
|
||||
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/products/984",
|
||||
"method": "GET",
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
},
|
||||
"mandatoryCustomerDataItems": []
|
||||
}
|
||||
Voucher that grants a discount for a whole order:
|
||||
summary: Voucher that grants a discount for a whole order
|
||||
description: |-
|
||||
Voucher that grants a discount for a whole order. In this case, no requiredProduct is specified, and
|
||||
the voucher has an amountInclTax < 0. The (negative) amountInclTax dictates the value of the voucher,
|
||||
that is subtracted from the total order value as a discount (with a minimum order total of 0).
|
||||
value:
|
||||
{
|
||||
"issuedVoucherId": "d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90",
|
||||
"voucherCode": "HTM-A7J-128-PYT",
|
||||
"fromInclusive": "2024-10-04T00:00:00.000",
|
||||
"untilInclusive": "2024-11-04T00:00:00.000",
|
||||
"voucherStatus": { "voucherStatusId": 2, "name": "issued" },
|
||||
"product":
|
||||
{
|
||||
"productId": 265,
|
||||
"productName": "Voucher 10 euro korting",
|
||||
"productDescription": "Voucher die 10 euro korting geeft op je gehele winkelmand.",
|
||||
"amountInclTax": -1000,
|
||||
"requiredProducts": []
|
||||
},
|
||||
"mandatoryCustomerDataItems": []
|
||||
}
|
||||
"403":
|
||||
description: Forbidden
|
||||
content:
|
||||
application/problem+json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/rfc9457"
|
||||
examples:
|
||||
Access denied due to insufficient permissions:
|
||||
summary: Access denied due to insufficient permissions
|
||||
value:
|
||||
{
|
||||
"type": "https://example.com/probs/forbidden",
|
||||
"title": "Access denied",
|
||||
"detail": "You do not have permission to access this resource.",
|
||||
"instance": "/issuedvouchers",
|
||||
}
|
||||
"400":
|
||||
description: Bad request
|
||||
content:
|
||||
application/problem+json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/rfc9457"
|
||||
examples:
|
||||
Invalid voucher code:
|
||||
summary: Invalid voucher code
|
||||
value:
|
||||
{
|
||||
"type": "https://example.com/probs/bad-request",
|
||||
"title": "Invalid voucher code",
|
||||
"detail": "No valid voucher found for code VOUCHER123.",
|
||||
"instance": "/issuedvouchers",
|
||||
}
|
||||
"500":
|
||||
description: Internal server error
|
||||
content:
|
||||
application/problem+json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/rfc9457"
|
||||
examples:
|
||||
Unexpected server error:
|
||||
summary: Unexpected server error
|
||||
value:
|
||||
{
|
||||
"type": "https://example.com/probs/internal-server-error",
|
||||
"title": "Internal Server Error",
|
||||
"detail": "An unexpected error occurred while processing your request.",
|
||||
"instance": "/issuedvouchers",
|
||||
}
|
||||
components:
|
||||
securitySchemes:
|
||||
bearerToken:
|
||||
type: http
|
||||
scheme: bearer
|
||||
bearerFormat: JWT
|
||||
schemas:
|
||||
salesTouchpointIssuedVoucherResponse:
|
||||
type: object
|
||||
required:
|
||||
- issuedVoucherId
|
||||
- voucherCode
|
||||
- fromInclusive
|
||||
- untilInclusive
|
||||
- voucherStatus
|
||||
- product
|
||||
- mandatoryCustomerDataItems
|
||||
properties:
|
||||
issuedVoucherId:
|
||||
type: string
|
||||
description: The unique (technical) identifier of the issued voucher instance.
|
||||
example: "d4e5f6a7-b8c9-0d1e-2f3a-4b5c6d7e8f90"
|
||||
voucherCode:
|
||||
type: string
|
||||
description: The voucher code that is shared with the customer and uniquely identifies this voucher.
|
||||
example: "HTM-A7J-128-PYT"
|
||||
fromInclusive:
|
||||
type: string
|
||||
format: date-time-offset
|
||||
description: |-
|
||||
The date and time the voucher becomes valid for redemption. This has nothing to do with
|
||||
the allowed start date of a requiredProduct (for this, the existing order flow logic is applied).
|
||||
example: "2024-10-04T00:00:00.000+02:00"
|
||||
untilInclusive:
|
||||
type: string
|
||||
format: date-time-offset
|
||||
description: |-
|
||||
The date and time the voucher becomes invalid for redemption. This has nothing to do with
|
||||
the maximum allowed start date of a requiredProduct (for this, the existing order flow logic is applied).
|
||||
example: "2024-11-04T00:00:00.000+01:00"
|
||||
voucherStatus:
|
||||
type: object
|
||||
required:
|
||||
- voucherStatusId
|
||||
- name
|
||||
description: |-
|
||||
The current status of the voucher. Can be any of the following:
|
||||
- 1 = new
|
||||
- 2 = issued
|
||||
- 3 = redeemed
|
||||
- 4 = revoked
|
||||
- 5 = expired
|
||||
- 6 = pendingRedemption
|
||||
properties:
|
||||
voucherStatusId:
|
||||
type: integer
|
||||
example: 2
|
||||
name:
|
||||
type: string
|
||||
example: "issued"
|
||||
product:
|
||||
type: object
|
||||
description: The "product" referencing the voucher definition that this voucher instance is based on
|
||||
required:
|
||||
- productId
|
||||
- productName
|
||||
- productDescription
|
||||
- amountInclTax
|
||||
properties:
|
||||
productId:
|
||||
type: integer
|
||||
example: 263
|
||||
productName:
|
||||
type: string
|
||||
example: Voucher Ooievaarspas-product AOW
|
||||
productDescription:
|
||||
type: string
|
||||
example: |-
|
||||
Voucher voor AOW-ers in Den Haag met een Ooievaarspas, die ingewisseld kan worden
|
||||
voor het product "Ooievaarspas voor AOW-ers in Den Haag".
|
||||
amountInclTax:
|
||||
type: integer
|
||||
description: |-
|
||||
When combined with a requiredProduct, the (positive or zero) amountInclTax dictates
|
||||
the (modified) total amount that needs to be paid for said product. When the requiredProduct
|
||||
has a sellingPrice > 0, the difference between sellingPrice and voucher amountInclTax
|
||||
represents the granted discount.
|
||||
When not combined with a required product, the (negative) amountInclTax dictates
|
||||
the value of the voucher, that is subtracted from the total order value as a discount
|
||||
(with a minimum order total of 0).
|
||||
example: 0
|
||||
requiredProducts:
|
||||
type: array
|
||||
description: |-
|
||||
Currently, only one requiredProduct is supported and thus, this array can contain at
|
||||
most one element.
|
||||
items:
|
||||
type: object
|
||||
required:
|
||||
- productId
|
||||
properties:
|
||||
productId:
|
||||
type: integer
|
||||
example: 892
|
||||
productName:
|
||||
type: string
|
||||
example: "Ooievaarspas voor AOW-ers in Den Haag"
|
||||
productDescription:
|
||||
type: string
|
||||
example: "Vrij reizen bij HTM voor Haagse AOW-gerechtigden met een Ooievaarspas."
|
||||
productCategory:
|
||||
type: object
|
||||
required:
|
||||
- productCategoryId
|
||||
- isTravelProduct
|
||||
- name
|
||||
properties:
|
||||
productCategoryId:
|
||||
type: integer
|
||||
example: 2
|
||||
isTravelProduct:
|
||||
type: boolean
|
||||
example: true
|
||||
name:
|
||||
type: string
|
||||
example: "Afgekocht reisrecht"
|
||||
amountInclTax:
|
||||
type: integer
|
||||
description: |-
|
||||
Selling price of the product in cents (including tax, if applicable) that is
|
||||
currently active for the calling touchpoint. When 0, the product is free of charge.
|
||||
example: 0
|
||||
imageReference:
|
||||
type: string
|
||||
description: Can be a URL or a base64 encoded image
|
||||
example: https://www.htm.nl/nog-onbekende-productafbeelding
|
||||
_links:
|
||||
type: object
|
||||
properties:
|
||||
get_details:
|
||||
type: object
|
||||
description: Link to get more details for the product that this voucher instance applies to
|
||||
properties:
|
||||
href:
|
||||
type: string
|
||||
example: https://api.integratielaag.nl/abt/touchpoint/1.0/products/982
|
||||
method:
|
||||
type: string
|
||||
example: GET
|
||||
mandatoryCustomerDataItems:
|
||||
type: array
|
||||
description: |-
|
||||
List of mandatory customer data items that are required to redeem this voucher.\
|
||||
The values provided for these data items may be checked against allowed values as provided by the voucher issuer.
|
||||
items:
|
||||
type: object
|
||||
required:
|
||||
- mandatoryCustomerDataItemId
|
||||
- customerDataItem
|
||||
properties:
|
||||
mandatoryCustomerDataItemId:
|
||||
type: integer
|
||||
example: 8
|
||||
customerDataItem:
|
||||
type: string
|
||||
example: padBirthdate
|
||||
|
||||
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
|
||||
1430
src/openapi/products/SE-vouchers-supplier.yaml
Normal file
1430
src/openapi/products/SE-vouchers-supplier.yaml
Normal file
File diff suppressed because it is too large
Load Diff
@ -1553,6 +1553,9 @@ components:
|
||||
- productCategoryId: 8
|
||||
name: Saldo
|
||||
isTravelProduct: true
|
||||
- productCategoryId: 9
|
||||
name: Voucher
|
||||
isTravelProduct: false
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/productCategoryGetEntity'
|
||||
@ -1811,7 +1814,7 @@ components:
|
||||
- mandatoryCustomerDataItemId: 5
|
||||
customerDataItem: address
|
||||
- mandatoryCustomerDataItemId: 6
|
||||
customerDataItem: phone
|
||||
customerDataItem: voucher
|
||||
- mandatoryCustomerDataItemId: 7
|
||||
customerDataItem: ovPayToken
|
||||
- mandatoryCustomerDataItemId: 8
|
||||
@ -1820,6 +1823,8 @@ components:
|
||||
customerDataItem: shippingAddress
|
||||
- mandatoryCustomerDataItemId: 10
|
||||
customerDataItem: billingAddress
|
||||
- mandatoryCustomerDataItemId: 11
|
||||
customerDataItem: startDate
|
||||
items:
|
||||
$ref: '#/components/schemas/mandatoryCustomerDataItemGetEntity'
|
||||
type: array
|
||||
|
||||
@ -46,6 +46,13 @@ paths:
|
||||
when false, return only non-archived products (isArchived = false).
|
||||
schema:
|
||||
type: boolean
|
||||
- name: onlyVouchers
|
||||
in: query
|
||||
required: false
|
||||
description: |-
|
||||
When omitted, defaults to false (i.e. return all normal products that are NOT voucher definitions); when true, return only voucher definitions
|
||||
schema:
|
||||
type: boolean
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
@ -387,6 +394,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": false,
|
||||
"gboPackageTemplateId": "30901",
|
||||
"productName": "HTM pilot 90% korting",
|
||||
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
||||
@ -474,6 +482,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": false,
|
||||
"gboPackageTemplateId": "30901",
|
||||
"productName": "HTM pilot 90% korting",
|
||||
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
||||
@ -560,6 +569,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": false,
|
||||
"gboPackageTemplateId": "30901",
|
||||
"productName": "HTM pilot 90% korting",
|
||||
"productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!",
|
||||
@ -680,6 +690,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": 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.",
|
||||
@ -866,6 +877,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": false,
|
||||
"gboPackageTemplateId": "30901",
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "HTM pilot 90% korting",
|
||||
@ -1028,6 +1040,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": false,
|
||||
"gboPackageTemplateId": "30901",
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "HTM pilot 90% korting",
|
||||
@ -1270,6 +1283,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": false,
|
||||
"gboPackageTemplateId": "33610",
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "HTM Regio Vrij DH73",
|
||||
@ -1475,6 +1489,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": false,
|
||||
"gboPackageTemplateId": null,
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "IBAN wijzigen functioneel product",
|
||||
@ -1672,6 +1687,7 @@ paths:
|
||||
"fikoArticleNumber": "1234",
|
||||
"isValid": true,
|
||||
"isArchived": false,
|
||||
"needsVoucher": false,
|
||||
"gboPackageTemplateId": null,
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "OV-pas saldo (1 eurocent)",
|
||||
@ -2775,6 +2791,10 @@ components:
|
||||
type: boolean
|
||||
description: Indicates if the product is archived - if true, the Service Engine will prevent touchpoints from seeing this product
|
||||
example: false
|
||||
needsVoucher:
|
||||
type: boolean
|
||||
description: Indicates if the product needs a voucher (with this productId as requiredProductId) to be bought - if false, this is optional, but still allowed
|
||||
example: false
|
||||
gboPackageTemplateId:
|
||||
type: string
|
||||
example: '30901'
|
||||
@ -3132,6 +3152,10 @@ components:
|
||||
type: boolean
|
||||
description: Indicates if the product is archived - if true, the Service Engine will prevent touchpoints from seeing this product
|
||||
example: false
|
||||
needsVoucher:
|
||||
type: boolean
|
||||
description: Indicates if the product needs a voucher (with this productId as requiredProductId) to be bought - if false, this is optional, but still allowed
|
||||
example: false
|
||||
gboPackageTemplateId:
|
||||
type: string
|
||||
description: >-
|
||||
@ -3503,6 +3527,10 @@ components:
|
||||
type: boolean
|
||||
description: Indicates if the product is archived - if true, the Service Engine will prevent touchpoints from seeing this product
|
||||
example: false
|
||||
needsVoucher:
|
||||
type: boolean
|
||||
description: Indicates if the product needs a voucher (with this productId as requiredProductId) to be bought - if false, this is optional, but still allowed
|
||||
example: false
|
||||
gboPackageTemplateId:
|
||||
type: string
|
||||
description: >-
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
0
src/trip.json
Normal file
0
src/trip.json
Normal file
151
trip2.json
Normal file
151
trip2.json
Normal file
@ -0,0 +1,151 @@
|
||||
{ "tripId": 796727186, "tripVersion": 1, "tripStatus": "COMPLETE", "organisationIcon": "/icons/organisations/3.svg", "organisationId": "3", "organisationName": "HTM", "supersededByTripIds": [], "supersedesTripIds": [], "products": [ {
|
||||
"productTemplateId": "30901", "productCommercialName": { "items": [ {
|
||||
"key": "nl-NL", "value": "HTM 90% Korting" },
|
||||
{
|
||||
"key": "en-US", "value": "HTM 90% Discount" }
|
||||
]
|
||||
},
|
||||
"productIcon": "001.jpg", "purchaseDateTime": "2026-04-02T12:38:28+02:00", "organisationName": "ProductRetailer HTM", "appliedValue": -125, "organisationId": "3", "category": "SALES", "typesOfFareProduct": [ {
|
||||
"privateCode": "discount" }
|
||||
],
|
||||
"xspit": "821ddb0d-4ea7-4a0d-84aa-bb7facce15d1" },
|
||||
{
|
||||
"productTemplateId": "N/A", "purchaseDateTime": "2025-07-09T12:39:27+02:00", "appliedValue": 139, "category": "SALES", "typesOfFareProduct": [ {
|
||||
"privateCode": "payg" }
|
||||
],
|
||||
"xspit": "7618337f-c986-4bef-990d-f5a6b47292b8" },
|
||||
{
|
||||
"productTemplateId": "1:2000", "productCommercialName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Basis Bus Tram Metro" },
|
||||
{
|
||||
"key": "en-US", "value": "BTM full fare" }
|
||||
]
|
||||
},
|
||||
"validFrom": "2000-01-01T01:00:00+01:00", "validUntil": "2100-01-01T00:59:59+01:00", "weight": 116, "appliedMetric": "FARE", "appliedValue": 116, "category": "INTERNAL", "typesOfFareProduct": [ {
|
||||
"privateCode": "payg" }
|
||||
],
|
||||
"xspit": "7618337f-c986-4bef-990d-f5a6b47292b8", "xpit": "f4256df6-b767-460f-9880-f7597bd7f3f2" },
|
||||
{
|
||||
"productTemplateId": "2:2000", "productCommercialName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Basis Bus Tram Metro" },
|
||||
{
|
||||
"key": "en-US", "value": "BTM full fare" }
|
||||
]
|
||||
},
|
||||
"validFrom": "2000-01-01T01:00:00+01:00", "validUntil": "2100-01-01T00:59:59+01:00", "weight": 23, "appliedMetric": "FARE", "appliedValue": 23, "category": "INTERNAL", "typesOfFareProduct": [ {
|
||||
"privateCode": "payg" }
|
||||
],
|
||||
"xspit": "7618337f-c986-4bef-990d-f5a6b47292b8", "xpit": "f4256df6-b767-460f-9880-f7597bd7f3f2" },
|
||||
{
|
||||
"productTemplateId": "3:30901", "productCommercialName": { "items": [ {
|
||||
"key": "nl-NL", "value": "HTM 90% Korting" },
|
||||
{
|
||||
"key": "en-US", "value": "HTM 90% Discount" },
|
||||
{
|
||||
"key": "nl-NL", "value": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!" },
|
||||
{
|
||||
"key": "en-US", "value": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!" }
|
||||
]
|
||||
},
|
||||
"validFrom": "2026-04-03T04:00:00+02:00", "validUntil": "2031-04-03T04:00:00+02:00", "organisationName": "Product Owner HTM", "weight": -125, "appliedMetric": "DISCOUNT", "appliedValue": -125, "organisationId": "3", "category": "INTERNAL", "typesOfFareProduct": [ {
|
||||
"privateCode": "discount" }
|
||||
],
|
||||
"productCatalogVersionId": "PC-HTM:70", "xspit": "821ddb0d-4ea7-4a0d-84aa-bb7facce15d1", "xpit": "1848597c-5ba9-4dab-8d9f-3948948706a1" }
|
||||
],
|
||||
"checkinTransactionTimestamp": "2026-04-20T16:59:48+02:00", "checkoutTransactionTimestamp": "2026-04-20T17:04:50+02:00", "checkinTransactionReference": "00310F92;29023;emvClt", "checkoutTransactionReference": "0030DBC1;30528;emvClt", "checkinLocation": { "stopId": 2721, "stopName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Station Hollands Spoor" },
|
||||
{
|
||||
"key": "en-US", "value": "Station Hollands Spoor" }
|
||||
]
|
||||
},
|
||||
"stopDesc": "Stop point2721", "stopUrl": "/icons/stops/stop.svg", "locationType": 0 },
|
||||
"checkoutLocation": { "stopId": 2862, "stopName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Kalvermarkt-Stadhuis" },
|
||||
{
|
||||
"key": "en-US", "value": "Kalvermarkt-Stadhuis" }
|
||||
]
|
||||
},
|
||||
"stopDesc": "Stop point2862", "stopUrl": "/icons/stops/stop.svg", "locationType": 0 },
|
||||
"tokenType": "EMV-CLT", "transportType": "TRAM", "lineId": "17", "lineName": "Tram17", "networkId": "1", "networkName": "HTM netwerk", "currency": "EUR", "transportIcon": "/icons/transportTypes/tram.svg", "legs": [ {
|
||||
"legId": 1614950977, "checkinTransactionTimestamp": "2026-04-20T16:59:48+02:00", "checkoutTransactionTimestamp": "2026-04-20T17:04:50+02:00", "checkinLocation": { "stopId": 2721, "stopName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Station Hollands Spoor" },
|
||||
{
|
||||
"key": "en-US", "value": "Station Hollands Spoor" }
|
||||
]
|
||||
},
|
||||
"stopDesc": "Stop point2721", "stopUrl": "/icons/stops/stop.svg", "locationType": 0 },
|
||||
"checkoutLocation": { "stopId": 2862, "stopName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Kalvermarkt-Stadhuis" },
|
||||
{
|
||||
"key": "en-US", "value": "Kalvermarkt-Stadhuis" }
|
||||
]
|
||||
},
|
||||
"stopDesc": "Stop point2862", "stopUrl": "/icons/stops/stop.svg", "locationType": 0 },
|
||||
"baseRate": 139, "lineId": "17", "lineName": "Tram17", "networkId": "1", "networkName": "HTM netwerk", "fare": 14, "fareState": "CALCULATED", "currency": "EUR", "products": [ {
|
||||
"productTemplateId": "30901", "productCommercialName": { "items": [ {
|
||||
"key": "nl-NL", "value": "HTM 90% Korting" },
|
||||
{
|
||||
"key": "en-US", "value": "HTM 90% Discount" }
|
||||
]
|
||||
},
|
||||
"productIcon": "001.jpg", "purchaseDateTime": "2026-04-02T12:38:28+02:00", "organisationName": "ProductRetailer HTM", "appliedValue": -125, "organisationId": "3", "category": "SALES", "typesOfFareProduct": [ {
|
||||
"privateCode": "discount" }
|
||||
],
|
||||
"xspit": "821ddb0d-4ea7-4a0d-84aa-bb7facce15d1" },
|
||||
{
|
||||
"productTemplateId": "N/A", "purchaseDateTime": "2025-07-09T12:39:27+02:00", "appliedValue": 139, "category": "SALES", "typesOfFareProduct": [ {
|
||||
"privateCode": "payg" }
|
||||
],
|
||||
"xspit": "7618337f-c986-4bef-990d-f5a6b47292b8" },
|
||||
{
|
||||
"productTemplateId": "1:2000", "productCommercialName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Basis Bus Tram Metro" },
|
||||
{
|
||||
"key": "en-US", "value": "BTM full fare" }
|
||||
]
|
||||
},
|
||||
"validFrom": "2000-01-01T01:00:00+01:00", "validUntil": "2100-01-01T00:59:59+01:00", "weight": 116, "appliedMetric": "FARE", "appliedValue": 116, "category": "INTERNAL", "typesOfFareProduct": [ {
|
||||
"privateCode": "payg" }
|
||||
],
|
||||
"xspit": "7618337f-c986-4bef-990d-f5a6b47292b8", "xpit": "f4256df6-b767-460f-9880-f7597bd7f3f2" },
|
||||
{
|
||||
"productTemplateId": "2:2000", "productCommercialName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Basis Bus Tram Metro" },
|
||||
{
|
||||
"key": "en-US", "value": "BTM full fare" }
|
||||
]
|
||||
},
|
||||
"validFrom": "2000-01-01T01:00:00+01:00", "validUntil": "2100-01-01T00:59:59+01:00", "weight": 23, "appliedMetric": "FARE", "appliedValue": 23, "category": "INTERNAL", "typesOfFareProduct": [ {
|
||||
"privateCode": "payg" }
|
||||
],
|
||||
"xspit": "7618337f-c986-4bef-990d-f5a6b47292b8", "xpit": "f4256df6-b767-460f-9880-f7597bd7f3f2" },
|
||||
{
|
||||
"productTemplateId": "3:30901", "productCommercialName": { "items": [ {
|
||||
"key": "nl-NL", "value": "HTM 90% Korting" },
|
||||
{
|
||||
"key": "en-US", "value": "HTM 90% Discount" },
|
||||
{
|
||||
"key": "nl-NL", "value": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!" },
|
||||
{
|
||||
"key": "en-US", "value": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!" }
|
||||
]
|
||||
},
|
||||
"validFrom": "2026-04-03T04:00:00+02:00", "validUntil": "2031-04-03T04:00:00+02:00", "organisationName": "Product Owner HTM", "weight": -125, "appliedMetric": "DISCOUNT", "appliedValue": -125, "organisationId": "3", "category": "INTERNAL", "typesOfFareProduct": [ {
|
||||
"privateCode": "discount" }
|
||||
],
|
||||
"discountPercentage": 90, "productCatalogVersionId": "PC-HTM:70", "xspit": "821ddb0d-4ea7-4a0d-84aa-bb7facce15d1", "xpit": "1848597c-5ba9-4dab-8d9f-3948948706a1" }
|
||||
],
|
||||
"appliedTimePeriods": [], "tariffJourneyStart": true, "topoDistance": 1161, "concessionId": "1", "appliedZones": [] }
|
||||
],
|
||||
"lastUpdatedTripDateTime": "2026-04-20T17:04:50+02:00", "fare": 14, "loyaltyOrDiscount": true, "supportCode": "pWM8Km6J8aHg5n", "tripVersionReason": "STRUCTURE", "checkinTransactionId": "00310F92-29023-emvClt-1776697188000", "checkoutTransactionId": "0030DBC1-30528-emvClt-1776697490000", "tariffVersionId": "HTM-CF1:278", "correlationId": "4bc7a040-71bf-4084-a61e-b2dd72092079", "createdAt": "2026-04-20T17:05:01.473+02:00", "entryTariffLocation": { "stopId": 2721, "stopName": { "items": [ {
|
||||
"key": "nl-NL", "value": "Station Hollands Spoor" },
|
||||
{
|
||||
"key": "en-US", "value": "Station Hollands Spoor" }
|
||||
]
|
||||
},
|
||||
"stopDesc": "Stop point2721", "stopUrl": "/icons/stops/stop.svg", "locationType": 0 },
|
||||
"traveledLines": [ {
|
||||
"lineId": "17", "lineName": "Tram17" }
|
||||
],
|
||||
"tripFareNature": "FIXED", "paymentMethodId": "229a01ff-7bd9-4740-9b19-00637146a6ca", "paymentMethodMode": "PREPAID", "paymentMethodName": "EPURSE", "paymentProviderName": "TPURSE", "paymentProviderBusinessEntityId": "600027", "registryFragmentVersionId": "REG:27", "vehicleId": 5063, "xbot": "c85e34d6-f9c1-49c2-8574-59b37e0f3b8e" }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user