{
"openapi": "3.0.3",
"info": {
"title": "Phrase Strings API Reference",
"version": "2.0.0",
"description": "Phrase Strings is a translation management platform for software projects. You can collaborate on language file translation with your team or order translations through our platform. The API allows you to import locale files, download locale files, tag keys or interact in other ways with the localization data stored in Phrase Strings for your account.",
"contact": {
"name": "Phrase Support",
"url": "https://developers.phrase.com/api/",
"email": "support@phrase.com"
},
"x-logo": {
"url": "https://developers.phrase.com/images/phrase-logo.svg",
"backgroundColor": "#03eab3",
"altText": "Phrase Strings"
},
"termsOfService": "https://phrase.com/terms/",
"license": {
"name": "MIT",
"url": "https://choosealicense.com/licenses/mit/"
}
},
"servers": [
{
"url": "https://api.phrase.com/v2",
"description": "EU production server"
},
{
"url": "https://api.us.app.phrase.com/v2",
"description": "US production server"
}
],
"security": [
{
"Token": []
},
{
"Basic": []
}
],
"tags": [
{
"name": "Accounts"
},
{
"name": "Authorizations",
"description": "The endpoints provided by the Authorizations API are **only accessible via Basic authentication with email and password**.\n\nWhen creating a new authorization, the new access token for this authorization will be returned in the immediate response but not later, due to security reasons. When accessing authorizations later, you will only see the last eight chars of the token in plain text (`token_last_eight`) and the SHA256 digest of the token for reference (`hashed_token`).\n\nFor instructions on how authorization in general works, see our [Auth Guide](#overview--authentication).\n\n### Scopes\n\nWhen creating or updating an OAuth authorization, you can define a list of scopes to limit the access that can be performed by that authorization.\n\n#### Available Scopes\n\n
\n
\n \n \n | Scope | \n Description | \n
\n \n \n \n read | \n Read projects, locales, keys, translations, orders | \n
\n \n write | \n Write projects, locales, keys, translations but not orders | \n
\n \n orders.create | \n Create and confirm orders | \n
\n \n team.manage | \n Manage invitations and members | \n
\n \n
\n
\n"
},
{
"name": "Automation Events"
},
{
"name": "Blacklisted Keys"
},
{
"name": "Branches",
"description": "### Branch creation\n\nBranches will be created asynchronously. State of branch creation is returned as state.\n\n#### Available States\n\n\n
\n \n \n | State | \n Description | \n
\n \n \n \n initialized | \n Data received. | \n
\n \n processing | \n Branch is currently creating. | \n
\n \n success | \n Branch was created successfully | \n
\n \n error | \n Branch creation failed. | \n
\n \n
\n
\n"
},
{
"name": "Checks",
"description": "**Note:** The Checks API is still in development and might change in subsequent releases.\n\nThe Checks API lets you list the check issues detected in a project and dismiss issues that should no longer appear on the list of active check issues.\n\n#### Available States\n\n\n
\n \n \n | State | \n Description | \n
\n \n \n \n active | \n The issue is unresolved and not dismissed. | \n
\n \n solved | \n The issue has been resolved. | \n
\n \n dismissed | \n The issue has been dismissed by a user. | \n
\n \n
\n
\n"
},
{
"name": "Comments"
},
{
"name": "Comment Reactions"
},
{
"name": "Comment Replies"
},
{
"name": "Custom Metadata"
},
{
"name": "Distributions"
},
{
"name": "Documents"
},
{
"name": "Figma Attachments"
},
{
"name": "Formats"
},
{
"name": "Glossaries"
},
{
"name": "Glossary Terms"
},
{
"name": "Glossary Term Translations"
},
{
"name": "ICU"
},
{
"name": "Invitations",
"description": "With the invitation endpoint you can [manage and invite users](https://support.phrase.com/hc/en-us/articles/5709742418716) to Phrase Strings via API. A user can have the role Manager, Developer or Translator each with its own access rights. Developers and translators need resources like projects and locales assigned in order to access them.\n"
},
{
"name": "Job Annotations",
"description": "The job annotations endpoints allow you to create, update and delete annotations for jobs and job locales. Annotations are used to add metadata to a job or job locale.\n"
},
{
"name": "Job Comments"
},
{
"name": "Job Locales"
},
{
"name": "Job Template Locales"
},
{
"name": "Job Templates"
},
{
"name": "Jobs"
},
{
"name": "Key Format Annotations"
},
{
"name": "Keys"
},
{
"name": "Linked Keys"
},
{
"name": "Locales"
},
{
"name": "Locale Downloads"
},
{
"name": "Machine Translation"
},
{
"name": "Members",
"description": "With the members endpoints you can do basic [team and user management](https://support.phrase.com/hc/en-us/articles/5709742418716) via API. A user can have the role Manager, Developer or Translator each with its own access rights. Developers and translators need resources like projects and locales assigned in order to access them.\n"
},
{
"name": "Notifications"
},
{
"name": "Notification Groups"
},
{
"name": "Orders",
"description": "### List of categories [TextMaster]\n\nWhen ordering translations from TextMaster, you need to specify a category ID along with your order. See this list for information on the category ID and their equivalent description.\n\n\n
\n \n \n | Category ID | \n Description | \n
\n \n \n | C001 | Agriculture |
\n | C002 | Aerospace |
\n | C003 | Animals/Pets/Plants |
\n | C004 | Arts/Culture/Literature |
\n | C005 | Automotive/Transportation |
\n | C006 | Computers/Technology/Software |
\n | C007 | Telecom |
\n | C008 | Real Estate/Construction/Building |
\n | C009 | Consumer Goods |
\n | C010 | Education |
\n | C011 | Entertainment |
\n | C012 | Ecology/Environment |
\n | C013 | Health/Biotechnology/Pharma |
\n | C014 | Internet |
\n | C015 | Policy/Government/Public |
\n | C016 | Publishing/Media/Communication |
\n | C017 | Religion |
\n | C018 | Food/Beverages |
\n | C019 | Retail |
\n | C020 | Fashion/Luxury/Textiles |
\n | C021 | Travel/Tourism |
\n | C022 | Natural Resources/Energy |
\n | C023 | Banking/Financial Services/Insurance |
\n | C024 | Legal Affairs/Tax/Law |
\n | C025 | Raw Materials/Industrial Goods |
\n | C026 | Lifestyle/Leisure/Hobbies |
\n | C027 | Sports |
\n | C028 | Home/Family/Friends/Children |
\n | C029 | Economy/Financial Markets |
\n | C030 | Science |
\n | C031 | Human Resources/Employment |
\n | C032 | Adult (Pornography, Violence, etc.) |
\n \n
\n
\n"
},
{
"name": "Organization Job Template Locales"
},
{
"name": "Organization Job Templates"
},
{
"name": "Pre Translations"
},
{
"name": "Projects"
},
{
"name": "Quality"
},
{
"name": "Releases"
},
{
"name": "Release Triggers"
},
{
"name": "Repo Syncs",
"description": "The Repo Syncs API allows you to synchronize your Phrase projects with your code repositories.\nYou can import translations from your repository to Phrase and export translations from Phrase to your repository.\n"
},
{
"name": "Repo Sync Events"
},
{
"name": "Reports"
},
{
"name": "Search"
},
{
"name": "Screenshot Markers"
},
{
"name": "Screenshots"
},
{
"name": "Spaces"
},
{
"name": "Style guides"
},
{
"name": "Supported Languages"
},
{
"name": "Tags"
},
{
"name": "Teams"
},
{
"name": "Translations"
},
{
"name": "Uploads",
"description": "### Formats\n\nWe support all common localization file formats. For a detailed overview, see our [Format Guide](https://support.phrase.com/hc/en-us/sections/6111343326364).\n\n### Processing\n\nUploads will be processed asynchronously and thus the data might not be imported yet although the upload is completed. Therefore we recommend to evaluate the returned state field for information on the import progress.\n\n#### Available States\n\n\n
\n \n \n | State | \n Description | \n
\n \n \n \n initialized | \n Data received. | \n
\n \n waiting_for_preview | \n Upload is waiting for preview to be finished. | \n
\n \n waiting | \n Upload is waiting for processing. | \n
\n \n processing | \n Upload is being processed, data is currently imported. | \n
\n \n success | \n Upload is complete and all data is imported. | \n
\n \n error | \n Upload or import process failed. | \n
\n \n
\n
\n"
},
{
"name": "Users"
},
{
"name": "Variables"
},
{
"name": "Versions / History"
},
{
"name": "Webhooks"
},
{
"name": "Webhook Deliveries"
}
],
"x-tagGroups": [
{
"name": "Core Resources",
"tags": [
"Projects",
"Locales",
"Keys",
"Key Format Annotations",
"Translations",
"Uploads",
"Tags",
"Custom Metadata Properties",
"Blacklisted Keys",
"Versions / History"
]
},
{
"name": "Workflows",
"tags": [
"Spaces",
"Jobs",
"Job Comments",
"Job Locales",
"Job Templates",
"Job Template Locales",
"Organization Job Templates",
"Organization Job Template Locales",
"Comments",
"Comment Reactions",
"Comment Replies",
"Branches"
]
},
{
"name": "Quality",
"tags": [
"Checks",
"Glossaries",
"Glossary Terms",
"Glossary Term Translations"
]
},
{
"name": "Integrations",
"tags": [
"Webhooks",
"Distributions",
"Releases",
"Release Triggers"
]
},
{
"name": "Ordering",
"tags": [
"Orders",
"Style guides"
]
},
{
"name": "User management",
"tags": [
"Authorizations",
"Users",
"Accounts",
"Members",
"Invitations"
]
},
{
"name": "Screenshots",
"tags": [
"Screenshots",
"Screenshot Markers"
]
},
{
"name": "Misc",
"tags": [
"Formats"
]
},
{
"name": "Figma Attachments",
"tags": [
"Figma attachments",
"Key's Figma attachments"
]
}
],
"components": {
"securitySchemes": {
"Token": {
"type": "apiKey",
"in": "header",
"name": "Authorization",
"description": "Enter your token in the format `token TOKEN`"
},
"Basic": {
"type": "http",
"scheme": "basic"
}
},
"headers": {
"Link": {
"description": "Links to related resources, in the format defined by\n[RFC 5988](https://tools.ietf.org/html/rfc5988#section-5).\nThis will include a link with relation type `next` to the\nnext page, if there is a next page.",
"schema": {
"type": "string"
}
},
"X-PhraseApp-OTP": {
"description": "The number of allowed requests in the current period",
"schema": {
"type": "string"
}
},
"X-Rate-Limit-Limit": {
"description": "The number of allowed requests in the current period",
"schema": {
"type": "integer"
}
},
"X-Rate-Limit-Reason": {
"description": "Indicates why the request was rate limited. Present only on 429 responses. `global-rate` means the per-user request-rate quota was exceeded; `global-concurrency` means the concurrent-request limit was exceeded.",
"schema": {
"type": "string",
"enum": [
"global-rate",
"global-concurrency"
]
}
},
"X-Rate-Limit-Remaining": {
"description": "The number of remaining requests in the current period",
"schema": {
"type": "integer"
}
},
"X-Rate-Limit-Reset": {
"description": "Timestamp of end of current time period as UNIX timestamp, see [Rate Limiting](/en/api/strings/pagination#rate-limiting)",
"schema": {
"type": "integer"
}
},
"Pagination": {
"description": "Pagination details for navigating through a collection of resources, provided in JSON format.",
"schema": {
"type": "object",
"properties": {
"total_count": {
"description": "Total count of items in the collection.",
"type": "integer",
"example": 10
},
"total_pages_count": {
"description": "Total number of pages available for the collection.",
"type": "integer",
"example": 2
},
"current_page": {
"description": "The current page number.",
"type": "integer",
"example": 1
},
"current_per_page": {
"description": "Number of items currently displayed per page.",
"type": "integer",
"example": 5
},
"previous_page": {
"description": "Page number of the previous page, if available.",
"type": "integer"
},
"next_page": {
"description": "Page number of the next page, if available.",
"type": "integer",
"example": 2
}
}
}
}
},
"schemas": {
"authorization": {
"type": "object",
"title": "authorization",
"properties": {
"id": {
"type": "string"
},
"note": {
"type": "string"
},
"token_last_eight": {
"type": "string"
},
"hashed_token": {
"type": "string"
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
},
"expires_at": {
"type": "string",
"format": "date-time"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"note": "My Deploy Script",
"token_last_eight": "1234abcd",
"hashed_token": "abcd1234cdef1234abcd1234cdef1234abcd1234cdef1234abcd1234cdef1234",
"scopes": [
"read"
],
"expires_at": "2015-03-30T09:52:53Z",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"authorization_with_token": {
"allOf": [
{
"$ref": "#/components/schemas/authorization"
},
{
"type": "object",
"title": "authorization_with_token",
"properties": {
"token": {
"type": "string"
}
},
"example": {
"token": "abcd1234cdef1234abcd1234cdef1234abcd1234cdef1234abcd1234cdef1234abcd1234cdef1234abcd1234cdef1234abcd1234cdef1234abcd1234cdef1234"
}
}
]
},
"blacklisted_key": {
"type": "object",
"title": "blacklisted_key",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "date.formats.*",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"check_issue": {
"type": "object",
"title": "check_issue",
"properties": {
"id": {
"type": "string"
},
"check_name": {
"description": "Identifier of the check that reported this issue. One of: `translation_content_length`, `translation_placeholder_usage`, `translation_glossary_usage`.",
"type": "string",
"enum": [
"translation_content_length",
"translation_placeholder_usage",
"translation_glossary_usage"
]
},
"state": {
"description": "Current state of the check issue. One of: `active`, `solved`, `dismissed`.",
"type": "string",
"enum": [
"active",
"solved",
"dismissed"
]
},
"description": {
"description": "Human-readable description of the reported issue, always in English. This message is intended for display only. Its wording may change at any time and it should not be parsed or relied upon programmatically.",
"type": "string"
},
"dismissed_at": {
"type": "string",
"format": "date-time",
"nullable": true
},
"solved_at": {
"type": "string",
"format": "date-time",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"translation": {
"$ref": "#/components/schemas/translation"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"check_name": "translation_placeholder_usage",
"state": "active",
"description": "The translation contains invalid placeholders. (missing: %{count})",
"dismissed_at": null,
"solved_at": null,
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"translation": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"content": "My translation",
"unverified": false,
"excluded": false,
"plural_suffix": "",
"key": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "home.index.headline",
"plural": false,
"use_ordinal_rules": false
},
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE"
},
"placeholders": [
"%{count}"
],
"state": "translated",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}
},
"branch_comparison": {
"type": "object",
"title": "branch_comparison",
"description": "Comparison result of a branch against its base branch. Top-level properties correspond to\nresource types. Each resource type lists changes made in the base branch (`base_changes`),\nchanges made in the feature branch (`head_changes`), and conflicting entries (`conflicts`).\n",
"properties": {
"translation_keys": {
"$ref": "#/components/schemas/branch_comparison_diff"
},
"translations": {
"$ref": "#/components/schemas/branch_comparison_diff"
},
"locales": {
"$ref": "#/components/schemas/branch_comparison_diff"
},
"tags": {
"$ref": "#/components/schemas/branch_comparison_diff"
}
},
"example": {
"translation_keys": {
"base_changes": [
{
"from": {
"name": "welcome.title",
"description": null,
"name_plural": null,
"is_plural": false,
"data_type": "string",
"max_characters_allowed": null,
"deleted_at": null,
"locations": [],
"options": {}
},
"to": {
"name": "welcome.heading",
"description": null,
"name_plural": null,
"is_plural": false,
"data_type": "string",
"max_characters_allowed": null,
"deleted_at": null,
"locations": [],
"options": {}
}
}
],
"head_changes": [],
"conflicts": {}
},
"translations": {
"base_changes": [],
"head_changes": [
{
"from": {
"state": "unverified",
"content": "Hello",
"changed_in_main_locale": false,
"excluded_from_export": false,
"plural_suffix": null
},
"to": {
"state": "translated",
"content": "Hello World",
"changed_in_main_locale": false,
"excluded_from_export": false,
"plural_suffix": null
}
}
],
"conflicts": {}
},
"locales": {
"base_changes": [],
"head_changes": [],
"conflicts": {}
},
"tags": {
"base_changes": [],
"head_changes": [],
"conflicts": {}
}
}
},
"branch_comparison_diff": {
"type": "object",
"title": "branch_comparison_diff",
"properties": {
"base_changes": {
"type": "array",
"description": "Changes made to this resource type in the base branch since the branch was created.",
"items": {
"$ref": "#/components/schemas/branch_comparison_change"
}
},
"head_changes": {
"type": "array",
"description": "Changes made to this resource type in the feature branch.",
"items": {
"$ref": "#/components/schemas/branch_comparison_change"
}
},
"conflicts": {
"type": "object",
"description": "Conflicting changes present in both branches, keyed by conflict type.\nPossible conflict type keys: `changed_in_head_changed_in_base`,\n`added_in_head_added_in_base`, `changed_in_head_deleted_in_base`,\n`deleted_in_head_changed_in_base`. Each value contains `base` and `head`\narrays of changed attribute objects.\n",
"additionalProperties": {
"type": "object",
"properties": {
"base": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
"head": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
}
}
}
}
}
},
"branch_comparison_change": {
"type": "object",
"title": "branch_comparison_change",
"description": "A single resource change. `from` holds the state before the change (null when the resource\nwas added). `to` holds the state after (null when the resource was deleted).\nFields depend on the resource type.\n",
"properties": {
"from": {
"type": "object",
"nullable": true,
"additionalProperties": true
},
"to": {
"type": "object",
"nullable": true,
"additionalProperties": true
}
}
},
"comment": {
"type": "object",
"title": "comment",
"properties": {
"id": {
"type": "string"
},
"message": {
"type": "string"
},
"has_replies": {
"type": "boolean"
},
"user": {
"$ref": "#/components/schemas/user_preview"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"mentioned_users": {
"type": "array",
"items": {
"$ref": "#/components/schemas/user_preview"
}
},
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"message": "Some message...",
"has_replies": true,
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
]
}
},
"comment_reaction": {
"type": "object",
"title": "comment_reaction",
"properties": {
"id": {
"type": "string"
},
"emoji": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"comment": {
"$ref": "#/components/schemas/comment"
},
"user": {
"$ref": "#/components/schemas/user_preview"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"emoji": "🔥",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"comment": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"message": "Some comment...",
"name": "Joe Doe"
},
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
}
}
},
"custom_metadata_property": {
"type": "object",
"title": "custom_metadata_property",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"data_type": {
"$ref": "#/components/schemas/custom_metadata_data_type"
},
"user": {
"$ref": "#/components/schemas/user_preview"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project_short"
}
},
"value_options": {
"type": "array",
"items": {
"type": "string"
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "Nuts",
"description": "A healthy snack for all ages",
"data_type": "multi_select",
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"projects": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
],
"value_options": [
"apple",
"banana",
"coconut"
]
}
},
"custom_metadata_data_type": {
"type": "string",
"description": "data type of the property",
"enum": [
"boolean",
"date",
"link",
"multi_select",
"number",
"single_select",
"string",
"text"
],
"example": "string"
},
"placeholder_style": {
"type": "string",
"description": "Placeholder style supported for detecting and highlighting variable placeholders in translation keys. This list may grow over time as new styles are added.",
"x-extensible-enum": [
"rails_i18n",
"i18next_nesting",
"gettext_python",
"cstyle",
"python_strings",
"dot_net",
"java_properties",
"laravel",
"square_brackets",
"single_percentage",
"double_percentage",
"emoji",
"dollar_style",
"nsis",
"razor",
"double_curly",
"xliffg",
"xliff",
"liquid"
],
"example": "rails_i18n"
},
"key_preview": {
"type": "object",
"title": "key_preview",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"plural": {
"type": "boolean"
},
"use_ordinal_rules": {
"type": "boolean"
}
},
"example": null
},
"affected_count": {
"type": "object",
"title": "affected_count",
"properties": {
"records_affected": {
"type": "integer"
}
},
"example": {
"records_affected": 96
}
},
"account": {
"type": "object",
"title": "account",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"company": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"company_logo_url": {
"type": "string"
}
},
"example": {
"id": "abcd1234",
"name": "Company Account",
"slug": "company_account",
"company": "My Awesome Company",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"company_logo_url": "http://assets.example.com/company_logo.png"
}
},
"account_details": {
"allOf": [
{
"$ref": "#/components/schemas/account"
},
{
"type": "object",
"title": "account_details",
"properties": {
"subscription": {
"type": "object",
"title": "subscription",
"properties": {
"is_current": {
"type": "boolean"
},
"trial_expired": {
"type": "boolean"
}
},
"example": {
"is_current": true,
"trial_expired": false
}
},
"slug": {
"type": "string"
},
"roles": {
"type": "array",
"description": "Roles the requesting user holds in the account.\n",
"items": {
"type": "string"
}
}
},
"example": {
"slug": "company-account",
"subscription": "subscription",
"roles": [
"Owner",
"Admin"
]
}
}
]
},
"member": {
"type": "object",
"title": "member",
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
},
"username": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"last_activity_at": {
"type": "string",
"format": "date-time"
},
"role": {
"type": "string"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project_locales"
}
},
"permissions": {
"type": "object"
},
"default_locale_codes": {
"type": "array",
"items": {
"type": "string"
}
},
"teams": {
"type": "array",
"items": {
"$ref": "#/components/schemas/team_short"
}
},
"spaces": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"projects_count": {
"type": "integer"
}
}
}
}
},
"example": {
"id": "acbdacbdacbdacbdacbdacbd",
"email": "foo@bar.com",
"username": "myname",
"created_at": "2020-12-07T12:56:21Z",
"last_activity_at": "2020-12-09T12:56:21Z",
"role": "Manager",
"projects": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-Gb"
}
]
}
],
"permissions": [
{
"create_upload": true,
"review_translations": true
}
],
"default_locale_codes": [
"en",
"fi"
],
"teams": [
{
"id": "04d36d845576b9d494d05e0b70fe813c",
"name": "Team 1",
"created_at": "2020-12-07T12:56:21Z",
"updated_at": "2020-12-07T12:56:21Z"
}
],
"spaces": [
{
"id": "04d36d845576b9d494d05e0b70fe813b",
"name": "Space2",
"created_at": "2020-12-07T12:56:21Z",
"updated_at": "2020-12-07T12:56:21Z",
"projects_count": 1
}
]
}
},
"member_project_detail": {
"type": "object",
"title": "member_project_detail",
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
},
"username": {
"type": "string"
},
"role": {
"type": "string"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project_locales"
}
},
"permissions": {
"type": "object"
},
"locale_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"default_locale_codes": {
"type": "array",
"items": {
"type": "string"
}
},
"spaces": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"projects_count": {
"type": "integer"
}
}
}
},
"project_roles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"project_id": {
"type": "string"
},
"role": {
"type": "string"
}
}
}
}
},
"example": {
"id": "acbdacbdacbdacbdacbdacbd",
"email": "foo@bar.com",
"username": "myname",
"role": "Manager",
"projects": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-Gb"
}
]
}
],
"permissions": [
{
"create_upload": true,
"review_translations": true
}
],
"locale_ids": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
],
"default_locale_codes": [
"en",
"fi"
],
"spaces": [
{
"id": "04d36d845576b9d494d05e0b70fe813b",
"name": "Space2",
"created_at": "2020-12-07T12:56:21Z",
"updated_at": "2020-12-07T12:56:21Z",
"projects_count": 1
}
],
"project_roles": [
{
"project_id": "abcd1234cdef1234abcd1234cdef1234",
"role": "Developer"
}
]
}
},
"invitation": {
"type": "object",
"title": "invitation",
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
},
"role": {
"type": "string"
},
"state": {
"type": "string"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project_short"
}
},
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
},
"teams": {
"type": "array",
"items": {
"$ref": "#/components/schemas/team_short"
}
},
"default_locale_codes": {
"type": "array",
"items": {
"type": "string"
}
},
"permissions": {
"type": "object"
},
"locale_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"accepted_at": {
"type": "string",
"format": "date-time"
},
"spaces": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project/properties/space"
}
},
"project_roles": {
"type": "array",
"description": "Per-project roles assigned to the invitee.\n",
"items": {
"type": "object",
"properties": {
"project_id": {
"type": "string"
},
"role": {
"type": "string"
}
}
}
}
},
"example": {
"id": "acbdacbdacbdacbdacbdacbd",
"email": "foo@bar.com",
"role": "Manager",
"state": "accepted",
"projects": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
],
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
],
"default_locale_codes": [
"en",
"de"
],
"permissions": [
{
"create_upload": true,
"review_translations": true
}
],
"locale_ids": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"accepted_at": "2015-02-28T09:52:53Z",
"spaces": [
{
"id": "04d36d845576b9d494d05e0b70fe813b",
"name": "Space2",
"created_at": "2020-12-07T12:56:21Z",
"updated_at": "2020-12-07T12:56:21Z",
"projects_count": 1
}
],
"teams": [
{
"id": "04d36d845576b9d494d05e0b70fe813c",
"name": "Team 1",
"created_at": "2020-12-07T12:56:21Z",
"updated_at": "2020-12-07T12:56:21Z"
}
],
"project_roles": [
{
"project_id": "abcd1234cdef1234abcd1234cdef1234",
"role": "Developer"
}
]
}
},
"figma_attachment": {
"type": "object",
"title": "figma_attachment",
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "626ea67628690c73ac86ac81eec2d185",
"url": "https://figma.com/file/something",
"created_at": "2017-01-28T09:52:53Z",
"updated_at": "2017-01-28T09:52:53Z"
}
},
"glossary": {
"type": "object",
"title": "glossary",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"terms_count": {
"type": "integer",
"description": "Number of terms in the glossary.",
"example": 42
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project_short"
}
},
"spaces": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project/properties/space"
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My glossary",
"terms_count": 42,
"projects": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
],
"spaces": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Project Space",
"projects_count": 1,
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"glossary_term": {
"type": "object",
"title": "glossary_term",
"properties": {
"id": {
"type": "string"
},
"term": {
"type": "string"
},
"description": {
"type": "string"
},
"translatable": {
"type": "boolean"
},
"case_sensitive": {
"type": "boolean"
},
"translations": {
"type": "array",
"items": {
"$ref": "#/components/schemas/glossary_term_translation"
}
},
"glossary": {
"type": "object",
"description": "The glossary this term belongs to.",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1233",
"term": "Save",
"description": "This term is used on the 'Save' buttons of our website",
"translatable": true,
"case_sensitive": true,
"translations": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"locale_code": "fr-FR",
"content": "Entasser",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
{
"id": "abcd1234cdef1234abcd1234cdef1235",
"locale_code": "de-DE",
"content": "Speichern",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"glossary_term_translation": {
"type": "object",
"title": "glossary_term_translation",
"properties": {
"id": {
"type": "string"
},
"locale_code": {
"type": "string"
},
"content": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"locale_code": "en-US",
"content": "Save",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"project_short": {
"type": "object",
"title": "project_short",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"main_format": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"project_locales": {
"allOf": [
{
"type": "object",
"title": "project_member_specific",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"project_role": {
"type": "string"
},
"main_format": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"project_role": "Developer",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
{
"type": "object",
"title": "project_locales",
"properties": {
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
}
},
"example": {
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
]
}
}
]
},
"project_report": {
"type": "object",
"title": "project report",
"properties": {
"locales_count": {
"type": "integer"
},
"keys_count": {
"type": "integer"
},
"translations_count": {
"type": "integer"
},
"untranslated_keys_count": {
"type": "integer"
},
"unverified_translations_count": {
"type": "integer"
},
"reviewed_translations_count": {
"type": "integer"
},
"managed_words_count": {
"type": "integer"
},
"project": {
"$ref": "#/components/schemas/project_short"
}
}
},
"locale_preview": {
"type": "object",
"title": "locale_preview",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"code": {
"type": "string"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
},
"locale": {
"type": "object",
"title": "locale",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"code": {
"type": "string"
},
"default": {
"type": "boolean"
},
"main": {
"type": "boolean"
},
"rtl": {
"type": "boolean"
},
"plural_forms": {
"type": "array",
"items": {
"type": "string"
}
},
"ordinal_plural_forms": {
"type": "array",
"items": {
"type": "string"
}
},
"source_locale": {
"$ref": "#/components/schemas/locale_preview"
},
"fallback_locale": {
"$ref": "#/components/schemas/locale_preview"
},
"language_ai_profile": {
"type": "string"
},
"unverify_new_translations": {
"type": "boolean",
"description": "Indicates that new translations for this locale are marked as unverified. Only applies to locales using the basic verification workflow. Part of the [Advanced Workflows](https://support.phrase.com/hc/en-us/articles/5784094755484) feature."
},
"unverify_updated_translations": {
"type": "boolean",
"description": "Indicates that updated translations for this locale are marked as unverified. Only applies to locales using the basic verification workflow. Part of the [Advanced Workflows](https://support.phrase.com/hc/en-us/articles/5784094755484) feature."
},
"unverify_on_source_changes": {
"type": "boolean",
"description": "Indicates that translations for this locale are marked as unverified when the source language has been changed."
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE",
"default": true,
"main": false,
"rtl": false,
"plural_forms": [
"zero",
"one",
"other"
],
"ordinal_plural_forms": [
"zero",
"other"
],
"source_locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "en",
"code": "en-GB"
},
"fallback_locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "en",
"code": "en-GB"
},
"language_ai_profile": "abcd1234abcd1234abcd1234abcd1234",
"unverify_new_translations": false,
"unverify_updated_translations": false,
"unverify_on_source_changes": false,
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"locale_download": {
"type": "object",
"title": "Async Locale Download",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"processing",
"completed",
"error"
],
"description": "The status of the download request. Possible values are `processing`, `completed`, and `error`.\n"
},
"result": {
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The URL to the download file. This URL is valid for 15 minutes.\n"
}
}
},
"params": {
"type": "object",
"description": "The parameters of the download request.\n",
"properties": {
"file_format": {
"type": "string"
},
"locale_id": {
"type": "string"
},
"tags": {
"type": "string"
},
"branch": {
"type": "string"
},
"include_empty_translations": {
"type": "boolean"
},
"include_translated_keys": {
"type": "boolean"
},
"include_unverified_translations": {
"type": "boolean"
}
}
},
"error": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"completed_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"status": "completed",
"result": {
"url": "https://example.com/locales/abcd1234cdef1234abcd1234cdef1234/download?file_format=yml"
},
"params": {
"file_format": "yml",
"locale_id": "abcd1234cdef1234abcd1234cdef1234",
"tags": "feature1,feature2",
"branch": "my-feature-branch",
"include_empty_translations": true,
"include_translated_keys": true,
"include_unverified_translations": true
},
"created_at": "2015-01-28T09:52:53Z",
"completed_at": "2015-01-28T09:52:53Z"
}
},
"locale_statistics": {
"type": "object",
"title": "locale_statistics",
"properties": {
"keys_total_count": {
"type": "integer"
},
"keys_untranslated_count": {
"type": "integer"
},
"words_total_count": {
"type": "integer"
},
"translations_completed_count": {
"type": "integer"
},
"translations_unverified_count": {
"type": "integer"
},
"unverified_words_count": {
"type": "integer"
},
"missing_words_count": {
"type": "integer"
}
},
"example": null
},
"locale_report": {
"type": "object",
"title": "locale report",
"properties": {
"keys_count": {
"type": "integer"
},
"translated_translations_percentage": {
"type": "number"
},
"unverified_translations_percentage": {
"type": "number"
},
"reviewed_translations_percentage": {
"type": "number"
},
"untranslated_keys_percentage": {
"type": "number"
},
"completed_translations_count": {
"type": "integer"
},
"untranslated_keys_count": {
"type": "integer"
},
"unverified_translations_count": {
"type": "integer"
},
"reviewed_translations_count": {
"type": "integer"
},
"source_word_count": {
"type": "integer"
},
"word_count": {
"type": "integer"
},
"word_count_unverified": {
"type": "integer"
},
"word_count_missing": {
"type": "integer"
},
"locale": {
"$ref": "#/components/schemas/locale_preview"
}
}
},
"locale_details": {
"allOf": [
{
"$ref": "#/components/schemas/locale"
},
{
"type": "object",
"title": "locale_details",
"properties": {
"statistics": {
"$ref": "#/components/schemas/locale_statistics"
}
},
"example": {
"statistics": {
"keys_total_count": 2120,
"keys_untranslated_count": 100,
"words_total_count": 3102102,
"translations_completed_count": 1920,
"translations_unverified_count": 32,
"unverified_words_count": 129,
"missing_words_count": 3920
}
}
}
]
},
"locale_user_preview": {
"type": "object",
"title": "locale_user_preview",
"properties": {
"id": {
"type": "string"
},
"username": {
"type": "string"
},
"name": {
"type": "string"
},
"role": {
"type": "string"
}
},
"example": null
},
"locale_team_preview": {
"type": "object",
"title": "locale_team_preview",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"role": {
"type": "string"
}
},
"example": null
},
"upload": {
"type": "object",
"title": "upload",
"properties": {
"id": {
"type": "string"
},
"filename": {
"type": "string"
},
"format": {
"type": "string"
},
"state": {
"type": "string",
"description": "Processing state of the upload: `initialized`, `processing`, `success`, or `error`. `error` means processing failed — for example the file could not be parsed, or a provided `file_format` didn't match the file's actual content. Poll this field until it leaves `initialized`/`processing` to get the final outcome.\n"
},
"error_message": {
"type": "string",
"nullable": true,
"description": "A user-facing message explaining why the upload failed, or `null` if the upload did not fail.\n\nThis message is intended for display only. Its wording may change at any time and it should not be parsed or relied upon programmatically.\n"
},
"tag": {
"type": "string",
"description": "Unique tag of the upload\n"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of tags that were assigned to the uploaded keys\n"
},
"url": {
"type": "string",
"description": "The URL to the upload in Phrase Strings app.\n"
},
"user": {
"type": "object",
"$ref": "#/components/schemas/user_preview"
},
"summary": {
"type": "object",
"properties": {
"locales_created": {
"type": "integer"
},
"translation_keys_created": {
"type": "integer"
},
"translation_keys_updated": {
"type": "integer"
},
"translation_keys_unmentioned": {
"description": "The number of translation keys in the project that were not mentioned in the upload.\n\nNote: this field is not calculated (and shows 0) if the upload contains more than 100,000 keys.\n",
"type": "integer"
},
"translations_created": {
"type": "integer"
},
"translations_updated": {
"type": "integer"
},
"tags_created": {
"type": "integer"
},
"translation_keys_ignored": {
"type": "integer"
},
"processed_translations": {
"type": "integer"
},
"upload_total_translations": {
"type": "integer"
}
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"filename": "example.json",
"format": "json",
"state": "success",
"error_message": null,
"tag": "tag",
"summary": {
"locales_created": 2,
"translation_keys_created": 162,
"translation_keys_updated": 10,
"translation_keys_unmentioned": 0,
"translations_created": 291,
"translations_updated": 3,
"tags_created": 2,
"translation_keys_ignored": 0
},
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "johndoe",
"name": "John Doe",
"gravatar_uid": "205e460b479e2e5b48aec07710c08d50"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"format": {
"type": "object",
"title": "format",
"required": [
"name",
"api_name",
"description",
"extension",
"default_encoding",
"importable",
"exportable",
"default_file",
"renders_default_locale",
"includes_locale_information"
],
"properties": {
"name": {
"type": "string",
"description": "Human-readable display name of the format.",
"example": "Ruby/Rails YAML"
},
"api_name": {
"type": "string",
"description": "Identifier used to reference this format in API requests, such as the file_format parameter on the uploads and downloads endpoints.",
"example": "yml"
},
"description": {
"type": "string",
"description": "Human-readable summary of the format and its typical use case.",
"example": "YAML file format for use with Ruby/Rails applications"
},
"extension": {
"type": "string",
"description": "Default file extension associated with this format.",
"example": "yml"
},
"default_encoding": {
"type": "string",
"description": "Default character encoding used when reading or writing files in this format.",
"example": "UTF-8"
},
"importable": {
"type": "boolean",
"description": "Whether locale files can be imported using this format.",
"example": true
},
"exportable": {
"type": "boolean",
"description": "Whether locale files can be exported using this format.",
"example": true
},
"default_file": {
"type": "string",
"description": "Conventional file path pattern for this format. Contains locale_name as a placeholder for the locale identifier.",
"example": "./config/locales/.yml"
},
"renders_default_locale": {
"type": "boolean",
"description": "When true, exported files contain the default locale's content for any key that has no translation in the target locale.",
"example": false
},
"includes_locale_information": {
"type": "boolean",
"description": "When true, files in this format embed locale information so Phrase can detect the locale automatically on import.",
"example": false
}
},
"example": {
"name": "Ruby/Rails YAML",
"api_name": "yml",
"description": "YAML file format for use with Ruby/Rails applications",
"extension": "yml",
"default_encoding": "UTF-8",
"importable": true,
"exportable": true,
"default_file": "./config/locales/.yml",
"renders_default_locale": false,
"includes_locale_information": false
}
},
"languages": {
"type": "object",
"title": "languages",
"description": "Map of all languages supported by Phrase Strings, keyed by their language/locale code. Each value is the human-readable display name for that code.",
"additionalProperties": {
"type": "string"
},
"example": {
"de": "German",
"en": "English",
"fr": "French"
}
},
"project": {
"type": "object",
"title": "project",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"main_format": {
"type": "string"
},
"project_image_url": {
"type": "string"
},
"media": {
"type": "string"
},
"account": {
"$ref": "#/components/schemas/account"
},
"space": {
"type": "object",
"title": "space",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"projects_count": {
"type": "integer"
}
},
"example": {
"id": "2e7574e8f2372906a03110c2a7cfe671",
"name": "My first space",
"created_at": "2020-02-25T12:17:25Z",
"updated_at": "2020-03-13T14:46:57Z",
"projects_count": 2
}
},
"point_of_contact": {
"$ref": "#/components/schemas/user_preview"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"slug": "android_project",
"main_format": "xml",
"project_image_url": "http://assets.example.com/project.png",
"account": "account",
"space": "space",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"project_details": {
"allOf": [
{
"$ref": "#/components/schemas/project"
},
{
"type": "object",
"title": "project_details",
"properties": {
"slug": {
"type": "string"
},
"shares_translation_memory": {
"type": "boolean"
},
"machine_translation_enabled": {
"type": "boolean",
"example": true
},
"zero_plural_form_enabled": {
"type": "boolean",
"example": true
},
"enable_all_data_type_translation_keys_for_translators": {
"type": "boolean",
"example": false
},
"enable_icu_message_format": {
"type": "boolean",
"example": false
},
"enable_branching": {
"type": "boolean",
"example": false
},
"protect_master_branch": {
"type": "boolean",
"example": false
},
"autotranslate_enabled": {
"type": "boolean",
"example": false
},
"autotranslate_check_new_translation_keys": {
"type": "boolean",
"example": false
},
"autotranslate_check_new_uploads": {
"type": "boolean",
"example": false
},
"autotranslate_check_new_locales": {
"type": "boolean",
"example": false
},
"autotranslate_mark_as_unverified": {
"type": "boolean",
"example": false
},
"autotranslate_use_machine_translation": {
"type": "boolean",
"example": false
},
"autotranslate_use_translation_memory": {
"type": "boolean",
"example": true
},
"autotranslate_overwrite_unverified_translations": {
"type": "boolean",
"example": false
},
"fallback_for_unverified_translations": {
"type": "boolean",
"example": false
},
"autocomplete_job_enabled": {
"type": "boolean",
"example": false
},
"default_encoding": {
"type": "string",
"example": "UTF-8"
},
"cldr_version": {
"type": "string",
"example": "legacy"
},
"translation_keys_sort_collation": {
"type": "string",
"example": "unicode_ci",
"enum": [
"general_ci",
"unicode_ci"
]
},
"job_locking_enabled": {
"type": "boolean",
"example": false
},
"placeholder_styles": {
"type": "array",
"items": {
"$ref": "#/components/schemas/placeholder_style"
},
"example": [
"rails_i18n",
"java_properties"
]
},
"branch": {
"$ref": "#/components/schemas/branch"
}
},
"example": {
"slug": "my-android-project",
"shares_translation_memory": true,
"machine_translation_enabled": true,
"zero_plural_form_enabled": true,
"enable_all_data_type_translation_keys_for_translators": false,
"enable_icu_message_format": false,
"enable_branching": false,
"protect_master_branch": false,
"autotranslate_enabled": false,
"autotranslate_check_new_translation_keys": false,
"autotranslate_check_new_uploads": false,
"autotranslate_check_new_locales": false,
"autotranslate_mark_as_unverified": false,
"autotranslate_use_machine_translation": false,
"autotranslate_use_translation_memory": true,
"autotranslate_overwrite_unverified_translations": false,
"fallback_for_unverified_translations": false,
"autocomplete_job_enabled": false,
"default_encoding": "UTF-8",
"cldr_version": "legacy",
"translation_keys_sort_collation": "unicode_ci",
"job_locking_enabled": false,
"placeholder_styles": [
"rails_i18n",
"java_properties"
]
}
}
]
},
"styleguide": {
"type": "object",
"title": "styleguide",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"title": "My Style Guide",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"styleguide_preview": {
"type": "object",
"title": "styleguide_preview",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"title": "My Style Guide"
}
},
"styleguide_details": {
"allOf": [
{
"$ref": "#/components/schemas/styleguide"
},
{
"type": "object",
"title": "styleguide_details",
"properties": {
"public_url": {
"type": "string"
},
"audience": {
"type": "string"
},
"target_audience": {
"type": "string"
},
"grammatical_person": {
"type": "string"
},
"vocabulary_type": {
"type": "string"
},
"business": {
"type": "string"
},
"company_branding": {
"type": "string"
},
"formatting": {
"type": "string"
},
"glossary_terms": {
"type": "string"
},
"grammar_consistency": {
"type": "string"
},
"literal_translation": {
"type": "string"
},
"overall_tone": {
"type": "string"
},
"samples": {
"type": "string"
}
},
"example": {
"public_url": "https://phrase.com/styleguide/my-project/26f065cf597be340",
"audience": "customer-facing",
"target_audience": "teenager",
"grammatical_person": "first_person_singular",
"vocabulary_type": "technical",
"business": "We are a travel site that helps customers find the best hotels and flights.",
"company_branding": "ACME Inc. should never be translated.",
"formatting": "Never use capital letters",
"glossary_terms": "Apartment, cabin, loft",
"grammar_consistency": "",
"literal_translation": "Neutral",
"overall_tone": "Tone should be fun and light",
"samples": "http://www.myexample.com/my/document/path/to/samples.pdf"
}
}
]
},
"tag": {
"type": "object",
"title": "tag",
"properties": {
"name": {
"type": "string"
},
"keys_count": {
"type": "integer"
},
"system_tag": {
"type": "boolean",
"description": "`true` when the tag was created automatically by the system (e.g. for jobs, uploads, or Figma attachments) rather than by a user.\n"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"name": "my-feature",
"keys_count": 8,
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"tag_with_stats": {
"allOf": [
{
"$ref": "#/components/schemas/tag"
},
{
"type": "object",
"title": "tag_with_stats",
"properties": {
"statistics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"locale": {
"$ref": "#/components/schemas/locale_preview"
},
"statistics": {
"type": "object",
"properties": {
"keys_total_count": {
"type": "integer"
},
"translations_completed_count": {
"type": "integer"
},
"translations_unverified_count": {
"type": "integer"
},
"keys_untranslated_count": {
"type": "integer"
}
}
}
}
}
}
},
"example": {
"statistics": [
{
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE"
},
"statistics": {
"keys_total_count": 12,
"translations_completed_count": 9,
"translations_unverified_count": 11,
"keys_untranslated_count": 3
}
}
]
}
}
]
},
"translation": {
"type": "object",
"title": "translation",
"properties": {
"id": {
"type": "string"
},
"content": {
"type": "string",
"x-json-tag": "json:\"content\""
},
"unverified": {
"type": "boolean"
},
"excluded": {
"type": "boolean"
},
"plural_suffix": {
"type": "string"
},
"key": {
"$ref": "#/components/schemas/key_preview"
},
"locale": {
"$ref": "#/components/schemas/locale_preview"
},
"placeholders": {
"type": "array",
"items": {
"type": "string"
}
},
"state": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"linked_translation": {
"type": "object",
"title": "translation_parent",
"properties": {
"id": {
"type": "string"
},
"content": {
"type": "string"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"content": "My parent translation"
}
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"content": "My translation",
"unverified": false,
"excluded": false,
"plural_suffix": "",
"key": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "home.index.headline",
"plural": false,
"use_ordinal_rules": false
},
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE"
},
"placeholders": [
"%{count}"
],
"state": "translated",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"translation_details": {
"allOf": [
{
"$ref": "#/components/schemas/translation"
},
{
"type": "object",
"title": "translation_details",
"properties": {
"user": {
"$ref": "#/components/schemas/user_preview"
},
"word_count": {
"type": "integer"
}
},
"example": {
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"word_count": 2
}
}
]
},
"translation_key": {
"type": "object",
"title": "translation_key",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"name_hash": {
"type": "string"
},
"plural": {
"type": "boolean"
},
"use_ordinal_rules": {
"type": "boolean"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"data_type": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "home.index.headline",
"description": "My description for this key...",
"name_hash": "1b31d2580ce324f246f66b3be00ed399",
"plural": false,
"use_ordinal_rules": false,
"tags": [
"awesome-feature",
"needs-proofreading"
],
"data_type": "string",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"translation_key_details": {
"allOf": [
{
"$ref": "#/components/schemas/translation_key"
},
{
"type": "object",
"title": "translation_key_details",
"properties": {
"name_plural": {
"type": "string"
},
"comments_count": {
"type": "integer"
},
"max_characters_allowed": {
"type": "integer"
},
"screenshot_url": {
"type": "string"
},
"unformatted": {
"type": "boolean"
},
"xml_space_preserve": {
"type": "boolean"
},
"original_file": {
"type": "string"
},
"format_value_type": {
"type": "string"
},
"creator": {
"$ref": "#/components/schemas/user_preview"
},
"custom_metadata": {
"type": "object",
"title": "custom_metadata",
"additionalProperties": {
"type": "string"
}
}
},
"example": {
"name_plural": "home.index.headlines",
"comments_count": 2,
"data_type": "string",
"max_characters_allowed": 140,
"screenshot_url": "http://assets.example.com/screenshot.png",
"unformatted": false,
"xml_space_preserve": false,
"original_file": "",
"format_value_type": "",
"creator": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"custom_metadata": {
"fruit": "Apple",
"vegetable": "Tomato"
}
}
}
]
},
"affected_resources": {
"type": "object",
"title": "affected_resources",
"properties": {
"records_affected": {
"type": "integer"
}
},
"example": {
"records_affected": 2
}
},
"translation_order": {
"type": "object",
"title": "translation_order",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"lsp": {
"type": "string"
},
"amount_in_cents": {
"type": "integer"
},
"currency": {
"type": "string"
},
"message": {
"type": "string"
},
"state": {
"type": "string"
},
"translation_type": {
"type": "string"
},
"progress_percent": {
"type": "integer"
},
"source_locale": {
"$ref": "#/components/schemas/locale_preview"
},
"target_locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
},
"tag_name": {
"type": "string",
"description": "Name of the tag whose keys are included in the order."
},
"styleguide": {
"$ref": "#/components/schemas/styleguide_preview"
},
"unverify_translations_upon_delivery": {
"type": "boolean"
},
"quality": {
"type": "boolean"
},
"priority": {
"type": "boolean"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "30AB4884",
"lsp": "gengo",
"amount_in_cents": 1152,
"currency": "usd",
"message": "Please make everything sound really nice :)",
"state": "confirmed",
"translation_type": "pro",
"progress_percent": 50,
"source_locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "en",
"code": "en-GB"
},
"target_locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE"
},
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "fr",
"code": "fr-FR"
}
],
"tag_name": "latest-upload",
"styleguide": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"title": "My Styleguide"
},
"unverify_translations_upon_delivery": true,
"quality": true,
"priority": true,
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"pre_translation": {
"type": "object",
"properties": {
"id": {
"type": "string",
"example": "abcd1234cdef1234abcd1234cdef1234"
},
"status": {
"type": "string",
"enum": [
"pending",
"running",
"success",
"error"
],
"description": "Current execution state of the pre-translation job. Jobs start as `pending` while queued, transition to `running` while executing, and settle to `success` or `error`.\n"
},
"translatable_type": {
"type": "string",
"enum": [
"locale",
"job",
"translation_key",
"upload"
],
"description": "Resource type that was pre-translated."
},
"translatable_id": {
"type": "string",
"description": "ID of the targeted resource (locale ID, job ID, key ID, or upload ID).",
"example": "abcd1234cdef1234abcd1234cdef1234"
},
"error": {
"type": "string",
"nullable": true,
"description": "Error message. `null` unless the job's status is `error`."
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
},
"translation_query": {
"type": "string",
"description": "Specify a query to find translations by content (including wildcards).\n\n*Note: Search is limited to 10000 results and may not include recently updated data (depending on the project size).*\n\nThe following qualifiers are supported in the query:\n* `id:translation_id,...` for queries on a comma-separated list of translation ids\n* `key.id:key_id,...` for queries on a comma-separated list of translation key ids\n* `key.name:key_name,...` for queries on a comma-separated list of translation key names\n* `locale.id:locale_id,...` for queries on a comma-separated list of locale ids\n* `locale.name:locale_name,...` for queries on a comma-separated list of locale names\n* `tags:XYZ` for tags on the translation\n* `unverified:{true|false}` for verification status\n* `excluded:{true|false}` for exclusion status\n* `updated_at:{>=|<=}2013-02-21T00:00:00Z` for date range queries\n* `reviewed_after:2013-02-21T00:00:00Z` for fetching translations that were reviewed after the given timestamp\n\nFind more examples [here](/en/api/strings/usage-examples).\n",
"example": "key.name:home.title,home.subtitle locale.name:de-DE tags:feature"
},
"translation_version": {
"type": "object",
"title": "translation_version",
"properties": {
"id": {
"type": "string"
},
"content": {
"type": "string"
},
"plural_suffix": {
"type": "string"
},
"key": {
"$ref": "#/components/schemas/key_preview"
},
"locale": {
"$ref": "#/components/schemas/locale_preview"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"changed_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"content": "My translation",
"plural_suffix": "",
"key": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "home.index.headline",
"plural": false
},
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "en",
"code": "en-GB"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"changed_at": "2015-01-28T09:52:53Z"
}
},
"translation_version_with_user": {
"allOf": [
{
"$ref": "#/components/schemas/translation_version"
},
{
"type": "object",
"title": "translation_version_with_user",
"properties": {
"user": {
"$ref": "#/components/schemas/user_preview"
}
},
"example": {
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
}
}
}
]
},
"user_preview": {
"type": "object",
"title": "user_preview",
"properties": {
"id": {
"type": "string"
},
"username": {
"type": "string"
},
"name": {
"type": "string"
},
"gravatar_uid": {
"type": "string"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "johndoe",
"name": "John Doe",
"gravatar_uid": "205e460b479e2e5b48aec07710c08d50"
}
},
"user": {
"type": "object",
"title": "user",
"properties": {
"id": {
"type": "string"
},
"username": {
"type": "string"
},
"name": {
"type": "string"
},
"position": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe",
"position": "Lead Developer",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"current_user": {
"type": "object",
"title": "user",
"properties": {
"id": {
"type": "string"
},
"username": {
"type": "string"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"position": {
"type": "string"
},
"language": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe",
"email": "joe@phrase.com",
"position": "Lead Developer",
"language": "de",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"webhook": {
"type": "object",
"title": "webhook",
"properties": {
"id": {
"type": "string"
},
"callback_url": {
"type": "string"
},
"description": {
"type": "string"
},
"events": {
"type": "array",
"items": {
"type": "string"
}
},
"active": {
"type": "boolean"
},
"include_branches": {
"type": "boolean"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"callback_url": "http://example.com/hooks/phraseapp-notifications",
"description": "My webhook for chat notifications",
"events": "locales:create,translations:update",
"active": true,
"include_branches": false,
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"webhook_delivery": {
"type": "object",
"title": "webhook delivery",
"properties": {
"id": {
"type": "string"
},
"webhook_id": {
"type": "string"
},
"response_status_code": {
"type": "integer"
},
"delivered_at": {
"type": "string",
"format": "date-time"
},
"duration_ms": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
}
},
"space": {
"type": "object",
"title": "space",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"projects_count": {
"type": "integer"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project"
}
}
},
"example": {
"id": "2e7574e8f2372906a03110c2a7cfe671",
"name": "My first space",
"created_at": "2020-02-25T12:17:25Z",
"updated_at": "2020-03-13T14:46:57Z",
"projects_count": 2,
"projects": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"project_image_url": "http://assets.example.com/project.png",
"account": "account",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
{
"id": "abcd11231fadef1234adacd1234cdef1234",
"name": "My IOS Project",
"main_format": "yml",
"project_image_url": "http://assets.example.com/project2.png",
"account": "account",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
]
}
},
"team": {
"type": "object",
"title": "team",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project"
}
},
"spaces": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project/properties/space"
}
},
"users": {
"type": "array",
"items": {
"$ref": "#/components/schemas/user_preview"
}
}
},
"example": {
"id": "2e7574e8f2372906a03110c2a7cfe671",
"name": "My first Team",
"created_at": "2020-02-25T12:17:25Z",
"updated_at": "2020-03-13T14:46:57Z",
"projects": [
{
"id": "abcd11231fadef1234adacd1234cdef1234",
"name": "My IOS Project",
"main_format": "yml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
],
"spaces": [
{
"id": "626ea67628690c73ac86ac81eec2d185",
"name": "IOS",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"projects_count": 3
}
],
"users": [
{
"id": "3465jhkjhk3465hjjkhl346hklk3456kl",
"username": "Max",
"name": "Max Mustermann"
}
]
}
},
"team_detail": {
"type": "object",
"title": "team",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"projects": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project"
}
},
"spaces": {
"type": "array",
"items": {
"$ref": "#/components/schemas/project/properties/space"
}
},
"users": {
"type": "array",
"items": {
"$ref": "#/components/schemas/user"
}
}
},
"example": {
"id": "2e7574e8f2372906a03110c2a7cfe671",
"name": "My first Team",
"created_at": "2020-02-25T12:17:25Z",
"updated_at": "2020-03-13T14:46:57Z",
"projects": [
{
"id": "abcd11231fadef1234adacd1234cdef1234",
"name": "My IOS Project",
"main_format": "yml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
],
"spaces": [
{
"id": "626ea67628690c73ac86ac81eec2d185",
"name": "IOS",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"projects_count": 3
}
],
"users": [
{
"id": "3465jhkjhk3465hjjkhl346hklk3456kl",
"username": "Max",
"name": "Max Mustermann",
"position": "Developer",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
]
}
},
"team_short": {
"type": "object",
"title": "team_short",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "2e7574e8f2372906a03110c2a7cfe671",
"name": "My first Team",
"created_at": "2020-02-25T12:17:25Z",
"updated_at": "2020-03-13T14:46:57Z"
}
},
"job": {
"type": "object",
"title": "job",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"briefing": {
"type": "string"
},
"due_date": {
"type": "string",
"format": "date-time",
"nullable": true
},
"state": {
"type": "string"
},
"ticket_url": {
"type": "string"
},
"project": {
"$ref": "#/components/schemas/project_short"
},
"branch": {
"type": "object",
"title": "branch_name",
"properties": {
"name": {
"type": "string"
}
},
"example": {
"name": "new-branch"
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"automation_id": {
"type": "string",
"nullable": true,
"description": "The ID of the automation that created this job, or null if the job was created manually."
},
"job_template_id": {
"type": "string",
"nullable": true,
"description": "The ID of the job template this job was created from, or null if no template was used."
},
"review_due_date": {
"type": "string",
"format": "date-time",
"nullable": true,
"description": "The review due date for this job. Returns `null` when the project does not have review workflow enabled.",
"example": "2015-03-25T11:43:52Z"
}
},
"example": {
"id": "626ea67628690c73ac86ac81eec2d185",
"name": "Translations for new Feature",
"briefing": "Some instructions for the translators",
"due_date": "2017-02-28T09:52:53Z",
"state": "completed",
"ticket_url": "https://example.atlassian.net/browse/FOO",
"created_at": "2017-01-28T09:52:53Z",
"updated_at": "2017-01-28T09:52:53Z",
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}
},
"job_annotation": {
"type": "object",
"title": "job_annotation",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"required": [
"name",
"value"
],
"example": {
"name": "priority",
"value": "high",
"created_at": "2023-10-01T12:00:00Z",
"updated_at": "2023-10-01T12:00:00Z"
}
},
"job_annotation_short": {
"type": "object",
"title": "job_annotation",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"name",
"value"
],
"example": {
"name": "priority",
"value": "high"
}
},
"job_details": {
"allOf": [
{
"$ref": "#/components/schemas/job"
},
{
"type": "object",
"title": "job_details",
"properties": {
"owner": {
"$ref": "#/components/schemas/user_preview"
},
"job_tag_name": {
"type": "string"
},
"source_translations_updated_at": {
"type": "string",
"format": "date-time"
},
"source_locale": {
"$ref": "#/components/schemas/locale_preview"
},
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
},
"keys": {
"type": "array",
"items": {
"$ref": "#/components/schemas/key_preview"
}
},
"annotations": {
"type": "array",
"items": {
"$ref": "#/components/schemas/job_annotation_short"
},
"description": "Returned only when `include_annotations=true` is supplied on the request."
},
"locked": {
"type": "boolean",
"description": "`true` if the job has been locked by the project's job-locking workflow (translations attached to the job are read-only until the job advances).\n"
},
"automation_id": {
"type": "string",
"nullable": true,
"description": "The ID of the automation that created this job, or null if the job was created manually."
},
"job_template_id": {
"type": "string",
"nullable": true,
"description": "The ID of the job template this job was created from, or null if no template was used."
},
"review_due_date": {
"type": "string",
"format": "date-time",
"nullable": true,
"description": "The review due date for this job. Returns `null` when the project does not have review workflow enabled.",
"example": "2015-03-25T11:43:52Z"
}
},
"example": {
"owner": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"job_tag_name": "Job_123",
"source_translations_updated_at": "2020-01-01T00:00:00Z",
"source_locale": {
"id": "abcd1234cdef1234abcd1234cdef1235",
"name": "de-DE",
"code": "de-DE"
},
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
],
"keys": [
{
"id": "dbcd1234cdef1234abcd1234cdef1234",
"name": "greeting.hello"
}
]
}
}
]
},
"job_preview": {
"type": "object",
"title": "job_preview",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"state": {
"type": "string"
}
},
"example": null
},
"job_locale": {
"type": "object",
"title": "job_locale",
"properties": {
"id": {
"type": "string"
},
"job": {
"$ref": "#/components/schemas/job_preview"
},
"locale": {
"$ref": "#/components/schemas/locale_preview"
},
"users": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_user_preview"
}
},
"teams": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_team_preview"
}
},
"completed": {
"type": "boolean"
},
"translation_completed_at": {
"type": "string",
"format": "date-time"
},
"review_completed_at": {
"type": "string",
"format": "date-time"
},
"annotations": {
"type": "array",
"items": {
"$ref": "#/components/schemas/job_annotation_short"
}
}
},
"example": {
"id": "626ea67628690c73ac86ac81eec2d185",
"job": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Job 1",
"state": "completed"
},
"users": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe",
"role": "translator"
}
],
"teams": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "Joe's team",
"role": "translator"
}
],
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
},
"annotations": [
{
"name": "priority",
"value": "high",
"created_at": "2023-10-01T12:00:00Z",
"updated_at": "2023-10-01T12:00:00Z"
}
],
"completed": true,
"translation_completed_at": "2017-01-28T09:52:53Z",
"review_completed_at": "2017-01-28T09:52:53Z"
}
},
"job_template": {
"type": "object",
"title": "job_template",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"briefing": {
"type": "string"
},
"project": {
"$ref": "#/components/schemas/project_short"
},
"branch": {
"$ref": "#/components/schemas/job/properties/branch"
},
"autotranslate_enabled": {
"type": "boolean",
"description": "When `true`, jobs created from this template are auto-translated on creation.\n"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "626ea67628690c73ac86ac81eec2d185",
"name": "template",
"briefing": "text",
"created_at": "2017-01-28T09:52:53Z",
"updated_at": "2017-01-28T09:52:53Z",
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}
},
"job_template_details": {
"allOf": [
{
"$ref": "#/components/schemas/job_template"
},
{
"type": "object",
"title": "job_template_details",
"properties": {
"owner": {
"$ref": "#/components/schemas/user_preview"
},
"creator": {
"$ref": "#/components/schemas/user_preview"
},
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
}
},
"example": {
"owner": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"creator": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
]
}
}
]
},
"job_template_locales": {
"type": "object",
"title": "job_template_locale",
"properties": {
"id": {
"type": "string"
},
"job_template": {
"type": "object",
"title": "job_template_preview",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"example": null
},
"locale": {
"$ref": "#/components/schemas/locale_preview"
},
"users": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_user_preview"
}
},
"teams": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_team_preview"
}
}
},
"example": {
"id": "626ea67628690c73ac86ac81eec2d185",
"job_template": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "template"
},
"users": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe",
"role": "translator"
}
],
"teams": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "Joe's team",
"role": "translator"
}
],
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
}
},
"job_comment": {
"type": "object",
"title": "job_comment",
"properties": {
"id": {
"type": "string"
},
"message": {
"type": "string"
},
"job_id": {
"type": "string"
},
"user": {
"$ref": "#/components/schemas/user_preview"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"mentioned_users": {
"type": "array",
"items": {
"$ref": "#/components/schemas/user_preview"
}
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"message": "Some message...",
"job_id": "abcd1234cdef1234abcd1234cdef1234",
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"branch": {
"type": "object",
"title": "branch",
"properties": {
"base_project_id": {
"type": "string"
},
"branch_project_id": {
"type": "string"
},
"name": {
"type": "string"
},
"base": {
"type": "string",
"nullable": true,
"description": "Name of the base branch this branch was created from. Only present for branches created with the newer branching system."
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"merged_at": {
"type": "string",
"format": "date-time"
},
"merged_by": {
"$ref": "#/components/schemas/user_preview"
},
"created_by": {
"$ref": "#/components/schemas/user_preview"
},
"state": {
"type": "string",
"enum": [
"creating_branch",
"merging_branch",
"syncing_branch",
"merged",
"success",
"branch_error",
"merge_conflict"
]
},
"child_branches": {
"type": "array",
"items": {
"type": "string"
}
}
},
"example": {
"name": "new-branch",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"merged_at": "2015-01-28T09:52:53Z",
"merged_by": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"created_by": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"state": "success",
"child_branches": [
"feature_2",
"feature_3"
]
}
},
"distribution": {
"type": "object",
"title": "distribution",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"project": {
"$ref": "#/components/schemas/project_short"
},
"platforms": {
"type": "array",
"items": {
"type": "string"
}
},
"release_count": {
"type": "integer"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"deleted_at": {
"type": "string",
"format": "date-time",
"nullable": true
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "Android Distribution",
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"platforms": [
"android"
],
"release_count": 10,
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"distribution_details": {
"allOf": [
{
"$ref": "#/components/schemas/distribution"
},
{
"type": "object",
"title": "distribution_details",
"properties": {
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
},
"releases": {
"type": "array",
"items": {
"$ref": "#/components/schemas/release_preview"
}
}
},
"example": {
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
],
"releases": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"version": 1,
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"platforms": [
"android"
],
"environments": [
"development"
],
"locale_codes": [
"de",
"en"
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
]
}
}
]
},
"release_preview": {
"type": "object",
"title": "release_preview",
"properties": {
"id": {
"type": "string"
},
"version": {
"type": "integer"
},
"app_min_version": {
"type": "string"
},
"app_max_version": {
"type": "string"
},
"description": {
"type": "string"
},
"platforms": {
"type": "array",
"items": {
"type": "string"
}
},
"environments": {
"type": "array",
"items": {
"type": "string"
}
},
"locale_codes": {
"type": "array",
"items": {
"type": "string"
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"project": {
"$ref": "#/components/schemas/project_short"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"version": 1,
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"platforms": [
"android"
],
"environments": [
"development"
],
"locale_codes": [
"de",
"en"
],
"tags": [
"android",
"feature1"
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"release": {
"type": "object",
"title": "release",
"properties": {
"id": {
"type": "string"
},
"version": {
"type": "integer"
},
"app_min_version": {
"type": "string"
},
"app_max_version": {
"type": "string"
},
"description": {
"type": "string"
},
"platforms": {
"type": "array",
"items": {
"type": "string"
}
},
"environments": {
"type": "array",
"items": {
"type": "string"
}
},
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"state": {
"type": "string"
},
"project": {
"$ref": "#/components/schemas/project_short"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"version": 1,
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"platforms": [
"android"
],
"environments": [
"development",
"production"
],
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
],
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"release_trigger": {
"type": "object",
"title": "release_trigger",
"properties": {
"id": {
"type": "string"
},
"branch": {
"type": "string"
},
"cron_schedule": {
"type": "string",
"description": "Cron schedule for the scheduler. Read more about the format of this field at https://en.wikipedia.org/wiki/Cron"
},
"time_zone": {
"type": "string",
"description": "Time zone for the scheduler"
},
"next_run_at": {
"type": "string",
"format": "date-time",
"description": "The next time a release will be created for this trigger"
},
"app_min_version": {
"type": "string"
},
"app_max_version": {
"type": "string"
},
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
],
"branch": "my-feature-branch",
"tags": [
"android",
"feature1"
],
"cron_schedule": "15 18 * * 1,3",
"time_zone": "Europe/Berlin",
"next_run_at": "2015-01-28T09:52:53Z",
"app_min_version": "1.0.0",
"app_max_version": "2.0.0",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"screenshot": {
"type": "object",
"title": "screenshot",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"screenshot_url": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"markers_count": {
"type": "integer"
}
},
"example": {
"id": "d2e056aa9e70b01121f41693e344f5ee",
"name": "A screenshot name",
"description": "A screenshot description",
"screenshot_url": "http://assets.example.com/screenshot.png",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"markers_count": 0
}
},
"screenshot_marker": {
"type": "object",
"title": "screenshot_marker",
"properties": {
"id": {
"type": "string"
},
"presentation": {
"type": "object",
"description": "Coordinates and size of the marker on the screenshot, in pixels.\n",
"properties": {
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"w": {
"type": "integer"
},
"h": {
"type": "integer"
}
}
},
"presentation_type": {
"type": "string",
"description": "Marker presentation style. The default value is `default`.\n"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"translation_key": {
"$ref": "#/components/schemas/translation_key"
}
},
"example": {
"id": "d2e056aa9e70b01121f41693e344f5ee",
"presentation": {
"x": 10,
"y": 10,
"w": 10,
"h": 10
},
"presentation_type": "default",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"translation_key": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "home.index.headline",
"description": "My description for this key...",
"name_hash": "1b31d2580ce324f246f66b3be00ed399",
"plural": false,
"tags": [
"awesome-feature",
"needs-proofreading"
],
"data_type": "string",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}
},
"variable": {
"type": "object",
"title": "variable",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"name": "MY_VARIABLE",
"value": "Hello World",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"icu": {
"type": "object",
"title": "skeleton",
"properties": {
"locale_code": {
"type": "string",
"description": "Object keys are dynamic and based on requested locale codes, see example."
}
},
"example": {
"en": "{number, plural, one {} other {}}",
"de": "{number, plural, one {} other {}}"
}
},
"notification": {
"type": "object",
"title": "notification",
"properties": {
"id": {
"type": "string"
},
"event_name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"delivered_at": {
"type": "string",
"format": "date-time"
},
"seen_at": {
"type": "string",
"format": "date-time"
},
"data": {
"type": "object"
},
"resource": {
"type": "object"
},
"locale": {
"$ref": "#/components/schemas/locale"
},
"user": {
"$ref": "#/components/schemas/user_preview"
},
"project": {
"$ref": "#/components/schemas/project"
},
"account": {
"$ref": "#/components/schemas/account"
},
"group": {
"$ref": "#/components/schemas/notification_group"
}
},
"example": {
"id": "abcd1234",
"event_name": "keys:create",
"data": "object notification data",
"resource": "object of notification resource",
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE",
"default": true,
"main": false,
"rtl": false,
"plural_forms": [
"zero",
"one",
"other"
],
"source_locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "en",
"code": "en-GB"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"project_image_url": "http://assets.example.com/project.png",
"account": {
"id": "abcd1234",
"name": "Company Account",
"slug": "company_account",
"company": "My Awesome Company",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"company_logo_url": "http://assets.example.com/company_logo.png"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"account": {
"id": "abcd1234",
"name": "Company Account",
"slug": "company_account",
"company": "My Awesome Company",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"company_logo_url": "http://assets.example.com/company_logo.png"
},
"group": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"event_name": "keys:create",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}
},
"notification_group": {
"type": "object",
"title": "notification_group",
"properties": {
"id": {
"type": "string"
},
"event_name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"event_name": "keys:create",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
},
"notification_group_detail": {
"type": "object",
"title": "notification_group_detail",
"properties": {
"id": {
"type": "string"
},
"event_name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
},
"notifications_count": {
"type": "integer"
},
"latest_notification": {
"$ref": "#/components/schemas/notification"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"event_name": "keys:create",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"latest_notification": {
"id": "abcd1234",
"event_name": "keys:create",
"data": "object notification data",
"resource": "object of notification resource",
"locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "de",
"code": "de-DE",
"default": true,
"main": false,
"rtl": false,
"plural_forms": [
"zero",
"one",
"other"
],
"source_locale": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "en",
"code": "en-GB"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"user": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"project_image_url": "http://assets.example.com/project.png",
"account": {
"id": "abcd1234",
"name": "Company Account",
"slug": "company_account",
"company": "My Awesome Company",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"company_logo_url": "http://assets.example.com/company_logo.png"
},
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"account": {
"id": "abcd1234",
"name": "Company Account",
"slug": "company_account",
"company": "My Awesome Company",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z",
"company_logo_url": "http://assets.example.com/company_logo.png"
},
"group": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"event_name": "keys:create",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}
}
},
"organization_job_template": {
"type": "object",
"title": "organization_job_template",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"briefing": {
"type": "string"
},
"autotranslate_enabled": {
"type": "boolean",
"description": "When `true`, jobs created from this template are auto-translated on creation. Maps to the `autotranslate` field on the request body.\n"
},
"source_locale_id": {
"type": "string",
"description": "Optional. ID of the source locale used by jobs created from this template. When omitted, the project's default source locale is used.\n",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "626ea67628690c73ac86ac81eec2d185",
"name": "template",
"briefing": "text",
"created_at": "2017-01-28T09:52:53Z",
"updated_at": "2017-01-28T09:52:53Z"
}
},
"organization_job_template_details": {
"allOf": [
{
"$ref": "#/components/schemas/organization_job_template"
},
{
"type": "object",
"title": "organization_job_template_details",
"properties": {
"owner": {
"$ref": "#/components/schemas/user_preview"
},
"creator": {
"$ref": "#/components/schemas/user_preview"
},
"locales": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_preview"
}
}
},
"example": {
"owner": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"creator": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"username": "joe.doe",
"name": "Joe Doe"
},
"locales": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "English",
"code": "en-GB"
}
]
}
}
]
},
"key_link": {
"type": "object",
"properties": {
"created_at": {
"type": "string",
"format": "date-time",
"description": "The timestamp when the link was created."
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "The timestamp when the link was last updated."
},
"created_by": {
"$ref": "#/components/schemas/user_preview",
"description": "The user who created the link."
},
"updated_by": {
"$ref": "#/components/schemas/user_preview",
"description": "The user who last updated the link."
},
"account": {
"$ref": "#/components/schemas/account",
"description": "The account associated with the link."
},
"parent": {
"$ref": "#/components/schemas/key_preview",
"description": "The parent translation key in the link."
},
"children": {
"type": "array",
"items": {
"$ref": "#/components/schemas/key_preview"
},
"description": "The child translation keys linked to the parent."
}
},
"example": {
"created_at": "2024-03-15T10:22:00Z",
"updated_at": "2024-03-15T10:22:00Z",
"created_by": {
"id": "usr1a2b3c4d5e6f7a8b9c",
"username": "jane.doe",
"name": "Jane Doe",
"gravatar_uid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"
},
"updated_by": {
"id": "usr1a2b3c4d5e6f7a8b9c",
"username": "jane.doe",
"name": "Jane Doe",
"gravatar_uid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"
},
"account": {
"id": "acct9z8y7x6w5v4u3t2s",
"name": "Acme Translations",
"slug": "acme-translations",
"company": "Acme Corp",
"created_at": "2023-01-10T08:00:00Z",
"updated_at": "2023-06-01T12:00:00Z",
"company_logo_url": "https://example.com/logos/acme.png"
},
"parent": {
"id": "ijkl9012mnop3456ijkl9012",
"name": "home.hero.title",
"plural": false,
"use_ordinal_rules": false,
"data_type": "string",
"tags": [
"ui",
"homepage"
]
},
"children": [
{
"id": "ijkl9012mnop3456ijkl9012mnop3456",
"name": "home.hero.title_short",
"plural": false,
"use_ordinal_rules": false,
"data_type": "string",
"tags": [
"ui",
"homepage"
]
},
{
"id": "abcd1234efgh5678abcd1234efgh5678",
"name": "home.hero.title_long",
"plural": false,
"use_ordinal_rules": false,
"data_type": "string",
"tags": [
"ui",
"homepage"
]
}
]
}
},
"repo_sync": {
"type": "object",
"title": "repo_sync",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string",
"nullable": true,
"maxLength": 100,
"description": "Optional custom display name for this repo sync. When null or blank, the sync is displayed using the associated project name.\n"
},
"project": {
"$ref": "#/components/schemas/project_short"
},
"provider": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"auto_import": {
"type": "boolean"
},
"repo_name": {
"type": "string"
},
"pr_branch": {
"type": "string",
"description": "Branch used as the source of exports/PRs. May be `null` when the sync is configured to push directly to `base_branch`.\n",
"nullable": true
},
"created_at": {
"type": "string",
"format": "date-time"
},
"last_import_at": {
"type": "string",
"format": "date-time",
"nullable": true
},
"last_export_at": {
"type": "string",
"format": "date-time",
"nullable": true
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"project": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My Android Project",
"main_format": "xml",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
},
"provider": "github",
"enabled": true,
"auto_import": true,
"repo_name": "organization/repo",
"created_at": "2015-01-28T09:52:53Z",
"last_import_at": "2015-01-28T09:52:53Z",
"last_export_at": "2015-01-28T09:52:53Z"
}
},
"repo_sync_event": {
"type": "object",
"title": "repo_sync_event",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"import",
"export"
]
},
"created_at": {
"type": "string",
"format": "date-time"
},
"status": {
"type": "string",
"enum": [
"running",
"success",
"failure"
]
},
"pull_request_url": {
"type": "string",
"description": "URL of the pull request created on export"
},
"auto_import": {
"type": "boolean",
"description": "Whether the import was triggered by the repo push event"
},
"errors": {
"description": "List of error messages, in case of failure",
"type": "array",
"items": {
"type": "string"
}
},
"uploads": {
"type": "array",
"nullable": true,
"description": "The uploads associated with this import event, or `null` if no upload batch has been created yet. Each entry identifies a single file upload by its public code (`id`) and its current public state (`state`). Present on show responses only; absent from list responses.\nPossible `state` values: `initialized`, `waiting_for_preview`, `processing`, `success`, `error`.\n",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The upload's public identifier (code).",
"example": "abcd1234"
},
"state": {
"type": "string",
"description": "The upload's current public state. Multiple internal processing states are collapsed to `processing`; both internal error states are collapsed to `error`.\n",
"enum": [
"initialized",
"waiting_for_preview",
"processing",
"success",
"error"
]
}
}
}
}
},
"example": {
"type": "import",
"created_at": "2015-01-28T09:52:53Z",
"status": "failure",
"auto_import": true,
"errors": [
"Error message 1",
"Error message 2"
]
}
},
"automation": {
"type": "object",
"title": "automation",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"inactive",
"active",
"error"
]
},
"trigger": {
"type": "string",
"enum": [
"schedule",
"upload"
]
},
"status_filters": {
"description": "translation key statuses used to filter keys that are added to jobs",
"type": "array",
"items": {
"type": "string",
"enum": [
"unverified",
"untranslated",
"ready_for_review"
]
}
},
"project_id": {
"type": "string"
},
"project_ids": {
"type": "array",
"description": "All project IDs the automation applies to. Returned alongside the singular `project_id` for backwards compatibility.",
"items": {
"type": "string"
}
},
"job_template_id": {
"type": "string"
},
"job_owner_id": {
"type": "string",
"description": "User ID of the job owner that newly created jobs are assigned to.",
"nullable": true
},
"include_only_updated_locales": {
"type": "boolean",
"description": "When `true`, the automation only acts on locales that changed since its last run."
},
"include_branches": {
"type": "boolean",
"description": "When true, the automation targets branches of the configured projects in addition to the main project. Requires the designated job owner to have permission to create jobs in branches for every configured project.\n"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"cron_schedule": {
"type": "string"
},
"time_zone": {
"type": "string"
},
"account": {
"$ref": "#/components/schemas/account"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "My First Automation",
"status": "active",
"trigger": "schedule",
"status_filters": [
"unverified",
"untranslated",
"ready_for_review"
],
"project_id": "abcd1234cdef1234abcd1234cdef1234",
"job_template_id": "abcd1234cdef1234abcd1234cdef1234",
"tags": [
"tag-1",
"tag-2"
],
"cron_schedule": "00 13 * * 1,2",
"time_zone": "GMT",
"account": "account",
"created_at": "2021-06-28T09:52:53Z",
"updated_at": "2021-06-28T09:52:53Z"
}
},
"automation_event": {
"type": "object",
"title": "automation_event",
"properties": {
"id": {
"type": "string",
"description": "Unique identifier of the automation event."
},
"automation_id": {
"type": "string",
"description": "Identifier of the automation that produced this event."
},
"state": {
"type": "string",
"enum": [
"success",
"failure",
"in_progress"
],
"description": "Outcome of the automation run."
},
"triggered_by": {
"type": "string",
"enum": [
"manual",
"schedule",
"upload",
"upload_batch"
],
"description": "What caused the automation to run."
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Timestamp when the event was created."
},
"jobs_created": {
"type": "integer",
"description": "Number of jobs created during this automation run."
},
"job_ids": {
"type": "array",
"description": "Identifiers of the jobs created during this automation run.",
"items": {
"type": "string"
}
},
"project": {
"type": "object",
"description": "The project associated with this automation event. Null when no project is set.",
"properties": {
"id": {
"type": "string",
"description": "Project identifier."
},
"name": {
"type": "string",
"description": "Project name."
}
}
},
"details": {
"type": "string",
"nullable": true,
"description": "Error message describing the failure when state is `failure`; null otherwise."
}
},
"example": {
"id": "abcd1234ef56",
"automation_id": "xyz9876abc123",
"state": "success",
"triggered_by": "schedule",
"created_at": "2021-06-28T09:52:53Z",
"jobs_created": 3,
"job_ids": [
"job1abc",
"job2def"
],
"project": {
"id": "proj1234abcd",
"name": "My Project"
},
"details": null
}
},
"machine_translation_settings": {
"type": "object",
"properties": {
"default_service": {
"type": "string",
"nullable": true,
"description": "The default machine translation engine configured for the account. Returns \"microsoft_translate\" when no service has been explicitly configured. Supported values: language_ai_translate, aita_translate, microsoft_translate, google_translate, amazon_translate, intento_translate, gpt_translate.\n",
"example": "google_translate"
},
"machine_translation_units_used": {
"type": "integer",
"description": "Number of machine translation characters consumed in the current billing period.",
"example": 12500
},
"machine_translation_units_total": {
"type": "integer",
"description": "Total machine translation character quota granted for the current billing period.",
"example": 1000000
},
"locale_provider_mappings": {
"type": "array",
"description": "Per-locale-pair provider overrides. When a matching mapping exists for a source/target locale pair, that provider takes precedence over the account default.\n",
"items": {
"$ref": "#/components/schemas/machine_translation_locale_provider_mapping"
}
}
}
},
"machine_translation_locale_provider_mapping": {
"type": "object",
"properties": {
"source_locale_code": {
"type": "string",
"description": "The locale code of the source language for this mapping.",
"example": "en"
},
"target_locale_code": {
"type": "string",
"description": "The locale code of the target language for this mapping.",
"example": "de"
},
"service": {
"type": "string",
"description": "The translation service applied when translating from source to target locale.",
"example": "google_translate"
}
}
}
},
"parameters": {
"X-PhraseApp-OTP": {
"in": "header",
"name": "X-PhraseApp-OTP",
"description": "Two-Factor-Authentication token (optional)",
"required": false,
"allowEmptyValue": false,
"schema": {
"type": "string"
}
},
"If-Modified-Since": {
"description": "Last modified condition, see [Conditional GET requests / HTTP Caching](/en/api/strings/pagination#conditional-get-requests-%2F-http-caching) (optional)",
"explode": false,
"in": "header",
"name": "If-Modified-Since",
"required": false,
"schema": {
"type": "string"
},
"style": "simple"
},
"If-None-Match": {
"description": "ETag condition, see [Conditional GET requests / HTTP Caching](/en/api/strings/pagination#conditional-get-requests-%2F-http-caching) (optional)",
"explode": false,
"in": "header",
"name": "If-None-Match",
"required": false,
"schema": {
"type": "string"
},
"style": "simple"
},
"account_id": {
"in": "path",
"name": "account_id",
"description": "Account ID",
"required": true,
"schema": {
"type": "string"
}
},
"custom_metadata_data_type": {
"in": "query",
"name": "data_type",
"description": "Data Type of Custom Metadata Property",
"required": false,
"schema": {
"$ref": "#/components/schemas/custom_metadata_data_type"
},
"example": "boolean"
},
"query_account_id": {
"in": "query",
"name": "account_id",
"description": "Filter by Account ID",
"required": false,
"schema": {
"type": "string"
}
},
"query_automation_id": {
"in": "query",
"name": "automation_id",
"description": "Filter events to a single automation by its ID.",
"required": false,
"schema": {
"type": "string"
}
},
"repo_sync_id": {
"in": "path",
"name": "repo_sync_id",
"description": "Repo Sync ID",
"required": true,
"schema": {
"type": "string"
}
},
"space_id": {
"in": "path",
"name": "space_id",
"description": "Space ID",
"required": true,
"schema": {
"type": "string"
}
},
"team_id": {
"in": "path",
"name": "team_id",
"description": "Team ID",
"required": true,
"schema": {
"type": "string"
}
},
"project_id": {
"in": "path",
"name": "project_id",
"description": "Project ID",
"required": true,
"schema": {
"type": "string"
}
},
"key_id": {
"in": "path",
"name": "key_id",
"description": "Translation Key ID",
"required": true,
"schema": {
"type": "string"
}
},
"key_id_as_id": {
"in": "path",
"name": "id",
"description": "Parent Translation Key ID",
"required": true,
"schema": {
"type": "string"
}
},
"figma_attachment_id": {
"in": "path",
"name": "figma_attachment_id",
"description": "Figma attachment ID",
"required": true,
"schema": {
"type": "string"
}
},
"job_id": {
"in": "path",
"name": "job_id",
"description": "Job ID",
"required": true,
"schema": {
"type": "string"
}
},
"job_locale_id": {
"in": "path",
"name": "job_locale_id",
"description": "Job Locale ID",
"required": true,
"schema": {
"type": "string"
}
},
"job_template_id": {
"in": "path",
"name": "job_template_id",
"description": "Job Template ID",
"required": true,
"schema": {
"type": "string"
}
},
"job_template_locale_id": {
"in": "path",
"name": "job_template_locale_id",
"description": "Job Template Locale ID",
"required": true,
"schema": {
"type": "string"
}
},
"distribution_id": {
"in": "path",
"name": "distribution_id",
"description": "Distribution ID",
"required": true,
"schema": {
"type": "string"
}
},
"screenshot_id": {
"in": "path",
"name": "screenshot_id",
"description": "Screenshot ID",
"required": true,
"schema": {
"type": "string"
}
},
"translation_id": {
"in": "path",
"name": "translation_id",
"description": "Translation ID",
"required": true,
"schema": {
"type": "string"
}
},
"glossary_id": {
"in": "path",
"name": "glossary_id",
"description": "Glossary ID",
"required": true,
"schema": {
"type": "string"
}
},
"comment_id": {
"in": "path",
"name": "comment_id",
"description": "Comment ID",
"required": true,
"schema": {
"type": "string"
}
},
"term_id": {
"in": "path",
"name": "term_id",
"description": "Term ID",
"required": true,
"schema": {
"type": "string"
}
},
"locale_codes": {
"in": "query",
"name": "locale_codes",
"description": "Locale Code",
"required": false,
"schema": {
"type": "string"
}
},
"locale_id": {
"in": "path",
"name": "locale_id",
"description": "Locale ID",
"required": true,
"schema": {
"type": "string"
}
},
"locale_id_as_id": {
"in": "path",
"name": "id",
"description": "Locale ID or locale name",
"required": true,
"schema": {
"type": "string"
}
},
"id": {
"in": "path",
"name": "id",
"description": "ID",
"required": true,
"schema": {
"type": "string"
}
},
"name": {
"in": "path",
"name": "name",
"description": "name",
"required": true,
"schema": {
"type": "string"
}
},
"tag": {
"in": "query",
"name": "tag",
"description": "tag",
"required": false,
"schema": {
"type": "string"
}
},
"branch": {
"name": "branch",
"in": "query",
"description": "Branch to use",
"schema": {
"type": "string"
},
"example": "my-feature-branch"
},
"page": {
"in": "query",
"name": "page",
"description": "Page number",
"required": false,
"allowEmptyValue": false,
"schema": {
"type": "integer"
},
"example": 1
},
"per_page": {
"in": "query",
"name": "per_page",
"description": "Limit on the number of objects to be returned, between 1 and 100. 25 by default",
"required": false,
"allowEmptyValue": false,
"schema": {
"type": "integer"
},
"example": 25
},
"webhook_id": {
"in": "path",
"name": "webhook_id",
"description": "Webhook ID",
"required": true,
"schema": {
"type": "string"
}
},
"response_status_codes": {
"in": "query",
"name": "response_status_codes",
"description": "List of Response Status Codes",
"required": false,
"schema": {
"type": "string"
}
},
"webhook_delivery_status": {
"in": "query",
"name": "status",
"description": "Filter deliveries by outcome. `success` returns deliveries with a 2xx response code or a soft error. `failed` returns all other deliveries, including exceptions and timeouts without a response code.\n",
"required": false,
"schema": {
"type": "string",
"enum": [
"success",
"failed"
]
},
"example": "failed"
},
"q": {
"description": "Specify a query to do broad search for keys by name (including wildcards).\n\nThe following qualifiers are also supported in the search term:\n\n- `ids:key_id,...` for queries on a comma-separated list of ids\n- `name:key_name` for text queries on exact key names - spaces, commas, and colons need to be escaped with double backslashes\n- `tags:tag_name` to filter for keys with certain tags\n- `translated:{true|false}` for translation status (also requires `locale_id` to be specified)\n- `updated_at:{>=|<=}2013-02-21T00:00:00Z` for date range queries\n- `unmentioned_in_upload:upload_id,...` to filter keys unmentioned within upload. When multiple upload IDs provided, matches only keys not mentioned in **all** uploads\n\n**Caution:** Query parameters with empty values will be treated as though they are not included in the request and will be ignored.\n\nFind more examples [here](/en/api/strings/usage-examples).\n",
"example": "mykey* translated:true",
"name": "q",
"in": "query",
"schema": {
"type": "string"
}
},
"translations_q": {
"in": "query",
"name": "q",
"description": "Specify a query to find translations by content (including wildcards).\n\n*Note: Search is limited to 10000 results and may not include recently updated data (depending on the project size).*\n\nThe following qualifiers are supported in the query:\n* `id:translation_id,...` for queries on a comma-separated list of translation ids\n* `key.id:key_id,...` for queries on a comma-separated list of translation key ids\n* `key.name:key_name,...` for queries on a comma-separated list of translation key names\n* `locale.id:locale_id,...` for queries on a comma-separated list of locale ids\n* `locale.name:locale_name,...` for queries on a comma-separated list of locale names\n* `tags:XYZ` for tags on the translation\n* `unverified:{true|false}` for verification status\n* `excluded:{true|false}` for exclusion status\n* `updated_at:{>=|<=}2013-02-21T00:00:00Z` for date range queries\n* `reviewed_after:2013-02-21T00:00:00Z` for fetching translations that were reviewed after the given timestamp\n\nFind more examples [here](/en/api/strings/usage-examples).\n",
"example": "PhraseApp*%20unverified:true%20excluded:true%20tags:feature,center",
"schema": {
"type": "string"
}
},
"translations_locale_q": {
"in": "query",
"name": "q",
"description": "Specify a query to find translations by content (including wildcards).\n\n*Note: Search is limited to 10000 results and may not include recently updated data (depending on the project size).*\n\nThe following qualifiers are supported in the query:\n* `id:translation_id,...` for queries on a comma-separated list of translation ids\n* `key.id:key_id,...` for queries on a comma-separated list of translation key ids\n* `key.name:key_name,...` for queries on a comma-separated list of translation key names\n* `tags:XYZ` for tags on the translation\n* `unverified:{true|false}` for verification status\n* `excluded:{true|false}` for exclusion status\n* `updated_at:{>=|<=}2013-02-21T00:00:00Z` for date range queries\n* `reviewed_after:2013-02-21T00:00:00Z` for fetching translations that were reviewed after the given timestamp\n\nFind more examples [here](/en/api/strings/usage-examples).\n",
"example": "PhraseApp*%20unverified:true%20excluded:true%20tags:feature,center",
"schema": {
"type": "string"
}
},
"translations_key_q": {
"in": "query",
"name": "q",
"description": "Specify a query to find translations by content (including wildcards).\n\n*Note: Search is limited to 10000 results and may not include recently updated data (depending on the project size).*\n\nThe following qualifiers are supported in the query:\n* `id:translation_id,...` for queries on a comma-separated list of translation ids\n* `locale.id:locale_id,...` for queries on a comma-separated list of locale ids\n* `locale.name:locale_name,...` for queries on a comma-separated list of locale names\n* `tags:XYZ` for tags on the translation\n* `unverified:{true|false}` for verification status\n* `excluded:{true|false}` for exclusion status\n* `updated_at:{>=|<=}2013-02-21T00:00:00Z` for date range queries\n* `reviewed_after:2013-02-21T00:00:00Z` for fetching translations that were reviewed after the given timestamp\n\nFind more examples [here](/en/api/strings/usage-examples).\n",
"example": "PhraseApp*%20unverified:true%20excluded:true%20tags:feature,center",
"schema": {
"type": "string"
}
},
"job_owner": {
"description": "filter by user owning job",
"example": "abcd1234cdef1234abcd1234cdef1234",
"name": "owned_by",
"in": "query",
"schema": {
"type": "string"
}
},
"job_assignee": {
"description": "filter by user assigned to job",
"example": "abcd1234cdef1234abcd1234cdef1234",
"name": "assigned_to",
"in": "query",
"schema": {
"type": "string"
}
},
"job_state": {
"description": "filter by state of job; valid states are: `draft`, `in_progress`, `completed`",
"example": "completed",
"name": "state",
"in": "query",
"schema": {
"type": "string"
}
},
"job_updated_since": {
"description": "filter by jobs updated since given date",
"example": "2013-02-21T00:00:00Z",
"name": "updated_since",
"in": "query",
"schema": {
"type": "string"
}
},
"include_annotations": {
"in": "query",
"name": "include_annotations",
"description": "Include job-locale annotations in the response",
"required": false,
"schema": {
"type": "boolean",
"default": false
}
},
"omit_translation_keys": {
"in": "query",
"name": "omit_translation_keys",
"description": "Omit translation keys in the response to reduce payload size for bigger jobs",
"required": false,
"schema": {
"type": "boolean",
"default": false
}
}
},
"responses": {
"200": {
"description": "OK",
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"201": {
"description": "The resource has been created",
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"202": {
"description": "Accepted",
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"204": {
"description": "The resource was deleted successfully.",
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"description": "Bad request. The request could not be parsed or a parameter failed validation. Verify the request body, the content type, and the parameter types, then retry.",
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"401": {
"description": "Unauthorized. Authentication failed because the access token is missing, expired, or invalid. Supply a valid access token and retry."
},
"403": {
"description": "Forbidden. The credentials are valid but not permitted for this request: the access token may lack the required scope, the user may lack permission on the resource, or the account plan may not include the feature. Use a token with the required scope on an account and user that hold the necessary permissions.",
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"404": {
"description": "Not found. The requested resource does not exist or is not visible to the authenticated user. Verify the identifiers in the request path and that the token has access to them, then retry.",
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"409": {
"description": "Conflict. The request conflicts with the current state of the resource. Reconcile the conflicting state and retry.",
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"422": {
"description": "Unprocessable entity. The request was well-formed but failed validation. The response body lists each offending field in the `errors` array, with its resource, field, and a human-readable message. Correct the listed fields and retry.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"errors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"resource": {
"type": "string"
},
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"example": {
"message": "Validation Failed",
"errors": [
{
"resource": "Resource",
"field": "name",
"message": "can't be blank"
}
]
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"429": {
"description": "Too many requests. The rate limit has been exceeded. Wait until the time indicated by the `X-Rate-Limit-Reset` response header before retrying.",
"headers": {
"X-Rate-Limit-Reason": {
"$ref": "#/components/headers/X-Rate-Limit-Reason"
},
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"503": {
"description": "Server error"
},
"504": {
"description": "Gateway timeout"
}
}
},
"paths": {
"/icu/skeleton": {
"post": {
"summary": "Build ICU skeletons",
"description": "Generates ICU (International Components for Unicode) message format skeletons for a given source string across one or more locales. An ICU skeleton strips the literal text from a pluralized or select message while preserving its structural rules — argument names, plural categories, select cases, and ordinal forms — adjusted to the pluralization rules of each requested locale.\n\nUse this endpoint to normalize translation templates before importing them into locale files, or to validate that a source string carries the plural forms required by a target language.\n\nEither `content` or `id` must be provided — supplying both or neither returns 400. When `id` is used and the referenced translation does not exist, the endpoint returns 404. When the source string is not valid ICU message format syntax, the endpoint returns 422 with an `error` field describing the parse failure.\n",
"operationId": "icu/skeleton",
"tags": [
"ICU"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
}
],
"x-code-samples": [
{
"lang": "CLI v2",
"source": "phrase icu skeleton \\\n--data '{\"content\":\"{number, plural, one {One} other {%{n}}}\",\"locale_codes\":[\"en\"],\"zero_form_enabled\": true}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "icu/skeleton/parameters",
"properties": {
"content": {
"description": "Source ICU message string to derive skeletons from. Mutually exclusive with `id`; exactly one of the two must be provided.\n",
"type": "string",
"example": "{count, plural, one {One item} other {# items}}"
},
"id": {
"description": "Code of an existing translation to source content from. Mutually exclusive with `content`; exactly one of the two must be provided. Returns 404 when the translation does not exist.\n",
"type": "string",
"example": "abcd1234abcd1234abcd1234abcd1234"
},
"locale_codes": {
"description": "Locale codes for which to generate skeletons. The pluralization rules of each locale determine which plural forms appear in the output.\n",
"type": "array",
"items": {
"type": "string",
"example": "en"
},
"example": [
"en",
"de"
]
},
"keep_content": {
"description": "When true, preserves the existing translation text in each plural form and adds any missing forms for the locale rather than stripping all literal content.",
"type": "boolean",
"example": false
},
"zero_form_enabled": {
"description": "When true, includes the zero plural form in the generated skeleton for locales that support it.",
"type": "boolean",
"example": false
},
"cldr_version": {
"description": "Pluralization rule set to use when constructing skeletons. Pass `legacy` for pre-CLDR behaviour, or a CLDR version string such as `cldr48`. Defaults to the project's configured version when omitted.",
"type": "string",
"example": "cldr48"
}
},
"oneOf": [
{
"required": [
"content"
]
},
{
"required": [
"id"
]
}
]
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/icu"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"description": "Unprocessable entity. Returned when the source string is not valid ICU message format syntax. The response body contains an `error` field with a human-readable description of the parse failure. Correct the ICU syntax in the source string and retry.",
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "icu/skeleton/error",
"properties": {
"error": {
"type": "string",
"description": "Human-readable description of the ICU message format parse failure.",
"example": "Expected \"#\" but \"x\" found."
}
}
}
}
}
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-cli-version": "2.9"
}
},
"/formats": {
"get": {
"summary": "List formats",
"description": "Returns all file formats that Phrase Strings supports. Use the api_name value\nfrom each format as the file_format parameter when uploading or downloading\nlocale files. Not every format supports both directions: check the importable\nand exportable fields before using a format in a workflow. This endpoint does\nnot require authentication and is not subject to rate limiting.\n",
"operationId": "formats/list",
"tags": [
"Formats"
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/format"
}
},
"examples": {
"default": {
"value": [
{
"name": "Ruby/Rails YAML",
"api_name": "yml",
"description": "YAML file format for use with Ruby/Rails applications",
"extension": "yml",
"default_encoding": "UTF-8",
"importable": true,
"exportable": true,
"default_file": "./config/locales/.yml",
"renders_default_locale": false,
"includes_locale_information": false
},
{
"name": "Simple JSON",
"api_name": "simple_json",
"description": "A flat key/value JSON format",
"extension": "json",
"default_encoding": "UTF-8",
"importable": true,
"exportable": true,
"default_file": "./config/locales/.json",
"renders_default_locale": false,
"includes_locale_information": false
}
]
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/formats\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase formats list \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/languages": {
"get": {
"summary": "List supported languages",
"description": "Returns all languages/locale codes that Phrase Strings recognizes, mapped to their\nhuman-readable display name. This endpoint does not require authentication.\n",
"operationId": "languages/list",
"tags": [
"Supported Languages"
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/languages"
},
"examples": {
"default": {
"value": {
"de": "German",
"en": "English",
"fr": "French"
}
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/languages\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
}
]
}
},
"/projects/{project_id}/documents": {
"get": {
"summary": "List documents",
"description": "Returns all documents in a project that the authenticated user has read access to. A Document is a source file — an HTML or DOCX file — that has been uploaded to Phrase Strings and whose content is segmented into translation keys for localization.\n\nUse this endpoint to enumerate documents before downloading, previewing, or triggering translation workflows for individual files.\n\nThe q parameter performs a prefix match on the document name (case-insensitive). For example, passing q=invoice returns documents whose names begin with \"invoice\" but not documents containing \"invoice\" elsewhere in the name.\n",
"operationId": "documents/list",
"tags": [
"Documents"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"description": "Filter documents by name prefix. Returns documents whose name starts with the given value (case-insensitive).",
"example": "invoice",
"name": "q",
"in": "query",
"required": false,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"title": "document",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"updated_at": {
"type": "string",
"format": "date-time"
}
},
"example": {
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "email.html",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-01-28T09:52:53Z"
}
}
},
"examples": {
"success": {
"summary": "Example document list response",
"value": [
{
"id": "abcd1234cdef1234abcd1234cdef1234",
"name": "email.html",
"created_at": "2015-01-28T09:52:53Z",
"updated_at": "2015-03-04T11:22:30Z"
},
{
"id": "ef012345ef012345ef012345ef012345",
"name": "invoice.docx",
"created_at": "2015-02-10T14:30:00Z",
"updated_at": "2015-03-01T08:00:00Z"
}
]
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "CLI v2",
"source": "phrase documents list \\\n--project_id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/documents/{id}": {
"delete": {
"summary": "Delete document",
"description": "Permanently deletes a document and all of its associated translation segments from the project. Use this when you want to remove a document that is no longer needed; the deletion cannot be reversed and all associated segments will be lost.\n",
"operationId": "document/delete",
"tags": [
"Documents"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"$ref": "#/components/responses/200"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "CLI v2",
"source": "phrase documents delete \\\n--project_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/report": {
"get": {
"summary": "Get Project Report",
"description": "Get report of a single project.",
"operationId": "report/show",
"tags": [
"Reports"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/project_report"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to view reports for this project."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/report?branch=my-feature-branch\" \\\n -X GET \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase report show \\\n--project_id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.13"
}
},
"/projects/{project_id}/report/locales": {
"get": {
"summary": "List Locale Reports (word count, character count, translation statistics)",
"description": "List all locale reports for the given project. Each report includes translation statistics per locale, including word count and character count fields (`source_word_count`, `word_count`, `word_count_unverified`, `word_count_missing`) as well as translation completion statistics (`keys_count`, `completed_translations_count`, `untranslated_keys_count`, `unverified_translations_count`, `reviewed_translations_count`, and their percentages). Use the `tag` parameter to scope the report to a specific job (e.g. its job tag) to get job-scoped word count statistics.",
"operationId": "report/locales/list",
"tags": [
"Reports"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"$ref": "#/components/parameters/locale_codes"
},
{
"$ref": "#/components/parameters/tag"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale_report"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to view reports for this project."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/report/locales?locale_codes[]=de&locale_codes[]=en&branch=my-feature-branch\" \\\n -X GET \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase report locales list \\\n--project_id \\\n--branch my-feature-branch \\\n--locale_codes de \\\n--access_token "
}
],
"x-cli-version": "2.13"
}
},
"/projects/{project_id}/figma_attachments": {
"get": {
"summary": "List Figma attachments",
"description": "List all Figma attachments for the given project",
"operationId": "figma_attachments/list",
"tags": [
"Figma attachments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/figma_attachment"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to list Figma attachments in this project, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/figma_attachments?branch=my-feature-branch\" \\\n -X GET \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase figma_attachments list \\\n--project_id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.13"
},
"post": {
"summary": "Create a Figma attachment",
"description": "Create a new Figma attachment.",
"operationId": "figma_attachment/create",
"tags": [
"Figma attachments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/figma_attachment"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to create Figma attachments in this project, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/figma_attachments\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -F branch=my-feature-branch \\\n -F url=https://figma.com/file/xxxxx/sample \\"
},
{
"lang": "CLI v2",
"source": "phrase figma_attachment create \\\n--project_id \\\n--data '{\"branch\":\"my-feature-branch\", \"url\":\"https://figma.com/file/xxxxx/sample\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "figma_attachment/create/parameters",
"required": [
"url"
],
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"url": {
"description": "Figma file url",
"type": "string",
"example": "https://figma.com/file/xxxxx/sample"
}
}
}
}
}
},
"x-cli-version": "2.13"
}
},
"/projects/{project_id}/figma_attachments/{id}": {
"get": {
"summary": "Get a single Figma attachment",
"description": "Get details on a single Figma attachment for a given project.",
"operationId": "figma_attachment/show",
"tags": [
"Figma attachments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/figma_attachment"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to read this Figma attachment, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/figma_attachments/:id?branch=my-feature-branch\" \\\n -X GET \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase figma_attachment show \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.13"
},
"patch": {
"summary": "Update a Figma attachment",
"description": "Update an existing Figma attachment.",
"operationId": "figma_attachment/update",
"tags": [
"Figma attachments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/figma_attachment"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to update this Figma attachment, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/figma_attachments/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -F branch=my-feature-branch \\\n -F url=https://figma.com/file/xxxxx/sample \\"
},
{
"lang": "CLI v2",
"source": "phrase figma_attachment update \\\n--project_id \\\n--id \\\n--data '{\"branch\":\"my-feature-branch\", \"url\":\"https://figma.com/file/xxxxx/sample\" }' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "figma_attachment/update/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"url": {
"description": "Figma file url",
"type": "string",
"example": "https://figma.com/file/xxxxx/sample"
}
}
}
}
}
},
"x-cli-version": "2.13"
},
"delete": {
"summary": "Delete a Figma attachment",
"description": "Delete an existing Figma attachment.",
"operationId": "figma_attachment/delete",
"tags": [
"Figma attachments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to delete this Figma attachment, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/figma_attachments/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE \\\n -d '{\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase figma_attachment delete \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.13"
}
},
"/projects/{project_id}/figma_attachments/{figma_attachment_id}/keys": {
"post": {
"summary": "Attach the Figma attachment to a key",
"description": "Attach the Figma attachment to a key",
"operationId": "figma_attachment/attach_to_key",
"tags": [
"Key's Figma attachments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/figma_attachment_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/figma_attachments/:figma_attachment_id/keys\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -F branch=my-feature-branch \\\n -F id=key_id \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase figma_attachment attach_to_key \\\n--project_id \\\n--figma_attachment_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.13"
}
},
"/projects/{project_id}/figma_attachments/{figma_attachment_id}/keys/{id}": {
"delete": {
"summary": "Detach the Figma attachment from a key",
"description": "Detach the Figma attachment from a key",
"operationId": "figma_attachment/detach_from_key",
"tags": [
"Key's Figma attachments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/figma_attachment_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/figma_attachments/:figma_attachment_id/keys/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE \\\n -F branch=my-feature-branch \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase figma_attachment detach_from_key \\\n--project_id \\\n--figma_attachment_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.13"
}
},
"/projects/{project_id}/styleguides": {
"get": {
"summary": "List style guides",
"description": "List all styleguides for the given project.",
"operationId": "styleguides/list",
"tags": [
"Style guides"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/styleguide"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to list style guides in this project."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/styleguides\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase styleguides list \\\n--project_id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a style guide",
"description": "Create a new style guide.",
"operationId": "styleguide/create",
"tags": [
"Style guides"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/styleguide_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to create style guides in this project."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/styleguides\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"title\":\"Web application style guide\",\"audience\":\"customer-facing\",\"target_audience\":\"teenager\",\"grammatical_person\":\"first_person_singular\",\"vocabulary_type\":\"technical\",\"business\":\"We are a travel site that helps customers find the best hotels and flights.\",\"company_branding\":\"ACME Inc. should never be translated.\",\"formatting\":\"Never use capital letters\",\"glossary_terms\":\"Apartment, cabin, loft\",\"grammar_consistency\":\",\"literal_translation\":\"Neutral\",\"overall_tone\":\"Tone should be fun and light\",\"samples\":\"http://www.myexample.com/my/document/path/to/samples.pdf\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase styleguides create \\\n--project_id \\\n--data '{\"title\": \"Web application style guide\", \"audience\":\"customer-facing\", \"target_audience\":\"teenager\", \"grammatical_person\":\"first_person_singular\", \"vocabulary_type\":\"technical\", \"business\": \"We are a travel site that helps customers find the best hotels and flights.\", \"company_branding\": \"ACME Inc. should never be translated.\", \"formatting\": \"Never use capital letters\", \"glossary_terms\": \"Apartment, cabin, loft\", \"grammar_consistency\":\", \"literal_translation\":\"Neutral\", \"overall_tone\": \"Tone should be fun and light\", \"samples\": \"http://www.myexample.com/my/document/path/to/samples.pdf\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "styleguide/create/parameters",
"required": [
"title"
],
"properties": {
"title": {
"description": "Style guide title",
"type": "string",
"example": "Web application style guide"
},
"audience": {
"description": "Audience description",
"type": "string",
"example": "customer-facing"
},
"target_audience": {
"description": "Target audience for the translations.",
"type": "string",
"enum": [
"not_specified",
"children",
"teenager",
"young_adults",
"adults",
"old_adults"
],
"example": "teenager"
},
"grammatical_person": {
"description": "Preferred grammatical person.",
"type": "string",
"enum": [
"not_specified",
"first_person_singular",
"second_person_singular",
"third_person_singular_masculine",
"third_person_singular_feminine",
"third_person_singular_neuter",
"first_person_plural",
"second_person_plural",
"third_person_plural"
],
"example": "first_person_singular"
},
"vocabulary_type": {
"description": "Vocabulary register the translations should use.",
"type": "string",
"enum": [
"not_specified",
"popular",
"technical",
"fictional"
],
"example": "technical"
},
"business": {
"description": "Description of the business",
"type": "string",
"example": "We are a travel site that helps customers find the best hotels and flights."
},
"company_branding": {
"description": "Company branding to remain consistent.",
"type": "string",
"example": "ACME Inc. should never be translated."
},
"formatting": {
"description": "Formatting requirements and character limitations.",
"type": "string",
"example": "Never use capital letters"
},
"glossary_terms": {
"description": "List of terms and/or phrases that need to be translated consistently.",
"type": "string",
"example": "Apartment, cabin, loft"
},
"grammar_consistency": {
"description": "Formal or informal pronouns, consistent conjugation, grammatical gender",
"type": "string",
"example": ""
},
"literal_translation": {
"description": "Can be one of: Cultural/Conversational, Literal, Neutral.",
"type": "string",
"example": "Neutral"
},
"overall_tone": {
"description": "Tone requirement descriptions",
"type": "string",
"example": "Tone should be fun and light"
},
"samples": {
"description": "Provide links to sample product pages, FAQ pages, etc. to give the translator a point of reference. You can also provide past translations. Even snippets or short paragraphs are helpful for maintaining consistency.",
"type": "string",
"example": "http://www.myexample.com/my/document/path/to/samples.pdf"
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/styleguides/{id}": {
"get": {
"summary": "Get a single style guide",
"description": "Get details on a single style guide.",
"operationId": "styleguide/show",
"tags": [
"Style guides"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/styleguide_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to read this style guide."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/styleguides/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase styleguides show \\\n--project_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a style guide",
"description": "Update an existing style guide.",
"operationId": "styleguide/update",
"tags": [
"Style guides"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/styleguide_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to update this style guide."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/styleguides/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"title\":\"Web application style guide\",\"audience\":\"customer-facing\",\"target_audience\":\"teenager\",\"grammatical_person\":\"first_person_singular\",\"vocabulary_type\":\"technical\",\"business\":\"We are a travel site that helps customers find the best hotels and flights.\",\"company_branding\":\"ACME Inc. should never be translated.\",\"formatting\":\"Never use capital letters\",\"glossary_terms\":\"Apartment, cabin, loft\",\"grammar_consistency\":\",\"literal_translation\":\"Neutral\",\"overall_tone\":\"Tone should be fun and light\",\"samples\":\"http://www.myexample.com/my/document/path/to/samples.pdf\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase styleguides update \\\n--project_id \\\n--id \\\n--data '{\"title\": \"Web application style guide\", \"audience\":\"customer-facing\", \"target_audience\":\"teenager\", \"grammatical_person\":\"first_person_singular\", \"vocabulary_type\":\"technical\", \"business\": \"We are a travel site that helps customers find the best hotels and flights.\", \"company_branding\": \"ACME Inc. should never be translated.\", \"formatting\": \"Never use capital letters\", \"glossary_terms\": \"Apartment, cabin, loft\", \"grammar_consistency\":\", \"literal_translation\":\"Neutral\", \"overall_tone\": \"Tone should be fun and light\", \"samples\": \"http://www.myexample.com/my/document/path/to/samples.pdf\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "styleguide/update/parameters",
"properties": {
"title": {
"description": "Style guide title",
"type": "string",
"example": "Web application style guide"
},
"audience": {
"description": "Audience description. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "customer-facing"
},
"target_audience": {
"description": "Target audience for the translations.",
"type": "string",
"enum": [
"not_specified",
"children",
"teenager",
"young_adults",
"adults",
"old_adults"
],
"example": "teenager"
},
"grammatical_person": {
"description": "Preferred grammatical person.",
"type": "string",
"enum": [
"not_specified",
"first_person_singular",
"second_person_singular",
"third_person_singular_masculine",
"third_person_singular_feminine",
"third_person_singular_neuter",
"first_person_plural",
"second_person_plural",
"third_person_plural"
],
"example": "first_person_singular"
},
"vocabulary_type": {
"description": "Vocabulary register the translations should use.",
"type": "string",
"enum": [
"not_specified",
"popular",
"technical",
"fictional"
],
"example": "technical"
},
"business": {
"description": "Description of the business. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "We are a travel site that helps customers find the best hotels and flights."
},
"company_branding": {
"description": "Company branding to remain consistent. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "ACME Inc. should never be translated."
},
"formatting": {
"description": "Formatting requirements and character limitations. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "Never use capital letters"
},
"glossary_terms": {
"description": "List of terms and/or phrases that need to be translated consistently. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "Apartment, cabin, loft"
},
"grammar_consistency": {
"description": "Formal or informal pronouns, consistent conjugation, grammatical gender. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": ""
},
"literal_translation": {
"description": "Can be one of: Cultural/Conversational, Literal, Neutral. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "Neutral"
},
"overall_tone": {
"description": "Tone requirement descriptions. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "Tone should be fun and light"
},
"samples": {
"description": "Provide links to sample product pages, FAQ pages, etc. to give the translator a point of reference. You can also provide past translations. Even snippets or short paragraphs are helpful for maintaining consistency. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "http://www.myexample.com/my/document/path/to/samples.pdf"
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete a style guide",
"description": "Delete an existing style guide.",
"operationId": "styleguide/delete",
"tags": [
"Style guides"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to delete this style guide."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/styleguides/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE"
},
{
"lang": "CLI v2",
"source": "phrase styleguides delete \\\n--project_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/custom_metadata/properties": {
"get": {
"summary": "List properties",
"description": "List all custom metadata properties for an account.\n\nThis endpoint is only available to accounts with advanced plans or above.\n",
"operationId": "custom_metadata_properties/list",
"tags": [
"Custom Metadata"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/custom_metadata_data_type"
},
{
"description": "id of project that the properties belong to",
"example": "abcd1234cdef1234abcd1234cdef1234",
"name": "project_id",
"in": "query",
"schema": {
"type": "string"
}
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"description": "query to find a property by name",
"example": "character_name",
"name": "q",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Sort criteria. Can be one of: name, data_type, created_at.",
"example": "updated_at",
"name": "sort",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Order direction. Can be one of: asc, desc.",
"example": "desc",
"name": "order",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/custom_metadata_property"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/custom_metadata/properties?data_type=boolean&project_id=1&page=1&per_page=10&sort=created_at&order=desc\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase custom_metadata_properties list \\\n--account_id \\\n--data_type boolean \\\n--project_id 1 \\\n--page 1 \\\n--per_page 10 \\\n--sort created_at \\\n--order desc \\\n--access_token "
}
],
"x-cli-version": "2.9"
},
"post": {
"summary": "Create a property",
"description": "Create a new custom metadata property.",
"operationId": "custom_metadata_property/create",
"tags": [
"Custom Metadata"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"required": [
"name",
"data_type"
],
"type": "object",
"title": "custom_metadata_properties/create/parameters",
"properties": {
"name": {
"description": "name of the property",
"example": "Fruit",
"type": "string"
},
"data_type": {
"$ref": "#/components/schemas/custom_metadata_data_type"
},
"project_ids": {
"description": "ids of projects that the property belongs to",
"type": "array",
"example": [
"abcd1234cdef1234abcd1234cdef1234",
"abcd1234cdef1234abcd1234cdef4321"
],
"items": {
"type": "string"
}
},
"description": {
"description": "description of property",
"example": "A healthy snack for all ages",
"type": "string"
},
"value_options": {
"description": "value options of property (only applies to single or multi select properties)",
"example": [
"Apple",
"Banana",
"Coconut"
],
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/custom_metadata_property"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/custom_metadata/properties\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"name\":\"Fruit\",\"data_type\":\"multi_select\",\"description\":\"A healthy snack for all ages\",\"project_ids\":[\"1\",\"2\",\"3\"],\"value_options\":[\"apple\",\"banana\",\"coconut\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase custom_metadata_properties create \\\n--account_id \\\n--data '{\"name\":\"Fruit\",\"data_type\":\"multi_select\",\"description\":\"A healthy snack for all ages\",\"project_ids\":[\"1\",\"2\",\"3\"],\"value_options\":[\"apple\",\"banana\",\"coconut\"]}' \\\n--access_token "
}
],
"x-cli-version": "2.9"
}
},
"/accounts/{account_id}/custom_metadata/properties/{id}": {
"get": {
"summary": "Get a single property",
"description": "Get details of a single custom property.",
"operationId": "custom_metadata_property/show",
"tags": [
"Custom Metadata"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/custom_metadata_property"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/custom_metadata/properties/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase custom_metadata_properties show \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.9"
},
"patch": {
"summary": "Update a property",
"description": "Update an existing custom metadata property.",
"operationId": "custom_metadata_property/update",
"tags": [
"Custom Metadata"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "custom_metadata_properties/update/parameters",
"properties": {
"name": {
"description": "name of the property",
"example": "Fruit",
"type": "string"
},
"project_ids": {
"description": "ids of projects that the property belongs to",
"type": "array",
"example": [
"abcd1234cdef1234abcd1234cdef1234",
"abcd1234cdef1234abcd1234cdef4321"
],
"items": {
"type": "string"
}
},
"description": {
"description": "description of property. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"example": "A healthy snack for all ages",
"type": "string",
"nullable": true
},
"value_options": {
"description": "value options of property (only applies to single or multi select properties)",
"example": [
"Apple",
"Banana",
"Coconut"
],
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/custom_metadata_property"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/custom_metadata/properties/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"name\":\"Fruit\",\"description\":\"A healthy snack for all ages\",\"project_ids\":[\"1\",\"2\",\"3\"],\"value_options\":[\"apple\",\"banana\",\"coconut\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase custom_metadata_properties update \\\n--account_id \\\n--id \\\n--data '{\"name\":\"Fruit\",\"description\":\"A healthy snack for all ages\",\"project_ids\":[\"1\",\"2\",\"3\"],\"value_options\":[\"apple\",\"banana\",\"coconut\"]}' \\\n--access_token "
}
],
"x-cli-version": "2.9"
},
"delete": {
"summary": "Destroy property",
"description": "Destroy a custom metadata property of an account.\n\nThis endpoint is only available to accounts with advanced plans or above.\n",
"operationId": "custom_metadata_properties/delete",
"tags": [
"Custom Metadata"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/custom_metadata/properties/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase custom_metadata_properties delete \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.9"
}
},
"/accounts/{account_id}/invitations": {
"get": {
"summary": "List invitations",
"description": "List invitations for an account. It will also list the accessible resources like projects and locales the invited user has access to. In case nothing is shown the default access from the role is used. Access token scope must include `team.manage`.",
"operationId": "invitations/list",
"tags": [
"Invitations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/invitation"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/invitations\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase invitations list \\\n--account_id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a new invitation",
"description": "Invite a person to an account. Developers and translators need `project_ids` and `locale_ids` assigned to access them. Access token scope must include `team.manage`.",
"operationId": "invitation/create",
"tags": [
"Invitations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/invitation"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/invitations\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"email\":\"example@mail.com\",\"role\":\"Developer\",\"project_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\",\"locale_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\",\"space_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"],\"team_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"],\"default_locale_codes\":[\"de\",\"en\"],\"permissions\":{\"create_upload\":true,\"review_translations\":true}}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase invitations create \\\n--account_id \\\n--data '{\"email\":\"example@mail.com\", \"role\":\"Developer\", \"project_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\", \"locale_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\", \"space_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"],\"team_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"], \"default_locale_codes\":[\"de\",\"en\"], \"permissions\":\"{\"create_upload\"=>true, \"review_translations\"=>true}\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "invitation/create/parameters",
"required": [
"email",
"role"
],
"properties": {
"email": {
"description": "The email of the invited user. The `email` can not be updated once created. Create a new invitation for each unique email.",
"type": "string",
"example": "example@mail.com"
},
"role": {
"description": "Invitiation role, can be any of Manager, Developer, Translator.",
"type": "string",
"example": "Developer"
},
"project_ids": {
"description": "List of project ids the invited user has access to.",
"type": "string",
"example": "abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235"
},
"locale_ids": {
"description": "List of locale ids the invited user has access to.",
"type": "string",
"example": "abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235"
},
"space_ids": {
"description": "List of spaces the user is assigned to.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
]
},
"team_ids": {
"description": "List of teams the user is assigned to.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
]
},
"default_locale_codes": {
"description": "List of default locales for the user.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"en",
"de"
]
},
"permissions": {
"description": "Additional permissions depending on invitation role. Available permissions are `create_upload` and `review_translations`",
"type": "object",
"additionalProperties": {
"type": "string"
},
"example": {
"create_upload": true,
"review_translations": true
}
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/invitations/{id}": {
"get": {
"summary": "Get a single invitation",
"description": "Get details on a single invitation. Access token scope must include `team.manage`.",
"operationId": "invitation/show",
"tags": [
"Invitations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/invitation"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/invitations/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase invitations show \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update an invitation",
"description": "Update an existing invitation (must not be accepted yet). The `email` cannot be updated. Developers and translators need `project_ids` and `locale_ids` assigned to access them. Access token scope must include `team.manage`.",
"operationId": "invitation/update",
"tags": [
"Invitations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/invitation"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/invitations/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"role\":\"Invitiation role\",\"project_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\",\"locale_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\",\"space_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"],\"team_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"],\"default_locale_codes\":[\"de\",\"en\"],\"permissions\":{\"create_upload\":true}}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase invitations update \\\n--account_id \\\n--id \\\n--data '{\"role\": \"Invitiation role\", \"project_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\", \"locale_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\", \"space_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"],\"team_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"], \"default_locale_codes\":[\"de\",\"en\"], \"permissions\":\"{\"create_upload\"=>true}\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "invitation/update/parameters",
"properties": {
"role": {
"description": "Invitiation role, can be any of Manager, Developer, Translator",
"type": "string",
"example": "Invitiation role"
},
"project_ids": {
"description": "List of project ids the invited user has access to",
"type": "string",
"example": "abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235"
},
"locale_ids": {
"description": "List of locale ids the invited user has access to",
"type": "string",
"example": "abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235"
},
"space_ids": {
"description": "List of spaces the user is assigned to.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
]
},
"team_ids": {
"description": "List of teams the user is assigned to.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
]
},
"default_locale_codes": {
"description": "List of default locales for the user.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"en",
"de"
]
},
"permissions": {
"description": "Additional permissions depending on invitation role.",
"type": "object",
"additionalProperties": {
"type": "string"
},
"example": {
"create_upload": true
}
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete an invitation",
"description": "Delete an existing invitation (must not be accepted yet). Access token scope must include `team.manage`.",
"operationId": "invitation/delete",
"tags": [
"Invitations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/invitations/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE"
},
{
"lang": "CLI v2",
"source": "phrase invitations delete \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/invitations/{id}/resend": {
"post": {
"summary": "Resend an invitation",
"description": "Resend the invitation email (must not be accepted yet). Access token scope must include `team.manage`.",
"operationId": "invitation/resend",
"tags": [
"Invitations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/invitation"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/invitations/:id/resend\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST"
},
{
"lang": "CLI v2",
"source": "phrase invitations resend \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/invitations/{id}": {
"patch": {
"summary": "Update a member's invitation access",
"description": "Update member's settings in the invitations. Access token scope must include `team.manage`.",
"operationId": "invitation/update_settings",
"tags": [
"Invitations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/invitation"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403"
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/invitations/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"project_role\":\"Developer\",\"locale_ids\":[\"fff565db236400772368235db2c6117e\",\"fff565db236400772368235db2c6117f\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase invitations update_settings \\\n--project_id \\\n--id \\\n--data '{\"project_role\":\"Developer\",\"locale_ids\":[\"fff565db236400772368235db2c6117e\",\"fff565db236400772368235db2c6117f\"]}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "invitation/update_settings/parameters",
"properties": {
"project_role": {
"description": "Member role, can be any of of Manager, Developer, Translator",
"type": "string",
"example": "Developer"
},
"locale_ids": {
"description": "List of locale ids the user has access to.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
]
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/screenshots/{id}/markers": {
"get": {
"summary": "List screenshot markers",
"description": "List all screenshot markers for the given project.",
"operationId": "screenshot_markers/list",
"tags": [
"Screenshot Markers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/screenshot_marker"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to read screenshot markers in this project, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/screenshots/:id/markers?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase screenshot_markers list \\\n--project_id \\\n--branch my-feature-branch \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/screenshots/{screenshot_id}/markers/{id}": {
"get": {
"summary": "Get a single screenshot marker",
"description": "Get details on a single screenshot marker for a given project.",
"operationId": "screenshot_marker/show",
"tags": [
"Screenshot Markers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/screenshot_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/screenshot_marker"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to read this screenshot marker, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/screenshots/:screenshot_id/markers/:id?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase screenshot_markers show \\\n--project_id \\\n--screenshot_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/screenshots/{screenshot_id}/markers": {
"post": {
"summary": "Create a screenshot marker",
"description": "Create a new screenshot marker.",
"operationId": "screenshot_marker/create",
"tags": [
"Screenshot Markers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/screenshot_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/screenshot_marker"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to create screenshot markers in this project, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/screenshots/:screenshot_id/markers\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\", \"key_id\":\"abcd1234abcd1234abcd1234abcd1234\",\"presentation\":\"{ \\\"x\\\": 100, \\\"y\\\": 100, \\\"w\\\": 100, \\\"h\\\": 100 }\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase screenshot_markers create \\\n--project_id \\\n--screenshot_id \\\n--data '{\"branch\":\"my-feature-branch\", \"key_id\":\"abcd1234abcd1234abcd1234abcd1234\", \"presentation\": \"{ \"x\": 100, \"y\": 100, \"w\": 100, \"h\": 100 }\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "screenshot_marker/create/parameters",
"required": [
"key_id"
],
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"key_id": {
"description": "Specify the Key ID which should be highlighted on the specified screenshot. The Key must belong to the project.",
"type": "string",
"example": "abcd1234abcd1234abcd1234abcd1234"
},
"presentation": {
"description": "Presentation details of the screenshot marker in JSON format.\n\nEach Screenshot Marker is represented as a rectangular shaped highlight box with the name of the specified Key attached. You can specify the marker position on the screenshot (`x`-axis and `y`-axis in pixels) from the top left corner of the screenshot and the dimensions of the marker itself (`w` and `h` in pixels).\n",
"type": "string",
"example": "{ \"x\": 100, \"y\": 100, \"w\": 100, \"h\": 100 }"
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a screenshot marker",
"description": "Update an existing screenshot marker.",
"operationId": "screenshot_marker/update",
"tags": [
"Screenshot Markers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/screenshot_id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/screenshot_marker"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to update this screenshot marker, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/screenshots/:screenshot_id/markers\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"branch\":\"my-feature-branch\", \"key_id\":\"abcd1234abcd1234abcd1234abcd1234\",\"presentation\":\"{ \\\"x\\\": 100, \\\"y\\\": 100, \\\"w\\\": 100, \\\"h\\\": 100 }\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase screenshot_markers update \\\n--project_id \\\n--screenshot_id \\\n--data '{\"branch\":\"my-feature-branch\", \"key_id\":\"abcd1234abcd1234abcd1234abcd1234\", \"presentation\": \"{ \"x\": 100, \"y\": 100, \"w\": 100, \"h\": 100 }\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "screenshot_marker/update/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"key_id": {
"description": "Specify the Key ID which should be highlighted on the specified screenshot. The Key must belong to the project.",
"type": "string",
"example": "abcd1234abcd1234abcd1234abcd1234"
},
"presentation": {
"description": "Presentation details of the screenshot marker in JSON format.\n\nEach Screenshot Marker is represented as a rectangular shaped highlight box with the name of the specified Key attached. You can specify the marker position on the screenshot (`x`-axis and `y`-axis in pixels) from the top left corner of the screenshot and the dimensions of the marker itself (`w` and `h` in pixels).\n",
"type": "string",
"example": "{ \"x\": 100, \"y\": 100, \"w\": 100, \"h\": 100 }"
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete a screenshot marker",
"description": "Delete an existing screenshot marker.",
"operationId": "screenshot_marker/delete",
"tags": [
"Screenshot Markers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/screenshot_id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to delete this screenshot marker, or when the account does not have the Attachable Screenshots feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/screenshots/:screenshot_id/markers\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE \\\n -d '{\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase screenshot_markers delete \\\n--project_id \\\n--screenshot_id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/accounts/{id}/locales": {
"get": {
"summary": "List locales used in account",
"description": "List all locales unique by locale code used across all projects within an account.",
"operationId": "account/locales",
"tags": [
"Locales"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"type": "object",
"title": "locale_preview",
"properties": {
"name": {
"type": "string"
},
"code": {
"type": "string"
}
},
"example": {
"name": "English",
"code": "en-GB"
}
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to read this account."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:id/locales\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase accounts locales \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/locales": {
"get": {
"summary": "List locales",
"description": "List all locales for the given project.",
"operationId": "locales/list",
"tags": [
"Locales"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"description": "Sort locales. Valid options are \"name_asc\", \"name_desc\", \"default_asc\", \"default_desc\".",
"example": null,
"name": "sort_by",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Specify a query to filter locales. Currently supports `name` argument, filtering only locales with names starting with the given string.",
"example": "name:en",
"name": "q",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/locale"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to list locales in this project."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/locales?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase locales list \\\n--project_id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a locale",
"description": "Create a new locale.",
"operationId": "locale/create",
"tags": [
"Locales"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/locale_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to create locales in this project, when `unverify_new_translations` / `unverify_updated_translations` is set without the Advanced Workflows feature, or when `main=true` is set without the Verification System feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/locales\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\",\"name\":\"de\",\"code\":\"de-DE\",\"source_locale_id\":\"abcd1234abcd1234abcd1234abcd1234\", \"fallback_locale_id\":\"abcd1234abcd1234abcd1234abcd1234\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase locales create \\\n--project_id \\\n--data '{\"branch\":\"my-feature-branch\", \"name\":\"de\", \"code\":\"de-DE\", \"source_locale_id\":\"abcd1234abcd1234abcd1234abcd1234\", \"fallback_locale_id\":\"abcd1234abcd1234abcd1234abcd1234\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "locale/create/parameters",
"required": [
"name",
"code"
],
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"name": {
"description": "Locale name. Must be unique per project.",
"type": "string",
"example": "de"
},
"code": {
"description": "Locale ISO code. Unlike `name`, `code` is not required to be unique per project - creating a locale whose `code` duplicates an existing locale's `code` in the same project will succeed rather than error, resulting in two locales that share the same code.",
"type": "string",
"example": "de-DE"
},
"default": {
"description": "Indicates whether locale is the default locale. If set to true, the previous default locale the project is no longer the default locale.",
"type": "boolean",
"example": null
},
"main": {
"description": "Indicates whether locale is a main locale. Main locales are part of the [Verification System](https://support.phrase.com/hc/en-us/articles/5784094755484) feature.",
"type": "boolean",
"example": null
},
"rtl": {
"description": "Indicates whether locale is a RTL (Right-to-Left) locale.",
"type": "boolean",
"example": null
},
"source_locale_id": {
"description": "Source locale. Can be the name or id of the locale. Preferred is id.",
"type": "string",
"example": "abcd1234abcd1234abcd1234abcd1234"
},
"fallback_locale_id": {
"description": "Fallback locale for empty translations. Can be a locale name or id.",
"type": "string",
"example": "abcd1234abcd1234abcd1234abcd1234"
},
"unverify_new_translations": {
"description": "Indicates that new translations for this locale should be marked as unverified. Part of the [Advanced Workflows](https://support.phrase.com/hc/en-us/articles/5784094755484) feature.",
"type": "boolean",
"example": null
},
"unverify_updated_translations": {
"description": "Indicates that updated translations for this locale should be marked as unverified. Part of the [Advanced Workflows](https://support.phrase.com/hc/en-us/articles/5784094755484) feature.",
"type": "boolean",
"example": null
},
"unverify_on_source_changes": {
"description": "Indicates that translations for this locale should be marked as unverified when the source language has been changed.",
"type": "boolean",
"example": null
},
"autotranslate": {
"description": "If set, translations for this locale will be fetched automatically, right after creation.",
"type": "boolean",
"example": null
},
"language_ai_profile": {
"description": "Identifier of the Language AI profile to use for this locale.",
"type": "string",
"example": "abcd1234abcd1234abcd1234abcd1234"
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/locales/{id}": {
"get": {
"summary": "Get a single locale",
"description": "Get details on a single locale for a given project.",
"operationId": "locale/show",
"tags": [
"Locales"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/locale_id_as_id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/locale_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to read this locale."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/locales/:id?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase locales show \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a locale",
"description": "Update an existing locale.",
"operationId": "locale/update",
"tags": [
"Locales"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/locale_id_as_id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/locale_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to update this locale, when `unverify_new_translations` / `unverify_updated_translations` is set without the Advanced Workflows feature, or when `main=true` is set without the Verification System feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/locales/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"branch\":\"my-feature-branch\",\"name\":\"de\",\"code\":\"de-DE\",\"source_locale_id\":\"abcd1234abcd1234abcd1234abcd1234\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase locales update \\\n--project_id \\\n--id \\\n--data '{\"branch\":\"my-feature-branch\", \"name\":\"de\", \"code\":\"de-DE\", \"source_locale_id\":\"abcd1234abcd1234abcd1234abcd1234\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "locale/update/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"name": {
"description": "Locale name",
"type": "string",
"example": "de"
},
"code": {
"description": "Locale ISO code",
"type": "string",
"example": "de-DE"
},
"default": {
"description": "Indicates whether locale is the default locale. If set to true, the previous default locale the project is no longer the default locale.",
"type": "boolean",
"example": null
},
"main": {
"description": "Indicates whether locale is a main locale. Main locales are part of the [Verification System](https://support.phrase.com/hc/en-us/articles/5784094755484) feature.",
"type": "boolean",
"example": null
},
"rtl": {
"description": "Indicates whether locale is a RTL (Right-to-Left) locale.",
"type": "boolean",
"example": null
},
"source_locale_id": {
"description": "Source locale. Can be the name or id of the locale. Preferred is id.",
"type": "string",
"example": "abcd1234abcd1234abcd1234abcd1234"
},
"fallback_locale_id": {
"description": "Fallback locale for empty translations. Can be a locale name or id. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "abcd1234abcd1234abcd1234abcd1234"
},
"unverify_new_translations": {
"description": "Indicates that new translations for this locale should be marked as unverified. Part of the [Advanced Workflows](https://support.phrase.com/hc/en-us/articles/5784094755484) feature.",
"type": "boolean",
"example": null
},
"unverify_updated_translations": {
"description": "Indicates that updated translations for this locale should be marked as unverified. Part of the [Advanced Workflows](https://support.phrase.com/hc/en-us/articles/5784094755484) feature.",
"type": "boolean",
"example": null
},
"unverify_on_source_changes": {
"description": "Indicates that translations for this locale should be marked as unverified when the source language has been changed.",
"type": "boolean",
"example": null
},
"autotranslate": {
"description": "If set, translations for this locale will be fetched automatically, right after creation.",
"type": "boolean",
"example": null
},
"language_ai_profile": {
"description": "Identifier of the Language AI profile to use for this locale. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "abcd1234abcd1234abcd1234abcd1234"
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete a locale",
"description": "Delete an existing locale.",
"operationId": "locale/delete",
"tags": [
"Locales"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/locale_id_as_id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to delete this locale."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/locales/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE \\\n -d '{\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase locales delete \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/locales/{id}/download": {
"get": {
"summary": "Download a locale",
"description": "Download a locale in a specific file format.",
"operationId": "locale/download",
"tags": [
"Locales"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/If-Modified-Since"
},
{
"$ref": "#/components/parameters/If-None-Match"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/locale_id_as_id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "File format name. See the [format guide](https://support.phrase.com/hc/en-us/sections/6111343326364) for all supported file formats.",
"example": "yml",
"name": "file_format",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Limit results to keys tagged with a list of comma separated tag names.",
"example": "feature1,feature2",
"name": "tags",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Limit download to tagged keys. This parameter is deprecated. Please use the \"tags\" parameter instead",
"example": "feature",
"deprecated": true,
"name": "tag",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Indicates whether keys without translations should be included in the output as well.",
"example": null,
"name": "include_empty_translations",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"description": "Indicates whether zero forms should be included when empty in pluralized keys.",
"example": null,
"name": "exclude_empty_zero_forms",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"description": "Include translated keys in the locale file. Use in combination with include_empty_translations to obtain only untranslated keys.",
"example": null,
"name": "include_translated_keys",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"description": "Indicates whether [NOTRANSLATE] tags should be kept.",
"example": null,
"name": "keep_notranslate_tags",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"description": "This option is obsolete. Projects that were created on or after Nov 29th 2019 or that did not contain emoji by then will not require this flag any longer since emoji are now supported natively.",
"example": null,
"deprecated": true,
"name": "convert_emoji",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"description": "Additional formatting and render options. See the [format guide](https://support.phrase.com/hc/en-us/sections/6111343326364) for a list of options available for each format. Specify format options like this: `...&format_options[foo]=bar`",
"example": null,
"name": "format_options",
"in": "query",
"schema": {
"type": "object",
"properties": {}
},
"style": "deepObject",
"explode": true
},
{
"description": "Enforces a specific encoding on the file contents. Valid options are \"UTF-8\", \"UTF-16\" and \"ISO-8859-1\".",
"example": null,
"name": "encoding",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Indicates whether the locale file should skip all unverified translations. This parameter is deprecated and should be replaced with `include_unverified_translations`.",
"example": null,
"deprecated": true,
"name": "skip_unverified_translations",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"description": "if set to false unverified translations are excluded",
"example": null,
"name": "include_unverified_translations",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"description": "If set to true the last reviewed version of a translation is used. This is only available if the review workflow is enabled for the project.",
"example": null,
"name": "use_last_reviewed_version",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "fallback_locale_id",
"description": "If a key has no translation in the locale being downloaded, the translation in the fallback locale will be used.\nProvide the ID of the locale that should be used as the fallback.\nRequires `include_empty_translations` to be set to `true` unless `fallback_for_unverified_translations` is also set to `true`. Mutually exclusive with `use_locale_fallback`.\n",
"in": "query",
"schema": {
"type": "string"
},
"example": null
},
{
"name": "use_locale_fallback",
"description": "If a key has no translation in the locale being downloaded, the translation in the fallback locale will be used.\nFallback locale is defined in [locale's settings](/en/api/strings/locales/update-a-locale#body-fallback-locale-id).\nRequires `include_empty_translations` to be set to `true` unless `fallback_for_unverified_translations` is also set to `true`. Mutually exclusive with `fallback_locale_id`.\n",
"in": "query",
"schema": {
"type": "boolean"
},
"example": true
},
{
"name": "fallback_for_unverified_translations",
"description": "If set to `true`, translations in a non-final state are replaced by the fallback locale's translation at export time.\nIn the simple workflow, \"non-final\" means `unverified`. In the review workflow, it additionally includes `translated` (awaiting review).\nNo stored translations are modified. Requires `fallback_locale_id` or `use_locale_fallback` to be set; a `422` validation error is returned otherwise.\n",
"in": "query",
"required": false,
"schema": {
"type": "boolean"
},
"example": null
},
{
"description": "Provides the source language of a corresponding job as the source language of the generated locale file. This parameter will be ignored unless used in combination with a `tag` parameter indicating a specific job.",
"example": null,
"name": "source_locale_id",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Download all translation keys, and remove the specified prefix where possible. Warning: this may create duplicate key names if other keys share the same name after the prefix is removed.",
"example": "prefix_",
"name": "translation_key_prefix",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Only download translation keys containing the prefix specified by `translation_key_prefix`, and remove that prefix from the generated file. Requires `translation_key_prefix` to be set.",
"example": null,
"name": "filter_by_prefix",
"in": "query",
"schema": {
"type": "boolean"
}
},
{
"name": "custom_metadata_filters",
"in": "query",
"description": "Custom metadata filters. Provide the name of the metadata field and the value to filter by. Only keys with matching metadata will be included in the download.\n",
"schema": {
"type": "object",
"properties": {}
},
"style": "deepObject",
"explode": true
},
{
"name": "locale_ids",
"description": "Locale IDs or locale names",
"in": "query",
"schema": {
"type": "array",
"items": {
"type": "string"
}
},
"example": [
"de",
"en"
]
},
{
"name": "updated_since",
"description": "Only include translations and keys that have been updated since the given date. The date must be in ISO 8601 format (e.g., `2023-01-01T00:00:00Z`).\n",
"in": "query",
"schema": {
"type": "string"
},
"example": "2023-01-01T00:00:00Z"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"*": {
"schema": {
"type": "string",
"format": "binary"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/locales/:id/download?branch=my-feature-branch&file_format=yml&tags=feature1,feature2&tag=feature&custom_metadata_filters[tone]=friendly\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase locales download \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--file_format yml \\\n--tags feature1,feature2 \\\n--tag feature \\\n--access_token "
}
],
"x-cli-version": "2.6.4"
}
},
"/projects/{project_id}/locales/{locale_id}/downloads": {
"post": {
"summary": "Initiate async download of a locale",
"description": "Prepare a locale for download in a specific file format.",
"operationId": "locale_download/create",
"tags": [
"Locale Downloads"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/If-Modified-Since"
},
{
"$ref": "#/components/parameters/If-None-Match"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/locale_id"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "locale_download/create/parameters",
"required": [
"file_format"
],
"properties": {
"file_format": {
"description": "File format name. See the [format guide](https://support.phrase.com/hc/en-us/sections/6111343326364) for all supported file formats.",
"type": "string",
"example": "yml"
},
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"tags": {
"description": "Limit results to keys tagged with a list of comma separated tag names.",
"type": "string",
"example": "feature1,feature2"
},
"include_empty_translations": {
"description": "Indicates whether keys without translations should be included in the output as well.",
"example": true,
"type": "boolean"
},
"exclude_empty_zero_forms": {
"description": "Indicates whether zero forms should be included when empty in pluralized keys.",
"example": true,
"type": "boolean"
},
"include_translated_keys": {
"description": "Include translated keys in the locale file. Use in combination with include_empty_translations to obtain only untranslated keys.",
"example": true,
"type": "boolean"
},
"keep_notranslate_tags": {
"description": "Indicates whether [NOTRANSLATE] tags should be kept.",
"type": "boolean",
"example": true
},
"format_options": {
"description": "Additional formatting and render options. See the [format guide](https://support.phrase.com/hc/en-us/sections/6111343326364)\nfor a list of options available for each format. Pass format options as a JSON object with key-value pairs corresponding\nto the option name and value. For example, to include comments in a Gettext file, pass `{\"include_comments\": true}`.\n",
"example": {
"format_options": {
"foo": "bar"
}
},
"type": "object",
"properties": {}
},
"encoding": {
"description": "Enforces a specific encoding on the file contents. Valid options are \"UTF-8\", \"UTF-16\" and \"ISO-8859-1\".",
"example": "UTF-8",
"type": "string"
},
"include_unverified_translations": {
"description": "if set to false unverified translations are excluded",
"example": true,
"type": "boolean"
},
"use_last_reviewed_version": {
"description": "If set to true the last reviewed version of a translation is used. This is only available if the review workflow is enabled for the project.",
"type": "boolean",
"example": null
},
"locale_ids": {
"description": "Locale IDs or locale names",
"type": "array",
"items": {
"type": "string"
},
"example": [
"de",
"en"
]
},
"fallback_locale_id": {
"description": "If a key has no translation in the locale being downloaded, the translation in the fallback locale will be used.\nProvide the ID of the locale that should be used as the fallback.\nRequires `include_empty_translations` to be set to `true` unless `fallback_for_unverified_translations` is also set to `true`. Mutually exclusive with `use_locale_fallback`.\n",
"type": "string",
"example": "abcd1234abcd1234abcd1234abcd1234"
},
"use_locale_fallback": {
"description": "If a key has no translation in the locale being downloaded, the translation in the fallback locale will be used.\nFallback locale is defined in [locale's settings](/en/api/strings/locales/update-a-locale#body-fallback-locale-id).\nRequires `include_empty_translations` to be set to `true` unless `fallback_for_unverified_translations` is also set to `true`. Mutually exclusive with `fallback_locale_id`.\n",
"type": "boolean",
"example": false
},
"fallback_for_unverified_translations": {
"description": "If set to `true`, translations in a non-final state are replaced by the fallback locale's translation at export time.\nIn the simple workflow, \"non-final\" means `unverified`. In the review workflow, it additionally includes `translated` (awaiting review).\nNo stored translations are modified. Requires `fallback_locale_id` or `use_locale_fallback` to be set; a `422` validation error is returned otherwise.\n",
"type": "boolean",
"example": false
},
"source_locale_id": {
"description": "Provides the source language of a corresponding job as the source language of the generated locale file. This parameter will be ignored unless used in combination with a `tag` parameter indicating a specific job.",
"example": "abcd1234abcd1234abcd1234abcd1234",
"type": "string"
},
"custom_metadata_filters": {
"description": "Custom metadata filters. Provide the name of the metadata field and the value to filter by. Only keys with matching metadata will be included in the download.\n",
"type": "object",
"properties": {}
},
"translation_key_prefix": {
"description": "Download all translation keys, and remove the specified prefix where possible. Warning: this may create duplicate key names if other keys share the same name after the prefix is removed.",
"example": "prefix_",
"type": "string"
},
"filter_by_prefix": {
"description": "Only download translation keys containing the prefix specified by `translation_key_prefix`, and remove that prefix from the generated file. Requires `translation_key_prefix` to be set.",
"type": "boolean"
},
"updated_since": {
"description": "Only include translations and keys that have been updated since the given date. The date must be in ISO 8601 format (e.g., `2023-01-01T00:00:00Z`).\n",
"type": "string",
"example": "2023-01-01T00:00:00Z"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/locale_download"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to create download jobs for this locale."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/locales/:locale_id/downloads\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\",\"file_format\":\"yml\",\"tags\":\"feature1,feature\",\"custom_metadata_filters\":{\"tone\":\"friendly\"}}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase locale_downloads create \\\n--project_id \\\n--locale_id \\\n--branch my-feature-branch \\\n--file_format yml \\\n--tags feature1,feature2 \\\n--access_token "
}
],
"x-cli-version": "2.29.0"
}
},
"/projects/{project_id}/locales/{locale_id}/downloads/{id}": {
"get": {
"summary": "Show status of an async locale download",
"description": "Show status of already started async locale download. If the download is finished, the download link will be returned.",
"operationId": "locale_download/show",
"tags": [
"Locale Downloads"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/If-Modified-Since"
},
{
"$ref": "#/components/parameters/If-None-Match"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/locale_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/locale_download"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to read this download."
},
"404": {
"$ref": "#/components/responses/404"
},
"410": {
"description": "Gone. The async download has expired (downloads are retained for a limited time after completion) and can no longer be retrieved. Issue a new download request.\n"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/locales/:locale_id/downloads/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase locale_downloads show \\\n--project_id \\\n--locale_id \\\n--id \n--access_token "
}
],
"x-cli-version": "2.29.0"
}
},
"/accounts/{account_id}/distributions": {
"get": {
"summary": "List distributions",
"description": "List all distributions for the given account.",
"operationId": "distributions/list",
"tags": [
"Distributions"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/distribution"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to list distributions in this account, or when the account does not have the Over-the-Air feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase distributions list \\\n--account_id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a distribution",
"description": "Create a new distribution.",
"operationId": "distribution/create",
"tags": [
"Distributions"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/distribution_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to create distributions in this account, or when the account does not have the Over-the-Air feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"name\":\"My Android Distribution\",\"project_id\":\"abcd1234abcd1234abcd1234\",\"platforms\":[\"android\",\"ios\"],\"locale_ids\":[\"fff565db236400772368235db2c6117e,abcd1234cdef1234abcd1234cdef1234\"],\"format_options\":\"{xml:{enclose_in_cdata:'1'}}\",\"fallback_to_non_regional_locale\":true,\"fallback_to_default_locale\":true,\"use_last_reviewed_version\":true}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase distributions create \\\n--account_id \\\n--data '{\"name\": \"My Android Distribution\", \"project_id\":\"abcd1234abcd1234abcd1234\", \"platforms\": \"android,ios\", \"locale_ids\":[\"fff565db236400772368235db2c6117e,abcd1234cdef1234abcd1234cdef1234\"], \"format_options\": \"{xml:{enclose_in_cdata:'1'}}\", \"fallback_to_non_regional_locale\":true, \"fallback_to_default_locale\":true, \"use_last_reviewed_version\":true}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "distribution/create/parameters",
"required": [
"name",
"project_id"
],
"properties": {
"name": {
"description": "Name of the distribution",
"type": "string",
"example": "My Android Distribution"
},
"project_id": {
"description": "Project id the distribution should be assigned to.",
"type": "string",
"example": "abcd1234abcd1234abcd1234"
},
"platforms": {
"description": "List of platforms the distribution should support.\nValid values are:\n* `android`\n* `ios`\n* `flutter`\n* `i18next`\n* `rails`",
"type": "array",
"items": {
"type": "string"
},
"example": [
"android",
"ios"
]
},
"locale_ids": {
"description": "List of locale ids that will be part of distribution releases",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234",
"fff565db236400772368235db2c6117e"
]
},
"format_options": {
"description": "Additional formatting and render options. Only `enclose_in_cdata` is available for platform `android`.\n",
"type": "object",
"additionalProperties": {
"type": "string"
},
"example": "{xml:{enclose_in_cdata:'1'}}"
},
"fallback_locales_enabled": {
"description": "Use fallback locale if there is no translation in the current locale.",
"type": "boolean",
"example": true
},
"fallback_to_non_regional_locale": {
"description": "Indicates whether to fallback to non regional locale when locale can not be found",
"type": "boolean",
"example": true
},
"fallback_to_default_locale": {
"description": "Indicates whether to fallback to projects default locale when locale can not be found",
"type": "boolean",
"example": true
},
"use_last_reviewed_version": {
"description": "Use last reviewed instead of latest translation in a project",
"type": "boolean",
"example": true
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/distributions/{id}": {
"get": {
"summary": "Get a single distribution",
"description": "Get details on a single distribution.",
"operationId": "distribution/show",
"tags": [
"Distributions"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/distribution_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to read this distribution, or when the account does not have the Over-the-Air feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase distributions show \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a distribution",
"description": "Update an existing distribution.",
"operationId": "distribution/update",
"tags": [
"Distributions"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/distribution_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to update this distribution, or when the account does not have the Over-the-Air feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"name\":\"My Android Distribution\",\"project_id\":\"abcd1234abcd1234abcd1234\",\"platforms\":[\"android\",\"ios\"],\"locale_ids\":[\"fff565db236400772368235db2c6117e,abcd1234cdef1234abcd1234cdef1234\"],\"format_options\":\"{xml:{enclose_in_cdata:'1'}}\",\"fallback_to_non_regional_locale\":true,\"fallback_to_default_locale\":true,\"use_last_reviewed_version\":true}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase distributions update \\\n--account_id \\\n--id \\\n--data '{\"name\": \"My Android Distribution\", \"project_id\":\"abcd1234abcd1234abcd1234\", \"platforms\": \"android,ios\", \"locale_ids\": \"fff565db236400772368235db2c6117e,abcd1234cdef1234abcd1234cdef1234\", \"format_options\": \"{xml:{enclose_in_cdata:'1'}}\", \"fallback_to_non_regional_locale\":true, \"fallback_to_default_locale\":true, \"use_last_reviewed_version\":true}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "distribution/update/parameters",
"properties": {
"name": {
"description": "Name of the distribution",
"type": "string",
"example": "My Android Distribution"
},
"project_id": {
"description": "Project id the distribution should be assigned to.",
"type": "string",
"example": "abcd1234abcd1234abcd1234"
},
"platforms": {
"description": "List of platforms the distribution should support.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"android",
"ios"
]
},
"locale_ids": {
"description": "List of locale ids that will be part of distribution releases",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234",
"fff565db236400772368235db2c6117e"
]
},
"format_options": {
"description": "Additional formatting and render options. Only `enclose_in_cdata` is available for platform `android`.\n",
"type": "object",
"additionalProperties": {
"type": "string"
},
"example": "{xml:{enclose_in_cdata:'1'}}"
},
"fallback_locales_enabled": {
"description": "Use fallback locale if there is no translation in the current locale.",
"type": "boolean",
"example": true
},
"fallback_to_non_regional_locale": {
"description": "Indicates whether to fallback to non regional locale when locale can not be found",
"type": "boolean",
"example": true
},
"fallback_to_default_locale": {
"description": "Indicates whether to fallback to projects default locale when locale can not be found",
"type": "boolean",
"example": true
},
"use_last_reviewed_version": {
"description": "Use last reviewed instead of latest translation in a project",
"type": "boolean",
"example": true
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete a distribution",
"description": "Delete an existing distribution.",
"operationId": "distribution/delete",
"tags": [
"Distributions"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to delete this distribution, or when the account does not have the Over-the-Air feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE"
},
{
"lang": "CLI v2",
"source": "phrase distributions delete \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/distributions/{distribution_id}/releases": {
"get": {
"summary": "List releases",
"description": "List all releases for the given distribution.",
"operationId": "releases/list",
"tags": [
"Releases"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/release_preview"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, or when the requesting user is not allowed to list releases in this distribution."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/releases\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase releases list \\\n--account_id \\\n--distribution_id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a release",
"description": "Create a new release.",
"operationId": "release/create",
"tags": [
"Releases"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/release"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, or when the requesting user is not allowed to create releases in this project."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/releases\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"description\":\"My first Release\",\"platforms\":[\"android\",\"ios\"],\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase releases create \\\n--account_id \\\n--distribution_id \\\n--data '{\"description\": \"My first Release\", \"platforms\": [\"android\", \"ios\"], \"branch\":\"my-feature-branch\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "release/create/parameters",
"properties": {
"description": {
"description": "Description of the release",
"type": "string",
"example": "My first Release"
},
"platforms": {
"description": "List of platforms the release should support.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"android",
"ios"
]
},
"locale_ids": {
"description": "List of locale ids that will be included in the release. If empty, distribution locales will be used",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234",
"fff565db236400772368235db2c6117e"
]
},
"tags": {
"description": "Only include tagged keys in the release. For a key to be included it must be tagged with all tags provided",
"type": "array",
"items": {
"type": "string"
},
"example": [
"android",
"feature1"
]
},
"app_min_version": {
"description": "Minimum version of the app that the release supports in semver format",
"type": "string",
"example": "2.5.0"
},
"app_max_version": {
"description": "Maximum version of the app that the release supports in semver format",
"type": "string",
"example": "3.0.0"
},
"branch": {
"description": "Branch used for release",
"type": "string",
"example": "my-feature-branch"
}
}
}
}
}
},
"x-cli-version": "2.8"
}
},
"/accounts/{account_id}/distributions/{distribution_id}/releases/{id}": {
"get": {
"summary": "Get a single release",
"description": "Get details on a single release.",
"operationId": "release/show",
"tags": [
"Releases"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/release"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, or when the requesting user is not allowed to read this release."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/releases/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase releases show \\\n--account_id \\\n--distribution_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a release",
"description": "Update an existing release.",
"operationId": "release/update",
"tags": [
"Releases"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/release"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, or when the requesting user is not allowed to update this release."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/releases/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"description\":\"My first Release\",\"platforms\":[\"android\",\"ios\"],\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase releases update \\\n--account_id \\\n--distribution_id \\\n--id \\\n--data '{\"description\": \"My first Release\", \"platforms\": \"android,ios\", \"branch\":\"my-feature-branch\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "release/update/parameters",
"properties": {
"description": {
"description": "Description of the release. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "My first Release"
},
"platforms": {
"description": "List of platforms the release should support.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"android",
"ios"
]
},
"app_min_version": {
"description": "Minimum version of the app that the release supports in semver format. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "2.5.0"
},
"app_max_version": {
"description": "Maximum version of the app that the release supports in semver format. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "3.0.0"
},
"branch": {
"description": "Branch used for release",
"type": "string",
"example": "my-feature-branch"
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete a release",
"description": "Delete an existing release.",
"operationId": "release/delete",
"tags": [
"Releases"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, or when the requesting user is not allowed to delete this release."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/releases/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE"
},
{
"lang": "CLI v2",
"source": "phrase releases delete \\\n--account_id \\\n--distribution_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/distributions/{distribution_id}/releases/{id}/publish": {
"post": {
"summary": "Publish a release",
"description": "Publish a release for production.",
"operationId": "release/publish",
"tags": [
"Releases"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/release"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, or when the requesting user is not allowed to publish this release."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/releases/:id/publish\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST"
},
{
"lang": "CLI v2",
"source": "phrase releases publish \\\n--account_id \\\n--distribution_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/distributions/{distribution_id}/release_triggers": {
"get": {
"summary": "List release triggers",
"description": "List all release triggers for the given distribution.\n\nNote: Currently only one release trigger can exist per distribution.\n",
"operationId": "release_triggers/list",
"tags": [
"Release Triggers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/release_trigger"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/release_triggers\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase release_triggers list \\\n--account_id \\\n--distribution_id \\\n--access_token "
}
],
"x-cli-version": "2.28"
},
"post": {
"summary": "Create a release trigger",
"description": "Create a new recurring release. New releases will be published automatically, based on the cron schedule provided. Currently, only one release trigger can exist per distribution.",
"operationId": "release_triggers/create",
"tags": [
"Release Triggers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "release/create/parameters",
"properties": {
"cron_schedule": {
"description": "Cron schedule for the scheduler. Read more about the format of this field at https://en.wikipedia.org/wiki/Cron",
"type": "string",
"example": "15 18 * * 1,3"
},
"time_zone": {
"description": "Time zone for the scheduler",
"type": "string",
"example": "Europe/Berlin"
},
"locale_ids": {
"description": "List of locale ids that will be included in the release.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234",
"fff565db236400772368235db2c6117e"
]
},
"tags": {
"description": "Only include tagged keys in the release. For a key to be included it must be tagged with all tags provided",
"type": "array",
"items": {
"type": "string"
},
"example": [
"android",
"feature1"
]
},
"branch": {
"description": "Branch used for release",
"type": "string",
"example": "my-feature-branch"
},
"app_min_version": {
"description": "The created releases will be available only for apps with version greater or equal to this value",
"type": "string",
"example": "1.0.0"
},
"app_max_version": {
"description": "The created releases will be available only for apps with version less or equal to this value",
"type": "string",
"example": "2.0.0"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/release_trigger"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/release_triggers\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"cron_schedule\":\"15 18 * * 1,3\",\"time_zone\":\"Europe/Berlin\",\"locale_ids\":[\"abcd1234cdef1234abcd1234cdef1234\",\"fff565db236400772368235db2c6117e\"],\"tags\":[\"android\",\"feature1\"],\"branch\":\"my-feature-branch\",\"app_min_version\":\"1.0.0\",\"app_max_version\":\"2.0.0\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase release_triggers create \\\n--account_id \\\n--distribution_id \\\n--data '{\"cron_schedule\":\"15 18 * * 1,3\",\"time_zone\":\"Europe/Berlin\",\"locale_ids\":[\"abcd1234cdef1234abcd1234cdef1234\",\"fff565db236400772368235db2c6117e\"],\"tags\":[\"android\",\"feature1\"],\"branch\":\"my-feature-branch\",\"app_min_version\":\"1.0.0\",\"app_max_version\":\"2.0.0\"}' \\\n--access_token "
}
],
"x-cli-version": "2.28"
}
},
"/accounts/{account_id}/distributions/{distribution_id}/release_triggers/{id}": {
"get": {
"summary": "Get a single release trigger",
"description": "Get details of a single release trigger.",
"operationId": "release_triggers/show",
"tags": [
"Release Triggers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/release_trigger"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/release_triggers/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase release_triggers show \\\n--account_id \\\n--distribution_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.28"
},
"patch": {
"summary": "Update a release trigger",
"description": "Update a recurring release.",
"operationId": "release_triggers/update",
"tags": [
"Release Triggers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "release/update/parameters",
"properties": {
"cron_schedule": {
"description": "Cron schedule for the scheduler. Read more about the format of this field at https://en.wikipedia.org/wiki/Cron",
"type": "string",
"example": "15 18 * * 1,3"
},
"time_zone": {
"description": "Time zone for the scheduler",
"type": "string",
"example": "Europe/Berlin"
},
"locale_ids": {
"description": "List of locale ids that will be included in the release.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234",
"fff565db236400772368235db2c6117e"
]
},
"tags": {
"description": "Only include tagged keys in the release. For a key to be included it must be tagged with all tags provided",
"type": "array",
"items": {
"type": "string"
},
"example": [
"android",
"feature1"
]
},
"branch": {
"description": "Branch used for release",
"type": "string",
"example": "my-feature-branch"
},
"app_min_version": {
"description": "The created releases will be available only for apps with version greater or equal to this value",
"type": "string",
"example": "1.0.0"
},
"app_max_version": {
"description": "The created releases will be available only for apps with version less or equal to this value",
"type": "string",
"example": "2.0.0"
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/release_trigger"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/release_triggers/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"cron_schedule\":\"15 18 * * 1,3\",\"time_zone\":\"Europe/Berlin\",\"locale_ids\":[\"abcd1234cdef1234abcd1234cdef1234\",\"fff565db236400772368235db2c6117e\"],\"tags\":[\"android\",\"feature1\"],\"branch\":\"my-feature-branch\",\"app_min_version\":\"1.0.0\",\"app_max_version\":\"2.0.0\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase release_triggers update \\\n--account_id \\\n--distribution_id \\\n--id \\\n--data '{\"cron_schedule\":\"15 18 * * 1,3\",\"time_zone\":\"Europe/Berlin\",\"locale_ids\":[\"abcd1234cdef1234abcd1234cdef1234\",\"fff565db236400772368235db2c6117e\"],\"tags\":[\"android\",\"feature1\"],\"branch\":\"my-feature-branch\",\"app_min_version\":\"1.0.0\",\"app_max_version\":\"2.0.0\"}' \\\n--access_token "
}
],
"x-cli-version": "2.28"
},
"delete": {
"summary": "Delete a single release trigger",
"description": "Delete a single release trigger.",
"operationId": "release_triggers/destroy",
"tags": [
"Release Triggers"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/distribution_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/distributions/:distribution_id/release_triggers/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE"
},
{
"lang": "CLI v2",
"source": "phrase release_triggers delete \\\n--account_id \\\n--distribution_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.28"
}
},
"/projects/{project_id}/jobs": {
"get": {
"summary": "List jobs",
"description": "List all jobs for the given project.",
"operationId": "jobs/list",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"$ref": "#/components/parameters/branch"
},
{
"$ref": "#/components/parameters/job_owner"
},
{
"$ref": "#/components/parameters/job_assignee"
},
{
"$ref": "#/components/parameters/job_state"
},
{
"description": "Filter by multiple job states at once. Accepted values are the same as `state`. When supplied, `state` is ignored. Rejected with `400 Bad Request` if any value is unknown.",
"name": "states",
"in": "query",
"example": [
"in_progress",
"completed"
],
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"description": "Filter to jobs that include the translation key identified by this code (matches via the job's tags).",
"name": "key_id",
"in": "query",
"example": "abcd1234cdef1234abcd1234cdef1234",
"schema": {
"type": "string"
}
},
{
"$ref": "#/components/parameters/job_updated_since"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/job"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to list jobs in this project."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs?branch=my-feature-branch&owned_by=abcd1234cdef1234abcd1234cdef1234&assigned_to=abcd1234cdef1234abcd1234cdef1234&state=completed\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase jobs list \\\n--project_id \\\n--branch my-feature-branch \\\n--owned_by abcd1234cdef1234abcd1234cdef1234 \\\n--assigned_to abcd1234cdef1234abcd1234cdef1234 \\\n--state completed \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a job",
"description": "Create a new job.",
"operationId": "job/create",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to create jobs in this project."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\",\"name\":\"de\",\"briefing\":\"de-DE\",\"due_date\":\"2017-08-15\",\"ticket_url\":\"https://example.atlassian.net/browse/FOO\",\"tags\":[\"myUploadTag\"],\"translation_key_ids\":[\"abcd1234cdef1234abcd1234cdef1234\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs create \\\n--project_id \\\n--data '{\"branch\":\"my-feature-branch\", \"name\":\"de\", \"briefing\":\"de-DE\", \"due_date\":\"2017-08-15\", \"ticket_url\":\"https://example.atlassian.net/browse/FOO\", \"tags\": [\"myUploadTag\"], \"translation_key_ids\": [\"abcd1234cdef1234abcd1234cdef1234\"]}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job/create/parameters",
"required": [
"name"
],
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"name": {
"description": "Job name",
"type": "string",
"example": "de"
},
"source_locale_id": {
"description": "The API id of the source language",
"type": "string",
"example": "abcd1234cdef1234abcd1234cdef1234"
},
"briefing": {
"description": "Briefing for the translators",
"type": "string",
"example": "de-DE"
},
"due_date": {
"description": "Date the job should be finished",
"type": "string",
"format": "date-time",
"example": "2017-08-15",
"nullable": true
},
"review_due_date": {
"description": "Date the review of the job should be finished. Must not be before `due_date`.",
"type": "string",
"format": "date-time",
"example": "2017-08-16"
},
"ticket_url": {
"description": "URL to a ticket for this job (e.g. Jira, Trello)",
"type": "string",
"example": "https://example.atlassian.net/browse/FOO"
},
"tags": {
"description": "tags of keys that should be included within the job.\n\n*Note: a tag matches every key currently carrying that tag, not just the ones you just tagged. For example, if hundreds of pre-existing keys already share the tag `myUploadTag`, adding it here pulls in every one of them, not only the key you just tagged. Use `translation_key_ids` to scope the job to specific keys instead.*\n",
"type": "array",
"items": {
"type": "string"
},
"example": [
"myUploadTag"
]
},
"translation_key_ids": {
"description": "ids of keys that should be included within the job",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234"
]
},
"target_locale_ids": {
"description": "List of target locales for the job. Mutually exclusive with `job_template_id`.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234"
]
},
"job_template_id": {
"description": "id of a job template you would like to model the created job after. Any manually added parameters will take preference over template attributes. Mutually exclusive with `target_locale_ids`.",
"type": "string",
"example": "abcd1234cdef1234abcd1234cdef1234"
},
"autotranslate": {
"description": "Automatically translate the job using machine translation.",
"type": "boolean",
"example": true
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/jobs": {
"get": {
"summary": "List account jobs",
"description": "List all jobs for the given account.",
"operationId": "jobs/by_account",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"$ref": "#/components/parameters/job_owner"
},
{
"$ref": "#/components/parameters/job_assignee"
},
{
"$ref": "#/components/parameters/job_state"
},
{
"$ref": "#/components/parameters/job_updated_since"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/job"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to list jobs in this account."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/jobs?owned_by=abcd1234cdef1234abcd1234cdef1234&assigned_to=abcd1234cdef1234abcd1234cdef1234&state=completed\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase jobs by_account \\\n--account_id \\\n--owned_by abcd1234cdef1234abcd1234cdef1234 \\\n--assigned_to abcd1234cdef1234abcd1234cdef1234 \\\n--state completed \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/jobs/{id}": {
"get": {
"summary": "Get a single job",
"description": "Get details on a single job for a given project.",
"operationId": "job/show",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"$ref": "#/components/parameters/branch"
},
{
"$ref": "#/components/parameters/include_annotations"
},
{
"$ref": "#/components/parameters/omit_translation_keys"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to read this job."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase jobs show \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a job",
"description": "Update an existing job.",
"operationId": "job/update",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"$ref": "#/components/parameters/branch"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to update this job."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"name\":\"de\",\"briefing\":\"de-DE\",\"due_date\":\"2017-08-15\",\"ticket_url\":\"https://example.atlassian.net/browse/FOO\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs update \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--data '{\"name\":\"de\", \"briefing\":\"de-DE\", \"due_date\":\"2017-08-15\", \"ticket_url\":\"https://example.atlassian.net/browse/FOO\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job/update/parameters",
"properties": {
"name": {
"description": "Job name",
"type": "string",
"example": "de"
},
"briefing": {
"description": "Briefing for the translators. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "de-DE"
},
"due_date": {
"description": "Date the job should be finished",
"type": "string",
"format": "date-time",
"example": "2017-08-15",
"nullable": true
},
"review_due_date": {
"description": "Date the review of the job should be finished. Must not be before `due_date`.",
"type": "string",
"format": "date-time",
"example": "2017-08-16"
},
"ticket_url": {
"description": "URL to a ticket for this job (e.g. Jira, Trello) Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "https://example.atlassian.net/browse/FOO"
},
"target_locale_ids": {
"description": "List of target locales for the job.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234"
]
},
"autotranslate": {
"description": "Automatically translate the job using machine translation",
"type": "boolean",
"example": true
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete a job",
"description": "Delete an existing job.",
"operationId": "job/delete",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to delete this job."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE \\\n -d '{\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs delete \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/jobs/{id}/start": {
"post": {
"summary": "Start a job",
"description": "Starts an existing job in state draft.",
"operationId": "job/start",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to start this job."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id/start\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs start \\\n--project_id \\\n--id \\\n--data '{\"branch\":\"my-feature-branch\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job/start/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/jobs/{id}/complete": {
"post": {
"summary": "Complete a job",
"description": "Mark a job as completed.",
"operationId": "job/complete",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to complete this job."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id/complete\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs complete \\\n--project_id \\\n--id \\\n--data '{\"branch\":\"my-feature-branch\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job/complete/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/jobs/{id}/reopen": {
"post": {
"summary": "Reopen a job",
"description": "Mark a job as uncompleted.",
"operationId": "job/reopen",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to reopen this job."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id/reopen\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs reopen \\\n--project_id \\\n--id \\\n--data '{\"branch\":\"my-feature-branch\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job/reopen/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/jobs/{id}/lock": {
"post": {
"summary": "Lock a job",
"description": "If you are the job owner, you may lock a job using this API request.",
"operationId": "job/lock",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to lock this job."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id/lock\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\"' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs lock \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/jobs/{id}/unlock": {
"post": {
"summary": "Unlock a job",
"description": "If you are the job owner, you may unlock a locked job using this API request.",
"operationId": "job/unlock",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to unlock this job."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id/unlock\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\"' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs unlock \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/jobs/{id}/keys": {
"post": {
"summary": "Add keys to job",
"description": "Add multiple keys to a existing job.",
"operationId": "job/keys/create",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id/keys\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\",\"translation_key_ids\":[\"abcd1234cdef1234abcd1234cdef1234\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs keys_create \\\n--project_id \\\n--id \\\n--data '{\"branch\":\"my-feature-branch\", \"translation_key_ids\": \"abcd1234cdef1234abcd1234cdef1234\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job/keys/create/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"translation_key_ids": {
"description": "ids of keys that should added to the job",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234"
]
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Remove keys from job",
"description": "Remove multiple keys from existing job.",
"operationId": "job/keys/delete",
"tags": [
"Jobs"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/jobs/:id/keys\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE \\\n -d '{\"branch\":\"my-feature-branch\",\"translation_key_ids\":[\"abcd1234cdef1234abcd1234cdef1234\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase jobs keys_delete \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--data '{\"branch\": \"my-feature-branch\", \"translation_key_ids\": [\"abcd1234cdef1234abcd1234cdef1234\"]}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job/keys/delete/parameters",
"required": [
"translation_key_ids"
],
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"translation_key_ids": {
"description": "ids of keys that should be deleted from the job",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234cdef1234abcd1234cdef1234"
]
}
}
}
}
}
}
}
},
"/projects/{project_id}/job_templates": {
"get": {
"summary": "List job templates",
"description": "List all job templates for the given project.",
"operationId": "job_templates/list",
"tags": [
"Job Templates"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/job_template"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to list job templates in this project, or when the account does not have the Job Templates feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/job_templates?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase job_templates list \\\n--project_id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a job template",
"description": "Create a new job template.",
"operationId": "job_template/create",
"tags": [
"Job Templates"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_template_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to create job templates in this project, or when the account does not have the Job Templates feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/job_templates\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\",\"name\":\"template\",\"briefing\":\"text\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase job_templates create \\\n--project_id \\\n--data '{\"branch\":\"my-feature-branch\", \"name\":\"template\", \"briefing\":\"text\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job_template/create/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"name": {
"description": "Job template name",
"type": "string",
"example": "template"
},
"briefing": {
"description": "Briefing for the translators",
"type": "string",
"example": "text"
},
"autotranslate": {
"description": "Automatically translate the job using machine translation.",
"type": "boolean",
"example": true
},
"source_locale_id": {
"description": "The API id of the source language. This locale will be set as source locale for the job template. If not provided, the project default locale will be used.",
"type": "string",
"example": "abcd1234cdef1234abcd1234cdef1234"
},
"owner_id": {
"description": "Code of the account member to set as the job template owner. The referenced\nuser must also be a member of the project; passing the code of an account member\nwho is not a project member returns a 404. When omitted or blank, no owner is\npre-set; the user who creates a job from this template is assigned as owner\nat job-creation time.\n",
"type": "string"
}
},
"required": [
"name"
]
}
}
}
},
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/job_templates/{id}": {
"get": {
"summary": "Get a single job template",
"description": "Get details on a single job template for a given project.",
"operationId": "job_templates/show",
"tags": [
"Job Templates"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_template_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to read this job template, or when the account does not have the Job Templates feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/job_templates/:id?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase job_templates show \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a job template",
"description": "Update an existing job template.",
"operationId": "job_template/update",
"tags": [
"Job Templates"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/job_template_details"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to update this job template, or when the account does not have the Job Templates feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/job_templates/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"branch\":\"my-feature-branch\",\"name\":\"template\",\"briefing\":\"text\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase job_templates update \\\n--project_id \\\n--id \\\n--data '{\"branch\":\"my-feature-branch\", \"name\":\"template\", \"briefing\":\"text\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "job_template/update/parameters",
"properties": {
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"name": {
"description": "Job template name",
"type": "string",
"example": "template"
},
"briefing": {
"description": "Briefing for the translators. Send an empty string or `null` to clear the value; omit the field to leave it unchanged. The Phrase CLI drops `null` values before sending, so use an empty string there.",
"type": "string",
"nullable": true,
"example": "text"
},
"autotranslate": {
"description": "Automatically translate the job using machine translation.",
"type": "boolean",
"example": true
},
"source_locale_id": {
"description": "The API id of the source language. This locale will be set as source locale for the job template. If not provided, the project default locale will be used.",
"type": "string",
"example": "abcd1234cdef1234abcd1234cdef1234"
},
"owner_id": {
"description": "Code of the account member to set as the job template owner. The referenced\nuser must also be a member of the project; passing the code of an account member\nwho is not a project member returns a 404. Pass an empty string to clear a\npreviously set owner; when blank, jobs created from this template will default\nto assigning the job creator as owner.\n",
"type": "string"
}
},
"required": [
"name"
]
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete a job template",
"description": "Delete an existing job template.",
"operationId": "job_template/delete",
"tags": [
"Job Templates"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to delete this job template, or when the account does not have the Job Templates feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/job_templates/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE \\\n -d '{\"branch\":\"my-feature-branch\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase job_templates delete \\\n--project_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/glossaries": {
"get": {
"summary": "List term bases",
"description": "List all term bases (previously: glossaries) the current user has access to.",
"operationId": "glossaries/list",
"tags": [
"Glossaries"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/glossary"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to list glossaries in this account, or when the account does not have the Glossary feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/glossaries\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase glossaries list \\\n--account_id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a term base",
"description": "Create a new term base (previously: glossary).",
"operationId": "glossary/create",
"tags": [
"Glossaries"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/glossary"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to create glossaries in this account, when the account does not have the Glossary feature, or when `space_ids` are supplied without the Spaces feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/glossaries\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"name\":\"My term base\",\"project_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\",\"space_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase glossaries create \\\n--account_id \\\n--data '{\"name\":\"My term base\", \"project_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\", \"space_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "glossary/create/parameters",
"required": [
"name"
],
"properties": {
"name": {
"description": "Name of the glossary",
"type": "string",
"example": "My glossary"
},
"project_ids": {
"description": "List of project ids the glossary should be assigned to.",
"type": "string",
"example": "abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235"
},
"space_ids": {
"description": "List of space ids the glossary should be assigned to.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
]
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/accounts/{account_id}/glossaries/{id}": {
"get": {
"summary": "Get a single term base",
"description": "Get details on a single term base (previously: glossary).",
"operationId": "glossary/show",
"tags": [
"Glossaries"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/glossary"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope, when the requesting user is not allowed to read this glossary, or when the account does not have the Glossary feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/glossaries/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase glossaries show \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a term base",
"description": "Update an existing term base (previously: glossary).",
"operationId": "glossary/update",
"tags": [
"Glossaries"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/glossary"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to update this glossary, when the account does not have the Glossary feature, or when `space_ids` are supplied without the Spaces feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/glossaries/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"name\":\"My glossary\",\"project_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\",\"space_ids\":[\"abcd1234abcd1234abcd1234\",\"abcd1234abcd1234abcd1235\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase glossaries update \\\n--account_id \\\n--id \\\n--data '{\"name\": \"My glossary\", \"project_ids\":\"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\", \"space_ids\": \"abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235\"}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "glossary/update/parameters",
"properties": {
"name": {
"description": "Name of the glossary",
"type": "string",
"example": "My glossary"
},
"project_ids": {
"description": "List of project ids the glossary should be assigned to.",
"type": "string",
"example": "abcd1234abcd1234abcd1234,abcd1234abcd1234abcd1235"
},
"space_ids": {
"description": "List of space ids the glossary should be assigned to.",
"type": "array",
"items": {
"type": "string"
},
"example": [
"abcd1234abcd1234abcd1234",
"abcd1234abcd1234abcd1235"
]
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete a term base",
"description": "Delete an existing term base (previously: glossary).",
"operationId": "glossary/delete",
"tags": [
"Glossaries"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/account_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope, when the requesting user is not allowed to delete this glossary, or when the account does not have the Glossary feature."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/accounts/:account_id/glossaries/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X DELETE"
},
{
"lang": "CLI v2",
"source": "phrase glossaries delete \\\n--account_id \\\n--id \\\n--access_token "
}
],
"x-cli-version": "2.5"
}
},
"/authorizations": {
"get": {
"summary": "List authorizations",
"description": "List all your authorizations.",
"operationId": "authorizations/list",
"tags": [
"Authorizations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/authorization"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to list their authorizations."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/authorizations\" \\\n -u USERNAME"
},
{
"lang": "CLI v2",
"source": "phrase authorizations list"
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create an authorization",
"description": "Create a new authorization.",
"operationId": "authorization/create",
"tags": [
"Authorizations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/authorization_with_token"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/authorizations\" \\\n -u USERNAME \\\n -X POST \\\n -d '{\"note\":\"My Deploy Script\",\"scopes\":[\"read\",\"write\"],\"expires_at\":\"2015-03-30T09:52:53Z\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase authorizations create \\\n--data '{\"note\": \"My Deploy Script\", \"scopes\": \"read,write\", \"expires_at\": \"2015-03-30T09:52:53Z\"}'"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "authorization/create/parameters",
"required": [
"note"
],
"properties": {
"note": {
"description": "A note to help you remember what the access is used for.",
"type": "string",
"example": "My Deploy Script"
},
"scopes": {
"description": "A list of scopes that the access can be used for.",
"type": "array",
"items": {
"type": "string",
"enum": [
"read",
"write",
"orders.create",
"team.manage"
]
},
"example": [
"read",
"write"
]
},
"expires_at": {
"description": "Expiration date for the authorization token. Null means no expiration date (default).",
"type": "string",
"format": "date-time",
"example": "2015-03-30T09:52:53Z"
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/authorizations/{id}": {
"get": {
"summary": "Get a single authorization",
"description": "Get details on a single authorization.",
"operationId": "authorization/show",
"tags": [
"Authorizations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/authorization"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to read this authorization."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/authorizations/:id\" \\\n -u USERNAME"
},
{
"lang": "CLI v2",
"source": "phrase authorizations show \\\n--id "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update an authorization",
"description": "Update an existing authorization.",
"operationId": "authorization/update",
"tags": [
"Authorizations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/authorization"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to update this authorization."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/authorizations/:id\" \\\n -u USERNAME \\\n -X PATCH \\\n -d '{\"note\":\"My Deploy Script\",\"scopes\":[\"read\",\"write\"],\"expires_at\":\"2015-03-30T09:52:53Z\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase authorizations update \\\n--id \\\n--data '{\"note\": \"My Deploy Script\", \"scopes\": \"read,write\", \"expires_at\": \"2015-03-30T09:52:53Z\"}'"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "authorization/update/parameters",
"properties": {
"note": {
"description": "A note to help you remember what the access is used for.",
"type": "string",
"example": "My Deploy Script"
},
"scopes": {
"description": "A list of scopes that the access can be used for.",
"type": "array",
"items": {
"type": "string",
"enum": [
"read",
"write",
"orders.create",
"team.manage"
]
},
"example": [
"read",
"write"
]
},
"expires_at": {
"description": "Expiration date for the authorization token. Null means no expiration date (default).",
"type": "string",
"format": "date-time",
"example": "2015-03-30T09:52:53Z"
}
}
}
}
}
},
"x-cli-version": "2.5"
},
"delete": {
"summary": "Delete an authorization",
"description": "Delete an existing authorization. API calls using that token will stop working.",
"operationId": "authorization/delete",
"tags": [
"Authorizations"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"204": {
"$ref": "#/components/responses/204"
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to delete this authorization."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/authorizations/:id\" \\\n -u USERNAME \\\n -X DELETE"
},
{
"lang": "CLI v2",
"source": "phrase authorizations delete \\\n--id "
}
],
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/keys/{key_id}/comments": {
"get": {
"summary": "List comments",
"description": "List all comments for a key.",
"operationId": "comments/list",
"tags": [
"Comments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/key_id"
},
{
"$ref": "#/components/parameters/page"
},
{
"$ref": "#/components/parameters/per_page"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Search query for comment messages",
"example": "Some comment content",
"name": "query",
"in": "query",
"schema": {
"type": "string"
}
},
{
"description": "Search comments by their assigned locales",
"example": [
"someId"
],
"name": "locale_ids",
"in": "query",
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"description": "Specify the filter for the comments. Supported values are `read` and `unread`. Combine both to return all comments (read + unread) without filtering.",
"name": "filters",
"in": "query",
"schema": {
"type": "array",
"example": [
"read",
"unread"
],
"items": {
"type": "string",
"enum": [
"read",
"unread"
]
}
}
},
{
"description": "Order direction. Defaults to `desc`. Values other than `asc` and `desc` fall back to `desc`.",
"name": "order",
"in": "query",
"example": "desc",
"schema": {
"type": "string",
"enum": [
"asc",
"desc"
]
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/comment"
}
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
},
"Link": {
"$ref": "#/components/headers/Link"
},
"Pagination": {
"$ref": "#/components/headers/Pagination"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to list comments on this key."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/keys/:key_id/comments?branch=my-feature-branch&filters=unread&query=something&locale_ids=someId&order=desc\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X GET \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase comments list \\\n--project_id \\\n--key_id \\\n--branch \"my-feature-branch\" \\\n--filters unread \\\n--order desc \\\n--query \"Some comment content\" \\\n--locale_ids someId \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"post": {
"summary": "Create a comment",
"description": "Create a new comment for a key.",
"operationId": "comment/create",
"tags": [
"Comments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/key_id"
}
],
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/comment"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to create comments on this key."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/keys/:key_id/comments\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X POST \\\n -d '{\"branch\":\"my-feature-branch\", \"message\":\"Some message...\", \"locale_ids\": [\"someId\"]}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase comments create \\\n--project_id \\\n--key_id \\\n--data '{\"branch\":\"my-feature-branch\", \"message\": \"Some message...\", \"locale_ids\": [\"someId\"]}' \\\n--access_token "
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"title": "comment/create/parameters",
"required": [
"message"
],
"properties": {
"message": {
"description": "Comment message",
"type": "string",
"example": "Some message..."
},
"branch": {
"description": "specify the branch to use",
"type": "string",
"example": "my-feature-branch"
},
"locale_ids": {
"description": "specify the locales for the comment",
"type": "array",
"items": {
"type": "string"
},
"example": [
"someId",
"someOtherId"
]
}
}
}
}
}
},
"x-cli-version": "2.5"
}
},
"/projects/{project_id}/keys/{key_id}/comments/{id}": {
"get": {
"summary": "Get a single comment",
"description": "Get details on a single comment.",
"operationId": "comment/show",
"tags": [
"Comments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/key_id"
},
{
"$ref": "#/components/parameters/id"
},
{
"description": "specify the branch to use",
"example": "my-feature-branch",
"name": "branch",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/comment"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `read` scope or when the requesting user is not allowed to read this comment."
},
"404": {
"$ref": "#/components/responses/404"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/keys/:key_id/comments/:id?branch=my-feature-branch\" \\\n -u USERNAME_OR_ACCESS_TOKEN"
},
{
"lang": "CLI v2",
"source": "phrase comments show \\\n--project_id \\\n--key_id \\\n--id \\\n--branch my-feature-branch \\\n--access_token "
}
],
"x-cli-version": "2.5"
},
"patch": {
"summary": "Update a comment",
"description": "Update an existing comment.",
"operationId": "comment/update",
"tags": [
"Comments"
],
"parameters": [
{
"$ref": "#/components/parameters/X-PhraseApp-OTP"
},
{
"$ref": "#/components/parameters/project_id"
},
{
"$ref": "#/components/parameters/key_id"
},
{
"$ref": "#/components/parameters/id"
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/comment"
}
}
},
"headers": {
"X-Rate-Limit-Limit": {
"$ref": "#/components/headers/X-Rate-Limit-Limit"
},
"X-Rate-Limit-Remaining": {
"$ref": "#/components/headers/X-Rate-Limit-Remaining"
},
"X-Rate-Limit-Reset": {
"$ref": "#/components/headers/X-Rate-Limit-Reset"
}
}
},
"400": {
"$ref": "#/components/responses/400"
},
"401": {
"$ref": "#/components/responses/401"
},
"403": {
"$ref": "#/components/responses/403",
"description": "Forbidden. Returned when the access token lacks the `write` scope or when the requesting user is not allowed to update this comment."
},
"404": {
"$ref": "#/components/responses/404"
},
"422": {
"$ref": "#/components/responses/422"
},
"429": {
"$ref": "#/components/responses/429"
}
},
"x-code-samples": [
{
"lang": "Curl",
"source": "curl \"https://api.phrase.com/v2/projects/:project_id/keys/:key_id/comments/:id\" \\\n -u USERNAME_OR_ACCESS_TOKEN \\\n -X PATCH \\\n -d '{\"branch\":\"my-feature-branch\",\"message\":\"Some message...\"}' \\\n -H 'Content-Type: application/json'"
},
{
"lang": "CLI v2",
"source": "phrase comments update \\\n--project_id \\\n--key_id \\\n--id \\\n--data '{\"branch\":\"my-feature-branch\", \"message\": \"Some message...\"}' \\\n--access_token