openapi: 3.0.3
info:
title: Phrase Strings API Reference Accounts Invitations API
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: 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.
'
paths:
/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 \
--account_id <account_id> \
--access_token <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 \
--account_id <account_id> \
--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}"}'' \
--access_token <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 \
--account_id <account_id> \
--id <id> \
--access_token <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'
'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 \
--account_id <account_id> \
--id <id> \
--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}"}'' \
--access_token <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'
'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 \
--account_id <account_id> \
--id <id> \
--access_token <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'
'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 \
--account_id <account_id> \
--id <id> \
--access_token <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'
'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 \
--project_id <project_id> \
--id <id> \
--data ''{"project_role":"Developer","locale_ids":["fff565db236400772368235db2c6117e","fff565db236400772368235db2c6117f"]}'' \
--access_token <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'
components:
schemas:
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/space_short'
project_role:
type: array
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
space_short:
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
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'
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'
errors:
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
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
headers:
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
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
X-Rate-Limit-Limit:
description: The number of allowed requests in the current period
schema:
type: integer
X-Rate-Limit-Remaining:
description: The number of remaining requests in the current period
schema:
type: integer
Link:
description: 'Links to related resources, in the format defined by
[RFC 5988](https://tools.ietf.org/html/rfc5988#section-5).
This will include a link with relation type `next` to the
next page, if there is a next page.'
schema:
type: string
responses:
'429':
description: Rate Limiting
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
content:
application/json:
schema:
$ref: '#/components/schemas/errors'
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
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'
'403':
description: Forbidden
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
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
parameters:
X-PhraseApp-OTP:
in: header
name: X-PhraseApp-OTP
description: Two-Factor-Authentication token (optional)
required: false
allowEmptyValue: false
schema:
type: string
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
id:
in: path
name: id
description: ID
required: true
schema:
type: string
account_id:
in: path
name: account_id
description: Account ID
required: true
schema:
type: string
project_id:
in: path
name: project_id
description: Project ID
required: true
schema:
type: string
page:
in: query
name: page
description: Page number
required: false
allowEmptyValue: false
schema:
type: integer
example: 1
securitySchemes:
Token:
type: apiKey
in: header
name: Authorization
description: Enter your token in the format `token TOKEN`
Basic:
type: http
scheme: basic
x-tagGroups:
- name: Core Resources
tags:
- Projects
- Locales
- Keys
- 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:
- 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