## Add a task to favorites

`POST /v1/tasks/:taskId/favorite`

Adds a task to the personal favorites list of the user the key acts on behalf of. The action is available to a participant with view access to the task — edit rights on the task are not required, unlike [`PATCH /v1/tasks/:id`](./update.md).

## Parameters

| Parameter | In | Type | Required | Description |
|----------|---|-----|:-----:|----------|
| `taskId` | path | integer | yes | Task ID. List: `GET /v1/tasks` |

The request body is empty.

## Examples

### curl — personal key

```bash
curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
  https://vibecode.bitrix24.com/v1/tasks/289/favorite
```

### curl — OAuth application

```bash
curl -X POST -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.com/v1/tasks/289/favorite
```

### JavaScript — personal key

```javascript
const res = await fetch(
  `https://vibecode.bitrix24.com/v1/tasks/${taskId}/favorite`,
  { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const body = await res.json()
console.log(body.data.favorite) // true
```

### JavaScript — OAuth application

```javascript
const res = await fetch(
  `https://vibecode.bitrix24.com/v1/tasks/${taskId}/favorite`,
  {
    method: 'POST',
    headers: {
      'X-Api-Key': 'YOUR_APP_KEY',
      'Authorization': 'Bearer USER_SESSION_TOKEN',
    },
  }
)
```

## Response fields

| Field | Type | Description |
|------|-----|----------|
| `success` | boolean | `true` on successful addition |
| `data.taskId` | integer | Task ID |
| `data.favorite` | boolean | `true` — the task is in favorites |

## Response example

```json
{
  "success": true,
  "data": {
    "taskId": 289,
    "favorite": true
  }
}
```

## Error response example

404 — the task was not found or is inaccessible:

```json
{
  "success": false,
  "error": {
    "code": "TASK_NOT_FOUND",
    "message": "Task 99999999 not found or not accessible."
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|----------|
| 400 | `INVALID_PARAMS` | `taskId` in the path is not a positive integer |
| 401 | `MISSING_API_KEY` | The `X-Api-Key` header was not provided |
| 401 | `INVALID_API_KEY` | Invalid or expired key |
| 401 | `TOKEN_MISSING` | The key has no linked authorization tokens |
| 403 | `SCOPE_DENIED` | The key lacks the `task` scope |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | A read-only key — the action changes data and is blocked |
| 404 | `TASK_NOT_FOUND` | The task was not found or is inaccessible to the user |

Full list of common API errors — [Errors](/docs/errors).

## Known specifics

- **Each user has their own list.** Favorites are tied to the user the key acts on behalf of. The same task can be in one employee's favorites and absent from another's.
- **The response is a slim confirmation, not the full task.** Read the full task fields via [`GET /v1/tasks/:id`](./get.md).

## See also

- [Remove a task from favorites](./unfavorite.md)
- [Pin a task](./pin.md)
- [Tasks](../tasks.md)
