Workspaces

Workspaces are the top-level container for records, lists, custom fields, and automations. Create, list, and organize them via the workspaceList and createWorkspace operations.


A workspace is the top-level container for work in Blue: it holds lists, records, custom fields, tags, automations, and saved views. Every workspace belongs to one organization. In the API, a workspace is a Workspace object and an organization is an Organization — the GraphQL surface uses those type names throughout.

This section covers creating workspaces, listing and filtering them, renaming, archiving, copying, deleting, and managing the lists inside them.

Operations

OperationGraphQLDescription
Create a workspacecreateWorkspaceCreate a workspace, optionally from a template.
List workspacesworkspaceListFilter, sort, and paginate workspaces.
Rename a workspaceeditWorkspaceChange a workspace’s name (and slug).
Archive a workspacearchiveWorkspaceArchive or unarchive a workspace.
Copy a workspacecopyWorkspaceDuplicate an existing workspace.
Delete a workspacedeleteWorkspacePermanently delete a workspace.
ListstodoLists / createRecordListManage the lists inside a workspace.
TemplatesworkspaceListWork with workspace templates.
ActivityactivityListRead a workspace’s activity log.
Workspace, project, record

“Workspace” is a Workspace in the schema. Likewise a “record” is a Record and an “organization” is an Organization. This page uses the product nouns in prose and the schema names in code.

Key concepts

Structure

A workspace (Workspace) belongs to exactly one organization (Organization). Inside it:

  • Lists (RecordList) group records into columns or stages.
  • Records (Record) are the individual items of work, each owned by a list.
  • Custom fields, tags, automations, and saved views are all scoped to the workspace.

Most workspace-scoped operations require the blue-workspace-id header in addition to the organization headers. Organization (companyId) and workspace (projectId) arguments accept either an ID or a slug.

Categories

Each workspace has a category (ProjectCategory), used for grouping and filtering. It defaults to GENERAL. The complete set of values is:

CRM
CROSS_FUNCTIONAL
CUSTOMER_SUCCESS
DESIGN
ENGINEERING
GENERAL
HR
IT
MARKETING
OPERATIONS
PRODUCT
SALES

Permissions

A user’s access to a workspace is one of the UserAccessLevel values:

LevelAccess
OWNERFull control, including deleting the workspace.
ADMINManage workspace settings, members, and content.
MEMBERCreate and edit records and lists.
CLIENTRestricted access for external collaborators.
COMMENT_ONLYRead content and add comments only.
VIEW_ONLYRead-only access.

The user whose token makes a createWorkspace request is automatically added to the new workspace as its OWNER.

Create a workspace

Use the createWorkspace mutation to create a workspace. Only companyId and name are required; pass templateId to seed the workspace from a template, or category to classify it.

mutation CreateWorkspace {
  createWorkspace(
    input: { companyId: "company_123", name: "Q1 Marketing Campaign", category: MARKETING }
  ) {
    id
    name
    slug
    category
  }
}
{
  "data": {
    "createWorkspace": {
      "id": "clm4n8qwx000008l0g4oxdqn7",
      "name": "Q1 Marketing Campaign",
      "slug": "q1-marketing-campaign",
      "category": "MARKETING"
    }
  }
}

createWorkspace returns a nullable Workspace. The workspace name is capped at 50 characters. See Create a workspace for the full input reference, including folderId, description, color, icon, and coverConfig.

List workspaces

Use the workspaceList query to filter, sort, and paginate workspaces. The filter’s companyIds is required; everything else is optional.

query ListWorkspaces {
  workspaceList(
    filter: { companyIds: ["company_123"], archived: false }
    sort: [updatedAt_DESC]
    take: 20
  ) {
    items {
      id
      name
      slug
      category
      archived
      updatedAt
    }
    pageInfo {
      totalItems
      hasNextPage
    }
  }
}
{
  "data": {
    "workspaceList": {
      "items": [
        {
          "id": "clm4n8qwx000008l0g4oxdqn7",
          "name": "Q1 Marketing Campaign",
          "slug": "q1-marketing-campaign",
          "category": "MARKETING",
          "archived": false,
          "updatedAt": "2026-05-29T10:14:00.000Z"
        }
      ],
      "pageInfo": {
        "totalItems": 1,
        "hasNextPage": false
      }
    }
  }
}

sort takes ProjectSort enum values (name_ASC, updatedAt_DESC, createdAt_DESC, position_ASC, …), and pageInfo.totalItems holds the total count. To filter by category, query with archived / isTemplate / search and filter the results client-side — ProjectListFilter does not accept a category filter. See List workspaces for the full filter and pagination reference.

The projects query is deprecated

An older top-level projects(companyId:, archived:, …) query still exists but is @deprecated. Use workspaceList for all new integrations.

Manage lists in a workspace

There are two ways to read the lists in a workspace.

For a simple, unpaginated read of every list in one workspace, use the recordLists(projectId:) query:

query WorkspaceLists {
  recordLists(projectId: "project_123") {
    id
    title
    position
    todosCount
  }
}

For filtering across workspaces, or for pagination, use recordListQueries.recordLists with a TodoListsFilterInput (its companyIds is required):

query PaginatedLists {
  recordListQueries {
    recordLists(filter: { companyIds: ["company_123"], projectIds: ["project_123"] }, take: 20) {
      items {
        id
        title
        position
      }
      pageInfo {
        totalItems
        hasNextPage
      }
    }
  }
}

To create a list, use the createRecordList mutation. All three inputs — projectId, title, and position — are required:

mutation CreateList {
  createRecordList(input: { projectId: "project_123", title: "To Do", position: 1.0 }) {
    id
    title
    position
  }
}

A workspace can hold at most 50 lists; creating a 51st fails with FORBIDDEN. See Lists for the full reference.

Errors

CodeWhen
BAD_USER_INPUTInvalid input — e.g. a workspace name longer than 50 characters, or a folderId that does not exist.
COMPANY_NOT_FOUNDThe companyId does not match an organization you can access.
PROJECT_NOT_FOUNDThe referenced workspace does not exist or you cannot access it.
FORBIDDENYour access level is too low for the operation, or you have hit the 50-list-per-workspace limit.
CREATE_PROJECT_LIMITA template-based createWorkspace would exceed the maximum workspace size (250,000 records).
  • Records — the records (Record) that live inside a workspace’s lists.
  • Custom fields — add structured fields to a workspace’s records.
  • Automations — automate work within a workspace.
  • User management — manage who can access a workspace and at what level.