@epilot/customer-portal-client 0.40.0 → 0.40.1
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/definition.js +1 -1
- package/dist/openapi-runtime.json +74 -0
- package/dist/openapi.d.ts +1280 -208
- package/package.json +1 -1
- package/src/openapi-runtime.json +74 -0
- package/src/openapi.json +599 -18
package/src/openapi.json
CHANGED
|
@@ -884,7 +884,7 @@
|
|
|
884
884
|
"/v2/portal/consumption": {
|
|
885
885
|
"get": {
|
|
886
886
|
"operationId": "getConsumption",
|
|
887
|
-
"summary": "
|
|
887
|
+
"summary": "getConsumption",
|
|
888
888
|
"description": "Get energy consumption data between a given time period.",
|
|
889
889
|
"tags": [
|
|
890
890
|
"ECP"
|
|
@@ -1039,7 +1039,7 @@
|
|
|
1039
1039
|
"/v2/portal/visualization:export": {
|
|
1040
1040
|
"post": {
|
|
1041
1041
|
"operationId": "prepareVisualizationExport",
|
|
1042
|
-
"summary": "
|
|
1042
|
+
"summary": "prepareVisualizationExport",
|
|
1043
1043
|
"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",
|
|
1044
1044
|
"tags": [
|
|
1045
1045
|
"ECP"
|
|
@@ -1143,7 +1143,7 @@
|
|
|
1143
1143
|
"/v2/portal/visualization/metadata": {
|
|
1144
1144
|
"get": {
|
|
1145
1145
|
"operationId": "getVisualizationMetadata",
|
|
1146
|
-
"summary": "
|
|
1146
|
+
"summary": "getVisualizationMetadata",
|
|
1147
1147
|
"description": "Returns runtime metadata describing how a visualization (consumption / price / cost chart) should be rendered for a given portal context (meter, contract, etc). Resolves the extension's `visualizationMetadata` hook implicitly from `app_id` + `extensionId` and invokes it. Supplies the response as a structured payload that the portal uses to configure type/aggregation options, supported intervals, and the available data range.\n",
|
|
1148
1148
|
"tags": [
|
|
1149
1149
|
"ECP"
|
|
@@ -1211,7 +1211,7 @@
|
|
|
1211
1211
|
"/v2/portal/costs": {
|
|
1212
1212
|
"get": {
|
|
1213
1213
|
"operationId": "getCosts",
|
|
1214
|
-
"summary": "
|
|
1214
|
+
"summary": "getCosts",
|
|
1215
1215
|
"description": "Get energy cost data between a given time period.",
|
|
1216
1216
|
"tags": [
|
|
1217
1217
|
"ECP"
|
|
@@ -1385,7 +1385,7 @@
|
|
|
1385
1385
|
"/v2/portal/prices": {
|
|
1386
1386
|
"get": {
|
|
1387
1387
|
"operationId": "getPrices",
|
|
1388
|
-
"summary": "
|
|
1388
|
+
"summary": "getPrices",
|
|
1389
1389
|
"description": "Get energy prices data between a given time period.",
|
|
1390
1390
|
"tags": [
|
|
1391
1391
|
"ECP"
|
|
@@ -3119,6 +3119,10 @@
|
|
|
3119
3119
|
"journey_registration_email": {
|
|
3120
3120
|
"type": "string",
|
|
3121
3121
|
"description": "The email address registered in the journey's Login & Registration block"
|
|
3122
|
+
},
|
|
3123
|
+
"journey_registration_portal_id": {
|
|
3124
|
+
"type": "string",
|
|
3125
|
+
"description": "The portal selected on the journey's Login & Registration block, used to target the registration link to that portal"
|
|
3122
3126
|
}
|
|
3123
3127
|
}
|
|
3124
3128
|
}
|
|
@@ -6965,6 +6969,56 @@
|
|
|
6965
6969
|
}
|
|
6966
6970
|
}
|
|
6967
6971
|
},
|
|
6972
|
+
"/v2/portal/user/file/{id}/preview": {
|
|
6973
|
+
"get": {
|
|
6974
|
+
"operationId": "getFilePreview",
|
|
6975
|
+
"summary": "getFilePreview",
|
|
6976
|
+
"description": "resolves an in-portal preview for a file. Returns a Content-Disposition: inline URL for directly-previewable files (PDF, common image formats), or a document-api PDF conversion result for the Office formats it currently supports (docx/xls/xlsx/xlsm) -- NOT doc/csv/pptx, which document-api's conversion does not cover today. Returns { kind: \"unsupported\" } (no url) for anything else, so the caller can fall back to the existing download flow. An optional `download_url` is returned for all kinds — including \"unsupported\" — whenever the file entity exposes one, so the client can render a real anchor for its Download action; it is only a Content-Disposition: attachment URL for private files, and for other access levels it is the plain object URL, which may render inline. The previewability decision is made server-side from the file's own filename/mime_type — never trust a client-supplied kind for anything security-sensitive.",
|
|
6977
|
+
"tags": [
|
|
6978
|
+
"ECP"
|
|
6979
|
+
],
|
|
6980
|
+
"security": [
|
|
6981
|
+
{
|
|
6982
|
+
"PortalAuth": []
|
|
6983
|
+
}
|
|
6984
|
+
],
|
|
6985
|
+
"parameters": [
|
|
6986
|
+
{
|
|
6987
|
+
"in": "path",
|
|
6988
|
+
"name": "id",
|
|
6989
|
+
"schema": {
|
|
6990
|
+
"$ref": "#/components/schemas/EntityId"
|
|
6991
|
+
},
|
|
6992
|
+
"required": true,
|
|
6993
|
+
"description": "The Id of a file"
|
|
6994
|
+
}
|
|
6995
|
+
],
|
|
6996
|
+
"responses": {
|
|
6997
|
+
"200": {
|
|
6998
|
+
"description": "The file preview was resolved (which may still indicate kind \"unsupported\" with no url).",
|
|
6999
|
+
"content": {
|
|
7000
|
+
"application/json": {
|
|
7001
|
+
"schema": {
|
|
7002
|
+
"$ref": "#/components/schemas/FilePreviewResult"
|
|
7003
|
+
}
|
|
7004
|
+
}
|
|
7005
|
+
}
|
|
7006
|
+
},
|
|
7007
|
+
"401": {
|
|
7008
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7009
|
+
},
|
|
7010
|
+
"403": {
|
|
7011
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7012
|
+
},
|
|
7013
|
+
"404": {
|
|
7014
|
+
"$ref": "#/components/responses/NotFound"
|
|
7015
|
+
},
|
|
7016
|
+
"500": {
|
|
7017
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
7018
|
+
}
|
|
7019
|
+
}
|
|
7020
|
+
}
|
|
7021
|
+
},
|
|
6968
7022
|
"/v2/portal/user/file/{id}/downloaded": {
|
|
6969
7023
|
"post": {
|
|
6970
7024
|
"operationId": "trackFileDownloaded",
|
|
@@ -7023,7 +7077,7 @@
|
|
|
7023
7077
|
"/v2/portal/user/files/count-by-entity": {
|
|
7024
7078
|
"get": {
|
|
7025
7079
|
"operationId": "getFilesCountByEntity",
|
|
7026
|
-
"summary": "
|
|
7080
|
+
"summary": "getFilesCountByEntity",
|
|
7027
7081
|
"description": "Fetch file counts for all ECP user related entities",
|
|
7028
7082
|
"deprecated": true,
|
|
7029
7083
|
"tags": [
|
|
@@ -7911,7 +7965,7 @@
|
|
|
7911
7965
|
"/v2/portal/entity/{slug}/{id}/workflows": {
|
|
7912
7966
|
"get": {
|
|
7913
7967
|
"operationId": "getEntityWorkflows",
|
|
7914
|
-
"summary": "
|
|
7968
|
+
"summary": "getEntityWorkflows",
|
|
7915
7969
|
"description": "Get all workflows associated with an entity (requires access to the entity)",
|
|
7916
7970
|
"tags": [
|
|
7917
7971
|
"ECP"
|
|
@@ -7977,10 +8031,62 @@
|
|
|
7977
8031
|
}
|
|
7978
8032
|
}
|
|
7979
8033
|
},
|
|
8034
|
+
"/v2/portal/engagement/tasks": {
|
|
8035
|
+
"get": {
|
|
8036
|
+
"operationId": "getOutstandingTasks",
|
|
8037
|
+
"summary": "Get outstanding workflow tasks for the portal user",
|
|
8038
|
+
"description": "Returns all outstanding workflow journey tasks for the authenticated portal user, across their opportunity, order and contract entities. Each task is an active workflow step that exposes a journey the customer still needs to fill out.",
|
|
8039
|
+
"tags": [
|
|
8040
|
+
"ECP"
|
|
8041
|
+
],
|
|
8042
|
+
"security": [
|
|
8043
|
+
{
|
|
8044
|
+
"PortalAuth": []
|
|
8045
|
+
}
|
|
8046
|
+
],
|
|
8047
|
+
"responses": {
|
|
8048
|
+
"200": {
|
|
8049
|
+
"description": "List of outstanding workflow tasks for the portal user",
|
|
8050
|
+
"content": {
|
|
8051
|
+
"application/json": {
|
|
8052
|
+
"schema": {
|
|
8053
|
+
"type": "object",
|
|
8054
|
+
"required": [
|
|
8055
|
+
"tasks",
|
|
8056
|
+
"total"
|
|
8057
|
+
],
|
|
8058
|
+
"properties": {
|
|
8059
|
+
"tasks": {
|
|
8060
|
+
"type": "array",
|
|
8061
|
+
"items": {
|
|
8062
|
+
"$ref": "#/components/schemas/OutstandingTask"
|
|
8063
|
+
}
|
|
8064
|
+
},
|
|
8065
|
+
"total": {
|
|
8066
|
+
"type": "integer",
|
|
8067
|
+
"example": 0
|
|
8068
|
+
}
|
|
8069
|
+
}
|
|
8070
|
+
}
|
|
8071
|
+
}
|
|
8072
|
+
}
|
|
8073
|
+
},
|
|
8074
|
+
"401": {
|
|
8075
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8076
|
+
},
|
|
8077
|
+
"403": {
|
|
8078
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8079
|
+
},
|
|
8080
|
+
"500": {
|
|
8081
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
8082
|
+
}
|
|
8083
|
+
}
|
|
8084
|
+
}
|
|
8085
|
+
},
|
|
7980
8086
|
"/v2/portal/entity/{slug}/{id}/workflows/linearized": {
|
|
7981
8087
|
"get": {
|
|
7982
8088
|
"operationId": "getEntityPortalWorkflows",
|
|
7983
|
-
"summary": "
|
|
8089
|
+
"summary": "getEntityPortalWorkflows",
|
|
7984
8090
|
"description": "Get all portal-relevant workflows associated with an entity (requires access to the entity),\nlinearized by the Workflows API into a flat, ordered list of portal-visible tasks.\n\nUnlike `getEntityWorkflows`, this endpoint returns a single uniform shape for both legacy\n(V1) workflow executions and graph-based (V2) flow executions — the execution graph is\nalready resolved server-side (active path, task reachability, chronological ordering), so\nclients can render a timeline without any graph traversal logic.\n\nTasks carry the config of both portal audiences (`ecp` and `installer`); clients filter\nper their configured audience, so one response serves every block on a page.\n",
|
|
7985
8091
|
"tags": [
|
|
7986
8092
|
"ECP"
|
|
@@ -8046,10 +8152,96 @@
|
|
|
8046
8152
|
}
|
|
8047
8153
|
}
|
|
8048
8154
|
},
|
|
8155
|
+
"/v2/portal/entities/workflows/linearized/batch": {
|
|
8156
|
+
"post": {
|
|
8157
|
+
"operationId": "getEntityPortalWorkflowsBatch",
|
|
8158
|
+
"summary": "getEntityPortalWorkflowsBatch",
|
|
8159
|
+
"description": "Batch variant of `getEntityPortalWorkflows`: returns portal-relevant workflows for\nup to 50 entities — schemas may differ — in a single call, each already linearized\nby the Workflows API into a flat, ordered list of portal-visible tasks.\n\nIntended for portal list views (e.g. an entity list where every card shows its\nworkflow progress). Entities the portal user cannot access are omitted from the\nresponse; an entry with an empty task list means the entity has no portal-relevant\nworkflow.\n",
|
|
8160
|
+
"tags": [
|
|
8161
|
+
"ECP"
|
|
8162
|
+
],
|
|
8163
|
+
"security": [
|
|
8164
|
+
{
|
|
8165
|
+
"PortalAuth": []
|
|
8166
|
+
}
|
|
8167
|
+
],
|
|
8168
|
+
"requestBody": {
|
|
8169
|
+
"description": "Entities to load portal workflows for",
|
|
8170
|
+
"required": true,
|
|
8171
|
+
"content": {
|
|
8172
|
+
"application/json": {
|
|
8173
|
+
"schema": {
|
|
8174
|
+
"type": "object",
|
|
8175
|
+
"properties": {
|
|
8176
|
+
"entities": {
|
|
8177
|
+
"type": "array",
|
|
8178
|
+
"items": {
|
|
8179
|
+
"type": "object",
|
|
8180
|
+
"properties": {
|
|
8181
|
+
"id": {
|
|
8182
|
+
"type": "string",
|
|
8183
|
+
"description": "ID of the entity"
|
|
8184
|
+
},
|
|
8185
|
+
"slug": {
|
|
8186
|
+
"type": "string",
|
|
8187
|
+
"description": "Schema slug of the entity",
|
|
8188
|
+
"example": "order"
|
|
8189
|
+
}
|
|
8190
|
+
},
|
|
8191
|
+
"required": [
|
|
8192
|
+
"id",
|
|
8193
|
+
"slug"
|
|
8194
|
+
]
|
|
8195
|
+
},
|
|
8196
|
+
"minItems": 1,
|
|
8197
|
+
"maxItems": 50
|
|
8198
|
+
}
|
|
8199
|
+
},
|
|
8200
|
+
"required": [
|
|
8201
|
+
"entities"
|
|
8202
|
+
]
|
|
8203
|
+
}
|
|
8204
|
+
}
|
|
8205
|
+
}
|
|
8206
|
+
},
|
|
8207
|
+
"responses": {
|
|
8208
|
+
"200": {
|
|
8209
|
+
"description": "One entry per accessible entity, each with its linearized workflows",
|
|
8210
|
+
"content": {
|
|
8211
|
+
"application/json": {
|
|
8212
|
+
"schema": {
|
|
8213
|
+
"type": "object",
|
|
8214
|
+
"properties": {
|
|
8215
|
+
"results": {
|
|
8216
|
+
"type": "array",
|
|
8217
|
+
"items": {
|
|
8218
|
+
"$ref": "#/components/schemas/EntityPortalWorkflows"
|
|
8219
|
+
}
|
|
8220
|
+
}
|
|
8221
|
+
}
|
|
8222
|
+
}
|
|
8223
|
+
}
|
|
8224
|
+
}
|
|
8225
|
+
},
|
|
8226
|
+
"400": {
|
|
8227
|
+
"$ref": "#/components/responses/InvalidRequest"
|
|
8228
|
+
},
|
|
8229
|
+
"401": {
|
|
8230
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8231
|
+
},
|
|
8232
|
+
"403": {
|
|
8233
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8234
|
+
},
|
|
8235
|
+
"500": {
|
|
8236
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
8237
|
+
}
|
|
8238
|
+
}
|
|
8239
|
+
}
|
|
8240
|
+
},
|
|
8049
8241
|
"/v2/portal/metering/reading/photo": {
|
|
8050
8242
|
"post": {
|
|
8051
8243
|
"operationId": "uploadMeterReadingPhoto",
|
|
8052
|
-
"summary": "
|
|
8244
|
+
"summary": "uploadMeterReadingPhoto",
|
|
8053
8245
|
"description": "Uploads a Meter Reading photo and - if enabled - gives back data extracted from the photo.",
|
|
8054
8246
|
"tags": [
|
|
8055
8247
|
"ECP"
|
|
@@ -8104,7 +8296,7 @@
|
|
|
8104
8296
|
"/v2/portal/metering/reading": {
|
|
8105
8297
|
"post": {
|
|
8106
8298
|
"operationId": "createMeterReading",
|
|
8107
|
-
"summary": "
|
|
8299
|
+
"summary": "createMeterReading",
|
|
8108
8300
|
"description": "Inserts a new meter reading.",
|
|
8109
8301
|
"tags": [
|
|
8110
8302
|
"ECP"
|
|
@@ -8171,6 +8363,7 @@
|
|
|
8171
8363
|
"/v2/portal/metering/reading/allowed-range/{meter_id}": {
|
|
8172
8364
|
"get": {
|
|
8173
8365
|
"operationId": "getAllowedMeterReadingRange",
|
|
8366
|
+
"summary": "getAllowedMeterReadingRange",
|
|
8174
8367
|
"description": "Get allowed reading range for all counters of a meter from the configured\nthird-party plausibility check hook using 'range' mode. This endpoint requires\na plausibility check hook to be configured for the portal.\n",
|
|
8175
8368
|
"tags": [
|
|
8176
8369
|
"ECP"
|
|
@@ -8272,7 +8465,7 @@
|
|
|
8272
8465
|
"/v2/portal/metering/readings": {
|
|
8273
8466
|
"post": {
|
|
8274
8467
|
"operationId": "getMeterReadings",
|
|
8275
|
-
"summary": "
|
|
8468
|
+
"summary": "getMeterReadings",
|
|
8276
8469
|
"description": "Fetches meter readings for a counter and optionally resolves Handlebars\ntemplate strings against each reading object using @epilot/variables.\n",
|
|
8277
8470
|
"tags": [
|
|
8278
8471
|
"ECP"
|
|
@@ -9617,7 +9810,7 @@
|
|
|
9617
9810
|
"/v2/portal/campaign/{campaign_id}/entity:status": {
|
|
9618
9811
|
"put": {
|
|
9619
9812
|
"operationId": "updateCampaignPortalBlockStatus",
|
|
9620
|
-
"summary": "
|
|
9813
|
+
"summary": "updateCampaignPortalBlockStatus",
|
|
9621
9814
|
"description": "Updates the status of a campaign portal block for multiple recipients.",
|
|
9622
9815
|
"tags": [
|
|
9623
9816
|
"ECP"
|
|
@@ -9740,6 +9933,192 @@
|
|
|
9740
9933
|
}
|
|
9741
9934
|
}
|
|
9742
9935
|
},
|
|
9936
|
+
"/v2/portal/notifications": {
|
|
9937
|
+
"get": {
|
|
9938
|
+
"operationId": "listPortalNotifications",
|
|
9939
|
+
"summary": "listPortalNotifications",
|
|
9940
|
+
"description": "Lists the 360 notifications addressed to the authenticated portal user, newest first. The organization and the portal user are derived from the authenticated session, so a user can only ever read their own notifications.",
|
|
9941
|
+
"tags": [
|
|
9942
|
+
"ECP"
|
|
9943
|
+
],
|
|
9944
|
+
"security": [
|
|
9945
|
+
{
|
|
9946
|
+
"PortalAuth": []
|
|
9947
|
+
}
|
|
9948
|
+
],
|
|
9949
|
+
"parameters": [
|
|
9950
|
+
{
|
|
9951
|
+
"in": "query",
|
|
9952
|
+
"name": "cursor",
|
|
9953
|
+
"required": false,
|
|
9954
|
+
"schema": {
|
|
9955
|
+
"type": "string"
|
|
9956
|
+
},
|
|
9957
|
+
"description": "Base64 encoded cursor returned by a previous call, used for pagination."
|
|
9958
|
+
},
|
|
9959
|
+
{
|
|
9960
|
+
"in": "query",
|
|
9961
|
+
"name": "limit",
|
|
9962
|
+
"required": false,
|
|
9963
|
+
"schema": {
|
|
9964
|
+
"type": "integer"
|
|
9965
|
+
},
|
|
9966
|
+
"description": "The maximum number of notifications to return."
|
|
9967
|
+
}
|
|
9968
|
+
],
|
|
9969
|
+
"responses": {
|
|
9970
|
+
"200": {
|
|
9971
|
+
"description": "List of notifications for the authenticated portal user.",
|
|
9972
|
+
"content": {
|
|
9973
|
+
"application/json": {
|
|
9974
|
+
"schema": {
|
|
9975
|
+
"type": "object",
|
|
9976
|
+
"properties": {
|
|
9977
|
+
"cursor": {
|
|
9978
|
+
"type": "string",
|
|
9979
|
+
"description": "Base64 encoded cursor to fetch the next page. Absent when there are no more results."
|
|
9980
|
+
},
|
|
9981
|
+
"total_unread": {
|
|
9982
|
+
"type": "integer",
|
|
9983
|
+
"description": "Total number of unread notifications for the user."
|
|
9984
|
+
},
|
|
9985
|
+
"results": {
|
|
9986
|
+
"type": "array",
|
|
9987
|
+
"items": {
|
|
9988
|
+
"$ref": "#/components/schemas/PortalNotification"
|
|
9989
|
+
}
|
|
9990
|
+
}
|
|
9991
|
+
}
|
|
9992
|
+
}
|
|
9993
|
+
}
|
|
9994
|
+
}
|
|
9995
|
+
},
|
|
9996
|
+
"401": {
|
|
9997
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9998
|
+
},
|
|
9999
|
+
"403": {
|
|
10000
|
+
"$ref": "#/components/responses/Forbidden"
|
|
10001
|
+
},
|
|
10002
|
+
"500": {
|
|
10003
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
10004
|
+
}
|
|
10005
|
+
}
|
|
10006
|
+
}
|
|
10007
|
+
},
|
|
10008
|
+
"/v2/portal/notifications/unread-count": {
|
|
10009
|
+
"get": {
|
|
10010
|
+
"operationId": "getPortalNotificationsUnreadCount",
|
|
10011
|
+
"summary": "getPortalNotificationsUnreadCount",
|
|
10012
|
+
"description": "Returns the number of unread notifications for the authenticated portal user.",
|
|
10013
|
+
"tags": [
|
|
10014
|
+
"ECP"
|
|
10015
|
+
],
|
|
10016
|
+
"security": [
|
|
10017
|
+
{
|
|
10018
|
+
"PortalAuth": []
|
|
10019
|
+
}
|
|
10020
|
+
],
|
|
10021
|
+
"responses": {
|
|
10022
|
+
"200": {
|
|
10023
|
+
"description": "Unread notification count.",
|
|
10024
|
+
"content": {
|
|
10025
|
+
"application/json": {
|
|
10026
|
+
"schema": {
|
|
10027
|
+
"type": "object",
|
|
10028
|
+
"properties": {
|
|
10029
|
+
"count": {
|
|
10030
|
+
"type": "integer",
|
|
10031
|
+
"example": 3
|
|
10032
|
+
}
|
|
10033
|
+
}
|
|
10034
|
+
}
|
|
10035
|
+
}
|
|
10036
|
+
}
|
|
10037
|
+
},
|
|
10038
|
+
"401": {
|
|
10039
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10040
|
+
},
|
|
10041
|
+
"403": {
|
|
10042
|
+
"$ref": "#/components/responses/Forbidden"
|
|
10043
|
+
},
|
|
10044
|
+
"500": {
|
|
10045
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
10046
|
+
}
|
|
10047
|
+
}
|
|
10048
|
+
}
|
|
10049
|
+
},
|
|
10050
|
+
"/v2/portal/notifications/read-all": {
|
|
10051
|
+
"put": {
|
|
10052
|
+
"operationId": "markAllPortalNotificationsRead",
|
|
10053
|
+
"summary": "markAllPortalNotificationsRead",
|
|
10054
|
+
"description": "Marks all notifications of the authenticated portal user as read.",
|
|
10055
|
+
"tags": [
|
|
10056
|
+
"ECP"
|
|
10057
|
+
],
|
|
10058
|
+
"security": [
|
|
10059
|
+
{
|
|
10060
|
+
"PortalAuth": []
|
|
10061
|
+
}
|
|
10062
|
+
],
|
|
10063
|
+
"responses": {
|
|
10064
|
+
"204": {
|
|
10065
|
+
"description": "All notifications marked as read."
|
|
10066
|
+
},
|
|
10067
|
+
"401": {
|
|
10068
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10069
|
+
},
|
|
10070
|
+
"403": {
|
|
10071
|
+
"$ref": "#/components/responses/Forbidden"
|
|
10072
|
+
},
|
|
10073
|
+
"500": {
|
|
10074
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
10075
|
+
}
|
|
10076
|
+
}
|
|
10077
|
+
}
|
|
10078
|
+
},
|
|
10079
|
+
"/v2/portal/notifications/{id}/read": {
|
|
10080
|
+
"put": {
|
|
10081
|
+
"operationId": "markPortalNotificationRead",
|
|
10082
|
+
"summary": "markPortalNotificationRead",
|
|
10083
|
+
"description": "Marks a single notification of the authenticated portal user as read.",
|
|
10084
|
+
"tags": [
|
|
10085
|
+
"ECP"
|
|
10086
|
+
],
|
|
10087
|
+
"security": [
|
|
10088
|
+
{
|
|
10089
|
+
"PortalAuth": []
|
|
10090
|
+
}
|
|
10091
|
+
],
|
|
10092
|
+
"parameters": [
|
|
10093
|
+
{
|
|
10094
|
+
"in": "path",
|
|
10095
|
+
"name": "id",
|
|
10096
|
+
"required": true,
|
|
10097
|
+
"schema": {
|
|
10098
|
+
"type": "integer"
|
|
10099
|
+
},
|
|
10100
|
+
"description": "Numeric id of the notification to mark as read."
|
|
10101
|
+
}
|
|
10102
|
+
],
|
|
10103
|
+
"responses": {
|
|
10104
|
+
"204": {
|
|
10105
|
+
"description": "Notification marked as read."
|
|
10106
|
+
},
|
|
10107
|
+
"400": {
|
|
10108
|
+
"$ref": "#/components/responses/InvalidRequest"
|
|
10109
|
+
},
|
|
10110
|
+
"401": {
|
|
10111
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10112
|
+
},
|
|
10113
|
+
"403": {
|
|
10114
|
+
"$ref": "#/components/responses/Forbidden"
|
|
10115
|
+
},
|
|
10116
|
+
"500": {
|
|
10117
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
10118
|
+
}
|
|
10119
|
+
}
|
|
10120
|
+
}
|
|
10121
|
+
},
|
|
9743
10122
|
"/v2/portal/notifications/entity:status": {
|
|
9744
10123
|
"put": {
|
|
9745
10124
|
"operationId": "updateNotificationsStatus",
|
|
@@ -10271,7 +10650,7 @@
|
|
|
10271
10650
|
"items": {
|
|
10272
10651
|
"$ref": "#/components/schemas/SwappableConfig"
|
|
10273
10652
|
},
|
|
10274
|
-
"description": "
|
|
10653
|
+
"description": "Optional, opt-in configuration items to additionally swap on top of the always-swapped pages and functional config. Defaults to an empty list (nothing extra swapped). Domain and access/security settings can never be swapped."
|
|
10275
10654
|
}
|
|
10276
10655
|
}
|
|
10277
10656
|
}
|
|
@@ -11263,6 +11642,69 @@
|
|
|
11263
11642
|
}
|
|
11264
11643
|
},
|
|
11265
11644
|
"schemas": {
|
|
11645
|
+
"PortalNotification": {
|
|
11646
|
+
"type": "object",
|
|
11647
|
+
"description": "A 360 notification addressed to a portal user.",
|
|
11648
|
+
"required": [
|
|
11649
|
+
"id",
|
|
11650
|
+
"read"
|
|
11651
|
+
],
|
|
11652
|
+
"properties": {
|
|
11653
|
+
"id": {
|
|
11654
|
+
"type": "string",
|
|
11655
|
+
"description": "Stable string identifier of the notification (the numeric notification id as a string).",
|
|
11656
|
+
"example": "1234567890"
|
|
11657
|
+
},
|
|
11658
|
+
"notification_id": {
|
|
11659
|
+
"type": "number",
|
|
11660
|
+
"description": "Numeric id of the notification, used to mark it as read.",
|
|
11661
|
+
"example": 1234567890
|
|
11662
|
+
},
|
|
11663
|
+
"type": {
|
|
11664
|
+
"type": "string",
|
|
11665
|
+
"description": "Type of notification.",
|
|
11666
|
+
"example": "workflow_step_overdue"
|
|
11667
|
+
},
|
|
11668
|
+
"title": {
|
|
11669
|
+
"type": "object",
|
|
11670
|
+
"description": "Localized, already-rendered notification title.",
|
|
11671
|
+
"properties": {
|
|
11672
|
+
"en": {
|
|
11673
|
+
"type": "string"
|
|
11674
|
+
},
|
|
11675
|
+
"de": {
|
|
11676
|
+
"type": "string"
|
|
11677
|
+
}
|
|
11678
|
+
}
|
|
11679
|
+
},
|
|
11680
|
+
"message": {
|
|
11681
|
+
"type": "object",
|
|
11682
|
+
"description": "Localized, already-rendered notification message.",
|
|
11683
|
+
"properties": {
|
|
11684
|
+
"en": {
|
|
11685
|
+
"type": "string"
|
|
11686
|
+
},
|
|
11687
|
+
"de": {
|
|
11688
|
+
"type": "string"
|
|
11689
|
+
}
|
|
11690
|
+
}
|
|
11691
|
+
},
|
|
11692
|
+
"created_at": {
|
|
11693
|
+
"type": "string",
|
|
11694
|
+
"format": "date-time",
|
|
11695
|
+
"description": "When the notification was created."
|
|
11696
|
+
},
|
|
11697
|
+
"read": {
|
|
11698
|
+
"type": "boolean",
|
|
11699
|
+
"description": "Whether the notification has been read by the user.",
|
|
11700
|
+
"example": false
|
|
11701
|
+
},
|
|
11702
|
+
"redirect_url": {
|
|
11703
|
+
"type": "string",
|
|
11704
|
+
"description": "Optional URL the notification points to."
|
|
11705
|
+
}
|
|
11706
|
+
}
|
|
11707
|
+
},
|
|
11266
11708
|
"MobileBuildStatus": {
|
|
11267
11709
|
"type": "object",
|
|
11268
11710
|
"description": "Latest build/upload status for a platform (system-written).",
|
|
@@ -11579,6 +12021,10 @@
|
|
|
11579
12021
|
"message": {
|
|
11580
12022
|
"type": "string",
|
|
11581
12023
|
"description": "Error message"
|
|
12024
|
+
},
|
|
12025
|
+
"reason": {
|
|
12026
|
+
"type": "string",
|
|
12027
|
+
"description": "Machine-readable cause, when the API can name one. `PORTAL_USER_PENDING_ACTIVATION` means the portal user is authenticated but not mapped to a contact yet, so re-authenticating will not help."
|
|
11582
12028
|
}
|
|
11583
12029
|
}
|
|
11584
12030
|
},
|
|
@@ -11994,7 +12440,7 @@
|
|
|
11994
12440
|
},
|
|
11995
12441
|
"identity_providers": {
|
|
11996
12442
|
"type": "array",
|
|
11997
|
-
"description": "SSO identity providers for the portal. When sent on a portal save (PUT/POST),\nthe list is fully synced — incoming providers are upserted and any existing\nproviders not in the list are deleted. Omit the field to leave SSO\nconfiguration unchanged; send an empty array to remove all providers.\n\
|
|
12443
|
+
"description": "SSO identity providers for the portal. When sent on a portal save (PUT/POST),\nthe list is fully synced — incoming providers are upserted and any existing\nproviders not in the list are deleted. Omit the field to leave SSO\nconfiguration unchanged; send an empty array to remove all providers.\n\nSecrets: a provider sent without `oidc_config.client_secret` keeps the\nstored secret for the same slug; an explicit empty string clears it.\n`getPortalConfigV3` returns providers with raw secrets redacted;\n`{{ env.VAR }}` references pass through.\n",
|
|
11998
12444
|
"items": {
|
|
11999
12445
|
"$ref": "#/components/schemas/ProviderConfig"
|
|
12000
12446
|
}
|
|
@@ -12574,6 +13020,45 @@
|
|
|
12574
13020
|
"additionalProperties": {
|
|
12575
13021
|
"$ref": "#/components/schemas/Block"
|
|
12576
13022
|
}
|
|
13023
|
+
},
|
|
13024
|
+
"notification_triggers": {
|
|
13025
|
+
"type": "array",
|
|
13026
|
+
"description": "Configures which 360 events generate an in-app notification for the portal user. Each enabled trigger renders the referenced notification template and creates a notification addressed to the portal user. Admin/builder-only — never exposed via the public portal config.",
|
|
13027
|
+
"items": {
|
|
13028
|
+
"$ref": "#/components/schemas/NotificationTriggerConfig"
|
|
13029
|
+
}
|
|
13030
|
+
}
|
|
13031
|
+
}
|
|
13032
|
+
},
|
|
13033
|
+
"NotificationTriggerConfig": {
|
|
13034
|
+
"type": "object",
|
|
13035
|
+
"required": [
|
|
13036
|
+
"trigger_type"
|
|
13037
|
+
],
|
|
13038
|
+
"properties": {
|
|
13039
|
+
"trigger_type": {
|
|
13040
|
+
"type": "string",
|
|
13041
|
+
"description": "The 360 event that fires this notification trigger.",
|
|
13042
|
+
"enum": [
|
|
13043
|
+
"entity_created",
|
|
13044
|
+
"entity_assigned",
|
|
13045
|
+
"workflow_step_overdue"
|
|
13046
|
+
]
|
|
13047
|
+
},
|
|
13048
|
+
"entity_schema": {
|
|
13049
|
+
"type": "string",
|
|
13050
|
+
"description": "For `entity_created` / `entity_assigned` triggers, the entity schema slug (e.g. `opportunity`, `order`) whose creation or assignment fires this trigger. Ignored for other trigger types.",
|
|
13051
|
+
"example": "opportunity"
|
|
13052
|
+
},
|
|
13053
|
+
"enabled": {
|
|
13054
|
+
"type": "boolean",
|
|
13055
|
+
"description": "Whether this trigger is active.",
|
|
13056
|
+
"default": true
|
|
13057
|
+
},
|
|
13058
|
+
"template_id": {
|
|
13059
|
+
"type": "string",
|
|
13060
|
+
"format": "uuid",
|
|
13061
|
+
"description": "Entity id of the notification_template to render for this trigger."
|
|
12577
13062
|
}
|
|
12578
13063
|
}
|
|
12579
13064
|
},
|
|
@@ -14369,6 +14854,33 @@
|
|
|
14369
14854
|
}
|
|
14370
14855
|
]
|
|
14371
14856
|
},
|
|
14857
|
+
"FilePreviewResult": {
|
|
14858
|
+
"type": "object",
|
|
14859
|
+
"required": [
|
|
14860
|
+
"kind"
|
|
14861
|
+
],
|
|
14862
|
+
"properties": {
|
|
14863
|
+
"kind": {
|
|
14864
|
+
"type": "string",
|
|
14865
|
+
"description": "What kind of preview (if any) is available. \"pdf\" covers both native PDFs and Office documents that were converted to PDF server-side. \"unsupported\" means no preview is available and the caller should fall back to download.",
|
|
14866
|
+
"enum": [
|
|
14867
|
+
"pdf",
|
|
14868
|
+
"image",
|
|
14869
|
+
"unsupported"
|
|
14870
|
+
]
|
|
14871
|
+
},
|
|
14872
|
+
"url": {
|
|
14873
|
+
"type": "string",
|
|
14874
|
+
"format": "uri",
|
|
14875
|
+
"description": "A Content-Disposition: inline URL to render in a preview viewer. Present only when kind is \"pdf\" or \"image\". Short-lived — do not cache across dialog opens."
|
|
14876
|
+
},
|
|
14877
|
+
"download_url": {
|
|
14878
|
+
"type": "string",
|
|
14879
|
+
"format": "uri",
|
|
14880
|
+
"description": "Optional download URL for the file, returned for any kind — including \"unsupported\" — whenever the file entity exposes one. It is only a Content-Disposition: attachment URL for files with access_control \"private\", where it is a short-lived signed URL; for any other access level it is the file entity's plain public/CDN object URL, which carries no attachment disposition and may render inline in the browser. Absent when the file entity exposes no usable URL, so clients must handle it being missing."
|
|
14881
|
+
}
|
|
14882
|
+
}
|
|
14883
|
+
},
|
|
14372
14884
|
"EntityFileCount": {
|
|
14373
14885
|
"type": "object",
|
|
14374
14886
|
"required": [
|
|
@@ -14614,6 +15126,57 @@
|
|
|
14614
15126
|
"link"
|
|
14615
15127
|
]
|
|
14616
15128
|
},
|
|
15129
|
+
"OutstandingTask": {
|
|
15130
|
+
"type": "object",
|
|
15131
|
+
"required": [
|
|
15132
|
+
"entity_id",
|
|
15133
|
+
"entity_schema",
|
|
15134
|
+
"entity_title",
|
|
15135
|
+
"workflow_id",
|
|
15136
|
+
"workflow_name",
|
|
15137
|
+
"step_id",
|
|
15138
|
+
"step_name",
|
|
15139
|
+
"journey_id"
|
|
15140
|
+
],
|
|
15141
|
+
"properties": {
|
|
15142
|
+
"entity_id": {
|
|
15143
|
+
"type": "string",
|
|
15144
|
+
"description": "ID of the entity the task belongs to"
|
|
15145
|
+
},
|
|
15146
|
+
"entity_schema": {
|
|
15147
|
+
"type": "string",
|
|
15148
|
+
"description": "Schema slug of the entity (opportunity, order or contract)"
|
|
15149
|
+
},
|
|
15150
|
+
"entity_title": {
|
|
15151
|
+
"type": "string",
|
|
15152
|
+
"description": "Title (_title) of the entity"
|
|
15153
|
+
},
|
|
15154
|
+
"workflow_id": {
|
|
15155
|
+
"type": "string",
|
|
15156
|
+
"description": "Workflow execution id"
|
|
15157
|
+
},
|
|
15158
|
+
"workflow_name": {
|
|
15159
|
+
"type": "string",
|
|
15160
|
+
"description": "Workflow execution / template name"
|
|
15161
|
+
},
|
|
15162
|
+
"step_id": {
|
|
15163
|
+
"type": "string",
|
|
15164
|
+
"description": "Task (step) id within the workflow execution"
|
|
15165
|
+
},
|
|
15166
|
+
"step_name": {
|
|
15167
|
+
"type": "string",
|
|
15168
|
+
"description": "Task (step) name"
|
|
15169
|
+
},
|
|
15170
|
+
"journey_id": {
|
|
15171
|
+
"type": "string",
|
|
15172
|
+
"description": "Journey id the customer needs to fill out"
|
|
15173
|
+
},
|
|
15174
|
+
"complete_task_automatically": {
|
|
15175
|
+
"type": "boolean",
|
|
15176
|
+
"description": "Whether submitting the journey from the portal should auto-complete the task. When false, an internal user completes it."
|
|
15177
|
+
}
|
|
15178
|
+
}
|
|
15179
|
+
},
|
|
14617
15180
|
"WorkflowExecution": {
|
|
14618
15181
|
"type": "object",
|
|
14619
15182
|
"properties": {},
|
|
@@ -14868,6 +15431,26 @@
|
|
|
14868
15431
|
"is_active"
|
|
14869
15432
|
]
|
|
14870
15433
|
},
|
|
15434
|
+
"EntityPortalWorkflows": {
|
|
15435
|
+
"type": "object",
|
|
15436
|
+
"description": "Linearized portal workflows of a single entity",
|
|
15437
|
+
"properties": {
|
|
15438
|
+
"entity_id": {
|
|
15439
|
+
"type": "string"
|
|
15440
|
+
},
|
|
15441
|
+
"portal_workflows": {
|
|
15442
|
+
"type": "array",
|
|
15443
|
+
"description": "Empty when the entity has no portal-relevant workflow",
|
|
15444
|
+
"items": {
|
|
15445
|
+
"$ref": "#/components/schemas/PortalWorkflow"
|
|
15446
|
+
}
|
|
15447
|
+
}
|
|
15448
|
+
},
|
|
15449
|
+
"required": [
|
|
15450
|
+
"entity_id",
|
|
15451
|
+
"portal_workflows"
|
|
15452
|
+
]
|
|
15453
|
+
},
|
|
14871
15454
|
"PortalTaskConfig": {
|
|
14872
15455
|
"type": "object",
|
|
14873
15456
|
"description": "Portal-specific (ECP / installer) display config of a workflow task",
|
|
@@ -17559,7 +18142,7 @@
|
|
|
17559
18142
|
"timestamp": {
|
|
17560
18143
|
"type": "string",
|
|
17561
18144
|
"description": "If the value is not provided, the system will be set with the time the request is processed.",
|
|
17562
|
-
"example": "2022-10-
|
|
18145
|
+
"example": "2022-10-10T00:00:00.000Z"
|
|
17563
18146
|
},
|
|
17564
18147
|
"source": {
|
|
17565
18148
|
"$ref": "#/components/schemas/Source",
|
|
@@ -19211,10 +19794,8 @@
|
|
|
19211
19794
|
},
|
|
19212
19795
|
"SwappableConfig": {
|
|
19213
19796
|
"type": "string",
|
|
19797
|
+
"description": "Optional configuration item that a portal swap can additionally include. The swap always transfers the pages and the functional experience config that keep the portal working. These items are opt-in on top of that and are OFF by default. Domain and access/security settings (domain, cognito_details, auth_settings) can never be swapped and are therefore not part of this enum.",
|
|
19214
19798
|
"enum": [
|
|
19215
|
-
"all",
|
|
19216
|
-
"domain",
|
|
19217
|
-
"users",
|
|
19218
19799
|
"email_templates"
|
|
19219
19800
|
]
|
|
19220
19801
|
},
|