input AccountAddressInput { accountId: ID! city: String! isActive: Boolean! = true isPrimary: Boolean! = false name: String! notes: String! = "" state: String! streetAddress: String! zipCode: String! } """Physical address information for an account""" type AccountAddressType implements Node { accountId: UUID! city: String! """The Globally Unique ID of this object""" id: ID! isActive: Boolean! isPrimary: Boolean! labors: [LaborType!]! name: String! notes: String! schedules: [ScheduleType!]! scopes: [ScopeType!]! services: [ServiceType!]! state: String! streetAddress: String! zipCode: String! } input AccountAddressUpdateInput { city: String = null id: ID! isActive: Boolean = null isPrimary: Boolean = null name: String = null notes: String = null state: String = null streetAddress: String = null zipCode: String = null } """Contact information for an account""" input AccountContactFilter { AND: AccountContactFilter DISTINCT: Boolean NOT: AccountContactFilter OR: AccountContactFilter accountId: UUID id: UUID isActive: Boolean isPrimary: Boolean } input AccountContactInput { accountId: ID! email: String = null firstName: String! isActive: Boolean! = true isPrimary: Boolean! = false lastName: String! notes: String! = "" phone: String = null } """Contact information for an account""" type AccountContactType implements Node { accountId: UUID! email: String! firstName: String! fullName: String! """The Globally Unique ID of this object""" id: ID! isActive: Boolean! isPrimary: Boolean! lastName: String! notes: String! phone: String } input AccountContactUpdateInput { email: String = null firstName: String = null id: ID! isActive: Boolean = null isPrimary: Boolean = null lastName: String = null notes: String = null phone: String = null } """Account model belonging to a customer""" input AccountFilter { AND: AccountFilter DISTINCT: Boolean NOT: AccountFilter OR: AccountFilter customerId: UUID id: UUID isActive: Boolean name: String search: String } input AccountInput { customerId: ID! endDate: Date = null name: String! startDate: Date! status: String! } """Punchlist records for accounts""" input AccountPunchlistFilter { AND: AccountPunchlistFilter DISTINCT: Boolean NOT: AccountPunchlistFilter OR: AccountPunchlistFilter accountId: UUID id: UUID } input AccountPunchlistInput { accountId: ID! date: Date! } """Punchlist records for accounts""" type AccountPunchlistType implements Node { accountId: UUID! date: Date! """The Globally Unique ID of this object""" id: ID! } input AccountPunchlistUpdateInput { accountId: ID = null date: Date = null id: ID! } """Account model belonging to a customer""" type AccountType implements Node { addresses: [AccountAddressType!]! contacts: [AccountContactType!]! customerId: UUID! endDate: Date """The Globally Unique ID of this object""" id: ID! """Check if the account is currently active based on dates and status""" isActive: Boolean! name: String! """Get the primary address for this account""" primaryAddress: AccountAddressType revenues: [RevenueType!]! startDate: Date! """Current status of the account""" status: StatusChoices! } input AccountUpdateInput { customerId: ID = null endDate: Date = null id: ID! name: String = null startDate: Date = null status: String = null } input AddParticipantInput { conversationId: ID! participantId: ID! } """Address choices for a customer""" enum AddressChoices { BILLING OFFICE OTHER SHIPPING } input ArchiveConversationInput { conversationId: ID! isArchived: Boolean! } """Area within a scope (e.g., Kitchen, Restrooms, Lobby)""" input AreaFilter { AND: AreaFilter DISTINCT: Boolean NOT: AreaFilter OR: AreaFilter id: UUID scopeId: UUID } input AreaInput { name: String! order: Int! = 0 scopeId: ID! } """Reusable area definition belonging to a ScopeTemplate""" input AreaTemplateFilter { AND: AreaTemplateFilter DISTINCT: Boolean NOT: AreaTemplateFilter OR: AreaTemplateFilter id: UUID scopeTemplateId: UUID """Case-insensitive search on name""" search: String = null } input AreaTemplateInput { name: String! order: Int = 0 scopeTemplateId: ID! } """Reusable area definition belonging to a ScopeTemplate""" type AreaTemplateType implements Node { """The Globally Unique ID of this object""" id: ID! name: String! order: Int! scopeTemplateId: UUID! taskTemplates: [TaskTemplateType!]! } input AreaTemplateUpdateInput { id: ID! name: String = null order: Int = null } """Area within a scope (e.g., Kitchen, Restrooms, Lobby)""" type AreaType implements Node { """The Globally Unique ID of this object""" id: ID! name: String! order: Int! scopeId: UUID! tasks: [TaskType!]! } input AreaUpdateInput { id: ID! name: String = null order: Int = null scopeId: ID = null } input BoolBaseFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: Boolean """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Boolean!] """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean } input CloseServiceSessionInput { serviceId: ID! taskIds: [ID!]! } """ Conversation thread that groups messages together. Can be linked to specific entities (Project, Service, Account, etc.) for context. """ input ConversationFilter { AND: ConversationFilter DISTINCT: Boolean NOT: ConversationFilter OR: ConversationFilter """Type of conversation (DIRECT, GROUP, SUPPORT)""" conversationType: ConversationTypeChoicesFilterLookup createdAt: DatetimeDatetimeFilterLookup id: UUIDFilterLookup """Whether this conversation is archived (system-wide)""" isArchived: BoolBaseFilterLookup """Timestamp of most recent message""" lastMessageAt: DatetimeDatetimeFilterLookup } input ConversationInput { conversationType: String! entityId: ID = null entityType: String = null metadata: String = null participantIds: [ID!]! subject: String! } """ Links users (TeamProfile or CustomerProfile) to conversations. Tracks per-user read status and preferences. """ type ConversationParticipantType implements Node { """Conversation this participant belongs to""" conversationId: UUID! createdAt: DateTime! """The Globally Unique ID of this object""" id: ID! """Whether participant has archived this conversation (user-specific)""" isArchived: Boolean! """Whether participant has muted notifications for this conversation""" isMuted: Boolean! """When participant joined the conversation""" joinedAt: DateTime! """Timestamp when participant last read messages in this conversation""" lastReadAt: DateTime participant: ParticipantType! """Number of unread messages for this participant""" unreadCount: Int! updatedAt: DateTime! } """ Conversation thread that groups messages together. Can be linked to specific entities (Project, Service, Account, etc.) for context. """ type ConversationType implements Node { canDelete: Boolean! """Type of conversation (DIRECT, GROUP, SUPPORT)""" conversationType: ConversationTypeChoices! createdAt: DateTime! createdBy: ParticipantType entity: EntityType """The Globally Unique ID of this object""" id: ID! """Whether this conversation is archived (system-wide)""" isArchived: Boolean! """Timestamp of most recent message""" lastMessageAt: DateTime messageCount: Int! messages(limit: Int = 50, offset: Int = 0): [MessageType!]! """Additional conversation metadata""" metadata: JSON! participants: [ConversationParticipantType!]! """Conversation subject/title""" subject: String! unreadCount: Int! updatedAt: DateTime! } """Type of conversation""" enum ConversationTypeChoices { DIRECT GROUP SUPPORT } input ConversationTypeChoicesFilterLookup { """ Case-sensitive containment test. Filter will be skipped on `null` value """ contains: ConversationTypeChoices """Case-sensitive ends-with. Filter will be skipped on `null` value""" endsWith: ConversationTypeChoices """Exact match. Filter will be skipped on `null` value""" exact: ConversationTypeChoices """ Case-insensitive containment test. Filter will be skipped on `null` value """ iContains: ConversationTypeChoices """Case-insensitive ends-with. Filter will be skipped on `null` value""" iEndsWith: ConversationTypeChoices """Case-insensitive exact match. Filter will be skipped on `null` value""" iExact: ConversationTypeChoices """ Case-insensitive regular expression match. Filter will be skipped on `null` value """ iRegex: ConversationTypeChoices """Case-insensitive starts-with. Filter will be skipped on `null` value""" iStartsWith: ConversationTypeChoices """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [ConversationTypeChoices!] """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Case-sensitive regular expression match. Filter will be skipped on `null` value """ regex: ConversationTypeChoices """Case-sensitive starts-with. Filter will be skipped on `null` value""" startsWith: ConversationTypeChoices } """A connection to a list of items.""" type ConversationTypeCursorConnection { """Contains the nodes in this connection""" edges: [ConversationTypeCursorEdge!]! """Pagination data for this connection""" pageInfo: PageInfo! """Total quantity of existing nodes.""" totalCount: Int! } """An edge in a connection.""" type ConversationTypeCursorEdge { """A cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: ConversationType! } input ConversationUpdateInput { id: ID! isArchived: Boolean = null metadata: String = null subject: String = null } input CreateProjectScopeFromTemplateInput { accountAddressId: ID = null accountId: ID = null description: String = null isActive: Boolean = true name: String = null projectId: ID! templateId: ID! } input CreateScopeFromTemplateInput { accountAddressId: ID = null accountId: ID! description: String = null isActive: Boolean = true name: String = null templateId: ID! } input CustomerAddressInput { addressType: String! city: String! customerId: ID! isActive: Boolean! = true isPrimary: Boolean! = false state: String! streetAddress: String! zipCode: String! } """Address information for a customer""" type CustomerAddressType implements Node { """Type of address""" addressType: AddressChoices! city: String! """The Globally Unique ID of this object""" id: ID! isActive: Boolean! isPrimary: Boolean! state: String! streetAddress: String! zipCode: String! } input CustomerAddressUpdateInput { addressType: String = null city: String = null id: ID! isActive: Boolean = null isPrimary: Boolean = null state: String = null streetAddress: String = null zipCode: String = null } """Contact information for a customer""" input CustomerContactFilter { AND: CustomerContactFilter DISTINCT: Boolean NOT: CustomerContactFilter OR: CustomerContactFilter customerId: UUID id: UUID isActive: Boolean isPrimary: Boolean } input CustomerContactInput { customerId: ID! email: String! firstName: String! isActive: Boolean! = true isPrimary: Boolean! = false lastName: String! notes: String! = "" phone: String! } """Contact information for a customer""" type CustomerContactType implements Node { email: String! firstName: String! fullName: String! """The Globally Unique ID of this object""" id: ID! isActive: Boolean! isPrimary: Boolean! lastName: String! notes: String! phone: String } input CustomerContactUpdateInput { email: String = null firstName: String = null id: ID! isActive: Boolean = null isPrimary: Boolean = null lastName: String = null notes: String = null phone: String = null } """Customer model with contact information""" input CustomerFilter { AND: CustomerFilter DISTINCT: Boolean NOT: CustomerFilter OR: CustomerFilter id: UUID """Check if the customer is currently active based on dates and status""" isActive: Boolean = null search: String = null } input CustomerInput { billingEmail: String! billingTerms: String! endDate: Date = null name: String! startDate: Date! status: String! } """External/public-facing customer accounts""" input CustomerProfileFilter { AND: CustomerProfileFilter DISTINCT: Boolean NOT: CustomerProfileFilter OR: CustomerProfileFilter """Customers this profile has access to""" customers: DjangoModelFilterInput id: UUID } input CustomerProfileInput { customerIds: [ID!] = null email: String = null firstName: String! lastName: String! notes: String = "" phone: String = null status: String! = "PENDING" userId: ID = null } """External/public-facing customer accounts""" type CustomerProfileType implements Node { """Customers this profile has access to""" customers: [DjangoModelType!]! email: String firstName: String! fullName: String! """The Globally Unique ID of this object""" id: ID! lastName: String! notes: String! """Unique identifier from Ory Kratos authentication system""" oryKratosId: String phone: String """Current status of the profile""" status: StatusChoices! } union CustomerProfileTypeTeamProfileType = CustomerProfileType | TeamProfileType input CustomerProfileUpdateInput { customerIds: [ID!] = null email: String = null firstName: String = null id: ID! lastName: String = null notes: String = null phone: String = null status: String = null userId: ID = null } """Customer model with contact information""" type CustomerType implements Node { accounts: [AccountType!]! addresses: [CustomerAddressType!]! billingEmail: String! billingTerms: String! contacts: [CustomerContactType!]! endDate: Date """The Globally Unique ID of this object""" id: ID! """Check if the customer is currently active based on dates and status""" isActive: Boolean! name: String! startDate: Date! """Current status of the customer""" status: StatusChoices! } input CustomerUpdateInput { billingEmail: String = null billingTerms: String = null endDate: Date = null id: ID! name: String = null startDate: Date = null status: String = null } """Date (isoformat)""" scalar Date input DateDateFilterLookup { day: IntComparisonFilterLookup """Exact match. Filter will be skipped on `null` value""" exact: Date """Greater than. Filter will be skipped on `null` value""" gt: Date """Greater than or equal to. Filter will be skipped on `null` value""" gte: Date """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Date!] """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean isoWeekDay: IntComparisonFilterLookup isoYear: IntComparisonFilterLookup """Less than. Filter will be skipped on `null` value""" lt: Date """Less than or equal to. Filter will be skipped on `null` value""" lte: Date month: IntComparisonFilterLookup quarter: IntComparisonFilterLookup """Inclusive range test (between)""" range: DateRangeLookup week: IntComparisonFilterLookup weekDay: IntComparisonFilterLookup year: IntComparisonFilterLookup } enum DateOrdering { ASC DESC } input DateRangeLookup { end: Date = null start: Date = null } """Date with time (isoformat)""" scalar DateTime input DatetimeDatetimeFilterLookup { date: IntComparisonFilterLookup day: IntComparisonFilterLookup """Exact match. Filter will be skipped on `null` value""" exact: DateTime """Greater than. Filter will be skipped on `null` value""" gt: DateTime """Greater than or equal to. Filter will be skipped on `null` value""" gte: DateTime hour: IntComparisonFilterLookup """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [DateTime!] """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean isoWeekDay: IntComparisonFilterLookup isoYear: IntComparisonFilterLookup """Less than. Filter will be skipped on `null` value""" lt: DateTime """Less than or equal to. Filter will be skipped on `null` value""" lte: DateTime minute: IntComparisonFilterLookup month: IntComparisonFilterLookup quarter: IntComparisonFilterLookup """Inclusive range test (between)""" range: DatetimeRangeLookup second: IntComparisonFilterLookup time: IntComparisonFilterLookup week: IntComparisonFilterLookup weekDay: IntComparisonFilterLookup year: IntComparisonFilterLookup } input DatetimeRangeLookup { end: DateTime = null start: DateTime = null } """Decimal (fixed-point)""" scalar Decimal enum DeliveryStatusChoices { BOUNCED DELIVERED FAILED PENDING QUEUED SENDING SENT } type DjangoFileType { name: String! path: String! size: Int! url: String! } type DjangoImageType { height: Int! name: String! path: String! size: Int! url: String! width: Int! } input DjangoModelFilterInput { pk: ID! } type DjangoModelType { pk: ID! } type EntityType { account: AccountType customer: CustomerType entityId: ID! entityType: String! project: ProjectType service: ServiceType } """ Event model to track system events that may trigger notifications. Provides audit trail and basis for notification system. """ type EventType { createdAt: DateTime! """UUID of the entity that triggered this event""" entityId: ID! """Type of entity (e.g., 'Project', 'Report', 'Invoice')""" entityType: String! """Type of event that occurred""" eventType: EventTypeChoices! id: ID! """ Additional event metadata (e.g., old_status, new_status, changed_fields) """ metadata: JSON! triggeredById: ID triggeredByType: String updatedAt: DateTime! } enum EventTypeChoices { ACCOUNT_ADDRESS_CREATED ACCOUNT_ADDRESS_DELETED ACCOUNT_ADDRESS_UPDATED ACCOUNT_CONTACT_CREATED ACCOUNT_CONTACT_DELETED ACCOUNT_CONTACT_UPDATED ACCOUNT_CREATED ACCOUNT_DELETED ACCOUNT_PUNCHLIST_CREATED ACCOUNT_PUNCHLIST_DELETED ACCOUNT_PUNCHLIST_UPDATED ACCOUNT_STATUS_CHANGED ACCOUNT_UPDATED AREA_CREATED AREA_DELETED AREA_TEMPLATE_CREATED AREA_TEMPLATE_DELETED AREA_TEMPLATE_UPDATED AREA_UPDATED CONVERSATION_ARCHIVED CONVERSATION_CREATED CONVERSATION_PARTICIPANT_ADDED CONVERSATION_PARTICIPANT_REMOVED CUSTOMER_ADDRESS_CREATED CUSTOMER_ADDRESS_DELETED CUSTOMER_ADDRESS_UPDATED CUSTOMER_CONTACT_CREATED CUSTOMER_CONTACT_DELETED CUSTOMER_CONTACT_UPDATED CUSTOMER_CREATED CUSTOMER_DELETED CUSTOMER_PROFILE_ACCESS_GRANTED CUSTOMER_PROFILE_ACCESS_REVOKED CUSTOMER_PROFILE_CREATED CUSTOMER_PROFILE_DELETED CUSTOMER_PROFILE_UPDATED CUSTOMER_STATUS_CHANGED CUSTOMER_UPDATED INVOICE_CANCELLED INVOICE_GENERATED INVOICE_OVERDUE INVOICE_PAID INVOICE_SENT LABOR_RATE_CREATED LABOR_RATE_DELETED LABOR_RATE_UPDATED MESSAGE_DELETED MESSAGE_READ MESSAGE_RECEIVED MESSAGE_SENT PROJECT_CANCELLED PROJECT_COMPLETED PROJECT_CREATED PROJECT_PUNCHLIST_CREATED PROJECT_PUNCHLIST_DELETED PROJECT_PUNCHLIST_UPDATED PROJECT_SCOPE_CATEGORY_CREATED PROJECT_SCOPE_CATEGORY_DELETED PROJECT_SCOPE_CATEGORY_UPDATED PROJECT_SCOPE_CREATED PROJECT_SCOPE_DELETED PROJECT_SCOPE_TASK_CREATED PROJECT_SCOPE_TASK_DELETED PROJECT_SCOPE_TASK_UPDATED PROJECT_SCOPE_TEMPLATE_INSTANTIATED PROJECT_SCOPE_UPDATED PROJECT_SESSION_CLOSED PROJECT_SESSION_OPENED PROJECT_SESSION_REVERTED PROJECT_STATUS_CHANGED PROJECT_TASK_COMPLETED PROJECT_TASK_UNCOMPLETED PROJECT_UPDATED PUNCHLIST_PRIORITY_CHANGED PUNCHLIST_STATUS_CHANGED REPORT_APPROVED REPORT_CREATED REPORT_SUBMITTED REVENUE_RATE_CREATED REVENUE_RATE_DELETED REVENUE_RATE_UPDATED SCHEDULE_CREATED SCHEDULE_DELETED SCHEDULE_FREQUENCY_CHANGED SCHEDULE_UPDATED SCOPE_CREATED SCOPE_DELETED SCOPE_TEMPLATE_CREATED SCOPE_TEMPLATE_DELETED SCOPE_TEMPLATE_INSTANTIATED SCOPE_TEMPLATE_UPDATED SCOPE_UPDATED SERVICES_BULK_GENERATED SERVICE_CANCELLED SERVICE_COMPLETED SERVICE_CREATED SERVICE_DELETED SERVICE_SESSION_CLOSED SERVICE_SESSION_OPENED SERVICE_SESSION_REVERTED SERVICE_STATUS_CHANGED SERVICE_TASK_COMPLETED SERVICE_TASK_UNCOMPLETED SERVICE_TEAM_ASSIGNED SERVICE_TEAM_UNASSIGNED SERVICE_UPDATED SESSION_IMAGE_DELETED SESSION_IMAGE_UPDATED SESSION_IMAGE_UPLOADED SESSION_MEDIA_INTERNAL_FLAGGED SESSION_NOTE_CREATED SESSION_NOTE_DELETED SESSION_NOTE_UPDATED SESSION_VIDEO_DELETED SESSION_VIDEO_UPDATED SESSION_VIDEO_UPLOADED TASK_COMPLETION_RECORDED TASK_CREATED TASK_DELETED TASK_TEMPLATE_CREATED TASK_TEMPLATE_DELETED TASK_TEMPLATE_UPDATED TASK_UPDATED TEAM_PROFILE_CREATED TEAM_PROFILE_DELETED TEAM_PROFILE_ROLE_CHANGED TEAM_PROFILE_UPDATED } """Hungry Howies location records""" input HungryHowiesLocationFilter { AND: HungryHowiesLocationFilter DISTINCT: Boolean NOT: HungryHowiesLocationFilter OR: HungryHowiesLocationFilter accountId: UUID id: UUID ovenType: HungryHowiesOvenChoices storeNumber: String } input HungryHowiesLocationInput { accountId: ID! ovenType: String = null storeNumber: String! } """ HungryHowiesLocationNote(id, created_at, updated_at, content, author, internal, location) """ input HungryHowiesLocationNoteFilter { AND: HungryHowiesLocationNoteFilter DISTINCT: Boolean NOT: HungryHowiesLocationNoteFilter OR: HungryHowiesLocationNoteFilter authorId: UUID contentContains: String = null createdAfter: DateTime = null createdBefore: DateTime = null id: UUID """Internal notes are only visible to team members, not customers""" internal: Boolean locationId: UUID } input HungryHowiesLocationNoteInput { authorId: ID = null content: String! internal: Boolean! = true locationId: ID! } """ HungryHowiesLocationNote(id, created_at, updated_at, content, author, internal, location) """ type HungryHowiesLocationNoteType implements Node { authorId: UUID content: String! createdAt: DateTime! """The Globally Unique ID of this object""" id: ID! """Internal notes are only visible to team members, not customers""" internal: Boolean! locationId: UUID! updatedAt: DateTime! } input HungryHowiesLocationNoteUpdateInput { authorId: ID = null content: String = null id: ID! internal: Boolean = null } """Hungry Howies location records""" type HungryHowiesLocationType implements Node { account: AccountType! """The Globally Unique ID of this object""" id: ID! notes: [HungryHowiesLocationNoteType!]! ovenType: HungryHowiesOvenChoices storeNumber: String! } input HungryHowiesLocationUpdateInput { accountId: ID = null id: ID! ovenType: String = null storeNumber: String = null } enum HungryHowiesOvenChoices { MIDDLEBY_MARSHALL OTHER XLT } """Punchlist records for Hungry Howies projects""" input HungryHowiesPunchlistFilter { AND: HungryHowiesPunchlistFilter DISTINCT: Boolean NOT: HungryHowiesPunchlistFilter OR: HungryHowiesPunchlistFilter id: UUID projectId: UUID } input HungryHowiesPunchlistInput { backCeiling: Boolean! = false backVents: Boolean! = false date: Date! endClean: Boolean! = false endLock: Boolean! = false endTrash: Boolean! = false equip: Boolean! = false equipCut: Boolean! = false equipDelivery: Boolean! = false equipDisp: Boolean! = false equipDough: Boolean! = false equipHotbox: Boolean! = false equipMake: Boolean! = false equipManager: Boolean! = false equipOther: Boolean! = false equipSinks: Boolean! = false equipSub: Boolean! = false exportedAt: DateTime = null kitchenCeiling: Boolean! = false kitchenOven: String! = "" kitchenOvenAlerts: Boolean! = false kitchenOvenDisassemble: Boolean! = false kitchenOvenExterior: Boolean! = false kitchenOvenReassemble: Boolean! = false kitchenPos: Boolean! = false kitchenQt: Boolean! = false kitchenVents: Boolean! = false kitchenWalls: Boolean! = false lobbyCeiling: Boolean! = false lobbyCounter: Boolean! = false lobbyPos: Boolean! = false lobbyVents: Boolean! = false notes: String! = "" pdfUrl: String = null projectId: ID! secondDate: DateTime = null secondVisit: Boolean! = false sheetUrl: String = null } """Punchlist records for Hungry Howies projects""" type HungryHowiesPunchlistType implements Node { backCeiling: Boolean! backVents: Boolean! date: Date! endClean: Boolean! endLock: Boolean! endTrash: Boolean! equip: Boolean! equipCut: Boolean! equipDelivery: Boolean! equipDisp: Boolean! equipDough: Boolean! equipHotbox: Boolean! equipMake: Boolean! equipManager: Boolean! equipOther: Boolean! equipSinks: Boolean! equipSub: Boolean! exportedAt: DateTime """The Globally Unique ID of this object""" id: ID! kitchenCeiling: Boolean! kitchenOven: String! kitchenOvenAlerts: Boolean! kitchenOvenDisassemble: Boolean! kitchenOvenExterior: Boolean! kitchenOvenReassemble: Boolean! kitchenPos: Boolean! kitchenQt: Boolean! kitchenVents: Boolean! kitchenWalls: Boolean! lobbyCeiling: Boolean! lobbyCounter: Boolean! lobbyPos: Boolean! lobbyVents: Boolean! notes: String! pdfUrl: String projectId: UUID! secondDate: DateTime secondVisit: Boolean! sheetUrl: String } input HungryHowiesPunchlistUpdateInput { backCeiling: Boolean = null backVents: Boolean = null date: Date = null endClean: Boolean = null endLock: Boolean = null endTrash: Boolean = null equip: Boolean = null equipCut: Boolean = null equipDelivery: Boolean = null equipDisp: Boolean = null equipDough: Boolean = null equipHotbox: Boolean = null equipMake: Boolean = null equipManager: Boolean = null equipOther: Boolean = null equipSinks: Boolean = null equipSub: Boolean = null exportedAt: DateTime = null id: ID! kitchenCeiling: Boolean = null kitchenOven: String = null kitchenOvenAlerts: Boolean = null kitchenOvenDisassemble: Boolean = null kitchenOvenExterior: Boolean = null kitchenOvenReassemble: Boolean = null kitchenPos: Boolean = null kitchenQt: Boolean = null kitchenVents: Boolean = null kitchenWalls: Boolean = null lobbyCeiling: Boolean = null lobbyCounter: Boolean = null lobbyPos: Boolean = null lobbyVents: Boolean = null notes: String = null pdfUrl: String = null projectId: ID = null secondDate: DateTime = null secondVisit: Boolean = null sheetUrl: String = null } input IntComparisonFilterLookup { """Exact match. Filter will be skipped on `null` value""" exact: Int """Greater than. Filter will be skipped on `null` value""" gt: Int """Greater than or equal to. Filter will be skipped on `null` value""" gte: Int """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [Int!] """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """Less than. Filter will be skipped on `null` value""" lt: Int """Less than or equal to. Filter will be skipped on `null` value""" lte: Int """Inclusive range test (between)""" range: IntRangeLookup } input IntRangeLookup { end: Int = null start: Int = null } """Status choices for an invoice""" enum InvoiceChoices { CANCELLED DRAFT OVERDUE PAID SENT } """Invoice records""" input InvoiceFilter { AND: InvoiceFilter DISTINCT: Boolean NOT: InvoiceFilter OR: InvoiceFilter customerId: UUID id: UUID """Current status of the invoice""" status: InvoiceChoices } input InvoiceInput { customerId: ID! date: Date! datePaid: Date = null paymentType: String = null projectIds: [ID!] = null revenueIds: [ID!] = null status: String! } """Invoice records""" type InvoiceType implements Node { customerId: UUID! date: Date! datePaid: Date """The Globally Unique ID of this object""" id: ID! paymentType: PaymentChoices """Current status of the invoice""" status: InvoiceChoices! } input InvoiceUpdateInput { customerId: ID = null date: Date = null datePaid: Date = null id: ID! paymentType: String = null projectIds: [ID!] = null revenueIds: [ID!] = null status: String = null } """ The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf). """ scalar JSON type LaborBreakdown { grandTotal: Decimal! projects: [LaborBreakdownProject!]! projectsTotal: Decimal! services: [LaborBreakdownService!]! servicesTotal: Decimal! teamMemberId: ID! teamMemberName: String! } type LaborBreakdownProject { isTeamMemberAssigned: Boolean! laborShare: Decimal! projectId: ID! projectName: String! teamMemberCount: Int! totalLaborAmount: Decimal! } type LaborBreakdownService { isTeamMemberAssigned: Boolean! laborShare: Decimal! serviceId: ID! teamMemberCount: Int! totalLaborRate: Decimal! } """Labor records for accounts""" input LaborFilter { AND: LaborFilter DISTINCT: Boolean NOT: LaborFilter OR: LaborFilter accountAddressId: UUID id: UUID } input LaborInput { accountAddressId: ID! amount: Float! endDate: Date = null startDate: Date! } """Labor records for accounts""" type LaborType implements Node { accountAddressId: UUID amount: Decimal! endDate: Date """The Globally Unique ID of this object""" id: ID! startDate: Date! } input LaborUpdateInput { accountAddressId: ID = null amount: Float = null endDate: Date = null id: ID! startDate: Date = null } input MarkAsReadInput { conversationId: ID! } """Individual message within a conversation.""" input MessageFilter { AND: MessageFilter DISTINCT: Boolean NOT: MessageFilter OR: MessageFilter """Conversation this message belongs to""" conversationId: UUIDFilterLookup createdAt: DatetimeDatetimeFilterLookup id: UUIDFilterLookup """Whether this is an automated system message""" isSystemMessage: BoolBaseFilterLookup } input MessageInput { attachments: String = null body: String! conversationId: ID! metadata: String = null replyToId: ID = null } """ Tracks when individual messages are read by specific participants. Allows for fine-grained read tracking beyond conversation-level. """ type MessageReadReceiptType implements Node { createdAt: DateTime! """The Globally Unique ID of this object""" id: ID! """Message that was read""" messageId: UUID! """When the message was read""" readAt: DateTime! reader: ParticipantType! updatedAt: DateTime! } """Individual message within a conversation.""" type MessageType implements Node { """Array of attachment metadata (file paths, names, sizes, types)""" attachments: JSON! """Message content""" body: String! canDelete: Boolean! """Conversation this message belongs to""" conversationId: UUID! createdAt: DateTime! """The Globally Unique ID of this object""" id: ID! """Whether this is an automated system message""" isSystemMessage: Boolean! """Additional message metadata (formatting, mentions, etc.)""" metadata: JSON! readBy: [MessageReadReceiptType!]! replyTo: MessageType """Message this is replying to (for threading)""" replyToId: UUID sender: ParticipantType! updatedAt: DateTime! } """A connection to a list of items.""" type MessageTypeCursorConnection { """Contains the nodes in this connection""" edges: [MessageTypeCursorEdge!]! """Pagination data for this connection""" pageInfo: PageInfo! """Total quantity of existing nodes.""" totalCount: Int! } """An edge in a connection.""" type MessageTypeCursorEdge { """A cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: MessageType! } type Mutation { """Add a participant to a conversation""" addParticipant(input: AddParticipantInput!): ConversationParticipantType! """Add a task completion to an active project session""" addProjectTaskCompletion(notes: String = null, projectId: ID!, taskId: ID!): ProjectSessionType! """Add a task completion to an active service session""" addTaskCompletion(notes: String = null, serviceId: ID!, taskId: ID!): ServiceSessionType! """Archive or unarchive a conversation""" archiveConversation(input: ArchiveConversationInput!): ConversationType! """Close the active ProjectSession""" closeProjectSession(input: ProjectSessionCloseInput!): ProjectSessionType! """Close the active service session and record completed tasks""" closeServiceSession(input: CloseServiceSessionInput!): ServiceSessionType! """Create a new account""" createAccount(input: AccountInput!): AccountType! """Create a new account address""" createAccountAddress(input: AccountAddressInput!): AccountAddressType! """Create a new account contact""" createAccountContact(input: AccountContactInput!): AccountContactType! """Create a new account punchlist""" createAccountPunchlist(input: AccountPunchlistInput!): AccountPunchlistType! """Create a new area""" createArea(input: AreaInput!): AreaType! """Create a new area template""" createAreaTemplate(input: AreaTemplateInput!): AreaTemplateType! """Create a new conversation""" createConversation(input: ConversationInput!): ConversationType! """Create a new customer""" createCustomer(input: CustomerInput!): CustomerType! """Create a new customer address""" createCustomerAddress(input: CustomerAddressInput!): CustomerAddressType! """Create a new customer contact""" createCustomerContact(input: CustomerContactInput!): CustomerContactType! """Create a new customer profile""" createCustomerProfile(input: CustomerProfileInput!): CustomerProfileType! """Create a new hungry howies punchlist""" createHhPunchlist(input: HungryHowiesPunchlistInput!): HungryHowiesPunchlistType! """Create a new Hungry Howies location""" createHungryHowiesLocation(input: HungryHowiesLocationInput!): HungryHowiesLocationType! """Create a new Hungry Howies location note""" createHungryHowiesLocationNote(input: HungryHowiesLocationNoteInput!): HungryHowiesLocationNoteType! """Create a new invoice""" createInvoice(input: InvoiceInput!): InvoiceType! """Create a new labor rate""" createLabor(input: LaborInput!): LaborType! """Create a notification rule (Admin only)""" createNotificationRule(input: NotificationRuleInput!): NotificationRuleType! """Create a new project""" createProject(input: ProjectInput!): ProjectType! """Create a Project Area Template""" createProjectAreaTemplate(input: ProjectAreaTemplateInput!): ProjectAreaTemplateType! """Create a new project punchlist""" createProjectPunchlist(input: ProjectPunchlistInput!): ProjectPunchlistType! """Create a new ProjectScope""" createProjectScope(input: ProjectScopeInput!): ProjectScopeType! """Create a ProjectScopeCategory""" createProjectScopeCategory(input: ProjectScopeCategoryInput!): ProjectScopeCategoryType! """ Instantiate a ProjectScope (with Categories and Tasks) from a ProjectScopeTemplate """ createProjectScopeFromTemplate(input: CreateProjectScopeFromTemplateInput!): ProjectScopeType! """Create a ProjectScopeTask""" createProjectScopeTask(input: ProjectScopeTaskInput!): ProjectScopeTaskType! """Create a new Project Scope Template""" createProjectScopeTemplate(input: ProjectScopeTemplateInput!): ProjectScopeTemplateType! """ Create a ProjectScopeTemplate (and nested Categories/Tasks) from a JSON payload """ createProjectScopeTemplateFromJson(payload: JSON!, replace: Boolean! = false): ProjectScopeTemplateType! """Create a new project session note""" createProjectSessionNote(input: ProjectSessionNoteInput!): ProjectSessionNoteType! """Create a Project Task Template""" createProjectTaskTemplate(input: ProjectTaskTemplateInput!): ProjectTaskTemplateType! """Create a new report""" createReport(input: ReportInput!): ReportType! """Create a new revenue rate""" createRevenue(input: RevenueInput!): RevenueType! """Create a new service schedule""" createSchedule(input: ScheduleInput!): ScheduleType! """Create a new scope""" createScope(input: ScopeInput!): ScopeType! """Instantiate a Scope (with Areas and Tasks) from a ScopeTemplate""" createScopeFromTemplate(input: CreateScopeFromTemplateInput!): ScopeType! """Create a new scope template""" createScopeTemplate(input: ScopeTemplateInput!): ScopeTemplateType! """Create a ScopeTemplate (and nested Areas/Tasks) from a JSON payload""" createScopeTemplateFromJson(payload: JSON!, replace: Boolean! = false): ScopeTemplateType! """Create a new service visit""" createService(input: ServiceInput!): ServiceType! """Create a new service session note""" createServiceSessionNote(input: ServiceSessionNoteInput!): ServiceSessionNoteType! """Create a new task""" createTask(input: TaskInput!): TaskType! """Create a new task completion""" createTaskCompletion(input: TaskCompletionInput!): TaskCompletionType! """Create a new task template""" createTaskTemplate(input: TaskTemplateInput!): TaskTemplateType! """Create a new team profile""" createTeamProfile(input: TeamProfileInput!): TeamProfileType! """Delete an existing account""" deleteAccount(id: ID!): ID! """Delete an existing account address""" deleteAccountAddress(id: ID!): ID! """Delete an existing account contact""" deleteAccountContact(id: ID!): ID! """Delete an existing account punchlist""" deleteAccountPunchlist(id: ID!): ID! """Delete an existing area""" deleteArea(id: ID!): ID! """Delete an existing area template""" deleteAreaTemplate(id: ID!): ID! """Delete a conversation""" deleteConversation(id: ID!): ID! """Delete an existing customer""" deleteCustomer(id: ID!): ID! """Delete an existing customer address""" deleteCustomerAddress(id: ID!): ID! """Delete an existing customer contact""" deleteCustomerContact(id: ID!): ID! """Delete an existing customer profile""" deleteCustomerProfile(id: ID!): ID! """Delete an existing hungry howies punchlist""" deleteHhPunchlist(id: ID!): ID! """Delete a Hungry Howies location""" deleteHungryHowiesLocation(id: ID!): ID! """Delete a Hungry Howies location note""" deleteHungryHowiesLocationNote(id: ID!): ID! """Delete an existing invoice""" deleteInvoice(id: ID!): ID! """Delete an existing labor rate""" deleteLabor(id: ID!): ID! """Delete a message""" deleteMessage(id: ID!): ID! """Delete a notification""" deleteNotification(id: ID!): ID! """Delete a notification rule (Admin only)""" deleteNotificationRule(id: ID!): ID! """Delete an existing project""" deleteProject(id: ID!): ID! """Delete a Project Area Template""" deleteProjectAreaTemplate(id: ID!): ID! """Delete an existing project punchlist""" deleteProjectPunchlist(id: ID!): ID! """Delete a ProjectScope""" deleteProjectScope(id: ID!): ID! """Delete a ProjectScopeCategory""" deleteProjectScopeCategory(id: ID!): ID! """Delete a ProjectScopeTask""" deleteProjectScopeTask(id: ID!): ID! """Delete a Project Scope Template""" deleteProjectScopeTemplate(id: ID!): ID! """Delete a ProjectSession image""" deleteProjectSessionImage(id: ID!): ID! """Delete a project session note""" deleteProjectSessionNote(id: ID!): ID! """Delete a ProjectSession video""" deleteProjectSessionVideo(id: ID!): ID! """Delete a Project Task Template""" deleteProjectTaskTemplate(id: ID!): ID! """Delete an existing report""" deleteReport(id: ID!): ID! """Delete an existing revenue rate""" deleteRevenue(id: ID!): ID! """Delete an existing service schedule""" deleteSchedule(id: ID!): ID! """Delete an existing scope""" deleteScope(id: ID!): ID! """Delete an existing scope template""" deleteScopeTemplate(id: ID!): ID! """Delete an existing service visit""" deleteService(id: ID!): ID! """Delete a ServiceSession image""" deleteServiceSessionImage(id: ID!): ID! """Delete a service session note""" deleteServiceSessionNote(id: ID!): ID! """Delete a ServiceSession video""" deleteServiceSessionVideo(id: ID!): ID! """Delete an existing task""" deleteTask(id: ID!): ID! """Delete an existing task completion""" deleteTaskCompletion(id: ID!): ID! """Delete an existing task template""" deleteTaskTemplate(id: ID!): ID! """Delete an existing team profile""" deleteTeamProfile(id: ID!): ID! """Generate service visits for a given month (all-or-nothing)""" generateServicesByMonth(input: ServiceGenerationInput!): [ServiceType!]! """Mark all notifications as read for current user""" markAllNotificationsAsRead: Int! """Mark conversation as read""" markConversationAsRead(input: MarkAsReadInput!): ConversationType! """Mark notification as read""" markNotificationAsRead(id: ID!): NotificationType! """Mute or unmute a conversation""" muteConversation(input: MuteConversationInput!): ConversationType! """Start a new ProjectSession for a scheduled project""" openProjectSession(input: ProjectSessionStartInput!): ProjectSessionType! """Open a service session for a scheduled service""" openServiceSession(input: OpenServiceSessionInput!): ServiceSessionType! """Remove a participant from a conversation""" removeParticipant(input: RemoveParticipantInput!): ID! """Remove a task completion from an active project session""" removeProjectTaskCompletion(projectId: ID!, taskId: ID!): ProjectSessionType! """Remove a task completion from an active service session""" removeTaskCompletion(serviceId: ID!, taskId: ID!): ServiceSessionType! """ Revert the active ProjectSession back to scheduled (deletes the active session) """ revertProjectSession(input: ProjectSessionRevertInput!): Boolean! """ Revert an active service session back to scheduled (deletes the active session) """ revertServiceSession(input: RevertServiceSessionInput!): Boolean! """Send a message in a conversation""" sendMessage(input: MessageInput!): MessageType! """Update an existing account""" updateAccount(input: AccountUpdateInput!): AccountType! """Update an existing account address""" updateAccountAddress(input: AccountAddressUpdateInput!): AccountAddressType! """Update an existing account contact""" updateAccountContact(input: AccountContactUpdateInput!): AccountContactType! """Update an existing account punchlist""" updateAccountPunchlist(input: AccountPunchlistUpdateInput!): AccountPunchlistType! """Update an existing area""" updateArea(input: AreaUpdateInput!): AreaType! """Update an existing area template""" updateAreaTemplate(input: AreaTemplateUpdateInput!): AreaTemplateType! """Update a conversation""" updateConversation(input: ConversationUpdateInput!): ConversationType! """Update an existing customer""" updateCustomer(input: CustomerUpdateInput!): CustomerType! """Update an existing customer address""" updateCustomerAddress(input: CustomerAddressUpdateInput!): CustomerAddressType! """Update an existing customer contact""" updateCustomerContact(input: CustomerContactUpdateInput!): CustomerContactType! """Update an existing customer profile""" updateCustomerProfile(input: CustomerProfileUpdateInput!): CustomerProfileType! """Update an existing hungry howies punchlist""" updateHhPunchlist(input: HungryHowiesPunchlistUpdateInput!): HungryHowiesPunchlistType! """Update an existing Hungry Howies location""" updateHungryHowiesLocation(input: HungryHowiesLocationUpdateInput!): HungryHowiesLocationType! """Update an existing Hungry Howies location note""" updateHungryHowiesLocationNote(input: HungryHowiesLocationNoteUpdateInput!): HungryHowiesLocationNoteType! """Update an existing invoice""" updateInvoice(input: InvoiceUpdateInput!): InvoiceType! """Update an existing labor rate""" updateLabor(input: LaborUpdateInput!): LaborType! """Update a notification rule (Admin only)""" updateNotificationRule(input: NotificationRuleUpdateInput!): NotificationRuleType! """Update an existing project""" updateProject(input: ProjectUpdateInput!): ProjectType! """Update a Project Area Template""" updateProjectAreaTemplate(input: ProjectAreaTemplateUpdateInput!): ProjectAreaTemplateType! """Update an existing project punchlist""" updateProjectPunchlist(input: ProjectPunchlistUpdateInput!): ProjectPunchlistType! """Update an existing ProjectScope""" updateProjectScope(input: ProjectScopeUpdateInput!): ProjectScopeType! """Update a ProjectScopeCategory""" updateProjectScopeCategory(input: ProjectScopeCategoryUpdateInput!): ProjectScopeCategoryType! """Update a ProjectScopeTask""" updateProjectScopeTask(input: ProjectScopeTaskUpdateInput!): ProjectScopeTaskType! """Update an existing Project Scope Template""" updateProjectScopeTemplate(input: ProjectScopeTemplateUpdateInput!): ProjectScopeTemplateType! """Update an existing ProjectSession image (e.g., title)""" updateProjectSessionImage(input: ProjectSessionImageUpdateInput!): ProjectSessionImageType! """Update an existing project session note""" updateProjectSessionNote(input: ProjectSessionNoteUpdateInput!): ProjectSessionNoteType! """Update an existing ProjectSession video (e.g., title)""" updateProjectSessionVideo(input: ProjectSessionVideoUpdateInput!): ProjectSessionVideoType! """Update a Project Task Template""" updateProjectTaskTemplate(input: ProjectTaskTemplateUpdateInput!): ProjectTaskTemplateType! """Update an existing report""" updateReport(input: ReportUpdateInput!): ReportType! """Update an existing revenue rate""" updateRevenue(input: RevenueUpdateInput!): RevenueType! """Update an existing service schedule""" updateSchedule(input: ScheduleUpdateInput!): ScheduleType! """Update an existing scope""" updateScope(input: ScopeUpdateInput!): ScopeType! """Update an existing scope template""" updateScopeTemplate(input: ScopeTemplateUpdateInput!): ScopeTemplateType! """Update an existing service visit""" updateService(input: ServiceUpdateInput!): ServiceType! """Update an existing ServiceSession image (e.g., title)""" updateServiceSessionImage(input: ServiceSessionImageUpdateInput!): ServiceSessionImageType! """Update an existing service session note""" updateServiceSessionNote(input: ServiceSessionNoteUpdateInput!): ServiceSessionNoteType! """Update an existing ServiceSession video (e.g., title)""" updateServiceSessionVideo(input: ServiceSessionVideoUpdateInput!): ServiceSessionVideoType! """Update an existing task""" updateTask(input: TaskUpdateInput!): TaskType! """Update an existing task completion""" updateTaskCompletion(input: TaskCompletionUpdateInput!): TaskCompletionType! """Update an existing task template""" updateTaskTemplate(input: TaskTemplateUpdateInput!): TaskTemplateType! """Update an existing team profile""" updateTeamProfile(input: TeamProfileUpdateInput!): TeamProfileType! """Upload an image to a ProjectSession""" uploadProjectSessionImage(file: Upload!, internal: Boolean! = true, notes: String = null, sessionId: ID!, title: String = null): ProjectSessionImageType! """Upload a video to a ProjectSession""" uploadProjectSessionVideo(file: Upload!, internal: Boolean! = true, notes: String = null, sessionId: ID!, title: String = null): ProjectSessionVideoType! """Upload an image to a ServiceSession""" uploadServiceSessionImage(file: Upload!, internal: Boolean! = true, notes: String = null, sessionId: ID!, title: String = null): ServiceSessionImageType! """Upload a video to a ServiceSession""" uploadServiceSessionVideo(file: Upload!, internal: Boolean! = true, notes: String = null, sessionId: ID!, title: String = null): ServiceSessionVideoType! } input MuteConversationInput { conversationId: ID! isMuted: Boolean! } """An object with a Globally Unique ID""" interface Node { """The Globally Unique ID of this object""" id: ID! } enum NotificationChannelChoices { EMAIL IN_APP SMS } """Track delivery attempts for a notification via specific channels.""" type NotificationDeliveryType { """Number of delivery attempts""" attempts: Int! """Delivery channel (IN_APP, EMAIL, SMS)""" channel: NotificationChannelChoices! createdAt: DateTime! """Timestamp when delivery was confirmed (if supported by channel)""" deliveredAt: DateTime """Error message from failed delivery attempts""" errorMessage: String! """External service ID (e.g., Twilio message SID, email message ID)""" externalId: String! id: ID! """Timestamp of last delivery attempt""" lastAttemptAt: DateTime """Additional delivery metadata""" metadata: JSON! """Notification being delivered""" notification: NotificationType! """Timestamp when successfully sent""" sentAt: DateTime """Current delivery status""" status: DeliveryStatusChoices! updatedAt: DateTime! } input NotificationRuleInput { channels: [NotificationChannelChoices!]! conditions: JSON = null description: String = "" eventTypes: [EventTypeChoices!]! isActive: Boolean = true name: String! targetCustomerProfileIds: [ID!] = null targetRoles: [RoleChoices!] = null targetTeamProfileIds: [ID!] = null templateBody: String = "" templateSubject: String = "" } """Admin-defined rules for generating notifications based on events.""" type NotificationRuleType { """Delivery channels for notifications (IN_APP, EMAIL, SMS)""" channels: [NotificationChannelChoices!]! """ Additional conditions for when this rule applies (e.g., {'status': 'COMPLETED'}) """ conditions: JSON! createdAt: DateTime! """Description of when and how this rule applies""" description: String! """List of event types that trigger this rule""" eventTypes: [EventTypeChoices!]! id: ID! """Whether this rule is currently active""" isActive: Boolean! """Descriptive name for this notification rule""" name: String! targetCustomerProfileIds: [ID!]! """ Roles that should receive notifications (empty = all authenticated users) """ targetRoles: [RoleChoices!]! targetTeamProfileIds: [ID!]! """Template for notification body (supports variables)""" templateBody: String! """Template for notification subject (supports variables)""" templateSubject: String! updatedAt: DateTime! } input NotificationRuleUpdateInput { channels: [NotificationChannelChoices!] = null conditions: JSON = null description: String = null eventTypes: [EventTypeChoices!] = null id: ID! isActive: Boolean = null name: String = null targetCustomerProfileIds: [ID!] = null targetRoles: [RoleChoices!] = null targetTeamProfileIds: [ID!] = null templateBody: String = null templateSubject: String = null } enum NotificationStatusChoices { FAILED PENDING READ SENT } """Individual notification instance sent to a specific recipient.""" type NotificationType { """Optional URL for action button (e.g., link to project detail)""" actionUrl: String! """Notification body content""" body: String! createdAt: DateTime! """Event that triggered this notification""" event: EventType! id: ID! isRead: Boolean! """Additional notification metadata""" metadata: JSON! """Timestamp when notification was marked as read""" readAt: DateTime recipientId: ID! recipientType: String! """Rule that generated this notification""" rule: NotificationRuleType """Current status of the notification""" status: NotificationStatusChoices! """Notification subject line""" subject: String! updatedAt: DateTime! } input OpenServiceSessionInput { serviceId: ID! } """Information to aid in pagination.""" type PageInfo { """When paginating forwards, the cursor to continue.""" endCursor: String """When paginating forwards, are there more items?""" hasNextPage: Boolean! """When paginating backwards, are there more items?""" hasPreviousPage: Boolean! """When paginating backwards, the cursor to continue.""" startCursor: String } type ParticipantType { customerProfile: CustomerProfileType teamProfile: TeamProfileType } """Payment choices for a transaction""" enum PaymentChoices { BANK_TRANSFER CASH CHECK CREDIT_CARD } """Reusable category definition belonging to a ProjectScopeTemplate""" input ProjectAreaTemplateFilter { AND: ProjectAreaTemplateFilter DISTINCT: Boolean NOT: ProjectAreaTemplateFilter OR: ProjectAreaTemplateFilter id: UUID """Case-insensitive search on name""" nameSearch: String = null order: Int scopeTemplateId: UUID } input ProjectAreaTemplateInput { name: String! order: Int! = 0 scopeTemplateId: ID! } """Reusable category definition belonging to a ProjectScopeTemplate""" type ProjectAreaTemplateType implements Node { """The Globally Unique ID of this object""" id: ID! name: String! order: Int! scopeTemplateId: UUID! taskTemplates: [ProjectTaskTemplateType!]! } """A connection to a list of items.""" type ProjectAreaTemplateTypeCursorConnection { """Contains the nodes in this connection""" edges: [ProjectAreaTemplateTypeCursorEdge!]! """Pagination data for this connection""" pageInfo: PageInfo! """Total quantity of existing nodes.""" totalCount: Int! } """An edge in a connection.""" type ProjectAreaTemplateTypeCursorEdge { """A cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: ProjectAreaTemplateType! } input ProjectAreaTemplateUpdateInput { id: ID! name: String = null order: Int = null } """Project records for customers""" input ProjectFilter { AND: ProjectFilter DISTINCT: Boolean NOT: ProjectFilter OR: ProjectFilter """ If set, the project uses this account address; otherwise, fill the address fields below """ accountAddressId: UUIDFilterLookup customerId: UUIDFilterLookup date: DateDateFilterLookup id: UUIDFilterLookup """Current status of the project""" status: ServiceChoicesFilterLookup teamMembers: DjangoModelFilterInput } input ProjectInput { accountAddressId: ID = null amount: Float! city: String = null customerId: ID! date: Date! labor: Float! name: String! notes: String = null scopeId: ID = null state: String = null status: String! streetAddress: String = null teamMemberIds: [ID!] = null zipCode: String = null } """Punchlist records for projects""" input ProjectPunchlistFilter { AND: ProjectPunchlistFilter DISTINCT: Boolean NOT: ProjectPunchlistFilter OR: ProjectPunchlistFilter id: UUID projectId: UUID } input ProjectPunchlistInput { date: Date! projectId: ID! } """Punchlist records for projects""" type ProjectPunchlistType implements Node { date: Date! """The Globally Unique ID of this object""" id: ID! projectId: UUID! } input ProjectPunchlistUpdateInput { date: Date = null id: ID! projectId: ID = null } """Category of work definition for a project""" input ProjectScopeCategoryFilter { AND: ProjectScopeCategoryFilter DISTINCT: Boolean NOT: ProjectScopeCategoryFilter OR: ProjectScopeCategoryFilter id: UUID order: Int scopeId: UUID } input ProjectScopeCategoryInput { name: String! order: Int! = 0 scopeId: ID! } """Category of work definition for a project""" type ProjectScopeCategoryType implements Node { """The Globally Unique ID of this object""" id: ID! name: String! order: Int! projectTasks: [ProjectScopeTaskType!]! scopeId: UUID! } """A connection to a list of items.""" type ProjectScopeCategoryTypeCursorConnection { """Contains the nodes in this connection""" edges: [ProjectScopeCategoryTypeCursorEdge!]! """Pagination data for this connection""" pageInfo: PageInfo! """Total quantity of existing nodes.""" totalCount: Int! } """An edge in a connection.""" type ProjectScopeCategoryTypeCursorEdge { """A cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: ProjectScopeCategoryType! } input ProjectScopeCategoryUpdateInput { id: ID! name: String = null order: Int = null } """Scope of work definition for a project""" input ProjectScopeFilter { AND: ProjectScopeFilter DISTINCT: Boolean NOT: ProjectScopeFilter OR: ProjectScopeFilter accountAddressId: UUID accountId: UUID id: UUID isActive: Boolean projectId: UUID } input ProjectScopeInput { accountAddressId: ID = null accountId: ID = null description: String = null isActive: Boolean = true name: String! projectId: ID! } """Record of a task template being completed during a project""" input ProjectScopeTaskCompletionFilter { AND: ProjectScopeTaskCompletionFilter DISTINCT: Boolean NOT: ProjectScopeTaskCompletionFilter OR: ProjectScopeTaskCompletionFilter accountAddressId: UUID accountId: UUID completedById: UUID id: UUID projectId: UUID taskId: UUID } """Record of a task template being completed during a project""" type ProjectScopeTaskCompletionType implements Node { accountAddressId: UUID completedAt: DateTime! completedById: UUID! """The Globally Unique ID of this object""" id: ID! notes: String! projectId: UUID! taskId: UUID! } """Specific task definition for a project""" input ProjectScopeTaskFilter { AND: ProjectScopeTaskFilter DISTINCT: Boolean NOT: ProjectScopeTaskFilter OR: ProjectScopeTaskFilter categoryId: UUID id: UUID order: Int } input ProjectScopeTaskInput { categoryId: ID! checklistDescription: String = "" description: String! estimatedMinutes: Int = null order: Int! = 0 } """Specific task definition for a project""" type ProjectScopeTaskType implements Node { categoryId: UUID! checklistDescription: String! description: String! estimatedMinutes: Int """The Globally Unique ID of this object""" id: ID! order: Int! } """A connection to a list of items.""" type ProjectScopeTaskTypeCursorConnection { """Contains the nodes in this connection""" edges: [ProjectScopeTaskTypeCursorEdge!]! """Pagination data for this connection""" pageInfo: PageInfo! """Total quantity of existing nodes.""" totalCount: Int! } """An edge in a connection.""" type ProjectScopeTaskTypeCursorEdge { """A cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: ProjectScopeTaskType! } input ProjectScopeTaskUpdateInput { checklistDescription: String = null description: String = null estimatedMinutes: Int = null id: ID! order: Int = null } """ Reusable blueprint for creating a ProjectScope with Categories and Tasks """ input ProjectScopeTemplateFilter { AND: ProjectScopeTemplateFilter DISTINCT: Boolean NOT: ProjectScopeTemplateFilter OR: ProjectScopeTemplateFilter """Case-insensitive search on description""" descriptionSearch: String = null id: UUID isActive: Boolean """Case-insensitive search on name""" nameSearch: String = null } input ProjectScopeTemplateInput { description: String = "" isActive: Boolean = true name: String! } """ Reusable blueprint for creating a ProjectScope with Categories and Tasks """ type ProjectScopeTemplateType implements Node { categoryTemplates: [ProjectAreaTemplateType!]! description: String! """The Globally Unique ID of this object""" id: ID! isActive: Boolean! name: String! } input ProjectScopeTemplateUpdateInput { description: String = null id: ID! isActive: Boolean = null name: String = null } """Scope of work definition for a project""" type ProjectScopeType implements Node { accountAddressId: UUID accountId: UUID description: String! """The Globally Unique ID of this object""" id: ID! isActive: Boolean! name: String! projectAreas: [ProjectScopeCategoryType!]! projectId: UUID! } input ProjectScopeUpdateInput { accountAddressId: ID = null accountId: ID = null description: String = null id: ID! isActive: Boolean = null name: String = null } input ProjectSessionCloseInput { completedTaskIds: [ID!] = null projectId: ID! } """Project session records""" input ProjectSessionFilter { AND: ProjectSessionFilter DISTINCT: Boolean NOT: ProjectSessionFilter OR: ProjectSessionFilter accountAddressId: UUIDFilterLookup accountId: UUIDFilterLookup createdById: UUIDFilterLookup customerId: UUIDFilterLookup date: DateDateFilterLookup end: DatetimeDatetimeFilterLookup id: UUIDFilterLookup projectId: UUIDFilterLookup scopeId: UUIDFilterLookup start: DatetimeDatetimeFilterLookup teamMemberId: String } """ ProjectSessionImage(id, created_at, updated_at, title, content_type, width, height, uploaded_by_team_profile, notes, internal, project_session, image, thumbnail) """ input ProjectSessionImageFilter { AND: ProjectSessionImageFilter DISTINCT: Boolean NOT: ProjectSessionImageFilter OR: ProjectSessionImageFilter createdAfter: DateTime = null createdBefore: DateTime = null id: UUID projectSessionId: UUID titleContains: String = null uploadedByTeamProfileId: UUID } """ ProjectSessionImage(id, created_at, updated_at, title, content_type, width, height, uploaded_by_team_profile, notes, internal, project_session, image, thumbnail) """ type ProjectSessionImageType implements Node { contentType: String! createdAt: DateTime! height: Int! """The Globally Unique ID of this object""" id: ID! image: DjangoImageType! internal: Boolean! notes: String! projectSessionId: UUID! thumbnail: DjangoImageType title: String! uploadedByTeamProfileId: UUID width: Int! } input ProjectSessionImageUpdateInput { id: ID! notes: String = null title: String = null } """Notes attached to project sessions""" input ProjectSessionNoteFilter { AND: ProjectSessionNoteFilter DISTINCT: Boolean NOT: ProjectSessionNoteFilter OR: ProjectSessionNoteFilter authorId: UUID contentContains: String = null createdAfter: DateTime = null createdBefore: DateTime = null id: UUID """Internal notes are only visible to team members, not customers""" internal: Boolean sessionId: UUID } input ProjectSessionNoteInput { authorId: ID = null content: String! internal: Boolean! = true sessionId: ID! } """Notes attached to project sessions""" type ProjectSessionNoteType implements Node { authorId: UUID content: String! createdAt: DateTime! """The Globally Unique ID of this object""" id: ID! """Internal notes are only visible to team members, not customers""" internal: Boolean! sessionId: UUID! updatedAt: DateTime! } input ProjectSessionNoteUpdateInput { authorId: ID = null content: String = null id: ID! internal: Boolean = null } input ProjectSessionRevertInput { projectId: ID! } input ProjectSessionStartInput { projectId: ID! } """Project session records""" type ProjectSessionType implements Node { accountAddressId: UUID accountId: UUID closedById: UUID completedTasks: [ProjectScopeTaskCompletionType!]! createdById: UUID! customerId: UUID! date: Date! durationSeconds: Int! end: DateTime """The Globally Unique ID of this object""" id: ID! """A session is active if it has not been closed.""" isActive: Boolean! notes: [ProjectSessionNoteType!]! photos: [ProjectSessionImageType!]! projectId: UUID! scopeId: UUID! start: DateTime! videos: [ProjectSessionVideoType!]! } """Video attached to a ProjectSession for documentation.""" input ProjectSessionVideoFilter { AND: ProjectSessionVideoFilter DISTINCT: Boolean NOT: ProjectSessionVideoFilter OR: ProjectSessionVideoFilter createdAfter: DateTime = null createdBefore: DateTime = null id: UUID internal: Boolean maxDuration: Int = null minDuration: Int = null projectSessionId: UUID titleContains: String = null uploadedByTeamProfileId: UUID } """Video attached to a ProjectSession for documentation.""" type ProjectSessionVideoType implements Node { contentType: String! createdAt: DateTime! """Video duration in seconds""" durationSeconds: Int! """File size in bytes""" fileSizeBytes: Int! height: Int! """The Globally Unique ID of this object""" id: ID! internal: Boolean! notes: String! projectSessionId: UUID! thumbnail: DjangoImageType title: String! uploadedByTeamProfileId: UUID video: DjangoFileType! width: Int! } input ProjectSessionVideoUpdateInput { id: ID! notes: String = null title: String = null } """Reusable task definition belonging to a ProjectAreaTemplate""" input ProjectTaskTemplateFilter { AND: ProjectTaskTemplateFilter DISTINCT: Boolean NOT: ProjectTaskTemplateFilter OR: ProjectTaskTemplateFilter areaTemplateId: UUID """Case-insensitive search on description""" descriptionSearch: String = null estimatedMinutes: Int id: UUID order: Int } input ProjectTaskTemplateInput { areaTemplateId: ID! checklistDescription: String = "" description: String! estimatedMinutes: Int = null order: Int! = 0 } """Reusable task definition belonging to a ProjectAreaTemplate""" type ProjectTaskTemplateType implements Node { areaTemplateId: UUID! checklistDescription: String! description: String! estimatedMinutes: Int """The Globally Unique ID of this object""" id: ID! order: Int! } """A connection to a list of items.""" type ProjectTaskTemplateTypeCursorConnection { """Contains the nodes in this connection""" edges: [ProjectTaskTemplateTypeCursorEdge!]! """Pagination data for this connection""" pageInfo: PageInfo! """Total quantity of existing nodes.""" totalCount: Int! } """An edge in a connection.""" type ProjectTaskTemplateTypeCursorEdge { """A cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: ProjectTaskTemplateType! } input ProjectTaskTemplateUpdateInput { checklistDescription: String = null description: String = null estimatedMinutes: Int = null id: ID! order: Int = null } """Project records for customers""" type ProjectType implements Node { """ If set, the project uses this account address; otherwise, fill the address fields below """ accountAddressId: UUID amount: Decimal! city: String customerId: UUID! date: Date! """The Globally Unique ID of this object""" id: ID! labor: Decimal! name: String! notes: String scopeId: UUID state: String """Current status of the project""" status: ServiceChoices! streetAddress: String teamMembers: [DjangoModelType!]! zipCode: String } """A connection to a list of items.""" type ProjectTypeCursorConnection { """Contains the nodes in this connection""" edges: [ProjectTypeCursorEdge!]! """Pagination data for this connection""" pageInfo: PageInfo! """Total quantity of existing nodes.""" totalCount: Int! } """An edge in a connection.""" type ProjectTypeCursorEdge { """A cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: ProjectType! } input ProjectUpdateInput { accountAddressId: ID = null amount: Float = null city: String = null customerId: ID = null date: Date = null id: ID! labor: Float = null name: String = null notes: String = null scopeId: ID = null state: String = null status: String = null streetAddress: String = null teamMemberIds: [ID!] = null zipCode: String = null } type Query { account( """The ID of the object.""" id: ID! ): AccountType accountAddress( """The ID of the object.""" id: ID! ): AccountAddressType accountContact( """The ID of the object.""" id: ID! ): AccountContactType accountContacts(filters: AccountContactFilter): [AccountContactType!]! accountPunchlist( """The ID of the object.""" id: ID! ): AccountPunchlistType accountPunchlists(filters: AccountPunchlistFilter): [AccountPunchlistType!]! accounts(filters: AccountFilter): [AccountType!]! """Get the active project session for a given project""" activeProjectSession(projectId: UUID!): ProjectSessionType """Get the active service session for a given service""" activeServiceSession(serviceId: UUID!): ServiceSessionType area( """The ID of the object.""" id: ID! ): AreaType areaTemplate( """The ID of the object.""" id: ID! ): AreaTemplateType areaTemplates(filters: AreaTemplateFilter): [AreaTemplateType!]! areas(filters: AreaFilter): [AreaType!]! conversation( """The ID of the object.""" id: ID! ): ConversationType conversations(filters: ConversationFilter): [ConversationType!]! customer( """The ID of the object.""" id: ID! ): CustomerType customerAddress( """The ID of the object.""" id: ID! ): CustomerAddressType customerContact( """The ID of the object.""" id: ID! ): CustomerContactType customerContacts(filters: CustomerContactFilter): [CustomerContactType!]! customerProfile( """The ID of the object.""" id: ID! ): CustomerProfileType customerProfiles(filters: CustomerProfileFilter): [CustomerProfileType!]! customers(filters: CustomerFilter): [CustomerType!]! """Get event by ID""" event(id: ID!): EventType """Get all events""" events(limit: Int = 50, offset: Int = 0): [EventType!]! """ Return conversations linked to a specific entity (Project, Service, Account, etc.) """ getConversationsByEntity( """Returns the items in the list that come after the specified cursor.""" after: String = null """Returns the items in the list that come before the specified cursor.""" before: String = null entityId: ID! entityType: String! filters: ConversationFilter """Returns the first n items from the list.""" first: Int = null """Returns the items in the list that come after the specified cursor.""" last: Int = null ): ConversationTypeCursorConnection! """Return messages for a specific conversation""" getMessagesByConversation( """Returns the items in the list that come after the specified cursor.""" after: String = null """Returns the items in the list that come before the specified cursor.""" before: String = null conversationId: ID! filters: MessageFilter """Returns the first n items from the list.""" first: Int = null includeSystem: Boolean! = true """Returns the items in the list that come after the specified cursor.""" last: Int = null ): MessageTypeCursorConnection! """Return conversations for the authenticated user (inbox)""" getMyConversations( """Returns the items in the list that come after the specified cursor.""" after: String = null """Returns the items in the list that come before the specified cursor.""" before: String = null filters: ConversationFilter """Returns the first n items from the list.""" first: Int = null includeArchived: Boolean! = false """Returns the items in the list that come after the specified cursor.""" last: Int = null ): ConversationTypeCursorConnection! """Return area templates for a given ProjectScopeTemplate""" getProjectAreaTemplates( """Returns the items in the list that come after the specified cursor.""" after: String = null """Returns the items in the list that come before the specified cursor.""" before: String = null filters: ProjectAreaTemplateFilter """Returns the first n items from the list.""" first: Int = null """Returns the items in the list that come after the specified cursor.""" last: Int = null scopeTemplateId: ID! ): ProjectAreaTemplateTypeCursorConnection! """Return categories for a given ProjectScope""" getProjectScopeCategories( """Returns the items in the list that come after the specified cursor.""" after: String = null """Returns the items in the list that come before the specified cursor.""" before: String = null filters: ProjectScopeCategoryFilter """Returns the first n items from the list.""" first: Int = null """Returns the items in the list that come after the specified cursor.""" last: Int = null scopeId: ID! ): ProjectScopeCategoryTypeCursorConnection! """Return tasks for a given ProjectScopeCategory""" getProjectScopeTasks( """Returns the items in the list that come after the specified cursor.""" after: String = null """Returns the items in the list that come before the specified cursor.""" before: String = null categoryId: ID! filters: ProjectScopeTaskFilter """Returns the first n items from the list.""" first: Int = null """Returns the items in the list that come after the specified cursor.""" last: Int = null ): ProjectScopeTaskTypeCursorConnection! """Return task templates for a given ProjectAreaTemplate""" getProjectTaskTemplates( """Returns the items in the list that come after the specified cursor.""" after: String = null areaTemplateId: ID! """Returns the items in the list that come before the specified cursor.""" before: String = null filters: ProjectTaskTemplateFilter """Returns the first n items from the list.""" first: Int = null """Returns the items in the list that come after the specified cursor.""" last: Int = null ): ProjectTaskTemplateTypeCursorConnection! """Return projects that include the given TeamProfile ID as a team member""" getProjectsByTeamMember( """Returns the items in the list that come after the specified cursor.""" after: String = null """Returns the items in the list that come before the specified cursor.""" before: String = null filters: ProjectFilter """Returns the first n items from the list.""" first: Int = null """Returns the items in the list that come after the specified cursor.""" last: Int = null ordering: DateOrdering = DESC teamProfileId: ID! ): ProjectTypeCursorConnection! """Return services that include the given TeamProfile ID as a team member""" getServicesByTeamMember( """Returns the items in the list that come after the specified cursor.""" after: String = null """Returns the items in the list that come before the specified cursor.""" before: String = null filters: ServiceFilter """Returns the first n items from the list.""" first: Int = null """Returns the items in the list that come after the specified cursor.""" last: Int = null ordering: DateOrdering = DESC teamProfileId: ID! ): ServiceTypeCursorConnection! hhPunchlist( """The ID of the object.""" id: ID! ): HungryHowiesPunchlistType hhPunchlists(filters: HungryHowiesPunchlistFilter): [HungryHowiesPunchlistType!]! hungryHowiesLocation( """The ID of the object.""" id: ID! ): HungryHowiesLocationType hungryHowiesLocationNote( """The ID of the object.""" id: ID! ): HungryHowiesLocationNoteType hungryHowiesLocationNotes(filters: HungryHowiesLocationNoteFilter): [HungryHowiesLocationNoteType!]! hungryHowiesLocations(filters: HungryHowiesLocationFilter): [HungryHowiesLocationType!]! invoice( """The ID of the object.""" id: ID! ): InvoiceType invoices(filters: InvoiceFilter): [InvoiceType!]! labor( """The ID of the object.""" id: ID! ): LaborType labors(filters: LaborFilter): [LaborType!]! """Get the currently authenticated user's profile""" me: CustomerProfileTypeTeamProfileType message( """The ID of the object.""" id: ID! ): MessageType messages(filters: MessageFilter): [MessageType!]! """Get notifications for current user""" myNotifications(limit: Int = 50, offset: Int = 0, unreadOnly: Boolean = false): [NotificationType!]! """Get unread notification count for current user""" myUnreadNotificationCount: Int! """Get notification by ID""" notification(id: ID!): NotificationType """Get notification delivery status""" notificationDeliveries(notificationId: ID!): [NotificationDeliveryType!]! """Get notification rule by ID""" notificationRule(id: ID!): NotificationRuleType """Get all notification rules""" notificationRules(isActive: Boolean = null): [NotificationRuleType!]! project( """The ID of the object.""" id: ID! ): ProjectType projectAreaTemplate( """The ID of the object.""" id: ID! ): ProjectAreaTemplateType projectAreaTemplates(filters: ProjectAreaTemplateFilter): [ProjectAreaTemplateType!]! projectPunchlist( """The ID of the object.""" id: ID! ): ProjectPunchlistType projectPunchlists(filters: ProjectPunchlistFilter): [ProjectPunchlistType!]! projectScope( """The ID of the object.""" id: ID! ): ProjectScopeType projectScopeCategories(filters: ProjectScopeCategoryFilter): [ProjectScopeCategoryType!]! projectScopeCategory( """The ID of the object.""" id: ID! ): ProjectScopeCategoryType projectScopeTask( """The ID of the object.""" id: ID! ): ProjectScopeTaskType projectScopeTaskCompletion( """The ID of the object.""" id: ID! ): ProjectScopeTaskCompletionType projectScopeTaskCompletions(filters: ProjectScopeTaskCompletionFilter): [ProjectScopeTaskCompletionType!]! projectScopeTasks(filters: ProjectScopeTaskFilter): [ProjectScopeTaskType!]! projectScopeTemplate( """The ID of the object.""" id: ID! ): ProjectScopeTemplateType projectScopeTemplates(filters: ProjectScopeTemplateFilter): [ProjectScopeTemplateType!]! projectScopes(filters: ProjectScopeFilter): [ProjectScopeType!]! projectSession( """The ID of the object.""" id: ID! ): ProjectSessionType projectSessionImage( """The ID of the object.""" id: ID! ): ProjectSessionImageType projectSessionImages(filters: ProjectSessionImageFilter): [ProjectSessionImageType!]! projectSessionNote( """The ID of the object.""" id: ID! ): ProjectSessionNoteType projectSessionNotes(filters: ProjectSessionNoteFilter): [ProjectSessionNoteType!]! projectSessionVideo( """The ID of the object.""" id: ID! ): ProjectSessionVideoType projectSessionVideos(filters: ProjectSessionVideoFilter): [ProjectSessionVideoType!]! projectSessions(filters: ProjectSessionFilter): [ProjectSessionType!]! projectTaskTemplate( """The ID of the object.""" id: ID! ): ProjectTaskTemplateType projectTaskTemplates(filters: ProjectTaskTemplateFilter): [ProjectTaskTemplateType!]! projects(filters: ProjectFilter): [ProjectType!]! report( """The ID of the object.""" id: ID! ): ReportType reports(filters: ReportFilter): [ReportType!]! revenue( """The ID of the object.""" id: ID! ): RevenueType revenues(filters: RevenueFilter): [RevenueType!]! schedule( """The ID of the object.""" id: ID! ): ScheduleType schedules(filters: ScheduleFilter): [ScheduleType!]! scope( """The ID of the object.""" id: ID! ): ScopeType scopeTemplate( """The ID of the object.""" id: ID! ): ScopeTemplateType scopeTemplates(filters: ScopeTemplateFilter): [ScopeTemplateType!]! scopes(filters: ScopeFilter): [ScopeType!]! service( """The ID of the object.""" id: ID! ): ServiceType serviceSession( """The ID of the object.""" id: ID! ): ServiceSessionType serviceSessionImage( """The ID of the object.""" id: ID! ): ServiceSessionImageType serviceSessionImages(filters: ServiceSessionImageFilter): [ServiceSessionImageType!]! serviceSessionNote( """The ID of the object.""" id: ID! ): ServiceSessionNoteType serviceSessionNotes(filters: ServiceSessionNoteFilter): [ServiceSessionNoteType!]! serviceSessionVideo( """The ID of the object.""" id: ID! ): ServiceSessionVideoType serviceSessionVideos(filters: ServiceSessionVideoFilter): [ServiceSessionVideoType!]! serviceSessions(filters: ServiceSessionFilter): [ServiceSessionType!]! services(filters: ServiceFilter): [ServiceType!]! task( """The ID of the object.""" id: ID! ): TaskType taskCompletion( """The ID of the object.""" id: ID! ): TaskCompletionType taskCompletions(filters: TaskCompletionFilter): [TaskCompletionType!]! taskTemplate( """The ID of the object.""" id: ID! ): TaskTemplateType taskTemplates(filters: TaskTemplateFilter): [TaskTemplateType!]! tasks(filters: TaskFilter): [TaskType!]! teamProfile( """The ID of the object.""" id: ID! ): TeamProfileType teamProfiles: [TeamProfileType!]! """Get unread message count for the authenticated user""" unreadMessageCount: Int! } input RemoveParticipantInput { conversationId: ID! participantId: ID! } """Report records""" input ReportFilter { AND: ReportFilter DISTINCT: Boolean NOT: ReportFilter OR: ReportFilter date: Date id: UUID teamMemberId: UUID } input ReportInput { date: Date! projectIds: [ID!] = null serviceIds: [ID!] = null teamMemberId: ID! } """Report records""" type ReportType implements Node { date: Date! """The Globally Unique ID of this object""" id: ID! laborBreakdown: LaborBreakdown! projects: [ProjectType!]! projectsLaborTotal: Decimal! services: [ServiceType!]! servicesLaborTotal: Decimal! teamMemberId: UUID! totalLaborValue: Decimal! } input ReportUpdateInput { date: Date = null id: ID! projectIds: [ID!] = null serviceIds: [ID!] = null teamMemberId: ID = null } """Revenue records for accounts""" input RevenueFilter { AND: RevenueFilter DISTINCT: Boolean NOT: RevenueFilter OR: RevenueFilter accountId: UUID id: UUID } input RevenueInput { accountId: ID! amount: Float! endDate: Date = null startDate: Date! } """Revenue records for accounts""" type RevenueType implements Node { accountId: UUID! amount: Decimal! endDate: Date """The Globally Unique ID of this object""" id: ID! startDate: Date! } input RevenueUpdateInput { accountId: ID = null amount: Float = null endDate: Date = null id: ID! startDate: Date = null } input RevertServiceSessionInput { serviceId: ID! } enum RoleChoices { ADMIN TEAM_LEADER TEAM_MEMBER } """Service schedules for accounts.""" input ScheduleFilter { AND: ScheduleFilter DISTINCT: Boolean NOT: ScheduleFilter OR: ScheduleFilter accountAddressId: UUID id: UUID } input ScheduleInput { accountAddressId: ID! endDate: Date = null fridayService: Boolean! = false mondayService: Boolean! = false name: String = null saturdayService: Boolean! = false scheduleException: String = null startDate: Date! sundayService: Boolean! = false thursdayService: Boolean! = false tuesdayService: Boolean! = false wednesdayService: Boolean! = false weekendService: Boolean! = false } """Service schedules for accounts.""" type ScheduleType implements Node { accountAddressId: UUID """Optional date when this schedule expires""" endDate: Date fridayService: Boolean! """The Globally Unique ID of this object""" id: ID! mondayService: Boolean! name: String saturdayService: Boolean! """Notes about any exceptions or special requirements for this schedule""" scheduleException: String """Date when this schedule becomes active""" startDate: Date! sundayService: Boolean! thursdayService: Boolean! tuesdayService: Boolean! wednesdayService: Boolean! """ When enabled, represents a single service visit on Friday that can be performed any time between Friday-Sunday and verified by Monday morning. Individual Fri/Sat/Sun service flags must be disabled when this is enabled. """ weekendService: Boolean! } input ScheduleUpdateInput { accountAddressId: ID endDate: Date = null fridayService: Boolean = null id: ID! mondayService: Boolean = null name: String = null saturdayService: Boolean = null scheduleException: String = null startDate: Date = null sundayService: Boolean = null thursdayService: Boolean = null tuesdayService: Boolean = null wednesdayService: Boolean = null weekendService: Boolean = null } """Scope of work definition for an account address""" input ScopeFilter { AND: ScopeFilter DISTINCT: Boolean NOT: ScopeFilter OR: ScopeFilter accountAddressId: UUID accountId: UUID id: UUID isActive: Boolean search: String = null } input ScopeInput { accountAddressId: ID = null accountId: ID! description: String! = "" isActive: Boolean! = true name: String! } """Reusable blueprint for creating a Scope with Areas and Tasks""" input ScopeTemplateFilter { AND: ScopeTemplateFilter DISTINCT: Boolean NOT: ScopeTemplateFilter OR: ScopeTemplateFilter id: UUID isActive: Boolean = null """Case-insensitive search on name or description""" search: String = null } input ScopeTemplateInput { description: String = null isActive: Boolean = true name: String! } """Reusable blueprint for creating a Scope with Areas and Tasks""" type ScopeTemplateType implements Node { areaTemplates: [AreaTemplateType!]! description: String! """The Globally Unique ID of this object""" id: ID! isActive: Boolean! name: String! } input ScopeTemplateUpdateInput { description: String = null id: ID! isActive: Boolean = null name: String = null } """Scope of work definition for an account address""" type ScopeType implements Node { accountAddressId: UUID accountId: UUID! areas: [AreaType!]! description: String! """The Globally Unique ID of this object""" id: ID! isActive: Boolean! name: String! } input ScopeUpdateInput { accountAddressId: ID = null accountId: ID = null description: String = null id: ID! isActive: Boolean = null name: String = null } """Status choices for a service workflow""" enum ServiceChoices { CANCELLED COMPLETED IN_PROGRESS SCHEDULED } input ServiceChoicesFilterLookup { """ Case-sensitive containment test. Filter will be skipped on `null` value """ contains: ServiceChoices """Case-sensitive ends-with. Filter will be skipped on `null` value""" endsWith: ServiceChoices """Exact match. Filter will be skipped on `null` value""" exact: ServiceChoices """ Case-insensitive containment test. Filter will be skipped on `null` value """ iContains: ServiceChoices """Case-insensitive ends-with. Filter will be skipped on `null` value""" iEndsWith: ServiceChoices """Case-insensitive exact match. Filter will be skipped on `null` value""" iExact: ServiceChoices """ Case-insensitive regular expression match. Filter will be skipped on `null` value """ iRegex: ServiceChoices """Case-insensitive starts-with. Filter will be skipped on `null` value""" iStartsWith: ServiceChoices """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [ServiceChoices!] """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Case-sensitive regular expression match. Filter will be skipped on `null` value """ regex: ServiceChoices """Case-sensitive starts-with. Filter will be skipped on `null` value""" startsWith: ServiceChoices } """Service records for accounts""" input ServiceFilter { AND: ServiceFilter DISTINCT: Boolean NOT: ServiceFilter OR: ServiceFilter accountAddressId: UUIDFilterLookup accountId: UUIDFilterLookup date: DateDateFilterLookup id: UUIDFilterLookup """Current status of the service""" status: ServiceChoicesFilterLookup teamMembers: DjangoModelFilterInput } input ServiceGenerationInput { accountAddressId: ID! month: Int! scheduleId: ID! year: Int! } input ServiceInput { accountAddressId: ID! accountId: ID = null date: Date! notes: String = null status: String! teamMemberIds: [ID!] = null } """Service session records""" input ServiceSessionFilter { AND: ServiceSessionFilter DISTINCT: Boolean NOT: ServiceSessionFilter OR: ServiceSessionFilter accountAddressId: UUIDFilterLookup createdById: UUIDFilterLookup end: DatetimeDatetimeFilterLookup id: UUIDFilterLookup """A session is active if it has not been closed.""" isActive: Boolean = null serviceId: UUIDFilterLookup start: DatetimeDatetimeFilterLookup teamMemberId: String } """ ServiceSessionImage(id, created_at, updated_at, title, content_type, width, height, uploaded_by_team_profile, notes, internal, service_session, image, thumbnail) """ input ServiceSessionImageFilter { AND: ServiceSessionImageFilter DISTINCT: Boolean NOT: ServiceSessionImageFilter OR: ServiceSessionImageFilter createdAfter: DateTime = null createdBefore: DateTime = null id: UUID serviceSessionId: UUID titleContains: String = null uploadedByTeamProfileId: UUID } """ ServiceSessionImage(id, created_at, updated_at, title, content_type, width, height, uploaded_by_team_profile, notes, internal, service_session, image, thumbnail) """ type ServiceSessionImageType implements Node { contentType: String! createdAt: DateTime! height: Int! """The Globally Unique ID of this object""" id: ID! image: DjangoImageType! internal: Boolean! notes: String! serviceSessionId: UUID! thumbnail: DjangoImageType title: String! uploadedByTeamProfileId: UUID width: Int! } input ServiceSessionImageUpdateInput { id: ID! notes: String = null title: String = null } """Notes attached to service sessions""" input ServiceSessionNoteFilter { AND: ServiceSessionNoteFilter DISTINCT: Boolean NOT: ServiceSessionNoteFilter OR: ServiceSessionNoteFilter authorId: UUID contentContains: String = null createdAfter: DateTime = null createdBefore: DateTime = null id: UUID """Internal notes are only visible to team members, not customers""" internal: Boolean sessionId: UUID } input ServiceSessionNoteInput { authorId: ID = null content: String! internal: Boolean! = true sessionId: ID! } """Notes attached to service sessions""" type ServiceSessionNoteType implements Node { authorId: UUID content: String! createdAt: DateTime! """The Globally Unique ID of this object""" id: ID! """Internal notes are only visible to team members, not customers""" internal: Boolean! sessionId: UUID! updatedAt: DateTime! } input ServiceSessionNoteUpdateInput { authorId: ID = null content: String = null id: ID! internal: Boolean = null } """Service session records""" type ServiceSessionType implements Node { accountAddressId: UUID! accountId: UUID! completedTasks: [TaskCompletionType!]! customerId: UUID! durationSeconds: Int! end: DateTime """The Globally Unique ID of this object""" id: ID! """A session is active if it has not been closed.""" isActive: Boolean! notes: [ServiceSessionNoteType!]! photos: [ServiceSessionImageType!]! scopeId: UUID! serviceId: UUID! start: DateTime! videos: [ServiceSessionVideoType!]! } """Video attached to a ServiceSession for documentation.""" input ServiceSessionVideoFilter { AND: ServiceSessionVideoFilter DISTINCT: Boolean NOT: ServiceSessionVideoFilter OR: ServiceSessionVideoFilter createdAfter: DateTime = null createdBefore: DateTime = null id: UUID internal: Boolean maxDuration: Int = null minDuration: Int = null serviceSessionId: UUID titleContains: String = null uploadedByTeamProfileId: UUID } """Video attached to a ServiceSession for documentation.""" type ServiceSessionVideoType implements Node { contentType: String! createdAt: DateTime! """Video duration in seconds""" durationSeconds: Int! """File size in bytes""" fileSizeBytes: Int! height: Int! """The Globally Unique ID of this object""" id: ID! internal: Boolean! notes: String! serviceSessionId: UUID! thumbnail: DjangoImageType title: String! uploadedByTeamProfileId: UUID video: DjangoFileType! width: Int! } input ServiceSessionVideoUpdateInput { id: ID! notes: String = null title: String = null } """Service records for accounts""" type ServiceType implements Node { accountAddressId: UUID accountId: UUID date: Date! """The Globally Unique ID of this object""" id: ID! notes: String """Current status of the service""" status: ServiceChoices! teamMembers: [DjangoModelType!]! } """A connection to a list of items.""" type ServiceTypeCursorConnection { """Contains the nodes in this connection""" edges: [ServiceTypeCursorEdge!]! """Pagination data for this connection""" pageInfo: PageInfo! """Total quantity of existing nodes.""" totalCount: Int! } """An edge in a connection.""" type ServiceTypeCursorEdge { """A cursor for use in pagination""" cursor: String! """The item at the end of the edge""" node: ServiceType! } input ServiceUpdateInput { accountAddressId: ID = null accountId: ID = null date: Date = null id: ID! notes: String = null status: String = null teamMemberIds: [ID!] = null } """Status choices for a Customer, Account, or a future model""" enum StatusChoices { ACTIVE INACTIVE PENDING } type Subscription { """Subscribe to account address creation events""" accountAddressCreated: AccountAddressType! """Subscribe to account address deletion events""" accountAddressDeleted: ID! """Subscribe to account address updates""" accountAddressUpdated: AccountAddressType! """Subscribe to account contact creation events""" accountContactCreated: AccountContactType! """Subscribe to account contact deletion events""" accountContactDeleted: ID! """Subscribe to account contact updates""" accountContactUpdated: AccountContactType! """Subscribe to account creation events""" accountCreated: AccountType! """Subscribe to account deletion events""" accountDeleted: ID! """Subscribe to account punchlist creation events""" accountPunchlistCreated: AccountPunchlistType! """Subscribe to account punchlist deletion events""" accountPunchlistDeleted: ID! """Subscribe to account punchlist updates""" accountPunchlistUpdated: AccountPunchlistType! """Subscribe to account updates""" accountUpdated: AccountType! """Subscribe to area creation events""" areaCreated: AreaType! """Subscribe to area deletion events""" areaDeleted: ID! """Subscribe to area template creation events""" areaTemplateCreated: AreaTemplateType! """Subscribe to area template deletion events""" areaTemplateDeleted: ID! """Subscribe to area template updates""" areaTemplateUpdated: AreaTemplateType! """Subscribe to area updates""" areaUpdated: AreaType! """Subscribe to new conversations""" conversationCreated: ConversationType! """Subscribe to conversation deletion events""" conversationDeleted: ID! """Subscribe to conversation read events""" conversationRead(conversationId: ID!): ConversationType! """Subscribe to conversation updates""" conversationUpdated: ConversationType! """Subscribe to customer address creation events""" customerAddressCreated: CustomerAddressType! """Subscribe to customer address deletion events""" customerAddressDeleted: ID! """Subscribe to customer address updates""" customerAddressUpdated: CustomerAddressType! """Subscribe to customer contact creation events""" customerContactCreated: CustomerContactType! """Subscribe to customer contact deletion events""" customerContactDeleted: ID! """Subscribe to customer contact updates""" customerContactUpdated: CustomerContactType! """Subscribe to customer creation events""" customerCreated: CustomerType! """Subscribe to customer deletion events""" customerDeleted: ID! """Subscribe to customer profile creation events""" customerProfileCreated: CustomerProfileType! """Subscribe to customer profile deletion events""" customerProfileDeleted: ID! """Subscribe to customer profile updates""" customerProfileUpdated: CustomerProfileType! """Subscribe to customer updates""" customerUpdated: CustomerType! """Subscribe to hungry howies punchlist creation events""" hhPunchlistCreated: HungryHowiesPunchlistType! """Subscribe to hungry howies punchlist deletion events""" hhPunchlistDeleted: ID! """Subscribe to hungry howies punchlist updates""" hhPunchlistUpdated: HungryHowiesPunchlistType! """Subscribe to invoice creation events""" invoiceCreated: InvoiceType! """Subscribe to invoice deletion events""" invoiceDeleted: ID! """Subscribe to invoice updates""" invoiceUpdated: InvoiceType! """Subscribe to labor creation events""" laborCreated: LaborType! """Subscribe to labor deletion events""" laborDeleted: ID! """Subscribe to labor updates""" laborUpdated: LaborType! """Subscribe to message deletion events""" messageDeleted(conversationId: ID!): ID! """Subscribe to new messages across all conversations""" messageReceived: MessageType! """Subscribe to new messages in a specific conversation""" messageSent(conversationId: ID!): MessageType! """Subscribe to participant changes""" participantAdded(conversationId: ID!): ConversationType! """Subscribe to project area template creation events""" projectAreaTemplateCreated: ProjectAreaTemplateType! """Subscribe to project area template deletion events""" projectAreaTemplateDeleted: ID! """Subscribe to project area template updates""" projectAreaTemplateUpdated: ProjectAreaTemplateType! """Subscribe to project creation events""" projectCreated: ProjectType! """Subscribe to project deletion events""" projectDeleted: ID! """Subscribe to project punchlist creation events""" projectPunchlistCreated: ProjectPunchlistType! """Subscribe to project punchlist deletion events""" projectPunchlistDeleted: ID! """Subscribe to project punchlist updates""" projectPunchlistUpdated: ProjectPunchlistType! """Subscribe to project scope category creation events""" projectScopeCategoryCreated: ProjectScopeCategoryType! """Subscribe to project scope category deletion events""" projectScopeCategoryDeleted: ID! """Subscribe to project scope category updates""" projectScopeCategoryUpdated: ProjectScopeCategoryType! """Subscribe to project scope creation events""" projectScopeCreated: ProjectScopeType! """Subscribe to project scope deletion events""" projectScopeDeleted: ID! """Subscribe to project scope task creation events""" projectScopeTaskCreated: ProjectScopeTaskType! """Subscribe to project scope task deletion events""" projectScopeTaskDeleted: ID! """Subscribe to project scope task updates""" projectScopeTaskUpdated: ProjectScopeTaskType! """Subscribe to project scope template creation events""" projectScopeTemplateCreated: ProjectScopeTemplateType! """Subscribe to project scope template deletion events""" projectScopeTemplateDeleted: ID! """Subscribe to project scope template updates""" projectScopeTemplateUpdated: ProjectScopeTemplateType! """Subscribe to project scope updates""" projectScopeUpdated: ProjectScopeType! """Subscribe to project task template creation events""" projectTaskTemplateCreated: ProjectTaskTemplateType! """Subscribe to project task template deletion events""" projectTaskTemplateDeleted: ID! """Subscribe to project task template updates""" projectTaskTemplateUpdated: ProjectTaskTemplateType! """Subscribe to project updates""" projectUpdated: ProjectType! """Subscribe to report creation events""" reportCreated: ReportType! """Subscribe to report deletion events""" reportDeleted: ID! """Subscribe to report updates""" reportUpdated: ReportType! """Subscribe to revenue creation events""" revenueCreated: RevenueType! """Subscribe to revenue deletion events""" revenueDeleted: ID! """Subscribe to revenue updates""" revenueUpdated: RevenueType! """Subscribe to schedule creation events""" scheduleCreated: ScheduleType! """Subscribe to schedule deletion events""" scheduleDeleted: ID! """Subscribe to schedule updates""" scheduleUpdated: ScheduleType! """Subscribe to scope creation events""" scopeCreated: ScopeType! """Subscribe to scopes created from a template""" scopeCreatedFromTemplate: ScopeType! """Subscribe to scope deletion events""" scopeDeleted: ID! """Subscribe to scope template creation events""" scopeTemplateCreated: ScopeTemplateType! """Subscribe to scope template deletion events""" scopeTemplateDeleted: ID! """Subscribe to scope template updates""" scopeTemplateUpdated: ScopeTemplateType! """Subscribe to scope updates""" scopeUpdated: ScopeType! """Subscribe to service visit creation events""" serviceCreated: ServiceType! """Subscribe to service visit deletion events""" serviceDeleted: ID! """Subscribe to service visit updates""" serviceUpdated: ServiceType! """Subscribe to task completion creation events""" taskCompletionCreated: TaskCompletionType! """Subscribe to task completion deletion events""" taskCompletionDeleted: ID! """Subscribe to task completion updates""" taskCompletionUpdated: TaskCompletionType! """Subscribe to task creation events""" taskCreated: TaskType! """Subscribe to task deletion events""" taskDeleted: ID! """Subscribe to task template creation events""" taskTemplateCreated: TaskTemplateType! """Subscribe to task template deletion events""" taskTemplateDeleted: ID! """Subscribe to task template updates""" taskTemplateUpdated: TaskTemplateType! """Subscribe to task updates""" taskUpdated: TaskType! """Subscribe to team profile creation events""" teamProfileCreated: TeamProfileType! """Subscribe to team profile deletion events""" teamProfileDeleted: ID! """Subscribe to team profile updates""" teamProfileUpdated: TeamProfileType! } """Record of a task template being completed during a service visit""" input TaskCompletionFilter { AND: TaskCompletionFilter DISTINCT: Boolean NOT: TaskCompletionFilter OR: TaskCompletionFilter completedById: UUID id: UUID month: Int serviceId: UUID taskId: UUID year: Int } input TaskCompletionInput { completedAt: DateTime! completedById: ID! notes: String! = "" serviceId: ID! taskId: ID! } """Record of a task template being completed during a service visit""" type TaskCompletionType implements Node { accountAddressId: UUID completedAt: DateTime! completedById: UUID! """The Globally Unique ID of this object""" id: ID! month: Int! notes: String! serviceId: UUID! taskId: UUID! year: Int! } input TaskCompletionUpdateInput { completedAt: DateTime = null completedById: ID = null id: ID! notes: String = null serviceId: ID = null taskId: ID = null } """Individual task template within an area""" input TaskFilter { AND: TaskFilter DISTINCT: Boolean NOT: TaskFilter OR: TaskFilter areaId: UUID """How often the task should be performed""" frequency: TaskFrequencyChoices id: UUID } enum TaskFrequencyChoices { ANNUAL AS_NEEDED DAILY MONTHLY QUARTERLY TRIANNUAL WEEKLY } input TaskInput { areaId: ID! checklistDescription: String = null description: String! estimatedMinutes: Int = null frequency: String! isConditional: Boolean! = false order: Int! = 0 } """Reusable task definition belonging to an AreaTemplate""" input TaskTemplateFilter { AND: TaskTemplateFilter DISTINCT: Boolean NOT: TaskTemplateFilter OR: TaskTemplateFilter areaTemplateId: UUID """Case-insensitive search on description""" descriptionSearch: String = null """How often the task should be performed""" frequency: String = null id: UUID """Task marked 'where applicable'""" isConditional: Boolean = null } input TaskTemplateInput { areaTemplateId: ID! checklistDescription: String = null description: String! estimatedMinutes: Int = null frequency: String! isConditional: Boolean = false order: Int = 0 } """Reusable task definition belonging to an AreaTemplate""" type TaskTemplateType implements Node { areaTemplateId: UUID! checklistDescription: String! description: String! estimatedMinutes: Int """How often the task should be performed""" frequency: TaskFrequencyChoices! """The Globally Unique ID of this object""" id: ID! """Task marked 'where applicable'""" isConditional: Boolean! order: Int! } input TaskTemplateUpdateInput { checklistDescription: String = null description: String = null estimatedMinutes: Int = null frequency: String = null id: ID! isConditional: Boolean = null order: Int = null } """Individual task template within an area""" type TaskType implements Node { areaId: UUID! checklistDescription: String! description: String! estimatedMinutes: Int """How often the task should be performed""" frequency: TaskFrequencyChoices! """The Globally Unique ID of this object""" id: ID! """Task marked 'where applicable'""" isConditional: Boolean! order: Int! } input TaskUpdateInput { areaId: ID = null checklistDescription: String = null description: String = null estimatedMinutes: Int = null frequency: String = null id: ID! isConditional: Boolean = null order: Int = null } input TeamProfileInput { email: String = null firstName: String! lastName: String! notes: String = null phone: String = null role: String! status: String! = "PENDING" userId: ID = null } """Internal team member accounts""" type TeamProfileType implements Node { email: String firstName: String! fullName: String! """The Globally Unique ID of this object""" id: ID! lastName: String! notes: String! """Unique identifier from Ory Kratos authentication system""" oryKratosId: String phone: String """Role of the team member""" role: RoleChoices! """Current status of the profile""" status: StatusChoices! } input TeamProfileUpdateInput { email: String = null firstName: String = null id: ID! lastName: String = null notes: String = null phone: String = null role: String = null status: String = null userId: ID = null } scalar UUID input UUIDFilterLookup { """ Case-sensitive containment test. Filter will be skipped on `null` value """ contains: UUID """Case-sensitive ends-with. Filter will be skipped on `null` value""" endsWith: UUID """Exact match. Filter will be skipped on `null` value""" exact: UUID """ Case-insensitive containment test. Filter will be skipped on `null` value """ iContains: UUID """Case-insensitive ends-with. Filter will be skipped on `null` value""" iEndsWith: UUID """Case-insensitive exact match. Filter will be skipped on `null` value""" iExact: UUID """ Case-insensitive regular expression match. Filter will be skipped on `null` value """ iRegex: UUID """Case-insensitive starts-with. Filter will be skipped on `null` value""" iStartsWith: UUID """ Exact match of items in a given list. Filter will be skipped on `null` value """ inList: [UUID!] """Assignment test. Filter will be skipped on `null` value""" isNull: Boolean """ Case-sensitive regular expression match. Filter will be skipped on `null` value """ regex: UUID """Case-sensitive starts-with. Filter will be skipped on `null` value""" startsWith: UUID } scalar Upload