diff --git a/src/assets/api/crowdin/file-based.yml b/src/assets/api/crowdin/file-based.yml
index 65b2dbd7..e1621919 100644
--- a/src/assets/api/crowdin/file-based.yml
+++ b/src/assets/api/crowdin/file-based.yml
@@ -21403,9 +21403,10 @@ components:
type: string
enum:
- replace
+ - remove
- test
path:
- description: 'A JSON Pointer as defined by RFC 6901'
+ description: 'A JSON Pointer as defined by RFC 6901. The `/perUserOverrides/{userId}` and `/perUserOverrides/{userId}/*` paths accept any positive integer for `{userId}`. Creating a new override requires `{userId}` to be a project member; this requirement does not apply when editing or removing an existing one. The `remove` operation is supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and for `/perUserOverrides/{userId}/*` field paths (removes that field; the resulting override is re-validated).'
type: string
format: json-pointer
enum:
@@ -21413,11 +21414,20 @@ components:
- /editorSuggestionAiPromptId
- /qaCheckActionAiPromptId
- /contextReviewAiPromptId
+ - /dailyCostLimit
+ - /monthlyCostLimit
+ - /userDailyCostLimit
+ - /userMonthlyCostLimit
+ - '/perUserOverrides/{userId}'
+ - '/perUserOverrides/{userId}/costLimitMode'
+ - '/perUserOverrides/{userId}/dailyCostLimit'
+ - '/perUserOverrides/{userId}/monthlyCostLimit'
type: object
discriminator:
propertyName: op
mapping:
replace: '#/components/schemas/AiSettingsOperationReplace'
+ remove: '#/components/schemas/AiSettingsOperationRemove'
test: '#/components/schemas/AiSettingsOperationTest'
AiSettingsOperationReplace:
description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
@@ -21433,8 +21443,21 @@ components:
oneOf:
-
type: integer
+ -
+ type: number
+ format: float
+ -
+ type: string
+ -
+ nullable: true
+ AiSettingsOperationRemove:
+ description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.2). Supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and `/perUserOverrides/{userId}/*` field paths (removes that field). The `costLimitMode` field cannot be removed as the override always requires it.'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/AiSettingsOperation'
AiSettingsOperationTest:
- description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
+ description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
required:
- value
type: object
@@ -21447,6 +21470,13 @@ components:
oneOf:
-
type: integer
+ -
+ type: number
+ format: float
+ -
+ type: string
+ -
+ nullable: true
CrowdinAiSettingsResource:
description: 'AI Settings Resource'
type: object
@@ -21457,7 +21487,7 @@ components:
properties:
data:
$ref: '#/components/schemas/CrowdinAiSettings'
- CrowdinAiSettings:
+ AiSettings:
title: 'AI Settings'
properties:
preTranslationAiPromptId:
@@ -21474,7 +21504,78 @@ components:
type: integer
example: 11
nullable: true
+ dailyCostLimit:
+ description: 'Maximum total AI cost the organization can spend per day. `null` means no daily limit.'
+ type: number
+ format: float
+ example: 100
+ nullable: true
+ monthlyCostLimit:
+ description: 'Maximum total AI cost the organization can spend per month. `null` means no monthly limit.'
+ type: number
+ format: float
+ example: 2000
+ nullable: true
+ userDailyCostLimit:
+ description: 'Default maximum AI cost a single user can spend per day. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user daily limit.'
+ type: number
+ format: float
+ example: 10
+ nullable: true
+ userMonthlyCostLimit:
+ description: 'Default maximum AI cost a single user can spend per month. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user monthly limit.'
+ type: number
+ format: float
+ example: 200
+ nullable: true
+ perUserOverrides:
+ description: 'Per-user cost limit overrides that take precedence over `userDailyCostLimit` and `userMonthlyCostLimit`.'
+ type: array
+ items:
+ $ref: '#/components/schemas/AiUserCostLimit'
type: object
+ AiUserCostLimit:
+ title: 'AI User Cost Limit'
+ properties:
+ userId:
+ description: 'ID of the user this cost limit override applies to'
+ type: integer
+ example: 123
+ costLimitMode:
+ description: "User AI cost limit mode\n\nValues available:\n- custom - Custom daily and monthly cost limits are applied\n- blocked - User is blocked from using AI\n- unlimited - User has no AI cost limit"
+ type: string
+ enum:
+ - custom
+ - blocked
+ - unlimited
+ example: custom
+ dailyCostLimit:
+ description: 'Maximum AI cost this user can spend per day. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
+ type: number
+ format: float
+ example: 5
+ nullable: true
+ monthlyCostLimit:
+ description: 'Maximum AI cost this user can spend per month. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
+ type: number
+ format: float
+ example: 100
+ nullable: true
+ createdAt:
+ type: string
+ format: date-time
+ example: '2026-05-23T11:26:54+00:00'
+ updatedAt:
+ type: string
+ format: date-time
+ example: '2026-05-23T11:26:54+00:00'
+ type: object
+ CrowdinAiSettings:
+ title: 'AI Settings'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/AiSettings'
AiTranslateFormBase:
required:
- strings
@@ -22322,12 +22423,12 @@ components:
description: 'Lifecycle event URLs that changed (installed/uninstall/status)'
type: object
additionalProperties:
- type: object
properties:
from:
type: string
to:
type: string
+ type: object
baseUrlChanged:
description: 'baseUrl change (host that serves the app)'
properties:
diff --git a/src/assets/api/crowdin/string-based.yml b/src/assets/api/crowdin/string-based.yml
index 91844671..bf8af3ef 100644
--- a/src/assets/api/crowdin/string-based.yml
+++ b/src/assets/api/crowdin/string-based.yml
@@ -19631,9 +19631,10 @@ components:
type: string
enum:
- replace
+ - remove
- test
path:
- description: 'A JSON Pointer as defined by RFC 6901'
+ description: 'A JSON Pointer as defined by RFC 6901. The `/perUserOverrides/{userId}` and `/perUserOverrides/{userId}/*` paths accept any positive integer for `{userId}`. Creating a new override requires `{userId}` to be a project member; this requirement does not apply when editing or removing an existing one. The `remove` operation is supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and for `/perUserOverrides/{userId}/*` field paths (removes that field; the resulting override is re-validated).'
type: string
format: json-pointer
enum:
@@ -19641,11 +19642,20 @@ components:
- /editorSuggestionAiPromptId
- /qaCheckActionAiPromptId
- /contextReviewAiPromptId
+ - /dailyCostLimit
+ - /monthlyCostLimit
+ - /userDailyCostLimit
+ - /userMonthlyCostLimit
+ - '/perUserOverrides/{userId}'
+ - '/perUserOverrides/{userId}/costLimitMode'
+ - '/perUserOverrides/{userId}/dailyCostLimit'
+ - '/perUserOverrides/{userId}/monthlyCostLimit'
type: object
discriminator:
propertyName: op
mapping:
replace: '#/components/schemas/AiSettingsOperationReplace'
+ remove: '#/components/schemas/AiSettingsOperationRemove'
test: '#/components/schemas/AiSettingsOperationTest'
AiSettingsOperationReplace:
description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
@@ -19661,8 +19671,21 @@ components:
oneOf:
-
type: integer
+ -
+ type: number
+ format: float
+ -
+ type: string
+ -
+ nullable: true
+ AiSettingsOperationRemove:
+ description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.2). Supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and `/perUserOverrides/{userId}/*` field paths (removes that field). The `costLimitMode` field cannot be removed as the override always requires it.'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/AiSettingsOperation'
AiSettingsOperationTest:
- description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
+ description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
required:
- value
type: object
@@ -19675,6 +19698,13 @@ components:
oneOf:
-
type: integer
+ -
+ type: number
+ format: float
+ -
+ type: string
+ -
+ nullable: true
CrowdinAiSettingsResource:
description: 'AI Settings Resource'
type: object
@@ -19685,7 +19715,7 @@ components:
properties:
data:
$ref: '#/components/schemas/CrowdinAiSettings'
- CrowdinAiSettings:
+ AiSettings:
title: 'AI Settings'
properties:
preTranslationAiPromptId:
@@ -19702,7 +19732,78 @@ components:
type: integer
example: 11
nullable: true
+ dailyCostLimit:
+ description: 'Maximum total AI cost the organization can spend per day. `null` means no daily limit.'
+ type: number
+ format: float
+ example: 100
+ nullable: true
+ monthlyCostLimit:
+ description: 'Maximum total AI cost the organization can spend per month. `null` means no monthly limit.'
+ type: number
+ format: float
+ example: 2000
+ nullable: true
+ userDailyCostLimit:
+ description: 'Default maximum AI cost a single user can spend per day. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user daily limit.'
+ type: number
+ format: float
+ example: 10
+ nullable: true
+ userMonthlyCostLimit:
+ description: 'Default maximum AI cost a single user can spend per month. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user monthly limit.'
+ type: number
+ format: float
+ example: 200
+ nullable: true
+ perUserOverrides:
+ description: 'Per-user cost limit overrides that take precedence over `userDailyCostLimit` and `userMonthlyCostLimit`.'
+ type: array
+ items:
+ $ref: '#/components/schemas/AiUserCostLimit'
type: object
+ AiUserCostLimit:
+ title: 'AI User Cost Limit'
+ properties:
+ userId:
+ description: 'ID of the user this cost limit override applies to'
+ type: integer
+ example: 123
+ costLimitMode:
+ description: "User AI cost limit mode\n\nValues available:\n- custom - Custom daily and monthly cost limits are applied\n- blocked - User is blocked from using AI\n- unlimited - User has no AI cost limit"
+ type: string
+ enum:
+ - custom
+ - blocked
+ - unlimited
+ example: custom
+ dailyCostLimit:
+ description: 'Maximum AI cost this user can spend per day. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
+ type: number
+ format: float
+ example: 5
+ nullable: true
+ monthlyCostLimit:
+ description: 'Maximum AI cost this user can spend per month. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
+ type: number
+ format: float
+ example: 100
+ nullable: true
+ createdAt:
+ type: string
+ format: date-time
+ example: '2026-05-23T11:26:54+00:00'
+ updatedAt:
+ type: string
+ format: date-time
+ example: '2026-05-23T11:26:54+00:00'
+ type: object
+ CrowdinAiSettings:
+ title: 'AI Settings'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/AiSettings'
AiTranslateFormBase:
required:
- strings
@@ -20227,12 +20328,12 @@ components:
description: 'Lifecycle event URLs that changed (installed/uninstall/status)'
type: object
additionalProperties:
- type: object
properties:
from:
type: string
to:
type: string
+ type: object
baseUrlChanged:
description: 'baseUrl change (host that serves the app)'
properties:
diff --git a/src/assets/api/enterprise/file-based.yml b/src/assets/api/enterprise/file-based.yml
index 65a81e64..f6970e6b 100644
--- a/src/assets/api/enterprise/file-based.yml
+++ b/src/assets/api/enterprise/file-based.yml
@@ -25020,9 +25020,10 @@ components:
type: string
enum:
- replace
+ - remove
- test
path:
- description: 'A JSON Pointer as defined by RFC 6901'
+ description: 'A JSON Pointer as defined by RFC 6901. The `/perUserOverrides/{userId}` and `/perUserOverrides/{userId}/*` paths accept any positive integer for `{userId}`. Creating a new override requires `{userId}` to be an organization member; this requirement does not apply when editing or removing an existing one. The `remove` operation is supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and for `/perUserOverrides/{userId}/*` field paths (removes that field; the resulting override is re-validated).'
type: string
format: json-pointer
enum:
@@ -25031,11 +25032,20 @@ components:
- /alignmentActionAiPromptId
- /qaCheckActionAiPromptId
- /contextReviewAiPromptId
+ - /dailyCostLimit
+ - /monthlyCostLimit
+ - /userDailyCostLimit
+ - /userMonthlyCostLimit
+ - '/perUserOverrides/{userId}'
+ - '/perUserOverrides/{userId}/costLimitMode'
+ - '/perUserOverrides/{userId}/dailyCostLimit'
+ - '/perUserOverrides/{userId}/monthlyCostLimit'
type: object
discriminator:
propertyName: op
mapping:
replace: '#/components/schemas/AiSettingsOperationReplace'
+ remove: '#/components/schemas/AiSettingsOperationRemove'
test: '#/components/schemas/AiSettingsOperationTest'
AiSettingsOperationReplace:
description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
@@ -25051,8 +25061,21 @@ components:
oneOf:
-
type: integer
+ -
+ type: number
+ format: float
+ -
+ type: string
+ -
+ nullable: true
+ AiSettingsOperationRemove:
+ description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.2). Supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and `/perUserOverrides/{userId}/*` field paths (removes that field). The `costLimitMode` field cannot be removed as the override always requires it.'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/AiSettingsOperation'
AiSettingsOperationTest:
- description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
+ description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
required:
- value
type: object
@@ -25065,6 +25088,13 @@ components:
oneOf:
-
type: integer
+ -
+ type: number
+ format: float
+ -
+ type: string
+ -
+ nullable: true
EnterpriseAiSettingsResource:
description: 'AI Settings Resource'
type: object
@@ -25075,7 +25105,7 @@ components:
properties:
data:
$ref: '#/components/schemas/EnterpriseAiSettings'
- EnterpriseAiSettings:
+ AiSettings:
title: 'AI Settings'
properties:
preTranslationAiPromptId:
@@ -25084,10 +25114,6 @@ components:
editorSuggestionAiPromptId:
type: integer
example: 5
- alignmentActionAiPromptId:
- type: integer
- example: 2
- nullable: true
qaCheckActionAiPromptId:
type: integer
example: 8
@@ -25096,7 +25122,84 @@ components:
type: integer
example: 11
nullable: true
+ dailyCostLimit:
+ description: 'Maximum total AI cost the organization can spend per day. `null` means no daily limit.'
+ type: number
+ format: float
+ example: 100
+ nullable: true
+ monthlyCostLimit:
+ description: 'Maximum total AI cost the organization can spend per month. `null` means no monthly limit.'
+ type: number
+ format: float
+ example: 2000
+ nullable: true
+ userDailyCostLimit:
+ description: 'Default maximum AI cost a single user can spend per day. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user daily limit.'
+ type: number
+ format: float
+ example: 10
+ nullable: true
+ userMonthlyCostLimit:
+ description: 'Default maximum AI cost a single user can spend per month. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user monthly limit.'
+ type: number
+ format: float
+ example: 200
+ nullable: true
+ perUserOverrides:
+ description: 'Per-user cost limit overrides that take precedence over `userDailyCostLimit` and `userMonthlyCostLimit`.'
+ type: array
+ items:
+ $ref: '#/components/schemas/AiUserCostLimit'
type: object
+ AiUserCostLimit:
+ title: 'AI User Cost Limit'
+ properties:
+ userId:
+ description: 'ID of the user this cost limit override applies to'
+ type: integer
+ example: 123
+ costLimitMode:
+ description: "User AI cost limit mode\n\nValues available:\n- custom - Custom daily and monthly cost limits are applied\n- blocked - User is blocked from using AI\n- unlimited - User has no AI cost limit"
+ type: string
+ enum:
+ - custom
+ - blocked
+ - unlimited
+ example: custom
+ dailyCostLimit:
+ description: 'Maximum AI cost this user can spend per day. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
+ type: number
+ format: float
+ example: 5
+ nullable: true
+ monthlyCostLimit:
+ description: 'Maximum AI cost this user can spend per month. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
+ type: number
+ format: float
+ example: 100
+ nullable: true
+ createdAt:
+ type: string
+ format: date-time
+ example: '2026-05-23T11:26:54+00:00'
+ updatedAt:
+ type: string
+ format: date-time
+ example: '2026-05-23T11:26:54+00:00'
+ type: object
+ EnterpriseAiSettings:
+ title: 'AI Settings'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/AiSettings'
+ -
+ properties:
+ alignmentActionAiPromptId:
+ type: integer
+ example: 2
+ nullable: true
AiTranslateFormBase:
required:
- strings
@@ -25944,12 +26047,12 @@ components:
description: 'Lifecycle event URLs that changed (installed/uninstall/status)'
type: object
additionalProperties:
- type: object
properties:
from:
type: string
to:
type: string
+ type: object
baseUrlChanged:
description: 'baseUrl change (host that serves the app)'
properties:
diff --git a/src/assets/api/enterprise/string-based.yml b/src/assets/api/enterprise/string-based.yml
index b39586fe..f2bfb1b7 100644
--- a/src/assets/api/enterprise/string-based.yml
+++ b/src/assets/api/enterprise/string-based.yml
@@ -23022,9 +23022,10 @@ components:
type: string
enum:
- replace
+ - remove
- test
path:
- description: 'A JSON Pointer as defined by RFC 6901'
+ description: 'A JSON Pointer as defined by RFC 6901. The `/perUserOverrides/{userId}` and `/perUserOverrides/{userId}/*` paths accept any positive integer for `{userId}`. Creating a new override requires `{userId}` to be an organization member; this requirement does not apply when editing or removing an existing one. The `remove` operation is supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and for `/perUserOverrides/{userId}/*` field paths (removes that field; the resulting override is re-validated).'
type: string
format: json-pointer
enum:
@@ -23033,11 +23034,20 @@ components:
- /alignmentActionAiPromptId
- /qaCheckActionAiPromptId
- /contextReviewAiPromptId
+ - /dailyCostLimit
+ - /monthlyCostLimit
+ - /userDailyCostLimit
+ - /userMonthlyCostLimit
+ - '/perUserOverrides/{userId}'
+ - '/perUserOverrides/{userId}/costLimitMode'
+ - '/perUserOverrides/{userId}/dailyCostLimit'
+ - '/perUserOverrides/{userId}/monthlyCostLimit'
type: object
discriminator:
propertyName: op
mapping:
replace: '#/components/schemas/AiSettingsOperationReplace'
+ remove: '#/components/schemas/AiSettingsOperationRemove'
test: '#/components/schemas/AiSettingsOperationTest'
AiSettingsOperationReplace:
description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
@@ -23053,8 +23063,21 @@ components:
oneOf:
-
type: integer
+ -
+ type: number
+ format: float
+ -
+ type: string
+ -
+ nullable: true
+ AiSettingsOperationRemove:
+ description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.2). Supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and `/perUserOverrides/{userId}/*` field paths (removes that field). The `costLimitMode` field cannot be removed as the override always requires it.'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/AiSettingsOperation'
AiSettingsOperationTest:
- description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
+ description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
required:
- value
type: object
@@ -23067,6 +23090,13 @@ components:
oneOf:
-
type: integer
+ -
+ type: number
+ format: float
+ -
+ type: string
+ -
+ nullable: true
EnterpriseAiSettingsResource:
description: 'AI Settings Resource'
type: object
@@ -23077,7 +23107,7 @@ components:
properties:
data:
$ref: '#/components/schemas/EnterpriseAiSettings'
- EnterpriseAiSettings:
+ AiSettings:
title: 'AI Settings'
properties:
preTranslationAiPromptId:
@@ -23086,10 +23116,6 @@ components:
editorSuggestionAiPromptId:
type: integer
example: 5
- alignmentActionAiPromptId:
- type: integer
- example: 2
- nullable: true
qaCheckActionAiPromptId:
type: integer
example: 8
@@ -23098,7 +23124,84 @@ components:
type: integer
example: 11
nullable: true
+ dailyCostLimit:
+ description: 'Maximum total AI cost the organization can spend per day. `null` means no daily limit.'
+ type: number
+ format: float
+ example: 100
+ nullable: true
+ monthlyCostLimit:
+ description: 'Maximum total AI cost the organization can spend per month. `null` means no monthly limit.'
+ type: number
+ format: float
+ example: 2000
+ nullable: true
+ userDailyCostLimit:
+ description: 'Default maximum AI cost a single user can spend per day. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user daily limit.'
+ type: number
+ format: float
+ example: 10
+ nullable: true
+ userMonthlyCostLimit:
+ description: 'Default maximum AI cost a single user can spend per month. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user monthly limit.'
+ type: number
+ format: float
+ example: 200
+ nullable: true
+ perUserOverrides:
+ description: 'Per-user cost limit overrides that take precedence over `userDailyCostLimit` and `userMonthlyCostLimit`.'
+ type: array
+ items:
+ $ref: '#/components/schemas/AiUserCostLimit'
type: object
+ AiUserCostLimit:
+ title: 'AI User Cost Limit'
+ properties:
+ userId:
+ description: 'ID of the user this cost limit override applies to'
+ type: integer
+ example: 123
+ costLimitMode:
+ description: "User AI cost limit mode\n\nValues available:\n- custom - Custom daily and monthly cost limits are applied\n- blocked - User is blocked from using AI\n- unlimited - User has no AI cost limit"
+ type: string
+ enum:
+ - custom
+ - blocked
+ - unlimited
+ example: custom
+ dailyCostLimit:
+ description: 'Maximum AI cost this user can spend per day. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
+ type: number
+ format: float
+ example: 5
+ nullable: true
+ monthlyCostLimit:
+ description: 'Maximum AI cost this user can spend per month. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
+ type: number
+ format: float
+ example: 100
+ nullable: true
+ createdAt:
+ type: string
+ format: date-time
+ example: '2026-05-23T11:26:54+00:00'
+ updatedAt:
+ type: string
+ format: date-time
+ example: '2026-05-23T11:26:54+00:00'
+ type: object
+ EnterpriseAiSettings:
+ title: 'AI Settings'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/AiSettings'
+ -
+ properties:
+ alignmentActionAiPromptId:
+ type: integer
+ example: 2
+ nullable: true
AiTranslateFormBase:
required:
- strings
@@ -23623,12 +23726,12 @@ components:
description: 'Lifecycle event URLs that changed (installed/uninstall/status)'
type: object
additionalProperties:
- type: object
properties:
from:
type: string
to:
type: string
+ type: object
baseUrlChanged:
description: 'baseUrl change (host that serves the app)'
properties: