> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://next.developer.frame.io/platform/v2/api-reference/projects/create-project/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://next.developer.frame.io/_mcp/server. # Create a Project POST https://api.frame.io/v2/teams/{team_id}/projects Content-Type: application/json Create a new Project belonging to a Team Reference: https://next.developer.frame.io/platform/v2/api-reference/projects/create-project ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Request ### Path parameters - `team_id` (string, required) ### Body (application/json) This endpoint expects an object. - `name` (string, optional) — Project name - `private` (boolean, optional) — If true, the project is private to the creating user - `project_preferences` (ProjectPreferences, optional) ## Response ### 200 Project success response - `archive_status` (enum, optional) — Archival status for this Project - Allowed values: `standard`, `archiving`, `unarchiving`, `archived` - `archived_at` (string, optional) — When a Project was archived - `archived_file_count` (integer, optional, default: 0) - `archived_storage` (integer, optional, default: 0) - `collaborator_count` (integer, optional, default: 0) - `deleted_at` (string, optional) — If deleted, when this Project was deleted - `description` (string, optional) - `file_count` (integer, optional, default: 0) - `folder_count` (integer, optional, default: 0) - `id` (string, optional) - `ignore_archive` (boolean, optional, default: false) - `inserted_at` (string, optional) — When was this Project created - `invite_url` (string, optional) - `name` (string, optional) — Name of this Project - `owner_id` (string, optional) - `private` (boolean, optional, default: false) - `project_preferences` (ProjectPreferences, optional) - `read_only` (boolean, optional, default: false) - `root_asset` (Asset, optional) — Accepts arbitrary key/value pairs for storing information on an asset - `root_asset_id` (string, optional) - `shared` (boolean, optional, default: false) - `storage` (integer, optional, default: 0) - `team` (Team, optional) - `team_id` (string, optional) - `updated_at` (string, optional) - `user_permissions` (UserPermissions, optional) - `user_preferences` (ProjectPreferences, optional) - `watermark` (Watermark, optional) ## Errors ### 401 Unauthorized Error Unauthorized response - `code` (integer, optional) - `errors` (list of HttpErrorErrorsItems, optional) - `message` (string, optional) ### 404 Not Found Error Not Found response - `code` (integer, optional) - `errors` (list of HttpErrorErrorsItems, optional) - `message` (string, optional) ## Types ### ProjectPreferences - `collaborator_can_download` (boolean, optional) - `collaborator_can_invite` (boolean, optional) - `collaborator_can_share` (boolean, optional) - `notify_on_new_asset` (boolean, optional) - `notify_on_new_collaborator` (boolean, optional) - `notify_on_new_comment` (boolean, optional) - `notify_on_updated_label` (boolean, optional) - `notify_slack` (boolean, optional) ### Asset Accepts arbitrary key/value pairs for storing information on an asset ### Team - `account_id` (string, optional) - `disable_sbwm_internally` (boolean, optional, default: false) - `creator_id` (string, optional) - `storage` (integer, optional, default: 0) - `default_font_color` (string, optional) - `access` (enum, optional) - Allowed values: `private`, `public`, `restricted` - `font_color` (string, optional) - `user_role` (TeamUserRole, optional) - `file_count` (integer, optional, default: 0) - `default_session_watermark_template` (SessionWatermarkTemplate, optional) - `link` (string, optional) - `asset_lifecycle_policy` (integer, optional) - `upload_url` (string, optional) - `admin_only_actions` (AdminOnlyAction, optional) - `deleted_at` (string, optional) - `default_background_color` (string, optional) - `storage_limit` (integer, optional) - `location` (string, optional) - `name` (string, optional) - `default_color` (string, optional) - `slack_webhook` (TeamSlackWebhook, optional) - `image_64` (string, optional) - `archived_storage` (integer, optional, default: 0) - `image_128` (string, optional) - `solo` (boolean, optional, default: false) - `account` (Account, optional) - `image_32` (string, optional) - `inserted_at` (string, optional) - `updated_at` (string, optional) - `project_count` (integer, optional, default: 0) - `duration` (integer, optional, default: 0) - `team_image` (string, optional) - `collaborator_count` (integer, optional, default: 0) - `bio` (string, optional) - `color` (string, optional) - `email_branding` (EmailBranding, optional) - `folder_count` (integer, optional, default: 0) - `dark_theme` (boolean, optional, default: false) - `default_session_watermark_template_id` (string, optional) - `session_watermark_templates` (list of SessionWatermarkTemplate, optional) - `id` (string, optional) - `member_limit` (integer, optional) - `frames` (integer, optional, default: 0) - `member_count` (integer, optional, default: 0) - `image_256` (string, optional) - `background_color` (string, optional) ### UserPermissions - `can_download` (boolean, optional) - `can_modify_template` (boolean, optional) - `can_public_share_presentation` (boolean, optional) - `can_public_share_review_link` (boolean, optional) - `can_share_downloadable_presentation` (boolean, optional) - `can_share_downloadable_review_link` (boolean, optional) - `can_share_unwatermarked_presentation` (boolean, optional) - `can_share_unwatermarked_review_link` (boolean, optional) ### Watermark - `image` (WatermarkImage, optional) - `text` (WatermarkText, optional) ### HttpErrorErrorsItems - `code` (integer, optional) - `detail` (string, optional) - `status` (integer, optional) - `title` (string, optional) ### Asset0 - `` (string, optional) ### TeamUserRole ### SessionWatermarkTemplate - `account_id` (string, optional) - `app_default` (boolean, optional, default: false) - `creator_id` (string, optional) - `id` (string, optional) - `name` (string, optional) - `watermark_blocks` (list of SessionWatermarkBlock, optional) ### AdminOnlyAction - `lifecycle` (boolean, optional, default: false) ### TeamSlackWebhook ### Account - `invoice_emails` (list of string, optional) - `city` (string, optional) - `account_default_color` (string, optional) - `company_name` (string, optional) - `storage` (integer, optional) - `file_count` (integer, optional) - `owner` (User, optional) — User model - `upload_url` (string, optional) - `deleted_at` (string, optional) - `line1` (string, optional) - `postal_code` (string, optional) - `vat` (string, optional) - `company_address` (string, optional) - `lifetime_file_count` (integer, optional) - `state` (string, optional) - `teams` (list of Team, optional) - `image_64` (string, optional) - `archived_storage` (integer, optional) - `image_128` (string, optional) - `owner_id` (string, optional) - `user_count` (integer, optional) - `locked_at` (string, optional) - `image` (string, optional) - `team_count` (integer, optional) - `collaborator_role_count` (integer, optional) - `billing_emails` (string, optional) - `image_32` (string, optional) - `unpaid_at` (string, optional) - `inserted_at` (string, optional) - `updated_at` (string, optional) - `project_count` (integer, optional) - `duration` (integer, optional) - `delinquent_at` (string, optional) - `collaborator_count` (integer, optional) - `plan` (Plan, optional) - `watermark` (Watermark, optional) - `folder_count` (integer, optional) - `id` (string, optional) - `display_name` (string, optional) - `country` (string, optional) - `subscription` (Subscription, optional) - `account_members` (list of AccountMember, optional) - `frames` (integer, optional) - `member_count` (integer, optional) - `image_256` (string, optional) ### EmailBranding - `accent_color` (string, optional) - `background_color` (string, optional) - `image` (Image, optional) ### WatermarkImage - `alpha` (double, optional, default: 0.5) - `image` (Image, optional) - `position` (enum, optional, default: top_left) - Allowed values: `top_left`, `top_right`, `bottom_left`, `bottom_right` ### WatermarkText - `alpha` (double, optional, default: 0.5) - `lines` (list of string, optional) - `position` (enum, optional, default: top) - Allowed values: `top`, `center`, `bottom` ### SessionWatermarkBlock - `alpha` (double, optional, default: 0.5) - `data_points` (list of SessionWatermarkDataPoint, optional) - `font_size` (enum, optional, default: medium) - Allowed values: `small`, `medium`, `large`, `huge` - `name` (string, optional) - `position` (enum, optional, default: top_left) - Allowed values: `top_left`, `top_center`, `top_right`, `middle_left`, `middle_center`, `middle_right`, `bottom_left`, `bottom_center`, `bottom_right` - `position_reference_point` (enum, optional) - Allowed values: `top_left`, `top_center`, `top_right`, `middle_left`, `middle_center`, `middle_right`, `bottom_left`, `bottom_center`, `bottom_right` - `position_x` (integer, optional) - `position_y` (integer, optional) - `scroll_text` (enum, optional, default: none) - Allowed values: `none`, `ltr`, `rtl` - `text_alignment` (enum, optional, default: left) - Allowed values: `left`, `right`, `center` - `text_color` (string, optional, default: #FFFFFF) - `text_shadow` (boolean, optional, default: false) ### User User model - `digest_frequency` (string, optional) - `features_seen` (any, optional) - `profile_image_original` (any, optional) - `image_32` (string, optional) - `image_128` (string, optional) - `from_google` (boolean, optional) - `mfa_enforced_at` (string, optional) - `email` (string, optional) - `bio` (any, optional) - `name` (string, optional) - `image_64` (string, optional) - `timezone_value` (string, optional) - `account_id` (string, optional) - `updated_at` (string, optional) - `image_256` (string, optional) - `_type` (string, optional) - `user_hash` (string, optional) - `context` (any, optional) - `upload_url` (string, optional) - `location` (any, optional) - `phone` (any, optional) - `deleted_at` (any, optional) - `profile_image` (string, optional) - `first_login_at` (string, optional) - `joined_via` (string, optional) - `email_confirm_by` (any, optional) - `id` (string, optional) - `next_digest_date` (string, optional) - `email_preferences` (any, optional) - `last_seen` (string, optional) - `inserted_at` (string, optional) - `from_adobe` (boolean, optional) - `avatar_color` (string, optional) - `highest_account_role` (string, optional) - `integrations` (list of string, optional) - `roles` (UserRoles, optional) - `user_default_color` (string, optional) ### Plan - `archived_storage_limit` (integer, optional) - `autoscaling` (boolean, optional) - `available_features` (AvailableFeatures, optional) - `collaborator_limit` (integer, optional) - `cost` (integer, optional) - `default_plan` (boolean, optional) - `deleted_at` (string, optional) - `enterprise` (boolean, optional) - `file_limit` (integer, optional) - `id` (string, optional) - `inserted_at` (string, optional) - `lifetime_file_limit` (integer, optional) - `member_limit` (integer, optional) - `name` (string, optional) - `payment_method` (enum, optional) - Allowed values: `stripe`, `check` - `period` (enum, optional) - Allowed values: `monthly`, `yearly`, `semiannually` - `project_limit` (integer, optional) - `storage_limit` (integer, optional) - `team_limit` (integer, optional) - `tier` (enum, optional) - Allowed values: `free`, `starter`, `pro`, `team`, `business`, `enterprise` - `title` (string, optional) - `updated_at` (string, optional) - `user_limit` (integer, optional) - `user_max` (integer, optional) - `version` (integer, optional) ### Subscription - `account_id` (string, optional) - `archived_storage_limit` (integer, optional) - `balance` (integer, optional) - `cancellation_option` (string, optional) - `cancellation_reason` (string, optional) - `cancelled_at` (string, optional) - `deleted_at` (string, optional) - `id` (string, optional) - `inserted_at` (string, optional) - `last_payment_at` (string, optional) - `member_limit` (integer, optional) - `next_bill_at` (string, optional) - `on_trial` (boolean, optional) - `plan` (Plan, optional) - `plan_id` (string, optional) - `promotion_expires_at` (string, optional) - `promotion_id` (string, optional) - `requires_autoscaling` (boolean, optional) - `storage_limit` (integer, optional) - `subscription_end_at` (string, optional) - `total_archived_storage_limit` (integer, optional) - `total_lifetime_file_limit` (integer, optional) - `total_member_limit` (integer, optional) - `total_project_limit` (integer, optional) - `total_storage_limit` (integer, optional) - `total_user_limit` (integer, optional) - `updated_at` (string, optional) - `user_limit` (integer, optional) ### AccountMember - `accepted_at` (string, optional) - `account_id` (string, optional) - `declined_at` (string, optional) - `deleted_at` (string, optional) - `inserted_at` (string, optional) - `role` (enum, optional) - Allowed values: `admin`, `billing_manager`, `account_manager`, `member` - `updated_at` (string, optional) - `user_id` (string, optional) ### Image - `bucket` (string, optional) - `key` (string, optional) - `type` (string, optional, default: image/jpeg) - `uploaded` (boolean, optional, default: false) ### SessionWatermarkDataPoint - `order` (integer, optional) - `type` (enum, optional) - Allowed values: `email`, `username`, `ip_address`, `timestamp`, `custom_text`, `user_input` - `value` (string, optional) ### UserRoles - `admin` (boolean, optional) - `id` (string, optional) - `sales` (boolean, optional) - `support` (boolean, optional) - `service_desk` (boolean, optional) ### AvailableFeatures - `archival_storage` (boolean, optional) - `custom_branded_emails` (boolean, optional) - `custom_branded_presentations` (boolean, optional) - `reel_player` (boolean, optional) - `secure_sharing` (boolean, optional) - `session_based_watermarking` (boolean, optional) - `team_only_comments` (boolean, optional) ## Examples **Request** ```json {} ``` **Response** ```json { "id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "name": "My Project", "owner_id": "dddddddd-dffd-dddd-dddd-dddddddddddd", "private": false, "project_preferences": {}, "root_asset_id": "cccccccc-cccc-cccc-cccc-cccccccccccc", "team_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb" } ``` **SDK Code** ```python response import requests url = "https://api.frame.io/v2/teams/team_id/projects" payload = {} headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript response const url = 'https://api.frame.io/v2/teams/team_id/projects'; const options = { method: 'POST', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go response package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://api.frame.io/v2/teams/team_id/projects" payload := strings.NewReader("{}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "Bearer ") req.Header.Add("Content-Type", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby response require 'uri' require 'net/http' url = URI("https://api.frame.io/v2/teams/team_id/projects") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{}" response = http.request(request) puts response.read_body ``` ```java response import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://api.frame.io/v2/teams/team_id/projects") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{}") .asString(); ``` ```php response request('POST', 'https://api.frame.io/v2/teams/team_id/projects', [ 'body' => '{}', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp response using RestSharp; var client = new RestClient("https://api.frame.io/v2/teams/team_id/projects"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift response import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = [] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://api.frame.io/v2/teams/team_id/projects")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```