Skip to main content

Lists

Lists represent punch lists or inspection lists within projects. They contain points that need to be addressed and are the primary way to organize and track issues in construction projects.

📖 List Reference

List Queries​

Get All Lists for a Project​

Retrieve all lists for a specific project:

query GetProjectLists($projectID: UUID!, $afterId: UUID, $pageSize: Int) {
lists(projectID: $projectID, afterId: $afterId, pageSize: $pageSize) {
id
title
code
date
creationDate
isArchived
isPublic
pointsCount
numberingType
occurrence
building
floor
project {
id
name
code
}
}
}

Variables:

{
"projectID": "123e4567-e89b-12d3-a456-426614174000",
"pageSize": 50
}

Get Single List​

Retrieve a specific list by ID:

query GetList($id: UUID!) {
list(id: $id) {
id
title
code
date
creationDate
isArchived
isPublic
pointsCount
numberingType
occurrence
building
floor
authorEmail
project {
id
name
code
}
}
}

Search Lists​

Search for lists using filters:

query SearchLists($filter: SearchListFilter!, $afterId: UUID, $pageSize: Int) {
searchLists(filter: $filter, afterId: $afterId, pageSize: $pageSize) {
id
title
code
date
creationDate
isArchived
isPublic
pointsCount
numberingType
occurrence
building
floor
project {
name
code
}
}
}

Variables:

{
"filter": {
"title": {
"contains": "Weekly"
},
"isArchived": {
"equals": false
},
"projectID": {
"equals": "123e4567-e89b-12d3-a456-426614174000"
}
},
"pageSize": 50
}

List Mutations​

Create List​

Create a new list within a project:

mutation CreateList($list: CreateListInput!, $projectID: UUID!) {
createList(list: $list, projectID: $projectID) {
id
title
code
date
creationDate
isPublic
numberingType
occurrence
pointsCount
}
}

Variables:

{
"list": {
"title": "Daily Safety Check",
"code": "DSC001",
"date": "2024-01-15",
"numberingType": "Sequential"
},
"projectID": "123e4567-e89b-12d3-a456-426614174000"
}

Note: Lists are created individually. For multiple lists, create them one by one using the createList mutation.

List Participants​

Add List Participants​

Add new participants to a list:

mutation AddListParticipants($listID: UUID!, $participants: [AddListParticipantInput!]!) {
addListParticipants(listID: $listID, participants: $participants) {
listId
participantId
userId
}
}

Variables:

{
"listID": "456e7890-e89b-12d3-a456-426614174001",
"participants": [
{
"userID": "789e0123-e89b-12d3-a456-426614174002",
"accessRightLevel": "CONTRIBUTOR"
},
{
"userID": "012e3456-e89b-12d3-a456-426614174003",
"accessRightLevel": "GUEST"
}
]
}

List Numbering Types​

Lists support different numbering strategies for points:

Available Numbering Types​

  • Sequential: Points are numbered 1, 2, 3, 4...
  • OccSequential: Points are numbered with occurrence prefix (e.g., 1.1, 1.2, 1.3)
  • CodeSequential: Points use code-based numbering
  • CodeOccSequential: Points use code with occurrence numbering

Example with Different Numbering​

mutation CreateSequentialList($projectID: UUID!) {
createList(
list: {
title: "Sequential List"
code: "SEQ001"
date: "2024-01-15"
numberingType: Sequential
}
projectID: $projectID
) {
id
title
numberingType
}
}
mutation CreateOccurrenceList($projectID: UUID!) {
createList(
list: {
title: "Occurrence List"
code: "OCC001"
date: "2024-01-15"
numberingType: OccSequential
firstOccurrenceNumber: 1
}
projectID: $projectID
) {
id
title
numberingType
}
}

List Access Control​

Lists use the following access control levels:

  • ADMIN: Full access to list data and settings
  • MANAGER: Can manage list data and participants
  • CONTRIBUTOR: Can create and edit points
  • GUEST: Read-only access to list data
  • SUBCONTRACTOR: Limited access for subcontractors

Get Points for a List​

Retrieve all points within a list (via sync):

query GetListPoints($cursor: String) {
pointSync(cursor: $cursor) {
changes {
entityId
entityType
operationType
data {
... on Point {
id
subject
code
codeNum
date
isArchived
isUrgent
dueDate
listId
status {
name
color
}
}
}
}
cursor
hasMore
}
}

Filter Points by List​

query GetPointsForList($listId: UUID!, $cursor: String) {
pointSync(cursor: $cursor) {
changes {
entityId
entityType
operationType
data {
... on Point {
id
subject
code
codeNum
date
isArchived
isUrgent
dueDate
listId
status {
name
color
}
}
}
}
cursor
hasMore
}
}

List Status and Archiving​

Archive/Unarchive Lists​

Lists can be filtered by archive status using the searchLists query:

query SearchArchivedLists($projectID: UUID!) {
searchLists(
filter: {
isArchived: { equals: true }
projectID: { equals: $projectID }
}
pageSize: 100
) {
id
title
code
date
isArchived
pointsCount
}
}

Public vs Private Lists​

Lists can be filtered by public status using the searchLists query:

query SearchPublicLists($projectID: UUID!) {
searchLists(
filter: {
isPublic: { equals: true }
projectID: { equals: $projectID }
}
pageSize: 100
) {
id
title
code
date
isPublic
}
}

Next Steps​

Now that you understand list operations: