@epilot/cli 0.1.25 → 0.1.26

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.
@@ -2,16 +2,12 @@
2
2
  "openapi": "3.0.3",
3
3
  "info": {
4
4
  "title": "Configuration Hub API",
5
- "description": "Lightweight index API for exploring epilot organization configurations.\n\nProvides a unified tree view across all config types. Returns summary metadata only —\nthe frontend calls individual epilot APIs directly (via @epilot/sdk) for full config payloads.\n\n## Source APIs per resource type\n\nEach resource type maps to a specific epilot API. The frontend should use the corresponding\n@epilot/sdk client to fetch full config details (e.g., for the side panel JSON view).\n\n| Resource Type | Source API | SDK Client |\n|---|---|---|\n| `journey` | journey.sls.epilot.io | `@epilot/sdk/journey` |\n| `automation_flow` | automation.sls.epilot.io | `@epilot/sdk/automation` |\n| `workflow_definition` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `closing_reason` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `flow_template` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `schema` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `taxonomy` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `taxonomy_classification` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `emailtemplate` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `product` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `price` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `tax` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `coupon` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `file` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `document_template` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `webhook` | webhooks.sls.epilot.io | `@epilot/sdk/webhooks` |\n| `saved_view` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `dashboard` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `kanban` | kanban.sls.epilot.io | `@epilot/sdk/kanban` |\n| `role` | permissions.sls.epilot.io | `@epilot/sdk/permissions` |\n| `usergroup` | user.sls.epilot.io | `@epilot/sdk/user` |\n| `validation_rule` | entity.sls.epilot.io | `@epilot/sdk/validation-rules` |\n| `integration` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `app` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `designbuilder` | design-builder-api.sls.epilot.io | `@epilot/sdk/design` |\n| `notification_template` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `custom_variable` | entity.sls.epilot.io | `@epilot/sdk/template-variables` |\n| `environment_variable` | environments.sls.epilot.io | `@epilot/sdk/environments` |\n| `entity_mapping` | entity-mapping.sls.epilot.io | `@epilot/sdk/entity-mapping` |\n| `portal_config` | customer-portal.sls.epilot.io | `@epilot/sdk/customer-portal` |\n| `target` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `product_recommendation` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `access_token` | access-token.sls.epilot.io | `@epilot/sdk/access-token` |\n",
5
+ "description": "Lightweight index API for exploring epilot organization configurations.\n\nProvides a unified tree view across all config types. Returns summary metadata only —\nthe frontend calls individual epilot APIs directly (via @epilot/sdk) for full config payloads.\n\n## Source APIs per resource type\n\nEach resource type maps to a specific epilot API. The frontend should use the corresponding\n@epilot/sdk client to fetch full config details (e.g., for the side panel JSON view).\n\n| Resource Type | Source API | SDK Client |\n|---|---|---|\n| `journey` | journey.sls.epilot.io | `@epilot/sdk/journey` |\n| `automation_flow` | automation.sls.epilot.io | `@epilot/sdk/automation` |\n| `workflow_definition` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `closing_reason` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `flow_template` | workflow-definition.sls.epilot.io | `@epilot/sdk/workflow-definition` |\n| `schema` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `taxonomy` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `taxonomy_classification` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `emailtemplate` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `product` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `price` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `tax` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `coupon` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `file` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `webhook` | webhooks.sls.epilot.io | `@epilot/sdk/webhooks` |\n| `saved_view` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `dashboard` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `kanban` | kanban.sls.epilot.io | `@epilot/sdk/kanban` |\n| `role` | permissions.sls.epilot.io | `@epilot/sdk/permissions` |\n| `usergroup` | user.sls.epilot.io | `@epilot/sdk/user` |\n| `validation_rule` | entity.sls.epilot.io | `@epilot/sdk/validation-rules` |\n| `integration` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `app` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `designbuilder` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `notification_template` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `custom_variable` | entity.sls.epilot.io | `@epilot/sdk/template-variables` |\n| `environment_variable` | environments.sls.epilot.io | `@epilot/sdk/environments` |\n| `entity_mapping` | entity-mapping.sls.epilot.io | `@epilot/sdk/entity-mapping` |\n| `portal_config` | customer-portal.sls.epilot.io | `@epilot/sdk/customer-portal` |\n| `target` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n| `product_recommendation` | entity.sls.epilot.io | `@epilot/sdk/entity` |\n",
6
6
  "version": "0.2.0"
7
7
  },
8
8
  "servers": [
9
9
  {
10
10
  "url": "https://configuration-hub.sls.epilot.io"
11
- },
12
- {
13
- "url": "https://configuration-hub.dev.sls.epilot.io",
14
- "description": "Dev"
15
11
  }
16
12
  ],
17
13
  "security": [
@@ -110,35 +106,6 @@
110
106
  "schema": {
111
107
  "type": "string"
112
108
  }
113
- },
114
- {
115
- "name": "blueprint_ids",
116
- "in": "query",
117
- "description": "Filter by installed-blueprint IDs (comma-separated). Only configs installed by one of the listed blueprints are returned.",
118
- "schema": {
119
- "type": "string"
120
- }
121
- },
122
- {
123
- "name": "sort",
124
- "in": "query",
125
- "description": "Sort order. `updated_at` (default) sorts by most recently modified.\n`usage` sorts by the type-specific usage metric descending\n(submissions for journeys, executions for automations, entities for schemas, etc.).\n",
126
- "schema": {
127
- "type": "string",
128
- "enum": [
129
- "updated_at",
130
- "usage"
131
- ],
132
- "default": "updated_at"
133
- }
134
- },
135
- {
136
- "name": "active_only",
137
- "in": "query",
138
- "description": "If true, filter out configs that are explicitly inactive (active=false).\nConfigs with no `active` field are always included.\n",
139
- "schema": {
140
- "type": "boolean"
141
- }
142
109
  }
143
110
  ],
144
111
  "responses": {
@@ -211,65 +178,13 @@
211
178
  }
212
179
  }
213
180
  },
214
- "/v1/configs/{type}/{id}/used_by": {
215
- "get": {
216
- "operationId": "getConfigUsedBy",
217
- "summary": "getConfigUsedBy",
218
- "description": "Get configs that reference the given config (reverse dependencies).\nScans the indexed config items for references to this config's ID or aliases.\n",
219
- "tags": [
220
- "Configs"
221
- ],
222
- "parameters": [
223
- {
224
- "$ref": "#/components/parameters/ConfigType"
225
- },
226
- {
227
- "$ref": "#/components/parameters/ConfigId"
228
- }
229
- ],
230
- "responses": {
231
- "200": {
232
- "description": "List of configs that reference this config",
233
- "content": {
234
- "application/json": {
235
- "schema": {
236
- "$ref": "#/components/schemas/ConfigDependenciesResponse"
237
- }
238
- }
239
- }
240
- }
241
- }
242
- }
243
- },
244
- "/v1/configs/index": {
245
- "get": {
246
- "operationId": "getIndex",
247
- "summary": "getIndex",
248
- "description": "Return the current index build state for the caller's organization.\nClients poll this to decide whether to show a \"building\" indicator\nand when to refetch data.\n",
249
- "tags": [
250
- "Configs"
251
- ],
252
- "responses": {
253
- "200": {
254
- "description": "Current index status",
255
- "content": {
256
- "application/json": {
257
- "schema": {
258
- "$ref": "#/components/schemas/IndexStatusResponse"
259
- }
260
- }
261
- }
262
- }
263
- }
264
- }
265
- },
266
- "/v1/configs/index:rebuild": {
181
+ "/v1/index/rebuild": {
267
182
  "post": {
268
183
  "operationId": "rebuildIndex",
269
184
  "summary": "rebuildIndex",
270
- "description": "Rebuild the configuration index for the caller's organization.\nFire-and-forget: invokes the async worker and returns immediately.\nA new rebuild will cancel any in-flight build (see `build_token`).\n",
185
+ "description": "Rebuild the configuration index for the caller's organization.\nCalls all adapter APIs in parallel and stores results in DynamoDB.\nIf a build is already in progress (within 60s), returns immediately.\n",
271
186
  "tags": [
272
- "Configs"
187
+ "Index"
273
188
  ],
274
189
  "responses": {
275
190
  "200": {
@@ -350,7 +265,6 @@
350
265
  "tax",
351
266
  "coupon",
352
267
  "file",
353
- "document_template",
354
268
  "webhook",
355
269
  "saved_view",
356
270
  "dashboard",
@@ -369,8 +283,7 @@
369
283
  "entity_mapping",
370
284
  "portal_config",
371
285
  "target",
372
- "product_recommendation",
373
- "access_token"
286
+ "product_recommendation"
374
287
  ]
375
288
  },
376
289
  "ConfigTypeInfo": {
@@ -440,13 +353,6 @@
440
353
  },
441
354
  "description": "Tags / labels"
442
355
  },
443
- "aliases": {
444
- "type": "array",
445
- "items": {
446
- "type": "string"
447
- },
448
- "description": "Alternative identifiers (short IDs, slugs, variable keys) used in cross-references"
449
- },
450
356
  "purposes": {
451
357
  "type": "array",
452
358
  "items": {
@@ -458,11 +364,6 @@
458
364
  "type": "string",
459
365
  "format": "uri",
460
366
  "description": "Direct link to open this config in epilot"
461
- },
462
- "metadata": {
463
- "type": "object",
464
- "description": "Type-specific metadata (e.g., submission count for journeys)",
465
- "additionalProperties": true
466
367
  }
467
368
  },
468
369
  "required": [
@@ -492,7 +393,7 @@
492
393
  "type": "string",
493
394
  "description": "Cursor for fetching the next page. Absent when no more pages."
494
395
  },
495
- "results": {
396
+ "items": {
496
397
  "type": "array",
497
398
  "items": {
498
399
  "$ref": "#/components/schemas/ConfigNode"
@@ -503,7 +404,7 @@
503
404
  "type",
504
405
  "label",
505
406
  "icon",
506
- "results"
407
+ "items"
507
408
  ]
508
409
  },
509
410
  "ConfigDependenciesResponse": {
@@ -563,34 +464,6 @@
563
464
  "status"
564
465
  ]
565
466
  },
566
- "IndexStatusResponse": {
567
- "type": "object",
568
- "description": "Current index build state",
569
- "properties": {
570
- "status": {
571
- "type": "string",
572
- "enum": [
573
- "missing",
574
- "building",
575
- "ready",
576
- "failed"
577
- ]
578
- },
579
- "last_built_at": {
580
- "type": "string",
581
- "format": "date-time"
582
- },
583
- "total_items": {
584
- "type": "integer"
585
- },
586
- "build_duration_ms": {
587
- "type": "integer"
588
- }
589
- },
590
- "required": [
591
- "status"
592
- ]
593
- },
594
467
  "ErrorResponse": {
595
468
  "type": "object",
596
469
  "properties": {
@@ -733,8 +733,8 @@
733
733
  "schema": {
734
734
  "type": "string"
735
735
  },
736
- "required": false,
737
- "description": "Optional Hook ID. If omitted, the only matching hook on the extension is used; if the extension has multiple hooks of the relevant type, this becomes required."
736
+ "required": true,
737
+ "description": "Hook ID for consumption data."
738
738
  },
739
739
  {
740
740
  "in": "query",
@@ -828,11 +828,6 @@
828
828
  "min"
829
829
  ],
830
830
  "example": "sum"
831
- },
832
- "unit": {
833
- "type": "string",
834
- "description": "Optional unit of the consumption value. Defaults to unit present on the relevant Meter Counter.",
835
- "example": "kWh"
836
831
  }
837
832
  },
838
833
  "required": [
@@ -861,110 +856,6 @@
861
856
  }
862
857
  }
863
858
  },
864
- "/v2/portal/visualization:export": {
865
- "post": {
866
- "operationId": "prepareVisualizationExport",
867
- "summary": "Prepare Visualization Export",
868
- "description": "Asks an installed App to prepare a downloadable export of a visualization (consumption chart, dynamic tariff chart, etc.). The export is produced by the third-party App via a configured portal extension hook of type `dataExport` — this endpoint does not generate the file itself, it forwards the request to the configured hook and returns the descriptor the App provides (typically a `download_url`).\n",
869
- "tags": [
870
- "ECP"
871
- ],
872
- "security": [
873
- {
874
- "PortalAuth": []
875
- }
876
- ],
877
- "requestBody": {
878
- "required": true,
879
- "content": {
880
- "application/json": {
881
- "schema": {
882
- "type": "object",
883
- "properties": {
884
- "app_id": {
885
- "type": "string",
886
- "description": "App ID providing the dataExport hook."
887
- },
888
- "extension_id": {
889
- "type": "string",
890
- "description": "Extension ID providing the dataExport hook."
891
- },
892
- "hook_id": {
893
- "type": "string",
894
- "description": "Optional Hook ID. If omitted, the only `dataExport` hook on the extension is used; if the extension has multiple `dataExport` hooks, this becomes required."
895
- },
896
- "from": {
897
- "type": "string",
898
- "format": "date-time",
899
- "description": "Optional start date for the export window (ISO 8601 format)."
900
- },
901
- "to": {
902
- "type": "string",
903
- "format": "date-time",
904
- "description": "Optional end date for the export window (ISO 8601 format)."
905
- },
906
- "context_entities": {
907
- "$ref": "#/components/schemas/ContextEntities"
908
- }
909
- },
910
- "required": [
911
- "app_id",
912
- "extension_id"
913
- ],
914
- "additionalProperties": false
915
- }
916
- }
917
- }
918
- },
919
- "responses": {
920
- "200": {
921
- "description": "Export descriptor returned by the App.",
922
- "content": {
923
- "application/json": {
924
- "schema": {
925
- "type": "object",
926
- "properties": {
927
- "download_url": {
928
- "type": "string",
929
- "description": "URL the client can use to download the exported file. May be a pre-signed or short-lived URL."
930
- },
931
- "filename": {
932
- "type": "string",
933
- "description": "Suggested filename for the exported file."
934
- },
935
- "content_type": {
936
- "type": "string",
937
- "description": "MIME type of the exported file.",
938
- "example": "text/csv"
939
- },
940
- "expires_at": {
941
- "type": "string",
942
- "format": "date-time",
943
- "description": "Optional expiration timestamp for the download URL."
944
- }
945
- },
946
- "required": [
947
- "download_url"
948
- ]
949
- }
950
- }
951
- }
952
- },
953
- "401": {
954
- "$ref": "#/components/responses/Unauthorized"
955
- },
956
- "403": {
957
- "$ref": "#/components/responses/Forbidden"
958
- },
959
- "404": {
960
- "$ref": "#/components/responses/NotFound"
961
- },
962
- "500": {
963
- "$ref": "#/components/responses/InternalServerError"
964
- }
965
- }
966
- }
967
- },
968
859
  "/v2/portal/costs": {
969
860
  "get": {
970
861
  "operationId": "getCosts",
@@ -1003,8 +894,8 @@
1003
894
  "schema": {
1004
895
  "type": "string"
1005
896
  },
1006
- "required": false,
1007
- "description": "Optional Hook ID. If omitted, the only matching hook on the extension is used; if the extension has multiple hooks of the relevant type, this becomes required."
897
+ "required": true,
898
+ "description": "Hook ID for cost data."
1008
899
  },
1009
900
  {
1010
901
  "in": "query",
@@ -1177,8 +1068,8 @@
1177
1068
  "schema": {
1178
1069
  "type": "string"
1179
1070
  },
1180
- "required": false,
1181
- "description": "Optional Hook ID. If omitted, the only matching hook on the extension is used; if the extension has multiple hooks of the relevant type, this becomes required."
1071
+ "required": true,
1072
+ "description": "Hook ID for price data."
1182
1073
  },
1183
1074
  {
1184
1075
  "in": "query",
@@ -10913,14 +10804,6 @@
10913
10804
  "widgets"
10914
10805
  ],
10915
10806
  "properties": {
10916
- "portal_sk_v3": {
10917
- "type": "string",
10918
- "description": "V3 portal-scoped storage key for the widget configuration"
10919
- },
10920
- "is_v3_item": {
10921
- "type": "boolean",
10922
- "description": "Indicates whether the widget configuration is stored as a V3 portal-scoped item"
10923
- },
10924
10807
  "widgets": {
10925
10808
  "type": "array",
10926
10809
  "items": {
@@ -13596,12 +13479,6 @@
13596
13479
  "$ref": "#/components/schemas/DataRetrievalItem"
13597
13480
  }
13598
13481
  },
13599
- "dataExport": {
13600
- "type": "array",
13601
- "items": {
13602
- "$ref": "#/components/schemas/DataRetrievalItem"
13603
- }
13604
- },
13605
13482
  "priceDataRetrieval": {
13606
13483
  "type": "array",
13607
13484
  "items": {
@@ -13641,9 +13518,6 @@
13641
13518
  "DataRetrievalItem": {
13642
13519
  "type": "object",
13643
13520
  "properties": {
13644
- "app": {
13645
- "$ref": "#/components/schemas/PublicAppDetails"
13646
- },
13647
13521
  "extension": {
13648
13522
  "$ref": "#/components/schemas/PublicExtensionDetails"
13649
13523
  },
@@ -13652,31 +13526,6 @@
13652
13526
  }
13653
13527
  }
13654
13528
  },
13655
- "PublicAppDetails": {
13656
- "type": "object",
13657
- "properties": {
13658
- "app_id": {
13659
- "type": "string",
13660
- "description": "Identifier of the app."
13661
- },
13662
- "name": {
13663
- "type": "object",
13664
- "properties": {
13665
- "en": {
13666
- "type": "string",
13667
- "description": "Name of the app in English."
13668
- }
13669
- },
13670
- "additionalProperties": {
13671
- "type": "string",
13672
- "description": "Name of the app in some other language denoted by ISO 3166-1 alpha-2 code."
13673
- },
13674
- "required": [
13675
- "en"
13676
- ]
13677
- }
13678
- }
13679
- },
13680
13529
  "PublicExtensionDetails": {
13681
13530
  "type": "object",
13682
13531
  "properties": {
@@ -13731,13 +13580,6 @@
13731
13580
  "type": "string"
13732
13581
  },
13733
13582
  "description": "The intervals associated with the hook."
13734
- },
13735
- "block_types": {
13736
- "type": "array",
13737
- "items": {
13738
- "type": "string"
13739
- },
13740
- "description": "Optional list of portal block types the hook supports. Empty/missing means the hook is usable on any export-capable block."
13741
13583
  }
13742
13584
  }
13743
13585
  },
@@ -13932,9 +13774,6 @@
13932
13774
  {
13933
13775
  "$ref": "#/components/schemas/ExtensionHookConsumptionDataRetrieval"
13934
13776
  },
13935
- {
13936
- "$ref": "#/components/schemas/ExtensionHookDataExport"
13937
- },
13938
13777
  {
13939
13778
  "$ref": "#/components/schemas/ExtensionHookCostDataRetrieval"
13940
13779
  },
@@ -14098,8 +13937,7 @@
14098
13937
  },
14099
13938
  "use_static_ips": {
14100
13939
  "type": "boolean",
14101
- "deprecated": true,
14102
- "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
13940
+ "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
14103
13941
  "default": false
14104
13942
  },
14105
13943
  "secure_proxy": {
@@ -14201,8 +14039,7 @@
14201
14039
  },
14202
14040
  "use_static_ips": {
14203
14041
  "type": "boolean",
14204
- "deprecated": true,
14205
- "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
14042
+ "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
14206
14043
  "default": false
14207
14044
  },
14208
14045
  "secure_proxy": {
@@ -14312,8 +14149,7 @@
14312
14149
  },
14313
14150
  "use_static_ips": {
14314
14151
  "type": "boolean",
14315
- "deprecated": true,
14316
- "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
14152
+ "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
14317
14153
  "default": false
14318
14154
  },
14319
14155
  "secure_proxy": {
@@ -14391,8 +14227,7 @@
14391
14227
  },
14392
14228
  "use_static_ips": {
14393
14229
  "type": "boolean",
14394
- "deprecated": true,
14395
- "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
14230
+ "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
14396
14231
  "default": false
14397
14232
  },
14398
14233
  "secure_proxy": {
@@ -14469,84 +14304,7 @@
14469
14304
  },
14470
14305
  "use_static_ips": {
14471
14306
  "type": "boolean",
14472
- "deprecated": true,
14473
- "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
14474
- "default": false
14475
- },
14476
- "secure_proxy": {
14477
- "$ref": "#/components/schemas/SecureProxyConfig"
14478
- }
14479
- },
14480
- "required": [
14481
- "type",
14482
- "call"
14483
- ]
14484
- },
14485
- "ExtensionHookDataExport": {
14486
- "description": "Generic data export hook. When configured on a visualization block, the portal delegates the export action (e.g. CSV/Excel/PDF download) to the configured external source instead of generating the file itself. Can be used by any block that supports export — consumption charts, dynamic tariff charts, etc. The expected response to the call is:\n - 200 with a JSON body describing the exported file (download_url, optional filename, content_type, expires_at)\n",
14487
- "type": "object",
14488
- "properties": {
14489
- "type": {
14490
- "type": "string",
14491
- "enum": [
14492
- "dataExport"
14493
- ]
14494
- },
14495
- "block_types": {
14496
- "type": "array",
14497
- "description": "Optional list of portal block types this hook supports. If omitted,\nthe hook is usable on any export-capable block. Allowed values match\nthe block type identifiers used by the portal builder\n(e.g. `consumption_visualization`, `dynamic_tariff`).\n",
14498
- "items": {
14499
- "type": "string"
14500
- }
14501
- },
14502
- "auth": {
14503
- "$ref": "#/components/schemas/ExtensionAuthBlock"
14504
- },
14505
- "call": {
14506
- "type": "object",
14507
- "properties": {
14508
- "method": {
14509
- "type": "string",
14510
- "description": "HTTP method to use for the call",
14511
- "default": "GET"
14512
- },
14513
- "url": {
14514
- "type": "string",
14515
- "description": "URL to call. Supports variable interpolation."
14516
- },
14517
- "params": {
14518
- "type": "object",
14519
- "description": "Parameters to append to the URL. Supports variable interpolation.",
14520
- "additionalProperties": {
14521
- "type": "string"
14522
- },
14523
- "default": {}
14524
- },
14525
- "headers": {
14526
- "type": "object",
14527
- "description": "Headers to use. Supports variable interpolation.",
14528
- "additionalProperties": {
14529
- "type": "string"
14530
- },
14531
- "default": {}
14532
- },
14533
- "body": {
14534
- "type": "object",
14535
- "description": "Request body to send. Supports variable interpolation. Content format is determined by Content-Type header.",
14536
- "additionalProperties": {
14537
- "type": "string"
14538
- },
14539
- "default": {}
14540
- }
14541
- },
14542
- "required": [
14543
- "url"
14544
- ]
14545
- },
14546
- "use_static_ips": {
14547
- "type": "boolean",
14548
- "deprecated": true,
14549
- "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
14307
+ "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
14550
14308
  "default": false
14551
14309
  },
14552
14310
  "secure_proxy": {
@@ -14623,8 +14381,7 @@
14623
14381
  },
14624
14382
  "use_static_ips": {
14625
14383
  "type": "boolean",
14626
- "deprecated": true,
14627
- "description": "Deprecated. Prefer `secure_proxy` instead.\nIf true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.\n",
14384
+ "description": "If true, requests are made from a set of static IP addresses and only allow connections to a set of allowed IP addresses. Get in touch with us to add your IP addresses.",
14628
14385
  "default": false
14629
14386
  },
14630
14387
  "secure_proxy": {
@@ -14915,11 +14672,6 @@
14915
14672
  "example": [
14916
14673
  "00123456"
14917
14674
  ]
14918
- },
14919
- "file_id": {
14920
- "type": "string",
14921
- "description": "ID of the created file entity for the uploaded photo.",
14922
- "example": "abc123def456"
14923
14675
  }
14924
14676
  }
14925
14677
  },
@@ -15645,17 +15397,6 @@
15645
15397
  "type": "string",
15646
15398
  "description": "The id of the portal",
15647
15399
  "example": "453ad7bf-86d5-46c8-8252-bcc868df5e3c"
15648
- },
15649
- "past_routes": {
15650
- "type": "array",
15651
- "description": "Slugs that previously belonged to this page. The portal redirects requests for these slugs to the current slug. Managed by the server: when a page's slug changes, the old slug is appended here, and when another page claims one of these slugs it is removed from this list.\n",
15652
- "items": {
15653
- "type": "string"
15654
- },
15655
- "example": [
15656
- "old-dashboard",
15657
- "home"
15658
- ]
15659
15400
  }
15660
15401
  }
15661
15402
  }