> ## Documentation Index
> Fetch the complete documentation index at: https://developers.bottari.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a row

> Update a row's properties, trash state, archive state, lock, icon, and cover. Requires Update content.

Updates a row or subpage. Requires **Update content**. Only rows the integration can read can be updated. The last editor becomes the integration bot.

Only the keys you send change. An empty body changes nothing and returns 200. Locked rows and databases can still be updated.

**Authorization** `string` *required*

`Bearer <token>`. See [Tokens](https://developers.bottari.ai/auth/tokens.md).

**Bottari-Version** `string`

Optional. Only `2026-03-11` is accepted. Without it, the current version is used. A different value returns 400.

**id** `string` *required*

The ID of a row or subpage.

**properties** `object`

Values keyed by property name or ID. See [Property values](https://developers.bottari.ai/api-reference/property-values.md). A subpage only accepts `title`.

**in\_trash** `boolean`

`true` moves it to the trash, and `false` restores it. Subpages under the row move with it. Other rows linked as sub-items don't.

**is\_archived** `boolean`

Archives or unarchives. Archived rows are left out of default queries.

**is\_locked** `boolean`

Locks or unlocks.

**icon** `object | null`

Accepts `emoji`, `custom_emoji`, `icon`, `file` (only the current icon's image), and `null`. Icon names can be up to 26 characters and aren't otherwise checked. `external` returns 400.

**cover** `object | null`

Accepts `external` (an http(s) URL), `file` (only the current cover's image), and `null`.

## Trash rules

* A trashed row only accepts `in_trash: false`. Other writes return 400 `Can't edit block that is archived. You must unarchive the block before editing.`
* A row in a trashed database can't be updated. The response is the same 400.
* A row holding a subpage or inline database row the integration can't read can't be trashed or restored. The response is 403.
* A subpage whose parent is in the trash can't be restored. The response is 400.

> [!WARNING]
>
> Restoring, writing properties, and trashing are saved in turn. Values are validated first, but a rare storage error can leave only the earlier steps applied.

## Response

The updated `page` object, with all properties.

## Errors

| Status | `code` | Cause |
| - | - | - |
| 400 | `validation_error` | A value or body key is wrong, the target is in the trash, or a value is over 768,000 bytes. |
| 400 | `invalid_request` | A subpage couldn't be returned to its parent's content. |
| 403 | `restricted_resource` | **Update content** is off, the database has a task agent attached, or the row holds content the integration can't read. |
| 404 | `object_not_found` | The integration can't read the row, or an ID in a people or relation value can't be found. |

See [Common rules](https://developers.bottari.ai/api-reference/overview.md#errors) for shared errors.

```bash curl theme={null}
curl https://api.bottari.ai/v1/pages/exampleRow01 \
  -X PATCH \
  -H "Authorization: Bearer $BOTTARI_TOKEN" \
  -H "Bottari-Version: 2026-03-11" \
  -H "Content-Type: application/json" \
  -d '{
    "properties": {
      "Done": {
        "checkbox": true
      },
      "Team": {
        "select": {
          "name": "Ops"
        }
      }
    }
  }'
```

```json 200 theme={null}
{
  "object": "page",
  "id": "exampleRow01",
  "created_time": "2026-01-15T02:30:00.000Z",
  "last_edited_time": "2026-01-15T03:10:00.000Z",
  "created_by": {
    "object": "user",
    "id": "11111111-1111-4111-8111-111111111111"
  },
  "last_edited_by": {
    "object": "user",
    "id": "22222222-2222-4222-8222-222222222222"
  },
  "in_trash": false,
  "cover": null,
  "icon": null,
  "parent": {
    "type": "data_source_id",
    "data_source_id": "exampleDb001",
    "database_id": "exampleDb001"
  },
  "is_archived": false,
  "is_locked": false,
  "properties": {
    "Name": {
      "id": "title",
      "type": "title",
      "title": [
        {
          "type": "text",
          "text": {
            "content": "Review January orders",
            "link": null
          },
          "annotations": {
            "bold": false,
            "italic": false,
            "strikethrough": false,
            "underline": false,
            "code": false,
            "color": "default"
          },
          "plain_text": "Review January orders",
          "href": null
        }
      ]
    },
    "Done": {
      "id": "exampleFld03",
      "type": "checkbox",
      "checkbox": true
    },
    "Team": {
      "id": "exampleFld01",
      "type": "select",
      "select": {
        "id": "exampleOpt01",
        "name": "Ops",
        "color": "blue"
      }
    }
  },
  "url": "https://app.bottari.ai/t/exampleTeam1/p/exampleRow01",
  "public_url": null,
  "request_id": "33333333-3333-4333-8333-333333333333"
}
```

```json 400 theme={null}
{
  "object": "error",
  "status": 400,
  "code": "validation_error",
  "message": "body failed validation: body.properties.Notes.rich_text[0].text.content.length should be ≤ `2000`, instead was `2001`.",
  "request_id": "33333333-3333-4333-8333-333333333333"
}
```

```json 403 theme={null}
{
  "object": "error",
  "status": 403,
  "code": "restricted_resource",
  "message": "Insufficient permissions for this endpoint.",
  "request_id": "33333333-3333-4333-8333-333333333333"
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.