---
title: "Create a project"
method: POST
path: "/projects"
tags: ["Projects"]
---

# Create a project

`POST /projects`

Create a new project in the given account.

When `source_project_id` is supplied, the new project is created as a clone of that project. All locales, keys, and translations are copied asynchronously after the response is returned, so they may not be available immediately. Settings from the source project are inherited unless explicitly overridden in the request; in clone mode, the `shares_translation_memory` field is ignored and inherited from the source.

`shares_translation_memory` defaults to `true` when omitted on a non-clone create.

## Headers

- `X-PhraseApp-OTP` string

## Request body

- object
  - `name` string, required — Name of the project
  - `main_format` string — Main file format specified by its API Extension name. Used for locale downloads if no format is specified. For API Extension names of available file formats see [Format Guide](https://support.phrase.com/hc/en-us/sections/6111343326364) or our [Formats API Endpoint](/en/api/strings/formats/list-formats).
  - `media` string — (Optional) Main technology stack used in the project. It affects for example the suggested placeholder style. Predefined values include: `Ruby`, `JavaScript`, `AngularJS`, `React`, `iOS`, `Android`, `Python`, `PHP`, `Java`, `Go`, `Windows Phone`, `Rails`, `Node.js`, `.NET`, `Django`, `Symfony`, `Yii Framework`, `Zend Framework`, `Apple App Store Description`, `Google Play Description`, but it can also take any other value.
  - `shares_translation_memory` boolean — Indicates whether the project should share the account's translation memory
  - `project_image` string, binary — Image to identify the project
  - `remove_project_image` boolean — Indicates whether the project image should be deleted.
  - `account_id` string — Account ID to specify the actual account the project should be created in. Required if the requesting user is a member of multiple accounts.
  - `point_of_contact` string — (Optional) User ID of the point of contact for the project.
  - `source_project_id` string — When a source project ID is given, a clone of that project will be created, including all locales, keys and translations as well as the main project settings if they are not defined otherwise through the params.
  - `workflow` string — (Optional) Review Workflow. "simple" / "review". [Read more](https://support.phrase.com/hc/en-us/articles/5784094755484)
  - `machine_translation_enabled` boolean — (Optional) Enable machine translation support in the project. Required for Pre-Translation
  - `enable_branching` boolean — (Optional) Enable branching in the project
  - `protect_master_branch` boolean — (Optional) Protect the master branch in project where branching is enabled
  - `enable_all_data_type_translation_keys_for_translators` boolean — (Optional) Otherwise, translators are not allowed to edit translations other than strings
  - `enable_icu_message_format` boolean — (Optional) We can validate and highlight your ICU messages. [Read more](https://support.phrase.com/hc/en-us/articles/5822319545116)
  - `zero_plural_form_enabled` boolean — (Optional) Displays the input fields for the 'ZERO' plural form for every key as well although only some languages require the 'ZERO' explicitly.
  - `autotranslate_enabled` boolean — (Optional) Autopilot, requires machine_translation_enabled. [Read more](https://support.phrase.com/hc/en-us/articles/5822187934364)
  - `autotranslate_check_new_translation_keys` boolean — (Optional) Requires autotranslate_enabled to be true
  - `autotranslate_check_new_uploads` boolean — (Optional) Requires autotranslate_enabled to be true
  - `autotranslate_check_new_locales` boolean — (Optional) Requires autotranslate_enabled to be true
  - `autotranslate_mark_as_unverified` boolean — (Optional) Requires autotranslate_enabled to be true
  - `autotranslate_use_machine_translation` boolean — (Optional) Requires autotranslate_enabled to be true
  - `autotranslate_use_translation_memory` boolean — (Optional) Requires autotranslate_enabled to be true
  - `autotranslate_overwrite_unverified_translations` boolean — (Optional) Requires autotranslate_enabled to be true
  - `autocomplete_job_enabled` boolean — (Optional) Enable autocomplete-job behavior so that newly created keys and locales are automatically added to in-progress jobs.
  - `job_locking_enabled` boolean — (Optional) When enabled, translations are locked once a job moves into review.
  - `smart_suggest_enabled` boolean — (Optional) Enable Smart Suggest for the project. Defaults to `true` when omitted.
  - `smart_suggest_use_glossary` boolean — (Optional) Allow Smart Suggest to source suggestions from the project glossary. Defaults to `true` when omitted.
  - `smart_suggest_use_machine_translation` boolean — (Optional) Allow Smart Suggest to source suggestions from machine translation. Defaults to `true` when omitted.
  - `translation_keys_sort_collation` string — (Optional) Collation used when sorting translation keys alphabetically. Defaults to `unicode_ci` when omitted.
  - `default_encoding` 'UTF-8' | 'UTF-16' | 'UTF-16BE' | 'UTF-16LE' | 'ISO-8859-1' — (Optional) Sets the default encoding for Uploads. If you leave it empty, we will try to guess it automatically for you when you Upload a file. You can still override this value by setting the [`file_encoding`](/en/api/strings/uploads/upload-a-new-file) parameter for Uploads.
  - `cldr_version` string — (Optional) CLDR plural-rule version used by the project.
  - `placeholder_styles` string[] — (Optional) List of placeholder styles enabled for the project.

## Response `201`

Created

- ProjectDetails
  - `id` string
  - `name` string
  - `slug` string
  - `main_format` string
  - `project_image_url` string
  - `media` string
  - `account` Account
    - `id` string
    - `name` string
    - `slug` string
    - `company` string
    - `created_at` string, date-time
    - `updated_at` string, date-time
    - `company_logo_url` string
  - `space` object
    - `id` string
    - `name` string
    - `created_at` string, date-time
    - `updated_at` string, date-time
    - `projects_count` integer
  - `point_of_contact` UserPreview
    - `id` string
    - `username` string
    - `name` string
    - `gravatar_uid` string
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `shares_translation_memory` boolean
  - `machine_translation_enabled` boolean
  - `zero_plural_form_enabled` boolean
  - `enable_all_data_type_translation_keys_for_translators` boolean
  - `enable_icu_message_format` boolean
  - `enable_branching` boolean
  - `protect_master_branch` boolean
  - `autotranslate_enabled` boolean
  - `autotranslate_check_new_translation_keys` boolean
  - `autotranslate_check_new_uploads` boolean
  - `autotranslate_check_new_locales` boolean
  - `autotranslate_mark_as_unverified` boolean
  - `autotranslate_use_machine_translation` boolean
  - `autotranslate_use_translation_memory` boolean
  - `autotranslate_overwrite_unverified_translations` boolean
  - `autocomplete_job_enabled` boolean
  - `default_encoding` string
  - `cldr_version` string
  - `job_locking_enabled` boolean
  - `placeholder_styles` string[]
  - `branch` Branch
    - `base_project_id` string
    - `branch_project_id` string
    - `name` string
    - `base` string, nullable — Name of the base branch this branch was created from. Only present for branches created with the newer branching system.
    - `created_at` string, date-time
    - `updated_at` string, date-time
    - `merged_at` string, date-time
    - `merged_by` UserPreview
      - `id` string
      - `username` string
      - `name` string
      - `gravatar_uid` string
    - `created_by` UserPreview
      - `id` string
      - `username` string
      - `name` string
      - `gravatar_uid` string
    - `state` 'creating_branch' | 'merging_branch' | 'syncing_branch' | 'merged' | 'success' | 'branch_error' | 'merge_conflict'
    - `child_branches` string[]

## Other responses

- `400` — 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.
- `401` — Unauthorized. Authentication failed because the access token is missing, expired, or invalid. Supply a valid access token and retry.
- `403` — 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.
- `404` — 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.
- `422` — 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.
- `429` — Too many requests. The rate limit has been exceeded. Wait until the time indicated by the `X-Rate-Limit-Reset` response header before retrying.

---

[API](https://skmtc.net/phrase/apis/control-hub-service.md) · [All operations](https://skmtc.net/phrase/apis/control-hub-service/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/phrase/control-hub-service/revisions/98ecac7ba2bf/schema)
