API Entities
The LetsBuild GraphQL API provides access to various entities that represent the core data structures in the platform. This guide covers the main entities, their fields, and how to work with them.
Core Entities
Project
Projects are the central organizing unit in LetsBuild. They represent construction projects and contain all related data.
Key Fields:
id: UUID!
- Unique identifiername: String!
- Project namecode: String!
- Project codeaddress: String
- Project addresscity: String
- Project cityzipCode: String
- Postal codestartDate: DateTime
- Project start dateendDate: DateTime
- Project end dateisArchived: Boolean!
- Whether the project is archivedcountry: Country
- Associated countrylogoUrl: String
- Project logo URL
Example Query:
query GetProject($id: UUID!) {
project(id: $id) {
id
name
code
address
city
zipCode
startDate
endDate
isArchived
country {
name
iso
}
}
}
List
Lists represent punch lists or inspection lists within a project. They contain points that need to be addressed.
Key Fields:
id: UUID!
- Unique identifiertitle: String!
- List titlecode: String!
- List codedate: String!
- List datecreationDate: DateTime!
- When the list was createdisArchived: Boolean
- Whether the list is archivedisPublic: Boolean!
- Whether the list is publicpointsCount: Int!
- Number of points in the listproject: Project
- Associated projectprojectId: UUID
- Project IDnumberingType: NumberingType
- How points are numberedoccurrence: Int
- List occurrence number
Example Query:
query GetList($id: UUID!) {
list(id: $id) {
id
title
code
date
creationDate
isArchived
isPublic
pointsCount
project {
name
code
}
numberingType
occurrence
}
}
Point
Points represent individual items in a list that need attention or action.
Key Fields:
id: UUID!
- Unique identifiersubject: String!
- Point subjectcode: String
- Point codecodeNum: String!
- Point code numberdate: DateTime!
- Point datedueDate: DateTime
- Due dateisArchived: Boolean!
- Whether the point is archivedisUrgent: Boolean!
- Whether the point is urgentstatus: Status
- Point statuscategory: Category
- Point categoryproject: Project
- Associated projectlistId: UUID!
- Associated list IDauthor: User
- Point authorinCharge: [Chargee!]!
- Users in chargecomments: [Comment!]!
- Point commentsattachments: [Attachment!]!
- Point attachmentscustomFields: [CustomField!]!
- Custom field values
Example Query:
query GetPoints($projectId: UUID!, $afterId: UUID, $pageSize: Int) {
points(projectID: $projectId, afterId: $afterId, pageSize: $pageSize) {
id
projectId
project {
id
name
code
}
codeNum
code
subject
date
category {
code
description
}
isArchived
isUrgent
dueDate
archivedDate
listId
inCharge {
userId
tag
}
authorId
author {
id
displayName
}
problemLocation
entityVersion
status {
id
code
color
name
}
lastModificationUserId
hasAttachment
customFields {
id
fieldId
fieldName
value
}
}
}
Form
Forms represent quality, safety, or environmental forms within a project.
Key Fields:
id: UUID!
- Unique identifiersubject: String!
- Form subjectcode: String
- Form codecodeNum: String!
- Form code numberdate: DateTime!
- Form datedueDate: DateTime
- Due datetype: FormType!
- Form type (environment, quality, safety)status: FormStatus!
- Current statusisArchived: Boolean!
- Whether the form is archivedisConform: Boolean!
- Whether the form is conformisUrgent: Boolean!
- Whether the form is urgentproject: Project
- Associated projectlistId: UUID!
- Associated list IDauthor: User
- Form authorinCharge: [Chargee!]!
- Users in chargecomments: [Comment!]!
- Form commentsattachments: [Attachment!]!
- Form attachments
Note: Forms are accessed through the formSync
query. Individual form queries are not available.
User
Users represent people in the system who can access projects and data.
Key Fields:
id: UUID!
- Unique identifierdisplayName: String
- User's display nameemail: String
- User's email addresscompanyName: String
- User's companylanguage: LanguageCode
- User's preferred languagerole: String
- User's role (deprecated)
Note: Users are accessed through project participants or sync operations. Individual user queries are not available.
ProjectParticipant
Project participants represent users who have access to a specific project with defined permissions.
📖 ProjectParticipant Reference
Key Fields:
participantId: UUID!
- Unique participant identifierprojectId: UUID!
- Associated project IDuserId: UUID!
- Associated user IDaccessRightLevel: AccessRightLevel!
- Access level (ADMIN, MANAGER, CONTRIBUTOR, GUEST)user: User!
- Associated user details
Example Query:
query GetProjectParticipants($projectId: UUID!) {
projectParticipants(projectID: $projectId) {
participantId
projectId
userId
accessRightLevel
user {
displayName
email
companyName
}
}
}
Supporting Entities
Category
Categories help organize points and forms by type or classification.
Key Fields:
id: UUID!
- Unique identifiercode: String!
- Category codedescription: String!
- Category descriptiondisplayOrder: Int
- Display orderisDisabled: Boolean!
- Whether the category is disabledparentCategoryId: UUID
- Parent category IDsubCategories: [SubCategory!]
- Sub-categories
Status
Statuses represent the current state of points or forms.
Key Fields:
id: UUID!
- Unique identifiername: String
- Status namecode: String
- Status codecolor: String
- Status color
Country
Countries represent geographical locations for projects.
Key Fields:
id: UUID!
- Unique identifiername: String!
- Country nameiso: String!
- ISO country codeiso2: String
- ISO 2-letter country code
Room
Rooms represent physical spaces within projects.
Key Fields:
id: UUID!
- Unique identifiercode: String!
- Room codedescription: String
- Room descriptiondisplayOrder: Int!
- Display orderparentRoomId: UUID
- Parent room ID
Folder
Folders organize documents and files within projects.
Key Fields:
id: UUID!
- Unique identifiername: String!
- Folder nametype: FolderType
- Folder type (Custom, Photo, Report)isPublic: Boolean!
- Whether the folder is publicparentFolderId: UUID
- Parent folder IDdocumentCount: Int
- Number of documents in the folder
Entity Relationships
Project Hierarchy
Project
├── Lists
│ └── Points
│ └── Comments, Attachments, CustomFields
├── Forms
│ └── Comments, Attachments
├── ProjectParticipants
│ └── Users
├── Categories
│ └── SubCategories
│ └── Subjects
├── Statuses
├── Rooms
└── Folders
Access Control
- Projects contain all other entities
- ProjectParticipants define who can access a project and with what permissions
- AccessRightLevel determines what operations users can perform:
ADMIN
- Full accessMANAGER
- Manage project dataCONTRIBUTOR
- Create and edit contentGUEST
- Read-only access
Common Query Patterns
Get Project with All Related Data
query GetProjectDetails($projectId: UUID!) {
project(id: $projectId) {
id
name
code
projectParticipants {
user {
displayName
email
}
accessRightLevel
}
}
lists(projectID: $projectId) {
id
title
code
pointsCount
}
folders(projectID: $projectId) {
data {
id
name
type
}
}
}
Get List with Points
query GetListWithPoints($listId: UUID!) {
list(id: $listId) {
id
title
code
project {
name
}
}
# Note: Points are accessed through the point sync endpoint
}
Next Steps
Now that you understand the available entities:
- Explore Projects - Learn how to work with project data
- Manage Lists - Understand list operations
- Sync Data - Set up data synchronization
- API Reference - Browse the complete API schema