# Update a project (PUT; partial)

PUT`/v1/projects/{project_id}`[Token scope: `projects:write`](https://developers.tasksmate.indrasol.com/guides/authentication/#scopes)Deprecated — use [projects.update](https://developers.tasksmate.indrasol.com/reference/operations/projectsupdate/)

Request

**curl**


```bash
curl -X PUT "https://tasksmate-fdfsarhnf5gacfb7.eastus-01.azurewebsites.net/v1/projects/<project_id>" \
  -H "Authorization: Bearer $TASKSMATE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"string","status":"planning"}'
```

**Python**


```python
from tasksmate import TasksMate

tm = TasksMate()  # reads TASKSMATE_TOKEN
result = tm.projects.replace("<project_id>", {"name": "string", "status": "planning"})
print(result)
```

Response 200

```json
{
  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
  "name": "Website Redesign",
  "description": "Redesign the company website.",
  "metadata": {
    "budget": 10000
  },
  "status": "not_started",
  "priority": "high",
  "start_date": "2024-07-01",
  "end_date": "2024-12-31",
  "created_by": "string",
  "updated_by": "string",
  "is_active": true,
  "delete_reason": "string",
  "owner": "string",
  "team_members": [
    "string"
  ],
  "visibility": "public",
  "team_id": "string",
  "project_id": "string",
  "editors_can_add_members": false,
  "leads": [
    {
      "user_id": "string",
      "username": "string",
      "assigned_by": "string",
      "assigned_at": "2026-09-25T12:00:00Z"
    }
  ],
  "created_at": "2026-09-25T12:00:00Z",
  "updated_at": "2026-09-25T12:00:00Z",
  "deleted_at": "2026-09-25T12:00:00Z"
}
```

**Use PATCH** (JSON merge-patch, the documented verb). PUT is the same partial update, kept for older clients.

## Authorizations

-   **[bearerAuth](https://developers.tasksmate.indrasol.com/reference/#bearerauth)**
-   **[TasksMateToken](https://developers.tasksmate.indrasol.com/reference/#tasksmatetoken)**

## Parameters

### Path Parameters

**project\_id**

required

_Project Id_

string

### Header Parameters

**If-Match**

string

The `ETag` you read; a stale one is a 412 and nothing is written.

## Request Bodyrequired

application/json

_ProjectUpdate_

The request body of `projects.replace` and `projects.update`.

object

**org\_id**

Any of:

**string**


string

**null**


null

**name**

Any of:

**string**


string

**null**


null

**description**

Any of:

**string**


string

**null**


null

**metadata**

Any of:

**object**
object

**_key_**

additional properties

any

**null**


null

**status**

Any of:

**ProjectStatusEnum**
_ProjectStatusEnum_

Project status enum

string

Allowed values: planning in\_progress not\_started active completed archived on\_hold blocked paused

**null**


null

**priority**

Any of:

**PriorityEnum**
_PriorityEnum_

Priority enum for projects and tasks

string

Allowed values: high medium low none critical

**null**


null

**start\_date**

Any of:

**string**


string format: date

**null**


null

**end\_date**

Any of:

**string**


string format: date

**null**


null

**is\_active**

Any of:

**boolean**


boolean

**null**


null

**delete\_reason**

Any of:

**string**


string

**null**


null

**owner**

Any of:

**string**


string

**null**


null

**team\_members**

Any of:

**Array<string>**


Array<string>

**null**


null

**visibility**

Any of:

**ProjectVisibilityEnum**
_ProjectVisibilityEnum_

Who can see a project: `public` — every member of the organization; `private` — the project’s members and org admins. Also the organization’s default for new projects.

string

Allowed values: public private

**null**


null

**editors\_can\_add\_members**

Any of:

**boolean**


boolean

**null**


null

**team\_id**

Any of:

**string**


string

**null**


null

**owner\_designation**

Any of:

**string**


string

**null**


null

**team\_member\_designations**

Any of:

**Array<object>**


Array<object>

_TeamMemberDesignation_

Part of `ProjectCreate` and `ProjectUpdate`.

object

**id**

required

_Id_

Team member user ID

string

**designation**

Any of:

**string**


string

**null**


null

**null**


null

Example

```json
{
  "org_id": "string",
  "name": "string",
  "description": "string",
  "metadata": {},
  "status": "planning",
  "priority": "high",
  "start_date": "2026-09-25",
  "end_date": "2026-09-25",
  "is_active": false,
  "delete_reason": "string",
  "owner": "string",
  "team_members": [
    "string"
  ],
  "visibility": "public",
  "editors_can_add_members": false,
  "team_id": "string",
  "owner_designation": "string",
  "team_member_designations": [
    {
      "id": "string",
      "designation": "string"
    }
  ]
}
```

## Responses

### 200

Successful Response

application/json

_ProjectInDB_

Returned by `projects.read`, `projects.replace` and `projects.update`.

object

**org\_id**

required

_Org Id_

Organization ID (UUID)

string

**name**

required

_Name_

Project name

string

**description**

Any of:

**string**


string

**null**


null

**metadata**

Any of:

**object**
object

**_key_**

additional properties

any

**null**


null

**status**

Any of:

**ProjectStatusEnum**
_ProjectStatusEnum_

Project status enum

string

Allowed values: planning in\_progress not\_started active completed archived on\_hold blocked paused

**null**


null

**priority**

Any of:

**PriorityEnum**
_PriorityEnum_

Priority enum for projects and tasks

string

Allowed values: high medium low none critical

**null**


null

**start\_date**

Any of:

**string**


string format: date

**null**


null

**end\_date**

Any of:

**string**


string format: date

**null**


null

**created\_by**

Any of:

**string**


string

**null**


null

**updated\_by**

Any of:

**string**


string

**null**


null

**is\_active**

Any of:

**boolean**


boolean

**null**


null

**delete\_reason**

Any of:

**string**


string

**null**


null

**owner**

Any of:

**string**


string

**null**


null

**team\_members**

Any of:

**Array<string>**


Array<string>

**null**


null

**visibility**

Any of:

**ProjectVisibilityEnum**
_ProjectVisibilityEnum_

Who can see a project: `public` — every member of the organization; `private` — the project’s members and org admins. Also the organization’s default for new projects.

string

Allowed values: public private

**null**


null

**team\_id**

Any of:

**string**


string

**null**


null

**project\_id**

required

_Project Id_

string

**editors\_can\_add\_members**

_Editors Can Add Members_

When true, project editors may add and remove members and change their roles. Set by the project owner or an org admin.

boolean

**leads**

_Leads_

The project’s leads (there can be several); optional, usually empty.

Array<object>

_ProjectLeadOut_

One lead of a project: who, who set them, and when. A lead is distinct from the owner — the owner administers the project, a lead is accountable for delivering it.

object

**user\_id**

required

_User Id_

string

**username**

Any of:

**string**


string

**null**


null

**assigned\_by**

Any of:

**string**


string

**null**


null

**assigned\_at**

Any of:

**string**


string format: date-time

**null**


null

**created\_at**

required

Any of:

**string**


string format: date-time

**null**


null

**updated\_at**

required

Any of:

**string**


string format: date-time

**null**


null

**deleted\_at**

required

Any of:

**string**


string format: date-time

**null**


null

Example

```json
{
  "org_id": "a1b2c3d4-5678-1234-9abc-def012345678",
  "name": "Website Redesign",
  "description": "Redesign the company website.",
  "metadata": {
    "budget": 10000
  },
  "status": "not_started",
  "priority": "high",
  "start_date": "2024-07-01",
  "end_date": "2024-12-31",
  "created_by": "string",
  "updated_by": "string",
  "is_active": true,
  "delete_reason": "string",
  "owner": "string",
  "team_members": [
    "string"
  ],
  "visibility": "public",
  "team_id": "string",
  "project_id": "string",
  "editors_can_add_members": false,
  "leads": [
    {
      "user_id": "string",
      "username": "string",
      "assigned_by": "string",
      "assigned_at": "2026-09-25T12:00:00Z"
    }
  ],
  "created_at": "2026-09-25T12:00:00Z",
  "updated_at": "2026-09-25T12:00:00Z",
  "deleted_at": "2026-09-25T12:00:00Z"
}
```

### 400

Bad request — a query parameter outside what the operation accepts (`invalid-parameter`)

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "Bad request",
  "status": 400,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

### 401

Missing or invalid bearer token

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "Missing or invalid bearer token",
  "status": 401,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

### 403

Authenticated, but not allowed

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "Authenticated, but not allowed",
  "status": 403,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

### 404

Not found

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "Not found",
  "status": 404,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

### 409

Conflict (a duplicate, or an `Idempotency-Key` still in flight)

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "Conflict (a duplicate, or an `Idempotency-Key` still in flight)",
  "status": 409,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

### 412

`If-Match` does not match the current `ETag`

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "`If-Match` does not match the current `ETag`",
  "status": 412,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

### 422

The body or query did not validate (`validation`), or an `Idempotency-Key` was reused

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "The body or query did not validate (`validation`), or an `Idempotency-Key` was reused",
  "status": 422,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

### 429

An access token over its per-minute limit (`rate-limit`; see `Retry-After`)

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "An access token over its per-minute limit (`rate-limit`; see `Retry-After`)",
  "status": 429,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

### 500

Unexpected server error — quote `request_id`

application/problem+json

_Problem_

An RFC 9457 problem details object — the body of every error response. `detail` is the human-readable explanation; `request_id` identifies the request for support.

object

**type**

required

`about:blank` or a `urn:tasksmate:problem:*` identifier

string

Allowed values: about:blank urn:tasksmate:problem:validation urn:tasksmate:problem:invalid-parameter urn:tasksmate:problem:precondition-failed urn:tasksmate:problem:idempotency-key-reused urn:tasksmate:problem:idempotency-key-in-flight urn:tasksmate:problem:idempotency-key-invalid urn:tasksmate:problem:rate-limit urn:tasksmate:problem:internal urn:tasksmate:problem:token-invalid urn:tasksmate:problem:token-expired urn:tasksmate:problem:token-revoked urn:tasksmate:problem:insufficient-scope urn:tasksmate:problem:test-token-read-only urn:tasksmate:problem:token-policy urn:tasksmate:problem:url-refused

**title**

required

string

**status**

required

integer

**detail**

required

Human-readable explanation (a string; for a 422, the list of validation errors)

**instance**

required

string

**request\_id**

required

string

**errors**

Structured failures: validation errors, or `{loc, msg, allowed}` for a bad parameter

Array<object>

object

Example

```json
{
  "type": "about:blank",
  "title": "Unexpected server error",
  "status": 500,
  "detail": "…",
  "instance": "/v1/…",
  "request_id": "9b2f1c1e-8c1a-4a53-9f9e-0f5f1f2d7c11"
}
```

---
Source: https://developers.tasksmate.indrasol.com/reference/operations/projectsreplace/
