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