---
schema_version: "1"
id: c8a22d8ed03c826f1db793f7383fcf691e316c3de4322cff0e31f37799d03933
title: Projects Methods
collection: tableau
version: next
locale: en-us
portal_url: https://docs.salesforce.com/tableau/next/en-us/api/rest_api/REST/rest_api_ref_projects.md
canonical_url: https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_projects.htm
source_site: help.tableau.com
content_type: documentation
content_hash: fe9a6a2cd77ccae2bb45d330d26a130ec8ef98d0b15471b4912ee431348baf0f
description: Projects are sets of workbooks, data sources, and flows whose members inherit the project's permissions
---
[Skip to main content](#main-content)

# Projects Methods

**[Projects](https://help.tableau.com/current/server/en-us/projects.htm)** are sets of workbooks, data sources, and flows whose members inherit the project's permissions.

Using the projects methods of the Tableau Server REST API you can:

- Get a filtered, sorted list of projects on a server
- Create, update, and delete projects on a server

This functionality relates to the UI elements and concepts described at: [Use Projects to Manage Content Access](https://help.tableau.com/current/server/en-us/projects.htm).

## Use Postman

Our Postman collection of requests enables you to construct, send, and examine HTTP requests to the Tableau Server or Tableau Cloud API without writing initial code. Postman is a free online app used by many developers for prototyping API calls, investigating issues, and generating request code in a variety of languages.

[Postman: Projects](https://www.postman.com/salesforce-developers/salesforce-developers/folder/nxpwgqs/projects)

## Create Project

Creates a project on the specified site. You can also create project hierarchies by creating a project under the specified parent project on the site. To make changes to an existing project, call [Update Project](#update_project).

**Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date.

**Version:** Available in API 1.0 and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.

**Permissions:** Only Tableau Administrators can update a project.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope:** tableau:projects:create

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### URI

POST /api/api-version/sites/site-id/projects

POST /api/api-version/sites/site-id/projects?publishSamples=publish-value

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site to create the project in.</td></tr><tr><td><span class="api-placeholder">publish-value</span></td><td>(Optional) A Boolean value that specifies whether to publish the sample workbooks provided by Tableau to the project. When the <span class="api-placeholder">publish-value</span> is not specified in the request, or the <code>publishSamples</code> parameter is missing, no samples will be published. To publish the sample workbooks, set <code>publishSamples</code> parameter to <code class="api-command-ref">true</code>. This option is equivalent to the <span class="api-command-ref">tabcmd</span> command-line utility option, <code>publishsamples</code>. For more information, see <a href="https://help.tableau.com/current/server/en-us/tabcmd_cmd.htm" target="_blank">tabcmd</a>.</td></tr></tbody></table>

#### Request Body

Copy

```
<tsRequest>  <project     parentProjectId="afe6f0b8-cb10-11e7-9fd4-db8b61369aa5"    name="Update-Project-Name"    description="This is the new description after the project update"    contentPermissions="ManagedByOwner">      <owner id="abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"/>  </project></tsRequest>
```

Copy

```
{  "project": {    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }}
```

#### Attribute Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col style="width:32%;">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><code>project name</code>
                                        </td>
                                        <td>(Required) The new name for the project.</td>
                                    </tr>
                                    <tr>
                                        <td><code>project description</code>
                                        </td>
                                        <td>(Optional) The new description for the project.</td>
                                    </tr>
                                    <tr>
                                        <td><code>project parentProjectId</code>
                                        </td>
                                        <td>
                                            <p>(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.</p>
                                            <p>To create a project as a stand alone or at the top of a project hierarchy, omit the <b>parentProjectId</b> attribute.</p>
                                            <p>For information about how permissions are evaluated in project hierarchies, see
								    <a href="https://help.tableau.com/current/server/en-us/permissions_projects.htm">Project Permissions States and Defaults</a>.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>project contentPermissions</code>
                                        </td>
                                        <td>
                                            <p>(Optional) This value controls user permissions in a project, however, if the project is nested within a project
									with more restrictive policies, it will inherit those permissions and these settings
									will have no effect. The functional permissions of a project, including those it inherits, are available in value of
								<span class="api-command-ref">contentPermission</span> in the response body from a request to create, update, or query a project.</p>
                                            <ul>
                                                <li><span class="api-command-ref">LockedToProject</span> to lock permissions so that users cannot overwrite
									the default permissions set for the project</li>
                                                <li><span class="api-command-ref">ManagedByOwner</span> to allow users to manage permissions for content
									that they own</li>
                                                <li><span class="api-command-ref">LockedToProjectWithoutNested</span> to lock the permissions of a parent
									project, but not those of its child projects.</li>
                                            </ul>
                                            <p>The default is <span class="api-command-ref">ManagedByOwner</span>. For more information, see
									<a href="https://help.tableau.com/current/server/en-us/permissions.htm#lock-content-permissions" target="_blank">Lock Content Permissions</a>.
								</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>owner id</code>
                                        </td>
                                        <td>The LUID of the user that owns the project.</td>
                                    </tr>
                                </tbody>
                            </table>

#### cURL Example

`curl --request PUT "https://myServer/api/3.21/sites/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e/projects/xz2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e3w" --header "Content-Type: application/xml" --header "X-Tableau-Auth;" --data "<tsRequest> <project parentProjectId='ab2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5ee0' name='new-name' description='new-description' contentPermissions='ManagedByOwner' /> </tsRequest>"`

#### Response Code

201

#### Response Body

Copy

```
<tsResponse>  <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e"    parentProjectId="afe6f0b8-cb10-11e7-9fd4-db8b61369aa5"    name="Update-Project-Name"    description="This is the new description after the project update"    contentPermissions="ManagedByOwner"    controllingPermissionsProjectId="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" >      <owner id="abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"/>  </project></tsResponse>
```

Copy

```
{  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }}
```

#### Errors

<table class="api-error-table">
                                <colgroup>
                                    <col class="api-error-table-col-1">
                                    <col class="api-error-table-col-2">
                                    <col class="api-error-table-col-3">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <th>HTTP status</th>
                                        <th><code>error</code> Code</th>
                                        <th>Condition</th>
                                        <th>Details</th>
                                    </tr>
                                    <tr>
                                        <td>400</td>
                                        <td>400000</td>
                                        <td>Bad request</td>
                                        <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                    </tr>
                                    <tr>
                                        <td>400</td>
                                        <td>400008</td>
                                        <td>Bad request</td>
                                        <td>The request cannot set content permissions to <span class="api-command-ref">LockedToProjectWithoutNested</span> for a REST API version lower than 3.8.</td>
                                    </tr>
                                    <tr>
                                        <td>403</td>
                                        <td>403008</td>
                                        <td>Insufficient storage on site</td>
                                        <td>The samples could not be published because there is not enough storage space remaining on the server to accommodate the samples. </td>
                                    </tr>
                                    <tr>
                                        <td>404</td>
                                        <td>404000</td>
                                        <td>Site not found</td>
                                        <td>
                                            <p>The site ID in the URI doesn't correspond to an existing site.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>405</td>
                                        <td>405000</td>
                                        <td>Invalid request method</td>
                                        <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                    </tr>
                                    <tr>
                                        <td>409</td>
                                        <td>409006</td>
                                        <td>Project name conflict</td>
                                        <td>
                                    The project name in the request already belongs to the
                                    specified site. For the purpose of uniqueness checks, project names are case-insensitive.
                                </td>
                                    </tr>
                                </tbody>
                            </table>

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

## Delete Project

Deletes the specified project on a specific site. When a project is deleted, all Tableau assets inside of it are also deleted, including assets like associated workbooks, data sources, project view options, and rights.

External assets, such as databases and tables, are not deleted. Starting in Tableau Cloud December 2022 / Server 2023.1, external assets from deleted projects are moved to the External Assets Default Project, and can also be found in External Assets. In Tableau Cloud October 2022 / Server 2022.3 and earlier, external assets are not moved to any other project, but can be found in External Assets.

Use this method with caution.

#### URI

DELETE /api/api-version/sites/site-luid/projects/project-luid

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site that contains the project.</td></tr><tr><td><span class="api-placeholder">project-luid</span></td><td>The LUID of the project to delete.</td></tr></tbody></table>

#### Request Body

None

#### Permissions

Only server administrators and site administrators can call this method.

#### Required scope for JWT authorization

Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17).

```
tableau:projects:delete
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

204

#### Response Body

None

#### Version

Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403003</td><td>Deletion forbidden</td><td>You attempted to delete a default project that cannot be deleted.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site LUID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project LUID in the URI doesn't correspond to an existing project or the project is not found on this site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded.

## Query Projects

Returns a list of projects on the specified site, with optional parameters for specifying the paging of large results.

**Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date.

#### URI

GET /api/api-version/sites/site-id/projects

GET /api/api-version/sites/site-id/projects?pageSize=page-size&pageNumber=page-number

GET /api/api-version/sites/site-id/projects?filter=filter-expression

GET /api/api-version/sites/site-id/projects?sort=sort-expression

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the projects.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see <a href="https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of data sources to return. You can filter on predefined fields such as <code>name</code>, <code>ownerName</code>, and <code>parentProjectId</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see <a href="https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr></tbody></table>

#### Request Body

None

#### Permissions

Users who are not server administrators or site administrators can call this method only if they have Read (view) permission for the project (either implicitly or explicitly).

#### Required scope for JWT authorization

Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17).

```
tableau:content:read
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

200

#### Response Body

```
<tsResponse>
  <pagination pageNumber="pageNumber"
    pageSize="page-size"
    totalAvailable="total-available" />
  <projects>
    <project id="project-id"
      name="project-name"
      description="project-description"
      topLevelProject="top-level-project-flag"
      writeable="writeable-flag"
      controllingPermissionsProjectId="controlling-permissions-project-id"
      createdAt="created-date-and-time"
      updatedAt="updated-date-and-time"
      contentPermissions="content-permissions"
      parentProjectId="parent-project-id">
        <owner email="owner-email"
          fullName="owner-full-name"
          id="owner-id"
          lastLogin="owner-last-login-date"
          name="owner-username"
          siteRole="owner-site-role"/>
        <contentCounts projectCount="number-of-projects"
          workbookCount="number-of-workbooks"
          viewCount="number-of-views"
          datasourceCount="number-of-data-sources"/>
    </project>
    <project id="project-id"
      name="project-name"
      description="project-description"
	  contentPermissions="content-permissions"
	  controllingPermissionsProjectId="controlling-permissions-project-id" />
	... additional attributes and projects ...
  </projects>
</tsResponse>
```

#### Version

Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example: Filter query by project ID

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects?filter=parentProjectId:eq:711d4c5d-60b7-4f77-a9a6-bbf05021b6ec" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
	<pagination pageNumber="1" pageSize="100" totalAvailable="1"/>
    <projects>
        <project id="fae56e51-fbee-4eab-a9af-d8283cc0ed77" name="TestNestProject" description="" createdAt="2018-11-15T17:14:45Z" updatedAt="2018-11-15T17:14:45Z" contentPermissions="LockedToProject" parentProjectId="711d4c5d-60b7-4f77-a9a6-bbf05021b6ec">
            <owner id="4d8308f7-ec47-4eb1-a383-429374a8d9cb"/>
        </project>
    </projects>
</tsResponse>
```

#### Example: Show all fields in the first ten query results

`curl "https://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects?pageSize=10&fields=_all_" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
    <pagination pageNumber="1" pageSize="100" totalAvailable="1"/>
    <projects>
        <project id="fae56e51-fbee-4eab-a9af-d8283cc0ed77"
            name="TestNestProject"
            description="A project."
            topLevelProject="false"
            writeable="true"
            createdAt="2018-11-15T17:14:45Z"
            updatedAt="2018-13-15T17:12:30Z"
            contentPermissions="ManagedByOwner"
            parentProjectId="711d4c5d-60b7-4f77-a9a6-bbf05021b6ec"
            controllingPermissionsProjectId="57646e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" />
        <owner id="4d8308f7-ec47-4eb1-a383-429374a8d9cb" email="rkawal@tableau.com" fullName="Reena Kawal" lastLogin="2020-06-02T16:23:49Z" name="rkawal" siteRole="SiteAdministratorCreator"/>
        <contentCounts projectCount="2" workbookCount="3" viewCount="10" datasourceCount="2" />
        </project>
    </projects>
</tsResponse>
```

## Update Project

Updates the name, description, or project hierarchy of the specified project. You can create or update project hierarchies by specifying a parent project for the project that you are updating using this method.

**Version:** Available in API 1.0 and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.

**Permissions:** Only Tableau Administrators can update a project.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope:** tableau:projects:update

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### URI

PUT /api/api-version/sites/site-id/projects/project-id

PUT /api/api-version/sites/site-id/projects/project-id?publishSamples=publish-value

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the project.</td></tr><tr><td><span class="api-placeholder">project-id</span></td><td>The ID of the project to update.</td></tr><tr><td><span class="api-placeholder">publish-value</span></td><td>(Optional) A Boolean value that specifies whether to publish the sample workbooks provided by Tableau to the project when you update the project. When the <span class="api-placeholder">publish-value</span> is not specified in the request, or the <code>publishSamples</code> parameter is missing, no samples will be published. To publish the sample workbooks, set <code>publishSamples</code> parameter to <code>true</code>. This option is equivalent to the <span class="api-command-ref">tabcmd</span> command-line utility option, <code>publishsamples</code>. For more information, see <a href="https://help.tableau.com/current/server/en-us/tabcmd_cmd.htm" target="_blank">tabcmd</a>.</td></tr></tbody></table>

#### Request Body

Copy

```
<tsRequest>  <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e"    parentProjectId="afe6f0b8-cb10-11e7-9fd4-db8b61369aa5"    name="Update-Project-Name"    description="This is the new description after the project update"    contentPermissions="ManagedByOwner"    controllingPermissionsProjectId="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" >      <owner id="abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"/>  </project></tsRequest>
```

Copy

```
{  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }}
```

#### Attribute Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col style="width:32%;">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><code>project id</code>
                                        </td>
                                        <td>
                                            <p>(Required) The LUID of the project being updated.</p>
                                            <p> For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults <a href="https://help.tableau.com/current/server/en-us/permissions_projects.htm#LockProject" target="_blank">Windows</a> |  <a href="https://help.tableau.com/current/server-linux/en-us/permissions_projects.htm#LockProject" target="_blank">Linux</a>.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>project name</code>
                                        </td>
                                        <td>(Optional) The new name for the project.</td>
                                    </tr>
                                    <tr>
                                        <td><code>project description</code>
                                        </td>
                                        <td>(Optional) The new description for the project.</td>
                                    </tr>
                                    <tr>
                                        <td><code>project parentProjectId</code>
                                        </td>
                                        <td>
                                            <p>(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.</p>
                                            <p>To update a project without changing its placement in the project hierarchy, omit the <b>parentProjectId</b> attribute.
									To move a project to the top of the project hierarchy, provide an empty string ("") for
									the <b>parentProjectId</b> attribute.</p>
                                            <p>For information about how permissions are evaluated in project hierarchies, see
								    <a href="https://help.tableau.com/current/server/en-us/permissions_projects.htm">Project Permissions States and Defaults</a>.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>project contentPermissions</code>
                                        </td>
                                        <td>
                                            <p>(Optional) This value controls user permissions in a project, however, if the project is nested within a project
									with more restrictive policies, it will inherit those permissions and these settings
									will have no effect. The functional permissions of a project, including those it inherits, are available in value of
								<span class="api-command-ref">contentPermission</span> in the response body from a request to create, update, or query a project.</p>
                                            <ul>
                                                <li><span class="api-command-ref">LockedToProject</span> to lock permissions so that users cannot overwrite
									the default permissions set for the project</li>
                                                <li><span class="api-command-ref">ManagedByOwner</span> to allow users to manage permissions for content
									that they own</li>
                                                <li><span class="api-command-ref">LockedToProjectWithoutNested</span> to lock the permissions of a parent
									project, but not those of its child projects.</li>
                                            </ul>
                                            <p>The default is <span class="api-command-ref">ManagedByOwner</span>. For more information, see
									<a href="https://help.tableau.com/current/server/en-us/permissions.htm#lock-content-permissions" target="_blank">Lock Content Permissions</a>.
								</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>project parentProjectId</code>
                                        </td>
                                        <td>
                                            <p>(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.</p>
                                            <p>To update a project without changing its placement in the project hierarchy, omit the <b>parentProjectId</b> attribute.
									To move a project to the top of the project hierarchy, provide an empty string ("") for
								the <b>parentProjectId</b> attribute.</p>
                                            <p>For information about how permissions are evaluated in project hierarchies, see
								<a href="https://help.tableau.com/current/server/en-us/permissions_projects.htm">Project Permissions States and Defaults</a>.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>owner id</code>
                                        </td>
                                        <td>The LUID of the user that owns the project.</td>
                                    </tr>
                                </tbody>
                            </table>

#### cURL Example

`curl --request PUT "https://myServer/api/3.21/sites/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e/projects/ds2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e70" --header "Content-Type: application/xml" --header "X-Tableau-Auth;" --data "<tsRequest> <project parentProjectId='ab2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5ee0' name='new-name' description='new-description' contentPermissions='ManagedByOwner' /> </tsRequest>"`

#### Response Code

200

#### Response Body

Copy

```
<tsResponse>  <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e"    parentProjectId="afe6f0b8-cb10-11e7-9fd4-db8b61369aa5"    name="Update-Project-Name"    description="This is the new description after the project update"    contentPermissions="ManagedByOwner"    controllingPermissionsProjectId="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" >      <owner id="abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"/>  </project></tsResponse>
```

Copy

```
{  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400008</td><td>Bad request</td><td>The request cannot set content permissions to <span class="api-command-ref">LockedToProjectWithoutNested</span> for a REST API version lower than 3.8.</td></tr><tr><td>403</td><td>403005</td><td>Update forbidden</td><td>Attempt to rename the default project, which cannot be renamed.</td></tr><tr><td>403</td><td>403008</td><td>Insufficient storage on site</td><td>The samples could not be published because there is not enough storage space remaining on the server to accommodate the samples.</td></tr><tr><td>403</td><td>403004</td><td>Update forbidden</td><td>A non-administrative user tried to update the project, but does not have permissions to update the project.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404009</td><td>Project ID mismatch</td><td>The request body contains a project ID (which is optional) and it doesn't match the ID in the URI.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the URI doesn't correspond to an existing project.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr><tr><td>409</td><td>409006</td><td>Project name conflict</td><td>The project name in the request already belongs to the specified site. For the purpose of uniqueness checks, project names are case-insensitive.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).