""" Maximum number of requests a client IP may send to this type in a sliding window. """ directive @rateLimit( """Window length in seconds""" durationSeconds: Int """Maximum requests in the window""" limit: Int ) on OBJECT """A personal API key for programmatic access""" type ApiKey { """When the key was created""" createdAt: DateTime """When the key expires, if set""" expiresAt: DateTime """Unique identifier for the API key""" id: ID """Prefix of the key for identification (e.g. db_abcd1234)""" keyPrefix: String """Human-readable label for the key""" label: String """When the key was last used""" lastUsedAt: DateTime """When the key was revoked, if applicable""" revokedAt: DateTime """Permission scopes granted to this key (read, write, admin)""" scopes: [String!] """Workspace IDs this key is restricted to, or null for all workspaces""" workspaceIds: [String!] } """Response from the apiKeyCreate mutation""" type ApiKeyCreatePayload implements MutationResponse { """The newly created API key""" apiKey: ApiKey """Typed errors for this mutation. Empty on success.""" errors: [UserError!] """The sync ID after the mutation""" lastSyncId: BigInt """Whether the mutation was successful""" success: Boolean """ The raw API key token: only returned at creation time, cannot be retrieved later """ token: String } """Response from the apiKeyRevoke mutation""" type ApiKeyRevokePayload implements MutationResponse { """Typed errors for this revocation. Empty on success.""" errors: [UserError!] """The sync ID after the revocation""" lastSyncId: BigInt """Whether the revocation was successful""" success: Boolean } """ The `BigInt` scalar type represents non-fractional signed whole numeric values. """ scalar BigInt """Input for creating a Stripe checkout session""" input BillingCheckoutInput { """Billing interval ("monthly" or "yearly")""" interval: String! """Billing plan key ("basic" or "business")""" planKey: String! """ID of the workspace""" workspaceId: ID! } """A billing invoice""" type BillingInvoice { """Amount due in cents""" amountDue: Int """Amount paid in cents""" amountPaid: Int """Currency code""" currency: String """URL to view the invoice on Stripe""" hostedInvoiceUrl: String """Stripe invoice ID""" id: ID """Invoice number""" invoiceNumber: String """URL to download the invoice PDF""" invoicePdf: String """Date the invoice was issued""" issuedAt: DateTime """Date the invoice was paid""" paidAt: DateTime """Invoice status""" status: String """Total amount in cents""" total: Int } """Response from a billing session mutation""" type BillingSessionPayload implements MutationResponse { """Typed errors for this mutation. Empty on success.""" errors: [UserError!] """The sync ID after the mutation""" lastSyncId: BigInt """Whether the mutation was successful""" success: Boolean """The Stripe session URL to redirect the user to""" url: String } """A workspace billing subscription""" type BillingSubscription { """Number of seats being billed""" billedSeats: Int """Date when the subscription will be canceled""" cancelAt: DateTime """ Whether the subscription will be canceled at the end of the current period """ cancelAtPeriodEnd: Boolean """End of the current billing period""" currentPeriodEnd: DateTime """Start of the current billing period""" currentPeriodStart: DateTime """Billing interval (e.g. month, year)""" interval: String """Whether the subscription grants entitlement""" isEntitled: Boolean """Whether the subscription is paid""" isPaid: Boolean """Plan key (free, basic, business, enterprise, custom)""" planKey: String """Stripe subscription status""" status: String """Date when the trial ends""" trialEnd: DateTime """Date when the trial started""" trialStart: DateTime """Unit price in cents""" unitAmount: Int } input DateComparator { """Equals the given date""" eq: DateTime """Greater than the given date""" gt: DateTime """Greater than or equal to the given date""" gte: DateTime """Date is in the given collection""" in: [DateTime!] """Less than the given date""" lt: DateTime """Less than or equal to the given date""" lte: DateTime """Does not equal the given date""" neq: DateTime """Date is not in the given collection""" nin: [DateTime!] """Filter by null/not null""" null: Boolean } """ A local date string (i.e., with no associated timezone) in `YYYY-MM-DD` format, e.g. `2020-01-01`. """ scalar DateOnly input DateOnlyComparator { """Equals the given date""" eq: DateOnly """Greater than the given date""" gt: DateOnly """Greater than or equal to the given date""" gte: DateOnly """Date is in the given collection""" in: [DateOnly!] """Less than the given date""" lt: DateOnly """Less than or equal to the given date""" lte: DateOnly """Does not equal the given date""" neq: DateOnly """Date is not in the given collection""" nin: [DateOnly!] } """ A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. """ scalar DateTime """Result of an email delivery attempt""" type EmailDelivery { """Additional delivery message""" message: String """Delivery status (sent or failed)""" status: String } """Which non-transactional emails the current user receives""" type EmailPreferences { """Onboarding and tips emails""" lifecycleEmails: Boolean """Product update announcements""" productUpdates: Boolean """Task reminders. When false, reminders are not delivered by push either""" taskReminders: Boolean } input IDComparator { """Equals the given ID""" eq: ID """ID is in the given collection""" in: [ID!] """Does not equal the given ID""" neq: ID """ID is not in the given collection""" nin: [ID!] } """ The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). """ scalar JSON """A label stored in the local database""" type Label implements Node { """Date when the label was created""" createdAt: DateTime """Unique identifier for the label""" id: ID """The label title""" title: String """Date when the label was last updated""" updatedAt: DateTime """The workspace ID this label belongs to""" workspaceId: String } """A paginated list of Labels""" type LabelConnection { """A list of edges""" edges: [LabelEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [Label!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """An edge in a Label connection""" type LabelEdge { """A cursor for pagination""" cursor: String """The Label at the end of the edge""" node: Label } """Filter for Label queries""" input LabelFilter { """Combine filters with AND logic""" and: [LabelFilter!] """Filter by createdAt""" createdAt: DateComparator """Filter by id""" id: IDComparator """Combine filters with OR logic""" or: [LabelFilter!] """Filter by title""" title: StringComparator """Filter by updatedAt""" updatedAt: DateComparator """Filter by workspaceId""" workspaceId: IDComparator } """Ordering options for Label queries""" input LabelOrderInput { """Order by createdAt""" createdAt: OrderDirection """Order by title""" title: OrderDirection """Order by updatedAt""" updatedAt: OrderDirection } """ Write operations for workspaces, billing, and API keys. Task writes use POST /sync/mutate. Rate limit: 100 requests per 60 seconds per IP (`@rateLimit`). Mutation payloads include a typed `errors` list of `UserError`. Versioning: one unversioned schema; the URL never carries a version. A retiring field keeps its place and gains `@deprecated` with a reason naming the replacement, stays queryable for at least 90 days from that date, and its removal is listed in the changelog. Query deprecations with `fields(includeDeprecated: true)`. Policy: https://donebear.com/docs/api/versioning """ type Mutation { """ Permanently delete the signed-in user's account: removes the auth identity, deletes workspaces they are the only member of, revokes API keys, and anonymises their user record """ accountDelete: UserPayload """Create a new personal API key""" apiKeyCreate( """Optional expiration date for the key""" expiresAt: DateTime """Human-readable label for the key""" label: String! """ Permission scopes for the key (read, write, admin). Defaults to ["read", "write"] """ scopes: [String!] """ Workspace IDs to restrict access to. Null or omitted means all workspaces """ workspaceIds: [ID!] ): ApiKeyCreatePayload """Revoke an existing API key""" apiKeyRevoke( """ID of the API key to revoke""" id: ID! ): ApiKeyRevokePayload """Create a Stripe checkout session for a workspace""" billingCheckoutSessionCreate(input: BillingCheckoutInput!): BillingSessionPayload """Create a Stripe billing portal session for a workspace""" billingPortalSessionCreate( """ID of the workspace""" workspaceId: ID! ): BillingSessionPayload """Turn one kind of email on or off for the current user""" emailPreferencesUpdate( enabled: Boolean! """One of: reminders, lifecycle, product""" kind: String! ): EmailPreferences """Update an existing user""" userUpdate( """ID of the user to update""" id: ID! input: UserUpdateInput! ): UserPayload """Create a new workspace""" workspaceCreate(input: WorkspaceCreateInput!): WorkspacePayload """ Turn domain auto-join on or off. The domain is the caller's verified work email. """ workspaceDomainJoinUpdate( enabled: Boolean! """The workspace ID""" workspaceId: ID! ): WorkspaceDomainJoin """Return an existing workspace or provision a personal workspace""" workspaceEnsurePersonal: WorkspacePayload """Create an invitation to a workspace""" workspaceInvitationCreate(input: WorkspaceInvitationCreateInput!): WorkspaceInvitationCreatePayload """Join a workspace via invite code""" workspaceJoin( """The invitation code""" code: String! ): WorkspaceJoinPayload } """Base interface for mutation responses""" interface MutationResponse { """Typed errors for this mutation. Empty on success. Handle by `code`.""" errors: [UserError!] """The sync ID after the mutation, used by clients to track sync state""" lastSyncId: BigInt """Whether the mutation was successful""" success: Boolean } """An object with an ID""" interface Node { """Unique identifier for the object""" id: ID } """Sort order direction with null positioning""" enum NullableSortOrder { ASC ASC_NULLS_FIRST ASC_NULLS_LAST DESC DESC_NULLS_FIRST DESC_NULLS_LAST } input NullableStringComparator { """Contains the given value""" contains: String """Ends with the given value""" endsWith: String """Equals the given value""" eq: String """Value is in the given collection""" in: [String!] """Does not equal the given value""" neq: String """Value is not in the given collection""" nin: [String!] """Does not contain the given value""" notContains: String """Does not end with the given value""" notEndsWith: String """Does not start with the given value""" notStartsWith: String """Filter by null/not null""" null: Boolean """Starts with the given value""" startsWith: String } """Sort order direction""" enum OrderDirection { ASC DESC } """Information about pagination in a connection""" type PageInfo { """Cursor for the last item in the connection""" endCursor: String """Whether there are more items when paginating forward""" hasNextPage: Boolean """Whether there are more items when paginating backward""" hasPreviousPage: Boolean """Cursor for the first item in the connection""" startCursor: String } """A project stored in the local database""" type Project implements Node { """Date when the project was archived""" archivedAt: DateTime """The project color""" color: String """Date when the project was completed""" completedAt: DateTime """Date when the project was created""" createdAt: DateTime """Creator user ID""" creatorId: String """The project description""" description: String """Unique identifier for the project""" id: ID """The project's URL slug (e.g., marketing-launch-a1b2c3d4)""" key: String """The project name""" name: String """Sort order within a list""" sortOrder: Float """The project status""" status: String """Target completion date""" targetDate: DateOnly """Granularity of the target date (day, month, quarter, half_year, year)""" targetDateGranularity: String """Date when the project was last updated""" updatedAt: DateTime """The workspace ID this project belongs to""" workspaceId: String } """A paginated list of Projects""" type ProjectConnection { """A list of edges""" edges: [ProjectEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [Project!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """An edge in a Project connection""" type ProjectEdge { """A cursor for pagination""" cursor: String """The Project at the end of the edge""" node: Project } """Filter for Project queries""" input ProjectFilter { """Combine filters with AND logic""" and: [ProjectFilter!] """Filter by archivedAt""" archivedAt: DateComparator """Filter by completedAt""" completedAt: DateComparator """Filter by createdAt""" createdAt: DateComparator """Filter by creatorId""" creatorId: IDComparator """Filter by id""" id: IDComparator """Filter by key""" key: StringComparator """Filter by name""" name: StringComparator """Combine filters with OR logic""" or: [ProjectFilter!] """Filter by status""" status: StringComparator """Filter by targetDate""" targetDate: DateOnlyComparator """Filter by targetDateGranularity""" targetDateGranularity: StringComparator """Filter by updatedAt""" updatedAt: DateComparator """Filter by workspaceId""" workspaceId: IDComparator } """Ordering options for Project queries""" input ProjectOrderInput { """Order by createdAt""" createdAt: OrderDirection """Order by name""" name: OrderDirection """Order by sortOrder""" sortOrder: OrderDirection """Order by updatedAt""" updatedAt: OrderDirection } """ Read operations. Rate limit: 100 requests per 60 seconds per IP (`@rateLimit`). Maximum query depth: 10. Versioning: one unversioned schema; the URL never carries a version. A retiring field keeps its place and gains `@deprecated` with a reason naming the replacement, stays queryable for at least 90 days from that date, and its removal is listed in the changelog. Query deprecations with `fields(includeDeprecated: true)`. Policy: https://donebear.com/docs/api/versioning """ type Query { """List all API keys for the authenticated user""" apiKeys: [ApiKey!] """Email preferences for the currently authenticated user""" emailPreferences: EmailPreferences """List all labels with pagination and filtering""" labels( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter criteria""" filter: LabelFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: LabelOrderInput ): LabelConnection """List all workspaces the authenticated user belongs to""" myWorkspaces: [WorkspaceWithRole!] """List all projects with pagination and filtering""" projects( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter criteria""" filter: ProjectFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: ProjectOrderInput ): ProjectConnection """Find a taskAttachment by ID""" taskAttachment( """The taskAttachment ID""" id: ID! ): TaskAttachment """List all taskAttachments with pagination and filtering""" taskAttachments( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter criteria""" filter: TaskAttachmentFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: TaskAttachmentOrderInput ): TaskAttachmentConnection """Find a task by its workspace-scoped number""" taskByNumber(number: Int!, workspaceId: ID!): Task """Find a taskChecklistItem by ID""" taskChecklistItem( """The taskChecklistItem ID""" id: ID! ): TaskChecklistItem """List all taskChecklistItems with pagination and filtering""" taskChecklistItems( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter criteria""" filter: TaskChecklistItemFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: TaskChecklistItemOrderInput ): TaskChecklistItemConnection """List all tasks with pagination and filtering""" tasks( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter options""" filter: TaskFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: TaskOrderInput """Search tasks by title or description""" search: String ): TaskConnection """List all teams with pagination and filtering""" teams( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter criteria""" filter: TeamFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: TeamOrderInput ): TeamConnection """The currently authenticated user""" viewer: User """Get billing information for a workspace""" workspaceBilling( """ID of the workspace""" workspaceId: ID! ): WorkspaceBilling """ Resolve a workspace by its URL key. Members see their own; a platform admin can resolve any slug and is granted session-scoped product-shell access to that one workspace. """ workspaceByUrlKey( """The workspace URL key (slug)""" urlKey: String! ): WorkspaceWithRole """Domain auto-join settings for a workspace the caller belongs to""" workspaceDomainJoin( """The workspace ID""" workspaceId: ID! ): WorkspaceDomainJoin """Get the sync action history for a workspace""" workspaceHistory( """Maximum number of entries to return (default 50)""" limit: Int """Filter by model name""" model: String """The workspace ID""" workspaceId: ID! ): [WorkspaceHistoryEntry!] """Find a workspaceInvitation by ID""" workspaceInvitation( """The workspaceInvitation ID""" id: ID! ): WorkspaceInvitation """List all workspaceInvitations with pagination and filtering""" workspaceInvitations( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter criteria""" filter: WorkspaceInvitationFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: WorkspaceInvitationOrderInput ): WorkspaceInvitationConnection """Find a workspaceMembership by ID""" workspaceMembership( """The workspaceMembership ID""" id: ID! ): WorkspaceMembership """List all workspaceMemberships with pagination and filtering""" workspaceMemberships( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter criteria""" filter: WorkspaceMembershipFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: WorkspaceMembershipOrderInput ): WorkspaceMembershipConnection """List all workspaces with pagination and filtering""" workspaces( """Cursor to start after""" after: String """Cursor to start before""" before: String """Filter criteria""" filter: WorkspaceFilter """Number of items to return from the beginning""" first: Int """Number of items to return from the end""" last: Int """Ordering options""" orderBy: WorkspaceOrderInput ): WorkspaceConnection } input StringComparator { """Contains the given value""" contains: String """Case insensitive contains""" containsIgnoreCase: String """Ends with the given value""" endsWith: String """Equals the given value""" eq: String """Case insensitive equals""" eqIgnoreCase: String """Value is in the given collection""" in: [String!] """Does not equal the given value""" neq: String """Value is not in the given collection""" nin: [String!] """Does not contain the given value""" notContains: String """Does not end with the given value""" notEndsWith: String """Does not start with the given value""" notStartsWith: String """Starts with the given value""" startsWith: String } """A task-like task stored in the local database""" type Task implements Node { """Date when the task was archived""" archivedAt: DateTime """Assignee user ID""" assigneeId: String """Date when the task was completed""" completedAt: DateTime """Date when the task was created""" createdAt: DateTime """Creator user ID""" creatorId: String """Deadline date""" deadlineAt: DateOnly """Deadline suppression date""" deadlineSuppressionAt: DateOnly """The task's description""" description: String """Heading ID within a project""" headingId: String """Unique identifier for the task""" id: ID """Last reminder interaction date""" lastReminderInteractionAt: DateTime notes: String @deprecated(reason: "Renamed to description in August 2026. Use description. The CLI flag is --description.") """Workspace-scoped sequential task number""" number: Int """Project ID""" projectId: String """Reminder date""" reminderAt: DateTime """Repeat rule (RRULE-like string)""" repeatRule: String """ID of the repeat template this instance was created from""" repeatTemplateId: String """Sort order within a list""" sortOrder: Float """Start status (e.g., not_started, started, someday)""" start: String """Bucket for the start date (e.g., today, evening)""" startBucket: String """Scheduled start date""" startDate: DateOnly """Team ID""" teamId: String """The task's title""" title: String """Reference date for today ordering""" todayIndexReferenceDate: DateOnly """Sort order within the Today list""" todaySortOrder: Float """Date when the task was last updated""" updatedAt: DateTime """Workspace ID""" workspaceId: String } """A file or image attached to a task""" type TaskAttachment implements Node { """Date when the attachment was created""" createdAt: DateTime """The attachment's display filename""" filename: String """Unique identifier for the attachment""" id: ID """The attachment's verified media (MIME) type""" mediaType: String """The attachment's verified size in bytes""" sizeBytes: Int """Sort order within the task's attachments""" sortOrder: Float """Upload lifecycle state: pending until verified, then ready""" status: String """The task ID this attachment belongs to""" taskId: String """Date when the attachment was last updated""" updatedAt: DateTime """The workspace ID this attachment belongs to""" workspaceId: String } """A paginated list of TaskAttachments""" type TaskAttachmentConnection { """A list of edges""" edges: [TaskAttachmentEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [TaskAttachment!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """An edge in a TaskAttachment connection""" type TaskAttachmentEdge { """A cursor for pagination""" cursor: String """The TaskAttachment at the end of the edge""" node: TaskAttachment } """Filter for TaskAttachment queries""" input TaskAttachmentFilter { """Combine filters with AND logic""" and: [TaskAttachmentFilter!] """Filter by createdAt""" createdAt: DateComparator """Filter by id""" id: IDComparator """Combine filters with OR logic""" or: [TaskAttachmentFilter!] """Filter by status""" status: StringComparator """Filter by taskId""" taskId: IDComparator """Filter by workspaceId""" workspaceId: IDComparator } """Ordering options for TaskAttachment queries""" input TaskAttachmentOrderInput { """Order by createdAt""" createdAt: OrderDirection """Order by sortOrder""" sortOrder: OrderDirection } """A checklist item within a task""" type TaskChecklistItem implements Node { """Date when the checklist item was completed""" completedAt: DateTime """Date when the checklist item was created""" createdAt: DateTime """Unique identifier for the checklist item""" id: ID """Sort order within the checklist""" sortOrder: Int """The task ID this checklist item belongs to""" taskId: String """The checklist item title""" title: String """Date when the checklist item was last updated""" updatedAt: DateTime """The workspace ID this checklist item belongs to""" workspaceId: String } """A paginated list of TaskChecklistItems""" type TaskChecklistItemConnection { """A list of edges""" edges: [TaskChecklistItemEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [TaskChecklistItem!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """An edge in a TaskChecklistItem connection""" type TaskChecklistItemEdge { """A cursor for pagination""" cursor: String """The TaskChecklistItem at the end of the edge""" node: TaskChecklistItem } """Filter for TaskChecklistItem queries""" input TaskChecklistItemFilter { """Combine filters with AND logic""" and: [TaskChecklistItemFilter!] """Filter by completedAt""" completedAt: DateComparator """Filter by createdAt""" createdAt: DateComparator """Filter by id""" id: IDComparator """Combine filters with OR logic""" or: [TaskChecklistItemFilter!] """Filter by taskId""" taskId: IDComparator """Filter by updatedAt""" updatedAt: DateComparator """Filter by workspaceId""" workspaceId: IDComparator } """Ordering options for TaskChecklistItem queries""" input TaskChecklistItemOrderInput { """Order by createdAt""" createdAt: OrderDirection """Order by sortOrder""" sortOrder: OrderDirection """Order by updatedAt""" updatedAt: OrderDirection } """A paginated list of Tasks""" type TaskConnection { """A list of edges""" edges: [TaskEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [Task!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """An edge in an Task connection""" type TaskEdge { """A cursor for pagination""" cursor: String """The Task at the end of the edge""" node: Task } """Filter for Task queries""" input TaskFilter { """Combine filters with AND logic""" and: [TaskFilter!] """Filter by archive date""" archivedAt: DateComparator """Filter by assignee ID""" assigneeId: NullableStringComparator """Filter by completion date""" completedAt: DateComparator """Filter by creation date""" createdAt: DateComparator """Filter by creator ID""" creatorId: IDComparator """Filter by deadline""" deadlineAt: DateOnlyComparator """Filter by task ID""" id: IDComparator """Combine filters with OR logic""" or: [TaskFilter!] """Filter by project ID""" projectId: NullableStringComparator """Filter by reminder date""" reminderAt: DateComparator """Filter by start status""" start: StringComparator """Filter by start bucket""" startBucket: StringComparator """Filter by start date""" startDate: DateOnlyComparator """Filter by team ID""" teamId: NullableStringComparator """Filter by title""" title: StringComparator """Filter by update date""" updatedAt: DateComparator """Filter by workspace ID""" workspaceId: IDComparator } """Ordering options for Task queries""" input TaskOrderInput { """Order by archive date""" archivedAt: NullableSortOrder """Order by completion date""" completedAt: NullableSortOrder """Order by creation date""" createdAt: OrderDirection """Order by deadline""" deadlineAt: NullableSortOrder """Order by task ID""" id: OrderDirection """Order by sort order""" sortOrder: OrderDirection """Order by start date""" startDate: NullableSortOrder """Order by today sort order""" todaySortOrder: OrderDirection """Order by update date""" updatedAt: OrderDirection } """A Linear team synced to the local database""" type Team implements Node { """Date when the team was archived""" archivedAt: DateTime """Date when the team was created""" createdAt: DateTime """The team description""" description: String """Unique identifier for the team""" id: ID """The team's URL slug (e.g., engineering-a1b2c3d4)""" key: String """The team name""" name: String """Date when the team was last updated""" updatedAt: DateTime """The workspace ID this team belongs to""" workspaceId: String } """A paginated list of Teams""" type TeamConnection { """A list of edges""" edges: [TeamEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [Team!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """An edge in a Team connection""" type TeamEdge { """A cursor for pagination""" cursor: String """The Team at the end of the edge""" node: Team } """Filter for Team queries""" input TeamFilter { """Combine filters with AND logic""" and: [TeamFilter!] """Filter by createdAt""" createdAt: DateComparator """Filter by id""" id: IDComparator """Filter by key""" key: StringComparator """Filter by name""" name: StringComparator """Combine filters with OR logic""" or: [TeamFilter!] """Filter by updatedAt""" updatedAt: DateComparator """Filter by workspaceId""" workspaceId: IDComparator } """Ordering options for Team queries""" input TeamOrderInput { """Order by createdAt""" createdAt: OrderDirection """Order by key""" key: OrderDirection """Order by name""" name: OrderDirection """Order by updatedAt""" updatedAt: OrderDirection } """ A field whose value is a generic Universally Unique Identifier: https://en.wikipedia.org/wiki/Universally_unique_identifier. """ scalar UUID """A user in the system""" type User implements Node { """Date when the user was created""" createdAt: DateTime """Email address of the user""" email: String """Unique identifier for the user""" id: ID """Display name of the user""" name: String """ Whether to send a push notification when someone assigns this user a task """ pushAssignmentsEnabled: Boolean """ Whether task reminders are delivered by push. When false they fall back to email """ pushRemindersEnabled: Boolean """Date when the user was last updated""" updatedAt: DateTime """Username of the user""" username: String } """ A typed mutation error. Prefer this over the top-level GraphQL errors array when handling known failures. """ type UserError { """Stable domain code such as WORKSPACE_NOT_FOUND or ACCESS_DENIED.""" code: String """Input path that caused the failure, when it is field-specific.""" field: [String!] """Human-readable explanation of the failure.""" message: String } """Response from a user mutation""" type UserPayload implements MutationResponse { """Typed errors for this mutation. Empty on success.""" errors: [UserError!] """The sync ID after the mutation""" lastSyncId: BigInt """Whether the mutation was successful""" success: Boolean """The affected user""" user: User } """Input for updating an existing user""" input UserUpdateInput { """New email address""" email: String """New display name""" name: String """Send a push when someone assigns this user a task""" pushAssignmentsEnabled: Boolean """Deliver task reminders by push instead of email""" pushRemindersEnabled: Boolean """New username""" username: String } """A Linear workspace synced to the local database""" type Workspace implements Node { """Date when the workspace was archived""" archivedAt: DateTime """Date when the workspace was created""" createdAt: DateTime """Unique identifier for the workspace""" id: ID """URL of the workspace logo""" logoUrl: String """The workspace name""" name: String """Date when the workspace was last updated""" updatedAt: DateTime """The workspace URL key (slug)""" urlKey: String } """Billing information for a workspace""" type WorkspaceBilling { """Whether the current user can manage billing for this workspace""" canManageBilling: Boolean """Stripe customer ID""" customerId: String """When this workspace was granted the founding offer, or null""" foundingGrantedAt: DateTime """Recent invoices""" invoices: [BillingInvoice!] """Number of active members in the workspace""" seatCount: Int """Active subscription details""" subscription: BillingSubscription } """A paginated list of Workspaces""" type WorkspaceConnection { """A list of edges""" edges: [WorkspaceEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [Workspace!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """Input for creating a new workspace""" input WorkspaceCreateInput { """URL of the workspace logo""" logoUrl: String """The workspace name""" name: String! """The workspace URL key (slug)""" urlKey: String! } """ Whether people with a verified work-email domain can join this workspace without an invite """ type WorkspaceDomainJoin { """ True when the caller's verified email is a work domain, not a personal host """ canEnable: Boolean """The caller's work-email domain, if it can be enabled""" domain: String """Whether domain join is currently on for this workspace""" enabled: Boolean """The domain this workspace currently accepts, if enabled""" enabledDomain: String } """An edge in a Workspace connection""" type WorkspaceEdge { """A cursor for pagination""" cursor: String """The Workspace at the end of the edge""" node: Workspace } """Filter for Workspace queries""" input WorkspaceFilter { """Combine filters with AND logic""" and: [WorkspaceFilter!] """Filter by createdAt""" createdAt: DateComparator """Filter by id""" id: IDComparator """Filter by name""" name: StringComparator """Combine filters with OR logic""" or: [WorkspaceFilter!] """Filter by updatedAt""" updatedAt: DateComparator """Filter by urlKey""" urlKey: NullableStringComparator } """A single entry in the workspace sync history""" type WorkspaceHistoryEntry { """The action type (I, U, D, A, V)""" action: String """When the action was recorded""" createdAt: DateTime """Sync action ID""" id: ID """The ID of the affected model""" modelId: String """The model that was affected""" modelName: String """The sync action data payload""" payload: JSON """The user who performed the action, if known""" userId: ID } """An invitation to join a workspace""" type WorkspaceInvitation implements Node { """The unique invitation code""" code: String """Date when the invitation was created""" createdAt: DateTime """Email address the invitation was sent to (null for open invites)""" email: String """Date when the invitation expires""" expiresAt: DateTime """Unique identifier for the invitation""" id: ID """Whether the invitation has expired""" isExpired: Boolean """Whether the invitation has been used""" isUsed: Boolean """Invitation kind: "email" (single-use) or "share" (reusable join link)""" kind: String """When set on a share link, joiners also become members of this project""" projectId: ID """The role the user will have when accepting (owner, admin, member)""" role: String """How many times a share link has been redeemed""" useCount: Int """Date when the invitation was used""" usedAt: DateTime """The user ID who used this invitation""" usedByUserId: ID """The workspace ID this invitation is for""" workspaceId: ID } """A paginated list of WorkspaceInvitations""" type WorkspaceInvitationConnection { """A list of edges""" edges: [WorkspaceInvitationEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [WorkspaceInvitation!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """Input for creating a workspace invitation""" input WorkspaceInvitationCreateInput { """ Email address to send the invitation to. Omit for open invites and share links. """ email: String """ Number of days until the invitation expires. Defaults to 7 for email invites and 90 for share links. """ expiresInDays: Int """ Invitation kind: "email" (single-use) or "share" (reusable join link). Defaults to "email". """ kind: String """ When kind is share, optionally scope the link so joiners also become members of this project. """ projectId: ID """ Role for the invitee (admin or member). Defaults to "member". Share links always join as member. """ role: String """The workspace to invite to""" workspaceId: ID! } """Response from creating a workspace invitation""" type WorkspaceInvitationCreatePayload implements MutationResponse { """Email delivery result, if an email was sent""" emailDelivery: EmailDelivery """Typed errors for this mutation. Empty on success.""" errors: [UserError!] """The created invitation""" invitation: WorkspaceInvitation """ User ID when the invited email already belongs to a Done Bear account; otherwise null until they join """ inviteeUserId: ID """The sync ID after the mutation""" lastSyncId: BigInt """Whether the mutation was successful""" success: Boolean } """An edge in a WorkspaceInvitation connection""" type WorkspaceInvitationEdge { """A cursor for pagination""" cursor: String """The WorkspaceInvitation at the end of the edge""" node: WorkspaceInvitation } """Filter for WorkspaceInvitation queries""" input WorkspaceInvitationFilter { """Combine filters with AND logic""" and: [WorkspaceInvitationFilter!] """Filter by code""" code: StringComparator """Filter by createdAt""" createdAt: DateComparator """Filter by email""" email: NullableStringComparator """Filter by expiresAt""" expiresAt: DateComparator """Filter by id""" id: IDComparator """Filter by kind""" kind: StringComparator """Combine filters with OR logic""" or: [WorkspaceInvitationFilter!] """Filter by projectId""" projectId: NullableStringComparator """Filter by role""" role: StringComparator """Filter by usedAt""" usedAt: DateComparator """Filter by usedByUserId""" usedByUserId: NullableStringComparator """Filter by workspaceId""" workspaceId: IDComparator } """Ordering options for WorkspaceInvitation queries""" input WorkspaceInvitationOrderInput { """Order by createdAt""" createdAt: OrderDirection """Order by expiresAt""" expiresAt: OrderDirection } """Response from joining a workspace""" type WorkspaceJoinPayload implements MutationResponse { """Typed errors for this join. Empty on success.""" errors: [UserError!] """The sync ID after the join""" lastSyncId: BigInt """ When the code was a project share link, the project key to open after join """ projectKey: String """The role assigned to the user in the workspace""" role: String """Whether the join was successful""" success: Boolean """The workspace that was joined""" workspace: Workspace } """A membership linking a user to a workspace with a role""" type WorkspaceMembership implements Node { """Date when the membership was created""" createdAt: DateTime """Unique identifier for the membership""" id: ID """The role of the user in the workspace (owner, admin, member)""" role: String """The user associated with this membership""" user: User """The user ID""" userId: ID """The workspace ID""" workspaceId: ID } """A paginated list of WorkspaceMemberships""" type WorkspaceMembershipConnection { """A list of edges""" edges: [WorkspaceMembershipEdge!] """A list of nodes (shortcut for edges.node)""" nodes: [WorkspaceMembership!] """Information for pagination""" pageInfo: PageInfo """Total number of items matching the query""" totalCount: Int } """An edge in a WorkspaceMembership connection""" type WorkspaceMembershipEdge { """A cursor for pagination""" cursor: String """The WorkspaceMembership at the end of the edge""" node: WorkspaceMembership } """Filter for WorkspaceMembership queries""" input WorkspaceMembershipFilter { """Combine filters with AND logic""" and: [WorkspaceMembershipFilter!] """Filter by createdAt""" createdAt: DateComparator """Filter by id""" id: IDComparator """Combine filters with OR logic""" or: [WorkspaceMembershipFilter!] """Filter by role""" role: StringComparator """Filter by userId""" userId: IDComparator """Filter by workspaceId""" workspaceId: IDComparator } """Ordering options for WorkspaceMembership queries""" input WorkspaceMembershipOrderInput { """Order by createdAt""" createdAt: OrderDirection """Order by role""" role: OrderDirection } """Ordering options for Workspace queries""" input WorkspaceOrderInput { """Order by createdAt""" createdAt: OrderDirection """Order by name""" name: OrderDirection """Order by updatedAt""" updatedAt: OrderDirection } """Response from a workspace mutation""" type WorkspacePayload implements MutationResponse { """Typed errors for this mutation. Empty on success.""" errors: [UserError!] """The sync ID after the mutation""" lastSyncId: BigInt """Whether the mutation was successful""" success: Boolean """The affected workspace""" workspace: Workspace } """A workspace with the authenticated user's role""" type WorkspaceWithRole { """Date when the workspace was archived""" archivedAt: DateTime """Date when the workspace was created""" createdAt: DateTime """Unique identifier for the workspace""" id: ID """URL of the workspace logo""" logoUrl: String """The workspace name""" name: String """The authenticated user's role in the workspace""" role: String """Date when the workspace was last updated""" updatedAt: DateTime """The workspace URL key (slug)""" urlKey: String }