{"openapi":"3.1.0","info":{"title":"collingo","description":"","license":{"name":""},"version":"1.0.0"},"servers":[{"url":"/api/v1"}],"paths":{"/entries/{id}":{"get":{"tags":["Entries"],"summary":"Get an entry by id","operationId":"api_v1_get_entry","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Entry with translations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entry"}}}},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"404":{"description":"Entry not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"delete":{"tags":["Entries"],"summary":"Delete an entry","operationId":"api_v1_delete_entry","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Entry deleted."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Entry not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"patch":{"tags":["Entries"],"summary":"Update an entry","operationId":"api_v1_update_entry","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEntryBody"}}},"required":true},"responses":{"200":{"description":"Updated entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntrySummary"}}}},"400":{"description":"Validation failed."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Entry not found."},"409":{"description":"Duplicate technical name."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/entries/{id}/translations":{"put":{"tags":["Translations"],"summary":"Set or update a translation","operationId":"api_v1_set_translation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTranslationBody"}}},"required":true},"responses":{"200":{"description":"Translation saved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Translation"}}}},"400":{"description":"Validation failed or invalid language."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Entry not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"delete":{"tags":["Translations"],"summary":"Remove a translation","operationId":"api_v1_unset_translation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsetTranslationBody"}}},"required":true},"responses":{"204":{"description":"Translation removed."},"400":{"description":"Validation failed."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Entry not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/groups/{id}":{"get":{"tags":["Groups"],"summary":"Get a group by id","operationId":"api_v1_get_group","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Group not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"delete":{"tags":["Groups"],"summary":"Delete a group","operationId":"api_v1_delete_group","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Group deleted."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Group not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"patch":{"tags":["Groups"],"summary":"Update a group","operationId":"api_v1_update_group","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGroupBody"}}},"required":true},"responses":{"200":{"description":"Updated group.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"400":{"description":"Validation failed."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Group not found."},"409":{"description":"Conflict."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/groups/{id}/entries":{"get":{"tags":["Entries"],"summary":"List entries in a group","operationId":"api_v1_list_entries","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":100,"maximum":100,"minimum":1}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":0,"minimum":0}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Page of entry summaries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_EntrySummary"}}}},"400":{"description":"Invalid query."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"404":{"description":"Group not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"post":{"tags":["Entries"],"summary":"Create an entry in a group","operationId":"api_v1_create_entry","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEntryBody"}}},"required":true},"responses":{"200":{"description":"Entry created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntrySummary"}}}},"400":{"description":"Validation failed."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Group not found."},"409":{"description":"Duplicate technical name."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/info":{"get":{"tags":["Metadata"],"summary":"Get API key owner profile","description":"Returns basic profile information for the user authenticated by the API key.","operationId":"api_v1_info","responses":{"200":{"description":"Authenticated user profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InfoResponse"}}}},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"404":{"description":"User not found (`ERR_SETTINGS_PROFILE_USER_NOT_FOUND`)."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/locales":{"get":{"tags":["Metadata"],"summary":"List supported locale codes","description":"Returns language and region codes for project locale pickers. Public; no API key required.","operationId":"api_v1_list_locales","responses":{"200":{"description":"Supported locales.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LocaleDto"}}}}}}}},"/projects":{"get":{"tags":["Projects"],"summary":"List accessible projects","operationId":"api_v1_list_projects","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":100,"maximum":100,"minimum":1}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":0,"minimum":0}}],"responses":{"200":{"description":"Page of projects.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Project"}}}},"400":{"description":"Invalid `limit` or `offset`."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"post":{"tags":["Projects"],"summary":"Create a project","operationId":"api_v1_create_project","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBody"}}},"required":true},"responses":{"200":{"description":"Project created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Validation failed."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/projects/{id}":{"get":{"tags":["Projects"],"summary":"Get a project","operationId":"api_v1_get_project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"clq8x8y2z0000"}],"responses":{"200":{"description":"Project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Project not found or no access (`ERR_PROJECT_NOT_FOUND`)."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"delete":{"tags":["Projects"],"summary":"Delete a project","operationId":"api_v1_delete_project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"clq8x8y2z0000"}],"responses":{"204":{"description":"Project deleted."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Not the owner (`ERR_FORBIDDEN`)."},"404":{"description":"Project not found (`ERR_PROJECT_NOT_FOUND`)."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"patch":{"tags":["Projects"],"summary":"Update a project","operationId":"api_v1_update_project","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"clq8x8y2z0000"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBody"}}},"required":true},"responses":{"200":{"description":"Updated project.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"400":{"description":"Validation failed or nothing to update."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Project not found (`ERR_PROJECT_NOT_FOUND`)."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/projects/{id}/entries/untranslated":{"get":{"tags":["Translations"],"summary":"List untranslated entries","operationId":"api_v1_list_untranslated","parameters":[{"name":"languageCode","in":"query","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":100,"maximum":100,"minimum":1}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":0,"minimum":0}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Untranslated entries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_UntranslatedEntry"}}}},"400":{"description":"Validation failed."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"404":{"description":"Project not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/projects/{id}/export/flutter":{"get":{"tags":["Exports"],"summary":"Export Flutter ARB tar.gz","operationId":"api_v1_export_flutter","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","description":"Pretty-print JSON (or JSON inside archives) when true.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Gzip tar archive.","content":{"application/gzip":{}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"Project not found."},"409":{"description":"CamelCase key collision (`ERR_EXPORT_KEY_COLLISION`)."},"500":{"description":"Export failed."}},"security":[{"bearer_api_key":[]}]}},"/projects/{id}/export/i18next":{"get":{"tags":["Exports"],"summary":"Export i18next tar.gz","operationId":"api_v1_export_i18next","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","description":"Pretty-print JSON (or JSON inside archives) when true.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Gzip tar archive.","content":{"application/gzip":{}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"Project not found."},"500":{"description":"Export failed."}},"security":[{"bearer_api_key":[]}]}},"/projects/{id}/export/json":{"get":{"tags":["Exports"],"summary":"Export nested JSON by language","operationId":"api_v1_export_json","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","description":"Pretty-print JSON (or JSON inside archives) when true.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Nested JSON export.","content":{"application/json":{}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"Project not found."},"500":{"description":"Export failed."}},"security":[{"bearer_api_key":[]}]}},"/projects/{id}/export/vue-i18n":{"get":{"tags":["Exports"],"summary":"Export flat vue-i18n JSON","operationId":"api_v1_export_vue_i18n","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","description":"Pretty-print JSON (or JSON inside archives) when true.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Flat key JSON export.","content":{"application/json":{}}},"401":{"description":"Missing or invalid API key."},"404":{"description":"Project not found."},"500":{"description":"Export failed."}},"security":[{"bearer_api_key":[]}]}},"/projects/{id}/groups":{"get":{"tags":["Groups"],"summary":"List groups in a project","description":"Paginated groups at one hierarchy level. Without `parentId`, only root groups. With `parentId`, direct children.","operationId":"api_v1_list_groups","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":100,"maximum":100,"minimum":1}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":0,"minimum":0}},{"name":"parentId","in":"query","required":false,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Page of groups.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_Group"}}}},"400":{"description":"Invalid query."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Project or parent not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]},"post":{"tags":["Groups"],"summary":"Create a group in a project","operationId":"api_v1_create_group","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupBody"}}},"required":true},"responses":{"200":{"description":"Group created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"400":{"description":"Validation or hierarchy limit."},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Project or parent not found."},"409":{"description":"Duplicate technical name (`ERR_CONFLICT`)."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/projects/{id}/groups/summary":{"get":{"tags":["Groups"],"summary":"List all groups with breadcrumbs","description":"Returns every group in the project with ancestor id/name paths (no pagination).","operationId":"api_v1_groups_summary","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Group summaries.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GroupSummary"}}}}},"401":{"description":"Missing or invalid API key (`ERR_UNAUTHORIZED`)."},"403":{"description":"Insufficient role (`ERR_FORBIDDEN`)."},"404":{"description":"Project not found."},"500":{"description":"Database or internal error."}},"security":[{"bearer_api_key":[]}]}},"/version":{"get":{"tags":["Metadata"],"summary":"Get API version","description":"Returns the server package version as plain text. Public; no API key required.","operationId":"api_v1_version","responses":{"200":{"description":"Package version.","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"CreateBody":{"type":"object","title":"ApiCreateProjectRequest","required":["name","baseLanguage","translationLanguages"],"properties":{"baseLanguage":{"type":"string","example":"en"},"name":{"type":"string","example":"My mobile app","maxLength":32,"minLength":3},"translationLanguages":{"type":"array","items":{"type":"string"}}}},"CreateEntryBody":{"type":"object","title":"ApiCreateEntryRequest","required":["technicalName","baseTerm"],"properties":{"baseTerm":{"type":"string"},"contextInfo":{"type":["string","null"]},"technicalName":{"type":"string"}}},"CreateGroupBody":{"type":"object","title":"ApiCreateGroupRequest","required":["technicalName","displayName"],"properties":{"displayName":{"type":"string"},"parentId":{"type":["string","null"]},"technicalName":{"type":"string"}}},"Entry":{"type":"object","title":"Entry","required":["id","groupId","technicalName","baseTerm","createdAt","translations"],"properties":{"baseTerm":{"type":"string"},"contextInfo":{"type":["string","null"]},"createdAt":{"type":"string"},"groupId":{"type":"string"},"id":{"type":"string"},"technicalName":{"type":"string"},"translations":{"type":"array","items":{"$ref":"#/components/schemas/Translation"}}}},"EntrySummary":{"type":"object","title":"EntrySummary","required":["id","groupId","technicalName","baseTerm","createdAt"],"properties":{"baseTerm":{"type":"string"},"contextInfo":{"type":["string","null"]},"createdAt":{"type":"string"},"groupId":{"type":"string"},"id":{"type":"string"},"technicalName":{"type":"string"}}},"Group":{"type":"object","required":["id","projectId","technicalName","displayName","createdAt"],"properties":{"createdAt":{"type":"string"},"displayName":{"type":"string"},"id":{"type":"string"},"parentId":{"type":["string","null"]},"projectId":{"type":"string"},"technicalName":{"type":"string"}}},"GroupSummary":{"type":"object","title":"GroupSummary","required":["id","displayName","technicalName","breadcrumbs","breadcrumbNames"],"properties":{"breadcrumbNames":{"type":"array","items":{"type":"string"},"description":"Ancestor display names in the same order as `breadcrumbs`."},"breadcrumbs":{"type":"array","items":{"type":"string"},"description":"Ancestor group IDs from root → parent (does not include this group)."},"displayName":{"type":"string"},"id":{"type":"string"},"technicalName":{"type":"string"}}},"InfoResponse":{"type":"object","title":"ApiInfoResponse","required":["id","email","firstName","lastName","locale","timezone"],"properties":{"email":{"type":"string"},"firstName":{"type":"string"},"id":{"type":"string"},"lastName":{"type":"string"},"locale":{"type":"string"},"timezone":{"type":"string"}}},"LocaleDto":{"type":"object","title":"ApiLocale","required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"},"regions":{"type":["array","null"],"items":{"$ref":"#/components/schemas/LocaleRegionDto"}}}},"LocaleRegionDto":{"type":"object","title":"ApiLocaleRegion","required":["code","name"],"properties":{"code":{"type":"string"},"name":{"type":"string"}}},"MemberQuotaStatus":{"type":"object","title":"MemberQuotaStatus","required":["limit","confirmedCount","overLimitCount"],"properties":{"confirmedCount":{"type":"integer","format":"int32","minimum":0},"limit":{"type":"integer","format":"int32","minimum":0},"overLimitCount":{"type":"integer","format":"int32","minimum":0}}},"Page_EntrySummary":{"type":"object","description":"Offset-based page: repeats the requested `limit`/`offset` and total row count.","required":["limit","offset","total","result"],"properties":{"limit":{"type":"integer","format":"int64","minimum":0},"offset":{"type":"integer","format":"int64","minimum":0},"result":{"type":"array","items":{"type":"object","title":"EntrySummary","required":["id","groupId","technicalName","baseTerm","createdAt"],"properties":{"baseTerm":{"type":"string"},"contextInfo":{"type":["string","null"]},"createdAt":{"type":"string"},"groupId":{"type":"string"},"id":{"type":"string"},"technicalName":{"type":"string"}}}},"total":{"type":"integer","format":"int64","description":"Total rows matching the query (not capped by `limit`).","minimum":0}}},"Page_Group":{"type":"object","description":"Offset-based page: repeats the requested `limit`/`offset` and total row count.","required":["limit","offset","total","result"],"properties":{"limit":{"type":"integer","format":"int64","minimum":0},"offset":{"type":"integer","format":"int64","minimum":0},"result":{"type":"array","items":{"type":"object","required":["id","projectId","technicalName","displayName","createdAt"],"properties":{"createdAt":{"type":"string"},"displayName":{"type":"string"},"id":{"type":"string"},"parentId":{"type":["string","null"]},"projectId":{"type":"string"},"technicalName":{"type":"string"}}}},"total":{"type":"integer","format":"int64","description":"Total rows matching the query (not capped by `limit`).","minimum":0}}},"Page_Project":{"type":"object","description":"Offset-based page: repeats the requested `limit`/`offset` and total row count.","required":["limit","offset","total","result"],"properties":{"limit":{"type":"integer","format":"int64","minimum":0},"offset":{"type":"integer","format":"int64","minimum":0},"result":{"type":"array","items":{"type":"object","title":"Project","description":"Project resource as returned by the BFF (camelCase JSON).","required":["id","ownerId","owner","name","baseLanguage","translationLanguages","createdAt"],"properties":{"baseLanguage":{"type":"string"},"capabilities":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectCapabilities","description":"Per-user permissions for the authenticated caller (list and get)."}]},"createdAt":{"type":"string","description":"Creation time (RFC 3339)."},"id":{"type":"string","description":"Unique project id (CUID2)."},"memberQuota":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MemberQuotaStatus","description":"Present on `GET /projects/{id}` only — member quota vs plan limit."}]},"name":{"type":"string"},"owner":{"$ref":"#/components/schemas/UserSummary"},"ownerId":{"type":"string","description":"User id of the owner."},"translationLanguages":{"type":"array","items":{"type":"string"}}}}},"total":{"type":"integer","format":"int64","description":"Total rows matching the query (not capped by `limit`).","minimum":0}}},"Page_UntranslatedEntry":{"type":"object","description":"Offset-based page: repeats the requested `limit`/`offset` and total row count.","required":["limit","offset","total","result"],"properties":{"limit":{"type":"integer","format":"int64","minimum":0},"offset":{"type":"integer","format":"int64","minimum":0},"result":{"type":"array","items":{"type":"object","required":["id","groupId","technicalName","baseTerm"],"properties":{"baseTerm":{"type":"string"},"contextInfo":{"type":["string","null"]},"groupId":{"type":"string"},"id":{"type":"string"},"technicalName":{"type":"string"}}}},"total":{"type":"integer","format":"int64","description":"Total rows matching the query (not capped by `limit`).","minimum":0}}},"Project":{"type":"object","title":"Project","description":"Project resource as returned by the BFF (camelCase JSON).","required":["id","ownerId","owner","name","baseLanguage","translationLanguages","createdAt"],"properties":{"baseLanguage":{"type":"string"},"capabilities":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectCapabilities","description":"Per-user permissions for the authenticated caller (list and get)."}]},"createdAt":{"type":"string","description":"Creation time (RFC 3339)."},"id":{"type":"string","description":"Unique project id (CUID2)."},"memberQuota":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MemberQuotaStatus","description":"Present on `GET /projects/{id}` only — member quota vs plan limit."}]},"name":{"type":"string"},"owner":{"$ref":"#/components/schemas/UserSummary"},"ownerId":{"type":"string","description":"User id of the owner."},"translationLanguages":{"type":"array","items":{"type":"string"}}}},"ProjectCapabilities":{"type":"object","title":"ProjectCapabilities","description":"Per-user permissions for a project (included on project list and `GET /projects/{id}`).","required":["isOwner","isOverLimit","canUpdateProject","canDeleteProject","canManageMembers","canAssignAdminRole","canTransferOwnership","canLeave","canReadEntries","canEditEntries","canTranslate","canReadGroups","canEditGroups"],"properties":{"canAssignAdminRole":{"type":"boolean"},"canDeleteProject":{"type":"boolean"},"canEditEntries":{"type":"boolean"},"canEditGroups":{"type":"boolean"},"canLeave":{"type":"boolean"},"canManageMembers":{"type":"boolean"},"canReadEntries":{"type":"boolean"},"canReadGroups":{"type":"boolean"},"canTransferOwnership":{"type":"boolean"},"canTranslate":{"type":"boolean"},"canUpdateProject":{"type":"boolean"},"isOverLimit":{"type":"boolean","description":"True when the user is a confirmed member outside the plan member quota (read-only)."},"isOwner":{"type":"boolean"},"role":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/ProjectRoleDto","description":"Confirmed member role; omitted when the user is the owner."}]}}},"ProjectRoleDto":{"type":"string","title":"ProjectRole","enum":["admin","editor","translator","viewer"]},"SetTranslationBody":{"type":"object","title":"ApiSetTranslationRequest","required":["language","translation"],"properties":{"language":{"type":"string"},"translation":{"type":"string"}}},"Translation":{"type":"object","required":["id","language","translation","createdAt"],"properties":{"createdAt":{"type":"string"},"id":{"type":"string"},"language":{"type":"string"},"translation":{"type":"string"},"translatorId":{"type":["string","null"]}}},"UnsetTranslationBody":{"type":"object","title":"ApiUnsetTranslationRequest","required":["language"],"properties":{"language":{"type":"string"}}},"UntranslatedEntry":{"type":"object","required":["id","groupId","technicalName","baseTerm"],"properties":{"baseTerm":{"type":"string"},"contextInfo":{"type":["string","null"]},"groupId":{"type":"string"},"id":{"type":"string"},"technicalName":{"type":"string"}}},"UpdateBody":{"type":"object","title":"ApiUpdateProjectRequest","properties":{"baseLanguage":{"type":["string","null"]},"name":{"type":["string","null"],"maxLength":32,"minLength":3},"translationLanguages":{"type":["array","null"],"items":{"type":"string"}}}},"UpdateEntryBody":{"type":"object","title":"ApiUpdateEntryRequest","properties":{"baseTerm":{"type":["string","null"]},"contextInfo":{"type":["string","null"]},"technicalName":{"type":["string","null"]}}},"UpdateGroupBody":{"type":"object","title":"ApiUpdateGroupRequest","properties":{"displayName":{"type":["string","null"]},"parentId":{"type":["string","null"]},"technicalName":{"type":["string","null"]}}},"UserSummary":{"type":"object","title":"UserSummary","description":"Minimal user representation for nested references (camelCase JSON).","required":["id","firstName","lastName"],"properties":{"firstName":{"type":"string"},"id":{"type":"string"},"lastName":{"type":"string"}}}},"securitySchemes":{"bearer_api_key":{"type":"http","scheme":"bearer","bearerFormat":"API key","description":"API key created in the Collingo UI (`Authorization: Bearer <apiKey>`)."}}},"tags":[{"name":"Metadata","description":"Version, locales, and API key owner info."},{"name":"Projects","description":"Create and manage translation projects."},{"name":"Groups","description":"Translation key groups (hierarchy)."},{"name":"Entries","description":"Translation entries within groups."},{"name":"Translations","description":"Set, remove, and list missing translations."},{"name":"Exports","description":"Download translations in integration formats."}]}