@epilot/app-client 0.13.0 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/openapi.json CHANGED
@@ -67,9 +67,7 @@
67
67
  "summary": "getPublicFacingComponent",
68
68
  "description": "Retrieve public facing components for an installed app",
69
69
  "operationId": "getPublicFacingComponent",
70
- "tags": [
71
- "App Installation"
72
- ],
70
+ "tags": ["App Installation"],
73
71
  "responses": {
74
72
  "200": {
75
73
  "description": "Successful response with public app component details",
@@ -97,9 +95,7 @@
97
95
  "summary": "listConfigurations",
98
96
  "description": "List all app configuration metadata owned by an organization. To get full app configuration details, use the /v1/app-configurations/{appId} endpoint.",
99
97
  "operationId": "listConfigurations",
100
- "tags": [
101
- "App Configuration"
102
- ],
98
+ "tags": ["App Configuration"],
103
99
  "parameters": [
104
100
  {
105
101
  "name": "page",
@@ -159,9 +155,7 @@
159
155
  "summary": "createConfiguration",
160
156
  "description": "Create a new private app configuration. To make it public a verification process needs to be triggered",
161
157
  "operationId": "createConfiguration",
162
- "tags": [
163
- "App Configuration"
164
- ],
158
+ "tags": ["App Configuration"],
165
159
  "requestBody": {
166
160
  "$ref": "#/components/requestBodies/CreateConfigRequest"
167
161
  },
@@ -172,9 +166,7 @@
172
166
  "application/json": {
173
167
  "schema": {
174
168
  "type": "object",
175
- "required": [
176
- "app_id"
177
- ],
169
+ "required": ["app_id"],
178
170
  "properties": {
179
171
  "app_id": {
180
172
  "type": "string"
@@ -192,9 +184,7 @@
192
184
  "summary": "listPublicConfigurations",
193
185
  "description": "List all publicly available app configurations that can be installed. This endpoint returns apps that have at least one public version.",
194
186
  "operationId": "listPublicConfigurations",
195
- "tags": [
196
- "App Configuration"
197
- ],
187
+ "tags": ["App Configuration"],
198
188
  "parameters": [
199
189
  {
200
190
  "name": "page",
@@ -267,9 +257,7 @@
267
257
  "summary": "getPublicConfiguration",
268
258
  "description": "Retrieve the public configuration of an app to install in your tenant",
269
259
  "operationId": "getPublicConfiguration",
270
- "tags": [
271
- "App Configuration"
272
- ],
260
+ "tags": ["App Configuration"],
273
261
  "parameters": [
274
262
  {
275
263
  "name": "version",
@@ -313,9 +301,7 @@
313
301
  "summary": "getConfiguration",
314
302
  "description": "Retrieve a specific app configuration",
315
303
  "operationId": "getConfiguration",
316
- "tags": [
317
- "App Configuration"
318
- ],
304
+ "tags": ["App Configuration"],
319
305
  "parameters": [
320
306
  {
321
307
  "name": "version",
@@ -346,9 +332,7 @@
346
332
  "summary": "patchMetadata",
347
333
  "description": "Patch non-versioned configuration metadata of a given app configuration.",
348
334
  "operationId": "patchMetadata",
349
- "tags": [
350
- "App Configuration"
351
- ],
335
+ "tags": ["App Configuration"],
352
336
  "requestBody": {
353
337
  "$ref": "#/components/requestBodies/PatchConfigMetadataRequest"
354
338
  },
@@ -365,9 +349,7 @@
365
349
  "summary": "Delete app configuration",
366
350
  "description": "Delete an app configuration and all its versions and components.",
367
351
  "operationId": "deleteConfiguration",
368
- "tags": [
369
- "App Configuration"
370
- ],
352
+ "tags": ["App Configuration"],
371
353
  "responses": {
372
354
  "204": {
373
355
  "description": "App configuration deleted successfully"
@@ -383,9 +365,7 @@
383
365
  "summary": "queryEvents",
384
366
  "description": "Query analytics events for a specific app with flexible filtering",
385
367
  "operationId": "queryEvents",
386
- "tags": [
387
- "App Analytics"
388
- ],
368
+ "tags": ["App Analytics"],
389
369
  "parameters": [
390
370
  {
391
371
  "name": "appId",
@@ -432,9 +412,7 @@
432
412
  "summary": "createBundleUploadUrl",
433
413
  "description": "Generate a presigned URL for uploading app bundle to /<app-id>/bundle.js path",
434
414
  "operationId": "createBundleUploadUrl",
435
- "tags": [
436
- "App Configuration"
437
- ],
415
+ "tags": ["App Configuration"],
438
416
  "parameters": [
439
417
  {
440
418
  "name": "appId",
@@ -456,9 +434,7 @@
456
434
  "application/json": {
457
435
  "schema": {
458
436
  "type": "object",
459
- "required": [
460
- "upload_url"
461
- ],
437
+ "required": ["upload_url"],
462
438
  "properties": {
463
439
  "component_id": {
464
440
  "type": "string",
@@ -496,9 +472,7 @@
496
472
  "summary": "createZipUploadUrl",
497
473
  "operationId": "createZipUploadUrl",
498
474
  "description": "Generate a presigned URL to upload a zip file with artifacts that will be unpacked in a new directory under the /<app-id>/ path\n",
499
- "tags": [
500
- "App Configuration"
501
- ],
475
+ "tags": ["App Configuration"],
502
476
  "parameters": [
503
477
  {
504
478
  "name": "appId",
@@ -542,10 +516,7 @@
542
516
  "application/json": {
543
517
  "schema": {
544
518
  "type": "object",
545
- "required": [
546
- "upload_url",
547
- "artifact_url"
548
- ],
519
+ "required": ["upload_url", "artifact_url"],
549
520
  "properties": {
550
521
  "component_id": {
551
522
  "type": "string",
@@ -594,9 +565,7 @@
594
565
  "summary": "createLogoUploadUrl",
595
566
  "description": "Generate a presigned URL for uploading app logo to /<app-id>/logo.png path",
596
567
  "operationId": "createLogoUploadUrl",
597
- "tags": [
598
- "App Configuration"
599
- ],
568
+ "tags": ["App Configuration"],
600
569
  "requestBody": {
601
570
  "$ref": "#/components/requestBodies/CreateLogoPresignedRequest"
602
571
  },
@@ -607,9 +576,7 @@
607
576
  "application/json": {
608
577
  "schema": {
609
578
  "type": "object",
610
- "required": [
611
- "upload_url"
612
- ],
579
+ "required": ["upload_url"],
613
580
  "properties": {
614
581
  "upload_url": {
615
582
  "type": "string",
@@ -637,9 +604,7 @@
637
604
  "summary": "deleteLogo",
638
605
  "description": "Delete the app logo from /<app-id>/logo.png path",
639
606
  "operationId": "deleteLogo",
640
- "tags": [
641
- "App Configuration"
642
- ],
607
+ "tags": ["App Configuration"],
643
608
  "responses": {
644
609
  "204": {
645
610
  "description": "Logo deleted successfully"
@@ -655,9 +620,7 @@
655
620
  "summary": "listVersions",
656
621
  "description": "Retrieve a list of versions for an app configuration",
657
622
  "operationId": "listVersions",
658
- "tags": [
659
- "App Configuration"
660
- ],
623
+ "tags": ["App Configuration"],
661
624
  "parameters": [
662
625
  {
663
626
  "name": "appId",
@@ -731,9 +694,7 @@
731
694
  "summary": "getVersion",
732
695
  "description": "Retrieve a specific version of an app configuration",
733
696
  "operationId": "getVersion",
734
- "tags": [
735
- "App Configuration"
736
- ],
697
+ "tags": ["App Configuration"],
737
698
  "parameters": [
738
699
  {
739
700
  "name": "appId",
@@ -774,9 +735,7 @@
774
735
  "summary": "deleteVersion",
775
736
  "description": "Delete a specific version of an app configuration",
776
737
  "operationId": "deleteVersion",
777
- "tags": [
778
- "App Configuration"
779
- ],
738
+ "tags": ["App Configuration"],
780
739
  "parameters": [
781
740
  {
782
741
  "name": "appId",
@@ -816,9 +775,7 @@
816
775
  "summary": "patchVersion",
817
776
  "description": "Patch an existing app version",
818
777
  "operationId": "patchVersion",
819
- "tags": [
820
- "App Configuration"
821
- ],
778
+ "tags": ["App Configuration"],
822
779
  "parameters": [
823
780
  {
824
781
  "name": "appId",
@@ -860,9 +817,7 @@
860
817
  "summary": "getReview",
861
818
  "description": "Retrieve the review status of a specific app version",
862
819
  "operationId": "getReview",
863
- "tags": [
864
- "App Configuration"
865
- ],
820
+ "tags": ["App Configuration"],
866
821
  "parameters": [
867
822
  {
868
823
  "name": "appId",
@@ -908,9 +863,7 @@
908
863
  "summary": "createReview",
909
864
  "description": "Submit an app version for review to make it public",
910
865
  "operationId": "createReview",
911
- "tags": [
912
- "App Configuration"
913
- ],
866
+ "tags": ["App Configuration"],
914
867
  "parameters": [
915
868
  {
916
869
  "name": "appId",
@@ -964,9 +917,7 @@
964
917
  "summary": "createComponent",
965
918
  "description": "Patch an existing app version to create/add a component",
966
919
  "operationId": "createComponent",
967
- "tags": [
968
- "App Configuration"
969
- ],
920
+ "tags": ["App Configuration"],
970
921
  "parameters": [
971
922
  {
972
923
  "name": "appId",
@@ -1020,9 +971,7 @@
1020
971
  "summary": "patchComponent",
1021
972
  "description": "Patch an existing app version to update its components",
1022
973
  "operationId": "patchComponent",
1023
- "tags": [
1024
- "App Configuration"
1025
- ],
974
+ "tags": ["App Configuration"],
1026
975
  "parameters": [
1027
976
  {
1028
977
  "name": "appId",
@@ -1071,9 +1020,7 @@
1071
1020
  "summary": "deleteComponent",
1072
1021
  "description": "Delete a specific component from an app version",
1073
1022
  "operationId": "deleteComponent",
1074
- "tags": [
1075
- "App Configuration"
1076
- ],
1023
+ "tags": ["App Configuration"],
1077
1024
  "parameters": [
1078
1025
  {
1079
1026
  "name": "appId",
@@ -1118,9 +1065,7 @@
1118
1065
  "summary": "cloneVersion",
1119
1066
  "description": "Clone an existing app version to create a new version",
1120
1067
  "operationId": "cloneVersion",
1121
- "tags": [
1122
- "App Configuration"
1123
- ],
1068
+ "tags": ["App Configuration"],
1124
1069
  "parameters": [
1125
1070
  {
1126
1071
  "name": "appId",
@@ -1166,10 +1111,7 @@
1166
1111
  },
1167
1112
  "status": {
1168
1113
  "type": "string",
1169
- "enum": [
1170
- "pending",
1171
- "published"
1172
- ]
1114
+ "enum": ["pending", "published"]
1173
1115
  }
1174
1116
  }
1175
1117
  }
@@ -1190,9 +1132,7 @@
1190
1132
  "summary": "listInstallations",
1191
1133
  "description": "Retrieve a list of installed apps for the organization.",
1192
1134
  "operationId": "listInstallations",
1193
- "tags": [
1194
- "App Installation"
1195
- ],
1135
+ "tags": ["App Installation"],
1196
1136
  "parameters": [
1197
1137
  {
1198
1138
  "name": "componentType",
@@ -1271,9 +1211,7 @@
1271
1211
  "summary": "getInstallation",
1272
1212
  "description": "Retrieve details of an installed app by its ID.",
1273
1213
  "operationId": "getInstallation",
1274
- "tags": [
1275
- "App Installation"
1276
- ],
1214
+ "tags": ["App Installation"],
1277
1215
  "parameters": [
1278
1216
  {
1279
1217
  "name": "appId",
@@ -1304,9 +1242,7 @@
1304
1242
  "summary": "install",
1305
1243
  "description": "Upsert app installation by its ID.",
1306
1244
  "operationId": "install",
1307
- "tags": [
1308
- "App Installation"
1309
- ],
1245
+ "tags": ["App Installation"],
1310
1246
  "parameters": [
1311
1247
  {
1312
1248
  "name": "appId",
@@ -1340,9 +1276,7 @@
1340
1276
  "summary": "patchInstallation",
1341
1277
  "description": "Patch an installed app by its ID.",
1342
1278
  "operationId": "patchInstallation",
1343
- "tags": [
1344
- "App Installation"
1345
- ],
1279
+ "tags": ["App Installation"],
1346
1280
  "parameters": [
1347
1281
  {
1348
1282
  "name": "appId",
@@ -1369,9 +1303,7 @@
1369
1303
  "summary": "uninstall",
1370
1304
  "description": "Uninstall an app by its ID.",
1371
1305
  "operationId": "uninstall",
1372
- "tags": [
1373
- "App Installation"
1374
- ],
1306
+ "tags": ["App Installation"],
1375
1307
  "parameters": [
1376
1308
  {
1377
1309
  "name": "appId",
@@ -1397,9 +1329,7 @@
1397
1329
  "summary": "promoteVersion",
1398
1330
  "description": "Update an installed app to a new version",
1399
1331
  "operationId": "promoteVersion",
1400
- "tags": [
1401
- "App Installation"
1402
- ],
1332
+ "tags": ["App Installation"],
1403
1333
  "parameters": [
1404
1334
  {
1405
1335
  "name": "appId",
@@ -1443,9 +1373,7 @@
1443
1373
  "summary": "ingestEvent",
1444
1374
  "operationId": "ingestEvent",
1445
1375
  "description": "Internal endpoint for services to submit app events for analytic purposes",
1446
- "tags": [
1447
- "App Analytics"
1448
- ],
1376
+ "tags": ["App Analytics"],
1449
1377
  "requestBody": {
1450
1378
  "required": true,
1451
1379
  "content": {
@@ -1507,9 +1435,7 @@
1507
1435
  "summary": "publicProxyGet",
1508
1436
  "operationId": "publicProxyGet",
1509
1437
  "description": "Forward a GET request to a registered proxy target from a public-facing component (e.g. journey blocks)",
1510
- "tags": [
1511
- "App Proxy"
1512
- ],
1438
+ "tags": ["App Proxy"],
1513
1439
  "security": [
1514
1440
  {
1515
1441
  "EpilotAuth": []
@@ -1534,9 +1460,7 @@
1534
1460
  "summary": "publicProxyPost",
1535
1461
  "operationId": "publicProxyPost",
1536
1462
  "description": "Forward a POST request to a registered proxy target from a public-facing component (e.g. journey blocks)",
1537
- "tags": [
1538
- "App Proxy"
1539
- ],
1463
+ "tags": ["App Proxy"],
1540
1464
  "security": [
1541
1465
  {
1542
1466
  "EpilotAuth": []
@@ -1576,10 +1500,7 @@
1576
1500
  "application/json": {
1577
1501
  "schema": {
1578
1502
  "type": "object",
1579
- "required": [
1580
- "technical_contact",
1581
- "marketing_contact"
1582
- ],
1503
+ "required": ["technical_contact", "marketing_contact"],
1583
1504
  "properties": {
1584
1505
  "technical_contact": {
1585
1506
  "type": "string",
@@ -1604,10 +1525,7 @@
1604
1525
  "application/json": {
1605
1526
  "schema": {
1606
1527
  "type": "object",
1607
- "required": [
1608
- "filename",
1609
- "mime_type"
1610
- ],
1528
+ "required": ["filename", "mime_type"],
1611
1529
  "properties": {
1612
1530
  "filename": {
1613
1531
  "type": "string",
@@ -1617,11 +1535,7 @@
1617
1535
  "mime_type": {
1618
1536
  "type": "string",
1619
1537
  "description": "MIME type of the logo file",
1620
- "enum": [
1621
- "image/png",
1622
- "image/jpeg",
1623
- "image/jpg"
1624
- ],
1538
+ "enum": ["image/png", "image/jpeg", "image/jpg"],
1625
1539
  "example": "image/png"
1626
1540
  }
1627
1541
  }
@@ -1635,9 +1549,7 @@
1635
1549
  "application/json": {
1636
1550
  "schema": {
1637
1551
  "type": "object",
1638
- "required": [
1639
- "version"
1640
- ],
1552
+ "required": ["version"],
1641
1553
  "properties": {
1642
1554
  "version": {
1643
1555
  "type": "string",
@@ -1735,10 +1647,7 @@
1735
1647
  "application/json": {
1736
1648
  "schema": {
1737
1649
  "type": "object",
1738
- "required": [
1739
- "name",
1740
- "description"
1741
- ],
1650
+ "required": ["name", "description"],
1742
1651
  "properties": {
1743
1652
  "name": {
1744
1653
  "type": "string",
@@ -1821,10 +1730,7 @@
1821
1730
  "Options": {
1822
1731
  "type": "object",
1823
1732
  "description": "Options for the component configuration",
1824
- "required": [
1825
- "key",
1826
- "type"
1827
- ],
1733
+ "required": ["key", "type"],
1828
1734
  "properties": {
1829
1735
  "key": {
1830
1736
  "type": "string",
@@ -1858,13 +1764,7 @@
1858
1764
  },
1859
1765
  "type": {
1860
1766
  "type": "string",
1861
- "enum": [
1862
- "text",
1863
- "number",
1864
- "boolean",
1865
- "secret",
1866
- "object"
1867
- ],
1767
+ "enum": ["text", "number", "boolean", "secret", "object"],
1868
1768
  "description": "The type of this option. `object` declares a structured value whose fields are listed\nunder `fields`. Combine with `repeatable: true` to express a list of these objects.\n"
1869
1769
  }
1870
1770
  }
@@ -1872,10 +1772,7 @@
1872
1772
  "ObjectField": {
1873
1773
  "type": "object",
1874
1774
  "description": "One declared field inside a `type: object` option. Fields are primitives — object nesting\nis not supported.\n",
1875
- "required": [
1876
- "key",
1877
- "type"
1878
- ],
1775
+ "required": ["key", "type"],
1879
1776
  "properties": {
1880
1777
  "key": {
1881
1778
  "type": "string",
@@ -1895,22 +1792,14 @@
1895
1792
  },
1896
1793
  "type": {
1897
1794
  "type": "string",
1898
- "enum": [
1899
- "text",
1900
- "number",
1901
- "boolean",
1902
- "secret"
1903
- ],
1795
+ "enum": ["text", "number", "boolean", "secret"],
1904
1796
  "description": "Primitive type of this field."
1905
1797
  }
1906
1798
  }
1907
1799
  },
1908
1800
  "Option": {
1909
1801
  "type": "object",
1910
- "required": [
1911
- "key",
1912
- "value"
1913
- ],
1802
+ "required": ["key", "value"],
1914
1803
  "properties": {
1915
1804
  "key": {
1916
1805
  "type": "string",
@@ -1923,10 +1812,7 @@
1923
1812
  },
1924
1813
  "OptionsRef": {
1925
1814
  "type": "object",
1926
- "required": [
1927
- "component_id",
1928
- "options"
1929
- ],
1815
+ "required": ["component_id", "options"],
1930
1816
  "properties": {
1931
1817
  "component_id": {
1932
1818
  "type": "string",
@@ -1954,10 +1840,7 @@
1954
1840
  "example": "manifest.json"
1955
1841
  }
1956
1842
  },
1957
- "required": [
1958
- "bucket",
1959
- "key"
1960
- ]
1843
+ "required": ["bucket", "key"]
1961
1844
  },
1962
1845
  "ComponentType": {
1963
1846
  "type": "string",
@@ -1976,9 +1859,7 @@
1976
1859
  },
1977
1860
  "Author": {
1978
1861
  "type": "object",
1979
- "required": [
1980
- "company"
1981
- ],
1862
+ "required": ["company"],
1982
1863
  "properties": {
1983
1864
  "name": {
1984
1865
  "type": "string",
@@ -2018,16 +1899,11 @@
2018
1899
  },
2019
1900
  "NotificationEvent": {
2020
1901
  "type": "string",
2021
- "enum": [
2022
- "app.installed",
2023
- "app.uninstalled"
2024
- ]
1902
+ "enum": ["app.installed", "app.uninstalled"]
2025
1903
  },
2026
1904
  "BaseComponentCommon": {
2027
1905
  "type": "object",
2028
- "required": [
2029
- "id"
2030
- ],
1906
+ "required": ["id"],
2031
1907
  "properties": {
2032
1908
  "id": {
2033
1909
  "type": "string",
@@ -2120,16 +1996,11 @@
2120
1996
  },
2121
1997
  "ApiProxyComponent": {
2122
1998
  "type": "object",
2123
- "required": [
2124
- "component_type",
2125
- "configuration"
2126
- ],
1999
+ "required": ["component_type", "configuration"],
2127
2000
  "properties": {
2128
2001
  "component_type": {
2129
2002
  "type": "string",
2130
- "enum": [
2131
- "API_PROXY"
2132
- ]
2003
+ "enum": ["API_PROXY"]
2133
2004
  },
2134
2005
  "configuration": {
2135
2006
  "$ref": "#/components/schemas/ApiProxyConfig"
@@ -2138,16 +2009,11 @@
2138
2009
  },
2139
2010
  "CustomCapabilityComponent": {
2140
2011
  "type": "object",
2141
- "required": [
2142
- "component_type",
2143
- "configuration"
2144
- ],
2012
+ "required": ["component_type", "configuration"],
2145
2013
  "properties": {
2146
2014
  "component_type": {
2147
2015
  "type": "string",
2148
- "enum": [
2149
- "CUSTOM_CAPABILITY"
2150
- ]
2016
+ "enum": ["CUSTOM_CAPABILITY"]
2151
2017
  },
2152
2018
  "configuration": {
2153
2019
  "type": "object",
@@ -2155,10 +2021,7 @@
2155
2021
  "type": {
2156
2022
  "description": "Define what type of capability this is",
2157
2023
  "type": "string",
2158
- "enum": [
2159
- "tab",
2160
- "group"
2161
- ]
2024
+ "enum": ["tab", "group"]
2162
2025
  },
2163
2026
  "allowed_schemas": {
2164
2027
  "description": "Which schemas are supported by the capability. If empty, all schemas are supported.",
@@ -2183,16 +2046,11 @@
2183
2046
  },
2184
2047
  "CustomPageComponent": {
2185
2048
  "type": "object",
2186
- "required": [
2187
- "component_type",
2188
- "configuration"
2189
- ],
2049
+ "required": ["component_type", "configuration"],
2190
2050
  "properties": {
2191
2051
  "component_type": {
2192
2052
  "type": "string",
2193
- "enum": [
2194
- "CUSTOM_PAGE"
2195
- ]
2053
+ "enum": ["CUSTOM_PAGE"]
2196
2054
  },
2197
2055
  "configuration": {
2198
2056
  "$ref": "#/components/schemas/CustomPageConfig"
@@ -2209,9 +2067,7 @@
2209
2067
  },
2210
2068
  "CustomPageConfig": {
2211
2069
  "type": "object",
2212
- "required": [
2213
- "slug"
2214
- ],
2070
+ "required": ["slug"],
2215
2071
  "properties": {
2216
2072
  "slug": {
2217
2073
  "type": "string",
@@ -2237,16 +2093,11 @@
2237
2093
  },
2238
2094
  "JourneyBlockComponent": {
2239
2095
  "type": "object",
2240
- "required": [
2241
- "component_type",
2242
- "configuration"
2243
- ],
2096
+ "required": ["component_type", "configuration"],
2244
2097
  "properties": {
2245
2098
  "component_type": {
2246
2099
  "type": "string",
2247
- "enum": [
2248
- "CUSTOM_JOURNEY_BLOCK"
2249
- ]
2100
+ "enum": ["CUSTOM_JOURNEY_BLOCK"]
2250
2101
  },
2251
2102
  "configuration": {
2252
2103
  "$ref": "#/components/schemas/JourneyBlockConfig"
@@ -2255,16 +2106,11 @@
2255
2106
  },
2256
2107
  "PortalBlockComponent": {
2257
2108
  "type": "object",
2258
- "required": [
2259
- "component_type",
2260
- "configuration"
2261
- ],
2109
+ "required": ["component_type", "configuration"],
2262
2110
  "properties": {
2263
2111
  "component_type": {
2264
2112
  "type": "string",
2265
- "enum": [
2266
- "CUSTOM_PORTAL_BLOCK"
2267
- ]
2113
+ "enum": ["CUSTOM_PORTAL_BLOCK"]
2268
2114
  },
2269
2115
  "configuration": {
2270
2116
  "$ref": "#/components/schemas/PortalBlockConfig"
@@ -2281,29 +2127,19 @@
2281
2127
  },
2282
2128
  "ErpInformToolkitComponent": {
2283
2129
  "type": "object",
2284
- "required": [
2285
- "component_type",
2286
- "configuration"
2287
- ],
2130
+ "required": ["component_type", "configuration"],
2288
2131
  "properties": {
2289
2132
  "component_type": {
2290
2133
  "type": "string",
2291
- "enum": [
2292
- "ERP_INFORM_TOOLKIT"
2293
- ]
2134
+ "enum": ["ERP_INFORM_TOOLKIT"]
2294
2135
  },
2295
2136
  "configuration": {
2296
2137
  "type": "object",
2297
- "required": [
2298
- "type"
2299
- ],
2138
+ "required": ["type"],
2300
2139
  "properties": {
2301
2140
  "type": {
2302
2141
  "type": "string",
2303
- "enum": [
2304
- "inbound",
2305
- "outbound"
2306
- ]
2142
+ "enum": ["inbound", "outbound"]
2307
2143
  }
2308
2144
  }
2309
2145
  }
@@ -2311,16 +2147,11 @@
2311
2147
  },
2312
2148
  "CustomFlowActionComponent": {
2313
2149
  "type": "object",
2314
- "required": [
2315
- "component_type",
2316
- "configuration"
2317
- ],
2150
+ "required": ["component_type", "configuration"],
2318
2151
  "properties": {
2319
2152
  "component_type": {
2320
2153
  "type": "string",
2321
- "enum": [
2322
- "CUSTOM_FLOW_ACTION"
2323
- ]
2154
+ "enum": ["CUSTOM_FLOW_ACTION"]
2324
2155
  },
2325
2156
  "configuration": {
2326
2157
  "$ref": "#/components/schemas/CustomFlowConfig"
@@ -2362,9 +2193,7 @@
2362
2193
  "properties": {
2363
2194
  "type": {
2364
2195
  "type": "string",
2365
- "enum": [
2366
- "external_integration"
2367
- ]
2196
+ "enum": ["external_integration"]
2368
2197
  },
2369
2198
  "external_integration_settings": {
2370
2199
  "type": "object",
@@ -2380,9 +2209,7 @@
2380
2209
  }
2381
2210
  }
2382
2211
  },
2383
- "required": [
2384
- "type"
2385
- ]
2212
+ "required": ["type"]
2386
2213
  }
2387
2214
  ]
2388
2215
  },
@@ -2396,9 +2223,7 @@
2396
2223
  "properties": {
2397
2224
  "type": {
2398
2225
  "type": "string",
2399
- "enum": [
2400
- "sandbox"
2401
- ]
2226
+ "enum": ["sandbox"]
2402
2227
  },
2403
2228
  "sandbox_settings": {
2404
2229
  "type": "object",
@@ -2411,9 +2236,7 @@
2411
2236
  }
2412
2237
  }
2413
2238
  },
2414
- "required": [
2415
- "type"
2416
- ]
2239
+ "required": ["type"]
2417
2240
  }
2418
2241
  ]
2419
2242
  },
@@ -2437,16 +2260,11 @@
2437
2260
  },
2438
2261
  "ExternalProductCatalogComponent": {
2439
2262
  "type": "object",
2440
- "required": [
2441
- "component_type",
2442
- "configuration"
2443
- ],
2263
+ "required": ["component_type", "configuration"],
2444
2264
  "properties": {
2445
2265
  "component_type": {
2446
2266
  "type": "string",
2447
- "enum": [
2448
- "EXTERNAL_PRODUCT_CATALOG"
2449
- ]
2267
+ "enum": ["EXTERNAL_PRODUCT_CATALOG"]
2450
2268
  },
2451
2269
  "configuration": {
2452
2270
  "$ref": "#/components/schemas/ExternalProductCatalogConfig"
@@ -2494,9 +2312,7 @@
2494
2312
  },
2495
2313
  "type": {
2496
2314
  "type": "string",
2497
- "enum": [
2498
- "products"
2499
- ]
2315
+ "enum": ["products"]
2500
2316
  },
2501
2317
  "auth": {
2502
2318
  "$ref": "#/components/schemas/ExternalProductCatalogAuthBlock"
@@ -2535,17 +2351,11 @@
2535
2351
  "additionalProperties": true
2536
2352
  }
2537
2353
  },
2538
- "required": [
2539
- "url"
2540
- ],
2354
+ "required": ["url"],
2541
2355
  "additionalProperties": false
2542
2356
  }
2543
2357
  },
2544
- "required": [
2545
- "type",
2546
- "call",
2547
- "id"
2548
- ],
2358
+ "required": ["type", "call", "id"],
2549
2359
  "additionalProperties": false
2550
2360
  },
2551
2361
  "ExternalProductCatalogHookProductRecommendations": {
@@ -2562,9 +2372,7 @@
2562
2372
  },
2563
2373
  "type": {
2564
2374
  "type": "string",
2565
- "enum": [
2566
- "product-recommendations"
2567
- ]
2375
+ "enum": ["product-recommendations"]
2568
2376
  },
2569
2377
  "auth": {
2570
2378
  "$ref": "#/components/schemas/ExternalProductCatalogAuthBlock"
@@ -2603,31 +2411,20 @@
2603
2411
  "additionalProperties": true
2604
2412
  }
2605
2413
  },
2606
- "required": [
2607
- "url"
2608
- ],
2414
+ "required": ["url"],
2609
2415
  "additionalProperties": false
2610
2416
  }
2611
2417
  },
2612
- "required": [
2613
- "type",
2614
- "call",
2615
- "id"
2616
- ],
2418
+ "required": ["type", "call", "id"],
2617
2419
  "additionalProperties": false
2618
2420
  },
2619
2421
  "PortalExtensionComponent": {
2620
2422
  "type": "object",
2621
- "required": [
2622
- "component_type",
2623
- "configuration"
2624
- ],
2423
+ "required": ["component_type", "configuration"],
2625
2424
  "properties": {
2626
2425
  "component_type": {
2627
2426
  "type": "string",
2628
- "enum": [
2629
- "PORTAL_EXTENSION"
2630
- ]
2427
+ "enum": ["PORTAL_EXTENSION"]
2631
2428
  },
2632
2429
  "configuration": {
2633
2430
  "$ref": "#/components/schemas/PortalExtensionConfig"
@@ -2709,9 +2506,7 @@
2709
2506
  },
2710
2507
  "type": {
2711
2508
  "type": "string",
2712
- "enum": [
2713
- "registrationIdentifiersCheck"
2714
- ]
2509
+ "enum": ["registrationIdentifiersCheck"]
2715
2510
  },
2716
2511
  "auth": {
2717
2512
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
@@ -2750,14 +2545,26 @@
2750
2545
  },
2751
2546
  "result": {
2752
2547
  "type": "string",
2753
- "description": "Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation."
2548
+ "deprecated": true,
2549
+ "description": "Deprecated. Use `resolved.result` instead. Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation."
2550
+ }
2551
+ },
2552
+ "required": ["url", "headers", "result"],
2553
+ "additionalProperties": false
2554
+ },
2555
+ "resolved": {
2556
+ "type": "object",
2557
+ "properties": {
2558
+ "result": {
2559
+ "type": "string",
2560
+ "description": "Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation. Supersedes the deprecated `call.result`."
2561
+ },
2562
+ "errorMessagePath": {
2563
+ "type": "string",
2564
+ "description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
2565
+ "example": "error.message"
2754
2566
  }
2755
2567
  },
2756
- "required": [
2757
- "url",
2758
- "headers",
2759
- "result"
2760
- ],
2761
2568
  "additionalProperties": false
2762
2569
  },
2763
2570
  "use_static_ips": {
@@ -2770,11 +2577,7 @@
2770
2577
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
2771
2578
  }
2772
2579
  },
2773
- "required": [
2774
- "id",
2775
- "type",
2776
- "call"
2777
- ],
2580
+ "required": ["id", "type", "call"],
2778
2581
  "additionalProperties": false
2779
2582
  },
2780
2583
  "PortalExtensionHookContractIdentification": {
@@ -2791,9 +2594,7 @@
2791
2594
  },
2792
2595
  "type": {
2793
2596
  "type": "string",
2794
- "enum": [
2795
- "contractIdentification"
2796
- ]
2597
+ "enum": ["contractIdentification"]
2797
2598
  },
2798
2599
  "auth": {
2799
2600
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
@@ -2832,13 +2633,26 @@
2832
2633
  },
2833
2634
  "result": {
2834
2635
  "type": "string",
2835
- "description": "Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation."
2636
+ "deprecated": true,
2637
+ "description": "Deprecated. Use `resolved.result` instead. Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation."
2638
+ }
2639
+ },
2640
+ "required": ["url", "headers"],
2641
+ "additionalProperties": false
2642
+ },
2643
+ "resolved": {
2644
+ "type": "object",
2645
+ "properties": {
2646
+ "result": {
2647
+ "type": "string",
2648
+ "description": "Contract or Contact ID usually retrieved from the response body, e.g. `{{CallResponse.data.contact_id}}`. If no result is passed and the request suceeds, we attempt to resolve the Contact ID automatically. Supports variable interpolation. Supersedes the deprecated `call.result`."
2649
+ },
2650
+ "errorMessagePath": {
2651
+ "type": "string",
2652
+ "description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
2653
+ "example": "error.message"
2836
2654
  }
2837
2655
  },
2838
- "required": [
2839
- "url",
2840
- "headers"
2841
- ],
2842
2656
  "additionalProperties": false
2843
2657
  },
2844
2658
  "assignment_mode": {
@@ -2869,9 +2683,7 @@
2869
2683
  "type": "string",
2870
2684
  "description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
2871
2685
  },
2872
- "required": [
2873
- "en"
2874
- ],
2686
+ "required": ["en"],
2875
2687
  "description": "Explanation of the hook."
2876
2688
  },
2877
2689
  "use_static_ips": {
@@ -2884,11 +2696,7 @@
2884
2696
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
2885
2697
  }
2886
2698
  },
2887
- "required": [
2888
- "id",
2889
- "type",
2890
- "call"
2891
- ],
2699
+ "required": ["id", "type", "call"],
2892
2700
  "additionalProperties": false
2893
2701
  },
2894
2702
  "PortalExtensionHookMeterReadingPlausibilityCheck": {
@@ -2905,16 +2713,11 @@
2905
2713
  },
2906
2714
  "type": {
2907
2715
  "type": "string",
2908
- "enum": [
2909
- "meterReadingPlausibilityCheck"
2910
- ]
2716
+ "enum": ["meterReadingPlausibilityCheck"]
2911
2717
  },
2912
2718
  "plausibility_mode": {
2913
2719
  "type": "string",
2914
- "enum": [
2915
- "check",
2916
- "range"
2917
- ],
2720
+ "enum": ["check", "range"],
2918
2721
  "default": "check",
2919
2722
  "description": "Mode for plausibility check:\n- \"check\": Validates meter reading and returns valid: boolean (used during submission)\n- \"range\": Returns min/max allowed values for each counter for validation before submission\n"
2920
2723
  },
@@ -2942,11 +2745,7 @@
2942
2745
  "default": {}
2943
2746
  }
2944
2747
  },
2945
- "required": [
2946
- "url",
2947
- "headers",
2948
- "body"
2949
- ],
2748
+ "required": ["url", "headers", "body"],
2950
2749
  "additionalProperties": false
2951
2750
  },
2952
2751
  "resolved": {
@@ -2982,6 +2781,11 @@
2982
2781
  "type": "string",
2983
2782
  "description": "Lower allowed limit of the meter reading",
2984
2783
  "example": "{{CallResponse.data.lower_limit}}"
2784
+ },
2785
+ "errorMessagePath": {
2786
+ "type": "string",
2787
+ "description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
2788
+ "example": "error.message"
2985
2789
  }
2986
2790
  },
2987
2791
  "additionalProperties": false
@@ -2996,12 +2800,7 @@
2996
2800
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
2997
2801
  }
2998
2802
  },
2999
- "required": [
3000
- "id",
3001
- "type",
3002
- "call",
3003
- "resolved"
3004
- ],
2803
+ "required": ["id", "type", "call", "resolved"],
3005
2804
  "additionalProperties": false
3006
2805
  },
3007
2806
  "PortalExtensionHookPriceDataRetrieval": {
@@ -3018,9 +2817,7 @@
3018
2817
  },
3019
2818
  "type": {
3020
2819
  "type": "string",
3021
- "enum": [
3022
- "priceDataRetrieval"
3023
- ]
2820
+ "enum": ["priceDataRetrieval"]
3024
2821
  },
3025
2822
  "intervals": {
3026
2823
  "type": "array",
@@ -3028,12 +2825,7 @@
3028
2825
  "description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
3029
2826
  "items": {
3030
2827
  "type": "string",
3031
- "enum": [
3032
- "PT15M",
3033
- "PT1H",
3034
- "P1D",
3035
- "P1M"
3036
- ]
2828
+ "enum": ["PT15M", "PT1H", "P1D", "P1M"]
3037
2829
  }
3038
2830
  },
3039
2831
  "auth": {
@@ -3073,9 +2865,7 @@
3073
2865
  "additionalProperties": true
3074
2866
  }
3075
2867
  },
3076
- "required": [
3077
- "url"
3078
- ],
2868
+ "required": ["url"],
3079
2869
  "additionalProperties": false
3080
2870
  },
3081
2871
  "resolved": {
@@ -3084,6 +2874,11 @@
3084
2874
  "dataPath": {
3085
2875
  "type": "string",
3086
2876
  "description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
2877
+ },
2878
+ "errorMessagePath": {
2879
+ "type": "string",
2880
+ "description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
2881
+ "example": "error.message"
3087
2882
  }
3088
2883
  },
3089
2884
  "additionalProperties": false
@@ -3098,11 +2893,7 @@
3098
2893
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3099
2894
  }
3100
2895
  },
3101
- "required": [
3102
- "id",
3103
- "type",
3104
- "call"
3105
- ],
2896
+ "required": ["id", "type", "call"],
3106
2897
  "additionalProperties": false
3107
2898
  },
3108
2899
  "PortalExtensionHookConsumptionDataRetrieval": {
@@ -3119,9 +2910,7 @@
3119
2910
  },
3120
2911
  "type": {
3121
2912
  "type": "string",
3122
- "enum": [
3123
- "consumptionDataRetrieval"
3124
- ]
2913
+ "enum": ["consumptionDataRetrieval"]
3125
2914
  },
3126
2915
  "intervals": {
3127
2916
  "type": "array",
@@ -3129,12 +2918,7 @@
3129
2918
  "description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
3130
2919
  "items": {
3131
2920
  "type": "string",
3132
- "enum": [
3133
- "PT15M",
3134
- "PT1H",
3135
- "P1D",
3136
- "P1M"
3137
- ]
2921
+ "enum": ["PT15M", "PT1H", "P1D", "P1M"]
3138
2922
  }
3139
2923
  },
3140
2924
  "auth": {
@@ -3174,9 +2958,7 @@
3174
2958
  "additionalProperties": true
3175
2959
  }
3176
2960
  },
3177
- "required": [
3178
- "url"
3179
- ],
2961
+ "required": ["url"],
3180
2962
  "additionalProperties": false
3181
2963
  },
3182
2964
  "resolved": {
@@ -3185,6 +2967,11 @@
3185
2967
  "dataPath": {
3186
2968
  "type": "string",
3187
2969
  "description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
2970
+ },
2971
+ "errorMessagePath": {
2972
+ "type": "string",
2973
+ "description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
2974
+ "example": "error.message"
3188
2975
  }
3189
2976
  },
3190
2977
  "additionalProperties": false
@@ -3199,11 +2986,7 @@
3199
2986
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3200
2987
  }
3201
2988
  },
3202
- "required": [
3203
- "id",
3204
- "type",
3205
- "call"
3206
- ],
2989
+ "required": ["id", "type", "call"],
3207
2990
  "additionalProperties": false
3208
2991
  },
3209
2992
  "PortalExtensionHookDataExport": {
@@ -3220,9 +3003,7 @@
3220
3003
  },
3221
3004
  "type": {
3222
3005
  "type": "string",
3223
- "enum": [
3224
- "dataExport"
3225
- ]
3006
+ "enum": ["dataExport"]
3226
3007
  },
3227
3008
  "block_types": {
3228
3009
  "type": "array",
@@ -3268,9 +3049,18 @@
3268
3049
  "additionalProperties": true
3269
3050
  }
3270
3051
  },
3271
- "required": [
3272
- "url"
3273
- ],
3052
+ "required": ["url"],
3053
+ "additionalProperties": false
3054
+ },
3055
+ "resolved": {
3056
+ "type": "object",
3057
+ "properties": {
3058
+ "errorMessagePath": {
3059
+ "type": "string",
3060
+ "description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
3061
+ "example": "error.message"
3062
+ }
3063
+ },
3274
3064
  "additionalProperties": false
3275
3065
  },
3276
3066
  "use_static_ips": {
@@ -3283,15 +3073,11 @@
3283
3073
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3284
3074
  }
3285
3075
  },
3286
- "required": [
3287
- "id",
3288
- "type",
3289
- "call"
3290
- ],
3076
+ "required": ["id", "type", "call"],
3291
3077
  "additionalProperties": false
3292
3078
  },
3293
3079
  "PortalExtensionHookVisualizationMetadata": {
3294
- "description": "Hook that returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). It is invoked by the portal before fetching data, with the same context the data hook would receive, so that the discovery shape can vary per meter/contract. The expected response to the call is:\n - 200 with a JSON body of shape:\n {\n \"type_options\": [\n { \"id\": \"ht\", \"label\": { \"en\": \"High tariff\" }, \"aggregation_group\": \"consumption\", \"statistical_method\": \"sum\", \"unit\": \"kWh\" },\n ...\n ],\n \"intervals\": [\"PT15M\", \"PT1H\", \"P1D\", \"P1M\"],\n \"data_range\": { \"from\": \"2024-01-01T00:00:00Z\", \"to\": \"2026-05-01T00:00:00Z\" }\n }\n Each type option carries its own `statistical_method`, which describes the method already applied to that type's data and dictates the chart shape: `sum` is rendered as a bar chart; `min`, `average`, and `max` are rendered as a line chart. A single visualization can therefore mix bar-shaped types with line-shaped types. Defaults to `sum` when omitted.\n `aggregation_group` controls how types within a group are visually combined (depends on the per-type `statistical_method`):\n - bar chart (`sum`): same-group types are stacked into a single bar (e.g. ht/nt summed into total consumption); different-group types render side-by-side.\n - line chart (`min` / `average` / `max`): same-group types are rendered as an area chart; different-group types render as separate lines.\n All fields are optional; the consumer falls back to its defaults for whatever the hook does not return.\nThe portal looks up this hook implicitly per extension (one `visualizationMetadata` hook per extension) — there is no need for a data-retrieval hook to reference it explicitly.\n",
3080
+ "description": "Hook that returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). It is invoked by the portal before fetching data, with the same context the data hook would receive, so that the discovery shape can vary per meter/contract. The expected response to the call is:\n - 200 with a JSON body of shape:\n {\n \"type_options\": [\n { \"id\": \"ht\", \"label\": { \"en\": \"High tariff\" }, \"aggregation_group\": \"consumption\", \"statistical_method\": \"sum\", \"unit\": \"kWh\", \"color\": \"primary\", \"precision\": 2 },\n ...\n ],\n \"intervals\": [\"PT15M\", \"PT1H\", \"P1D\", \"P1M\"],\n \"data_range\": { \"from\": \"2024-01-01T00:00:00Z\", \"to\": \"2026-05-01T00:00:00Z\" }\n }\n Each type option carries its own `statistical_method`, which describes the method already applied to that type's data and dictates the chart shape: `sum` is rendered as a bar chart; `min`, `average`, and `max` are rendered as a line chart. A single visualization can therefore mix bar-shaped types with line-shaped types. Defaults to `sum` when omitted.\n Each type option may also customize its rendering: `color` picks a Spark palette color (`primary`, `slate`, `mauve`, `orange`, `red`, `tomato`, `amber`, `green`, `blue`) used to draw the type's series; `precision` sets the number of decimal places to show for that type's values (axis labels, tooltips, summaries). Both are optional — the consumer falls back to its own defaults when they are omitted.\n `aggregation_group` controls how types within a group are visually combined (depends on the per-type `statistical_method`):\n - bar chart (`sum`): same-group types are stacked into a single bar (e.g. ht/nt summed into total consumption); different-group types render side-by-side.\n - line chart (`min` / `average` / `max`): same-group types are rendered as an area chart; different-group types render as separate lines.\n All fields are optional; the consumer falls back to its defaults for whatever the hook does not return.\nThe portal looks up this hook implicitly per extension (one `visualizationMetadata` hook per extension) — there is no need for a data-retrieval hook to reference it explicitly.\n",
3295
3081
  "type": "object",
3296
3082
  "properties": {
3297
3083
  "id": {
@@ -3304,9 +3090,7 @@
3304
3090
  },
3305
3091
  "type": {
3306
3092
  "type": "string",
3307
- "enum": [
3308
- "visualizationMetadata"
3309
- ]
3093
+ "enum": ["visualizationMetadata"]
3310
3094
  },
3311
3095
  "auth": {
3312
3096
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
@@ -3345,9 +3129,7 @@
3345
3129
  "additionalProperties": true
3346
3130
  }
3347
3131
  },
3348
- "required": [
3349
- "url"
3350
- ],
3132
+ "required": ["url"],
3351
3133
  "additionalProperties": false
3352
3134
  },
3353
3135
  "resolved": {
@@ -3356,6 +3138,11 @@
3356
3138
  "dataPath": {
3357
3139
  "type": "string",
3358
3140
  "description": "Optional path to the metadata object in the response. If omitted, the metadata is assumed to be on the top level."
3141
+ },
3142
+ "errorMessagePath": {
3143
+ "type": "string",
3144
+ "description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
3145
+ "example": "error.message"
3359
3146
  }
3360
3147
  },
3361
3148
  "additionalProperties": false
@@ -3370,11 +3157,7 @@
3370
3157
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3371
3158
  }
3372
3159
  },
3373
- "required": [
3374
- "id",
3375
- "type",
3376
- "call"
3377
- ],
3160
+ "required": ["id", "type", "call"],
3378
3161
  "additionalProperties": false
3379
3162
  },
3380
3163
  "PortalExtensionHookCostDataRetrieval": {
@@ -3391,9 +3174,7 @@
3391
3174
  },
3392
3175
  "type": {
3393
3176
  "type": "string",
3394
- "enum": [
3395
- "costDataRetrieval"
3396
- ]
3177
+ "enum": ["costDataRetrieval"]
3397
3178
  },
3398
3179
  "intervals": {
3399
3180
  "type": "array",
@@ -3401,12 +3182,7 @@
3401
3182
  "description": "Deprecated. Prefer declaring a sibling `visualizationMetadata` hook on the same extension and returning `intervals` from its response — that way the supported intervals can vary per meter/contract.\nIntervals supported by the API. If omitted, it is assumed that all intervals are supported.\n",
3402
3183
  "items": {
3403
3184
  "type": "string",
3404
- "enum": [
3405
- "PT15M",
3406
- "PT1H",
3407
- "P1D",
3408
- "P1M"
3409
- ]
3185
+ "enum": ["PT15M", "PT1H", "P1D", "P1M"]
3410
3186
  }
3411
3187
  },
3412
3188
  "auth": {
@@ -3446,9 +3222,7 @@
3446
3222
  "additionalProperties": true
3447
3223
  }
3448
3224
  },
3449
- "required": [
3450
- "url"
3451
- ],
3225
+ "required": ["url"],
3452
3226
  "additionalProperties": false
3453
3227
  },
3454
3228
  "resolved": {
@@ -3457,6 +3231,11 @@
3457
3231
  "dataPath": {
3458
3232
  "type": "string",
3459
3233
  "description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
3234
+ },
3235
+ "errorMessagePath": {
3236
+ "type": "string",
3237
+ "description": "Optional path to a human-readable error message in the third-party response body, used when the call fails (non-2xx status).\nIf specified and the path resolves to a string, that message is forwarded to the end user instead of a generic error.\n",
3238
+ "example": "error.message"
3460
3239
  }
3461
3240
  },
3462
3241
  "additionalProperties": false
@@ -3471,11 +3250,7 @@
3471
3250
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3472
3251
  }
3473
3252
  },
3474
- "required": [
3475
- "id",
3476
- "type",
3477
- "call"
3478
- ],
3253
+ "required": ["id", "type", "call"],
3479
3254
  "additionalProperties": false
3480
3255
  },
3481
3256
  "PortalExtensionSeamlessLink": {
@@ -3494,9 +3269,7 @@
3494
3269
  },
3495
3270
  "type": {
3496
3271
  "type": "string",
3497
- "enum": [
3498
- "seamless"
3499
- ]
3272
+ "enum": ["seamless"]
3500
3273
  },
3501
3274
  "condition": {
3502
3275
  "type": "string",
@@ -3525,12 +3298,7 @@
3525
3298
  "additionalProperties": false
3526
3299
  }
3527
3300
  },
3528
- "required": [
3529
- "id",
3530
- "name",
3531
- "type",
3532
- "redirect"
3533
- ],
3301
+ "required": ["id", "name", "type", "redirect"],
3534
3302
  "additionalProperties": false
3535
3303
  },
3536
3304
  "PortalExtensionAuthBlock": {
@@ -3580,16 +3348,11 @@
3580
3348
  "example": "{{AuthResponse.data.expires_in}}"
3581
3349
  }
3582
3350
  },
3583
- "required": [
3584
- "key",
3585
- "ttl"
3586
- ],
3351
+ "required": ["key", "ttl"],
3587
3352
  "additionalProperties": false
3588
3353
  }
3589
3354
  },
3590
- "required": [
3591
- "url"
3592
- ],
3355
+ "required": ["url"],
3593
3356
  "additionalProperties": false
3594
3357
  },
3595
3358
  "PortalExtensionSecureProxy": {
@@ -3606,10 +3369,7 @@
3606
3369
  "description": "Use case slug for the secure proxy use case."
3607
3370
  }
3608
3371
  },
3609
- "required": [
3610
- "integration_id",
3611
- "use_case_slug"
3612
- ],
3372
+ "required": ["integration_id", "use_case_slug"],
3613
3373
  "additionalProperties": false
3614
3374
  },
3615
3375
  "ExternalProductCatalogAuthBlock": {
@@ -3646,9 +3406,7 @@
3646
3406
  "additionalProperties": true
3647
3407
  }
3648
3408
  },
3649
- "required": [
3650
- "url"
3651
- ],
3409
+ "required": ["url"],
3652
3410
  "additionalProperties": false
3653
3411
  },
3654
3412
  "OverrideDevMode": {
@@ -3664,10 +3422,7 @@
3664
3422
  },
3665
3423
  "JourneyBlockConfig": {
3666
3424
  "type": "object",
3667
- "required": [
3668
- "component_url",
3669
- "component_tag"
3670
- ],
3425
+ "required": ["component_url", "component_tag"],
3671
3426
  "properties": {
3672
3427
  "override_dev_mode": {
3673
3428
  "$ref": "#/components/schemas/OverrideDevMode"
@@ -3751,9 +3506,7 @@
3751
3506
  "footer_right_absolute"
3752
3507
  ]
3753
3508
  },
3754
- "default": [
3755
- "main"
3756
- ]
3509
+ "default": ["main"]
3757
3510
  }
3758
3511
  }
3759
3512
  }
@@ -3763,11 +3516,7 @@
3763
3516
  "allOf": [
3764
3517
  {
3765
3518
  "type": "object",
3766
- "required": [
3767
- "key",
3768
- "label",
3769
- "type"
3770
- ],
3519
+ "required": ["key", "label", "type"],
3771
3520
  "properties": {
3772
3521
  "key": {
3773
3522
  "type": "string",
@@ -3775,12 +3524,7 @@
3775
3524
  },
3776
3525
  "type": {
3777
3526
  "type": "string",
3778
- "enum": [
3779
- "text",
3780
- "boolean",
3781
- "enum",
3782
- "block_reference"
3783
- ]
3527
+ "enum": ["text", "boolean", "enum", "block_reference"]
3784
3528
  },
3785
3529
  "required": {
3786
3530
  "type": "boolean",
@@ -3842,9 +3586,7 @@
3842
3586
  "properties": {
3843
3587
  "type": {
3844
3588
  "type": "string",
3845
- "enum": [
3846
- "text"
3847
- ]
3589
+ "enum": ["text"]
3848
3590
  }
3849
3591
  }
3850
3592
  },
@@ -3853,9 +3595,7 @@
3853
3595
  "properties": {
3854
3596
  "type": {
3855
3597
  "type": "string",
3856
- "enum": [
3857
- "boolean"
3858
- ]
3598
+ "enum": ["boolean"]
3859
3599
  }
3860
3600
  }
3861
3601
  },
@@ -3865,9 +3605,7 @@
3865
3605
  "properties": {
3866
3606
  "type": {
3867
3607
  "type": "string",
3868
- "enum": [
3869
- "block_reference"
3870
- ]
3608
+ "enum": ["block_reference"]
3871
3609
  },
3872
3610
  "allowed_types": {
3873
3611
  "type": "array",
@@ -3880,15 +3618,11 @@
3880
3618
  },
3881
3619
  "EnumArg": {
3882
3620
  "type": "object",
3883
- "required": [
3884
- "options"
3885
- ],
3621
+ "required": ["options"],
3886
3622
  "properties": {
3887
3623
  "type": {
3888
3624
  "type": "string",
3889
- "enum": [
3890
- "enum"
3891
- ]
3625
+ "enum": ["enum"]
3892
3626
  },
3893
3627
  "isMulti": {
3894
3628
  "type": "boolean",
@@ -3901,10 +3635,7 @@
3901
3635
  "minItems": 1,
3902
3636
  "items": {
3903
3637
  "type": "object",
3904
- "required": [
3905
- "id",
3906
- "label"
3907
- ],
3638
+ "required": ["id", "label"],
3908
3639
  "properties": {
3909
3640
  "id": {
3910
3641
  "type": "string",
@@ -3927,12 +3658,7 @@
3927
3658
  },
3928
3659
  "BillingFrequency": {
3929
3660
  "type": "string",
3930
- "enum": [
3931
- "MONTHLY",
3932
- "QUARTERLY",
3933
- "YEARLY",
3934
- "CUSTOM"
3935
- ],
3661
+ "enum": ["MONTHLY", "QUARTERLY", "YEARLY", "CUSTOM"],
3936
3662
  "description": "How often the subscription is billed"
3937
3663
  },
3938
3664
  "Pricing": {
@@ -3989,11 +3715,7 @@
3989
3715
  },
3990
3716
  "review_status": {
3991
3717
  "type": "string",
3992
- "enum": [
3993
- "approved",
3994
- "rejected",
3995
- "pending"
3996
- ],
3718
+ "enum": ["approved", "rejected", "pending"],
3997
3719
  "description": "Status of the review"
3998
3720
  },
3999
3721
  "requested_at": {
@@ -4167,10 +3889,7 @@
4167
3889
  },
4168
3890
  "visibility": {
4169
3891
  "type": "string",
4170
- "enum": [
4171
- "public",
4172
- "private"
4173
- ],
3892
+ "enum": ["public", "private"],
4174
3893
  "description": "Visibility of the app version",
4175
3894
  "default": "private",
4176
3895
  "readOnly": true
@@ -4210,11 +3929,7 @@
4210
3929
  },
4211
3930
  "review_status": {
4212
3931
  "type": "string",
4213
- "enum": [
4214
- "approved",
4215
- "rejected",
4216
- "pending"
4217
- ],
3932
+ "enum": ["approved", "rejected", "pending"],
4218
3933
  "description": "Status of the review process"
4219
3934
  },
4220
3935
  "role": {
@@ -4251,11 +3966,7 @@
4251
3966
  "ApiProxyConfig": {
4252
3967
  "type": "object",
4253
3968
  "description": "Configuration for an API proxy component",
4254
- "required": [
4255
- "name",
4256
- "target",
4257
- "auth_type"
4258
- ],
3969
+ "required": ["name", "target", "auth_type"],
4259
3970
  "properties": {
4260
3971
  "name": {
4261
3972
  "type": "string",
@@ -4271,12 +3982,7 @@
4271
3982
  },
4272
3983
  "auth_type": {
4273
3984
  "type": "string",
4274
- "enum": [
4275
- "header",
4276
- "bearer",
4277
- "oauth2",
4278
- "none"
4279
- ],
3985
+ "enum": ["header", "bearer", "oauth2", "none"],
4280
3986
  "description": "Authentication strategy"
4281
3987
  },
4282
3988
  "auth_header": {
@@ -4296,9 +4002,7 @@
4296
4002
  "description": "Required grants for the app in order to call APIs for the installing tenant",
4297
4003
  "items": {
4298
4004
  "type": "object",
4299
- "required": [
4300
- "action"
4301
- ],
4005
+ "required": ["action"],
4302
4006
  "properties": {
4303
4007
  "action": {
4304
4008
  "type": "string",
@@ -4419,13 +4123,7 @@
4419
4123
  "PublicConfiguration": {
4420
4124
  "description": "Public configuration of the published app",
4421
4125
  "type": "object",
4422
- "required": [
4423
- "version",
4424
- "components",
4425
- "owner_org_id",
4426
- "app_id",
4427
- "name"
4428
- ],
4126
+ "required": ["version", "components", "owner_org_id", "app_id", "name"],
4429
4127
  "properties": {
4430
4128
  "app_id": {
4431
4129
  "type": "string",
@@ -4541,9 +4239,7 @@
4541
4239
  },
4542
4240
  "TranslatedString": {
4543
4241
  "type": "object",
4544
- "required": [
4545
- "de"
4546
- ],
4242
+ "required": ["de"],
4547
4243
  "properties": {
4548
4244
  "en": {
4549
4245
  "type": "string",
@@ -4579,15 +4275,11 @@
4579
4275
  "example": "api_5ZugdRXasLfWBypHi93Fk"
4580
4276
  }
4581
4277
  },
4582
- "required": [
4583
- "org_id"
4584
- ]
4278
+ "required": ["org_id"]
4585
4279
  },
4586
4280
  "BatchEventRequest": {
4587
4281
  "type": "object",
4588
- "required": [
4589
- "events"
4590
- ],
4282
+ "required": ["events"],
4591
4283
  "properties": {
4592
4284
  "events": {
4593
4285
  "type": "array",
@@ -4601,9 +4293,7 @@
4601
4293
  "Actor": {
4602
4294
  "type": "object",
4603
4295
  "readOnly": true,
4604
- "required": [
4605
- "type"
4606
- ],
4296
+ "required": ["type"],
4607
4297
  "properties": {
4608
4298
  "org_id": {
4609
4299
  "type": "string",
@@ -4616,10 +4306,7 @@
4616
4306
  "type": {
4617
4307
  "type": "string",
4618
4308
  "description": "Type of the actor (e.g., user, system)",
4619
- "enum": [
4620
- "user",
4621
- "system"
4622
- ]
4309
+ "enum": ["user", "system"]
4623
4310
  }
4624
4311
  }
4625
4312
  },
@@ -4658,11 +4345,7 @@
4658
4345
  },
4659
4346
  "event_type": {
4660
4347
  "type": "string",
4661
- "enum": [
4662
- "ERROR",
4663
- "WARNING",
4664
- "INFO"
4665
- ]
4348
+ "enum": ["ERROR", "WARNING", "INFO"]
4666
4349
  },
4667
4350
  "source": {
4668
4351
  "$ref": "#/components/schemas/ComponentType"
@@ -4695,13 +4378,7 @@
4695
4378
  },
4696
4379
  "preset": {
4697
4380
  "type": "string",
4698
- "enum": [
4699
- "1h",
4700
- "6h",
4701
- "24h",
4702
- "7d",
4703
- "30d"
4704
- ],
4381
+ "enum": ["1h", "6h", "24h", "7d", "30d"],
4705
4382
  "description": "Predefined time range (alternative to start/end)"
4706
4383
  }
4707
4384
  },
@@ -4728,11 +4405,7 @@
4728
4405
  "type": "array",
4729
4406
  "items": {
4730
4407
  "type": "string",
4731
- "enum": [
4732
- "ERROR",
4733
- "WARNING",
4734
- "INFO"
4735
- ]
4408
+ "enum": ["ERROR", "WARNING", "INFO"]
4736
4409
  },
4737
4410
  "description": "Filter by event types"
4738
4411
  },
@@ -4763,15 +4436,9 @@
4763
4436
  "type": "array",
4764
4437
  "items": {
4765
4438
  "type": "string",
4766
- "enum": [
4767
- "count",
4768
- "error_rate",
4769
- "unique_users"
4770
- ]
4439
+ "enum": ["count", "error_rate", "unique_users"]
4771
4440
  },
4772
- "default": [
4773
- "count"
4774
- ],
4441
+ "default": ["count"],
4775
4442
  "description": "Metrics to calculate"
4776
4443
  }
4777
4444
  }
@@ -4797,19 +4464,12 @@
4797
4464
  "properties": {
4798
4465
  "field": {
4799
4466
  "type": "string",
4800
- "enum": [
4801
- "timestamp",
4802
- "event_type",
4803
- "component_id"
4804
- ],
4467
+ "enum": ["timestamp", "event_type", "component_id"],
4805
4468
  "default": "timestamp"
4806
4469
  },
4807
4470
  "order": {
4808
4471
  "type": "string",
4809
- "enum": [
4810
- "asc",
4811
- "desc"
4812
- ],
4472
+ "enum": ["asc", "desc"],
4813
4473
  "default": "desc"
4814
4474
  }
4815
4475
  }
@@ -4856,9 +4516,7 @@
4856
4516
  "properties": {
4857
4517
  "type": {
4858
4518
  "type": "string",
4859
- "enum": [
4860
- "raw"
4861
- ]
4519
+ "enum": ["raw"]
4862
4520
  },
4863
4521
  "events": {
4864
4522
  "type": "array",
@@ -4873,9 +4531,7 @@
4873
4531
  "properties": {
4874
4532
  "type": {
4875
4533
  "type": "string",
4876
- "enum": [
4877
- "aggregated"
4878
- ]
4534
+ "enum": ["aggregated"]
4879
4535
  },
4880
4536
  "groups": {
4881
4537
  "type": "array",