---
sidebar:
  hidden: true
title: roboto.experimental.boards.operations
---
## Module Contents

### CreateBoardRequest

```python
class roboto.experimental.boards.operations.CreateBoardRequest(/, **data: Any)
```

`from roboto.experimental.boards import CreateBoardRequest`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L20-L57)

Bases: `pydantic.BaseModel`

Request body for `POST /v1/boards/create`.

The board is personal: the caller owns it. [`UpdateBoardAccessRequest`](/docs/reference/python-sdk/roboto/experimental/boards/operations#roboto.experimental.boards.operations.UpdateBoardAccessRequest) shares it with the organization.

**Parameters**

- **data** (`Any`)

**Attributes**

- **CreateBoardRequest.board_definition** (`Annotated[dict[str, Any], ValidatedAgainst(BoardDefinition)]`): The board definition as a JSON object, stored as [`board_definition`](/docs/reference/python-sdk/roboto/experimental/boards/record#roboto.experimental.boards.record.BoardRecord.board_definition) describes. A top-level `title` that is a non-empty string must equal `name`, and a request in which they differ fails validation. A definition with no title is stored without one.

  A definition whose top level [`BoardDefinition`](/docs/reference/python-sdk/roboto/experimental/boards/definition#roboto.experimental.boards.definition.BoardDefinition) refuses fails validation: for example, one with an unknown top-level key, a missing `time_range` or `panels`, a `panels` that is not a list, a `stages` that is neither a list nor null, a `title` that is neither a string nor null, or a malformed section or selection. The panels and stages in it are not checked and are stored as given, so the web app can show a broken one beside the rest of the board.

- **CreateBoardRequest.name** (`str`) = `None`: The name the board list and board page show. Must not be empty: an empty name shows nothing in the board list, and the platform keeps a name equal to a definition `title` only while the title is a non-empty string.

#### CreateBoardRequest.validate_definition_top_level()

```python
@classmethod
def validate_definition_top_level(board_definition: dict[str, Any]) -> dict[str, Any]
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L46-L49)

Reject a definition whose top level [`BoardDefinition`](/docs/reference/python-sdk/roboto/experimental/boards/definition#roboto.experimental.boards.definition.BoardDefinition) refuses.

**Parameters**

- **board_definition** (`dict[str, Any]`)

**Returns**

- `dict[str, Any]`

#### CreateBoardRequest.validate_name_and_title_agree()

```python
def validate_name_and_title_agree() -> CreateBoardRequest
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L52-L57)

Reject a `name` that differs from the definition's non-empty `title`.

**Returns**

- `CreateBoardRequest`

### UpdateBoardAccessRequest

```python
class roboto.experimental.boards.operations.UpdateBoardAccessRequest(/, **data: Any)
```

`from roboto.experimental.boards import UpdateBoardAccessRequest`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L148-L158)

Bases: `pydantic.BaseModel`

Request body for `PUT /v1/boards/id/<board_id>/access`.

Shares a board with the organization, permanently: ownership moves to the org principal. The definition and revision stay unchanged. No request makes a shared board personal again; to get a personal board, create a new board from a copy of this board's definition.

**Parameters**

- **data** (`Any`)

**Attributes**

- **UpdateBoardAccessRequest.accessibility** (`Literal[roboto.experimental.boards.record.BoardAccessibility.Organization]`): Must be `organization`, which moves ownership to the org principal. A request for `user` accessibility fails validation.

### UpdateBoardRequest

```python
class roboto.experimental.boards.operations.UpdateBoardRequest(/, **data: Any)
```

`from roboto.experimental.boards import UpdateBoardRequest`

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L60-L145)

Bases: `pydantic.BaseModel`

Request body for `PUT /v1/boards/id/<board_id>`.

Carries a new name, new definition content, or both. [`UpdateBoardAccessRequest`](/docs/reference/python-sdk/roboto/experimental/boards/operations#roboto.experimental.boards.operations.UpdateBoardAccessRequest) changes who can open a board.

**Parameters**

- **data** (`Any`)

**Attributes**

- **UpdateBoardRequest.base_revision** (`Annotated[int, pydantic.Field(ge=0)] | roboto.sentinels.NotSetType`): The revision you loaded ([`revision`](/docs/reference/python-sdk/roboto/experimental/boards/record#roboto.experimental.boards.record.BoardRecord.revision)), not the revision you want.

  Required whenever the request writes definition content: a `board_definition` replacement, or a `name` for a board whose stored definition has a `title` that is a non-empty string, since keeping the two equal rewrites that title. The record you loaded shows which case applies.

  The server compares a supplied base revision with the stored revision, on a rename that writes no definition content as well, and rejects a mismatch with [`RobotoBoardRevisionConflictException`](/docs/reference/python-sdk/roboto/exceptions/domain#roboto.exceptions.domain.RobotoBoardRevisionConflictException), so a save built on an outdated revision cannot erase someone else's edit.

- **UpdateBoardRequest.board_definition** (`Annotated[dict[str, Any], ValidatedAgainst(BoardDefinition)] | roboto.sentinels.NotSetType`): The board definition as a JSON object, replacing the stored one whole. A top-level `title` that is a non-empty string is kept equal to the board's name: with no `name` in the request, the board takes the title as its name. A definition with no title leaves the name alone, and the platform never adds a title.

  A definition whose top level [`BoardDefinition`](/docs/reference/python-sdk/roboto/experimental/boards/definition#roboto.experimental.boards.definition.BoardDefinition) refuses fails validation: for example, one with an unknown top-level key, a missing `time_range` or `panels`, a `panels` that is not a list, a `stages` that is neither a list nor null, a `title` that is neither a string nor null, or a malformed section or selection. The panels and stages in it are not checked and are stored as given, so the web app can show a broken one beside the rest of the board.

- **UpdateBoardRequest.model_config**: Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

- **UpdateBoardRequest.name** (`Annotated[str, pydantic.StringConstraints(min_length=1, max_length=120)] | roboto.sentinels.NotSetType`): The name of the board. Rewrites a `title` the stored definition already has, and never adds one.

  Must not be empty: the platform keeps the name equal to a definition `title` only while the title is a non-empty string, so an empty name written into the title would leave the two unequal, and no later rename could make them equal again. To keep the name, omit the field.

#### UpdateBoardRequest.validate_at_least_one_change()

```python
def validate_at_least_one_change() -> UpdateBoardRequest
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L111-L115)

Reject a request with neither `name` nor `board_definition`, which would change nothing.

**Returns**

- `UpdateBoardRequest`

#### UpdateBoardRequest.validate_base_revision_with_definition()

```python
def validate_base_revision_with_definition() -> UpdateBoardRequest
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L118-L128)

Require `base_revision` with a `board_definition`.

A rename of a board whose stored definition has a title needs one too. The server enforces that case, since only the stored board shows whether the title is there.

**Returns**

- `UpdateBoardRequest`

#### UpdateBoardRequest.validate_definition_top_level()

```python
@classmethod
def validate_definition_top_level(
    board_definition: Union[dict[str, Any], roboto.sentinels.NotSetType],
) -> Union[dict[str, Any], roboto.sentinels.NotSetType]
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L101-L108)

Reject a definition whose top level [`BoardDefinition`](/docs/reference/python-sdk/roboto/experimental/boards/definition#roboto.experimental.boards.definition.BoardDefinition) refuses.

**Parameters**

- **board_definition** (`Union[dict[str, Any], roboto.sentinels.NotSetType]`)

**Returns**

- `Union[dict[str, Any], roboto.sentinels.NotSetType]`

#### UpdateBoardRequest.validate_name_and_title_agree()

```python
def validate_name_and_title_agree() -> UpdateBoardRequest
```

[Source](https://github.com/roboto-ai/roboto-python-sdk/blob/main/src/roboto/experimental/boards/operations.py#L131-L145)

Reject a request whose `name` differs from its definition's non-empty `title`.

The platform keeps the two equal, and such a request gives it no basis for choosing between them.

**Returns**

- `UpdateBoardRequest`
