# Edit a board

> Rename a board or change its description.

Canonical page: https://www.rundiffusion.com/docs/api/boards/update
Endpoint: PATCH /api/v2/boards/{board_id}
Authorization: OAuth device flow or Personal API Access Token or Company API Access Token

---

Changes a board's own details. Changing what is on it starts with
[Add a board node](/docs/api/boards/nodes-create), and who can reach it is
[Set board access settings](/docs/api/boards/access): `access_level` is not
editable here.

`PATCH /api/v2/boards/{board_id}`

Authorization: OAuth device flow or Personal API Access Token or Company API Access Token

## Who can edit a board

Editing follows the app exactly. You may edit a board if any of these is true:

- you own it,
- you hold **Can manage everyone's generations and boards**
  (`MANAGE_ALL_GENERATIONS`),
- it is `SHARED` or `RESTRICTED` and you hold **Can manage Shared assets**
  (`SHARE_ASSETS`).

That last one is what lets a team curate shared boards without making everyone an
owner. It does not extend to deleting: see
[Delete a board](/docs/api/boards/delete).

The same rule governs every write to a board's contents, so the node endpoints
point back here rather than restating it.

## Request

**Headers**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `Authorization` | string | Yes | Bearer token. This endpoint accepts an OAuth device flow token, a Personal API Access Token, or a Company API Access Token. See [Authentication](/docs/api/authentication). |

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `board_id` | string | Yes | The board to edit. |

Send only what you are changing. At least one field is required, so an empty body
is a `400` rather than a silent no-op.

**Body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `title` | string | No | New board name, up to 100 characters. Cannot be blank when sent. |
| `description` | string \| null | No | New description, up to 1000 characters. Send null or an empty string to clear it. |

cURL:

```bash
curl -X PATCH https://api2.rundiffusion.com/api/v2/boards/$BOARD_ID \
  -H "Authorization: Bearer $RUNDIFFUSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title": "Hero shots v2"}'
```

JavaScript:

```javascript
await fetch(`https://api2.rundiffusion.com/api/v2/boards/${boardId}`, {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${process.env.RUNDIFFUSION_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ title: 'Hero shots v2' }),
});
```

Python:

```python
requests.patch(
    f"{BASE}/boards/{board_id}",
    headers=HEADERS,
    json={"title": "Hero shots v2"},
)
```

## Response

`200 OK` with the full board, nodes and members included, so a client that
renders the board can use the response directly instead of refetching. The fields
are the ones [Get a board](/docs/api/boards/get) documents.

## Errors

**Status codes**

| Name | Type | Description |
| --- | --- | --- |
| `400` | INVALID_REQUEST | A blank title, a field over its length limit, or a request with nothing in it. |
| `401` | TOKEN_INVALID | Missing or invalid credential. |
| `403` | PERMISSION_DENIED | You can see the board but may not edit it. |
| `404` | BOARD_NOT_FOUND | No such board, or not one this credential can see. |
| `429` | RATE_LIMITED | Too many requests. Board writes have a tighter budget than reads. See [Rate limits](/docs/api/rate-limits#boards). |
