Skip to main content

Overview

The Boards API provides complete control over board creation, modification, layout management, and permissions.

Queries

getPublicBoards

Retrieve all public boards.
const boards = await api.board.getPublicBoards.query();
Authentication: Public
id
string
Board unique identifier
name
string
Board name
logoImageUrl
string | null
URL to board logo image

getAllBoards

Get all boards accessible to the current user.
const boards = await api.board.getAllBoards.query();
Authentication: Public (returns user-accessible boards if authenticated)
id
string
Board ID
name
string
Board name
logoImageUrl
string | null
Logo image URL
isPublic
boolean
Whether the board is publicly accessible
creator
object
Board creator information
isHome
boolean
Whether this is the user’s home board
isMobileHome
boolean
Whether this is the user’s mobile home board

Search for boards by name.
const results = await api.board.search.query({
  query: "dashboard",
  limit: 10,
});
Parameters:
query
string
required
Search query string
limit
number
default:10
Maximum results to return (1-100)

getBoardByName

Retrieve a complete board by name.
const board = await api.board.getBoardByName.query({
  name: "MyDashboard",
});
Parameters:
name
string
required
Board name (alphanumeric, hyphens, and underscores only)
Returns: Complete board with sections, items, layouts, and integrations

getHomeBoard

Get the user’s home board (respects device type).
const homeBoard = await api.board.getHomeBoard.query();
Authentication: Public Behavior:
  • Returns user’s designated home board
  • Falls back to mobile home board on mobile devices
  • Falls back to group home board if user hasn’t set one
  • Returns server default if no other options available

exists

Check if a board with the given name exists.
const exists = await api.board.exists.query("MyBoard");
// Returns: true or false
Permission Required: board-create

getBoardPermissions

Get permission configuration for a board.
const permissions = await api.board.getBoardPermissions.query({
  id: "board-id",
});
Permission Required: Board full access
inherited
array
Permissions inherited from groups with global permissions
users
array
User-specific permissions for this board
groups
array
Group-specific permissions for this board

Mutations

createBoard

Create a new board.
const result = await api.board.createBoard.mutate({
  name: "MyDashboard",
  columnCount: 12,
  isPublic: false,
});
Permission Required: board-create Parameters:
name
string
required
Board name (1-255 characters, alphanumeric, hyphens, underscores)
columnCount
number
required
Number of grid columns (1-24)
isPublic
boolean
required
Whether the board is publicly accessible
Returns:
boardId
string
ID of the newly created board

duplicateBoard

Duplicate an existing board with a new name.
await api.board.duplicateBoard.mutate({
  id: "source-board-id",
  name: "MyBoardCopy",
});
Permission Required: board-create + view access to source board Parameters:
id
string
required
ID of the board to duplicate
name
string
required
Name for the new board
Notes:
  • Duplicates all sections, items, and layouts
  • Only copies integrations the user has access to
  • User becomes the creator of the new board

renameBoard

Rename an existing board.
await api.board.renameBoard.mutate({
  id: "board-id",
  name: "NewBoardName",
});
Permission Required: Board full access

changeBoardVisibility

Change whether a board is public or private.
await api.board.changeBoardVisibility.mutate({
  id: "board-id",
  visibility: "public", // or "private"
});
Permission Required: Board full access
Cannot make server home boards private

deleteBoard

Permanently delete a board.
await api.board.deleteBoard.mutate({
  id: "board-id",
});
Permission Required: Board full access
This action is irreversible. All sections, items, and layouts will be deleted.

saveBoard

Save changes to a board’s sections and items.
await api.board.saveBoard.mutate({
  id: "board-id",
  sections: [
    {
      id: "section-id",
      kind: "empty",
      yOffset: 0,
      layouts: [...],
    },
  ],
  items: [
    {
      id: "item-id",
      kind: "weather",
      options: { ... },
      advancedOptions: { ... },
      integrationIds: [],
      layouts: [...],
    },
  ],
});
Permission Required: Board modify access Parameters:
id
string
required
Board ID
sections
array
required
Array of section configurations
items
array
required
Array of widget/item configurations

saveLayouts

Manage responsive layouts for a board.
await api.board.saveLayouts.mutate({
  id: "board-id",
  layouts: [
    {
      id: "layout-id",
      name: "Desktop",
      columnCount: 12,
      breakpoint: 1200,
    },
    {
      id: "layout-id-2",
      name: "Mobile",
      columnCount: 4,
      breakpoint: 0,
    },
  ],
});
Permission Required: Board modify access
layouts[].name
string
required
Layout name (max 32 characters)
layouts[].columnCount
number
required
Number of columns (1-24)
layouts[].breakpoint
number
required
Minimum viewport width in pixels (0-32767)

savePartialBoardSettings

Update board appearance and behavior settings.
await api.board.savePartialBoardSettings.mutate({
  id: "board-id",
  pageTitle: "My Dashboard",
  primaryColor: "#FF5733",
  opacity: 85,
  customCss: ".widget { border-radius: 8px; }",
});
Permission Required: Board modify access Available Settings:
pageTitle
string | null
Board page title
metaTitle
string | null
Meta title for SEO
logoImageUrl
string | null
Board logo URL
faviconImageUrl
string | null
Custom favicon URL
backgroundImageUrl
string | null
Background image URL
backgroundImageAttachment
'fixed' | 'scroll'
Background attachment behavior
backgroundImageRepeat
'no-repeat' | 'repeat' | 'repeat-x' | 'repeat-y'
Background repeat mode
backgroundImageSize
'cover' | 'contain' | 'auto'
Background size mode
primaryColor
string
Primary theme color (hex format)
secondaryColor
string
Secondary theme color (hex format)
opacity
number
Widget opacity (0-100)
iconColor
string | null
Custom icon color (hex format)
itemRadius
'xs' | 'sm' | 'md' | 'lg' | 'xl'
Border radius for widgets
customCss
string
Custom CSS (max 16,384 characters)
disableStatus
boolean
Disable status indicators

setHomeBoard

Set a board as the user’s home board.
await api.board.setHomeBoard.mutate({
  id: "board-id",
});
Permission Required: Board view access

setMobileHomeBoard

Set a board as the user’s mobile home board.
await api.board.setMobileHomeBoard.mutate({
  id: "board-id",
});
Permission Required: Board view access

saveUserBoardPermissions

Configure user-specific permissions for a board.
await api.board.saveUserBoardPermissions.mutate({
  entityId: "board-id",
  permissions: [
    {
      principalId: "user-id-1",
      permission: "view",
    },
    {
      principalId: "user-id-2",
      permission: "modify",
    },
  ],
});
Permission Required: Board full access Permission Levels:
  • view - Can view the board
  • modify - Can view and modify the board
  • full - Full control including permissions and deletion

saveGroupBoardPermissions

Configure group-specific permissions for a board.
await api.board.saveGroupBoardPermissions.mutate({
  entityId: "board-id",
  permissions: [
    {
      principalId: "group-id",
      permission: "view",
    },
  ],
});
Permission Required: Board full access

Examples

Create a Complete Board

// 1. Create the board
const { boardId } = await api.board.createBoard.mutate({
  name: "TeamDashboard",
  columnCount: 12,
  isPublic: false,
});

// 2. Configure appearance
await api.board.savePartialBoardSettings.mutate({
  id: boardId,
  pageTitle: "Team Dashboard",
  primaryColor: "#2563eb",
  secondaryColor: "#7c3aed",
  opacity: 90,
});

// 3. Add sections and widgets
await api.board.saveBoard.mutate({
  id: boardId,
  sections: [
    {
      id: createId(),
      kind: "empty",
      yOffset: 0,
      layouts: [],
    },
  ],
  items: [
    {
      id: createId(),
      kind: "weather",
      options: {
        location: { latitude: 40.7128, longitude: -74.0060 },
      },
      advancedOptions: {},
      integrationIds: [],
      layouts: [
        {
          layoutId: "base-layout-id",
          sectionId: "section-id",
          xOffset: 0,
          yOffset: 0,
          width: 3,
          height: 2,
        },
      ],
    },
  ],
});

Copy Board with Modifications

// Duplicate board
await api.board.duplicateBoard.mutate({
  id: "original-board-id",
  name: "DevEnvironmentBoard",
});

// Get the new board
const boards = await api.board.getAllBoards.query();
const newBoard = boards.find(b => b.name === "DevEnvironmentBoard");

// Customize it
await api.board.savePartialBoardSettings.mutate({
  id: newBoard.id,
  primaryColor: "#10b981",
});

Build docs developers (and LLMs) love