# Rename, lock, reorder or move a board

> PATCH /boards/{boardId}

Source: https://mockflow.com/developers/reference/boards/update-board

**PATCH** `https://api.mockflow.com/v1/boards/{boardId}`  
Scopes: `boards:write`

**curl**

```bash
curl https://api.mockflow.com/v1/boards/brd_3f9e2a \
  -X PATCH \
  -H "Authorization: Bearer $MOCKFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "title": "Q4 Launch Planning",
  "spaceId": "spc_92kd",
  "locked": false,
  "position": 0
}'
```

**JavaScript**

```javascript
const response = await fetch("https://api.mockflow.com/v1/boards/brd_3f9e2a", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.MOCKFLOW_API_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
  "title": "Q4 Launch Planning",
  "spaceId": "spc_92kd",
  "locked": false,
  "position": 0
})
});

const data = await response.json();
```

**Python**

```python
import os, requests

response = requests.patch(
    "https://api.mockflow.com/v1/boards/brd_3f9e2a",
    headers={"Authorization": f"Bearer {os.environ['MOCKFLOW_API_KEY']}"},
    json={
  "title": "Q4 Launch Planning",
  "spaceId": "spc_92kd",
  "locked": False,
  "position": 0
},
)

response.raise_for_status()
data = response.json()
```

**200**

```json
{
  "id": "brd_3f9e2a",
  "title": "Q4 Launch Planning",
  "spaceId": "spc_92kd",
  "url": "https://app.mockflow.com/board/3f9e2a",
  "publicUrl": "https://app.mockflow.com/board/brd_3f9e2a",
  "role": "owner"
}
```

**402**

```json
{
  "error": {
    "code": "plan_limit",
    "message": "AI credits exhausted. 0 of 2000 remaining this month.",
    "upgradeUrl": "https://mockflow.com/pricing"
  },
  "requestId": "req_01ja"
}
```

**429**

```json
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests.",
    "docsUrl": "https://mockflow.com/developers/concepts/errors#rate_limited"
  },
  "requestId": "req_45d49816999bac40"
}
```

Rename and lock need admin. Lock makes the board read only for everyone, the padlock in the dashboard, and needs Plus or Max. Move is the owning workspace's and needs Plus or Max; as in the app, every direct board share is dropped when a board moves, and access then follows the destination space. Moving into a space another workspace owns is not supported.

### Authorization

- `Authorization` (string, required): `Bearer <key>`. The key needs `boards:write` scope. Create and manage keys in the [developer console](/developers/console/); what each scope unlocks is on the [scopes page](/developers/concepts/scopes).

### Path parameters

- `boardId` (string, required)

### Body

- `title` (string)
- `spaceId` (string | null): A space id, or null / `default` for the default space.
- `locked` (boolean)
- `position` (integer)

### Response

- `id` (string)
- `title` (string)
- `spaceId` (string | null): The design space, or null for the default space.
- `url` (string): Opens the board in the editor.
- `publicUrl` (string | null): The public viewer link, when the public link is on.
- `role` (enum<string>): The product's roles. Owner is the workspace that holds the board or space and cannot be granted or transferred. Admin can rename and share, editor can edit, reviewer can view, export and add comment items. There is no viewer role and no pending state. One of `owner`, `admin`, `editor` or `reviewer`.
- `locked` (boolean): Locked boards are read only for everyone.
- `position` (integer | null): Manual order inside the space, lowest first.
- `createdBy` (string)
- `createdAt` (string)
- `updatedAt` (string)
- `deletedAt` (string | null): Set while the board is in the trash.

### Errors

- 402 `plan_limit`: The workspace plan does not allow this, or AI credits are exhausted.
- 429 `rate_limited`: Too many requests.
