@epilot/app-client 0.13.2 → 0.13.4

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,7 +67,9 @@
67
67
  "summary": "getPublicFacingComponent",
68
68
  "description": "Retrieve public facing components for an installed app",
69
69
  "operationId": "getPublicFacingComponent",
70
- "tags": ["App Installation"],
70
+ "tags": [
71
+ "App Installation"
72
+ ],
71
73
  "responses": {
72
74
  "200": {
73
75
  "description": "Successful response with public app component details",
@@ -95,7 +97,9 @@
95
97
  "summary": "listConfigurations",
96
98
  "description": "List all app configuration metadata owned by an organization. To get full app configuration details, use the /v1/app-configurations/{appId} endpoint.",
97
99
  "operationId": "listConfigurations",
98
- "tags": ["App Configuration"],
100
+ "tags": [
101
+ "App Configuration"
102
+ ],
99
103
  "parameters": [
100
104
  {
101
105
  "name": "page",
@@ -155,7 +159,9 @@
155
159
  "summary": "createConfiguration",
156
160
  "description": "Create a new private app configuration. To make it public a verification process needs to be triggered",
157
161
  "operationId": "createConfiguration",
158
- "tags": ["App Configuration"],
162
+ "tags": [
163
+ "App Configuration"
164
+ ],
159
165
  "requestBody": {
160
166
  "$ref": "#/components/requestBodies/CreateConfigRequest"
161
167
  },
@@ -166,7 +172,9 @@
166
172
  "application/json": {
167
173
  "schema": {
168
174
  "type": "object",
169
- "required": ["app_id"],
175
+ "required": [
176
+ "app_id"
177
+ ],
170
178
  "properties": {
171
179
  "app_id": {
172
180
  "type": "string"
@@ -184,7 +192,9 @@
184
192
  "summary": "listPublicConfigurations",
185
193
  "description": "List all publicly available app configurations that can be installed. This endpoint returns apps that have at least one public version.",
186
194
  "operationId": "listPublicConfigurations",
187
- "tags": ["App Configuration"],
195
+ "tags": [
196
+ "App Configuration"
197
+ ],
188
198
  "parameters": [
189
199
  {
190
200
  "name": "page",
@@ -257,7 +267,9 @@
257
267
  "summary": "getPublicConfiguration",
258
268
  "description": "Retrieve the public configuration of an app to install in your tenant",
259
269
  "operationId": "getPublicConfiguration",
260
- "tags": ["App Configuration"],
270
+ "tags": [
271
+ "App Configuration"
272
+ ],
261
273
  "parameters": [
262
274
  {
263
275
  "name": "version",
@@ -301,7 +313,9 @@
301
313
  "summary": "getConfiguration",
302
314
  "description": "Retrieve a specific app configuration",
303
315
  "operationId": "getConfiguration",
304
- "tags": ["App Configuration"],
316
+ "tags": [
317
+ "App Configuration"
318
+ ],
305
319
  "parameters": [
306
320
  {
307
321
  "name": "version",
@@ -332,7 +346,9 @@
332
346
  "summary": "patchMetadata",
333
347
  "description": "Patch non-versioned configuration metadata of a given app configuration.",
334
348
  "operationId": "patchMetadata",
335
- "tags": ["App Configuration"],
349
+ "tags": [
350
+ "App Configuration"
351
+ ],
336
352
  "requestBody": {
337
353
  "$ref": "#/components/requestBodies/PatchConfigMetadataRequest"
338
354
  },
@@ -349,7 +365,9 @@
349
365
  "summary": "Delete app configuration",
350
366
  "description": "Delete an app configuration and all its versions and components.",
351
367
  "operationId": "deleteConfiguration",
352
- "tags": ["App Configuration"],
368
+ "tags": [
369
+ "App Configuration"
370
+ ],
353
371
  "responses": {
354
372
  "204": {
355
373
  "description": "App configuration deleted successfully"
@@ -365,7 +383,9 @@
365
383
  "summary": "queryEvents",
366
384
  "description": "Query analytics events for a specific app with flexible filtering",
367
385
  "operationId": "queryEvents",
368
- "tags": ["App Analytics"],
386
+ "tags": [
387
+ "App Analytics"
388
+ ],
369
389
  "parameters": [
370
390
  {
371
391
  "name": "appId",
@@ -412,7 +432,9 @@
412
432
  "summary": "createBundleUploadUrl",
413
433
  "description": "Generate a presigned URL for uploading app bundle to /<app-id>/bundle.js path",
414
434
  "operationId": "createBundleUploadUrl",
415
- "tags": ["App Configuration"],
435
+ "tags": [
436
+ "App Configuration"
437
+ ],
416
438
  "parameters": [
417
439
  {
418
440
  "name": "appId",
@@ -434,7 +456,9 @@
434
456
  "application/json": {
435
457
  "schema": {
436
458
  "type": "object",
437
- "required": ["upload_url"],
459
+ "required": [
460
+ "upload_url"
461
+ ],
438
462
  "properties": {
439
463
  "component_id": {
440
464
  "type": "string",
@@ -472,7 +496,9 @@
472
496
  "summary": "createZipUploadUrl",
473
497
  "operationId": "createZipUploadUrl",
474
498
  "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",
475
- "tags": ["App Configuration"],
499
+ "tags": [
500
+ "App Configuration"
501
+ ],
476
502
  "parameters": [
477
503
  {
478
504
  "name": "appId",
@@ -516,7 +542,10 @@
516
542
  "application/json": {
517
543
  "schema": {
518
544
  "type": "object",
519
- "required": ["upload_url", "artifact_url"],
545
+ "required": [
546
+ "upload_url",
547
+ "artifact_url"
548
+ ],
520
549
  "properties": {
521
550
  "component_id": {
522
551
  "type": "string",
@@ -565,7 +594,9 @@
565
594
  "summary": "createLogoUploadUrl",
566
595
  "description": "Generate a presigned URL for uploading app logo to /<app-id>/logo.png path",
567
596
  "operationId": "createLogoUploadUrl",
568
- "tags": ["App Configuration"],
597
+ "tags": [
598
+ "App Configuration"
599
+ ],
569
600
  "requestBody": {
570
601
  "$ref": "#/components/requestBodies/CreateLogoPresignedRequest"
571
602
  },
@@ -576,7 +607,9 @@
576
607
  "application/json": {
577
608
  "schema": {
578
609
  "type": "object",
579
- "required": ["upload_url"],
610
+ "required": [
611
+ "upload_url"
612
+ ],
580
613
  "properties": {
581
614
  "upload_url": {
582
615
  "type": "string",
@@ -604,7 +637,9 @@
604
637
  "summary": "deleteLogo",
605
638
  "description": "Delete the app logo from /<app-id>/logo.png path",
606
639
  "operationId": "deleteLogo",
607
- "tags": ["App Configuration"],
640
+ "tags": [
641
+ "App Configuration"
642
+ ],
608
643
  "responses": {
609
644
  "204": {
610
645
  "description": "Logo deleted successfully"
@@ -620,7 +655,9 @@
620
655
  "summary": "listVersions",
621
656
  "description": "Retrieve a list of versions for an app configuration",
622
657
  "operationId": "listVersions",
623
- "tags": ["App Configuration"],
658
+ "tags": [
659
+ "App Configuration"
660
+ ],
624
661
  "parameters": [
625
662
  {
626
663
  "name": "appId",
@@ -694,7 +731,9 @@
694
731
  "summary": "getVersion",
695
732
  "description": "Retrieve a specific version of an app configuration",
696
733
  "operationId": "getVersion",
697
- "tags": ["App Configuration"],
734
+ "tags": [
735
+ "App Configuration"
736
+ ],
698
737
  "parameters": [
699
738
  {
700
739
  "name": "appId",
@@ -735,7 +774,9 @@
735
774
  "summary": "deleteVersion",
736
775
  "description": "Delete a specific version of an app configuration",
737
776
  "operationId": "deleteVersion",
738
- "tags": ["App Configuration"],
777
+ "tags": [
778
+ "App Configuration"
779
+ ],
739
780
  "parameters": [
740
781
  {
741
782
  "name": "appId",
@@ -775,7 +816,9 @@
775
816
  "summary": "patchVersion",
776
817
  "description": "Patch an existing app version",
777
818
  "operationId": "patchVersion",
778
- "tags": ["App Configuration"],
819
+ "tags": [
820
+ "App Configuration"
821
+ ],
779
822
  "parameters": [
780
823
  {
781
824
  "name": "appId",
@@ -817,7 +860,9 @@
817
860
  "summary": "getReview",
818
861
  "description": "Retrieve the review status of a specific app version",
819
862
  "operationId": "getReview",
820
- "tags": ["App Configuration"],
863
+ "tags": [
864
+ "App Configuration"
865
+ ],
821
866
  "parameters": [
822
867
  {
823
868
  "name": "appId",
@@ -863,7 +908,9 @@
863
908
  "summary": "createReview",
864
909
  "description": "Submit an app version for review to make it public",
865
910
  "operationId": "createReview",
866
- "tags": ["App Configuration"],
911
+ "tags": [
912
+ "App Configuration"
913
+ ],
867
914
  "parameters": [
868
915
  {
869
916
  "name": "appId",
@@ -917,7 +964,9 @@
917
964
  "summary": "createComponent",
918
965
  "description": "Patch an existing app version to create/add a component",
919
966
  "operationId": "createComponent",
920
- "tags": ["App Configuration"],
967
+ "tags": [
968
+ "App Configuration"
969
+ ],
921
970
  "parameters": [
922
971
  {
923
972
  "name": "appId",
@@ -971,7 +1020,9 @@
971
1020
  "summary": "patchComponent",
972
1021
  "description": "Patch an existing app version to update its components",
973
1022
  "operationId": "patchComponent",
974
- "tags": ["App Configuration"],
1023
+ "tags": [
1024
+ "App Configuration"
1025
+ ],
975
1026
  "parameters": [
976
1027
  {
977
1028
  "name": "appId",
@@ -1020,7 +1071,9 @@
1020
1071
  "summary": "deleteComponent",
1021
1072
  "description": "Delete a specific component from an app version",
1022
1073
  "operationId": "deleteComponent",
1023
- "tags": ["App Configuration"],
1074
+ "tags": [
1075
+ "App Configuration"
1076
+ ],
1024
1077
  "parameters": [
1025
1078
  {
1026
1079
  "name": "appId",
@@ -1065,7 +1118,9 @@
1065
1118
  "summary": "cloneVersion",
1066
1119
  "description": "Clone an existing app version to create a new version",
1067
1120
  "operationId": "cloneVersion",
1068
- "tags": ["App Configuration"],
1121
+ "tags": [
1122
+ "App Configuration"
1123
+ ],
1069
1124
  "parameters": [
1070
1125
  {
1071
1126
  "name": "appId",
@@ -1111,7 +1166,10 @@
1111
1166
  },
1112
1167
  "status": {
1113
1168
  "type": "string",
1114
- "enum": ["pending", "published"]
1169
+ "enum": [
1170
+ "pending",
1171
+ "published"
1172
+ ]
1115
1173
  }
1116
1174
  }
1117
1175
  }
@@ -1132,7 +1190,9 @@
1132
1190
  "summary": "listInstallations",
1133
1191
  "description": "Retrieve a list of installed apps for the organization.",
1134
1192
  "operationId": "listInstallations",
1135
- "tags": ["App Installation"],
1193
+ "tags": [
1194
+ "App Installation"
1195
+ ],
1136
1196
  "parameters": [
1137
1197
  {
1138
1198
  "name": "componentType",
@@ -1211,7 +1271,9 @@
1211
1271
  "summary": "getInstallation",
1212
1272
  "description": "Retrieve details of an installed app by its ID.",
1213
1273
  "operationId": "getInstallation",
1214
- "tags": ["App Installation"],
1274
+ "tags": [
1275
+ "App Installation"
1276
+ ],
1215
1277
  "parameters": [
1216
1278
  {
1217
1279
  "name": "appId",
@@ -1242,7 +1304,9 @@
1242
1304
  "summary": "install",
1243
1305
  "description": "Upsert app installation by its ID.",
1244
1306
  "operationId": "install",
1245
- "tags": ["App Installation"],
1307
+ "tags": [
1308
+ "App Installation"
1309
+ ],
1246
1310
  "parameters": [
1247
1311
  {
1248
1312
  "name": "appId",
@@ -1276,7 +1340,9 @@
1276
1340
  "summary": "patchInstallation",
1277
1341
  "description": "Patch an installed app by its ID.",
1278
1342
  "operationId": "patchInstallation",
1279
- "tags": ["App Installation"],
1343
+ "tags": [
1344
+ "App Installation"
1345
+ ],
1280
1346
  "parameters": [
1281
1347
  {
1282
1348
  "name": "appId",
@@ -1303,7 +1369,9 @@
1303
1369
  "summary": "uninstall",
1304
1370
  "description": "Uninstall an app by its ID.",
1305
1371
  "operationId": "uninstall",
1306
- "tags": ["App Installation"],
1372
+ "tags": [
1373
+ "App Installation"
1374
+ ],
1307
1375
  "parameters": [
1308
1376
  {
1309
1377
  "name": "appId",
@@ -1329,7 +1397,9 @@
1329
1397
  "summary": "promoteVersion",
1330
1398
  "description": "Update an installed app to a new version",
1331
1399
  "operationId": "promoteVersion",
1332
- "tags": ["App Installation"],
1400
+ "tags": [
1401
+ "App Installation"
1402
+ ],
1333
1403
  "parameters": [
1334
1404
  {
1335
1405
  "name": "appId",
@@ -1373,7 +1443,9 @@
1373
1443
  "summary": "ingestEvent",
1374
1444
  "operationId": "ingestEvent",
1375
1445
  "description": "Internal endpoint for services to submit app events for analytic purposes",
1376
- "tags": ["App Analytics"],
1446
+ "tags": [
1447
+ "App Analytics"
1448
+ ],
1377
1449
  "requestBody": {
1378
1450
  "required": true,
1379
1451
  "content": {
@@ -1435,7 +1507,9 @@
1435
1507
  "summary": "publicProxyGet",
1436
1508
  "operationId": "publicProxyGet",
1437
1509
  "description": "Forward a GET request to a registered proxy target from a public-facing component (e.g. journey blocks)",
1438
- "tags": ["App Proxy"],
1510
+ "tags": [
1511
+ "App Proxy"
1512
+ ],
1439
1513
  "security": [
1440
1514
  {
1441
1515
  "EpilotAuth": []
@@ -1460,7 +1534,9 @@
1460
1534
  "summary": "publicProxyPost",
1461
1535
  "operationId": "publicProxyPost",
1462
1536
  "description": "Forward a POST request to a registered proxy target from a public-facing component (e.g. journey blocks)",
1463
- "tags": ["App Proxy"],
1537
+ "tags": [
1538
+ "App Proxy"
1539
+ ],
1464
1540
  "security": [
1465
1541
  {
1466
1542
  "EpilotAuth": []
@@ -1500,7 +1576,10 @@
1500
1576
  "application/json": {
1501
1577
  "schema": {
1502
1578
  "type": "object",
1503
- "required": ["technical_contact", "marketing_contact"],
1579
+ "required": [
1580
+ "technical_contact",
1581
+ "marketing_contact"
1582
+ ],
1504
1583
  "properties": {
1505
1584
  "technical_contact": {
1506
1585
  "type": "string",
@@ -1525,7 +1604,10 @@
1525
1604
  "application/json": {
1526
1605
  "schema": {
1527
1606
  "type": "object",
1528
- "required": ["filename", "mime_type"],
1607
+ "required": [
1608
+ "filename",
1609
+ "mime_type"
1610
+ ],
1529
1611
  "properties": {
1530
1612
  "filename": {
1531
1613
  "type": "string",
@@ -1535,7 +1617,11 @@
1535
1617
  "mime_type": {
1536
1618
  "type": "string",
1537
1619
  "description": "MIME type of the logo file",
1538
- "enum": ["image/png", "image/jpeg", "image/jpg"],
1620
+ "enum": [
1621
+ "image/png",
1622
+ "image/jpeg",
1623
+ "image/jpg"
1624
+ ],
1539
1625
  "example": "image/png"
1540
1626
  }
1541
1627
  }
@@ -1549,7 +1635,9 @@
1549
1635
  "application/json": {
1550
1636
  "schema": {
1551
1637
  "type": "object",
1552
- "required": ["version"],
1638
+ "required": [
1639
+ "version"
1640
+ ],
1553
1641
  "properties": {
1554
1642
  "version": {
1555
1643
  "type": "string",
@@ -1647,7 +1735,10 @@
1647
1735
  "application/json": {
1648
1736
  "schema": {
1649
1737
  "type": "object",
1650
- "required": ["name", "description"],
1738
+ "required": [
1739
+ "name",
1740
+ "description"
1741
+ ],
1651
1742
  "properties": {
1652
1743
  "name": {
1653
1744
  "type": "string",
@@ -1730,7 +1821,10 @@
1730
1821
  "Options": {
1731
1822
  "type": "object",
1732
1823
  "description": "Options for the component configuration",
1733
- "required": ["key", "type"],
1824
+ "required": [
1825
+ "key",
1826
+ "type"
1827
+ ],
1734
1828
  "properties": {
1735
1829
  "key": {
1736
1830
  "type": "string",
@@ -1764,7 +1858,13 @@
1764
1858
  },
1765
1859
  "type": {
1766
1860
  "type": "string",
1767
- "enum": ["text", "number", "boolean", "secret", "object"],
1861
+ "enum": [
1862
+ "text",
1863
+ "number",
1864
+ "boolean",
1865
+ "secret",
1866
+ "object"
1867
+ ],
1768
1868
  "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"
1769
1869
  }
1770
1870
  }
@@ -1772,7 +1872,10 @@
1772
1872
  "ObjectField": {
1773
1873
  "type": "object",
1774
1874
  "description": "One declared field inside a `type: object` option. Fields are primitives — object nesting\nis not supported.\n",
1775
- "required": ["key", "type"],
1875
+ "required": [
1876
+ "key",
1877
+ "type"
1878
+ ],
1776
1879
  "properties": {
1777
1880
  "key": {
1778
1881
  "type": "string",
@@ -1792,14 +1895,22 @@
1792
1895
  },
1793
1896
  "type": {
1794
1897
  "type": "string",
1795
- "enum": ["text", "number", "boolean", "secret"],
1898
+ "enum": [
1899
+ "text",
1900
+ "number",
1901
+ "boolean",
1902
+ "secret"
1903
+ ],
1796
1904
  "description": "Primitive type of this field."
1797
1905
  }
1798
1906
  }
1799
1907
  },
1800
1908
  "Option": {
1801
1909
  "type": "object",
1802
- "required": ["key", "value"],
1910
+ "required": [
1911
+ "key",
1912
+ "value"
1913
+ ],
1803
1914
  "properties": {
1804
1915
  "key": {
1805
1916
  "type": "string",
@@ -1812,7 +1923,10 @@
1812
1923
  },
1813
1924
  "OptionsRef": {
1814
1925
  "type": "object",
1815
- "required": ["component_id", "options"],
1926
+ "required": [
1927
+ "component_id",
1928
+ "options"
1929
+ ],
1816
1930
  "properties": {
1817
1931
  "component_id": {
1818
1932
  "type": "string",
@@ -1840,7 +1954,10 @@
1840
1954
  "example": "manifest.json"
1841
1955
  }
1842
1956
  },
1843
- "required": ["bucket", "key"]
1957
+ "required": [
1958
+ "bucket",
1959
+ "key"
1960
+ ]
1844
1961
  },
1845
1962
  "ComponentType": {
1846
1963
  "type": "string",
@@ -1859,7 +1976,9 @@
1859
1976
  },
1860
1977
  "Author": {
1861
1978
  "type": "object",
1862
- "required": ["company"],
1979
+ "required": [
1980
+ "company"
1981
+ ],
1863
1982
  "properties": {
1864
1983
  "name": {
1865
1984
  "type": "string",
@@ -1899,11 +2018,16 @@
1899
2018
  },
1900
2019
  "NotificationEvent": {
1901
2020
  "type": "string",
1902
- "enum": ["app.installed", "app.uninstalled"]
2021
+ "enum": [
2022
+ "app.installed",
2023
+ "app.uninstalled"
2024
+ ]
1903
2025
  },
1904
2026
  "BaseComponentCommon": {
1905
2027
  "type": "object",
1906
- "required": ["id"],
2028
+ "required": [
2029
+ "id"
2030
+ ],
1907
2031
  "properties": {
1908
2032
  "id": {
1909
2033
  "type": "string",
@@ -1996,11 +2120,16 @@
1996
2120
  },
1997
2121
  "ApiProxyComponent": {
1998
2122
  "type": "object",
1999
- "required": ["component_type", "configuration"],
2123
+ "required": [
2124
+ "component_type",
2125
+ "configuration"
2126
+ ],
2000
2127
  "properties": {
2001
2128
  "component_type": {
2002
2129
  "type": "string",
2003
- "enum": ["API_PROXY"]
2130
+ "enum": [
2131
+ "API_PROXY"
2132
+ ]
2004
2133
  },
2005
2134
  "configuration": {
2006
2135
  "$ref": "#/components/schemas/ApiProxyConfig"
@@ -2009,11 +2138,16 @@
2009
2138
  },
2010
2139
  "CustomCapabilityComponent": {
2011
2140
  "type": "object",
2012
- "required": ["component_type", "configuration"],
2141
+ "required": [
2142
+ "component_type",
2143
+ "configuration"
2144
+ ],
2013
2145
  "properties": {
2014
2146
  "component_type": {
2015
2147
  "type": "string",
2016
- "enum": ["CUSTOM_CAPABILITY"]
2148
+ "enum": [
2149
+ "CUSTOM_CAPABILITY"
2150
+ ]
2017
2151
  },
2018
2152
  "configuration": {
2019
2153
  "type": "object",
@@ -2021,7 +2155,10 @@
2021
2155
  "type": {
2022
2156
  "description": "Define what type of capability this is",
2023
2157
  "type": "string",
2024
- "enum": ["tab", "group"]
2158
+ "enum": [
2159
+ "tab",
2160
+ "group"
2161
+ ]
2025
2162
  },
2026
2163
  "allowed_schemas": {
2027
2164
  "description": "Which schemas are supported by the capability. If empty, all schemas are supported.",
@@ -2046,11 +2183,16 @@
2046
2183
  },
2047
2184
  "CustomPageComponent": {
2048
2185
  "type": "object",
2049
- "required": ["component_type", "configuration"],
2186
+ "required": [
2187
+ "component_type",
2188
+ "configuration"
2189
+ ],
2050
2190
  "properties": {
2051
2191
  "component_type": {
2052
2192
  "type": "string",
2053
- "enum": ["CUSTOM_PAGE"]
2193
+ "enum": [
2194
+ "CUSTOM_PAGE"
2195
+ ]
2054
2196
  },
2055
2197
  "configuration": {
2056
2198
  "$ref": "#/components/schemas/CustomPageConfig"
@@ -2067,7 +2209,9 @@
2067
2209
  },
2068
2210
  "CustomPageConfig": {
2069
2211
  "type": "object",
2070
- "required": ["slug"],
2212
+ "required": [
2213
+ "slug"
2214
+ ],
2071
2215
  "properties": {
2072
2216
  "slug": {
2073
2217
  "type": "string",
@@ -2093,11 +2237,16 @@
2093
2237
  },
2094
2238
  "JourneyBlockComponent": {
2095
2239
  "type": "object",
2096
- "required": ["component_type", "configuration"],
2240
+ "required": [
2241
+ "component_type",
2242
+ "configuration"
2243
+ ],
2097
2244
  "properties": {
2098
2245
  "component_type": {
2099
2246
  "type": "string",
2100
- "enum": ["CUSTOM_JOURNEY_BLOCK"]
2247
+ "enum": [
2248
+ "CUSTOM_JOURNEY_BLOCK"
2249
+ ]
2101
2250
  },
2102
2251
  "configuration": {
2103
2252
  "$ref": "#/components/schemas/JourneyBlockConfig"
@@ -2106,11 +2255,16 @@
2106
2255
  },
2107
2256
  "PortalBlockComponent": {
2108
2257
  "type": "object",
2109
- "required": ["component_type", "configuration"],
2258
+ "required": [
2259
+ "component_type",
2260
+ "configuration"
2261
+ ],
2110
2262
  "properties": {
2111
2263
  "component_type": {
2112
2264
  "type": "string",
2113
- "enum": ["CUSTOM_PORTAL_BLOCK"]
2265
+ "enum": [
2266
+ "CUSTOM_PORTAL_BLOCK"
2267
+ ]
2114
2268
  },
2115
2269
  "configuration": {
2116
2270
  "$ref": "#/components/schemas/PortalBlockConfig"
@@ -2127,19 +2281,29 @@
2127
2281
  },
2128
2282
  "ErpInformToolkitComponent": {
2129
2283
  "type": "object",
2130
- "required": ["component_type", "configuration"],
2284
+ "required": [
2285
+ "component_type",
2286
+ "configuration"
2287
+ ],
2131
2288
  "properties": {
2132
2289
  "component_type": {
2133
2290
  "type": "string",
2134
- "enum": ["ERP_INFORM_TOOLKIT"]
2291
+ "enum": [
2292
+ "ERP_INFORM_TOOLKIT"
2293
+ ]
2135
2294
  },
2136
2295
  "configuration": {
2137
2296
  "type": "object",
2138
- "required": ["type"],
2297
+ "required": [
2298
+ "type"
2299
+ ],
2139
2300
  "properties": {
2140
2301
  "type": {
2141
2302
  "type": "string",
2142
- "enum": ["inbound", "outbound"]
2303
+ "enum": [
2304
+ "inbound",
2305
+ "outbound"
2306
+ ]
2143
2307
  }
2144
2308
  }
2145
2309
  }
@@ -2147,11 +2311,16 @@
2147
2311
  },
2148
2312
  "CustomFlowActionComponent": {
2149
2313
  "type": "object",
2150
- "required": ["component_type", "configuration"],
2314
+ "required": [
2315
+ "component_type",
2316
+ "configuration"
2317
+ ],
2151
2318
  "properties": {
2152
2319
  "component_type": {
2153
2320
  "type": "string",
2154
- "enum": ["CUSTOM_FLOW_ACTION"]
2321
+ "enum": [
2322
+ "CUSTOM_FLOW_ACTION"
2323
+ ]
2155
2324
  },
2156
2325
  "configuration": {
2157
2326
  "$ref": "#/components/schemas/CustomFlowConfig"
@@ -2193,7 +2362,9 @@
2193
2362
  "properties": {
2194
2363
  "type": {
2195
2364
  "type": "string",
2196
- "enum": ["external_integration"]
2365
+ "enum": [
2366
+ "external_integration"
2367
+ ]
2197
2368
  },
2198
2369
  "external_integration_settings": {
2199
2370
  "type": "object",
@@ -2209,7 +2380,9 @@
2209
2380
  }
2210
2381
  }
2211
2382
  },
2212
- "required": ["type"]
2383
+ "required": [
2384
+ "type"
2385
+ ]
2213
2386
  }
2214
2387
  ]
2215
2388
  },
@@ -2223,7 +2396,9 @@
2223
2396
  "properties": {
2224
2397
  "type": {
2225
2398
  "type": "string",
2226
- "enum": ["sandbox"]
2399
+ "enum": [
2400
+ "sandbox"
2401
+ ]
2227
2402
  },
2228
2403
  "sandbox_settings": {
2229
2404
  "type": "object",
@@ -2236,7 +2411,9 @@
2236
2411
  }
2237
2412
  }
2238
2413
  },
2239
- "required": ["type"]
2414
+ "required": [
2415
+ "type"
2416
+ ]
2240
2417
  }
2241
2418
  ]
2242
2419
  },
@@ -2260,11 +2437,16 @@
2260
2437
  },
2261
2438
  "ExternalProductCatalogComponent": {
2262
2439
  "type": "object",
2263
- "required": ["component_type", "configuration"],
2440
+ "required": [
2441
+ "component_type",
2442
+ "configuration"
2443
+ ],
2264
2444
  "properties": {
2265
2445
  "component_type": {
2266
2446
  "type": "string",
2267
- "enum": ["EXTERNAL_PRODUCT_CATALOG"]
2447
+ "enum": [
2448
+ "EXTERNAL_PRODUCT_CATALOG"
2449
+ ]
2268
2450
  },
2269
2451
  "configuration": {
2270
2452
  "$ref": "#/components/schemas/ExternalProductCatalogConfig"
@@ -2312,7 +2494,9 @@
2312
2494
  },
2313
2495
  "type": {
2314
2496
  "type": "string",
2315
- "enum": ["products"]
2497
+ "enum": [
2498
+ "products"
2499
+ ]
2316
2500
  },
2317
2501
  "auth": {
2318
2502
  "$ref": "#/components/schemas/ExternalProductCatalogAuthBlock"
@@ -2351,11 +2535,17 @@
2351
2535
  "additionalProperties": true
2352
2536
  }
2353
2537
  },
2354
- "required": ["url"],
2538
+ "required": [
2539
+ "url"
2540
+ ],
2355
2541
  "additionalProperties": false
2356
2542
  }
2357
2543
  },
2358
- "required": ["type", "call", "id"],
2544
+ "required": [
2545
+ "type",
2546
+ "call",
2547
+ "id"
2548
+ ],
2359
2549
  "additionalProperties": false
2360
2550
  },
2361
2551
  "ExternalProductCatalogHookProductRecommendations": {
@@ -2372,7 +2562,9 @@
2372
2562
  },
2373
2563
  "type": {
2374
2564
  "type": "string",
2375
- "enum": ["product-recommendations"]
2565
+ "enum": [
2566
+ "product-recommendations"
2567
+ ]
2376
2568
  },
2377
2569
  "auth": {
2378
2570
  "$ref": "#/components/schemas/ExternalProductCatalogAuthBlock"
@@ -2411,20 +2603,31 @@
2411
2603
  "additionalProperties": true
2412
2604
  }
2413
2605
  },
2414
- "required": ["url"],
2606
+ "required": [
2607
+ "url"
2608
+ ],
2415
2609
  "additionalProperties": false
2416
2610
  }
2417
2611
  },
2418
- "required": ["type", "call", "id"],
2612
+ "required": [
2613
+ "type",
2614
+ "call",
2615
+ "id"
2616
+ ],
2419
2617
  "additionalProperties": false
2420
2618
  },
2421
2619
  "PortalExtensionComponent": {
2422
2620
  "type": "object",
2423
- "required": ["component_type", "configuration"],
2621
+ "required": [
2622
+ "component_type",
2623
+ "configuration"
2624
+ ],
2424
2625
  "properties": {
2425
2626
  "component_type": {
2426
2627
  "type": "string",
2427
- "enum": ["PORTAL_EXTENSION"]
2628
+ "enum": [
2629
+ "PORTAL_EXTENSION"
2630
+ ]
2428
2631
  },
2429
2632
  "configuration": {
2430
2633
  "$ref": "#/components/schemas/PortalExtensionConfig"
@@ -2448,7 +2651,10 @@
2448
2651
  "dataExport": "#/components/schemas/PortalExtensionHookDataExport",
2449
2652
  "costDataRetrieval": "#/components/schemas/PortalExtensionHookCostDataRetrieval",
2450
2653
  "meterReadingPlausibilityCheck": "#/components/schemas/PortalExtensionHookMeterReadingPlausibilityCheck",
2451
- "visualizationMetadata": "#/components/schemas/PortalExtensionHookVisualizationMetadata"
2654
+ "visualizationMetadata": "#/components/schemas/PortalExtensionHookVisualizationMetadata",
2655
+ "changeEmail": "#/components/schemas/PortalExtensionHookChangeEmail",
2656
+ "changePassword": "#/components/schemas/PortalExtensionHookChangePassword",
2657
+ "deleteAccount": "#/components/schemas/PortalExtensionHookDeleteAccount"
2452
2658
  }
2453
2659
  },
2454
2660
  "oneOf": [
@@ -2475,6 +2681,15 @@
2475
2681
  },
2476
2682
  {
2477
2683
  "$ref": "#/components/schemas/PortalExtensionHookVisualizationMetadata"
2684
+ },
2685
+ {
2686
+ "$ref": "#/components/schemas/PortalExtensionHookChangeEmail"
2687
+ },
2688
+ {
2689
+ "$ref": "#/components/schemas/PortalExtensionHookChangePassword"
2690
+ },
2691
+ {
2692
+ "$ref": "#/components/schemas/PortalExtensionHookDeleteAccount"
2478
2693
  }
2479
2694
  ]
2480
2695
  }
@@ -2506,7 +2721,9 @@
2506
2721
  },
2507
2722
  "type": {
2508
2723
  "type": "string",
2509
- "enum": ["registrationIdentifiersCheck"]
2724
+ "enum": [
2725
+ "registrationIdentifiersCheck"
2726
+ ]
2510
2727
  },
2511
2728
  "auth": {
2512
2729
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
@@ -2549,7 +2766,11 @@
2549
2766
  "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
2767
  }
2551
2768
  },
2552
- "required": ["url", "headers", "result"],
2769
+ "required": [
2770
+ "url",
2771
+ "headers",
2772
+ "result"
2773
+ ],
2553
2774
  "additionalProperties": false
2554
2775
  },
2555
2776
  "resolved": {
@@ -2559,7 +2780,7 @@
2559
2780
  "type": "string",
2560
2781
  "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
2782
  },
2562
- "errorMessagePath": {
2783
+ "error_message_path": {
2563
2784
  "type": "string",
2564
2785
  "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
2786
  "example": "error.message"
@@ -2577,7 +2798,11 @@
2577
2798
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
2578
2799
  }
2579
2800
  },
2580
- "required": ["id", "type", "call"],
2801
+ "required": [
2802
+ "id",
2803
+ "type",
2804
+ "call"
2805
+ ],
2581
2806
  "additionalProperties": false
2582
2807
  },
2583
2808
  "PortalExtensionHookContractIdentification": {
@@ -2594,7 +2819,9 @@
2594
2819
  },
2595
2820
  "type": {
2596
2821
  "type": "string",
2597
- "enum": ["contractIdentification"]
2822
+ "enum": [
2823
+ "contractIdentification"
2824
+ ]
2598
2825
  },
2599
2826
  "auth": {
2600
2827
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
@@ -2637,7 +2864,10 @@
2637
2864
  "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
2865
  }
2639
2866
  },
2640
- "required": ["url", "headers"],
2867
+ "required": [
2868
+ "url",
2869
+ "headers"
2870
+ ],
2641
2871
  "additionalProperties": false
2642
2872
  },
2643
2873
  "resolved": {
@@ -2647,7 +2877,7 @@
2647
2877
  "type": "string",
2648
2878
  "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
2879
  },
2650
- "errorMessagePath": {
2880
+ "error_message_path": {
2651
2881
  "type": "string",
2652
2882
  "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
2883
  "example": "error.message"
@@ -2683,7 +2913,9 @@
2683
2913
  "type": "string",
2684
2914
  "description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
2685
2915
  },
2686
- "required": ["en"],
2916
+ "required": [
2917
+ "en"
2918
+ ],
2687
2919
  "description": "Explanation of the hook."
2688
2920
  },
2689
2921
  "use_static_ips": {
@@ -2696,7 +2928,11 @@
2696
2928
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
2697
2929
  }
2698
2930
  },
2699
- "required": ["id", "type", "call"],
2931
+ "required": [
2932
+ "id",
2933
+ "type",
2934
+ "call"
2935
+ ],
2700
2936
  "additionalProperties": false
2701
2937
  },
2702
2938
  "PortalExtensionHookMeterReadingPlausibilityCheck": {
@@ -2713,11 +2949,16 @@
2713
2949
  },
2714
2950
  "type": {
2715
2951
  "type": "string",
2716
- "enum": ["meterReadingPlausibilityCheck"]
2952
+ "enum": [
2953
+ "meterReadingPlausibilityCheck"
2954
+ ]
2717
2955
  },
2718
2956
  "plausibility_mode": {
2719
2957
  "type": "string",
2720
- "enum": ["check", "range"],
2958
+ "enum": [
2959
+ "check",
2960
+ "range"
2961
+ ],
2721
2962
  "default": "check",
2722
2963
  "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"
2723
2964
  },
@@ -2745,18 +2986,27 @@
2745
2986
  "default": {}
2746
2987
  }
2747
2988
  },
2748
- "required": ["url", "headers", "body"],
2989
+ "required": [
2990
+ "url",
2991
+ "headers",
2992
+ "body"
2993
+ ],
2749
2994
  "additionalProperties": false
2750
2995
  },
2751
2996
  "resolved": {
2752
2997
  "type": "object",
2753
2998
  "description": "Response to the call",
2754
2999
  "properties": {
2755
- "dataPath": {
3000
+ "data_path": {
2756
3001
  "type": "string",
2757
3002
  "description": "Optional path to an array in the response. If specified and the path points to an array,\nthe hook will map over each item using 'Item' variable for interpolation.\nRelevant only if plausibility_mode is \"range\".\n",
2758
3003
  "example": "data.results"
2759
3004
  },
3005
+ "dataPath": {
3006
+ "type": "string",
3007
+ "deprecated": true,
3008
+ "description": "Deprecated. Use `data_path` instead."
3009
+ },
2760
3010
  "counter_identifiers": {
2761
3011
  "description": "Counter identifier(s) used to match against the meter's counters.\nCan be a string (counter ID) or an object with counter properties.\nThe backend resolves this to meter_counter_id in the final response.\nRelevant only if plausibility_mode is \"range\".\n",
2762
3012
  "type": "object",
@@ -2782,7 +3032,7 @@
2782
3032
  "description": "Lower allowed limit of the meter reading",
2783
3033
  "example": "{{CallResponse.data.lower_limit}}"
2784
3034
  },
2785
- "errorMessagePath": {
3035
+ "error_message_path": {
2786
3036
  "type": "string",
2787
3037
  "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
3038
  "example": "error.message"
@@ -2800,7 +3050,12 @@
2800
3050
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
2801
3051
  }
2802
3052
  },
2803
- "required": ["id", "type", "call", "resolved"],
3053
+ "required": [
3054
+ "id",
3055
+ "type",
3056
+ "call",
3057
+ "resolved"
3058
+ ],
2804
3059
  "additionalProperties": false
2805
3060
  },
2806
3061
  "PortalExtensionHookPriceDataRetrieval": {
@@ -2817,7 +3072,9 @@
2817
3072
  },
2818
3073
  "type": {
2819
3074
  "type": "string",
2820
- "enum": ["priceDataRetrieval"]
3075
+ "enum": [
3076
+ "priceDataRetrieval"
3077
+ ]
2821
3078
  },
2822
3079
  "intervals": {
2823
3080
  "type": "array",
@@ -2825,7 +3082,12 @@
2825
3082
  "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",
2826
3083
  "items": {
2827
3084
  "type": "string",
2828
- "enum": ["PT15M", "PT1H", "P1D", "P1M"]
3085
+ "enum": [
3086
+ "PT15M",
3087
+ "PT1H",
3088
+ "P1D",
3089
+ "P1M"
3090
+ ]
2829
3091
  }
2830
3092
  },
2831
3093
  "auth": {
@@ -2865,17 +3127,24 @@
2865
3127
  "additionalProperties": true
2866
3128
  }
2867
3129
  },
2868
- "required": ["url"],
3130
+ "required": [
3131
+ "url"
3132
+ ],
2869
3133
  "additionalProperties": false
2870
3134
  },
2871
3135
  "resolved": {
2872
3136
  "type": "object",
2873
3137
  "properties": {
2874
- "dataPath": {
3138
+ "data_path": {
2875
3139
  "type": "string",
2876
3140
  "description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
2877
3141
  },
2878
- "errorMessagePath": {
3142
+ "dataPath": {
3143
+ "type": "string",
3144
+ "deprecated": true,
3145
+ "description": "Deprecated. Use `data_path` instead."
3146
+ },
3147
+ "error_message_path": {
2879
3148
  "type": "string",
2880
3149
  "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
3150
  "example": "error.message"
@@ -2893,7 +3162,11 @@
2893
3162
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
2894
3163
  }
2895
3164
  },
2896
- "required": ["id", "type", "call"],
3165
+ "required": [
3166
+ "id",
3167
+ "type",
3168
+ "call"
3169
+ ],
2897
3170
  "additionalProperties": false
2898
3171
  },
2899
3172
  "PortalExtensionHookConsumptionDataRetrieval": {
@@ -2910,7 +3183,9 @@
2910
3183
  },
2911
3184
  "type": {
2912
3185
  "type": "string",
2913
- "enum": ["consumptionDataRetrieval"]
3186
+ "enum": [
3187
+ "consumptionDataRetrieval"
3188
+ ]
2914
3189
  },
2915
3190
  "intervals": {
2916
3191
  "type": "array",
@@ -2918,7 +3193,12 @@
2918
3193
  "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",
2919
3194
  "items": {
2920
3195
  "type": "string",
2921
- "enum": ["PT15M", "PT1H", "P1D", "P1M"]
3196
+ "enum": [
3197
+ "PT15M",
3198
+ "PT1H",
3199
+ "P1D",
3200
+ "P1M"
3201
+ ]
2922
3202
  }
2923
3203
  },
2924
3204
  "auth": {
@@ -2958,17 +3238,24 @@
2958
3238
  "additionalProperties": true
2959
3239
  }
2960
3240
  },
2961
- "required": ["url"],
3241
+ "required": [
3242
+ "url"
3243
+ ],
2962
3244
  "additionalProperties": false
2963
3245
  },
2964
3246
  "resolved": {
2965
3247
  "type": "object",
2966
3248
  "properties": {
2967
- "dataPath": {
3249
+ "data_path": {
2968
3250
  "type": "string",
2969
3251
  "description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
2970
3252
  },
2971
- "errorMessagePath": {
3253
+ "dataPath": {
3254
+ "type": "string",
3255
+ "deprecated": true,
3256
+ "description": "Deprecated. Use `data_path` instead."
3257
+ },
3258
+ "error_message_path": {
2972
3259
  "type": "string",
2973
3260
  "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
3261
  "example": "error.message"
@@ -2986,7 +3273,11 @@
2986
3273
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
2987
3274
  }
2988
3275
  },
2989
- "required": ["id", "type", "call"],
3276
+ "required": [
3277
+ "id",
3278
+ "type",
3279
+ "call"
3280
+ ],
2990
3281
  "additionalProperties": false
2991
3282
  },
2992
3283
  "PortalExtensionHookDataExport": {
@@ -3003,7 +3294,9 @@
3003
3294
  },
3004
3295
  "type": {
3005
3296
  "type": "string",
3006
- "enum": ["dataExport"]
3297
+ "enum": [
3298
+ "dataExport"
3299
+ ]
3007
3300
  },
3008
3301
  "block_types": {
3009
3302
  "type": "array",
@@ -3049,13 +3342,15 @@
3049
3342
  "additionalProperties": true
3050
3343
  }
3051
3344
  },
3052
- "required": ["url"],
3345
+ "required": [
3346
+ "url"
3347
+ ],
3053
3348
  "additionalProperties": false
3054
3349
  },
3055
3350
  "resolved": {
3056
3351
  "type": "object",
3057
3352
  "properties": {
3058
- "errorMessagePath": {
3353
+ "error_message_path": {
3059
3354
  "type": "string",
3060
3355
  "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
3356
  "example": "error.message"
@@ -3073,7 +3368,11 @@
3073
3368
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3074
3369
  }
3075
3370
  },
3076
- "required": ["id", "type", "call"],
3371
+ "required": [
3372
+ "id",
3373
+ "type",
3374
+ "call"
3375
+ ],
3077
3376
  "additionalProperties": false
3078
3377
  },
3079
3378
  "PortalExtensionHookVisualizationMetadata": {
@@ -3090,7 +3389,9 @@
3090
3389
  },
3091
3390
  "type": {
3092
3391
  "type": "string",
3093
- "enum": ["visualizationMetadata"]
3392
+ "enum": [
3393
+ "visualizationMetadata"
3394
+ ]
3094
3395
  },
3095
3396
  "auth": {
3096
3397
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
@@ -3129,17 +3430,24 @@
3129
3430
  "additionalProperties": true
3130
3431
  }
3131
3432
  },
3132
- "required": ["url"],
3433
+ "required": [
3434
+ "url"
3435
+ ],
3133
3436
  "additionalProperties": false
3134
3437
  },
3135
3438
  "resolved": {
3136
3439
  "type": "object",
3137
3440
  "properties": {
3138
- "dataPath": {
3441
+ "data_path": {
3139
3442
  "type": "string",
3140
3443
  "description": "Optional path to the metadata object in the response. If omitted, the metadata is assumed to be on the top level."
3141
3444
  },
3142
- "errorMessagePath": {
3445
+ "dataPath": {
3446
+ "type": "string",
3447
+ "deprecated": true,
3448
+ "description": "Deprecated. Use `data_path` instead."
3449
+ },
3450
+ "error_message_path": {
3143
3451
  "type": "string",
3144
3452
  "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
3453
  "example": "error.message"
@@ -3157,7 +3465,11 @@
3157
3465
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3158
3466
  }
3159
3467
  },
3160
- "required": ["id", "type", "call"],
3468
+ "required": [
3469
+ "id",
3470
+ "type",
3471
+ "call"
3472
+ ],
3161
3473
  "additionalProperties": false
3162
3474
  },
3163
3475
  "PortalExtensionHookCostDataRetrieval": {
@@ -3174,7 +3486,9 @@
3174
3486
  },
3175
3487
  "type": {
3176
3488
  "type": "string",
3177
- "enum": ["costDataRetrieval"]
3489
+ "enum": [
3490
+ "costDataRetrieval"
3491
+ ]
3178
3492
  },
3179
3493
  "intervals": {
3180
3494
  "type": "array",
@@ -3182,7 +3496,12 @@
3182
3496
  "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",
3183
3497
  "items": {
3184
3498
  "type": "string",
3185
- "enum": ["PT15M", "PT1H", "P1D", "P1M"]
3499
+ "enum": [
3500
+ "PT15M",
3501
+ "PT1H",
3502
+ "P1D",
3503
+ "P1M"
3504
+ ]
3186
3505
  }
3187
3506
  },
3188
3507
  "auth": {
@@ -3222,17 +3541,24 @@
3222
3541
  "additionalProperties": true
3223
3542
  }
3224
3543
  },
3225
- "required": ["url"],
3544
+ "required": [
3545
+ "url"
3546
+ ],
3226
3547
  "additionalProperties": false
3227
3548
  },
3228
3549
  "resolved": {
3229
3550
  "type": "object",
3230
3551
  "properties": {
3231
- "dataPath": {
3552
+ "data_path": {
3232
3553
  "type": "string",
3233
3554
  "description": "Optional path to the data (array) in the response. If omitted, the data is assumed to be on the top level."
3234
3555
  },
3235
- "errorMessagePath": {
3556
+ "dataPath": {
3557
+ "type": "string",
3558
+ "deprecated": true,
3559
+ "description": "Deprecated. Use `data_path` instead."
3560
+ },
3561
+ "error_message_path": {
3236
3562
  "type": "string",
3237
3563
  "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
3564
  "example": "error.message"
@@ -3250,41 +3576,68 @@
3250
3576
  "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3251
3577
  }
3252
3578
  },
3253
- "required": ["id", "type", "call"],
3579
+ "required": [
3580
+ "id",
3581
+ "type",
3582
+ "call"
3583
+ ],
3254
3584
  "additionalProperties": false
3255
3585
  },
3256
- "PortalExtensionSeamlessLink": {
3586
+ "PortalExtensionHookChangeEmail": {
3587
+ "description": "Hook that replaces the built-in change email functionality for portal users. When configured, the portal does not change the user's login email itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the email change (most likely by sending the user instructions to confirm the new email address).\nThe expected response http status code to the call is:\n - 2xx if the request was accepted\n - non-2xx if the request failed (optionally with a human-readable message resolved via `resolved.error_message_path`)\n",
3257
3588
  "type": "object",
3258
3589
  "properties": {
3259
3590
  "id": {
3260
3591
  "type": "string",
3261
3592
  "pattern": "^[a-zA-Z0-9_-]+$",
3262
- "description": "Identifier of the link. Should not change between updates."
3593
+ "description": "Identifier of the hook. Should not change between updates."
3263
3594
  },
3264
3595
  "name": {
3265
3596
  "$ref": "#/components/schemas/TranslatedString"
3266
3597
  },
3267
- "description": {
3268
- "$ref": "#/components/schemas/TranslatedString"
3269
- },
3270
3598
  "type": {
3271
3599
  "type": "string",
3272
- "enum": ["seamless"]
3600
+ "enum": [
3601
+ "changeEmail"
3602
+ ]
3273
3603
  },
3274
- "condition": {
3275
- "type": "string",
3276
- "description": "Controls whether the link should be shown. Supports variable interpolation.",
3277
- "example": "{{Contact.customer_number | is_not_empty}}"
3604
+ "require_password_confirmation": {
3605
+ "type": "boolean",
3606
+ "description": "Whether the portal user must confirm their current password before the change email request is handed over to the third-party system. When true, the portal collects and verifies the current password before calling the hook.\n",
3607
+ "default": true
3608
+ },
3609
+ "explanation": {
3610
+ "type": "object",
3611
+ "properties": {
3612
+ "en": {
3613
+ "type": "string",
3614
+ "description": "Explanation of the functionality shown to the end user.",
3615
+ "example": "You will receive an email with instructions to confirm your new email address."
3616
+ }
3617
+ },
3618
+ "additionalProperties": {
3619
+ "type": "string",
3620
+ "description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
3621
+ },
3622
+ "required": [
3623
+ "en"
3624
+ ],
3625
+ "description": "Optional explanation shown to the user in the change email confirmation dialog."
3278
3626
  },
3279
3627
  "auth": {
3280
3628
  "$ref": "#/components/schemas/PortalExtensionAuthBlock"
3281
3629
  },
3282
- "redirect": {
3630
+ "call": {
3283
3631
  "type": "object",
3284
3632
  "properties": {
3633
+ "method": {
3634
+ "type": "string",
3635
+ "description": "HTTP method to use for the call",
3636
+ "default": "POST"
3637
+ },
3285
3638
  "url": {
3286
3639
  "type": "string",
3287
- "description": "URL to redirect to. Supports variable interpolation."
3640
+ "description": "URL to call. Supports variable interpolation."
3288
3641
  },
3289
3642
  "params": {
3290
3643
  "type": "object",
@@ -3293,20 +3646,323 @@
3293
3646
  "type": "string"
3294
3647
  },
3295
3648
  "default": {}
3649
+ },
3650
+ "headers": {
3651
+ "type": "object",
3652
+ "description": "Headers to use. Supports variable interpolation.",
3653
+ "additionalProperties": {
3654
+ "type": "string"
3655
+ },
3656
+ "default": {}
3657
+ },
3658
+ "body": {
3659
+ "type": "object",
3660
+ "description": "Optional JSON body to use for the call. Defaults to an object with the requested new email and portal user context, e.g. `{\"new_email\": \"...\", \"old_email\": \"...\", \"portal_user_id\": \"...\"}`. The requested new email is available as `{{Input.new_email}}` and the current account email as `{{Input.old_email}}`. Supports variable interpolation."
3661
+ }
3662
+ },
3663
+ "required": [
3664
+ "url",
3665
+ "headers"
3666
+ ],
3667
+ "additionalProperties": false
3668
+ },
3669
+ "resolved": {
3670
+ "type": "object",
3671
+ "properties": {
3672
+ "error_message_path": {
3673
+ "type": "string",
3674
+ "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",
3675
+ "example": "error.message"
3296
3676
  }
3297
3677
  },
3298
3678
  "additionalProperties": false
3679
+ },
3680
+ "secure_proxy": {
3681
+ "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3299
3682
  }
3300
3683
  },
3301
- "required": ["id", "name", "type", "redirect"],
3684
+ "required": [
3685
+ "id",
3686
+ "type",
3687
+ "call"
3688
+ ],
3302
3689
  "additionalProperties": false
3303
3690
  },
3304
- "PortalExtensionAuthBlock": {
3691
+ "PortalExtensionHookChangePassword": {
3692
+ "description": "Hook that replaces the built-in change password functionality for portal users. When configured, the portal does not change the user's password itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the password change (most likely by sending the user instructions to complete the process).\nThe expected response http status code to the call is:\n - 2xx if the request was accepted\n - non-2xx if the request failed (optionally with a human-readable message resolved via `resolved.error_message_path`)\n",
3305
3693
  "type": "object",
3306
3694
  "properties": {
3307
- "method": {
3695
+ "id": {
3308
3696
  "type": "string",
3309
- "description": "HTTP method to use for authentication",
3697
+ "pattern": "^[a-zA-Z0-9_-]+$",
3698
+ "description": "Identifier of the hook. Should not change between updates."
3699
+ },
3700
+ "name": {
3701
+ "$ref": "#/components/schemas/TranslatedString"
3702
+ },
3703
+ "type": {
3704
+ "type": "string",
3705
+ "enum": [
3706
+ "changePassword"
3707
+ ]
3708
+ },
3709
+ "require_new_password": {
3710
+ "type": "boolean",
3711
+ "description": "Whether the portal user must provide a new password. When false, the portal only asks the user to confirm (showing the configured explanation) and no new password is collected; the third-party system is expected to handle the password change. When true, the portal collects a new password and passes it to the third-party system as `{{Input.new_password}}`.\n",
3712
+ "default": false
3713
+ },
3714
+ "explanation": {
3715
+ "type": "object",
3716
+ "properties": {
3717
+ "en": {
3718
+ "type": "string",
3719
+ "description": "Explanation of the functionality shown to the end user.",
3720
+ "example": "You will receive an email with instructions to reset your password."
3721
+ }
3722
+ },
3723
+ "additionalProperties": {
3724
+ "type": "string",
3725
+ "description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
3726
+ },
3727
+ "required": [
3728
+ "en"
3729
+ ],
3730
+ "description": "Optional explanation shown to the user in the change password confirmation dialog."
3731
+ },
3732
+ "auth": {
3733
+ "$ref": "#/components/schemas/PortalExtensionAuthBlock"
3734
+ },
3735
+ "call": {
3736
+ "type": "object",
3737
+ "properties": {
3738
+ "method": {
3739
+ "type": "string",
3740
+ "description": "HTTP method to use for the call",
3741
+ "default": "POST"
3742
+ },
3743
+ "url": {
3744
+ "type": "string",
3745
+ "description": "URL to call. Supports variable interpolation."
3746
+ },
3747
+ "params": {
3748
+ "type": "object",
3749
+ "description": "Parameters to append to the URL. Supports variable interpolation.",
3750
+ "additionalProperties": {
3751
+ "type": "string"
3752
+ },
3753
+ "default": {}
3754
+ },
3755
+ "headers": {
3756
+ "type": "object",
3757
+ "description": "Headers to use. Supports variable interpolation.",
3758
+ "additionalProperties": {
3759
+ "type": "string"
3760
+ },
3761
+ "default": {}
3762
+ },
3763
+ "body": {
3764
+ "type": "object",
3765
+ "description": "Optional JSON body to use for the call. Defaults to an object with portal user context (and the new password as `{{Input.new_password}}` when `require_new_password` is true). Supports variable interpolation."
3766
+ }
3767
+ },
3768
+ "required": [
3769
+ "url",
3770
+ "headers"
3771
+ ],
3772
+ "additionalProperties": false
3773
+ },
3774
+ "resolved": {
3775
+ "type": "object",
3776
+ "properties": {
3777
+ "error_message_path": {
3778
+ "type": "string",
3779
+ "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",
3780
+ "example": "error.message"
3781
+ }
3782
+ },
3783
+ "additionalProperties": false
3784
+ },
3785
+ "secure_proxy": {
3786
+ "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3787
+ }
3788
+ },
3789
+ "required": [
3790
+ "id",
3791
+ "type",
3792
+ "call"
3793
+ ],
3794
+ "additionalProperties": false
3795
+ },
3796
+ "PortalExtensionHookDeleteAccount": {
3797
+ "description": "Hook that replaces the built-in delete account functionality for portal users. When configured, the portal does not delete the user itself. Instead, this hook makes an HTTP call to the third-party system, which is expected to handle the deletion.\nThe `deletion_mode` controls what the portal does after the call:\n - `synchronous`: The third-party system deletes the user immediately. The portal waits for a successful (2xx) response and then also deletes the corresponding epilot Cognito user.\n - `asynchronous`: The third-party system handles deletion out-of-band. The portal does not delete anything immediately; cleanup is expected to happen later (e.g. via the user deletion API or webhooks).\n\nThe expected response http status code to the call is:\n - 2xx if the request was accepted\n - non-2xx if the request failed (optionally with a human-readable message resolved via `resolved.error_message_path`)\n",
3798
+ "type": "object",
3799
+ "properties": {
3800
+ "id": {
3801
+ "type": "string",
3802
+ "pattern": "^[a-zA-Z0-9_-]+$",
3803
+ "description": "Identifier of the hook. Should not change between updates."
3804
+ },
3805
+ "name": {
3806
+ "$ref": "#/components/schemas/TranslatedString"
3807
+ },
3808
+ "type": {
3809
+ "type": "string",
3810
+ "enum": [
3811
+ "deleteAccount"
3812
+ ]
3813
+ },
3814
+ "deletion_mode": {
3815
+ "type": "string",
3816
+ "enum": [
3817
+ "synchronous",
3818
+ "asynchronous"
3819
+ ],
3820
+ "description": "Controls how the account deletion is handled. `synchronous` waits for the third-party system to respond and then also deletes the epilot user. `asynchronous` hands the deletion over entirely to the third-party system and the portal does not delete anything immediately.\n",
3821
+ "default": "synchronous"
3822
+ },
3823
+ "explanation": {
3824
+ "type": "object",
3825
+ "properties": {
3826
+ "en": {
3827
+ "type": "string",
3828
+ "description": "Explanation of the functionality shown to the end user.",
3829
+ "example": "Your account deletion will be processed by our system. This may take a few days."
3830
+ }
3831
+ },
3832
+ "additionalProperties": {
3833
+ "type": "string",
3834
+ "description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
3835
+ },
3836
+ "required": [
3837
+ "en"
3838
+ ],
3839
+ "description": "Optional explanation shown to the user in the delete account confirmation dialog."
3840
+ },
3841
+ "auth": {
3842
+ "$ref": "#/components/schemas/PortalExtensionAuthBlock"
3843
+ },
3844
+ "call": {
3845
+ "type": "object",
3846
+ "properties": {
3847
+ "method": {
3848
+ "type": "string",
3849
+ "description": "HTTP method to use for the call",
3850
+ "default": "POST"
3851
+ },
3852
+ "url": {
3853
+ "type": "string",
3854
+ "description": "URL to call. Supports variable interpolation."
3855
+ },
3856
+ "params": {
3857
+ "type": "object",
3858
+ "description": "Parameters to append to the URL. Supports variable interpolation.",
3859
+ "additionalProperties": {
3860
+ "type": "string"
3861
+ },
3862
+ "default": {}
3863
+ },
3864
+ "headers": {
3865
+ "type": "object",
3866
+ "description": "Headers to use. Supports variable interpolation.",
3867
+ "additionalProperties": {
3868
+ "type": "string"
3869
+ },
3870
+ "default": {}
3871
+ },
3872
+ "body": {
3873
+ "type": "object",
3874
+ "description": "Optional JSON body to use for the call. Defaults to an object with portal user context, e.g. `{\"portal_user_id\": \"...\", \"email\": \"...\"}`. Supports variable interpolation."
3875
+ }
3876
+ },
3877
+ "required": [
3878
+ "url",
3879
+ "headers"
3880
+ ],
3881
+ "additionalProperties": false
3882
+ },
3883
+ "resolved": {
3884
+ "type": "object",
3885
+ "properties": {
3886
+ "error_message_path": {
3887
+ "type": "string",
3888
+ "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",
3889
+ "example": "error.message"
3890
+ }
3891
+ },
3892
+ "additionalProperties": false
3893
+ },
3894
+ "secure_proxy": {
3895
+ "$ref": "#/components/schemas/PortalExtensionSecureProxy"
3896
+ }
3897
+ },
3898
+ "required": [
3899
+ "id",
3900
+ "type",
3901
+ "call"
3902
+ ],
3903
+ "additionalProperties": false
3904
+ },
3905
+ "PortalExtensionSeamlessLink": {
3906
+ "type": "object",
3907
+ "properties": {
3908
+ "id": {
3909
+ "type": "string",
3910
+ "pattern": "^[a-zA-Z0-9_-]+$",
3911
+ "description": "Identifier of the link. Should not change between updates."
3912
+ },
3913
+ "name": {
3914
+ "$ref": "#/components/schemas/TranslatedString"
3915
+ },
3916
+ "description": {
3917
+ "$ref": "#/components/schemas/TranslatedString"
3918
+ },
3919
+ "type": {
3920
+ "type": "string",
3921
+ "enum": [
3922
+ "seamless"
3923
+ ]
3924
+ },
3925
+ "condition": {
3926
+ "type": "string",
3927
+ "description": "Controls whether the link should be shown. Supports variable interpolation.",
3928
+ "example": "{{Contact.customer_number | is_not_empty}}"
3929
+ },
3930
+ "auth": {
3931
+ "$ref": "#/components/schemas/PortalExtensionAuthBlock"
3932
+ },
3933
+ "redirect": {
3934
+ "type": "object",
3935
+ "properties": {
3936
+ "url": {
3937
+ "type": "string",
3938
+ "description": "URL to redirect to. Supports variable interpolation."
3939
+ },
3940
+ "params": {
3941
+ "type": "object",
3942
+ "description": "Parameters to append to the URL. Supports variable interpolation.",
3943
+ "additionalProperties": {
3944
+ "type": "string"
3945
+ },
3946
+ "default": {}
3947
+ }
3948
+ },
3949
+ "additionalProperties": false
3950
+ }
3951
+ },
3952
+ "required": [
3953
+ "id",
3954
+ "name",
3955
+ "type",
3956
+ "redirect"
3957
+ ],
3958
+ "additionalProperties": false
3959
+ },
3960
+ "PortalExtensionAuthBlock": {
3961
+ "type": "object",
3962
+ "properties": {
3963
+ "method": {
3964
+ "type": "string",
3965
+ "description": "HTTP method to use for authentication",
3310
3966
  "default": "GET"
3311
3967
  },
3312
3968
  "url": {
@@ -3348,11 +4004,16 @@
3348
4004
  "example": "{{AuthResponse.data.expires_in}}"
3349
4005
  }
3350
4006
  },
3351
- "required": ["key", "ttl"],
4007
+ "required": [
4008
+ "key",
4009
+ "ttl"
4010
+ ],
3352
4011
  "additionalProperties": false
3353
4012
  }
3354
4013
  },
3355
- "required": ["url"],
4014
+ "required": [
4015
+ "url"
4016
+ ],
3356
4017
  "additionalProperties": false
3357
4018
  },
3358
4019
  "PortalExtensionSecureProxy": {
@@ -3369,7 +4030,10 @@
3369
4030
  "description": "Use case slug for the secure proxy use case."
3370
4031
  }
3371
4032
  },
3372
- "required": ["integration_id", "use_case_slug"],
4033
+ "required": [
4034
+ "integration_id",
4035
+ "use_case_slug"
4036
+ ],
3373
4037
  "additionalProperties": false
3374
4038
  },
3375
4039
  "ExternalProductCatalogAuthBlock": {
@@ -3406,7 +4070,9 @@
3406
4070
  "additionalProperties": true
3407
4071
  }
3408
4072
  },
3409
- "required": ["url"],
4073
+ "required": [
4074
+ "url"
4075
+ ],
3410
4076
  "additionalProperties": false
3411
4077
  },
3412
4078
  "OverrideDevMode": {
@@ -3422,7 +4088,10 @@
3422
4088
  },
3423
4089
  "JourneyBlockConfig": {
3424
4090
  "type": "object",
3425
- "required": ["component_url", "component_tag"],
4091
+ "required": [
4092
+ "component_url",
4093
+ "component_tag"
4094
+ ],
3426
4095
  "properties": {
3427
4096
  "override_dev_mode": {
3428
4097
  "$ref": "#/components/schemas/OverrideDevMode"
@@ -3506,7 +4175,9 @@
3506
4175
  "footer_right_absolute"
3507
4176
  ]
3508
4177
  },
3509
- "default": ["main"]
4178
+ "default": [
4179
+ "main"
4180
+ ]
3510
4181
  }
3511
4182
  }
3512
4183
  }
@@ -3516,7 +4187,11 @@
3516
4187
  "allOf": [
3517
4188
  {
3518
4189
  "type": "object",
3519
- "required": ["key", "label", "type"],
4190
+ "required": [
4191
+ "key",
4192
+ "label",
4193
+ "type"
4194
+ ],
3520
4195
  "properties": {
3521
4196
  "key": {
3522
4197
  "type": "string",
@@ -3524,7 +4199,12 @@
3524
4199
  },
3525
4200
  "type": {
3526
4201
  "type": "string",
3527
- "enum": ["text", "boolean", "enum", "block_reference"]
4202
+ "enum": [
4203
+ "text",
4204
+ "boolean",
4205
+ "enum",
4206
+ "block_reference"
4207
+ ]
3528
4208
  },
3529
4209
  "required": {
3530
4210
  "type": "boolean",
@@ -3586,7 +4266,9 @@
3586
4266
  "properties": {
3587
4267
  "type": {
3588
4268
  "type": "string",
3589
- "enum": ["text"]
4269
+ "enum": [
4270
+ "text"
4271
+ ]
3590
4272
  }
3591
4273
  }
3592
4274
  },
@@ -3595,7 +4277,9 @@
3595
4277
  "properties": {
3596
4278
  "type": {
3597
4279
  "type": "string",
3598
- "enum": ["boolean"]
4280
+ "enum": [
4281
+ "boolean"
4282
+ ]
3599
4283
  }
3600
4284
  }
3601
4285
  },
@@ -3605,7 +4289,9 @@
3605
4289
  "properties": {
3606
4290
  "type": {
3607
4291
  "type": "string",
3608
- "enum": ["block_reference"]
4292
+ "enum": [
4293
+ "block_reference"
4294
+ ]
3609
4295
  },
3610
4296
  "allowed_types": {
3611
4297
  "type": "array",
@@ -3618,11 +4304,15 @@
3618
4304
  },
3619
4305
  "EnumArg": {
3620
4306
  "type": "object",
3621
- "required": ["options"],
4307
+ "required": [
4308
+ "options"
4309
+ ],
3622
4310
  "properties": {
3623
4311
  "type": {
3624
4312
  "type": "string",
3625
- "enum": ["enum"]
4313
+ "enum": [
4314
+ "enum"
4315
+ ]
3626
4316
  },
3627
4317
  "isMulti": {
3628
4318
  "type": "boolean",
@@ -3635,7 +4325,10 @@
3635
4325
  "minItems": 1,
3636
4326
  "items": {
3637
4327
  "type": "object",
3638
- "required": ["id", "label"],
4328
+ "required": [
4329
+ "id",
4330
+ "label"
4331
+ ],
3639
4332
  "properties": {
3640
4333
  "id": {
3641
4334
  "type": "string",
@@ -3658,7 +4351,12 @@
3658
4351
  },
3659
4352
  "BillingFrequency": {
3660
4353
  "type": "string",
3661
- "enum": ["MONTHLY", "QUARTERLY", "YEARLY", "CUSTOM"],
4354
+ "enum": [
4355
+ "MONTHLY",
4356
+ "QUARTERLY",
4357
+ "YEARLY",
4358
+ "CUSTOM"
4359
+ ],
3662
4360
  "description": "How often the subscription is billed"
3663
4361
  },
3664
4362
  "Pricing": {
@@ -3715,7 +4413,11 @@
3715
4413
  },
3716
4414
  "review_status": {
3717
4415
  "type": "string",
3718
- "enum": ["approved", "rejected", "pending"],
4416
+ "enum": [
4417
+ "approved",
4418
+ "rejected",
4419
+ "pending"
4420
+ ],
3719
4421
  "description": "Status of the review"
3720
4422
  },
3721
4423
  "requested_at": {
@@ -3889,7 +4591,10 @@
3889
4591
  },
3890
4592
  "visibility": {
3891
4593
  "type": "string",
3892
- "enum": ["public", "private"],
4594
+ "enum": [
4595
+ "public",
4596
+ "private"
4597
+ ],
3893
4598
  "description": "Visibility of the app version",
3894
4599
  "default": "private",
3895
4600
  "readOnly": true
@@ -3929,7 +4634,11 @@
3929
4634
  },
3930
4635
  "review_status": {
3931
4636
  "type": "string",
3932
- "enum": ["approved", "rejected", "pending"],
4637
+ "enum": [
4638
+ "approved",
4639
+ "rejected",
4640
+ "pending"
4641
+ ],
3933
4642
  "description": "Status of the review process"
3934
4643
  },
3935
4644
  "role": {
@@ -3966,7 +4675,11 @@
3966
4675
  "ApiProxyConfig": {
3967
4676
  "type": "object",
3968
4677
  "description": "Configuration for an API proxy component",
3969
- "required": ["name", "target", "auth_type"],
4678
+ "required": [
4679
+ "name",
4680
+ "target",
4681
+ "auth_type"
4682
+ ],
3970
4683
  "properties": {
3971
4684
  "name": {
3972
4685
  "type": "string",
@@ -3982,7 +4695,12 @@
3982
4695
  },
3983
4696
  "auth_type": {
3984
4697
  "type": "string",
3985
- "enum": ["header", "bearer", "oauth2", "none"],
4698
+ "enum": [
4699
+ "header",
4700
+ "bearer",
4701
+ "oauth2",
4702
+ "none"
4703
+ ],
3986
4704
  "description": "Authentication strategy"
3987
4705
  },
3988
4706
  "auth_header": {
@@ -4002,7 +4720,9 @@
4002
4720
  "description": "Required grants for the app in order to call APIs for the installing tenant",
4003
4721
  "items": {
4004
4722
  "type": "object",
4005
- "required": ["action"],
4723
+ "required": [
4724
+ "action"
4725
+ ],
4006
4726
  "properties": {
4007
4727
  "action": {
4008
4728
  "type": "string",
@@ -4123,7 +4843,13 @@
4123
4843
  "PublicConfiguration": {
4124
4844
  "description": "Public configuration of the published app",
4125
4845
  "type": "object",
4126
- "required": ["version", "components", "owner_org_id", "app_id", "name"],
4846
+ "required": [
4847
+ "version",
4848
+ "components",
4849
+ "owner_org_id",
4850
+ "app_id",
4851
+ "name"
4852
+ ],
4127
4853
  "properties": {
4128
4854
  "app_id": {
4129
4855
  "type": "string",
@@ -4239,7 +4965,9 @@
4239
4965
  },
4240
4966
  "TranslatedString": {
4241
4967
  "type": "object",
4242
- "required": ["de"],
4968
+ "required": [
4969
+ "de"
4970
+ ],
4243
4971
  "properties": {
4244
4972
  "en": {
4245
4973
  "type": "string",
@@ -4275,11 +5003,15 @@
4275
5003
  "example": "api_5ZugdRXasLfWBypHi93Fk"
4276
5004
  }
4277
5005
  },
4278
- "required": ["org_id"]
5006
+ "required": [
5007
+ "org_id"
5008
+ ]
4279
5009
  },
4280
5010
  "BatchEventRequest": {
4281
5011
  "type": "object",
4282
- "required": ["events"],
5012
+ "required": [
5013
+ "events"
5014
+ ],
4283
5015
  "properties": {
4284
5016
  "events": {
4285
5017
  "type": "array",
@@ -4293,7 +5025,9 @@
4293
5025
  "Actor": {
4294
5026
  "type": "object",
4295
5027
  "readOnly": true,
4296
- "required": ["type"],
5028
+ "required": [
5029
+ "type"
5030
+ ],
4297
5031
  "properties": {
4298
5032
  "org_id": {
4299
5033
  "type": "string",
@@ -4306,7 +5040,10 @@
4306
5040
  "type": {
4307
5041
  "type": "string",
4308
5042
  "description": "Type of the actor (e.g., user, system)",
4309
- "enum": ["user", "system"]
5043
+ "enum": [
5044
+ "user",
5045
+ "system"
5046
+ ]
4310
5047
  }
4311
5048
  }
4312
5049
  },
@@ -4345,7 +5082,11 @@
4345
5082
  },
4346
5083
  "event_type": {
4347
5084
  "type": "string",
4348
- "enum": ["ERROR", "WARNING", "INFO"]
5085
+ "enum": [
5086
+ "ERROR",
5087
+ "WARNING",
5088
+ "INFO"
5089
+ ]
4349
5090
  },
4350
5091
  "source": {
4351
5092
  "$ref": "#/components/schemas/ComponentType"
@@ -4378,7 +5119,13 @@
4378
5119
  },
4379
5120
  "preset": {
4380
5121
  "type": "string",
4381
- "enum": ["1h", "6h", "24h", "7d", "30d"],
5122
+ "enum": [
5123
+ "1h",
5124
+ "6h",
5125
+ "24h",
5126
+ "7d",
5127
+ "30d"
5128
+ ],
4382
5129
  "description": "Predefined time range (alternative to start/end)"
4383
5130
  }
4384
5131
  },
@@ -4405,7 +5152,11 @@
4405
5152
  "type": "array",
4406
5153
  "items": {
4407
5154
  "type": "string",
4408
- "enum": ["ERROR", "WARNING", "INFO"]
5155
+ "enum": [
5156
+ "ERROR",
5157
+ "WARNING",
5158
+ "INFO"
5159
+ ]
4409
5160
  },
4410
5161
  "description": "Filter by event types"
4411
5162
  },
@@ -4436,9 +5187,15 @@
4436
5187
  "type": "array",
4437
5188
  "items": {
4438
5189
  "type": "string",
4439
- "enum": ["count", "error_rate", "unique_users"]
5190
+ "enum": [
5191
+ "count",
5192
+ "error_rate",
5193
+ "unique_users"
5194
+ ]
4440
5195
  },
4441
- "default": ["count"],
5196
+ "default": [
5197
+ "count"
5198
+ ],
4442
5199
  "description": "Metrics to calculate"
4443
5200
  }
4444
5201
  }
@@ -4464,12 +5221,19 @@
4464
5221
  "properties": {
4465
5222
  "field": {
4466
5223
  "type": "string",
4467
- "enum": ["timestamp", "event_type", "component_id"],
5224
+ "enum": [
5225
+ "timestamp",
5226
+ "event_type",
5227
+ "component_id"
5228
+ ],
4468
5229
  "default": "timestamp"
4469
5230
  },
4470
5231
  "order": {
4471
5232
  "type": "string",
4472
- "enum": ["asc", "desc"],
5233
+ "enum": [
5234
+ "asc",
5235
+ "desc"
5236
+ ],
4473
5237
  "default": "desc"
4474
5238
  }
4475
5239
  }
@@ -4516,7 +5280,9 @@
4516
5280
  "properties": {
4517
5281
  "type": {
4518
5282
  "type": "string",
4519
- "enum": ["raw"]
5283
+ "enum": [
5284
+ "raw"
5285
+ ]
4520
5286
  },
4521
5287
  "events": {
4522
5288
  "type": "array",
@@ -4531,7 +5297,9 @@
4531
5297
  "properties": {
4532
5298
  "type": {
4533
5299
  "type": "string",
4534
- "enum": ["aggregated"]
5300
+ "enum": [
5301
+ "aggregated"
5302
+ ]
4535
5303
  },
4536
5304
  "groups": {
4537
5305
  "type": "array",