From 9647ca54f30eaa71ce91dff218a129c3fa457028 Mon Sep 17 00:00:00 2001
From: andrii-bodnar <29282228+andrii-bodnar@users.noreply.github.com>
Date: Mon, 21 Sep 2026 12:16:59 +0000
Subject: [PATCH] chore(developer): update API docs
---
src/assets/api/crowdin/file-based.yml | 383 +++++++++++++++++----
src/assets/api/crowdin/string-based.yml | 383 +++++++++++++++++----
src/assets/api/enterprise/file-based.yml | 382 ++++++++++++++++----
src/assets/api/enterprise/string-based.yml | 382 ++++++++++++++++----
4 files changed, 1284 insertions(+), 246 deletions(-)
diff --git a/src/assets/api/crowdin/file-based.yml b/src/assets/api/crowdin/file-based.yml
index 8dd50effc..a87fbe8df 100644
--- a/src/assets/api/crowdin/file-based.yml
+++ b/src/assets/api/crowdin/file-based.yml
@@ -2867,6 +2867,115 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/MethodNotAllowedExceptionResource'
+ '/users/{userId}/ai/usage/members':
+ get:
+ tags:
+ - AI
+ summary: 'List AI Usage Members'
+ description: '**Required scopes:** `ai` (Read only).'
+ operationId: api.ai.usage.members.getMany
+ parameters:
+ -
+ $ref: '#/components/parameters/UserId'
+ -
+ $ref: '#/components/parameters/PaginationLimit'
+ -
+ $ref: '#/components/parameters/PaginationOffset'
+ -
+ $ref: '#/components/parameters/CrowdinAiUsageMemberCollectionUserIds'
+ -
+ $ref: '#/components/parameters/AiUsageMemberCollectionOrderBy'
+ responses:
+ '200':
+ description: 'AI usage members list'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AiUsageMemberCollectionResource'
+ '400':
+ description: 'Invalid Request Parameters'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorCollectionResource'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticateError'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ForbiddenExceptionResource'
+ '404':
+ description: 'Not Found'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NotFoundExceptionResource'
+ '405':
+ description: 'Method Not Allowed'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
+ '/users/{userId}/ai/usage/members/{memberId}':
+ get:
+ tags:
+ - AI
+ summary: 'Get AI Usage Member'
+ description: '**Required scopes:** `ai` (Read only).'
+ operationId: api.ai.usage.members.get
+ parameters:
+ -
+ $ref: '#/components/parameters/UserId'
+ -
+ name: memberId
+ in: path
+ description: 'User Identifier. Get via [List Project Members](#operation/api.projects.members.getMany) or via [Get Authenticated User](#operation/api.user.get) for own usage'
+ required: true
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: 'AI usage member data'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AiUsageMemberResource'
+ '400':
+ description: 'Invalid Request Parameters'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorCollectionResource'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticateError'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ForbiddenExceptionResource'
+ '404':
+ description: 'Not Found'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NotFoundExceptionResource'
+ '405':
+ description: 'Method Not Allowed'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
/applications/consents:
get:
tags:
@@ -5176,7 +5285,7 @@ paths:
tags:
- Glossaries
summary: 'List Concepts'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of concepts in the glossary. A concept groups the terms that mean the same thing in different languages."
operationId: api.glossaries.concepts.getMany
parameters:
-
@@ -5206,7 +5315,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptCollectionResource'
+ $ref: '#/components/schemas/CrowdinConceptCollectionResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -5247,8 +5356,8 @@ paths:
get:
tags:
- Glossaries
- summary: 'Get concept'
- description: '**Required scopes:** `glossary` (Read only).'
+ summary: 'Get Concept'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single concept of the glossary, with the definition and note stored for each of its languages."
operationId: api.glossaries.concepts.get
parameters:
-
@@ -5261,7 +5370,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/CrowdinConceptResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -5301,8 +5410,8 @@ paths:
put:
tags:
- Glossaries
- summary: 'Update concept'
- description: "**Required scopes:** `glossary` (Read and Write).\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
+ summary: 'Update Concept'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the concept and the definition and note stored for each of its languages.\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
operationId: api.glossaries.concepts.put
parameters:
-
@@ -5320,7 +5429,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/CrowdinConceptResource'
'400':
description: 'Invalid Request Body'
content:
@@ -5361,7 +5470,7 @@ paths:
tags:
- Glossaries
summary: 'Delete Concept'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the concept together with every term that belongs to it."
operationId: api.glossaries.concepts.delete
parameters:
-
@@ -17021,7 +17130,7 @@ paths:
tags:
- Glossaries
summary: 'List Terms'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of terms in the glossary, ordered by `id` unless `orderBy` says otherwise. Without a filter the terms of every language are returned."
operationId: api.glossaries.terms.getMany
parameters:
-
@@ -17083,7 +17192,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermCollectionResource'
+ $ref: '#/components/schemas/CrowdinTermCollectionResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -17134,7 +17243,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/CrowdinTermResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -17181,7 +17290,7 @@ paths:
tags:
- Glossaries
summary: 'Clear Glossary'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the terms of the glossary. Without a filter every term is deleted; the query parameters narrow it to one language, one concept, or one term and its translations."
operationId: api.glossaries.terms.deleteMany
parameters:
-
@@ -17249,7 +17358,7 @@ paths:
tags:
- Glossaries
summary: 'Get Term'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single term of the glossary."
operationId: api.glossaries.terms.get
parameters:
-
@@ -17262,7 +17371,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/CrowdinTermResource'
'401':
description: Unauthorized
content:
@@ -17291,7 +17400,7 @@ paths:
tags:
- Glossaries
summary: 'Delete Term'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the term. When it was the last term of its concept, the concept is deleted as well."
operationId: api.glossaries.terms.delete
parameters:
-
@@ -17335,7 +17444,7 @@ paths:
tags:
- Glossaries
summary: 'Edit Term'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the term with a JSON Patch document. Only the paths listed in the request schema can be replaced."
operationId: api.glossaries.terms.patch
parameters:
-
@@ -17343,7 +17452,7 @@ paths:
-
$ref: '#/components/parameters/TermId'
requestBody:
- description: 'A JSON Patch document as defined by RFC 6902'
+ description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
content:
application/json:
schema:
@@ -17354,7 +17463,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/CrowdinTermResource'
'400':
description: 'Invalid Request Body'
content:
@@ -23211,6 +23320,86 @@ components:
- 'Перекладений текст 1'
- 'Перекладений текст 2'
type: object
+ AiUsageMemberCollectionResource:
+ description: 'AI Usage Member Collection Resource'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/CollectionResource'
+ -
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/AiUsageMemberResource'
+ pagination:
+ $ref: '#/components/schemas/Pagination'
+ AiUsageMemberResource:
+ description: 'AI Usage Member Resource'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/Resource'
+ -
+ properties:
+ data:
+ $ref: '#/components/schemas/AiUsageMember'
+ AiUsageMember:
+ title: 'AI Usage Member'
+ properties:
+ user:
+ description: 'Organization member the usage and limits below belong to'
+ properties:
+ id:
+ description: 'User ID'
+ type: integer
+ example: 12
+ username:
+ description: 'User username'
+ type: string
+ example: john_smith
+ fullName:
+ description: 'User full name'
+ type: string
+ example: 'John Smith'
+ avatarUrl:
+ description: 'User avatar URL'
+ type: string
+ example: ''
+ type: object
+ dailyCostLimit:
+ description: 'Effective daily AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
+ type: number
+ format: float
+ example: 2
+ nullable: true
+ dailyCostSpent:
+ description: 'AI cost spent in the current day, in USD'
+ type: number
+ format: float
+ example: 0.26
+ dailyResetAt:
+ description: 'Date and time when the daily cost limit resets'
+ type: string
+ format: date-time
+ example: '2026-09-12T00:00:00+00:00'
+ monthlyCostLimit:
+ description: 'Effective monthly AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
+ type: number
+ format: float
+ example: null
+ nullable: true
+ monthlyCostSpent:
+ description: 'AI cost spent in the current month, in USD'
+ type: number
+ format: float
+ example: 6.93
+ monthlyResetAt:
+ description: 'Date and time when the monthly cost limit resets'
+ type: string
+ format: date-time
+ example: '2026-10-01T00:00:00+00:00'
+ type: object
ApplicationConsentPatch:
description: 'A JSON Patch document as defined by RFC 6902'
type: array
@@ -26758,7 +26947,7 @@ components:
items:
$ref: '#/components/schemas/ConceptUpdateLanguagesDetails'
type: object
- ConceptCollectionResource:
+ CrowdinConceptCollectionResource:
description: 'Concept Collection Resource'
type: object
allOf:
@@ -26771,10 +26960,10 @@ components:
data:
type: array
items:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/CrowdinConceptResource'
pagination:
$ref: '#/components/schemas/Pagination'
- ConceptResource:
+ CrowdinConceptResource:
description: 'Concept Resource'
type: object
allOf:
@@ -28348,6 +28537,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
NumberFieldConfig:
@@ -28385,6 +28578,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
OtherTypesFieldConfig:
@@ -28413,6 +28610,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
FieldConfig:
@@ -28473,6 +28674,8 @@ components:
- file
- translation
- string
+ - term
+ - concept
example: task
config:
$ref: '#/components/schemas/FieldConfig'
@@ -28536,6 +28739,8 @@ components:
- file
- translation
- string
+ - term
+ - concept
example: task
createdAt:
description: 'in UTC'
@@ -31050,6 +31255,53 @@ components:
type: string
example: fr
type: object
+ GlossaryExportForm:
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/GlossaryExportFormBase'
+ -
+ properties:
+ exportFields:
+ description: "Array fields for export.\n\n__Note:__ Used for export CSV or XLSX format only"
+ type: array
+ items:
+ type: string
+ enum:
+ - term
+ - description
+ - partOfSpeech
+ - type
+ - status
+ - gender
+ - note
+ - url
+ - conceptDefinition
+ - conceptSubject
+ - conceptNote
+ - conceptUrl
+ - conceptFigure
+ default:
+ - term
+ - description
+ - partOfSpeech
+ example:
+ - term
+ - description
+ - partOfSpeech
+ GlossaryImportForm:
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/GlossaryImportFormBase'
+ -
+ properties:
+ scheme:
+ description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
+ type: object
+ example:
+ term_en: 0
+ description_en: 1
CrowdinOrganizationGlossaryConcordanceForm:
allOf:
-
@@ -31061,7 +31313,7 @@ components:
type: integer
nullable: true
type: object
- GlossaryExportForm:
+ GlossaryExportFormBase:
properties:
format:
description: "Supported formats:\n * 'tbx'\n * 'tbx_v3'\n * 'csv'\n * 'xlsx'"
@@ -31073,33 +31325,6 @@ components:
- csv
- xlsx
example: csv
- exportFields:
- description: "Array fields for export.\n\n__Note:__ Used for export CSV or XLSX format only"
- type: array
- items:
- type: string
- enum:
- - term
- - description
- - partOfSpeech
- - type
- - status
- - gender
- - note
- - url
- - conceptDefinition
- - conceptSubject
- - conceptNote
- - conceptUrl
- - conceptFigure
- default:
- - term
- - description
- - partOfSpeech
- example:
- - term
- - description
- - partOfSpeech
exportType:
description: "Determines whether the export keeps every term of a matching concept (`concepts`, default)\n * or only the terms that match the active filters (`terms`)."
type: string
@@ -31282,7 +31507,7 @@ components:
format: date-time
example: '2024-09-27T07:00:14+00:00'
type: object
- GlossaryImportForm:
+ GlossaryImportFormBase:
required:
- storageId
properties:
@@ -31290,12 +31515,6 @@ components:
description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)\n\n Supported file formats:\n * TBX\n * CSV\n * XLS/XLSX"
type: integer
format: int64
- scheme:
- description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
- type: object
- example:
- term_en: 0
- description_en: 1
firstLineContainsHeader:
description: "Defines whether file includes first row header that should not be imported\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
type: boolean
@@ -45576,7 +45795,7 @@ components:
example: uk
type: object
TermPatch:
- description: 'A JSON Patch document as defined by RFC 6902'
+ description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
type: array
items:
$ref: '#/components/schemas/TermOperation'
@@ -45593,7 +45812,7 @@ components:
- replace
- test
path:
- description: 'A JSON Pointer as defined by RFC 6901'
+ description: 'A JSON Pointer as defined by [RFC 6901](https://tools.ietf.org/html/rfc6901)'
type: string
format: json-pointer
enum:
@@ -45720,7 +45939,7 @@ components:
type: integer
deprecated: true
type: object
- TermCollectionResource:
+ CrowdinTermCollectionResource:
description: 'Term Collection Resource'
type: object
allOf:
@@ -45733,10 +45952,10 @@ components:
data:
type: array
items:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/CrowdinTermResource'
pagination:
$ref: '#/components/schemas/Pagination'
- TermResource:
+ CrowdinTermResource:
description: 'Term Resource'
type: object
allOf:
@@ -49558,6 +49777,46 @@ components:
type: string
format: date-time
example: '2026-07-31T23:59:59+00:00'
+ CrowdinAiUsageMemberCollectionUserIds:
+ name: userIds
+ in: query
+ description: 'Filter by user identifier, comma-separated. Get via [List Project Members](#operation/api.projects.members.getMany)'
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ maxItems: 500
+ example: '2,3'
+ EnterpriseAiUsageMemberCollectionUserIds:
+ name: userIds
+ in: query
+ description: 'Filter by user identifier, comma-separated. Get via [List Users](#operation/api.users.getMany)'
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ maxItems: 500
+ example: '2,3'
+ AiUsageMemberCollectionOrderBy:
+ name: orderBy
+ in: query
+ description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
+ required: false
+ schema:
+ type: string
+ enum:
+ - username
+ - dailyCostLimit
+ - dailyCostSpent
+ - monthlyCostLimit
+ - monthlyCostSpent
+ example: 'dailyCostSpent desc'
ApplicationKvPrefix:
name: prefix
in: query
diff --git a/src/assets/api/crowdin/string-based.yml b/src/assets/api/crowdin/string-based.yml
index 33070773a..4f640aa4f 100644
--- a/src/assets/api/crowdin/string-based.yml
+++ b/src/assets/api/crowdin/string-based.yml
@@ -2867,6 +2867,115 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/MethodNotAllowedExceptionResource'
+ '/users/{userId}/ai/usage/members':
+ get:
+ tags:
+ - AI
+ summary: 'List AI Usage Members'
+ description: '**Required scopes:** `ai` (Read only).'
+ operationId: api.ai.usage.members.getMany
+ parameters:
+ -
+ $ref: '#/components/parameters/UserId'
+ -
+ $ref: '#/components/parameters/PaginationLimit'
+ -
+ $ref: '#/components/parameters/PaginationOffset'
+ -
+ $ref: '#/components/parameters/CrowdinAiUsageMemberCollectionUserIds'
+ -
+ $ref: '#/components/parameters/AiUsageMemberCollectionOrderBy'
+ responses:
+ '200':
+ description: 'AI usage members list'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AiUsageMemberCollectionResource'
+ '400':
+ description: 'Invalid Request Parameters'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorCollectionResource'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticateError'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ForbiddenExceptionResource'
+ '404':
+ description: 'Not Found'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NotFoundExceptionResource'
+ '405':
+ description: 'Method Not Allowed'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
+ '/users/{userId}/ai/usage/members/{memberId}':
+ get:
+ tags:
+ - AI
+ summary: 'Get AI Usage Member'
+ description: '**Required scopes:** `ai` (Read only).'
+ operationId: api.ai.usage.members.get
+ parameters:
+ -
+ $ref: '#/components/parameters/UserId'
+ -
+ name: memberId
+ in: path
+ description: 'User Identifier. Get via [List Project Members](#operation/api.projects.members.getMany) or via [Get Authenticated User](#operation/api.user.get) for own usage'
+ required: true
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: 'AI usage member data'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AiUsageMemberResource'
+ '400':
+ description: 'Invalid Request Parameters'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorCollectionResource'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticateError'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ForbiddenExceptionResource'
+ '404':
+ description: 'Not Found'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NotFoundExceptionResource'
+ '405':
+ description: 'Method Not Allowed'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
/applications/consents:
get:
tags:
@@ -5145,7 +5254,7 @@ paths:
tags:
- Glossaries
summary: 'List Concepts'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of concepts in the glossary. A concept groups the terms that mean the same thing in different languages."
operationId: api.glossaries.concepts.getMany
parameters:
-
@@ -5175,7 +5284,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptCollectionResource'
+ $ref: '#/components/schemas/CrowdinConceptCollectionResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -5216,8 +5325,8 @@ paths:
get:
tags:
- Glossaries
- summary: 'Get concept'
- description: '**Required scopes:** `glossary` (Read only).'
+ summary: 'Get Concept'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single concept of the glossary, with the definition and note stored for each of its languages."
operationId: api.glossaries.concepts.get
parameters:
-
@@ -5230,7 +5339,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/CrowdinConceptResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -5270,8 +5379,8 @@ paths:
put:
tags:
- Glossaries
- summary: 'Update concept'
- description: "**Required scopes:** `glossary` (Read and Write).\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
+ summary: 'Update Concept'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the concept and the definition and note stored for each of its languages.\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
operationId: api.glossaries.concepts.put
parameters:
-
@@ -5289,7 +5398,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/CrowdinConceptResource'
'400':
description: 'Invalid Request Body'
content:
@@ -5330,7 +5439,7 @@ paths:
tags:
- Glossaries
summary: 'Delete Concept'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the concept together with every term that belongs to it."
operationId: api.glossaries.concepts.delete
parameters:
-
@@ -15436,7 +15545,7 @@ paths:
tags:
- Glossaries
summary: 'List Terms'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of terms in the glossary, ordered by `id` unless `orderBy` says otherwise. Without a filter the terms of every language are returned."
operationId: api.glossaries.terms.getMany
parameters:
-
@@ -15498,7 +15607,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermCollectionResource'
+ $ref: '#/components/schemas/CrowdinTermCollectionResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -15549,7 +15658,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/CrowdinTermResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -15596,7 +15705,7 @@ paths:
tags:
- Glossaries
summary: 'Clear Glossary'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the terms of the glossary. Without a filter every term is deleted; the query parameters narrow it to one language, one concept, or one term and its translations."
operationId: api.glossaries.terms.deleteMany
parameters:
-
@@ -15664,7 +15773,7 @@ paths:
tags:
- Glossaries
summary: 'Get Term'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single term of the glossary."
operationId: api.glossaries.terms.get
parameters:
-
@@ -15677,7 +15786,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/CrowdinTermResource'
'401':
description: Unauthorized
content:
@@ -15706,7 +15815,7 @@ paths:
tags:
- Glossaries
summary: 'Delete Term'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the term. When it was the last term of its concept, the concept is deleted as well."
operationId: api.glossaries.terms.delete
parameters:
-
@@ -15750,7 +15859,7 @@ paths:
tags:
- Glossaries
summary: 'Edit Term'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the term with a JSON Patch document. Only the paths listed in the request schema can be replaced."
operationId: api.glossaries.terms.patch
parameters:
-
@@ -15758,7 +15867,7 @@ paths:
-
$ref: '#/components/parameters/TermId'
requestBody:
- description: 'A JSON Patch document as defined by RFC 6902'
+ description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
content:
application/json:
schema:
@@ -15769,7 +15878,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/CrowdinTermResource'
'400':
description: 'Invalid Request Body'
content:
@@ -21161,6 +21270,86 @@ components:
- 'Перекладений текст 1'
- 'Перекладений текст 2'
type: object
+ AiUsageMemberCollectionResource:
+ description: 'AI Usage Member Collection Resource'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/CollectionResource'
+ -
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/AiUsageMemberResource'
+ pagination:
+ $ref: '#/components/schemas/Pagination'
+ AiUsageMemberResource:
+ description: 'AI Usage Member Resource'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/Resource'
+ -
+ properties:
+ data:
+ $ref: '#/components/schemas/AiUsageMember'
+ AiUsageMember:
+ title: 'AI Usage Member'
+ properties:
+ user:
+ description: 'Organization member the usage and limits below belong to'
+ properties:
+ id:
+ description: 'User ID'
+ type: integer
+ example: 12
+ username:
+ description: 'User username'
+ type: string
+ example: john_smith
+ fullName:
+ description: 'User full name'
+ type: string
+ example: 'John Smith'
+ avatarUrl:
+ description: 'User avatar URL'
+ type: string
+ example: ''
+ type: object
+ dailyCostLimit:
+ description: 'Effective daily AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
+ type: number
+ format: float
+ example: 2
+ nullable: true
+ dailyCostSpent:
+ description: 'AI cost spent in the current day, in USD'
+ type: number
+ format: float
+ example: 0.26
+ dailyResetAt:
+ description: 'Date and time when the daily cost limit resets'
+ type: string
+ format: date-time
+ example: '2026-09-12T00:00:00+00:00'
+ monthlyCostLimit:
+ description: 'Effective monthly AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
+ type: number
+ format: float
+ example: null
+ nullable: true
+ monthlyCostSpent:
+ description: 'AI cost spent in the current month, in USD'
+ type: number
+ format: float
+ example: 6.93
+ monthlyResetAt:
+ description: 'Date and time when the monthly cost limit resets'
+ type: string
+ format: date-time
+ example: '2026-10-01T00:00:00+00:00'
+ type: object
ApplicationConsentPatch:
description: 'A JSON Patch document as defined by RFC 6902'
type: array
@@ -24366,7 +24555,7 @@ components:
items:
$ref: '#/components/schemas/ConceptUpdateLanguagesDetails'
type: object
- ConceptCollectionResource:
+ CrowdinConceptCollectionResource:
description: 'Concept Collection Resource'
type: object
allOf:
@@ -24379,10 +24568,10 @@ components:
data:
type: array
items:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/CrowdinConceptResource'
pagination:
$ref: '#/components/schemas/Pagination'
- ConceptResource:
+ CrowdinConceptResource:
description: 'Concept Resource'
type: object
allOf:
@@ -25937,6 +26126,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
NumberFieldConfig:
@@ -25974,6 +26167,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
OtherTypesFieldConfig:
@@ -26002,6 +26199,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
FieldConfig:
@@ -26062,6 +26263,8 @@ components:
- file
- translation
- string
+ - term
+ - concept
example: task
config:
$ref: '#/components/schemas/FieldConfig'
@@ -26125,6 +26328,8 @@ components:
- file
- translation
- string
+ - term
+ - concept
example: task
createdAt:
description: 'in UTC'
@@ -28639,6 +28844,53 @@ components:
type: string
example: fr
type: object
+ GlossaryExportForm:
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/GlossaryExportFormBase'
+ -
+ properties:
+ exportFields:
+ description: "Array fields for export.\n\n__Note:__ Used for export CSV or XLSX format only"
+ type: array
+ items:
+ type: string
+ enum:
+ - term
+ - description
+ - partOfSpeech
+ - type
+ - status
+ - gender
+ - note
+ - url
+ - conceptDefinition
+ - conceptSubject
+ - conceptNote
+ - conceptUrl
+ - conceptFigure
+ default:
+ - term
+ - description
+ - partOfSpeech
+ example:
+ - term
+ - description
+ - partOfSpeech
+ GlossaryImportForm:
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/GlossaryImportFormBase'
+ -
+ properties:
+ scheme:
+ description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
+ type: object
+ example:
+ term_en: 0
+ description_en: 1
CrowdinOrganizationGlossaryConcordanceForm:
allOf:
-
@@ -28650,7 +28902,7 @@ components:
type: integer
nullable: true
type: object
- GlossaryExportForm:
+ GlossaryExportFormBase:
properties:
format:
description: "Supported formats:\n * 'tbx'\n * 'tbx_v3'\n * 'csv'\n * 'xlsx'"
@@ -28662,33 +28914,6 @@ components:
- csv
- xlsx
example: csv
- exportFields:
- description: "Array fields for export.\n\n__Note:__ Used for export CSV or XLSX format only"
- type: array
- items:
- type: string
- enum:
- - term
- - description
- - partOfSpeech
- - type
- - status
- - gender
- - note
- - url
- - conceptDefinition
- - conceptSubject
- - conceptNote
- - conceptUrl
- - conceptFigure
- default:
- - term
- - description
- - partOfSpeech
- example:
- - term
- - description
- - partOfSpeech
exportType:
description: "Determines whether the export keeps every term of a matching concept (`concepts`, default)\n * or only the terms that match the active filters (`terms`)."
type: string
@@ -28871,7 +29096,7 @@ components:
format: date-time
example: '2024-09-27T07:00:14+00:00'
type: object
- GlossaryImportForm:
+ GlossaryImportFormBase:
required:
- storageId
properties:
@@ -28879,12 +29104,6 @@ components:
description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)\n\n Supported file formats:\n * TBX\n * CSV\n * XLS/XLSX"
type: integer
format: int64
- scheme:
- description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
- type: object
- example:
- term_en: 0
- description_en: 1
firstLineContainsHeader:
description: "Defines whether file includes first row header that should not be imported\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
type: boolean
@@ -42737,7 +42956,7 @@ components:
example: uk
type: object
TermPatch:
- description: 'A JSON Patch document as defined by RFC 6902'
+ description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
type: array
items:
$ref: '#/components/schemas/TermOperation'
@@ -42754,7 +42973,7 @@ components:
- replace
- test
path:
- description: 'A JSON Pointer as defined by RFC 6901'
+ description: 'A JSON Pointer as defined by [RFC 6901](https://tools.ietf.org/html/rfc6901)'
type: string
format: json-pointer
enum:
@@ -42881,7 +43100,7 @@ components:
type: integer
deprecated: true
type: object
- TermCollectionResource:
+ CrowdinTermCollectionResource:
description: 'Term Collection Resource'
type: object
allOf:
@@ -42894,10 +43113,10 @@ components:
data:
type: array
items:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/CrowdinTermResource'
pagination:
$ref: '#/components/schemas/Pagination'
- TermResource:
+ CrowdinTermResource:
description: 'Term Resource'
type: object
allOf:
@@ -46693,6 +46912,46 @@ components:
type: string
format: date-time
example: '2026-07-31T23:59:59+00:00'
+ CrowdinAiUsageMemberCollectionUserIds:
+ name: userIds
+ in: query
+ description: 'Filter by user identifier, comma-separated. Get via [List Project Members](#operation/api.projects.members.getMany)'
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ maxItems: 500
+ example: '2,3'
+ EnterpriseAiUsageMemberCollectionUserIds:
+ name: userIds
+ in: query
+ description: 'Filter by user identifier, comma-separated. Get via [List Users](#operation/api.users.getMany)'
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ maxItems: 500
+ example: '2,3'
+ AiUsageMemberCollectionOrderBy:
+ name: orderBy
+ in: query
+ description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
+ required: false
+ schema:
+ type: string
+ enum:
+ - username
+ - dailyCostLimit
+ - dailyCostSpent
+ - monthlyCostLimit
+ - monthlyCostSpent
+ example: 'dailyCostSpent desc'
ApplicationKvPrefix:
name: prefix
in: query
diff --git a/src/assets/api/enterprise/file-based.yml b/src/assets/api/enterprise/file-based.yml
index 983125cf4..ee3d5d4b7 100644
--- a/src/assets/api/enterprise/file-based.yml
+++ b/src/assets/api/enterprise/file-based.yml
@@ -2698,6 +2698,105 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/MethodNotAllowedExceptionResource'
+ /ai/usage/members:
+ get:
+ tags:
+ - AI
+ summary: 'List AI Usage Members'
+ description: '**Required scopes:** `ai` (Read only).'
+ operationId: api.ai.usage.members.getMany
+ parameters:
+ -
+ $ref: '#/components/parameters/PaginationLimit'
+ -
+ $ref: '#/components/parameters/PaginationOffset'
+ -
+ $ref: '#/components/parameters/EnterpriseAiUsageMemberCollectionUserIds'
+ -
+ $ref: '#/components/parameters/AiUsageMemberCollectionOrderBy'
+ responses:
+ '200':
+ description: 'AI usage members list'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AiUsageMemberCollectionResource'
+ '400':
+ description: 'Invalid Request Parameters'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorCollectionResource'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticateError'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ForbiddenExceptionResource'
+ '405':
+ description: 'Method Not Allowed'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
+ '/ai/usage/members/{memberId}':
+ get:
+ tags:
+ - AI
+ summary: 'Get AI Usage Member'
+ description: '**Required scopes:** `ai` (Read only).'
+ operationId: api.ai.usage.members.get
+ parameters:
+ -
+ name: memberId
+ in: path
+ description: 'ID of the organization member. Get via [List Users](#operation/api.users.getMany) or via [Get Authenticated User](#operation/api.user.get) for own usage'
+ required: true
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: 'AI usage member data'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AiUsageMemberResource'
+ '400':
+ description: 'Invalid Request Parameters'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorCollectionResource'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticateError'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ForbiddenExceptionResource'
+ '404':
+ description: 'Not Found'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NotFoundExceptionResource'
+ '405':
+ description: 'Method Not Allowed'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
'/applications/installations/{identifier}/bundles':
post:
tags:
@@ -4867,7 +4966,7 @@ paths:
tags:
- Glossaries
summary: 'List Concepts'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of concepts in the glossary. A concept groups the terms that mean the same thing in different languages."
operationId: api.glossaries.concepts.getMany
parameters:
-
@@ -4897,7 +4996,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptCollectionResource'
+ $ref: '#/components/schemas/EnterpriseConceptCollectionResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -4938,8 +5037,8 @@ paths:
get:
tags:
- Glossaries
- summary: 'Get concept'
- description: '**Required scopes:** `glossary` (Read only).'
+ summary: 'Get Concept'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single concept of the glossary, with the definition and note stored for each of its languages."
operationId: api.glossaries.concepts.get
parameters:
-
@@ -4952,7 +5051,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/EnterpriseConceptResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -4992,8 +5091,8 @@ paths:
put:
tags:
- Glossaries
- summary: 'Update concept'
- description: "**Required scopes:** `glossary` (Read and Write).\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
+ summary: 'Update Concept'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the concept and the definition and note stored for each of its languages. `fields` writes the whole set of custom field values: a field the request omits, or whose value is empty, is cleared.\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
operationId: api.glossaries.concepts.put
parameters:
-
@@ -5011,7 +5110,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/EnterpriseConceptResource'
'400':
description: 'Invalid Request Body'
content:
@@ -5052,7 +5151,7 @@ paths:
tags:
- Glossaries
summary: 'Delete Concept'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the concept together with every term that belongs to it."
operationId: api.glossaries.concepts.delete
parameters:
-
@@ -6230,6 +6329,8 @@ paths:
- file
- translation
- string
+ - term
+ - concept
-
name: type
in: query
@@ -19500,7 +19601,7 @@ paths:
tags:
- Glossaries
summary: 'List Terms'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of terms in the glossary, ordered by `id` unless `orderBy` says otherwise. Without a filter the terms of every language are returned."
operationId: api.glossaries.terms.getMany
parameters:
-
@@ -19562,7 +19663,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermCollectionResource'
+ $ref: '#/components/schemas/EnterpriseTermCollectionResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -19613,7 +19714,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/EnterpriseTermResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -19660,7 +19761,7 @@ paths:
tags:
- Glossaries
summary: 'Clear Glossary'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the terms of the glossary. Without a filter every term is deleted; the query parameters narrow it to one language, one concept, or one term and its translations."
operationId: api.glossaries.terms.deleteMany
parameters:
-
@@ -19728,7 +19829,7 @@ paths:
tags:
- Glossaries
summary: 'Get Term'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single term of the glossary."
operationId: api.glossaries.terms.get
parameters:
-
@@ -19741,7 +19842,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/EnterpriseTermResource'
'401':
description: Unauthorized
content:
@@ -19770,7 +19871,7 @@ paths:
tags:
- Glossaries
summary: 'Delete Term'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the term. When it was the last term of its concept, the concept is deleted as well."
operationId: api.glossaries.terms.delete
parameters:
-
@@ -19814,7 +19915,7 @@ paths:
tags:
- Glossaries
summary: 'Edit Term'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the term with a JSON Patch document. Only the paths listed in the request schema can be replaced.\n\n__Note:__ A `replace` on `/fields` writes the whole set of custom field values — a field the value omits, or whose value is empty, is cleared"
operationId: api.glossaries.terms.patch
parameters:
-
@@ -19822,7 +19923,7 @@ paths:
-
$ref: '#/components/parameters/TermId'
requestBody:
- description: 'A JSON Patch document as defined by RFC 6902'
+ description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
content:
application/json:
schema:
@@ -19833,7 +19934,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/EnterpriseTermResource'
'400':
description: 'Invalid Request Body'
content:
@@ -26634,6 +26735,86 @@ components:
- 'Перекладений текст 1'
- 'Перекладений текст 2'
type: object
+ AiUsageMemberCollectionResource:
+ description: 'AI Usage Member Collection Resource'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/CollectionResource'
+ -
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/AiUsageMemberResource'
+ pagination:
+ $ref: '#/components/schemas/Pagination'
+ AiUsageMemberResource:
+ description: 'AI Usage Member Resource'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/Resource'
+ -
+ properties:
+ data:
+ $ref: '#/components/schemas/AiUsageMember'
+ AiUsageMember:
+ title: 'AI Usage Member'
+ properties:
+ user:
+ description: 'Organization member the usage and limits below belong to'
+ properties:
+ id:
+ description: 'User ID'
+ type: integer
+ example: 12
+ username:
+ description: 'User username'
+ type: string
+ example: john_smith
+ fullName:
+ description: 'User full name'
+ type: string
+ example: 'John Smith'
+ avatarUrl:
+ description: 'User avatar URL'
+ type: string
+ example: ''
+ type: object
+ dailyCostLimit:
+ description: 'Effective daily AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
+ type: number
+ format: float
+ example: 2
+ nullable: true
+ dailyCostSpent:
+ description: 'AI cost spent in the current day, in USD'
+ type: number
+ format: float
+ example: 0.26
+ dailyResetAt:
+ description: 'Date and time when the daily cost limit resets'
+ type: string
+ format: date-time
+ example: '2026-09-12T00:00:00+00:00'
+ monthlyCostLimit:
+ description: 'Effective monthly AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
+ type: number
+ format: float
+ example: null
+ nullable: true
+ monthlyCostSpent:
+ description: 'AI cost spent in the current month, in USD'
+ type: number
+ format: float
+ example: 6.93
+ monthlyResetAt:
+ description: 'Date and time when the monthly cost limit resets'
+ type: string
+ format: date-time
+ example: '2026-10-01T00:00:00+00:00'
+ type: object
ApplicationConsentPatch:
description: 'A JSON Patch document as defined by RFC 6902'
type: array
@@ -30186,8 +30367,13 @@ components:
type: array
items:
$ref: '#/components/schemas/ConceptUpdateLanguagesDetails'
+ fields:
+ oneOf:
+ -
+ $ref: '#/components/schemas/EnterpriseAdditionalFields'
+ nullable: true
type: object
- ConceptCollectionResource:
+ EnterpriseConceptCollectionResource:
description: 'Concept Collection Resource'
type: object
allOf:
@@ -30200,10 +30386,10 @@ components:
data:
type: array
items:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/EnterpriseConceptResource'
pagination:
$ref: '#/components/schemas/Pagination'
- ConceptResource:
+ EnterpriseConceptResource:
description: 'Concept Resource'
type: object
allOf:
@@ -30287,6 +30473,11 @@ components:
type: string
format: date-time
example: '2019-09-23T07:19:47+00:00'
+ fields:
+ oneOf:
+ -
+ $ref: '#/components/schemas/EnterpriseAdditionalFields'
+ nullable: true
type: object
JsonPatchDocument:
description: 'A JSON Patch document as defined by RFC 6902'
@@ -31907,6 +32098,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
NumberFieldConfig:
@@ -31944,6 +32139,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
OtherTypesFieldConfig:
@@ -31972,6 +32171,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
FieldConfig:
@@ -32032,6 +32235,8 @@ components:
- file
- translation
- string
+ - term
+ - concept
example: task
config:
$ref: '#/components/schemas/FieldConfig'
@@ -32095,6 +32300,8 @@ components:
- file
- translation
- string
+ - term
+ - concept
example: task
createdAt:
description: 'in UTC'
@@ -34707,6 +34914,41 @@ components:
example: 2
type: object
GlossaryExportForm:
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/GlossaryExportFormBase'
+ -
+ properties:
+ exportFields:
+ description: "Array fields for export. A custom field is selected by its slug — `field_{%fieldSlug%}` for a term field, exported as one column per language, and `conceptField_{%fieldSlug%}` for a concept field, exported as a single column.\n\n__Note:__ Used for export CSV or XLSX format only"
+ type: array
+ items:
+ oneOf:
+ - { type: string, enum: [term, description, partOfSpeech, type, status, gender, note, url, conceptDefinition, conceptSubject, conceptNote, conceptUrl, conceptFigure] }
+ - { type: string, pattern: '^(field|conceptField)_[0-9a-zA-Z_-]{3,255}$' }
+ default:
+ - term
+ - description
+ - partOfSpeech
+ example:
+ - term
+ - description
+ - partOfSpeech
+ GlossaryImportForm:
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/GlossaryImportFormBase'
+ -
+ properties:
+ scheme:
+ description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n * `field_{%fieldSlug%}_{%language_code%}` – column with a term custom field value\n * `conceptField_{%fieldSlug%}` – column with a concept custom field value\n\n__Note:__ Only the custom fields whose columns are mapped here are written — a field this scheme omits keeps its stored value, and a mapped but empty cell clears it\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
+ type: object
+ example:
+ term_en: 0
+ description_en: 1
+ GlossaryExportFormBase:
properties:
format:
description: "Supported formats:\n * 'tbx'\n * 'tbx_v3'\n * 'csv'\n * 'xlsx'"
@@ -34718,33 +34960,6 @@ components:
- csv
- xlsx
example: csv
- exportFields:
- description: "Array fields for export.\n\n__Note:__ Used for export CSV or XLSX format only"
- type: array
- items:
- type: string
- enum:
- - term
- - description
- - partOfSpeech
- - type
- - status
- - gender
- - note
- - url
- - conceptDefinition
- - conceptSubject
- - conceptNote
- - conceptUrl
- - conceptFigure
- default:
- - term
- - description
- - partOfSpeech
- example:
- - term
- - description
- - partOfSpeech
exportType:
description: "Determines whether the export keeps every term of a matching concept (`concepts`, default)\n * or only the terms that match the active filters (`terms`)."
type: string
@@ -34927,7 +35142,7 @@ components:
format: date-time
example: '2024-09-27T07:00:14+00:00'
type: object
- GlossaryImportForm:
+ GlossaryImportFormBase:
required:
- storageId
properties:
@@ -34935,12 +35150,6 @@ components:
description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)\n\n Supported file formats:\n * TBX\n * CSV\n * XLS/XLSX"
type: integer
format: int64
- scheme:
- description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
- type: object
- example:
- term_en: 0
- description_en: 1
firstLineContainsHeader:
description: "Defines whether file includes first row header that should not be imported\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
type: boolean
@@ -53172,7 +53381,7 @@ components:
nullable: true
type: object
TermPatch:
- description: 'A JSON Patch document as defined by RFC 6902'
+ description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
type: array
items:
$ref: '#/components/schemas/TermOperation'
@@ -53189,7 +53398,7 @@ components:
- replace
- test
path:
- description: 'A JSON Pointer as defined by RFC 6901'
+ description: 'A JSON Pointer as defined by [RFC 6901](https://tools.ietf.org/html/rfc6901)'
type: string
format: json-pointer
enum:
@@ -53201,6 +53410,7 @@ components:
- /gender
- /url
- /note
+ - /fields
type: object
discriminator:
propertyName: op
@@ -53315,8 +53525,13 @@ components:
description: 'Defines whether to add translation to the existing term. Get `id` via [List Terms](#operation/api.glossaries.terms.getMany)'
type: integer
deprecated: true
+ fields:
+ oneOf:
+ -
+ $ref: '#/components/schemas/EnterpriseAdditionalFields'
+ nullable: true
type: object
- TermCollectionResource:
+ EnterpriseTermCollectionResource:
description: 'Term Collection Resource'
type: object
allOf:
@@ -53329,10 +53544,10 @@ components:
data:
type: array
items:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/EnterpriseTermResource'
pagination:
$ref: '#/components/schemas/Pagination'
- TermResource:
+ EnterpriseTermResource:
description: 'Term Resource'
type: object
allOf:
@@ -53397,6 +53612,11 @@ components:
type: string
format: date-time
example: '2019-09-23T07:19:47+00:00'
+ fields:
+ oneOf:
+ -
+ $ref: '#/components/schemas/EnterpriseAdditionalFields'
+ nullable: true
type: object
TmPatch:
description: 'A JSON Patch document as defined by RFC 6902'
@@ -57464,6 +57684,46 @@ components:
type: string
format: date-time
example: '2026-07-31T23:59:59+00:00'
+ CrowdinAiUsageMemberCollectionUserIds:
+ name: userIds
+ in: query
+ description: 'Filter by user identifier, comma-separated. Get via [List Project Members](#operation/api.projects.members.getMany)'
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ maxItems: 500
+ example: '2,3'
+ EnterpriseAiUsageMemberCollectionUserIds:
+ name: userIds
+ in: query
+ description: 'Filter by user identifier, comma-separated. Get via [List Users](#operation/api.users.getMany)'
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ maxItems: 500
+ example: '2,3'
+ AiUsageMemberCollectionOrderBy:
+ name: orderBy
+ in: query
+ description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
+ required: false
+ schema:
+ type: string
+ enum:
+ - username
+ - dailyCostLimit
+ - dailyCostSpent
+ - monthlyCostLimit
+ - monthlyCostSpent
+ example: 'dailyCostSpent desc'
ApplicationKvPrefix:
name: prefix
in: query
diff --git a/src/assets/api/enterprise/string-based.yml b/src/assets/api/enterprise/string-based.yml
index 5107a0bc0..ba37ae5b3 100644
--- a/src/assets/api/enterprise/string-based.yml
+++ b/src/assets/api/enterprise/string-based.yml
@@ -2698,6 +2698,105 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/MethodNotAllowedExceptionResource'
+ /ai/usage/members:
+ get:
+ tags:
+ - AI
+ summary: 'List AI Usage Members'
+ description: '**Required scopes:** `ai` (Read only).'
+ operationId: api.ai.usage.members.getMany
+ parameters:
+ -
+ $ref: '#/components/parameters/PaginationLimit'
+ -
+ $ref: '#/components/parameters/PaginationOffset'
+ -
+ $ref: '#/components/parameters/EnterpriseAiUsageMemberCollectionUserIds'
+ -
+ $ref: '#/components/parameters/AiUsageMemberCollectionOrderBy'
+ responses:
+ '200':
+ description: 'AI usage members list'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AiUsageMemberCollectionResource'
+ '400':
+ description: 'Invalid Request Parameters'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorCollectionResource'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticateError'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ForbiddenExceptionResource'
+ '405':
+ description: 'Method Not Allowed'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
+ '/ai/usage/members/{memberId}':
+ get:
+ tags:
+ - AI
+ summary: 'Get AI Usage Member'
+ description: '**Required scopes:** `ai` (Read only).'
+ operationId: api.ai.usage.members.get
+ parameters:
+ -
+ name: memberId
+ in: path
+ description: 'ID of the organization member. Get via [List Users](#operation/api.users.getMany) or via [Get Authenticated User](#operation/api.user.get) for own usage'
+ required: true
+ schema:
+ type: integer
+ responses:
+ '200':
+ description: 'AI usage member data'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AiUsageMemberResource'
+ '400':
+ description: 'Invalid Request Parameters'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ErrorCollectionResource'
+ '401':
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/AuthenticateError'
+ '403':
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ForbiddenExceptionResource'
+ '404':
+ description: 'Not Found'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/NotFoundExceptionResource'
+ '405':
+ description: 'Method Not Allowed'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
'/applications/installations/{identifier}/bundles':
post:
tags:
@@ -4836,7 +4935,7 @@ paths:
tags:
- Glossaries
summary: 'List Concepts'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of concepts in the glossary. A concept groups the terms that mean the same thing in different languages."
operationId: api.glossaries.concepts.getMany
parameters:
-
@@ -4866,7 +4965,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptCollectionResource'
+ $ref: '#/components/schemas/EnterpriseConceptCollectionResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -4907,8 +5006,8 @@ paths:
get:
tags:
- Glossaries
- summary: 'Get concept'
- description: '**Required scopes:** `glossary` (Read only).'
+ summary: 'Get Concept'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single concept of the glossary, with the definition and note stored for each of its languages."
operationId: api.glossaries.concepts.get
parameters:
-
@@ -4921,7 +5020,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/EnterpriseConceptResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -4961,8 +5060,8 @@ paths:
put:
tags:
- Glossaries
- summary: 'Update concept'
- description: "**Required scopes:** `glossary` (Read and Write).\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
+ summary: 'Update Concept'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the concept and the definition and note stored for each of its languages. `fields` writes the whole set of custom field values: a field the request omits, or whose value is empty, is cleared.\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
operationId: api.glossaries.concepts.put
parameters:
-
@@ -4980,7 +5079,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/EnterpriseConceptResource'
'400':
description: 'Invalid Request Body'
content:
@@ -5021,7 +5120,7 @@ paths:
tags:
- Glossaries
summary: 'Delete Concept'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the concept together with every term that belongs to it."
operationId: api.glossaries.concepts.delete
parameters:
-
@@ -5732,6 +5831,8 @@ paths:
- file
- translation
- string
+ - term
+ - concept
-
name: type
in: query
@@ -17703,7 +17804,7 @@ paths:
tags:
- Glossaries
summary: 'List Terms'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of terms in the glossary, ordered by `id` unless `orderBy` says otherwise. Without a filter the terms of every language are returned."
operationId: api.glossaries.terms.getMany
parameters:
-
@@ -17765,7 +17866,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermCollectionResource'
+ $ref: '#/components/schemas/EnterpriseTermCollectionResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -17816,7 +17917,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/EnterpriseTermResource'
'400':
description: 'Invalid Request Parameters'
content:
@@ -17863,7 +17964,7 @@ paths:
tags:
- Glossaries
summary: 'Clear Glossary'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the terms of the glossary. Without a filter every term is deleted; the query parameters narrow it to one language, one concept, or one term and its translations."
operationId: api.glossaries.terms.deleteMany
parameters:
-
@@ -17931,7 +18032,7 @@ paths:
tags:
- Glossaries
summary: 'Get Term'
- description: '**Required scopes:** `glossary` (Read only).'
+ description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single term of the glossary."
operationId: api.glossaries.terms.get
parameters:
-
@@ -17944,7 +18045,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/EnterpriseTermResource'
'401':
description: Unauthorized
content:
@@ -17973,7 +18074,7 @@ paths:
tags:
- Glossaries
summary: 'Delete Term'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the term. When it was the last term of its concept, the concept is deleted as well."
operationId: api.glossaries.terms.delete
parameters:
-
@@ -18017,7 +18118,7 @@ paths:
tags:
- Glossaries
summary: 'Edit Term'
- description: '**Required scopes:** `glossary` (Read and Write).'
+ description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the term with a JSON Patch document. Only the paths listed in the request schema can be replaced.\n\n__Note:__ A `replace` on `/fields` writes the whole set of custom field values — a field the value omits, or whose value is empty, is cleared"
operationId: api.glossaries.terms.patch
parameters:
-
@@ -18025,7 +18126,7 @@ paths:
-
$ref: '#/components/parameters/TermId'
requestBody:
- description: 'A JSON Patch document as defined by RFC 6902'
+ description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
content:
application/json:
schema:
@@ -18036,7 +18137,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/EnterpriseTermResource'
'400':
description: 'Invalid Request Body'
content:
@@ -24372,6 +24473,86 @@ components:
- 'Перекладений текст 1'
- 'Перекладений текст 2'
type: object
+ AiUsageMemberCollectionResource:
+ description: 'AI Usage Member Collection Resource'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/CollectionResource'
+ -
+ properties:
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/AiUsageMemberResource'
+ pagination:
+ $ref: '#/components/schemas/Pagination'
+ AiUsageMemberResource:
+ description: 'AI Usage Member Resource'
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/Resource'
+ -
+ properties:
+ data:
+ $ref: '#/components/schemas/AiUsageMember'
+ AiUsageMember:
+ title: 'AI Usage Member'
+ properties:
+ user:
+ description: 'Organization member the usage and limits below belong to'
+ properties:
+ id:
+ description: 'User ID'
+ type: integer
+ example: 12
+ username:
+ description: 'User username'
+ type: string
+ example: john_smith
+ fullName:
+ description: 'User full name'
+ type: string
+ example: 'John Smith'
+ avatarUrl:
+ description: 'User avatar URL'
+ type: string
+ example: ''
+ type: object
+ dailyCostLimit:
+ description: 'Effective daily AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
+ type: number
+ format: float
+ example: 2
+ nullable: true
+ dailyCostSpent:
+ description: 'AI cost spent in the current day, in USD'
+ type: number
+ format: float
+ example: 0.26
+ dailyResetAt:
+ description: 'Date and time when the daily cost limit resets'
+ type: string
+ format: date-time
+ example: '2026-09-12T00:00:00+00:00'
+ monthlyCostLimit:
+ description: 'Effective monthly AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
+ type: number
+ format: float
+ example: null
+ nullable: true
+ monthlyCostSpent:
+ description: 'AI cost spent in the current month, in USD'
+ type: number
+ format: float
+ example: 6.93
+ monthlyResetAt:
+ description: 'Date and time when the monthly cost limit resets'
+ type: string
+ format: date-time
+ example: '2026-10-01T00:00:00+00:00'
+ type: object
ApplicationConsentPatch:
description: 'A JSON Patch document as defined by RFC 6902'
type: array
@@ -27582,8 +27763,13 @@ components:
type: array
items:
$ref: '#/components/schemas/ConceptUpdateLanguagesDetails'
+ fields:
+ oneOf:
+ -
+ $ref: '#/components/schemas/EnterpriseAdditionalFields'
+ nullable: true
type: object
- ConceptCollectionResource:
+ EnterpriseConceptCollectionResource:
description: 'Concept Collection Resource'
type: object
allOf:
@@ -27596,10 +27782,10 @@ components:
data:
type: array
items:
- $ref: '#/components/schemas/ConceptResource'
+ $ref: '#/components/schemas/EnterpriseConceptResource'
pagination:
$ref: '#/components/schemas/Pagination'
- ConceptResource:
+ EnterpriseConceptResource:
description: 'Concept Resource'
type: object
allOf:
@@ -27683,6 +27869,11 @@ components:
type: string
format: date-time
example: '2019-09-23T07:19:47+00:00'
+ fields:
+ oneOf:
+ -
+ $ref: '#/components/schemas/EnterpriseAdditionalFields'
+ nullable: true
type: object
JsonPatchDocument:
description: 'A JSON Patch document as defined by RFC 6902'
@@ -29284,6 +29475,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
NumberFieldConfig:
@@ -29321,6 +29516,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
OtherTypesFieldConfig:
@@ -29349,6 +29548,10 @@ components:
- stringEditModal
- stringDetails
- translationUnderContent
+ - termDetails
+ - termEditModal
+ - conceptDetails
+ - conceptEditModal
type: object
type: object
FieldConfig:
@@ -29409,6 +29612,8 @@ components:
- file
- translation
- string
+ - term
+ - concept
example: task
config:
$ref: '#/components/schemas/FieldConfig'
@@ -29472,6 +29677,8 @@ components:
- file
- translation
- string
+ - term
+ - concept
example: task
createdAt:
description: 'in UTC'
@@ -32084,6 +32291,41 @@ components:
example: 2
type: object
GlossaryExportForm:
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/GlossaryExportFormBase'
+ -
+ properties:
+ exportFields:
+ description: "Array fields for export. A custom field is selected by its slug — `field_{%fieldSlug%}` for a term field, exported as one column per language, and `conceptField_{%fieldSlug%}` for a concept field, exported as a single column.\n\n__Note:__ Used for export CSV or XLSX format only"
+ type: array
+ items:
+ oneOf:
+ - { type: string, enum: [term, description, partOfSpeech, type, status, gender, note, url, conceptDefinition, conceptSubject, conceptNote, conceptUrl, conceptFigure] }
+ - { type: string, pattern: '^(field|conceptField)_[0-9a-zA-Z_-]{3,255}$' }
+ default:
+ - term
+ - description
+ - partOfSpeech
+ example:
+ - term
+ - description
+ - partOfSpeech
+ GlossaryImportForm:
+ type: object
+ allOf:
+ -
+ $ref: '#/components/schemas/GlossaryImportFormBase'
+ -
+ properties:
+ scheme:
+ description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n * `field_{%fieldSlug%}_{%language_code%}` – column with a term custom field value\n * `conceptField_{%fieldSlug%}` – column with a concept custom field value\n\n__Note:__ Only the custom fields whose columns are mapped here are written — a field this scheme omits keeps its stored value, and a mapped but empty cell clears it\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
+ type: object
+ example:
+ term_en: 0
+ description_en: 1
+ GlossaryExportFormBase:
properties:
format:
description: "Supported formats:\n * 'tbx'\n * 'tbx_v3'\n * 'csv'\n * 'xlsx'"
@@ -32095,33 +32337,6 @@ components:
- csv
- xlsx
example: csv
- exportFields:
- description: "Array fields for export.\n\n__Note:__ Used for export CSV or XLSX format only"
- type: array
- items:
- type: string
- enum:
- - term
- - description
- - partOfSpeech
- - type
- - status
- - gender
- - note
- - url
- - conceptDefinition
- - conceptSubject
- - conceptNote
- - conceptUrl
- - conceptFigure
- default:
- - term
- - description
- - partOfSpeech
- example:
- - term
- - description
- - partOfSpeech
exportType:
description: "Determines whether the export keeps every term of a matching concept (`concepts`, default)\n * or only the terms that match the active filters (`terms`)."
type: string
@@ -32304,7 +32519,7 @@ components:
format: date-time
example: '2024-09-27T07:00:14+00:00'
type: object
- GlossaryImportForm:
+ GlossaryImportFormBase:
required:
- storageId
properties:
@@ -32312,12 +32527,6 @@ components:
description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)\n\n Supported file formats:\n * TBX\n * CSV\n * XLS/XLSX"
type: integer
format: int64
- scheme:
- description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
- type: object
- example:
- term_en: 0
- description_en: 1
firstLineContainsHeader:
description: "Defines whether file includes first row header that should not be imported\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
type: boolean
@@ -50106,7 +50315,7 @@ components:
nullable: true
type: object
TermPatch:
- description: 'A JSON Patch document as defined by RFC 6902'
+ description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
type: array
items:
$ref: '#/components/schemas/TermOperation'
@@ -50123,7 +50332,7 @@ components:
- replace
- test
path:
- description: 'A JSON Pointer as defined by RFC 6901'
+ description: 'A JSON Pointer as defined by [RFC 6901](https://tools.ietf.org/html/rfc6901)'
type: string
format: json-pointer
enum:
@@ -50135,6 +50344,7 @@ components:
- /gender
- /url
- /note
+ - /fields
type: object
discriminator:
propertyName: op
@@ -50249,8 +50459,13 @@ components:
description: 'Defines whether to add translation to the existing term. Get `id` via [List Terms](#operation/api.glossaries.terms.getMany)'
type: integer
deprecated: true
+ fields:
+ oneOf:
+ -
+ $ref: '#/components/schemas/EnterpriseAdditionalFields'
+ nullable: true
type: object
- TermCollectionResource:
+ EnterpriseTermCollectionResource:
description: 'Term Collection Resource'
type: object
allOf:
@@ -50263,10 +50478,10 @@ components:
data:
type: array
items:
- $ref: '#/components/schemas/TermResource'
+ $ref: '#/components/schemas/EnterpriseTermResource'
pagination:
$ref: '#/components/schemas/Pagination'
- TermResource:
+ EnterpriseTermResource:
description: 'Term Resource'
type: object
allOf:
@@ -50331,6 +50546,11 @@ components:
type: string
format: date-time
example: '2019-09-23T07:19:47+00:00'
+ fields:
+ oneOf:
+ -
+ $ref: '#/components/schemas/EnterpriseAdditionalFields'
+ nullable: true
type: object
TmPatch:
description: 'A JSON Patch document as defined by RFC 6902'
@@ -54369,6 +54589,46 @@ components:
type: string
format: date-time
example: '2026-07-31T23:59:59+00:00'
+ CrowdinAiUsageMemberCollectionUserIds:
+ name: userIds
+ in: query
+ description: 'Filter by user identifier, comma-separated. Get via [List Project Members](#operation/api.projects.members.getMany)'
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ maxItems: 500
+ example: '2,3'
+ EnterpriseAiUsageMemberCollectionUserIds:
+ name: userIds
+ in: query
+ description: 'Filter by user identifier, comma-separated. Get via [List Users](#operation/api.users.getMany)'
+ required: false
+ style: form
+ explode: false
+ schema:
+ type: array
+ items:
+ type: integer
+ maxItems: 500
+ example: '2,3'
+ AiUsageMemberCollectionOrderBy:
+ name: orderBy
+ in: query
+ description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
+ required: false
+ schema:
+ type: string
+ enum:
+ - username
+ - dailyCostLimit
+ - dailyCostSpent
+ - monthlyCostLimit
+ - monthlyCostSpent
+ example: 'dailyCostSpent desc'
ApplicationKvPrefix:
name: prefix
in: query