@epilot/cli 0.1.60 → 0.1.61
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/README.md +1 -1
- package/definitions/customer-portal.json +1238 -124
- package/dist/bin/epilot.js +6 -6
- package/dist/{chunk-B4RIWFEX.js → chunk-36WJHV3M.js} +9 -2
- package/dist/{completion-NBGAWAHF.js → completion-H6LKKRG6.js} +1 -1
- package/dist/{upgrade-YDRXPHHU.js → upgrade-HTEVGPLI.js} +1 -1
- package/package.json +1 -1
|
@@ -2190,6 +2190,170 @@
|
|
|
2190
2190
|
}
|
|
2191
2191
|
}
|
|
2192
2192
|
},
|
|
2193
|
+
"/v3/portal/email-templates:migrate-references": {
|
|
2194
|
+
"post": {
|
|
2195
|
+
"operationId": "migrateEmailTemplateReferences",
|
|
2196
|
+
"summary": "migrateEmailTemplateReferences",
|
|
2197
|
+
"description": "Walk every email-template config row in the caller's org and re-point any\nfield on `email_templates` that currently references `source_template_id`\nat `destination_template_id`. Intended to be called from the email-template\nmigration flow when a duplicated template is refined.\n\nOnly v3-shaped rows are migrated (those carrying `portal_sk_v3`). Returns\nthe portal IDs that were rewritten and any whose update failed.\n",
|
|
2198
|
+
"tags": [
|
|
2199
|
+
"ECP Admin"
|
|
2200
|
+
],
|
|
2201
|
+
"security": [
|
|
2202
|
+
{
|
|
2203
|
+
"EpilotAuth": []
|
|
2204
|
+
}
|
|
2205
|
+
],
|
|
2206
|
+
"requestBody": {
|
|
2207
|
+
"description": "Source and destination template ids",
|
|
2208
|
+
"required": true,
|
|
2209
|
+
"content": {
|
|
2210
|
+
"application/json": {
|
|
2211
|
+
"schema": {
|
|
2212
|
+
"type": "object",
|
|
2213
|
+
"required": [
|
|
2214
|
+
"source_template_id",
|
|
2215
|
+
"destination_template_id"
|
|
2216
|
+
],
|
|
2217
|
+
"properties": {
|
|
2218
|
+
"source_template_id": {
|
|
2219
|
+
"type": "string",
|
|
2220
|
+
"description": "Template id currently referenced on portal rows"
|
|
2221
|
+
},
|
|
2222
|
+
"destination_template_id": {
|
|
2223
|
+
"type": "string",
|
|
2224
|
+
"description": "Template id to write in place of the source"
|
|
2225
|
+
}
|
|
2226
|
+
}
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
}
|
|
2230
|
+
},
|
|
2231
|
+
"responses": {
|
|
2232
|
+
"200": {
|
|
2233
|
+
"description": "Migration completed (may have partial failures in failed_portal_ids).",
|
|
2234
|
+
"content": {
|
|
2235
|
+
"application/json": {
|
|
2236
|
+
"schema": {
|
|
2237
|
+
"type": "object",
|
|
2238
|
+
"required": [
|
|
2239
|
+
"migrated_portal_count",
|
|
2240
|
+
"migrated_portal_ids",
|
|
2241
|
+
"failed_portal_ids"
|
|
2242
|
+
],
|
|
2243
|
+
"properties": {
|
|
2244
|
+
"migrated_portal_count": {
|
|
2245
|
+
"type": "integer",
|
|
2246
|
+
"example": 2
|
|
2247
|
+
},
|
|
2248
|
+
"migrated_portal_ids": {
|
|
2249
|
+
"type": "array",
|
|
2250
|
+
"items": {
|
|
2251
|
+
"type": "string"
|
|
2252
|
+
}
|
|
2253
|
+
},
|
|
2254
|
+
"failed_portal_ids": {
|
|
2255
|
+
"type": "array",
|
|
2256
|
+
"items": {
|
|
2257
|
+
"type": "string"
|
|
2258
|
+
}
|
|
2259
|
+
}
|
|
2260
|
+
}
|
|
2261
|
+
}
|
|
2262
|
+
}
|
|
2263
|
+
}
|
|
2264
|
+
},
|
|
2265
|
+
"401": {
|
|
2266
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
2267
|
+
},
|
|
2268
|
+
"403": {
|
|
2269
|
+
"$ref": "#/components/responses/Forbidden"
|
|
2270
|
+
},
|
|
2271
|
+
"500": {
|
|
2272
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
2273
|
+
}
|
|
2274
|
+
}
|
|
2275
|
+
}
|
|
2276
|
+
},
|
|
2277
|
+
"/v3/portal/email-templates:list-references": {
|
|
2278
|
+
"post": {
|
|
2279
|
+
"operationId": "listEmailTemplateReferences",
|
|
2280
|
+
"summary": "listEmailTemplateReferences",
|
|
2281
|
+
"description": "Read-only sibling of migrateEmailTemplateReferences. Lists every portal in\nthe caller's org whose `email_templates` config references `template_id`,\nwithout rewriting anything. Used by the email-template MFE to show which\nportals a template affects (in template settings and as a pre-migrate\npreview). Uses the same discovery as the migrate path.\n",
|
|
2282
|
+
"tags": [
|
|
2283
|
+
"ECP Admin"
|
|
2284
|
+
],
|
|
2285
|
+
"security": [
|
|
2286
|
+
{
|
|
2287
|
+
"EpilotAuth": []
|
|
2288
|
+
}
|
|
2289
|
+
],
|
|
2290
|
+
"requestBody": {
|
|
2291
|
+
"description": "Template id to look up references for",
|
|
2292
|
+
"required": true,
|
|
2293
|
+
"content": {
|
|
2294
|
+
"application/json": {
|
|
2295
|
+
"schema": {
|
|
2296
|
+
"type": "object",
|
|
2297
|
+
"required": [
|
|
2298
|
+
"template_id"
|
|
2299
|
+
],
|
|
2300
|
+
"properties": {
|
|
2301
|
+
"template_id": {
|
|
2302
|
+
"type": "string",
|
|
2303
|
+
"description": "Email template id to find portal references for"
|
|
2304
|
+
}
|
|
2305
|
+
}
|
|
2306
|
+
}
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
},
|
|
2310
|
+
"responses": {
|
|
2311
|
+
"200": {
|
|
2312
|
+
"description": "Portals referencing the template.",
|
|
2313
|
+
"content": {
|
|
2314
|
+
"application/json": {
|
|
2315
|
+
"schema": {
|
|
2316
|
+
"type": "object",
|
|
2317
|
+
"required": [
|
|
2318
|
+
"portals"
|
|
2319
|
+
],
|
|
2320
|
+
"properties": {
|
|
2321
|
+
"portals": {
|
|
2322
|
+
"type": "array",
|
|
2323
|
+
"items": {
|
|
2324
|
+
"type": "object",
|
|
2325
|
+
"required": [
|
|
2326
|
+
"id"
|
|
2327
|
+
],
|
|
2328
|
+
"properties": {
|
|
2329
|
+
"id": {
|
|
2330
|
+
"type": "string"
|
|
2331
|
+
},
|
|
2332
|
+
"name": {
|
|
2333
|
+
"type": "string",
|
|
2334
|
+
"nullable": true,
|
|
2335
|
+
"description": "Portal display name (or domain); falls back to id when unavailable"
|
|
2336
|
+
}
|
|
2337
|
+
}
|
|
2338
|
+
}
|
|
2339
|
+
}
|
|
2340
|
+
}
|
|
2341
|
+
}
|
|
2342
|
+
}
|
|
2343
|
+
}
|
|
2344
|
+
},
|
|
2345
|
+
"401": {
|
|
2346
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
2347
|
+
},
|
|
2348
|
+
"403": {
|
|
2349
|
+
"$ref": "#/components/responses/Forbidden"
|
|
2350
|
+
},
|
|
2351
|
+
"500": {
|
|
2352
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
2353
|
+
}
|
|
2354
|
+
}
|
|
2355
|
+
}
|
|
2356
|
+
},
|
|
2193
2357
|
"/v3/portal/email-templates/{portal_id}": {
|
|
2194
2358
|
"post": {
|
|
2195
2359
|
"operationId": "upsertEmailTemplatesByPortalId",
|
|
@@ -3831,9 +3995,8 @@
|
|
|
3831
3995
|
"properties": {
|
|
3832
3996
|
"message": {
|
|
3833
3997
|
"type": "string",
|
|
3834
|
-
"
|
|
3835
|
-
|
|
3836
|
-
]
|
|
3998
|
+
"description": "`User Succesfully Deleted` when the user was deleted, or `Account deletion requested`\nwhen an asynchronous deleteAccount portal extension hook handed the deletion over to a third party.\n",
|
|
3999
|
+
"example": "User Succesfully Deleted"
|
|
3837
4000
|
},
|
|
3838
4001
|
"data": {
|
|
3839
4002
|
"$ref": "#/components/schemas/EntityId"
|
|
@@ -3873,8 +4036,7 @@
|
|
|
3873
4036
|
"schema": {
|
|
3874
4037
|
"type": "object",
|
|
3875
4038
|
"required": [
|
|
3876
|
-
"email"
|
|
3877
|
-
"password"
|
|
4039
|
+
"email"
|
|
3878
4040
|
],
|
|
3879
4041
|
"properties": {
|
|
3880
4042
|
"email": {
|
|
@@ -3884,7 +4046,7 @@
|
|
|
3884
4046
|
},
|
|
3885
4047
|
"password": {
|
|
3886
4048
|
"type": "string",
|
|
3887
|
-
"description": "Password of the portal user for confirmation"
|
|
4049
|
+
"description": "Password of the portal user for confirmation.\nRequired unless a `changeEmail` portal extension hook with `require_password_confirmation` disabled is configured for the portal.\n"
|
|
3888
4050
|
}
|
|
3889
4051
|
}
|
|
3890
4052
|
}
|
|
@@ -3901,9 +4063,66 @@
|
|
|
3901
4063
|
"properties": {
|
|
3902
4064
|
"message": {
|
|
3903
4065
|
"type": "string",
|
|
3904
|
-
"
|
|
3905
|
-
|
|
3906
|
-
|
|
4066
|
+
"description": "`You will receive a confirmation mail soon on your updated email address.` for the built-in flow,\nor `Your email change request has been received.` when a changeEmail portal extension hook handed\nthe change over to a third party.\n",
|
|
4067
|
+
"example": "You will receive a confirmation mail soon on your updated email address."
|
|
4068
|
+
}
|
|
4069
|
+
}
|
|
4070
|
+
}
|
|
4071
|
+
}
|
|
4072
|
+
}
|
|
4073
|
+
},
|
|
4074
|
+
"400": {
|
|
4075
|
+
"$ref": "#/components/responses/InvalidRequest"
|
|
4076
|
+
},
|
|
4077
|
+
"401": {
|
|
4078
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
4079
|
+
},
|
|
4080
|
+
"500": {
|
|
4081
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
4082
|
+
}
|
|
4083
|
+
}
|
|
4084
|
+
}
|
|
4085
|
+
},
|
|
4086
|
+
"/v2/portal/user/change/password": {
|
|
4087
|
+
"put": {
|
|
4088
|
+
"operationId": "changePortalUserPassword",
|
|
4089
|
+
"summary": "changePortalUserPassword",
|
|
4090
|
+
"description": "Hand over a password change to the third-party system configured via the `changePassword` portal extension hook.\nOnly available when such a hook is configured for the portal; the built-in password change flow does not use this endpoint.\n",
|
|
4091
|
+
"tags": [
|
|
4092
|
+
"ECP"
|
|
4093
|
+
],
|
|
4094
|
+
"security": [
|
|
4095
|
+
{
|
|
4096
|
+
"PortalAuth": []
|
|
4097
|
+
}
|
|
4098
|
+
],
|
|
4099
|
+
"requestBody": {
|
|
4100
|
+
"description": "Request payload",
|
|
4101
|
+
"required": false,
|
|
4102
|
+
"content": {
|
|
4103
|
+
"application/json": {
|
|
4104
|
+
"schema": {
|
|
4105
|
+
"type": "object",
|
|
4106
|
+
"properties": {
|
|
4107
|
+
"new_password": {
|
|
4108
|
+
"type": "string",
|
|
4109
|
+
"description": "New password chosen by the portal user.\nRequired when the configured `changePassword` hook has `require_new_password` enabled, ignored otherwise.\n"
|
|
4110
|
+
}
|
|
4111
|
+
}
|
|
4112
|
+
}
|
|
4113
|
+
}
|
|
4114
|
+
}
|
|
4115
|
+
},
|
|
4116
|
+
"responses": {
|
|
4117
|
+
"200": {
|
|
4118
|
+
"description": "The password change request was handed over to the third-party system.",
|
|
4119
|
+
"content": {
|
|
4120
|
+
"application/json": {
|
|
4121
|
+
"schema": {
|
|
4122
|
+
"type": "object",
|
|
4123
|
+
"properties": {
|
|
4124
|
+
"message": {
|
|
4125
|
+
"type": "string"
|
|
3907
4126
|
}
|
|
3908
4127
|
}
|
|
3909
4128
|
}
|
|
@@ -3916,6 +4135,9 @@
|
|
|
3916
4135
|
"401": {
|
|
3917
4136
|
"$ref": "#/components/responses/Unauthorized"
|
|
3918
4137
|
},
|
|
4138
|
+
"404": {
|
|
4139
|
+
"description": "No changePassword portal extension hook is configured for this portal."
|
|
4140
|
+
},
|
|
3919
4141
|
"500": {
|
|
3920
4142
|
"$ref": "#/components/responses/InternalServerError"
|
|
3921
4143
|
}
|
|
@@ -7034,91 +7256,241 @@
|
|
|
7034
7256
|
}
|
|
7035
7257
|
}
|
|
7036
7258
|
},
|
|
7037
|
-
"/v2/portal/
|
|
7259
|
+
"/v2/portal/entity/{slug}": {
|
|
7038
7260
|
"post": {
|
|
7039
|
-
"operationId": "
|
|
7040
|
-
"summary": "
|
|
7041
|
-
"description": "
|
|
7261
|
+
"operationId": "createPortalUserEntity",
|
|
7262
|
+
"summary": "createPortalUserEntity",
|
|
7263
|
+
"description": "**EXPERIMENTAL — do not rely on this endpoint.** It is unstable, currently limited to the `asset` schema, and may change or be removed without notice; third parties must not build on it yet.\nCreate a single entity on behalf of a portal user. The schema slug is passed in the path and must be one of the supported (experimental) schemas; field-level permissions are enforced by the caller's role grants. The request body is the entity to create (its attributes); the created entity is automatically related to the caller's contact.",
|
|
7264
|
+
"deprecated": true,
|
|
7042
7265
|
"tags": [
|
|
7043
|
-
"ECP
|
|
7266
|
+
"ECP"
|
|
7044
7267
|
],
|
|
7045
7268
|
"security": [
|
|
7046
7269
|
{
|
|
7047
|
-
"
|
|
7270
|
+
"PortalAuth": []
|
|
7048
7271
|
}
|
|
7049
7272
|
],
|
|
7050
7273
|
"parameters": [
|
|
7051
7274
|
{
|
|
7052
|
-
"in": "
|
|
7053
|
-
"name": "
|
|
7054
|
-
"
|
|
7055
|
-
"deprecated": true,
|
|
7056
|
-
"schema": {
|
|
7057
|
-
"$ref": "#/components/schemas/Origin"
|
|
7058
|
-
},
|
|
7059
|
-
"description": "Origin of the portal"
|
|
7060
|
-
},
|
|
7061
|
-
{
|
|
7062
|
-
"in": "query",
|
|
7063
|
-
"name": "portal_id",
|
|
7275
|
+
"in": "path",
|
|
7276
|
+
"name": "slug",
|
|
7277
|
+
"description": "Entity schema slug to create. Limited to the supported (experimental) schemas, currently `asset`.",
|
|
7064
7278
|
"required": true,
|
|
7065
7279
|
"schema": {
|
|
7066
7280
|
"type": "string",
|
|
7067
|
-
"
|
|
7068
|
-
|
|
7281
|
+
"enum": [
|
|
7282
|
+
"asset"
|
|
7283
|
+
],
|
|
7284
|
+
"example": "asset"
|
|
7069
7285
|
}
|
|
7070
7286
|
}
|
|
7071
7287
|
],
|
|
7072
7288
|
"requestBody": {
|
|
7073
|
-
"description": "Request of trigger portal flow",
|
|
7074
7289
|
"required": true,
|
|
7075
7290
|
"content": {
|
|
7076
7291
|
"application/json": {
|
|
7077
7292
|
"schema": {
|
|
7078
|
-
"$ref": "#/components/schemas/
|
|
7293
|
+
"$ref": "#/components/schemas/Entity"
|
|
7294
|
+
},
|
|
7295
|
+
"example": {
|
|
7296
|
+
"title": "PV Inverter",
|
|
7297
|
+
"manufacturer": "SMA",
|
|
7298
|
+
"external_id": "device-123"
|
|
7079
7299
|
}
|
|
7080
7300
|
}
|
|
7081
7301
|
}
|
|
7082
7302
|
},
|
|
7083
7303
|
"responses": {
|
|
7084
|
-
"
|
|
7085
|
-
"description": "
|
|
7304
|
+
"201": {
|
|
7305
|
+
"description": "The entity has been created successfully for the portal user.",
|
|
7086
7306
|
"content": {
|
|
7087
7307
|
"application/json": {
|
|
7088
7308
|
"schema": {
|
|
7089
|
-
"
|
|
7090
|
-
"properties": {
|
|
7091
|
-
"can_trigger": {
|
|
7092
|
-
"type": "boolean",
|
|
7093
|
-
"description": "Whether the flow can be triggered",
|
|
7094
|
-
"example": true
|
|
7095
|
-
}
|
|
7096
|
-
}
|
|
7309
|
+
"$ref": "#/components/schemas/EntityResponse"
|
|
7097
7310
|
}
|
|
7098
7311
|
}
|
|
7099
7312
|
}
|
|
7313
|
+
},
|
|
7314
|
+
"400": {
|
|
7315
|
+
"$ref": "#/components/responses/InvalidRequest"
|
|
7316
|
+
},
|
|
7317
|
+
"401": {
|
|
7318
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7319
|
+
},
|
|
7320
|
+
"403": {
|
|
7321
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7322
|
+
},
|
|
7323
|
+
"500": {
|
|
7324
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
7100
7325
|
}
|
|
7101
7326
|
}
|
|
7102
7327
|
}
|
|
7103
7328
|
},
|
|
7104
|
-
"/v2/portal/
|
|
7105
|
-
"
|
|
7106
|
-
"operationId": "
|
|
7107
|
-
"summary": "
|
|
7108
|
-
"description": "
|
|
7329
|
+
"/v2/portal/entity/{slug}/{id}": {
|
|
7330
|
+
"patch": {
|
|
7331
|
+
"operationId": "patchPortalUserEntity",
|
|
7332
|
+
"summary": "patchPortalUserEntity",
|
|
7333
|
+
"description": "**EXPERIMENTAL — do not rely on this endpoint.** It is unstable, currently limited to the `asset` schema, and may change or be removed without notice; third parties must not build on it yet.\nPartially update a single entity on behalf of a portal user. The schema slug and entity id are passed in the path; the schema must be one of the supported (experimental) schemas. Field-level permissions are enforced by the caller's role grants (use null to clear a field, e.g. external_id). The target entity must already be owned by the caller's contact.",
|
|
7334
|
+
"deprecated": true,
|
|
7109
7335
|
"tags": [
|
|
7110
7336
|
"ECP"
|
|
7111
7337
|
],
|
|
7112
7338
|
"security": [
|
|
7113
7339
|
{
|
|
7114
|
-
"
|
|
7340
|
+
"PortalAuth": []
|
|
7115
7341
|
}
|
|
7116
7342
|
],
|
|
7117
7343
|
"parameters": [
|
|
7118
7344
|
{
|
|
7119
|
-
"in": "
|
|
7120
|
-
"name": "
|
|
7121
|
-
"
|
|
7345
|
+
"in": "path",
|
|
7346
|
+
"name": "slug",
|
|
7347
|
+
"description": "Entity schema slug to update. Limited to the supported (experimental) schemas, currently `asset`.",
|
|
7348
|
+
"required": true,
|
|
7349
|
+
"schema": {
|
|
7350
|
+
"type": "string",
|
|
7351
|
+
"enum": [
|
|
7352
|
+
"asset"
|
|
7353
|
+
],
|
|
7354
|
+
"example": "asset"
|
|
7355
|
+
}
|
|
7356
|
+
},
|
|
7357
|
+
{
|
|
7358
|
+
"in": "path",
|
|
7359
|
+
"name": "id",
|
|
7360
|
+
"description": "ID of the entity to update. Must already be owned by the caller's contact.",
|
|
7361
|
+
"required": true,
|
|
7362
|
+
"schema": {
|
|
7363
|
+
"$ref": "#/components/schemas/EntityId"
|
|
7364
|
+
}
|
|
7365
|
+
}
|
|
7366
|
+
],
|
|
7367
|
+
"requestBody": {
|
|
7368
|
+
"required": true,
|
|
7369
|
+
"content": {
|
|
7370
|
+
"application/json": {
|
|
7371
|
+
"schema": {
|
|
7372
|
+
"$ref": "#/components/schemas/Entity"
|
|
7373
|
+
},
|
|
7374
|
+
"example": {
|
|
7375
|
+
"external_id": null
|
|
7376
|
+
}
|
|
7377
|
+
}
|
|
7378
|
+
}
|
|
7379
|
+
},
|
|
7380
|
+
"responses": {
|
|
7381
|
+
"200": {
|
|
7382
|
+
"description": "The entity has been updated successfully for the portal user.",
|
|
7383
|
+
"content": {
|
|
7384
|
+
"application/json": {
|
|
7385
|
+
"schema": {
|
|
7386
|
+
"$ref": "#/components/schemas/EntityResponse"
|
|
7387
|
+
}
|
|
7388
|
+
}
|
|
7389
|
+
}
|
|
7390
|
+
},
|
|
7391
|
+
"400": {
|
|
7392
|
+
"$ref": "#/components/responses/InvalidRequest"
|
|
7393
|
+
},
|
|
7394
|
+
"401": {
|
|
7395
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7396
|
+
},
|
|
7397
|
+
"403": {
|
|
7398
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7399
|
+
},
|
|
7400
|
+
"404": {
|
|
7401
|
+
"$ref": "#/components/responses/NotFound"
|
|
7402
|
+
},
|
|
7403
|
+
"500": {
|
|
7404
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
7405
|
+
}
|
|
7406
|
+
}
|
|
7407
|
+
}
|
|
7408
|
+
},
|
|
7409
|
+
"/v2/portal/can-trigger-portal-flow": {
|
|
7410
|
+
"post": {
|
|
7411
|
+
"operationId": "canTriggerPortalFlow",
|
|
7412
|
+
"summary": "canTriggerPortalFlow",
|
|
7413
|
+
"description": "Returns whether the user can trigger a portal flow",
|
|
7414
|
+
"tags": [
|
|
7415
|
+
"ECP Admin"
|
|
7416
|
+
],
|
|
7417
|
+
"security": [
|
|
7418
|
+
{
|
|
7419
|
+
"EpilotAuth": []
|
|
7420
|
+
}
|
|
7421
|
+
],
|
|
7422
|
+
"parameters": [
|
|
7423
|
+
{
|
|
7424
|
+
"in": "query",
|
|
7425
|
+
"name": "origin",
|
|
7426
|
+
"required": false,
|
|
7427
|
+
"deprecated": true,
|
|
7428
|
+
"schema": {
|
|
7429
|
+
"$ref": "#/components/schemas/Origin"
|
|
7430
|
+
},
|
|
7431
|
+
"description": "Origin of the portal"
|
|
7432
|
+
},
|
|
7433
|
+
{
|
|
7434
|
+
"in": "query",
|
|
7435
|
+
"name": "portal_id",
|
|
7436
|
+
"required": true,
|
|
7437
|
+
"schema": {
|
|
7438
|
+
"type": "string",
|
|
7439
|
+
"description": "Portal ID",
|
|
7440
|
+
"example": "123"
|
|
7441
|
+
}
|
|
7442
|
+
}
|
|
7443
|
+
],
|
|
7444
|
+
"requestBody": {
|
|
7445
|
+
"description": "Request of trigger portal flow",
|
|
7446
|
+
"required": true,
|
|
7447
|
+
"content": {
|
|
7448
|
+
"application/json": {
|
|
7449
|
+
"schema": {
|
|
7450
|
+
"$ref": "#/components/schemas/TriggerPortalFlow"
|
|
7451
|
+
}
|
|
7452
|
+
}
|
|
7453
|
+
}
|
|
7454
|
+
},
|
|
7455
|
+
"responses": {
|
|
7456
|
+
"200": {
|
|
7457
|
+
"description": "Can Trigger Portal Flow",
|
|
7458
|
+
"content": {
|
|
7459
|
+
"application/json": {
|
|
7460
|
+
"schema": {
|
|
7461
|
+
"type": "object",
|
|
7462
|
+
"properties": {
|
|
7463
|
+
"can_trigger": {
|
|
7464
|
+
"type": "boolean",
|
|
7465
|
+
"description": "Whether the flow can be triggered",
|
|
7466
|
+
"example": true
|
|
7467
|
+
}
|
|
7468
|
+
}
|
|
7469
|
+
}
|
|
7470
|
+
}
|
|
7471
|
+
}
|
|
7472
|
+
}
|
|
7473
|
+
}
|
|
7474
|
+
}
|
|
7475
|
+
},
|
|
7476
|
+
"/v2/portal/automation-context": {
|
|
7477
|
+
"get": {
|
|
7478
|
+
"operationId": "getAutomationContext",
|
|
7479
|
+
"summary": "getAutomationContext",
|
|
7480
|
+
"description": "Retrieves the automation context.",
|
|
7481
|
+
"tags": [
|
|
7482
|
+
"ECP"
|
|
7483
|
+
],
|
|
7484
|
+
"security": [
|
|
7485
|
+
{
|
|
7486
|
+
"EpilotAuth": []
|
|
7487
|
+
}
|
|
7488
|
+
],
|
|
7489
|
+
"parameters": [
|
|
7490
|
+
{
|
|
7491
|
+
"in": "query",
|
|
7492
|
+
"name": "activity_id",
|
|
7493
|
+
"required": true,
|
|
7122
7494
|
"schema": {
|
|
7123
7495
|
"$ref": "#/components/schemas/ActivityId"
|
|
7124
7496
|
},
|
|
@@ -9319,6 +9691,20 @@
|
|
|
9319
9691
|
"example": "5da0a718-c822-403d-9f5d-20d4584e0528"
|
|
9320
9692
|
},
|
|
9321
9693
|
"description": "Portal ID (readonly UUID generated on portal creation)"
|
|
9694
|
+
},
|
|
9695
|
+
{
|
|
9696
|
+
"in": "query",
|
|
9697
|
+
"name": "page_upsert_mode",
|
|
9698
|
+
"required": false,
|
|
9699
|
+
"schema": {
|
|
9700
|
+
"type": "string",
|
|
9701
|
+
"enum": [
|
|
9702
|
+
"id",
|
|
9703
|
+
"slug"
|
|
9704
|
+
],
|
|
9705
|
+
"default": "id"
|
|
9706
|
+
},
|
|
9707
|
+
"description": "Determines how pages are matched for upsert operations:\n- `id` (default): Match pages by their ID. Use this when page IDs are stable and known upfront.\n- `slug`: Match pages by their slug. When a request page has the same slug as an existing page, the existing page ID is adopted. Use this when page ids are unknown or when source page IDs differ from destination page IDs.\n"
|
|
9322
9708
|
}
|
|
9323
9709
|
],
|
|
9324
9710
|
"requestBody": {
|
|
@@ -10127,72 +10513,193 @@
|
|
|
10127
10513
|
}
|
|
10128
10514
|
}
|
|
10129
10515
|
}
|
|
10130
|
-
}
|
|
10131
|
-
|
|
10132
|
-
|
|
10133
|
-
|
|
10134
|
-
|
|
10135
|
-
"description": "
|
|
10136
|
-
"
|
|
10137
|
-
"
|
|
10138
|
-
|
|
10139
|
-
|
|
10140
|
-
|
|
10516
|
+
},
|
|
10517
|
+
"/v1/portal/mobile-config": {
|
|
10518
|
+
"get": {
|
|
10519
|
+
"operationId": "getMobileConfig",
|
|
10520
|
+
"summary": "getMobileConfig",
|
|
10521
|
+
"description": "Returns the portal's mobile app configuration. By default the response is build-ready (resolved): base info (display_name from the portal name, app_host from the domain, environment) and branding (logo from the portal images, colors from the design palette) are filled in. Pass raw=true to get only the stored mobile_config without resolution.",
|
|
10522
|
+
"tags": [
|
|
10523
|
+
"ECP Admin"
|
|
10524
|
+
],
|
|
10525
|
+
"security": [
|
|
10526
|
+
{
|
|
10527
|
+
"EpilotAuth": []
|
|
10141
10528
|
}
|
|
10142
|
-
|
|
10143
|
-
|
|
10144
|
-
|
|
10145
|
-
|
|
10146
|
-
|
|
10147
|
-
|
|
10529
|
+
],
|
|
10530
|
+
"parameters": [
|
|
10531
|
+
{
|
|
10532
|
+
"in": "query",
|
|
10533
|
+
"name": "portal_id",
|
|
10534
|
+
"required": true,
|
|
10148
10535
|
"schema": {
|
|
10149
|
-
"
|
|
10150
|
-
}
|
|
10151
|
-
|
|
10152
|
-
|
|
10153
|
-
|
|
10154
|
-
|
|
10155
|
-
|
|
10156
|
-
|
|
10157
|
-
"application/json": {
|
|
10536
|
+
"type": "string"
|
|
10537
|
+
},
|
|
10538
|
+
"description": "Portal ID"
|
|
10539
|
+
},
|
|
10540
|
+
{
|
|
10541
|
+
"in": "query",
|
|
10542
|
+
"name": "raw",
|
|
10543
|
+
"required": false,
|
|
10158
10544
|
"schema": {
|
|
10159
|
-
"
|
|
10160
|
-
}
|
|
10545
|
+
"type": "boolean"
|
|
10546
|
+
},
|
|
10547
|
+
"description": "Return only the stored mobile_config without resolving base info/branding."
|
|
10161
10548
|
}
|
|
10162
|
-
|
|
10163
|
-
|
|
10164
|
-
|
|
10165
|
-
|
|
10166
|
-
|
|
10167
|
-
|
|
10168
|
-
|
|
10169
|
-
|
|
10170
|
-
{
|
|
10171
|
-
"$ref": "#/components/schemas/ErrorResp"
|
|
10172
|
-
},
|
|
10173
|
-
{
|
|
10174
|
-
"$ref": "#/components/schemas/FailedRuleErrorResp"
|
|
10549
|
+
],
|
|
10550
|
+
"responses": {
|
|
10551
|
+
"200": {
|
|
10552
|
+
"description": "Mobile config retrieved successfully.",
|
|
10553
|
+
"content": {
|
|
10554
|
+
"application/json": {
|
|
10555
|
+
"schema": {
|
|
10556
|
+
"$ref": "#/components/schemas/MobileConfig"
|
|
10175
10557
|
}
|
|
10176
|
-
|
|
10558
|
+
}
|
|
10177
10559
|
}
|
|
10560
|
+
},
|
|
10561
|
+
"401": {
|
|
10562
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10563
|
+
},
|
|
10564
|
+
"403": {
|
|
10565
|
+
"$ref": "#/components/responses/Forbidden"
|
|
10566
|
+
},
|
|
10567
|
+
"404": {
|
|
10568
|
+
"$ref": "#/components/responses/NotFound"
|
|
10569
|
+
},
|
|
10570
|
+
"500": {
|
|
10571
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
10178
10572
|
}
|
|
10179
10573
|
}
|
|
10180
10574
|
},
|
|
10181
|
-
"
|
|
10182
|
-
"
|
|
10183
|
-
"
|
|
10184
|
-
|
|
10185
|
-
|
|
10186
|
-
|
|
10187
|
-
|
|
10575
|
+
"put": {
|
|
10576
|
+
"operationId": "putMobileConfig",
|
|
10577
|
+
"summary": "putMobileConfig",
|
|
10578
|
+
"description": "Merges the provided fields into the portal's mobile app configuration\n(deep merge). Only mobile_config is modified; all other portal settings\nare left untouched.\n",
|
|
10579
|
+
"tags": [
|
|
10580
|
+
"ECP Admin"
|
|
10581
|
+
],
|
|
10582
|
+
"security": [
|
|
10583
|
+
{
|
|
10584
|
+
"EpilotAuth": []
|
|
10188
10585
|
}
|
|
10189
|
-
|
|
10190
|
-
|
|
10191
|
-
|
|
10192
|
-
|
|
10193
|
-
|
|
10194
|
-
|
|
10195
|
-
"schema": {
|
|
10586
|
+
],
|
|
10587
|
+
"parameters": [
|
|
10588
|
+
{
|
|
10589
|
+
"in": "query",
|
|
10590
|
+
"name": "portal_id",
|
|
10591
|
+
"required": true,
|
|
10592
|
+
"schema": {
|
|
10593
|
+
"type": "string"
|
|
10594
|
+
},
|
|
10595
|
+
"description": "Portal ID"
|
|
10596
|
+
}
|
|
10597
|
+
],
|
|
10598
|
+
"requestBody": {
|
|
10599
|
+
"description": "Editable mobile fields to merge into the existing mobile_config. Only mobile-relevant settings + app branding are applied; other fields are ignored.",
|
|
10600
|
+
"required": true,
|
|
10601
|
+
"content": {
|
|
10602
|
+
"application/json": {
|
|
10603
|
+
"schema": {
|
|
10604
|
+
"$ref": "#/components/schemas/MobileConfigUpdate"
|
|
10605
|
+
}
|
|
10606
|
+
}
|
|
10607
|
+
}
|
|
10608
|
+
},
|
|
10609
|
+
"responses": {
|
|
10610
|
+
"200": {
|
|
10611
|
+
"description": "Mobile config updated successfully.",
|
|
10612
|
+
"content": {
|
|
10613
|
+
"application/json": {
|
|
10614
|
+
"schema": {
|
|
10615
|
+
"$ref": "#/components/schemas/MobileConfig"
|
|
10616
|
+
}
|
|
10617
|
+
}
|
|
10618
|
+
}
|
|
10619
|
+
},
|
|
10620
|
+
"400": {
|
|
10621
|
+
"$ref": "#/components/responses/InvalidRequest"
|
|
10622
|
+
},
|
|
10623
|
+
"401": {
|
|
10624
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
10625
|
+
},
|
|
10626
|
+
"403": {
|
|
10627
|
+
"$ref": "#/components/responses/Forbidden"
|
|
10628
|
+
},
|
|
10629
|
+
"404": {
|
|
10630
|
+
"$ref": "#/components/responses/NotFound"
|
|
10631
|
+
},
|
|
10632
|
+
"500": {
|
|
10633
|
+
"$ref": "#/components/responses/InternalServerError"
|
|
10634
|
+
}
|
|
10635
|
+
}
|
|
10636
|
+
}
|
|
10637
|
+
}
|
|
10638
|
+
},
|
|
10639
|
+
"components": {
|
|
10640
|
+
"responses": {
|
|
10641
|
+
"InvalidRequest": {
|
|
10642
|
+
"description": "The request could not be validated",
|
|
10643
|
+
"content": {
|
|
10644
|
+
"application/json": {
|
|
10645
|
+
"schema": {
|
|
10646
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
10647
|
+
}
|
|
10648
|
+
}
|
|
10649
|
+
}
|
|
10650
|
+
},
|
|
10651
|
+
"Unauthorized": {
|
|
10652
|
+
"description": "Could not authenticate the user",
|
|
10653
|
+
"content": {
|
|
10654
|
+
"application/json": {
|
|
10655
|
+
"schema": {
|
|
10656
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
10657
|
+
}
|
|
10658
|
+
}
|
|
10659
|
+
}
|
|
10660
|
+
},
|
|
10661
|
+
"Forbidden": {
|
|
10662
|
+
"description": "The user is not allowed to access this resource",
|
|
10663
|
+
"content": {
|
|
10664
|
+
"application/json": {
|
|
10665
|
+
"schema": {
|
|
10666
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
10667
|
+
}
|
|
10668
|
+
}
|
|
10669
|
+
}
|
|
10670
|
+
},
|
|
10671
|
+
"ForbiddenByRule": {
|
|
10672
|
+
"description": "The user is not allowed to access this resource",
|
|
10673
|
+
"content": {
|
|
10674
|
+
"application/json": {
|
|
10675
|
+
"schema": {
|
|
10676
|
+
"oneOf": [
|
|
10677
|
+
{
|
|
10678
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
10679
|
+
},
|
|
10680
|
+
{
|
|
10681
|
+
"$ref": "#/components/schemas/FailedRuleErrorResp"
|
|
10682
|
+
}
|
|
10683
|
+
]
|
|
10684
|
+
}
|
|
10685
|
+
}
|
|
10686
|
+
}
|
|
10687
|
+
},
|
|
10688
|
+
"Conflict": {
|
|
10689
|
+
"description": "The request conflicts with the current state of the target resource.",
|
|
10690
|
+
"content": {
|
|
10691
|
+
"application/json": {
|
|
10692
|
+
"schema": {
|
|
10693
|
+
"$ref": "#/components/schemas/ErrorResp"
|
|
10694
|
+
}
|
|
10695
|
+
}
|
|
10696
|
+
}
|
|
10697
|
+
},
|
|
10698
|
+
"ContractAssignmentConflict": {
|
|
10699
|
+
"description": "Contract was found but is not assignable in its current state.",
|
|
10700
|
+
"content": {
|
|
10701
|
+
"application/json": {
|
|
10702
|
+
"schema": {
|
|
10196
10703
|
"allOf": [
|
|
10197
10704
|
{
|
|
10198
10705
|
"$ref": "#/components/schemas/ErrorResp"
|
|
@@ -10360,6 +10867,203 @@
|
|
|
10360
10867
|
}
|
|
10361
10868
|
},
|
|
10362
10869
|
"schemas": {
|
|
10870
|
+
"MobileBuildStatus": {
|
|
10871
|
+
"type": "object",
|
|
10872
|
+
"description": "Latest build/upload status for a platform (system-written).",
|
|
10873
|
+
"additionalProperties": true,
|
|
10874
|
+
"properties": {
|
|
10875
|
+
"version": {
|
|
10876
|
+
"type": "string"
|
|
10877
|
+
},
|
|
10878
|
+
"build_number": {
|
|
10879
|
+
"type": "integer"
|
|
10880
|
+
},
|
|
10881
|
+
"track": {
|
|
10882
|
+
"type": "string",
|
|
10883
|
+
"description": "e.g. testflight | internal | beta"
|
|
10884
|
+
},
|
|
10885
|
+
"status": {
|
|
10886
|
+
"type": "string",
|
|
10887
|
+
"enum": [
|
|
10888
|
+
"building",
|
|
10889
|
+
"uploaded",
|
|
10890
|
+
"failed"
|
|
10891
|
+
]
|
|
10892
|
+
},
|
|
10893
|
+
"updated_at": {
|
|
10894
|
+
"type": "string",
|
|
10895
|
+
"format": "date-time"
|
|
10896
|
+
},
|
|
10897
|
+
"error": {
|
|
10898
|
+
"type": "string"
|
|
10899
|
+
}
|
|
10900
|
+
}
|
|
10901
|
+
},
|
|
10902
|
+
"MobileBranding": {
|
|
10903
|
+
"type": "object",
|
|
10904
|
+
"additionalProperties": true,
|
|
10905
|
+
"properties": {
|
|
10906
|
+
"app_icon": {
|
|
10907
|
+
"type": "string"
|
|
10908
|
+
},
|
|
10909
|
+
"splash": {
|
|
10910
|
+
"type": "string"
|
|
10911
|
+
},
|
|
10912
|
+
"splash_dark": {
|
|
10913
|
+
"type": "string"
|
|
10914
|
+
},
|
|
10915
|
+
"icon_background_color": {
|
|
10916
|
+
"type": "string"
|
|
10917
|
+
},
|
|
10918
|
+
"splash_background_color": {
|
|
10919
|
+
"type": "string"
|
|
10920
|
+
},
|
|
10921
|
+
"splash_background_color_dark": {
|
|
10922
|
+
"type": "string"
|
|
10923
|
+
}
|
|
10924
|
+
}
|
|
10925
|
+
},
|
|
10926
|
+
"MobileConfig": {
|
|
10927
|
+
"type": "object",
|
|
10928
|
+
"description": "Mobile app configuration for the portal. Stored inside the portal's config object. Identifiers/branding are non-secret; signing credentials live in a secure store, never here.",
|
|
10929
|
+
"additionalProperties": true,
|
|
10930
|
+
"properties": {
|
|
10931
|
+
"portal_id": {
|
|
10932
|
+
"type": "string",
|
|
10933
|
+
"description": "Portal id (response-only; ignored on write)."
|
|
10934
|
+
},
|
|
10935
|
+
"enabled": {
|
|
10936
|
+
"type": "boolean"
|
|
10937
|
+
},
|
|
10938
|
+
"display_name": {
|
|
10939
|
+
"type": "string",
|
|
10940
|
+
"description": "App display name compiled into the binary."
|
|
10941
|
+
},
|
|
10942
|
+
"app_host": {
|
|
10943
|
+
"type": "string",
|
|
10944
|
+
"description": "Host the mobile shell loads (defaults to the portal domain)."
|
|
10945
|
+
},
|
|
10946
|
+
"environment": {
|
|
10947
|
+
"type": "string",
|
|
10948
|
+
"enum": [
|
|
10949
|
+
"prod",
|
|
10950
|
+
"staging",
|
|
10951
|
+
"dev"
|
|
10952
|
+
]
|
|
10953
|
+
},
|
|
10954
|
+
"branding": {
|
|
10955
|
+
"$ref": "#/components/schemas/MobileBranding"
|
|
10956
|
+
},
|
|
10957
|
+
"ios": {
|
|
10958
|
+
"type": "object",
|
|
10959
|
+
"additionalProperties": true,
|
|
10960
|
+
"properties": {
|
|
10961
|
+
"bundle_id": {
|
|
10962
|
+
"type": "string",
|
|
10963
|
+
"description": "iOS bundle id (matches the App Store Connect app)."
|
|
10964
|
+
},
|
|
10965
|
+
"team_id": {
|
|
10966
|
+
"type": "string",
|
|
10967
|
+
"description": "Apple Developer Team ID."
|
|
10968
|
+
},
|
|
10969
|
+
"credentials_status": {
|
|
10970
|
+
"type": "string",
|
|
10971
|
+
"enum": [
|
|
10972
|
+
"not_configured",
|
|
10973
|
+
"configured"
|
|
10974
|
+
]
|
|
10975
|
+
},
|
|
10976
|
+
"app_store_id": {
|
|
10977
|
+
"type": "string",
|
|
10978
|
+
"description": "Numeric App Store id (system-written after first upload)."
|
|
10979
|
+
},
|
|
10980
|
+
"store_url": {
|
|
10981
|
+
"type": "string",
|
|
10982
|
+
"description": "System-written App Store URL."
|
|
10983
|
+
},
|
|
10984
|
+
"last_build": {
|
|
10985
|
+
"$ref": "#/components/schemas/MobileBuildStatus"
|
|
10986
|
+
}
|
|
10987
|
+
}
|
|
10988
|
+
},
|
|
10989
|
+
"android": {
|
|
10990
|
+
"type": "object",
|
|
10991
|
+
"additionalProperties": true,
|
|
10992
|
+
"properties": {
|
|
10993
|
+
"package_name": {
|
|
10994
|
+
"type": "string",
|
|
10995
|
+
"description": "Android package name (matches the Play Console app)."
|
|
10996
|
+
},
|
|
10997
|
+
"credentials_status": {
|
|
10998
|
+
"type": "string",
|
|
10999
|
+
"enum": [
|
|
11000
|
+
"not_configured",
|
|
11001
|
+
"configured"
|
|
11002
|
+
]
|
|
11003
|
+
},
|
|
11004
|
+
"upload_key_status": {
|
|
11005
|
+
"type": "string",
|
|
11006
|
+
"description": "Play App Signing upload-key state.",
|
|
11007
|
+
"enum": [
|
|
11008
|
+
"not_configured",
|
|
11009
|
+
"generated",
|
|
11010
|
+
"enrolled"
|
|
11011
|
+
]
|
|
11012
|
+
},
|
|
11013
|
+
"store_url": {
|
|
11014
|
+
"type": "string",
|
|
11015
|
+
"description": "System-written Play Store URL."
|
|
11016
|
+
},
|
|
11017
|
+
"last_build": {
|
|
11018
|
+
"$ref": "#/components/schemas/MobileBuildStatus"
|
|
11019
|
+
}
|
|
11020
|
+
}
|
|
11021
|
+
}
|
|
11022
|
+
}
|
|
11023
|
+
},
|
|
11024
|
+
"MobileConfigUpdate": {
|
|
11025
|
+
"type": "object",
|
|
11026
|
+
"description": "Editable mobile fields for PUT. Only mobile-relevant settings + app branding can be changed. Portal-derived values (display_name, app_host), the portal logo, and system-written fields (credentials_status, app_store_id, last_build, …) are ignored if sent.",
|
|
11027
|
+
"additionalProperties": true,
|
|
11028
|
+
"properties": {
|
|
11029
|
+
"enabled": {
|
|
11030
|
+
"type": "boolean"
|
|
11031
|
+
},
|
|
11032
|
+
"ios": {
|
|
11033
|
+
"type": "object",
|
|
11034
|
+
"additionalProperties": true,
|
|
11035
|
+
"properties": {
|
|
11036
|
+
"bundle_id": {
|
|
11037
|
+
"type": "string"
|
|
11038
|
+
},
|
|
11039
|
+
"team_id": {
|
|
11040
|
+
"type": "string"
|
|
11041
|
+
},
|
|
11042
|
+
"store_url": {
|
|
11043
|
+
"type": "string"
|
|
11044
|
+
},
|
|
11045
|
+
"app_store_id": {
|
|
11046
|
+
"type": "string"
|
|
11047
|
+
}
|
|
11048
|
+
}
|
|
11049
|
+
},
|
|
11050
|
+
"android": {
|
|
11051
|
+
"type": "object",
|
|
11052
|
+
"additionalProperties": true,
|
|
11053
|
+
"properties": {
|
|
11054
|
+
"package_name": {
|
|
11055
|
+
"type": "string"
|
|
11056
|
+
},
|
|
11057
|
+
"store_url": {
|
|
11058
|
+
"type": "string"
|
|
11059
|
+
}
|
|
11060
|
+
}
|
|
11061
|
+
},
|
|
11062
|
+
"branding": {
|
|
11063
|
+
"$ref": "#/components/schemas/MobileBranding"
|
|
11064
|
+
}
|
|
11065
|
+
}
|
|
11066
|
+
},
|
|
10363
11067
|
"ContextEntity": {
|
|
10364
11068
|
"type": "object",
|
|
10365
11069
|
"description": "An entity reference for context-aware operations",
|
|
@@ -10969,6 +11673,10 @@
|
|
|
10969
11673
|
"auto_redirect_to_sso": {
|
|
10970
11674
|
"type": "boolean",
|
|
10971
11675
|
"description": "Decide whether to automatically redirect to the provider page during login, which would completely bypass showing the portal authentication page."
|
|
11676
|
+
},
|
|
11677
|
+
"prevent_user_enumeration": {
|
|
11678
|
+
"type": "boolean",
|
|
11679
|
+
"description": "Opt-in. When true, suppresses responses that reveal whether a user exists for public, pre-authentication actions (the login entry-point check and self-registration), at the expense of some UX. Already-authenticated actions are unaffected. Default false.\n"
|
|
10972
11680
|
}
|
|
10973
11681
|
}
|
|
10974
11682
|
},
|
|
@@ -14282,25 +14990,130 @@
|
|
|
14282
14990
|
"$ref": "#/components/schemas/PublicMeterReadingPlausibilityCheckDetails"
|
|
14283
14991
|
}
|
|
14284
14992
|
}
|
|
14285
|
-
}
|
|
14286
|
-
}
|
|
14287
|
-
},
|
|
14288
|
-
"DataRetrievalItem": {
|
|
14289
|
-
"type": "object",
|
|
14290
|
-
"properties": {
|
|
14291
|
-
"app": {
|
|
14292
|
-
"$ref": "#/components/schemas/PublicAppDetails"
|
|
14293
|
-
},
|
|
14294
|
-
"extension": {
|
|
14295
|
-
"$ref": "#/components/schemas/PublicExtensionDetails"
|
|
14296
14993
|
},
|
|
14297
|
-
"
|
|
14298
|
-
"
|
|
14299
|
-
|
|
14300
|
-
|
|
14301
|
-
|
|
14302
|
-
|
|
14303
|
-
|
|
14994
|
+
"changeEmail": {
|
|
14995
|
+
"type": "object",
|
|
14996
|
+
"properties": {
|
|
14997
|
+
"app": {
|
|
14998
|
+
"$ref": "#/components/schemas/PublicAppDetails"
|
|
14999
|
+
},
|
|
15000
|
+
"extension": {
|
|
15001
|
+
"$ref": "#/components/schemas/PublicExtensionDetails"
|
|
15002
|
+
},
|
|
15003
|
+
"hook": {
|
|
15004
|
+
"$ref": "#/components/schemas/PublicChangeEmailDetails"
|
|
15005
|
+
}
|
|
15006
|
+
}
|
|
15007
|
+
},
|
|
15008
|
+
"changePassword": {
|
|
15009
|
+
"type": "object",
|
|
15010
|
+
"properties": {
|
|
15011
|
+
"app": {
|
|
15012
|
+
"$ref": "#/components/schemas/PublicAppDetails"
|
|
15013
|
+
},
|
|
15014
|
+
"extension": {
|
|
15015
|
+
"$ref": "#/components/schemas/PublicExtensionDetails"
|
|
15016
|
+
},
|
|
15017
|
+
"hook": {
|
|
15018
|
+
"$ref": "#/components/schemas/PublicChangePasswordDetails"
|
|
15019
|
+
}
|
|
15020
|
+
}
|
|
15021
|
+
},
|
|
15022
|
+
"deleteAccount": {
|
|
15023
|
+
"type": "object",
|
|
15024
|
+
"properties": {
|
|
15025
|
+
"app": {
|
|
15026
|
+
"$ref": "#/components/schemas/PublicAppDetails"
|
|
15027
|
+
},
|
|
15028
|
+
"extension": {
|
|
15029
|
+
"$ref": "#/components/schemas/PublicExtensionDetails"
|
|
15030
|
+
},
|
|
15031
|
+
"hook": {
|
|
15032
|
+
"$ref": "#/components/schemas/PublicDeleteAccountDetails"
|
|
15033
|
+
}
|
|
15034
|
+
}
|
|
15035
|
+
}
|
|
15036
|
+
}
|
|
15037
|
+
},
|
|
15038
|
+
"PublicSelfManagementExplanation": {
|
|
15039
|
+
"type": "object",
|
|
15040
|
+
"properties": {
|
|
15041
|
+
"en": {
|
|
15042
|
+
"type": "string",
|
|
15043
|
+
"description": "Explanation of the functionality shown to the end user."
|
|
15044
|
+
}
|
|
15045
|
+
},
|
|
15046
|
+
"additionalProperties": {
|
|
15047
|
+
"type": "string",
|
|
15048
|
+
"description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
|
|
15049
|
+
},
|
|
15050
|
+
"required": [
|
|
15051
|
+
"en"
|
|
15052
|
+
],
|
|
15053
|
+
"description": "Explanation of the hook."
|
|
15054
|
+
},
|
|
15055
|
+
"PublicChangeEmailDetails": {
|
|
15056
|
+
"type": "object",
|
|
15057
|
+
"properties": {
|
|
15058
|
+
"id": {
|
|
15059
|
+
"type": "string",
|
|
15060
|
+
"description": "Identifier of the hook."
|
|
15061
|
+
},
|
|
15062
|
+
"require_password_confirmation": {
|
|
15063
|
+
"type": "boolean",
|
|
15064
|
+
"description": "Whether the portal user must confirm their current password before the email change is handed over to the third-party system.",
|
|
15065
|
+
"default": true
|
|
15066
|
+
},
|
|
15067
|
+
"explanation": {
|
|
15068
|
+
"$ref": "#/components/schemas/PublicSelfManagementExplanation"
|
|
15069
|
+
}
|
|
15070
|
+
}
|
|
15071
|
+
},
|
|
15072
|
+
"PublicChangePasswordDetails": {
|
|
15073
|
+
"type": "object",
|
|
15074
|
+
"properties": {
|
|
15075
|
+
"id": {
|
|
15076
|
+
"type": "string",
|
|
15077
|
+
"description": "Identifier of the hook."
|
|
15078
|
+
},
|
|
15079
|
+
"require_new_password": {
|
|
15080
|
+
"type": "boolean",
|
|
15081
|
+
"description": "Whether the portal user must provide a new password that is passed to the third-party system.",
|
|
15082
|
+
"default": false
|
|
15083
|
+
},
|
|
15084
|
+
"explanation": {
|
|
15085
|
+
"$ref": "#/components/schemas/PublicSelfManagementExplanation"
|
|
15086
|
+
}
|
|
15087
|
+
}
|
|
15088
|
+
},
|
|
15089
|
+
"PublicDeleteAccountDetails": {
|
|
15090
|
+
"type": "object",
|
|
15091
|
+
"properties": {
|
|
15092
|
+
"id": {
|
|
15093
|
+
"type": "string",
|
|
15094
|
+
"description": "Identifier of the hook."
|
|
15095
|
+
},
|
|
15096
|
+
"explanation": {
|
|
15097
|
+
"$ref": "#/components/schemas/PublicSelfManagementExplanation"
|
|
15098
|
+
}
|
|
15099
|
+
}
|
|
15100
|
+
},
|
|
15101
|
+
"DataRetrievalItem": {
|
|
15102
|
+
"type": "object",
|
|
15103
|
+
"properties": {
|
|
15104
|
+
"app": {
|
|
15105
|
+
"$ref": "#/components/schemas/PublicAppDetails"
|
|
15106
|
+
},
|
|
15107
|
+
"extension": {
|
|
15108
|
+
"$ref": "#/components/schemas/PublicExtensionDetails"
|
|
15109
|
+
},
|
|
15110
|
+
"hook": {
|
|
15111
|
+
"$ref": "#/components/schemas/PublicDataRetrievalHookDetails"
|
|
15112
|
+
}
|
|
15113
|
+
}
|
|
15114
|
+
},
|
|
15115
|
+
"PublicAppDetails": {
|
|
15116
|
+
"type": "object",
|
|
14304
15117
|
"properties": {
|
|
14305
15118
|
"app_id": {
|
|
14306
15119
|
"type": "string",
|
|
@@ -14694,6 +15507,15 @@
|
|
|
14694
15507
|
},
|
|
14695
15508
|
{
|
|
14696
15509
|
"$ref": "#/components/schemas/ExtensionHookVisualizationMetadata"
|
|
15510
|
+
},
|
|
15511
|
+
{
|
|
15512
|
+
"$ref": "#/components/schemas/ExtensionHookChangeEmail"
|
|
15513
|
+
},
|
|
15514
|
+
{
|
|
15515
|
+
"$ref": "#/components/schemas/ExtensionHookChangePassword"
|
|
15516
|
+
},
|
|
15517
|
+
{
|
|
15518
|
+
"$ref": "#/components/schemas/ExtensionHookDeleteAccount"
|
|
14697
15519
|
}
|
|
14698
15520
|
]
|
|
14699
15521
|
}
|
|
@@ -15558,6 +16380,289 @@
|
|
|
15558
16380
|
"call"
|
|
15559
16381
|
]
|
|
15560
16382
|
},
|
|
16383
|
+
"ExtensionHookChangeEmail": {
|
|
16384
|
+
"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",
|
|
16385
|
+
"type": "object",
|
|
16386
|
+
"properties": {
|
|
16387
|
+
"type": {
|
|
16388
|
+
"type": "string",
|
|
16389
|
+
"enum": [
|
|
16390
|
+
"changeEmail"
|
|
16391
|
+
]
|
|
16392
|
+
},
|
|
16393
|
+
"require_password_confirmation": {
|
|
16394
|
+
"type": "boolean",
|
|
16395
|
+
"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",
|
|
16396
|
+
"default": true
|
|
16397
|
+
},
|
|
16398
|
+
"explanation": {
|
|
16399
|
+
"type": "object",
|
|
16400
|
+
"properties": {
|
|
16401
|
+
"en": {
|
|
16402
|
+
"type": "string",
|
|
16403
|
+
"description": "Explanation of the functionality shown to the end user.",
|
|
16404
|
+
"example": "You will receive an email with instructions to confirm your new email address."
|
|
16405
|
+
}
|
|
16406
|
+
},
|
|
16407
|
+
"additionalProperties": {
|
|
16408
|
+
"type": "string",
|
|
16409
|
+
"description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
|
|
16410
|
+
},
|
|
16411
|
+
"required": [
|
|
16412
|
+
"en"
|
|
16413
|
+
],
|
|
16414
|
+
"description": "Optional explanation shown to the user in the change email confirmation dialog."
|
|
16415
|
+
},
|
|
16416
|
+
"auth": {
|
|
16417
|
+
"$ref": "#/components/schemas/ExtensionAuthBlock"
|
|
16418
|
+
},
|
|
16419
|
+
"call": {
|
|
16420
|
+
"type": "object",
|
|
16421
|
+
"properties": {
|
|
16422
|
+
"method": {
|
|
16423
|
+
"type": "string",
|
|
16424
|
+
"description": "HTTP method to use for the call",
|
|
16425
|
+
"default": "POST"
|
|
16426
|
+
},
|
|
16427
|
+
"url": {
|
|
16428
|
+
"type": "string",
|
|
16429
|
+
"description": "URL to call. Supports variable interpolation."
|
|
16430
|
+
},
|
|
16431
|
+
"params": {
|
|
16432
|
+
"type": "object",
|
|
16433
|
+
"description": "Parameters to append to the URL. Supports variable interpolation.",
|
|
16434
|
+
"additionalProperties": {
|
|
16435
|
+
"type": "string"
|
|
16436
|
+
},
|
|
16437
|
+
"default": {}
|
|
16438
|
+
},
|
|
16439
|
+
"headers": {
|
|
16440
|
+
"type": "object",
|
|
16441
|
+
"description": "Headers to use. Supports variable interpolation.",
|
|
16442
|
+
"additionalProperties": {
|
|
16443
|
+
"type": "string"
|
|
16444
|
+
},
|
|
16445
|
+
"default": {}
|
|
16446
|
+
},
|
|
16447
|
+
"body": {
|
|
16448
|
+
"type": "object",
|
|
16449
|
+
"description": "Optional JSON body to use for the call. Defaults to an object with the requested new email and portal user context. The requested new email is available as `{{Input.new_email}}` and the current account email as `{{Input.old_email}}`. Supports variable interpolation."
|
|
16450
|
+
}
|
|
16451
|
+
},
|
|
16452
|
+
"required": [
|
|
16453
|
+
"url",
|
|
16454
|
+
"headers"
|
|
16455
|
+
]
|
|
16456
|
+
},
|
|
16457
|
+
"resolved": {
|
|
16458
|
+
"type": "object",
|
|
16459
|
+
"properties": {
|
|
16460
|
+
"error_message_path": {
|
|
16461
|
+
"type": "string",
|
|
16462
|
+
"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",
|
|
16463
|
+
"example": "error.message"
|
|
16464
|
+
}
|
|
16465
|
+
}
|
|
16466
|
+
},
|
|
16467
|
+
"secure_proxy": {
|
|
16468
|
+
"$ref": "#/components/schemas/SecureProxyConfig"
|
|
16469
|
+
}
|
|
16470
|
+
},
|
|
16471
|
+
"required": [
|
|
16472
|
+
"type",
|
|
16473
|
+
"call"
|
|
16474
|
+
]
|
|
16475
|
+
},
|
|
16476
|
+
"ExtensionHookChangePassword": {
|
|
16477
|
+
"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",
|
|
16478
|
+
"type": "object",
|
|
16479
|
+
"properties": {
|
|
16480
|
+
"type": {
|
|
16481
|
+
"type": "string",
|
|
16482
|
+
"enum": [
|
|
16483
|
+
"changePassword"
|
|
16484
|
+
]
|
|
16485
|
+
},
|
|
16486
|
+
"require_new_password": {
|
|
16487
|
+
"type": "boolean",
|
|
16488
|
+
"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",
|
|
16489
|
+
"default": false
|
|
16490
|
+
},
|
|
16491
|
+
"explanation": {
|
|
16492
|
+
"type": "object",
|
|
16493
|
+
"properties": {
|
|
16494
|
+
"en": {
|
|
16495
|
+
"type": "string",
|
|
16496
|
+
"description": "Explanation of the functionality shown to the end user.",
|
|
16497
|
+
"example": "You will receive an email with instructions to reset your password."
|
|
16498
|
+
}
|
|
16499
|
+
},
|
|
16500
|
+
"additionalProperties": {
|
|
16501
|
+
"type": "string",
|
|
16502
|
+
"description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
|
|
16503
|
+
},
|
|
16504
|
+
"required": [
|
|
16505
|
+
"en"
|
|
16506
|
+
],
|
|
16507
|
+
"description": "Optional explanation shown to the user in the change password confirmation dialog."
|
|
16508
|
+
},
|
|
16509
|
+
"auth": {
|
|
16510
|
+
"$ref": "#/components/schemas/ExtensionAuthBlock"
|
|
16511
|
+
},
|
|
16512
|
+
"call": {
|
|
16513
|
+
"type": "object",
|
|
16514
|
+
"properties": {
|
|
16515
|
+
"method": {
|
|
16516
|
+
"type": "string",
|
|
16517
|
+
"description": "HTTP method to use for the call",
|
|
16518
|
+
"default": "POST"
|
|
16519
|
+
},
|
|
16520
|
+
"url": {
|
|
16521
|
+
"type": "string",
|
|
16522
|
+
"description": "URL to call. Supports variable interpolation."
|
|
16523
|
+
},
|
|
16524
|
+
"params": {
|
|
16525
|
+
"type": "object",
|
|
16526
|
+
"description": "Parameters to append to the URL. Supports variable interpolation.",
|
|
16527
|
+
"additionalProperties": {
|
|
16528
|
+
"type": "string"
|
|
16529
|
+
},
|
|
16530
|
+
"default": {}
|
|
16531
|
+
},
|
|
16532
|
+
"headers": {
|
|
16533
|
+
"type": "object",
|
|
16534
|
+
"description": "Headers to use. Supports variable interpolation.",
|
|
16535
|
+
"additionalProperties": {
|
|
16536
|
+
"type": "string"
|
|
16537
|
+
},
|
|
16538
|
+
"default": {}
|
|
16539
|
+
},
|
|
16540
|
+
"body": {
|
|
16541
|
+
"type": "object",
|
|
16542
|
+
"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."
|
|
16543
|
+
}
|
|
16544
|
+
},
|
|
16545
|
+
"required": [
|
|
16546
|
+
"url",
|
|
16547
|
+
"headers"
|
|
16548
|
+
]
|
|
16549
|
+
},
|
|
16550
|
+
"resolved": {
|
|
16551
|
+
"type": "object",
|
|
16552
|
+
"properties": {
|
|
16553
|
+
"error_message_path": {
|
|
16554
|
+
"type": "string",
|
|
16555
|
+
"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",
|
|
16556
|
+
"example": "error.message"
|
|
16557
|
+
}
|
|
16558
|
+
}
|
|
16559
|
+
},
|
|
16560
|
+
"secure_proxy": {
|
|
16561
|
+
"$ref": "#/components/schemas/SecureProxyConfig"
|
|
16562
|
+
}
|
|
16563
|
+
},
|
|
16564
|
+
"required": [
|
|
16565
|
+
"type",
|
|
16566
|
+
"call"
|
|
16567
|
+
]
|
|
16568
|
+
},
|
|
16569
|
+
"ExtensionHookDeleteAccount": {
|
|
16570
|
+
"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 epilot 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",
|
|
16571
|
+
"type": "object",
|
|
16572
|
+
"properties": {
|
|
16573
|
+
"type": {
|
|
16574
|
+
"type": "string",
|
|
16575
|
+
"enum": [
|
|
16576
|
+
"deleteAccount"
|
|
16577
|
+
]
|
|
16578
|
+
},
|
|
16579
|
+
"deletion_mode": {
|
|
16580
|
+
"type": "string",
|
|
16581
|
+
"enum": [
|
|
16582
|
+
"synchronous",
|
|
16583
|
+
"asynchronous"
|
|
16584
|
+
],
|
|
16585
|
+
"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",
|
|
16586
|
+
"default": "synchronous"
|
|
16587
|
+
},
|
|
16588
|
+
"explanation": {
|
|
16589
|
+
"type": "object",
|
|
16590
|
+
"properties": {
|
|
16591
|
+
"en": {
|
|
16592
|
+
"type": "string",
|
|
16593
|
+
"description": "Explanation of the functionality shown to the end user.",
|
|
16594
|
+
"example": "Your account deletion will be processed by our system. This may take a few days."
|
|
16595
|
+
}
|
|
16596
|
+
},
|
|
16597
|
+
"additionalProperties": {
|
|
16598
|
+
"type": "string",
|
|
16599
|
+
"description": "Explanation of the functionality in language denoted by ISO 3166-1 alpha-2 code."
|
|
16600
|
+
},
|
|
16601
|
+
"required": [
|
|
16602
|
+
"en"
|
|
16603
|
+
],
|
|
16604
|
+
"description": "Optional explanation shown to the user in the delete account confirmation dialog."
|
|
16605
|
+
},
|
|
16606
|
+
"auth": {
|
|
16607
|
+
"$ref": "#/components/schemas/ExtensionAuthBlock"
|
|
16608
|
+
},
|
|
16609
|
+
"call": {
|
|
16610
|
+
"type": "object",
|
|
16611
|
+
"properties": {
|
|
16612
|
+
"method": {
|
|
16613
|
+
"type": "string",
|
|
16614
|
+
"description": "HTTP method to use for the call",
|
|
16615
|
+
"default": "POST"
|
|
16616
|
+
},
|
|
16617
|
+
"url": {
|
|
16618
|
+
"type": "string",
|
|
16619
|
+
"description": "URL to call. Supports variable interpolation."
|
|
16620
|
+
},
|
|
16621
|
+
"params": {
|
|
16622
|
+
"type": "object",
|
|
16623
|
+
"description": "Parameters to append to the URL. Supports variable interpolation.",
|
|
16624
|
+
"additionalProperties": {
|
|
16625
|
+
"type": "string"
|
|
16626
|
+
},
|
|
16627
|
+
"default": {}
|
|
16628
|
+
},
|
|
16629
|
+
"headers": {
|
|
16630
|
+
"type": "object",
|
|
16631
|
+
"description": "Headers to use. Supports variable interpolation.",
|
|
16632
|
+
"additionalProperties": {
|
|
16633
|
+
"type": "string"
|
|
16634
|
+
},
|
|
16635
|
+
"default": {}
|
|
16636
|
+
},
|
|
16637
|
+
"body": {
|
|
16638
|
+
"type": "object",
|
|
16639
|
+
"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."
|
|
16640
|
+
}
|
|
16641
|
+
},
|
|
16642
|
+
"required": [
|
|
16643
|
+
"url",
|
|
16644
|
+
"headers"
|
|
16645
|
+
]
|
|
16646
|
+
},
|
|
16647
|
+
"resolved": {
|
|
16648
|
+
"type": "object",
|
|
16649
|
+
"properties": {
|
|
16650
|
+
"error_message_path": {
|
|
16651
|
+
"type": "string",
|
|
16652
|
+
"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",
|
|
16653
|
+
"example": "error.message"
|
|
16654
|
+
}
|
|
16655
|
+
}
|
|
16656
|
+
},
|
|
16657
|
+
"secure_proxy": {
|
|
16658
|
+
"$ref": "#/components/schemas/SecureProxyConfig"
|
|
16659
|
+
}
|
|
16660
|
+
},
|
|
16661
|
+
"required": [
|
|
16662
|
+
"type",
|
|
16663
|
+
"call"
|
|
16664
|
+
]
|
|
16665
|
+
},
|
|
15561
16666
|
"SecureProxyConfig": {
|
|
15562
16667
|
"type": "object",
|
|
15563
16668
|
"description": "Configuration for routing requests through the ERP Integration secure proxy. Mutually exclusive with use_static_ips.",
|
|
@@ -15886,6 +16991,11 @@
|
|
|
15886
16991
|
},
|
|
15887
16992
|
"mobile_oidc_config": {
|
|
15888
16993
|
"$ref": "#/components/schemas/MoblieOIDCConfig"
|
|
16994
|
+
},
|
|
16995
|
+
"expose_client_secret": {
|
|
16996
|
+
"type": "boolean",
|
|
16997
|
+
"description": "Allow the resolved `client_secret` to be returned through the\npublic single-provider endpoint at SSO initiation. Only set this\nfor OIDC flows that require a public client secret in the\nbrowser (e.g. some PKCE-less authorization-code variants). When\nunset (default), the secret is kept server-side and only used at\nthe token exchange.\n",
|
|
16998
|
+
"example": false
|
|
15889
16999
|
}
|
|
15890
17000
|
},
|
|
15891
17001
|
"required": [
|
|
@@ -16748,6 +17858,10 @@
|
|
|
16748
17858
|
"auto_redirect_to_sso": {
|
|
16749
17859
|
"type": "boolean",
|
|
16750
17860
|
"description": "Decide whether to automatically redirect to the provider page during login, which would completely bypass showing the portal authentication page."
|
|
17861
|
+
},
|
|
17862
|
+
"prevent_user_enumeration": {
|
|
17863
|
+
"type": "boolean",
|
|
17864
|
+
"description": "Opt-in. When true, suppresses responses that reveal whether a user exists for public, pre-authentication actions (the login entry-point check and self-registration), at the expense of some UX. Already-authenticated actions are unaffected. Default false.\n"
|
|
16751
17865
|
}
|
|
16752
17866
|
}
|
|
16753
17867
|
},
|