Files
twenty/packages/twenty-client-sdk/src/metadata/generated/schema.graphql
T
martmull a20ebfa880 feat(applications): remove the application custom settings tab (#22156)
## Summary

Removes the application **custom settings tab** feature. This is one
half of #22059, split out so it can be reviewed/merged independently
from the variable-types enrichment.

## Changes

- Remove the `SettingsApplicationCustomTab` component and its tab
entry/rendering in `SettingsApplicationDetails`.
- Stop syncing `settingsCustomTabFrontComponent` from application
manifests — `ApplicationManifestMigrationService` now only syncs the
default role.
- Deprecate the now-unused fields (kept for backward compatibility, no
longer read or synced):
- `ApplicationDTO.settingsCustomTabFrontComponentId` (GraphQL
`@deprecated`)
-
`ApplicationManifest.settingsCustomTabFrontComponentUniversalIdentifier`
- the `settingsCustomTabFrontComponentId` column comment on
`ApplicationEntity`

The DB column is intentionally **not dropped**, so existing
installations upgrade cleanly.
2026-06-25 12:29:45 +02:00

4648 lines
105 KiB
GraphQL

interface BillingProductDTO {
name: String!
description: String!
images: [String!]
metadata: BillingProductMetadata!
}
type ApiKey {
id: UUID!
name: String!
expiresAt: DateTime!
revokedAt: DateTime
createdAt: DateTime!
updatedAt: DateTime!
role: Role!
}
"""A UUID scalar type"""
scalar UUID
"""
A date-time string at UTC, such as 2019-12-03T09:54:33Z, compliant with the date-time format.
"""
scalar DateTime
type ApplicationRegistrationVariable {
id: UUID!
key: String!
description: String!
isSecret: Boolean!
isRequired: Boolean!
isFilled: Boolean!
createdAt: DateTime!
updatedAt: DateTime!
}
type ApplicationRegistration {
id: UUID!
universalIdentifier: String!
name: String!
oAuthClientId: String!
oAuthRedirectUris: [String!]!
oAuthScopes: [String!]!
ownerWorkspaceId: UUID
sourceType: ApplicationRegistrationSourceType!
sourcePackage: String
latestAvailableVersion: String
isListed: Boolean!
isFeatured: Boolean!
isPreInstalled: Boolean!
logoUrl: String
createdAt: DateTime!
updatedAt: DateTime!
isConfigured: Boolean!
}
enum ApplicationRegistrationSourceType {
NPM
TARBALL
LOCAL
OAUTH_ONLY
}
type TwoFactorAuthenticationMethodSummary {
twoFactorAuthenticationMethodId: UUID!
status: String!
strategy: String!
}
type RowLevelPermissionPredicateGroup {
id: String!
parentRowLevelPermissionPredicateGroupId: String
logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator!
positionInRowLevelPermissionPredicateGroup: Float
roleId: String!
objectMetadataId: String!
}
enum RowLevelPermissionPredicateGroupLogicalOperator {
AND
OR
}
type RowLevelPermissionPredicate {
id: String!
fieldMetadataId: String!
objectMetadataId: String!
operand: RowLevelPermissionPredicateOperand!
subFieldName: String
workspaceMemberFieldMetadataId: String
workspaceMemberSubFieldName: String
rowLevelPermissionPredicateGroupId: String
positionInRowLevelPermissionPredicateGroup: Float
roleId: String!
value: JSON
}
enum RowLevelPermissionPredicateOperand {
IS
IS_NOT_NULL
IS_NOT
LESS_THAN_OR_EQUAL
GREATER_THAN_OR_EQUAL
IS_BEFORE
IS_AFTER
CONTAINS
DOES_NOT_CONTAIN
IS_EMPTY
IS_NOT_EMPTY
IS_RELATIVE
IS_IN_PAST
IS_IN_FUTURE
IS_TODAY
VECTOR_SEARCH
}
"""
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
type ObjectPermission {
objectMetadataId: UUID!
canReadObjectRecords: Boolean
canUpdateObjectRecords: Boolean
canSoftDeleteObjectRecords: Boolean
canDestroyObjectRecords: Boolean
restrictedFields: JSON
rowLevelPermissionPredicates: [RowLevelPermissionPredicate!]
rowLevelPermissionPredicateGroups: [RowLevelPermissionPredicateGroup!]
}
type UserWorkspace {
id: UUID!
user: User!
userId: UUID!
locale: String!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
permissionFlags: [PermissionFlagType!]
objectPermissions: [ObjectPermission!]
objectsPermissions: [ObjectPermission!]
twoFactorAuthenticationMethodSummary: [TwoFactorAuthenticationMethodSummary!]
}
enum PermissionFlagType {
API_KEYS_AND_WEBHOOKS
WORKSPACE
WORKSPACE_MEMBERS
ROLES
DATA_MODEL
SECURITY
WORKFLOWS
IMPERSONATE
SSO_BYPASS
APPLICATIONS
MARKETPLACE_APPS
LAYOUTS
BILLING
AI_SETTINGS
AI
VIEWS
UPLOAD_FILE
DOWNLOAD_FILE
SEND_EMAIL_TOOL
HTTP_REQUEST_TOOL
CODE_INTERPRETER_TOOL
IMPORT_CSV
EXPORT_CSV
CONNECTED_ACCOUNTS
PROFILE_INFORMATION
}
type FullName {
firstName: String!
lastName: String!
}
type WorkspaceMember {
id: UUID!
name: FullName!
userEmail: String!
colorScheme: String!
avatarUrl: String
locale: String
calendarStartDay: Int
timeZone: String
dateFormat: WorkspaceMemberDateFormatEnum
timeFormat: WorkspaceMemberTimeFormatEnum
roles: [Role!]
userWorkspaceId: UUID
numberFormat: WorkspaceMemberNumberFormatEnum
}
"""Date format as Month first, Day first, Year first or system as default"""
enum WorkspaceMemberDateFormatEnum {
SYSTEM
MONTH_FIRST
DAY_FIRST
YEAR_FIRST
}
"""Time time as Military, Standard or system as default"""
enum WorkspaceMemberTimeFormatEnum {
SYSTEM
HOUR_12
HOUR_24
}
"""Number format for displaying numbers"""
enum WorkspaceMemberNumberFormatEnum {
SYSTEM
COMMAS_AND_DOT
SPACES_AND_COMMA
DOTS_AND_COMMA
APOSTROPHE_AND_DOT
}
type Agent {
id: UUID!
name: String!
label: String!
icon: String
description: String
prompt: String!
modelId: String!
responseFormat: JSON
roleId: UUID
isCustom: Boolean!
applicationId: UUID
createdAt: DateTime!
updatedAt: DateTime!
modelConfiguration: JSON
evaluationInputs: [String!]!
}
type FieldPermission {
id: UUID!
objectMetadataId: UUID!
fieldMetadataId: UUID!
roleId: UUID!
canReadFieldValue: Boolean
canUpdateFieldValue: Boolean
}
type RolePermissionFlag {
id: UUID!
roleId: UUID!
flag: String!
}
type ApiKeyForRole {
id: UUID!
name: String!
expiresAt: DateTime!
revokedAt: DateTime
}
type Role {
id: UUID!
universalIdentifier: UUID
label: String!
description: String
icon: String
isEditable: Boolean!
canBeAssignedToUsers: Boolean!
canBeAssignedToAgents: Boolean!
canBeAssignedToApiKeys: Boolean!
workspaceMembers: [WorkspaceMember!]!
agents: [Agent!]!
apiKeys: [ApiKeyForRole!]!
canUpdateAllSettings: Boolean!
canAccessAllTools: Boolean!
canReadAllObjectRecords: Boolean!
canUpdateAllObjectRecords: Boolean!
canSoftDeleteAllObjectRecords: Boolean!
canDestroyAllObjectRecords: Boolean!
permissionFlags: [RolePermissionFlag!]
objectPermissions: [ObjectPermission!]
fieldPermissions: [FieldPermission!]
rowLevelPermissionPredicates: [RowLevelPermissionPredicate!]
rowLevelPermissionPredicateGroups: [RowLevelPermissionPredicateGroup!]
}
type ApplicationRegistrationSummary {
id: UUID!
latestAvailableVersion: String
sourceType: ApplicationRegistrationSourceType!
logoUrl: String
}
type ApplicationVariable {
id: UUID!
key: String!
value: String!
description: String!
isSecret: Boolean!
}
type AuthToken {
token: String!
expiresAt: DateTime!
}
type ApplicationTokenPair {
applicationAccessToken: AuthToken!
applicationRefreshToken: AuthToken!
}
type FrontComponent {
id: UUID!
name: String!
description: String
sourceComponentPath: String!
builtComponentPath: String!
componentName: String!
builtComponentChecksum: String!
universalIdentifier: UUID
applicationId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
isHeadless: Boolean!
usesSdkClient: Boolean!
applicationTokenPair: ApplicationTokenPair
applicationVariables: JSON
}
type CommandMenuItem {
id: UUID!
workflowVersionId: UUID
frontComponentId: UUID
frontComponent: FrontComponent
engineComponentKey: EngineComponentKey!
label: String!
icon: String
shortLabel: String
position: Float!
isPinned: Boolean!
availabilityType: CommandMenuItemAvailabilityType!
payload: CommandMenuItemPayload
hotKeys: [String!]
conditionalAvailabilityExpression: String
availabilityObjectMetadataId: UUID
pageLayoutId: UUID
universalIdentifier: UUID
applicationId: UUID
isActive: Boolean!
createdAt: DateTime!
updatedAt: DateTime!
}
enum EngineComponentKey {
NAVIGATE_TO_NEXT_RECORD
NAVIGATE_TO_PREVIOUS_RECORD
CREATE_NEW_RECORD
DELETE_RECORDS
RESTORE_RECORDS
DESTROY_RECORDS
ADD_TO_FAVORITES
REMOVE_FROM_FAVORITES
EXPORT_NOTE_TO_PDF
EXPORT_RECORDS
UPDATE_MULTIPLE_RECORDS
MERGE_MULTIPLE_RECORDS
IMPORT_RECORDS
EXPORT_VIEW
SEE_DELETED_RECORDS
CREATE_NEW_VIEW
HIDE_DELETED_RECORDS
EDIT_RECORD_PAGE_LAYOUT
EDIT_DASHBOARD_LAYOUT
SAVE_DASHBOARD_LAYOUT
CANCEL_DASHBOARD_LAYOUT
DUPLICATE_DASHBOARD
ACTIVATE_WORKFLOW
DEACTIVATE_WORKFLOW
DISCARD_DRAFT_WORKFLOW
TEST_WORKFLOW
SEE_ACTIVE_VERSION_WORKFLOW
SEE_RUNS_WORKFLOW
SEE_VERSIONS_WORKFLOW
ADD_NODE_WORKFLOW
TIDY_UP_WORKFLOW
DUPLICATE_WORKFLOW
SEE_VERSION_WORKFLOW_RUN
SEE_WORKFLOW_WORKFLOW_RUN
STOP_WORKFLOW_RUN
RETRY_WORKFLOW_RUN
SEE_RUNS_WORKFLOW_VERSION
SEE_WORKFLOW_WORKFLOW_VERSION
USE_AS_DRAFT_WORKFLOW_VERSION
SEE_VERSIONS_WORKFLOW_VERSION
SEARCH_RECORDS
SEARCH_RECORDS_FALLBACK
ASK_AI
VIEW_PREVIOUS_AI_CHATS
NAVIGATION
TRIGGER_WORKFLOW_VERSION
FRONT_COMPONENT_RENDERER
REPLY_TO_EMAIL_THREAD
COMPOSE_EMAIL
COMPOSE_CAMPAIGN
GO_TO_PEOPLE
GO_TO_COMPANIES
GO_TO_DASHBOARDS
GO_TO_OPPORTUNITIES
GO_TO_SETTINGS
GO_TO_TASKS
GO_TO_NOTES
GO_TO_WORKFLOWS
GO_TO_RUNS
DELETE_SINGLE_RECORD
DELETE_MULTIPLE_RECORDS
RESTORE_SINGLE_RECORD
RESTORE_MULTIPLE_RECORDS
DESTROY_SINGLE_RECORD
DESTROY_MULTIPLE_RECORDS
EXPORT_FROM_RECORD_INDEX
EXPORT_FROM_RECORD_SHOW
EXPORT_MULTIPLE_RECORDS
}
enum CommandMenuItemAvailabilityType {
GLOBAL
GLOBAL_OBJECT_CONTEXT
RECORD_SELECTION
FALLBACK
}
union CommandMenuItemPayload = PathCommandMenuItemPayload | ObjectMetadataCommandMenuItemPayload
type PathCommandMenuItemPayload {
path: String!
}
type ObjectMetadataCommandMenuItemPayload {
objectMetadataItemId: UUID!
}
type LogicFunction {
id: UUID!
name: String!
description: String
runtime: String!
timeoutSeconds: Float!
executionMode: LogicFunctionExecutionMode!
sourceHandlerPath: String!
handlerName: String!
cronTriggerSettings: JSON
databaseEventTriggerSettings: JSON
httpRouteTriggerSettings: JSON
toolTriggerSettings: JSON
workflowActionTriggerSettings: JSON
applicationId: UUID
universalIdentifier: UUID
createdAt: DateTime!
updatedAt: DateTime!
}
enum LogicFunctionExecutionMode {
LIVE
PREBUILT
}
type StandardOverrides {
label: String
description: String
icon: String
translations: JSON
}
type Field {
id: UUID!
universalIdentifier: String!
type: FieldMetadataType!
name: String!
label: String!
description: String
icon: String
standardOverrides: StandardOverrides
isActive: Boolean
isSystem: Boolean
isUIEditable: Boolean
isUIReadOnly: Boolean @deprecated(reason: "Use isUIEditable")
isNullable: Boolean
isUnique: Boolean
defaultValue: JSON
options: JSON
settings: JSON
objectMetadataId: UUID!
isLabelSyncedWithName: Boolean
morphId: UUID
createdAt: DateTime!
updatedAt: DateTime!
applicationId: UUID!
relation: Relation
morphRelations: [Relation!]
object: Object
}
"""Type of the field"""
enum FieldMetadataType {
ACTOR
ADDRESS
ARRAY
BOOLEAN
CURRENCY
DATE
DATE_TIME
EMAILS
FILES
FULL_NAME
LINKS
MORPH_RELATION
MULTI_SELECT
NUMBER
NUMERIC
PHONES
POSITION
RATING
RAW_JSON
RELATION
RICH_TEXT
SELECT
TEXT
TS_VECTOR
UUID
}
type IndexField {
id: UUID!
fieldMetadataId: UUID!
order: Float!
subFieldName: String
createdAt: DateTime!
updatedAt: DateTime!
}
type Index {
id: UUID!
name: String!
isCustom: Boolean
isUnique: Boolean!
indexWhereClause: String
indexType: IndexType!
createdAt: DateTime!
updatedAt: DateTime!
indexFieldMetadataList: [IndexField!]!
objectMetadata(
"""Limit or page results."""
paging: CursorPaging! = {first: 10}
"""Specify to filter the records returned."""
filter: ObjectFilter! = {}
): IndexObjectMetadataConnection!
indexFieldMetadatas(
"""Limit or page results."""
paging: CursorPaging! = {first: 10}
"""Specify to filter the records returned."""
filter: IndexFieldFilter! = {}
): IndexIndexFieldMetadatasConnection!
}
"""Type of the index"""
enum IndexType {
BTREE
GIN
}
input CursorPaging {
"""Paginate before opaque cursor"""
before: ConnectionCursor
"""Paginate after opaque cursor"""
after: ConnectionCursor
"""Paginate first"""
first: Int
"""Paginate last"""
last: Int
}
"""Cursor for paging through collections"""
scalar ConnectionCursor
input ObjectFilter {
and: [ObjectFilter!]
or: [ObjectFilter!]
id: UUIDFilterComparison
isRemote: BooleanFieldComparison
isActive: BooleanFieldComparison
isSystem: BooleanFieldComparison
isUIEditable: BooleanFieldComparison
isUICreatable: BooleanFieldComparison
isUIReadOnly: BooleanFieldComparison
isSearchable: BooleanFieldComparison
}
input UUIDFilterComparison {
is: Boolean
isNot: Boolean
eq: UUID
neq: UUID
gt: UUID
gte: UUID
lt: UUID
lte: UUID
like: UUID
notLike: UUID
iLike: UUID
notILike: UUID
in: [UUID!]
notIn: [UUID!]
}
input BooleanFieldComparison {
is: Boolean
isNot: Boolean
}
input IndexFieldFilter {
and: [IndexFieldFilter!]
or: [IndexFieldFilter!]
id: UUIDFilterComparison
fieldMetadataId: UUIDFilterComparison
}
type ObjectStandardOverrides {
labelSingular: String
labelPlural: String
description: String
icon: String
color: String
translations: JSON
}
type Object {
id: UUID!
universalIdentifier: String!
nameSingular: String!
namePlural: String!
labelSingular: String!
labelPlural: String!
description: String
icon: String
standardOverrides: ObjectStandardOverrides
shortcut: String
color: String
isRemote: Boolean!
isActive: Boolean!
isSystem: Boolean!
isUIEditable: Boolean!
isUICreatable: Boolean!
isUIReadOnly: Boolean! @deprecated(reason: "Use isUIEditable")
isSearchable: Boolean!
applicationId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
labelIdentifierFieldMetadataId: UUID
imageIdentifierFieldMetadataId: UUID
isLabelSyncedWithName: Boolean!
duplicateCriteria: [[String!]!]
fieldsList: [Field!]!
indexMetadataList: [Index!]!
fields(
"""Limit or page results."""
paging: CursorPaging! = {first: 10}
"""Specify to filter the records returned."""
filter: FieldFilter! = {}
): ObjectFieldsConnection!
indexMetadatas(
"""Limit or page results."""
paging: CursorPaging! = {first: 10}
"""Specify to filter the records returned."""
filter: IndexFilter! = {}
): ObjectIndexMetadatasConnection!
}
input FieldFilter {
and: [FieldFilter!]
or: [FieldFilter!]
id: UUIDFilterComparison
isActive: BooleanFieldComparison
isSystem: BooleanFieldComparison
isUIEditable: BooleanFieldComparison
isUIReadOnly: BooleanFieldComparison
objectMetadataId: UUIDFilterComparison
}
input IndexFilter {
and: [IndexFilter!]
or: [IndexFilter!]
id: UUIDFilterComparison
isCustom: BooleanFieldComparison
}
type Application {
id: UUID!
name: String!
description: String
logo: String
version: String
universalIdentifier: String!
packageJsonChecksum: String
packageJsonFileId: UUID
yarnLockChecksum: String
yarnLockFileId: UUID
availablePackages: JSON!
applicationRegistrationId: UUID
canBeUninstalled: Boolean!
defaultRoleId: String
settingsCustomTabFrontComponentId: UUID @deprecated(reason: "Custom settings tabs are no longer supported. This field is ignored.")
defaultLogicFunctionRole: Role
agents: [Agent!]!
frontComponents: [FrontComponent!]!
commandMenuItems: [CommandMenuItem!]!
logicFunctions: [LogicFunction!]!
objects: [Object!]!
applicationVariables: [ApplicationVariable!]!
applicationRegistration: ApplicationRegistrationSummary
}
type ViewField {
id: UUID!
fieldMetadataId: UUID!
isVisible: Boolean!
size: Float!
position: Float!
aggregateOperation: AggregateOperations
viewId: UUID!
viewFieldGroupId: UUID
workspaceId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
isActive: Boolean!
deletedAt: DateTime
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
}
enum AggregateOperations {
MIN
MAX
AVG
SUM
COUNT
COUNT_UNIQUE_VALUES
COUNT_EMPTY
COUNT_NOT_EMPTY
COUNT_TRUE
COUNT_FALSE
PERCENTAGE_EMPTY
PERCENTAGE_NOT_EMPTY
}
type ViewFilterGroup {
id: UUID!
parentViewFilterGroupId: UUID
logicalOperator: ViewFilterGroupLogicalOperator!
positionInViewFilterGroup: Float
viewId: UUID!
workspaceId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
}
enum ViewFilterGroupLogicalOperator {
AND
OR
NOT
}
type ViewFilter {
id: UUID!
fieldMetadataId: UUID!
operand: ViewFilterOperand!
value: JSON!
viewFilterGroupId: UUID
positionInViewFilterGroup: Float
subFieldName: String
relationTargetFieldMetadataId: UUID
viewId: UUID!
workspaceId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
}
enum ViewFilterOperand {
IS
IS_NOT_NULL
IS_NOT
LESS_THAN_OR_EQUAL
GREATER_THAN_OR_EQUAL
IS_BEFORE
IS_AFTER
CONTAINS
DOES_NOT_CONTAIN
IS_EMPTY
IS_NOT_EMPTY
IS_RELATIVE
IS_IN_PAST
IS_IN_FUTURE
IS_TODAY
VECTOR_SEARCH
}
type ViewGroup {
id: UUID!
isVisible: Boolean!
fieldValue: String!
position: Float!
viewId: UUID!
workspaceId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
}
type ViewSort {
id: UUID!
fieldMetadataId: UUID!
direction: ViewSortDirection!
subFieldName: String
viewId: UUID!
workspaceId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
}
enum ViewSortDirection {
ASC
DESC
}
type ViewFieldGroup {
id: UUID!
name: String!
position: Float!
isVisible: Boolean!
viewId: UUID!
workspaceId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
isActive: Boolean!
deletedAt: DateTime
viewFields: [ViewField!]!
isOverridden: Boolean! @deprecated(reason: "isOverridden is deprecated")
}
type View {
id: UUID!
name: String!
objectMetadataId: UUID!
type: ViewType!
key: ViewKey
icon: String!
position: Float!
isCompact: Boolean!
isCustom: Boolean!
openRecordIn: ViewOpenRecordIn!
kanbanAggregateOperation: AggregateOperations
kanbanAggregateOperationFieldMetadataId: UUID
mainGroupByFieldMetadataId: UUID
shouldHideEmptyGroups: Boolean!
kanbanColumnWidth: Int
calendarFieldMetadataId: UUID
workspaceId: UUID!
anyFieldFilterValue: String
calendarLayout: ViewCalendarLayout
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
viewFields: [ViewField!]!
viewFilters: [ViewFilter!]!
viewFilterGroups: [ViewFilterGroup!]!
viewSorts: [ViewSort!]!
viewGroups: [ViewGroup!]!
viewFieldGroups: [ViewFieldGroup!]!
visibility: ViewVisibility!
createdByUserWorkspaceId: UUID
isActive: Boolean!
}
enum ViewType {
TABLE
KANBAN
CALENDAR
FIELDS_WIDGET
TABLE_WIDGET
}
enum ViewKey {
INDEX
}
enum ViewOpenRecordIn {
SIDE_PANEL
RECORD_PAGE
}
enum ViewCalendarLayout {
DAY
WEEK
MONTH
}
enum ViewVisibility {
WORKSPACE
UNLISTED
}
type Workspace {
id: UUID!
displayName: String
logo: String
logoFileId: UUID
inviteHash: String
deletedAt: DateTime
createdAt: DateTime!
updatedAt: DateTime!
allowImpersonation: Boolean!
isPublicInviteLinkEnabled: Boolean!
trashRetentionDays: Float!
eventLogRetentionDays: Float!
workspaceMembersCount: Float
activationStatus: WorkspaceActivationStatus!
views: [View!]
viewFields: [ViewField!]
viewFilters: [ViewFilter!]
viewFilterGroups: [ViewFilterGroup!]
viewGroups: [ViewGroup!]
viewSorts: [ViewSort!]
metadataVersion: Float!
databaseSchema: String
subdomain: String!
customDomain: String
isGoogleAuthEnabled: Boolean!
isGoogleAuthBypassEnabled: Boolean!
isTwoFactorAuthenticationEnforced: Boolean!
isPasswordAuthEnabled: Boolean!
isPasswordAuthBypassEnabled: Boolean!
isMicrosoftAuthEnabled: Boolean!
isMicrosoftAuthBypassEnabled: Boolean!
isCustomDomainEnabled: Boolean!
isInternalMessagesImportEnabled: Boolean!
editableProfileFields: [String!]
defaultRole: Role
fastModel: String!
smartModel: String!
aiAdditionalInstructions: String
enabledAiModelIds: [String!]
useRecommendedModels: Boolean!
routerModel: String!
workspaceCustomApplication: Application
featureFlags: [FeatureFlag!]
billingSubscriptions: [BillingSubscription!]!
installedApplications: [Application!]!
currentBillingSubscription: BillingSubscription
billingCustomer: BillingCustomer
billingEntitlements: [BillingEntitlement!]!
hasValidSignedEnterpriseKey: Boolean!
hasValidEnterpriseValidityToken: Boolean!
workspaceUrls: WorkspaceUrls!
workspaceCustomApplicationId: String!
}
enum WorkspaceActivationStatus {
ONGOING_CREATION
PENDING_CREATION
ACTIVE
INACTIVE
SUSPENDED
}
type AppToken {
id: UUID!
type: String!
expiresAt: DateTime!
createdAt: DateTime!
updatedAt: DateTime!
}
type User {
id: UUID!
firstName: String!
lastName: String!
email: String!
isEmailVerified: Boolean!
disabled: Boolean
canImpersonate: Boolean!
canAccessFullAdminPanel: Boolean!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
locale: String!
workspaceMember: WorkspaceMember
userWorkspaces: [UserWorkspace!]!
onboardingStatus: OnboardingStatus
currentWorkspace: Workspace
currentUserWorkspace: UserWorkspace
userVars: JSONObject
workspaceMembers: [WorkspaceMember!]
deletedWorkspaceMembers: [DeletedWorkspaceMember!]
hasPassword: Boolean!
supportUserHash: String
workspaces: [UserWorkspace!]!
availableWorkspaces: AvailableWorkspaces!
}
"""Onboarding status"""
enum OnboardingStatus {
PLAN_REQUIRED
WORKSPACE_ACTIVATION
PROFILE_CREATION
SYNC_EMAIL
INVITE_TEAM
BOOK_ONBOARDING
COMPLETED
}
"""
The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
"""
scalar JSONObject
type RatioAggregateConfig {
fieldMetadataId: UUID!
optionValue: String!
}
type RichTextBody {
blocknote: String
markdown: String
}
type GridPosition {
row: Float!
column: Float!
rowSpan: Float!
columnSpan: Float!
}
type PageLayoutWidget {
id: UUID!
applicationId: UUID!
pageLayoutTabId: UUID!
title: String!
type: WidgetType!
objectMetadataId: UUID
gridPosition: GridPosition! @deprecated(reason: "Use `position` instead. Will be removed in a future release.")
position: PageLayoutWidgetPosition
configuration: WidgetConfiguration!
conditionalDisplay: JSON
conditionalAvailabilityExpression: String
createdAt: DateTime!
updatedAt: DateTime!
isActive: Boolean!
deletedAt: DateTime
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
}
enum WidgetType {
VIEW
IFRAME
FIELD
FIELDS
GRAPH
STANDALONE_RICH_TEXT
TIMELINE
TASKS
NOTES
FILES
EMAILS
CALENDAR
FIELD_RICH_TEXT
WORKFLOW
WORKFLOW_VERSION
WORKFLOW_RUN
FRONT_COMPONENT
RECORD_TABLE
EMAIL_THREAD
}
union PageLayoutWidgetPosition = PageLayoutWidgetGridPosition | PageLayoutWidgetVerticalListPosition | PageLayoutWidgetCanvasPosition
type PageLayoutWidgetGridPosition {
layoutMode: PageLayoutTabLayoutMode!
row: Int!
column: Int!
rowSpan: Int!
columnSpan: Int!
}
enum PageLayoutTabLayoutMode {
GRID
VERTICAL_LIST
CANVAS
}
type PageLayoutWidgetVerticalListPosition {
layoutMode: PageLayoutTabLayoutMode!
index: Int!
}
type PageLayoutWidgetCanvasPosition {
layoutMode: PageLayoutTabLayoutMode!
}
union WidgetConfiguration = AggregateChartConfiguration | StandaloneRichTextConfiguration | PieChartConfiguration | LineChartConfiguration | IframeConfiguration | BarChartConfiguration | CalendarConfiguration | FrontComponentConfiguration | EmailsConfiguration | EmailThreadConfiguration | FieldConfiguration | FieldRichTextConfiguration | FieldsConfiguration | FilesConfiguration | NotesConfiguration | TasksConfiguration | TimelineConfiguration | ViewConfiguration | RecordTableConfiguration | WorkflowConfiguration | WorkflowRunConfiguration | WorkflowVersionConfiguration
type AggregateChartConfiguration {
configurationType: WidgetConfigurationType!
aggregateFieldMetadataId: UUID!
aggregateOperation: AggregateOperations!
label: String
displayDataLabel: Boolean
numberFormat: ChartNumberFormat
description: String
filter: JSON
timezone: String
firstDayOfTheWeek: Int
prefix: String
suffix: String
ratioAggregateConfig: RatioAggregateConfig
}
enum WidgetConfigurationType {
AGGREGATE_CHART
PIE_CHART
BAR_CHART
LINE_CHART
IFRAME
STANDALONE_RICH_TEXT
VIEW
FIELD
FIELDS
TIMELINE
TASKS
NOTES
FILES
EMAILS
CALENDAR
FIELD_RICH_TEXT
WORKFLOW
WORKFLOW_VERSION
WORKFLOW_RUN
FRONT_COMPONENT
RECORD_TABLE
EMAIL_THREAD
}
"""Format used to display the chart value"""
enum ChartNumberFormat {
SHORT
FULL
}
type StandaloneRichTextConfiguration {
configurationType: WidgetConfigurationType!
body: RichTextBody!
}
type PieChartConfiguration {
configurationType: WidgetConfigurationType!
aggregateFieldMetadataId: UUID!
aggregateOperation: AggregateOperations!
groupByFieldMetadataId: UUID!
groupBySubFieldName: String
dateGranularity: ObjectRecordGroupByDateGranularity
orderBy: GraphOrderBy
manualSortOrder: [String!]
displayDataLabel: Boolean
showCenterMetric: Boolean
displayLegend: Boolean
hideEmptyCategory: Boolean
splitMultiValueFields: Boolean
description: String
color: String
filter: JSON
timezone: String
firstDayOfTheWeek: Int
}
"""
Date granularity options (e.g. DAY, MONTH, QUARTER, YEAR, WEEK, DAY_OF_THE_WEEK, MONTH_OF_THE_YEAR, QUARTER_OF_THE_YEAR)
"""
enum ObjectRecordGroupByDateGranularity {
DAY
MONTH
QUARTER
YEAR
WEEK
DAY_OF_THE_WEEK
MONTH_OF_THE_YEAR
QUARTER_OF_THE_YEAR
NONE
}
"""Order by options for graph widgets"""
enum GraphOrderBy {
FIELD_ASC
FIELD_DESC
FIELD_POSITION_ASC
FIELD_POSITION_DESC
VALUE_ASC
VALUE_DESC
MANUAL
}
type LineChartConfiguration {
configurationType: WidgetConfigurationType!
aggregateFieldMetadataId: UUID!
aggregateOperation: AggregateOperations!
primaryAxisGroupByFieldMetadataId: UUID!
primaryAxisGroupBySubFieldName: String
primaryAxisDateGranularity: ObjectRecordGroupByDateGranularity
primaryAxisOrderBy: GraphOrderBy
primaryAxisManualSortOrder: [String!]
secondaryAxisGroupByFieldMetadataId: UUID
secondaryAxisGroupBySubFieldName: String
secondaryAxisGroupByDateGranularity: ObjectRecordGroupByDateGranularity
secondaryAxisOrderBy: GraphOrderBy
secondaryAxisManualSortOrder: [String!]
omitNullValues: Boolean
splitMultiValueFields: Boolean
axisNameDisplay: AxisNameDisplay
displayDataLabel: Boolean
displayLegend: Boolean
rangeMin: Float
rangeMax: Float
description: String
color: String
filter: JSON
isStacked: Boolean
isCumulative: Boolean
timezone: String
firstDayOfTheWeek: Int
}
"""Which axes should display labels"""
enum AxisNameDisplay {
NONE
X
Y
BOTH
}
type IframeConfiguration {
configurationType: WidgetConfigurationType!
url: String
}
type BarChartConfiguration {
configurationType: WidgetConfigurationType!
aggregateFieldMetadataId: UUID!
aggregateOperation: AggregateOperations!
primaryAxisGroupByFieldMetadataId: UUID!
primaryAxisGroupBySubFieldName: String
primaryAxisDateGranularity: ObjectRecordGroupByDateGranularity
primaryAxisOrderBy: GraphOrderBy
primaryAxisManualSortOrder: [String!]
secondaryAxisGroupByFieldMetadataId: UUID
secondaryAxisGroupBySubFieldName: String
secondaryAxisGroupByDateGranularity: ObjectRecordGroupByDateGranularity
secondaryAxisOrderBy: GraphOrderBy
secondaryAxisManualSortOrder: [String!]
omitNullValues: Boolean
splitMultiValueFields: Boolean
axisNameDisplay: AxisNameDisplay
displayDataLabel: Boolean
displayLegend: Boolean
rangeMin: Float
rangeMax: Float
description: String
color: String
filter: JSON
groupMode: BarChartGroupMode
layout: BarChartLayout!
isCumulative: Boolean
timezone: String
firstDayOfTheWeek: Int
}
"""Display mode for bar charts with secondary grouping"""
enum BarChartGroupMode {
STACKED
GROUPED
}
"""Layout orientation for bar charts"""
enum BarChartLayout {
VERTICAL
HORIZONTAL
}
type CalendarConfiguration {
configurationType: WidgetConfigurationType!
}
type FrontComponentConfiguration {
configurationType: WidgetConfigurationType!
frontComponentId: UUID!
}
type EmailsConfiguration {
configurationType: WidgetConfigurationType!
}
type EmailThreadConfiguration {
configurationType: WidgetConfigurationType!
}
type FieldConfiguration {
configurationType: WidgetConfigurationType!
fieldMetadataId: String!
fieldDisplayMode: FieldDisplayMode!
viewId: String
}
"""Display mode for field configuration widgets"""
enum FieldDisplayMode {
CARD
EDITOR
FIELD
VIEW
TABLE
}
type FieldRichTextConfiguration {
configurationType: WidgetConfigurationType!
}
type FieldsConfiguration {
configurationType: WidgetConfigurationType!
viewId: String
newFieldDefaultVisibility: Boolean
shouldAllowUserToSeeHiddenFields: Boolean
}
type FilesConfiguration {
configurationType: WidgetConfigurationType!
}
type NotesConfiguration {
configurationType: WidgetConfigurationType!
}
type TasksConfiguration {
configurationType: WidgetConfigurationType!
}
type TimelineConfiguration {
configurationType: WidgetConfigurationType!
}
type ViewConfiguration {
configurationType: WidgetConfigurationType!
}
type RecordTableConfiguration {
configurationType: WidgetConfigurationType!
viewId: String
recordLimit: Int
}
type WorkflowConfiguration {
configurationType: WidgetConfigurationType!
}
type WorkflowRunConfiguration {
configurationType: WidgetConfigurationType!
}
type WorkflowVersionConfiguration {
configurationType: WidgetConfigurationType!
}
type PageLayoutTab {
id: UUID!
applicationId: UUID!
title: String!
position: Float!
pageLayoutId: UUID!
widgets: [PageLayoutWidget!]
icon: String
layoutMode: PageLayoutTabLayoutMode
createdAt: DateTime!
updatedAt: DateTime!
isActive: Boolean!
deletedAt: DateTime
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
}
type PageLayout {
id: UUID!
name: String!
type: PageLayoutType!
objectMetadataId: UUID
tabs: [PageLayoutTab!]
defaultTabToFocusOnMobileAndSidePanelId: UUID
universalIdentifier: UUID!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
}
enum PageLayoutType {
RECORD_INDEX
RECORD_PAGE
DASHBOARD
STANDALONE_PAGE
}
type ApplicationConnectionProviderOAuthConfig {
scopes: [String!]!
isClientCredentialsConfigured: Boolean!
}
type ApplicationConnectionProvider {
id: UUID!
applicationId: String!
type: String!
name: String!
displayName: String!
oauth: ApplicationConnectionProviderOAuthConfig
}
type EnterpriseLicenseInfoDTO {
isValid: Boolean!
licensee: String
expiresAt: DateTime
subscriptionId: String
}
type EnterpriseSubscriptionStatusDTO {
status: String!
licensee: String
expiresAt: DateTime
cancelAt: DateTime
currentPeriodEnd: DateTime
isCancellationScheduled: Boolean!
}
type ApprovedAccessDomain {
id: UUID!
domain: String!
isValidated: Boolean!
createdAt: DateTime!
}
type FileWithSignedUrl {
id: UUID!
path: String!
size: Float!
createdAt: DateTime!
url: String!
}
type BillingSubscriptionSchedulePhaseItem {
price: String!
quantity: Float
}
type BillingSubscriptionSchedulePhase {
start_date: Float!
end_date: Float!
items: [BillingSubscriptionSchedulePhaseItem!]!
}
type BillingProductMetadata {
planKey: BillingPlanKey!
priceUsageBased: BillingUsageType!
productKey: BillingProductKey!
}
"""The different billing plans available"""
enum BillingPlanKey {
PRO
ENTERPRISE
}
enum BillingUsageType {
METERED
LICENSED
}
"""The different billing products available"""
enum BillingProductKey {
BASE_PRODUCT
RESOURCE_CREDIT
}
type BillingPriceLicensed {
recurringInterval: SubscriptionInterval!
unitAmount: Float!
stripePriceId: String!
priceUsageType: BillingUsageType!
creditAmount: Float
}
enum SubscriptionInterval {
Month
Year
}
type BillingPriceTier {
upTo: Float
flatAmount: Float
unitAmount: Float
}
type BillingPriceMetered {
tiers: [BillingPriceTier!]!
recurringInterval: SubscriptionInterval!
stripePriceId: String!
priceUsageType: BillingUsageType!
}
type BillingProduct {
name: String!
description: String!
images: [String!]
metadata: BillingProductMetadata!
}
type BillingLicensedProduct implements BillingProductDTO {
name: String!
description: String!
images: [String!]
metadata: BillingProductMetadata!
prices: [BillingPriceLicensed!]
}
type BillingMeteredProduct implements BillingProductDTO {
name: String!
description: String!
images: [String!]
metadata: BillingProductMetadata!
prices: [BillingPriceMetered!]
}
type BillingSubscriptionItem {
id: UUID!
hasReachedCurrentPeriodCap: Boolean!
quantity: Float
stripePriceId: String!
billingProduct: BillingProductDTO!
}
type BillingCustomer {
id: UUID!
hasPaymentMethod: Boolean
}
type BillingSubscription {
id: UUID!
status: SubscriptionStatus!
interval: SubscriptionInterval
billingSubscriptionItems: [BillingSubscriptionItem!]
currentPeriodEnd: DateTime
metadata: JSON!
phases: [BillingSubscriptionSchedulePhase!]!
}
enum SubscriptionStatus {
Active
Canceled
Incomplete
IncompleteExpired
PastDue
Paused
Trialing
Unpaid
}
type BillingEndTrialPeriod {
"""Updated subscription status"""
status: SubscriptionStatus
"""Boolean that confirms if a payment method was found"""
hasPaymentMethod: Boolean!
"""
Billing portal URL for payment method update (returned when no payment method exists)
"""
billingPortalUrl: String
}
type BillingResourceCreditUsage {
productKey: BillingProductKey!
periodStart: DateTime!
periodEnd: DateTime!
usedCredits: Float!
grantedCredits: Float!
rolloverCredits: Float!
totalGrantedCredits: Float!
unitPriceCents: Float!
}
type BillingPlan {
planKey: BillingPlanKey!
baseProducts: [BillingLicensedProduct!]!
resourceCreditProducts: [BillingLicensedProduct!]!
meteredProducts: [BillingMeteredProduct!]!
}
type BillingPaymentIntent {
clientSecret: String!
paymentIntentType: String!
}
type BillingSession {
url: String
}
type BillingUpdate {
"""Current billing subscription"""
currentBillingSubscription: BillingSubscription!
"""All billing subscriptions"""
billingSubscriptions: [BillingSubscription!]!
}
type InviteSuggestion {
email: String!
displayName: String
}
type OnboardingStepSuccess {
"""Boolean that confirms query was dispatched"""
success: Boolean!
}
type WorkspaceInvitation {
id: UUID!
email: String!
roleId: UUID
expiresAt: DateTime!
}
type SendInvitations {
"""Boolean that confirms query was dispatched"""
success: Boolean!
errors: [String!]!
result: [WorkspaceInvitation!]!
}
type RecordIdentifier {
id: UUID!
labelIdentifier: String!
imageIdentifier: String
}
type NavigationMenuItem {
id: UUID!
userWorkspaceId: UUID
targetRecordId: UUID
targetObjectMetadataId: UUID
viewId: UUID
type: NavigationMenuItemType!
name: String
link: String
icon: String
color: String
folderId: UUID
pageLayoutId: UUID
position: Float!
applicationId: UUID
createdAt: DateTime!
updatedAt: DateTime!
targetRecordIdentifier: RecordIdentifier
}
enum NavigationMenuItemType {
VIEW
FOLDER
LINK
OBJECT
RECORD
PAGE_LAYOUT
}
type ObjectRecordEventProperties {
updatedFields: [String!]
before: JSON
after: JSON
diff: JSON
}
type MetadataEvent {
type: MetadataEventAction!
metadataName: String!
recordId: String!
properties: ObjectRecordEventProperties!
updatedCollectionHash: String
}
"""Metadata Event Action"""
enum MetadataEventAction {
CREATED
UPDATED
DELETED
}
type ObjectRecordEvent {
action: DatabaseEventAction!
objectNameSingular: String!
recordId: String!
userId: String
workspaceMemberId: String
properties: ObjectRecordEventProperties!
}
"""Database Event Action"""
enum DatabaseEventAction {
CREATED
UPDATED
DELETED
DESTROYED
RESTORED
UPSERTED
}
type ObjectRecordEventWithQueryIds {
queryIds: [String!]!
objectRecordEvent: ObjectRecordEvent!
}
type EventSubscription {
eventStreamId: String!
objectRecordEventsWithQueryIds: [ObjectRecordEventWithQueryIds!]!
metadataEvents: [MetadataEvent!]!
}
type LogicFunctionExecutionResult {
"""Execution result in JSON format"""
data: JSON
"""Execution Logs"""
logs: String!
"""Execution duration in milliseconds"""
duration: Float!
"""Execution status"""
status: LogicFunctionExecutionStatus!
"""Execution error in JSON format"""
error: JSON
}
"""Status of the logic function execution"""
enum LogicFunctionExecutionStatus {
IDLE
SUCCESS
ERROR
}
type FeatureFlag {
key: FeatureFlagKey!
value: Boolean!
}
enum FeatureFlagKey {
IS_UNIQUE_INDEXES_ENABLED
IS_JSON_FILTER_ENABLED
IS_MARKETPLACE_SETTING_TAB_VISIBLE
IS_EMAIL_GROUP_ENABLED
IS_JUNCTION_RELATIONS_ENABLED
IS_REST_METADATA_API_NEW_FORMAT_DIRECT
IS_LOGIC_FUNCTION_PREBUILT_MODE_ENABLED
IS_SETTINGS_DISCOVERY_HERO_ENABLED
IS_CALL_RECORDING_ENABLED
IS_MESSAGING_CALENDAR_WEBHOOK_ENABLED
}
type WorkspaceUrls {
customUrl: String
subdomainUrl: String!
}
type ApplicationRegistrationVariableDTO {
id: UUID!
key: String!
value: String
description: String!
isSecret: Boolean!
isRequired: Boolean!
isFilled: Boolean!
createdAt: DateTime!
updatedAt: DateTime!
}
type BillingTrialPeriod {
duration: Float!
isCreditCardRequired: Boolean!
}
type SSOIdentityProvider {
id: UUID!
name: String!
type: IdentityProviderType!
status: SSOIdentityProviderStatus!
issuer: String!
}
enum IdentityProviderType {
OIDC
SAML
}
enum SSOIdentityProviderStatus {
Active
Inactive
Error
}
type AuthProviders {
sso: [SSOIdentityProvider!]!
google: Boolean!
magicLink: Boolean!
password: Boolean!
microsoft: Boolean!
}
type AuthBypassProviders {
google: Boolean!
password: Boolean!
microsoft: Boolean!
}
type PublicWorkspaceData {
id: UUID!
authProviders: AuthProviders!
authBypassProviders: AuthBypassProviders
logo: String
displayName: String
workspaceUrls: WorkspaceUrls!
}
type PublicWorkspaceDataSummary {
id: UUID!
logo: String
displayName: String
}
type NativeModelCapabilities {
webSearch: Boolean
twitterSearch: Boolean
}
type ClientAiModelConfig {
modelId: String!
label: String!
modelFamily: ModelFamily
modelFamilyLabel: String
sdkPackage: String
inputCostPerMillionTokens: Float
outputCostPerMillionTokens: Float
nativeCapabilities: NativeModelCapabilities
isDeprecated: Boolean
isRecommended: Boolean
providerName: String
providerLabel: String
contextWindowTokens: Float
maxOutputTokens: Float
dataResidency: String
}
enum ModelFamily {
GPT
CLAUDE
GEMINI
MISTRAL
GROK
}
type Billing {
isBillingEnabled: Boolean!
billingUrl: String
stripePublishableKey: String
trialPeriods: [BillingTrialPeriod!]!
}
type Support {
supportDriver: SupportDriver!
supportFrontChatId: String
}
enum SupportDriver {
NONE
FRONT
}
type Sentry {
environment: String
release: String
dsn: String
}
type Captcha {
provider: CaptchaDriverType
siteKey: String
}
enum CaptchaDriverType {
GOOGLE_RECAPTCHA
TURNSTILE
}
type ApiConfig {
mutationMaximumAffectedRecords: Float!
}
type PublicFeatureFlagMetadata {
label: String!
description: String!
imagePath: String
}
type PublicFeatureFlag {
key: FeatureFlagKey!
metadata: PublicFeatureFlagMetadata!
}
type ClientConfigMaintenanceMode {
startAt: DateTime!
endAt: DateTime!
link: String
}
type ClientConfig {
appVersion: String
authProviders: AuthProviders!
billing: Billing!
aiModels: [ClientAiModelConfig!]!
signInPrefilled: Boolean!
isMultiWorkspaceEnabled: Boolean!
isEmailVerificationRequired: Boolean!
defaultSubdomain: String
frontDomain: String!
publicFunctionDomain: String
analyticsEnabled: Boolean!
support: Support!
isAttachmentPreviewEnabled: Boolean!
sentry: Sentry!
captcha: Captcha!
api: ApiConfig!
canManageFeatureFlags: Boolean!
publicFeatureFlags: [PublicFeatureFlag!]!
isMicrosoftMessagingEnabled: Boolean!
isMicrosoftCalendarEnabled: Boolean!
isGoogleMessagingEnabled: Boolean!
isGoogleCalendarEnabled: Boolean!
isConfigVariablesInDbEnabled: Boolean!
isImapSmtpCaldavEnabled: Boolean!
isEmailingDomainInDemoMode: Boolean!
allowRequestsToTwentyIcons: Boolean!
calendarBookingPageId: String
isCloudflareIntegrationEnabled: Boolean!
isClickHouseConfigured: Boolean!
isWorkspaceSchemaDDLLocked: Boolean!
maintenance: ClientConfigMaintenanceMode
}
type UsageBreakdownItem {
key: String!
label: String
creditsUsed: Float!
}
type VersionDistributionEntry {
version: String!
count: Int!
}
type ApplicationRegistrationStats {
activeInstalls: Int!
mostInstalledVersion: String
versionDistribution: [VersionDistributionEntry!]!
}
type CreateApplicationRegistration {
applicationRegistration: ApplicationRegistration!
clientSecret: String!
}
type PublicApplicationRegistration {
id: UUID!
name: String!
logoUrl: String
websiteUrl: String
oAuthScopes: [String!]!
}
type RotateClientSecret {
clientSecret: String!
}
type Relation {
type: RelationType!
sourceObjectMetadata: Object!
targetObjectMetadata: Object!
sourceFieldMetadata: Field!
targetFieldMetadata: Field!
}
"""Relation type"""
enum RelationType {
ONE_TO_MANY
MANY_TO_ONE
}
type IndexEdge {
"""The node containing the Index"""
node: Index!
"""Cursor for this node."""
cursor: ConnectionCursor!
}
type PageInfo {
"""true if paging forward and there are more records."""
hasNextPage: Boolean
"""true if paging backwards and there are more records."""
hasPreviousPage: Boolean
"""The cursor of the first returned record."""
startCursor: ConnectionCursor
"""The cursor of the last returned record."""
endCursor: ConnectionCursor
}
type IndexConnection {
"""Paging information"""
pageInfo: PageInfo!
"""Array of edges."""
edges: [IndexEdge!]!
}
type IndexFieldEdge {
"""The node containing the IndexField"""
node: IndexField!
"""Cursor for this node."""
cursor: ConnectionCursor!
}
type IndexIndexFieldMetadatasConnection {
"""Paging information"""
pageInfo: PageInfo!
"""Array of edges."""
edges: [IndexFieldEdge!]!
}
type ObjectEdge {
"""The node containing the Object"""
node: Object!
"""Cursor for this node."""
cursor: ConnectionCursor!
}
type IndexObjectMetadataConnection {
"""Paging information"""
pageInfo: PageInfo!
"""Array of edges."""
edges: [ObjectEdge!]!
}
type ObjectRecordCount {
objectNamePlural: String!
totalCount: Int!
}
type ObjectConnection {
"""Paging information"""
pageInfo: PageInfo!
"""Array of edges."""
edges: [ObjectEdge!]!
}
type ObjectIndexMetadatasConnection {
"""Paging information"""
pageInfo: PageInfo!
"""Array of edges."""
edges: [IndexEdge!]!
}
type FieldEdge {
"""The node containing the Field"""
node: Field!
"""Cursor for this node."""
cursor: ConnectionCursor!
}
type ObjectFieldsConnection {
"""Paging information"""
pageInfo: PageInfo!
"""Array of edges."""
edges: [FieldEdge!]!
}
type FieldConnection {
"""Paging information"""
pageInfo: PageInfo!
"""Array of edges."""
edges: [FieldEdge!]!
}
type AppConnection {
id: ID!
providerName: String!
name: String!
handle: String!
visibility: String!
userWorkspaceId: String!
accessToken: String!
scopes: [String!]!
authFailedAt: String
}
type ResendEmailVerificationToken {
success: Boolean!
}
type DeleteSso {
identityProviderId: UUID!
}
type EditSso {
id: UUID!
type: IdentityProviderType!
issuer: String!
name: String!
status: SSOIdentityProviderStatus!
}
type WorkspaceNameAndId {
displayName: String
id: UUID!
}
type FindAvailableSSOIDP {
type: IdentityProviderType!
id: UUID!
issuer: String!
name: String!
status: SSOIdentityProviderStatus!
workspace: WorkspaceNameAndId!
}
type SetupSso {
id: UUID!
type: IdentityProviderType!
issuer: String!
name: String!
status: SSOIdentityProviderStatus!
}
type SSOConnection {
type: IdentityProviderType!
id: UUID!
issuer: String!
name: String!
status: SSOIdentityProviderStatus!
}
type AvailableWorkspace {
id: UUID!
displayName: String
loginToken: String
personalInviteToken: String
inviteHash: String
workspaceUrls: WorkspaceUrls!
logo: String
sso: [SSOConnection!]!
}
type AvailableWorkspaces {
availableWorkspacesForSignIn: [AvailableWorkspace!]!
availableWorkspacesForSignUp: [AvailableWorkspace!]!
}
type DeletedWorkspaceMember {
id: UUID!
name: FullName!
userEmail: String!
avatarUrl: String
userWorkspaceId: UUID
}
type BillingEntitlement {
key: BillingEntitlementKey!
value: Boolean!
}
enum BillingEntitlementKey {
SSO
CUSTOM_DOMAIN
RLS
AUDIT_LOGS
}
type DomainRecord {
validationType: String!
type: String!
status: String!
key: String!
value: String!
}
type DomainValidRecords {
id: UUID!
domain: String!
records: [DomainRecord!]!
isCustomDomainEnabled: Boolean
}
type UpsertRowLevelPermissionPredicatesResult {
predicates: [RowLevelPermissionPredicate!]!
predicateGroups: [RowLevelPermissionPredicateGroup!]!
}
type LogicFunctionLogs {
"""Execution Logs"""
logs: String!
}
type PublicConnectionParametersOutput {
host: String!
port: Float!
username: String
connectionSecurity: EmailConnectionSecurity
}
enum EmailConnectionSecurity {
NONE
STARTTLS
SSL_TLS
}
type PublicImapSmtpCaldavConnectionParameters {
IMAP: PublicConnectionParametersOutput
SMTP: PublicConnectionParametersOutput
CALDAV: PublicConnectionParametersOutput
}
type ConnectedAccountPublicDTO {
id: UUID!
handle: String!
provider: String!
lastCredentialsRefreshedAt: DateTime
authFailedAt: DateTime
archivedAt: DateTime
handleAliases: [String!]
scopes: [String!]
lastSignedInAt: DateTime
userWorkspaceId: UUID!
connectionProviderId: UUID
applicationId: UUID
name: String
visibility: String!
createdAt: DateTime!
updatedAt: DateTime!
connectionParameters: PublicImapSmtpCaldavConnectionParameters
}
type DeleteTwoFactorAuthenticationMethod {
"""Boolean that confirms query was dispatched"""
success: Boolean!
}
type InitiateTwoFactorAuthenticationProvisioning {
uri: String!
}
type VerifyTwoFactorAuthenticationMethod {
success: Boolean!
}
type AuthorizeApp {
redirectUrl: String!
}
type AuthTokenPair {
accessOrWorkspaceAgnosticToken: AuthToken!
refreshToken: AuthToken!
}
type AvailableWorkspacesAndAccessTokens {
tokens: AuthTokenPair!
availableWorkspaces: AvailableWorkspaces!
}
type EmailPasswordResetLink {
"""Boolean that confirms query was dispatched"""
success: Boolean!
}
type GetAuthorizationUrlForSSO {
authorizationURL: String!
type: String!
id: UUID!
}
type InvalidatePassword {
"""Boolean that confirms query was dispatched"""
success: Boolean!
}
type WorkspaceUrlsAndId {
workspaceUrls: WorkspaceUrls!
id: UUID!
}
type SignUp {
loginToken: AuthToken!
workspace: WorkspaceUrlsAndId!
}
type TransientToken {
transientToken: AuthToken!
}
type ValidatePasswordResetToken {
id: UUID!
email: String!
hasPassword: Boolean!
}
type VerifyEmailAndGetLoginToken {
loginToken: AuthToken!
workspaceUrls: WorkspaceUrls!
}
type SubdomainAvailabilityDTO {
isValid: Boolean!
available: Boolean!
suggestedSubdomain: String!
suggestedSubdomains: [String!]!
}
type WorkspaceCreationDefaultsDTO {
displayName: String!
subdomain: String!
}
type ApiKeyToken {
token: String!
}
type AuthTokens {
tokens: AuthTokenPair!
}
type LoginToken {
loginToken: AuthToken!
}
type CheckUserExist {
exists: Boolean!
availableWorkspacesCount: Float!
isEmailVerified: Boolean!
}
type WorkspaceInviteHashValid {
isValid: Boolean!
}
type Impersonate {
loginToken: AuthToken!
workspace: WorkspaceUrlsAndId!
}
type UsageTimeSeries {
date: String!
creditsUsed: Float!
}
type UsageUserDaily {
userWorkspaceId: String!
dailyUsage: [UsageTimeSeries!]!
}
type UsageAnalytics {
usageByUser: [UsageBreakdownItem!]!
usageByOperationType: [UsageBreakdownItem!]!
usageByModel: [UsageBreakdownItem!]!
timeSeries: [UsageTimeSeries!]!
periodStart: DateTime!
periodEnd: DateTime!
userDailyUsage: UsageUserDaily
}
type DevelopmentApplication {
id: String!
universalIdentifier: String!
}
type WorkspaceMigration {
applicationUniversalIdentifier: String!
actions: JSON!
}
type File {
id: UUID!
path: String!
size: Float!
createdAt: DateTime!
}
type MarketplaceApp {
id: String!
name: String!
description: String!
author: String!
category: String!
logo: String
sourcePackage: String
isFeatured: Boolean!
}
type MarketplaceAppDetail {
universalIdentifier: String!
id: String!
name: String!
sourceType: ApplicationRegistrationSourceType!
sourcePackage: String
latestAvailableVersion: String
isListed: Boolean!
isFeatured: Boolean!
manifest: JSON
}
type PublicDomain {
id: UUID!
domain: String!
isValidated: Boolean!
applicationId: UUID
createdAt: DateTime!
}
type VerificationRecord {
type: String!
key: String!
value: String!
priority: Float
}
type EmailingDomain {
id: UUID!
createdAt: DateTime!
updatedAt: DateTime!
domain: String!
status: EmailingDomainStatus!
verificationRecords: [VerificationRecord!]
verifiedAt: DateTime
}
enum EmailingDomainStatus {
PENDING
VERIFIED
FAILED
TEMPORARY_FAILURE
}
type MessageChannel {
id: UUID!
visibility: MessageChannelVisibility!
handle: String!
type: MessageChannelType!
isContactAutoCreationEnabled: Boolean!
contactAutoCreationPolicy: MessageChannelContactAutoCreationPolicy!
messageFolderImportPolicy: MessageFolderImportPolicy!
excludeNonProfessionalEmails: Boolean!
excludeGroupEmails: Boolean!
pendingGroupEmailsAction: MessageChannelPendingGroupEmailsAction!
isSyncEnabled: Boolean!
syncedAt: DateTime
syncStatus: MessageChannelSyncStatus!
syncStage: MessageChannelSyncStage!
syncStageStartedAt: DateTime
throttleFailureCount: Float!
throttleRetryAfter: DateTime
connectedAccountId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
connectedAccount: ConnectedAccountPublicDTO
}
enum MessageChannelVisibility {
METADATA
SUBJECT
SHARE_EVERYTHING
}
enum MessageChannelType {
EMAIL
SMS
EMAIL_GROUP
}
enum MessageChannelContactAutoCreationPolicy {
SENT_AND_RECEIVED
SENT
NONE
}
enum MessageFolderImportPolicy {
ALL_FOLDERS
SELECTED_FOLDERS
}
enum MessageChannelPendingGroupEmailsAction {
GROUP_EMAILS_DELETION
GROUP_EMAILS_IMPORT
NONE
}
enum MessageChannelSyncStatus {
NOT_SYNCED
ONGOING
ACTIVE
FAILED_INSUFFICIENT_PERMISSIONS
FAILED_UNKNOWN
}
enum MessageChannelSyncStage {
PENDING_CONFIGURATION
MESSAGE_LIST_FETCH_PENDING
MESSAGE_LIST_FETCH_SCHEDULED
MESSAGE_LIST_FETCH_ONGOING
MESSAGES_IMPORT_PENDING
MESSAGES_IMPORT_SCHEDULED
MESSAGES_IMPORT_ONGOING
FAILED
}
type CreateEmailGroupChannelOutput {
messageChannel: MessageChannel!
forwardingAddress: String!
}
type CampaignAudiencePreviewDTO {
totalMembers: Int!
withoutEmail: Int!
duplicateEmails: Int!
globallyUnsubscribed: Int!
topicUnsubscribed: Int!
sendable: Int!
}
type SendEmailViaDomainOutput {
messageId: String!
}
type CampaignSkippedRecipientsDTO {
noEmail: Int!
deduped: Int!
overCap: Int!
}
type SendMessageCampaignOutputDTO {
campaignId: String!
queuedCount: Int!
skipped: CampaignSkippedRecipientsDTO!
}
type UnsubscribeTopic {
id: UUID!
createdAt: DateTime!
updatedAt: DateTime!
name: String
description: String
visibility: UnsubscribeTopicVisibility!
}
enum UnsubscribeTopicVisibility {
PUBLIC
PRIVATE
}
type AutocompleteResult {
text: String!
placeId: String!
}
type Location {
lat: Float
lng: Float
}
type PlaceDetailsResult {
street: String
state: String
postcode: String
city: String
country: String
location: Location
}
type ImapSmtpCaldavPublicConnectionParams {
host: String!
port: Float!
username: String
connectionSecurity: EmailConnectionSecurity
}
type ImapSmtpCaldavPublicConnectionParameters {
IMAP: ImapSmtpCaldavPublicConnectionParams
SMTP: ImapSmtpCaldavPublicConnectionParams
CALDAV: ImapSmtpCaldavPublicConnectionParams
}
type ConnectedImapSmtpCaldavAccount {
id: UUID!
handle: String!
provider: String!
userWorkspaceId: UUID!
connectionParameters: ImapSmtpCaldavPublicConnectionParameters
}
type ImapSmtpCaldavConnectionSuccess {
success: Boolean!
connectedAccountId: String!
}
type Webhook {
id: UUID!
targetUrl: String!
operations: [String!]!
description: String
secret: String!
applicationId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
}
type ToolIndexEntry {
name: String!
label: String!
description: String!
category: String!
objectName: String
icon: String
inputSchema: JSON
}
type AgentMessagePart {
id: UUID!
messageId: UUID!
orderIndex: Int!
type: String!
textContent: String
reasoningContent: String
toolName: String
toolCallId: String
toolInput: JSON
toolOutput: JSON
state: String
providerExecuted: Boolean
errorMessage: String
errorDetails: JSON
sourceUrlSourceId: String
sourceUrlUrl: String
sourceUrlTitle: String
sourceDocumentSourceId: String
sourceDocumentMediaType: String
sourceDocumentTitle: String
sourceDocumentFilename: String
fileMediaType: String
fileFilename: String
fileId: UUID
fileUrl: String
providerMetadata: JSON
createdAt: DateTime!
}
type RunAgentResult {
result: JSON
error: String
success: Boolean!
}
type ChannelSyncSuccess {
success: Boolean!
}
type BarChartSeries {
key: String!
label: String!
}
type BarChartData {
data: [JSON!]!
indexBy: String!
keys: [String!]!
series: [BarChartSeries!]!
xAxisLabel: String!
yAxisLabel: String!
showLegend: Boolean!
showDataLabels: Boolean!
layout: BarChartLayout!
groupMode: BarChartGroupMode!
hasTooManyGroups: Boolean!
formattedToRawLookup: JSON!
}
type LineChartDataPoint {
x: String!
y: Float!
}
type LineChartSeries {
key: String!
label: String!
data: [LineChartDataPoint!]!
}
type LineChartData {
series: [LineChartSeries!]!
xAxisLabel: String!
yAxisLabel: String!
showLegend: Boolean!
showDataLabels: Boolean!
hasTooManyGroups: Boolean!
formattedToRawLookup: JSON!
}
type PieChartDataItem {
key: String!
value: Float!
}
type PieChartData {
data: [PieChartDataItem!]!
showLegend: Boolean!
showDataLabels: Boolean!
showCenterMetric: Boolean!
hasTooManyGroups: Boolean!
formattedToRawLookup: JSON!
}
type DuplicatedDashboard {
id: UUID!
title: String
pageLayoutId: UUID
position: Float!
createdAt: String!
updatedAt: String!
}
type SendEmailOutput {
success: Boolean!
error: String
}
type Analytics {
"""Boolean that confirms query was dispatched"""
success: Boolean!
}
type EventLogRecord {
event: String!
timestamp: DateTime!
userId: String
properties: JSON
recordId: String
objectMetadataId: String
isCustom: Boolean
}
type EventLogPageInfo {
endCursor: String
hasNextPage: Boolean!
}
type EventLogQueryResult {
records: [EventLogRecord!]!
totalCount: Int!
pageInfo: EventLogPageInfo!
}
type Skill {
id: UUID!
name: String!
label: String!
icon: String
description: String
content: String!
isCustom: Boolean!
isActive: Boolean!
applicationId: UUID
createdAt: DateTime!
updatedAt: DateTime!
}
type AgentMessage {
id: UUID!
threadId: UUID!
turnId: UUID
agentId: UUID
role: String!
status: String!
parts: [AgentMessagePart!]!
processedAt: DateTime
createdAt: DateTime!
}
type AgentChatThread {
id: ID!
title: String
totalInputTokens: Int!
totalOutputTokens: Int!
contextWindowTokens: Int
conversationSize: Int!
totalInputCredits: Float!
totalOutputCredits: Float!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
lastMessageAt: DateTime
}
type AiSystemPromptSection {
title: String!
content: String!
estimatedTokenCount: Int!
}
type AiSystemPromptPreview {
sections: [AiSystemPromptSection!]!
estimatedTokenCount: Int!
}
type ChatStreamCatchupChunks {
chunks: [JSON!]!
maxSeq: Int!
}
type SendChatMessageResult {
messageId: String!
queued: Boolean!
streamId: String
}
type AgentChatEvent {
threadId: String!
event: JSON!
}
type AgentTurnEvaluation {
id: UUID!
turnId: UUID!
score: Int!
comment: String
createdAt: DateTime!
}
type AgentTurn {
id: UUID!
threadId: UUID!
agentId: UUID
evaluations: [AgentTurnEvaluation!]!
messages: [AgentMessage!]!
createdAt: DateTime!
}
type WorkspaceAiStats {
conversationsCount: Int!
skillsCount: Int!
toolsCount: Int!
}
type CalendarChannel {
id: UUID!
handle: String!
syncStatus: CalendarChannelSyncStatus!
syncStage: CalendarChannelSyncStage!
visibility: CalendarChannelVisibility!
isContactAutoCreationEnabled: Boolean!
contactAutoCreationPolicy: CalendarChannelContactAutoCreationPolicy!
isSyncEnabled: Boolean!
syncedAt: DateTime
syncStageStartedAt: DateTime
throttleFailureCount: Float!
connectedAccountId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
}
enum CalendarChannelSyncStatus {
NOT_SYNCED
ONGOING
ACTIVE
FAILED_INSUFFICIENT_PERMISSIONS
FAILED_UNKNOWN
}
enum CalendarChannelSyncStage {
PENDING_CONFIGURATION
CALENDAR_EVENT_LIST_FETCH_PENDING
CALENDAR_EVENT_LIST_FETCH_SCHEDULED
CALENDAR_EVENT_LIST_FETCH_ONGOING
CALENDAR_EVENTS_IMPORT_PENDING
CALENDAR_EVENTS_IMPORT_SCHEDULED
CALENDAR_EVENTS_IMPORT_ONGOING
FAILED
}
enum CalendarChannelVisibility {
METADATA
SHARE_EVERYTHING
}
enum CalendarChannelContactAutoCreationPolicy {
AS_PARTICIPANT_AND_ORGANIZER
AS_PARTICIPANT
AS_ORGANIZER
NONE
}
type MessageFolder {
id: UUID!
name: String
isSentFolder: Boolean!
isSynced: Boolean!
parentFolderId: String
externalId: String
pendingSyncAction: MessageFolderPendingSyncAction!
messageChannelId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
}
enum MessageFolderPendingSyncAction {
FOLDER_DELETION
FOLDER_IMPORT
NONE
}
type CollectionHash {
collectionName: AllMetadataName!
hash: String!
}
enum AllMetadataName {
fieldMetadata
objectMetadata
view
viewField
viewFieldGroup
viewGroup
viewSort
rowLevelPermissionPredicate
rowLevelPermissionPredicateGroup
viewFilterGroup
index
logicFunction
viewFilter
role
roleTarget
agent
skill
pageLayout
pageLayoutWidget
pageLayoutTab
commandMenuItem
navigationMenuItem
rolePermissionFlag
permissionFlag
objectPermission
fieldPermission
frontComponent
webhook
applicationVariable
connectionProvider
searchFieldMetadata
}
type MinimalObjectMetadata {
id: UUID!
nameSingular: String!
namePlural: String!
labelSingular: String!
labelPlural: String!
icon: String
color: String
isActive: Boolean!
isSystem: Boolean!
isRemote: Boolean!
}
type MinimalView {
id: UUID!
type: ViewType!
key: ViewKey
objectMetadataId: UUID!
}
type MinimalMetadata {
objectMetadataItems: [MinimalObjectMetadata!]!
views: [MinimalView!]!
collectionHashes: [CollectionHash!]!
}
type Query {
navigationMenuItems: [NavigationMenuItem!]!
navigationMenuItem(id: UUID!): NavigationMenuItem
enterprisePortalSession(returnUrlPath: String): String
enterpriseCheckoutSession(billingInterval: String): String
enterpriseSubscriptionStatus: EnterpriseSubscriptionStatusDTO
getViewFilterGroups(viewId: String): [ViewFilterGroup!]!
getViewFilterGroup(id: String!): ViewFilterGroup
getViewFilters(viewId: String): [ViewFilter!]!
getViewFilter(id: String!): ViewFilter
getViews(objectMetadataId: String, viewTypes: [ViewType!]): [View!]!
getView(id: String!): View
getViewSorts(viewId: String): [ViewSort!]!
getViewSort(id: String!): ViewSort
getViewFields(viewId: String!): [ViewField!]!
getViewField(id: String!): ViewField
getViewFieldGroups(viewId: String!): [ViewFieldGroup!]!
getViewFieldGroup(id: String!): ViewFieldGroup
apiKeys: [ApiKey!]!
apiKey(input: GetApiKeyInput!): ApiKey
getInviteSuggestions: [InviteSuggestion!]!
applicationConnectionProviders(applicationId: UUID!): [ApplicationConnectionProvider!]!
billingPortalSession(returnUrlPath: String, forPaymentMethodUpdate: Boolean): BillingSession!
listPlans: [BillingPlan!]!
getResourceCreditUsage: [BillingResourceCreditUsage!]!
findWorkspaceInvitations: [WorkspaceInvitation!]!
getApprovedAccessDomains: [ApprovedAccessDomain!]!
getPageLayoutTabs(pageLayoutId: String!): [PageLayoutTab!]!
getPageLayoutTab(id: String!): PageLayoutTab!
getPageLayouts(objectMetadataId: String, pageLayoutType: PageLayoutType): [PageLayout!]!
getPageLayout(id: String!): PageLayout
getPageLayoutWidgets(pageLayoutTabId: String!): [PageLayoutWidget!]!
getPageLayoutWidget(id: String!): PageLayoutWidget!
findManyAgents: [Agent!]!
findOneAgent(input: AgentIdInput!): Agent!
objectRecordCounts: [ObjectRecordCount!]!
object(
"""The id of the record to find."""
id: UUID!
): Object!
objects(
"""Limit or page results."""
paging: CursorPaging! = {first: 10}
"""Specify to filter the records returned."""
filter: ObjectFilter! = {}
): ObjectConnection!
index(
"""The id of the record to find."""
id: UUID!
): Index!
indexMetadatas(
"""Limit or page results."""
paging: CursorPaging! = {first: 10}
"""Specify to filter the records returned."""
filter: IndexFilter! = {}
): IndexConnection!
findOneLogicFunction(input: LogicFunctionIdInput!): LogicFunction!
findManyLogicFunctions: [LogicFunction!]!
getAvailablePackages(input: LogicFunctionIdInput!): JSON!
getLogicFunctionSourceCode(input: LogicFunctionIdInput!): String
commandMenuItems: [CommandMenuItem!]!
commandMenuItem(id: UUID!): CommandMenuItem
frontComponents: [FrontComponent!]!
frontComponent(id: UUID!): FrontComponent
previewMessageCampaignAudience(input: PreviewMessageCampaignAudienceInput!): CampaignAudiencePreviewDTO!
unsubscribeTopics: [UnsubscribeTopic!]!
unsubscribePagePreviewUrl: String!
myMessageChannels(connectedAccountId: UUID): [MessageChannel!]!
getEmailingDomains: [EmailingDomain!]!
myConnectedAccounts: [ConnectedAccountPublicDTO!]!
getRoles: [Role!]!
getToolIndex: [ToolIndexEntry!]!
getToolInputSchema(toolName: String!): JSON
webhooks: [Webhook!]!
webhook(id: UUID!): Webhook
field(
"""The id of the record to find."""
id: UUID!
): Field!
fields(
"""Limit or page results."""
paging: CursorPaging! = {first: 10}
"""Specify to filter the records returned."""
filter: FieldFilter! = {}
): FieldConnection!
getViewGroups(viewId: String): [ViewGroup!]!
getViewGroup(id: String!): ViewGroup
myMessageFolders(messageChannelId: UUID): [MessageFolder!]!
myCalendarChannels(connectedAccountId: UUID): [CalendarChannel!]!
minimalMetadata: MinimalMetadata!
appConnections(filter: ListAppConnectionsInput): [AppConnection!]!
appConnection(id: ID!): AppConnection!
findWorkspaceAiStats: WorkspaceAiStats!
chatThreads: [AgentChatThread!]!
chatThread(id: UUID!): AgentChatThread!
chatMessages(threadId: UUID!): [AgentMessage!]!
chatStreamCatchupChunks(threadId: UUID!): ChatStreamCatchupChunks!
getAiSystemPromptPreview: AiSystemPromptPreview!
skills: [Skill!]!
skill(id: UUID!): Skill
agentTurns(agentId: UUID!): [AgentTurn!]!
checkUserExists(email: String!, captchaToken: String): CheckUserExist!
checkWorkspaceInviteHashIsValid(inviteHash: String!): WorkspaceInviteHashValid!
findWorkspaceFromInviteHash(inviteHash: String!): Workspace!
checkWorkspaceSubdomainAvailability(subdomain: String!): SubdomainAvailabilityDTO!
getWorkspaceCreationDefaults: WorkspaceCreationDefaultsDTO!
validatePasswordResetToken(passwordResetToken: String!): ValidatePasswordResetToken!
findApplicationRegistrationByClientId(clientId: String!): PublicApplicationRegistration
findApplicationRegistrationByUniversalIdentifier(universalIdentifier: String!): ApplicationRegistration
findManyApplicationRegistrations: [ApplicationRegistration!]!
findOneApplicationRegistration(id: String!): ApplicationRegistration!
findApplicationRegistrationStats(id: String!): ApplicationRegistrationStats!
findApplicationRegistrationVariables(applicationRegistrationId: String!): [ApplicationRegistrationVariableDTO!]!
applicationRegistrationTarballUrl(id: String!): String
currentUser: User!
currentWorkspace: Workspace!
getPublicWorkspaceDataByDomain(origin: String): PublicWorkspaceData!
getPublicWorkspaceDataById(id: UUID!): PublicWorkspaceDataSummary!
findManyApplications: [Application!]!
findOneApplication(id: UUID, universalIdentifier: UUID): Application!
getSSOIdentityProviders: [FindAvailableSSOIDP!]!
eventLogs(input: EventLogQueryInput!): EventLogQueryResult!
pieChartData(input: PieChartDataInput!): PieChartData!
lineChartData(input: LineChartDataInput!): LineChartData!
barChartData(input: BarChartDataInput!): BarChartData!
getConnectedImapSmtpCaldavAccount(id: UUID!): ConnectedImapSmtpCaldavAccount!
getAutoCompleteAddress(address: String!, token: String!, country: String, isFieldCity: Boolean): [AutocompleteResult!]!
getAddressDetails(placeId: String!, token: String!): PlaceDetailsResult!
getUsageAnalytics(input: UsageAnalyticsInput): UsageAnalytics!
findManyPublicDomains: [PublicDomain!]!
findManyMarketplaceApps: [MarketplaceApp!]!
findMarketplaceAppDetail(universalIdentifier: String!): MarketplaceAppDetail!
}
input GetApiKeyInput {
id: UUID!
}
input AgentIdInput {
"""The id of the agent."""
id: UUID!
}
input LogicFunctionIdInput {
"""The id of the function."""
id: ID!
}
input PreviewMessageCampaignAudienceInput {
listId: String!
unsubscribeTopicId: String
}
input ListAppConnectionsInput {
providerName: String
userWorkspaceId: String
visibility: String
}
input EventLogQueryInput {
table: EventLogTable!
filters: EventLogFiltersInput
first: Int = 100
after: String
}
enum EventLogTable {
WORKSPACE_EVENT
PAGEVIEW
OBJECT_EVENT
USAGE_EVENT
APPLICATION_LOG
}
input EventLogFiltersInput {
eventType: String
userWorkspaceId: String
dateRange: EventLogDateRangeInput
recordId: String
objectMetadataId: String
}
input EventLogDateRangeInput {
start: DateTime
end: DateTime
}
input PieChartDataInput {
objectMetadataId: UUID!
configuration: JSON!
}
input LineChartDataInput {
objectMetadataId: UUID!
configuration: JSON!
}
input BarChartDataInput {
objectMetadataId: UUID!
configuration: JSON!
}
input UsageAnalyticsInput {
periodStart: DateTime
periodEnd: DateTime
userWorkspaceId: String
operationTypes: [UsageOperationType!]
}
enum UsageOperationType {
AI_CHAT_TOKEN
AI_WORKFLOW_TOKEN
WORKFLOW_EXECUTION
CODE_EXECUTION
WEB_SEARCH
CALL_RECORDING
}
type Mutation {
addQueryToEventStream(input: AddQuerySubscriptionInput!): Boolean!
removeQueryFromEventStream(input: RemoveQueryFromEventStreamInput!): Boolean!
createManyNavigationMenuItems(inputs: [CreateNavigationMenuItemInput!]!): [NavigationMenuItem!]!
createNavigationMenuItem(input: CreateNavigationMenuItemInput!): NavigationMenuItem!
updateManyNavigationMenuItems(inputs: [UpdateOneNavigationMenuItemInput!]!): [NavigationMenuItem!]!
updateNavigationMenuItem(input: UpdateOneNavigationMenuItemInput!): NavigationMenuItem!
deleteManyNavigationMenuItems(ids: [UUID!]!): [NavigationMenuItem!]!
deleteNavigationMenuItem(id: UUID!): NavigationMenuItem!
uploadEmailAttachmentFile(file: Upload!): FileWithSignedUrl!
refreshEnterpriseValidityToken: Boolean!
setEnterpriseKey(enterpriseKey: String!): EnterpriseLicenseInfoDTO!
uploadAiChatFile(file: Upload!): FileWithSignedUrl!
uploadWorkflowFile(file: Upload!): FileWithSignedUrl!
uploadWorkspaceLogo(file: Upload!): FileWithSignedUrl!
uploadWorkspaceMemberProfilePicture(file: Upload!): FileWithSignedUrl!
uploadFilesFieldFile(file: Upload!, fieldMetadataId: String!): FileWithSignedUrl!
uploadFilesFieldFileByUniversalIdentifier(file: Upload!, fieldMetadataUniversalIdentifier: String!): FileWithSignedUrl!
createViewFilterGroup(input: CreateViewFilterGroupInput!): ViewFilterGroup!
updateViewFilterGroup(id: String!, input: UpdateViewFilterGroupInput!): ViewFilterGroup!
deleteViewFilterGroup(id: String!): Boolean!
destroyViewFilterGroup(id: String!): Boolean!
createViewFilter(input: CreateViewFilterInput!): ViewFilter!
updateViewFilter(input: UpdateViewFilterInput!): ViewFilter!
deleteViewFilter(input: DeleteViewFilterInput!): ViewFilter!
destroyViewFilter(input: DestroyViewFilterInput!): ViewFilter!
createView(input: CreateViewInput!): View!
updateView(id: String!, input: UpdateViewInput!): View!
deleteView(id: String!): Boolean!
destroyView(id: String!): Boolean!
upsertViewWidget(input: UpsertViewWidgetInput!): View!
createViewSort(input: CreateViewSortInput!): ViewSort!
updateViewSort(input: UpdateViewSortInput!): ViewSort!
deleteViewSort(input: DeleteViewSortInput!): Boolean!
destroyViewSort(input: DestroyViewSortInput!): Boolean!
updateViewField(input: UpdateViewFieldInput!): ViewField!
createViewField(input: CreateViewFieldInput!): ViewField!
createManyViewFields(inputs: [CreateViewFieldInput!]!): [ViewField!]!
deleteViewField(input: DeleteViewFieldInput!): ViewField!
destroyViewField(input: DestroyViewFieldInput!): ViewField!
updateViewFieldGroup(input: UpdateViewFieldGroupInput!): ViewFieldGroup!
createViewFieldGroup(input: CreateViewFieldGroupInput!): ViewFieldGroup!
createManyViewFieldGroups(inputs: [CreateViewFieldGroupInput!]!): [ViewFieldGroup!]!
deleteViewFieldGroup(input: DeleteViewFieldGroupInput!): ViewFieldGroup!
destroyViewFieldGroup(input: DestroyViewFieldGroupInput!): ViewFieldGroup!
upsertFieldsWidget(input: UpsertFieldsWidgetInput!): View!
createApiKey(input: CreateApiKeyInput!): ApiKey!
updateApiKey(input: UpdateApiKeyInput!): ApiKey
revokeApiKey(input: RevokeApiKeyInput!): ApiKey
assignRoleToApiKey(apiKeyId: UUID!, roleId: UUID!): Boolean!
skipSyncEmailOnboardingStep: OnboardingStepSuccess!
skipBookOnboardingStep: OnboardingStepSuccess!
updateOneApplicationVariable(key: String!, value: String!, applicationId: UUID!): Boolean!
checkoutSession(recurringInterval: SubscriptionInterval!, plan: BillingPlanKey! = PRO, requirePaymentMethod: Boolean! = true, successUrlPath: String): BillingSession!
createSubscriptionPaymentIntent(recurringInterval: SubscriptionInterval!, plan: BillingPlanKey! = PRO, requirePaymentMethod: Boolean! = true, successUrlPath: String, idempotencyKey: String!): BillingPaymentIntent!
createBillingPaymentMethodSetupIntent: BillingPaymentIntent!
switchSubscriptionInterval: BillingUpdate!
switchBillingPlan: BillingUpdate!
cancelSwitchBillingPlan: BillingUpdate!
cancelSwitchBillingInterval: BillingUpdate!
setResourceCreditSubscriptionPrice(priceId: String!): BillingUpdate!
endSubscriptionTrialPeriod: BillingEndTrialPeriod!
cancelSwitchResourceCreditPrice: BillingUpdate!
deleteWorkspaceInvitation(appTokenId: String!): String!
resendWorkspaceInvitation(appTokenId: String!): SendInvitations!
sendInvitations(emails: [String!]!, roleId: UUID): SendInvitations!
createApprovedAccessDomain(input: CreateApprovedAccessDomainInput!): ApprovedAccessDomain!
deleteApprovedAccessDomain(input: DeleteApprovedAccessDomainInput!): Boolean!
validateApprovedAccessDomain(input: ValidateApprovedAccessDomainInput!): ApprovedAccessDomain!
createPageLayoutTab(input: CreatePageLayoutTabInput!): PageLayoutTab!
updatePageLayoutTab(id: String!, input: UpdatePageLayoutTabInput!): PageLayoutTab!
destroyPageLayoutTab(id: String!): Boolean!
createPageLayout(input: CreatePageLayoutInput!): PageLayout!
updatePageLayout(id: String!, input: UpdatePageLayoutInput!): PageLayout!
destroyPageLayout(id: String!): Boolean!
updatePageLayoutWithTabsAndWidgets(id: String!, input: UpdatePageLayoutWithTabsInput!): PageLayout!
resetPageLayoutToDefault(id: String!): PageLayout!
resetPageLayoutWidgetToDefault(id: String!): PageLayoutWidget!
resetPageLayoutTabToDefault(id: String!): PageLayoutTab!
createPageLayoutWidget(input: CreatePageLayoutWidgetInput!): PageLayoutWidget!
updatePageLayoutWidget(id: String!, input: UpdatePageLayoutWidgetInput!): PageLayoutWidget!
destroyPageLayoutWidget(id: String!): Boolean!
createOneAgent(input: CreateAgentInput!): Agent!
updateOneAgent(input: UpdateAgentInput!): Agent!
deleteOneAgent(input: AgentIdInput!): Agent!
createOneObject(input: CreateOneObjectInput!): Object!
deleteOneObject(input: DeleteOneObjectInput!): Object!
updateOneObject(input: UpdateOneObjectInput!): Object!
createOneIndex(input: CreateOneIndexInput!): Index!
deleteOneIndex(input: DeleteOneIndexInput!): Index!
deleteOneLogicFunction(input: LogicFunctionIdInput!): LogicFunction!
createOneLogicFunction(input: CreateLogicFunctionFromSourceInput!): LogicFunction!
executeOneLogicFunction(input: ExecuteOneLogicFunctionInput!): LogicFunctionExecutionResult!
updateOneLogicFunction(input: UpdateLogicFunctionFromSourceInput!): Boolean!
createCommandMenuItem(input: CreateCommandMenuItemInput!): CommandMenuItem!
updateCommandMenuItem(input: UpdateCommandMenuItemInput!): CommandMenuItem!
resetCommandMenuItem(id: UUID!): CommandMenuItem!
deleteCommandMenuItem(id: UUID!): CommandMenuItem!
createFrontComponent(input: CreateFrontComponentInput!): FrontComponent!
updateFrontComponent(input: UpdateFrontComponentInput!): FrontComponent!
deleteFrontComponent(id: UUID!): FrontComponent!
sendEmailViaEmailingDomain(input: SendEmailViaDomainInput!): SendEmailViaDomainOutput!
sendMessageCampaign(input: SendMessageCampaignInput!): SendMessageCampaignOutputDTO!
createUnsubscribeTopic(input: CreateUnsubscribeTopicInput!): UnsubscribeTopic!
updateUnsubscribeTopic(input: UpdateUnsubscribeTopicInput!): UnsubscribeTopic!
deleteUnsubscribeTopic(id: String!): Boolean!
updateMessageChannel(input: UpdateMessageChannelInput!): MessageChannel!
createEmailGroupChannel(input: CreateEmailGroupChannelInput!): CreateEmailGroupChannelOutput!
deleteEmailGroupChannel(id: UUID!): MessageChannel!
createEmailingDomain(input: CreateEmailingDomainInput!): EmailingDomain!
deleteEmailingDomain(id: String!): Boolean!
verifyEmailingDomain(id: String!): EmailingDomain!
deleteConnectedAccount(id: UUID!): ConnectedAccountPublicDTO!
updateWorkspaceMemberRole(workspaceMemberId: UUID!, roleId: UUID!): WorkspaceMember!
createOneRole(createRoleInput: CreateRoleInput!): Role!
updateOneRole(updateRoleInput: UpdateRoleInput!): Role!
deleteOneRole(roleId: UUID!): String!
upsertObjectPermissions(upsertObjectPermissionsInput: UpsertObjectPermissionsInput!): [ObjectPermission!]!
upsertPermissionFlags(upsertPermissionFlagsInput: UpsertPermissionFlagsInput!): [RolePermissionFlag!]!
upsertFieldPermissions(upsertFieldPermissionsInput: UpsertFieldPermissionsInput!): [FieldPermission!]!
upsertRowLevelPermissionPredicates(input: UpsertRowLevelPermissionPredicatesInput!): UpsertRowLevelPermissionPredicatesResult!
assignRoleToAgent(agentId: UUID!, roleId: UUID!): Boolean!
removeRoleFromAgent(agentId: UUID!): Boolean!
runAgent(input: RunAgentInput!): RunAgentResult!
createWebhook(input: CreateWebhookInput!): Webhook!
updateWebhook(input: UpdateWebhookInput!): Webhook!
deleteWebhook(id: UUID!): Webhook!
createOneField(input: CreateOneFieldMetadataInput!): Field!
updateOneField(input: UpdateOneFieldMetadataInput!): Field!
deleteOneField(input: DeleteOneFieldInput!): Field!
createViewGroup(input: CreateViewGroupInput!): ViewGroup!
createManyViewGroups(inputs: [CreateViewGroupInput!]!): [ViewGroup!]!
updateViewGroup(input: UpdateViewGroupInput!): ViewGroup!
updateManyViewGroups(inputs: [UpdateViewGroupInput!]!): [ViewGroup!]!
deleteViewGroup(input: DeleteViewGroupInput!): ViewGroup!
destroyViewGroup(input: DestroyViewGroupInput!): ViewGroup!
updateMessageFolder(input: UpdateMessageFolderInput!): MessageFolder!
updateMessageFolders(input: UpdateMessageFoldersInput!): [MessageFolder!]!
updateCalendarChannel(input: UpdateCalendarChannelInput!): CalendarChannel!
createChatThread: AgentChatThread!
sendChatMessage(threadId: UUID!, text: String!, messageId: UUID!, browsingContext: JSON, modelId: String, fileAttachments: [FileAttachmentInput!]): SendChatMessageResult!
stopAgentChatStream(threadId: UUID!): Boolean!
renameChatThread(id: UUID!, title: String!): AgentChatThread!
archiveChatThread(id: UUID!): AgentChatThread!
unarchiveChatThread(id: UUID!): AgentChatThread!
deleteChatThread(id: UUID!): Boolean!
deleteQueuedChatMessage(messageId: UUID!): Boolean!
createSkill(input: CreateSkillInput!): Skill!
updateSkill(input: UpdateSkillInput!): Skill!
deleteSkill(id: UUID!): Skill!
activateSkill(id: UUID!): Skill!
deactivateSkill(id: UUID!): Skill!
evaluateAgentTurn(turnId: UUID!): AgentTurnEvaluation!
runEvaluationInput(agentId: UUID!, input: String!): AgentTurn!
getAuthorizationUrlForSSO(input: GetAuthorizationUrlForSSOInput!): GetAuthorizationUrlForSSO!
getLoginTokenFromCredentials(email: String!, password: String!, captchaToken: String, locale: String, verifyEmailRedirectPath: String, origin: String!): LoginToken!
signIn(email: String!, password: String!, captchaToken: String, locale: String, verifyEmailRedirectPath: String): AvailableWorkspacesAndAccessTokens!
verifyEmailAndGetLoginToken(emailVerificationToken: String!, email: String!, captchaToken: String, origin: String!): VerifyEmailAndGetLoginToken!
verifyEmailAndGetWorkspaceAgnosticToken(emailVerificationToken: String!, email: String!, captchaToken: String): AvailableWorkspacesAndAccessTokens!
getAuthTokensFromOTP(otp: String!, loginToken: String!, captchaToken: String, origin: String!): AuthTokens!
signUp(email: String!, password: String!, captchaToken: String, locale: String, verifyEmailRedirectPath: String): AvailableWorkspacesAndAccessTokens!
signUpInWorkspace(email: String!, password: String!, workspaceId: UUID, workspaceInviteHash: String, workspacePersonalInviteToken: String, captchaToken: String, locale: String, verifyEmailRedirectPath: String): SignUp!
signUpInNewWorkspace(input: SignUpInNewWorkspaceInput): SignUp!
uploadNewWorkspaceLogo(workspaceId: String!, file: Upload!): FileWithSignedUrl!
generateTransientToken: TransientToken!
getAuthTokensFromLoginToken(loginToken: String!, origin: String!): AuthTokens!
authorizeApp(clientId: String!, codeChallenge: String, redirectUrl: String!, state: String, scope: String): AuthorizeApp!
renewToken(appToken: String!): AuthTokens!
generateApiKeyToken(apiKeyId: UUID!, expiresAt: String!): ApiKeyToken!
generatePlaygroundToken: AuthToken!
emailPasswordResetLink(email: String!, workspaceId: UUID): EmailPasswordResetLink!
updatePasswordViaResetToken(passwordResetToken: String!, newPassword: String!): InvalidatePassword!
createApplicationRegistration(input: CreateApplicationRegistrationInput!): CreateApplicationRegistration!
updateApplicationRegistration(input: UpdateApplicationRegistrationInput!): ApplicationRegistration!
deleteApplicationRegistration(id: String!): Boolean!
rotateApplicationRegistrationClientSecret(id: String!): RotateClientSecret!
createApplicationRegistrationVariable(input: CreateApplicationRegistrationVariableInput!): ApplicationRegistrationVariable!
updateApplicationRegistrationVariable(input: UpdateApplicationRegistrationVariableInput!): ApplicationRegistrationVariable!
deleteApplicationRegistrationVariable(id: String!): Boolean!
uploadAppTarball(file: Upload!, universalIdentifier: String): ApplicationRegistration!
transferApplicationRegistrationOwnership(applicationRegistrationId: String!, targetWorkspaceSubdomain: String!): ApplicationRegistration!
initiateOTPProvisioning(loginToken: String!, origin: String!): InitiateTwoFactorAuthenticationProvisioning!
initiateOTPProvisioningForAuthenticatedUser: InitiateTwoFactorAuthenticationProvisioning!
deleteTwoFactorAuthenticationMethod(twoFactorAuthenticationMethodId: UUID!): DeleteTwoFactorAuthenticationMethod!
verifyTwoFactorAuthenticationMethodForAuthenticatedUser(otp: String!): VerifyTwoFactorAuthenticationMethod!
deleteUser: User!
deleteUserFromWorkspace(workspaceMemberIdToDelete: String!): UserWorkspace!
updateWorkspaceMemberSettings(input: UpdateWorkspaceMemberSettingsInput!): Boolean!
updateUserEmail(newEmail: String!, verifyEmailRedirectPath: String): Boolean!
resendEmailVerificationToken(email: String!, origin: String!): ResendEmailVerificationToken!
activateWorkspace(data: ActivateWorkspaceInput!): Workspace!
updateWorkspace(data: UpdateWorkspaceInput!): Workspace!
deleteCurrentWorkspace: Workspace!
checkCustomDomainValidRecords: DomainValidRecords
runWorkspaceMigration(workspaceMigration: WorkspaceMigrationInput!): Boolean!
uninstallApplication(universalIdentifier: String!): Boolean!
createOIDCIdentityProvider(input: SetupOIDCSsoInput!): SetupSso!
createSAMLIdentityProvider(input: SetupSAMLSsoInput!): SetupSso!
deleteSSOIdentityProvider(input: DeleteSsoInput!): DeleteSso!
editSSOIdentityProvider(input: EditSsoInput!): EditSso!
createObjectEvent(event: String!, recordId: UUID!, objectMetadataId: UUID!, properties: JSON): Analytics!
trackAnalytics(type: AnalyticsType!, name: String, event: String, properties: JSON): Analytics!
duplicateDashboard(id: UUID!): DuplicatedDashboard!
impersonate(userId: UUID!, workspaceId: UUID!): Impersonate!
sendEmail(input: SendEmailInput!): SendEmailOutput!
startChannelSync(connectedAccountId: UUID!): ChannelSyncSuccess!
saveImapSmtpCaldavAccount(handle: String!, connectionParameters: EmailAccountConnectionParameters!, id: UUID): ImapSmtpCaldavConnectionSuccess!
updateLabPublicFeatureFlag(input: UpdateLabPublicFeatureFlagInput!): FeatureFlag!
createPublicDomain(domain: String!, applicationId: String!): PublicDomain!
deletePublicDomain(domain: String!): Boolean!
checkPublicDomainValidRecords(domain: String!): DomainValidRecords
createOneAppToken(input: CreateOneAppTokenInput!): AppToken!
installMarketplaceApp(universalIdentifier: String!, version: String): Boolean! @deprecated(reason: "Use installApplication instead")
installApplication(universalIdentifier: String!, version: String): Application!
syncMarketplaceCatalog: Boolean!
createDevelopmentApplication(universalIdentifier: String!, name: String!): DevelopmentApplication!
generateApplicationToken(applicationId: UUID!): ApplicationTokenPair!
syncApplication(manifest: JSON!, dryRun: Boolean): WorkspaceMigration!
uploadApplicationFile(file: Upload!, applicationUniversalIdentifier: String!, fileFolder: FileFolder!, filePath: String!): File!
upgradeApplication(appRegistrationId: String!, targetVersion: String!): Boolean!
renewApplicationToken(applicationRefreshToken: String!): ApplicationTokenPair!
}
input AddQuerySubscriptionInput {
eventStreamId: String!
queryId: String!
operationSignature: JSON!
}
input RemoveQueryFromEventStreamInput {
eventStreamId: String!
queryId: String!
}
input CreateNavigationMenuItemInput {
id: UUID
userWorkspaceId: UUID
targetRecordId: UUID
targetObjectMetadataId: UUID
viewId: UUID
type: NavigationMenuItemType!
name: String
link: String
icon: String
color: String
folderId: UUID
pageLayoutId: UUID
position: Float
}
input UpdateOneNavigationMenuItemInput {
"""The id of the record to update"""
id: UUID!
"""The record to update"""
update: UpdateNavigationMenuItemInput!
}
input UpdateNavigationMenuItemInput {
folderId: UUID
position: Float
name: String
link: String
icon: String
color: String
pageLayoutId: UUID
}
"""The `Upload` scalar type represents a file upload."""
scalar Upload
input CreateViewFilterGroupInput {
id: UUID
parentViewFilterGroupId: UUID
logicalOperator: ViewFilterGroupLogicalOperator = AND
positionInViewFilterGroup: Float
viewId: UUID!
}
input UpdateViewFilterGroupInput {
id: UUID
parentViewFilterGroupId: UUID
logicalOperator: ViewFilterGroupLogicalOperator = AND
positionInViewFilterGroup: Float
viewId: UUID
}
input CreateViewFilterInput {
id: UUID
fieldMetadataId: UUID!
operand: ViewFilterOperand
value: JSON!
viewFilterGroupId: UUID
positionInViewFilterGroup: Float
subFieldName: String
relationTargetFieldMetadataId: UUID
viewId: UUID!
}
input UpdateViewFilterInput {
"""The id of the view filter to update"""
id: UUID!
"""The view filter to update"""
update: UpdateViewFilterInputUpdates!
}
input UpdateViewFilterInputUpdates {
fieldMetadataId: UUID
operand: ViewFilterOperand
value: JSON
viewFilterGroupId: UUID
positionInViewFilterGroup: Float
subFieldName: String
relationTargetFieldMetadataId: UUID
}
input DeleteViewFilterInput {
"""The id of the view filter to delete."""
id: UUID!
}
input DestroyViewFilterInput {
"""The id of the view filter to destroy."""
id: UUID!
}
input CreateViewInput {
id: UUID
name: String!
objectMetadataId: UUID!
type: ViewType = TABLE
key: ViewKey
icon: String!
position: Float = 0
isCompact: Boolean = false
shouldHideEmptyGroups: Boolean = false
kanbanColumnWidth: Int
openRecordIn: ViewOpenRecordIn = SIDE_PANEL
kanbanAggregateOperation: AggregateOperations
kanbanAggregateOperationFieldMetadataId: UUID
anyFieldFilterValue: String
calendarLayout: ViewCalendarLayout
calendarFieldMetadataId: UUID
mainGroupByFieldMetadataId: UUID
visibility: ViewVisibility
}
input UpdateViewInput {
id: UUID
name: String
type: ViewType
icon: String
position: Float
isCompact: Boolean
openRecordIn: ViewOpenRecordIn
kanbanAggregateOperation: AggregateOperations
kanbanAggregateOperationFieldMetadataId: UUID
anyFieldFilterValue: String
calendarLayout: ViewCalendarLayout
calendarFieldMetadataId: UUID
visibility: ViewVisibility
mainGroupByFieldMetadataId: UUID
shouldHideEmptyGroups: Boolean
kanbanColumnWidth: Int
}
input UpsertViewWidgetInput {
"""The id of the view widget (page layout widget)."""
widgetId: UUID!
"""The view fields to upsert."""
viewFields: [UpsertViewWidgetViewFieldInput!]
"""The view filters to upsert."""
viewFilters: [UpsertViewWidgetViewFilterInput!]
"""The view filter groups to upsert."""
viewFilterGroups: [UpsertViewWidgetViewFilterGroupInput!]
"""The view sorts to upsert."""
viewSorts: [UpsertViewWidgetViewSortInput!]
}
input UpsertViewWidgetViewFieldInput {
"""The id of an existing view field to update."""
viewFieldId: UUID
"""
The field metadata id. Used to create a new view field when viewFieldId is not provided.
"""
fieldMetadataId: UUID
isVisible: Boolean!
position: Float!
size: Float
}
input UpsertViewWidgetViewFilterInput {
id: UUID
fieldMetadataId: UUID!
operand: ViewFilterOperand
value: JSON!
viewFilterGroupId: UUID
positionInViewFilterGroup: Float
subFieldName: String
relationTargetFieldMetadataId: UUID
}
input UpsertViewWidgetViewFilterGroupInput {
id: UUID
parentViewFilterGroupId: UUID
logicalOperator: ViewFilterGroupLogicalOperator = AND
positionInViewFilterGroup: Float
}
input UpsertViewWidgetViewSortInput {
id: UUID
fieldMetadataId: UUID!
direction: ViewSortDirection = ASC
}
input CreateViewSortInput {
id: UUID
fieldMetadataId: UUID!
direction: ViewSortDirection = ASC
subFieldName: String
viewId: UUID!
}
input UpdateViewSortInput {
"""The id of the view sort to update"""
id: UUID!
"""The view sort to update"""
update: UpdateViewSortInputUpdates!
}
input UpdateViewSortInputUpdates {
direction: ViewSortDirection
subFieldName: String
}
input DeleteViewSortInput {
"""The id of the view sort to delete."""
id: UUID!
}
input DestroyViewSortInput {
"""The id of the view sort to destroy."""
id: UUID!
}
input UpdateViewFieldInput {
"""The id of the view field to update"""
id: UUID!
"""The view field to update"""
update: UpdateViewFieldInputUpdates!
}
input UpdateViewFieldInputUpdates {
isVisible: Boolean
size: Float
position: Float
aggregateOperation: AggregateOperations
viewFieldGroupId: UUID
}
input CreateViewFieldInput {
id: UUID
fieldMetadataId: UUID!
viewId: UUID!
isVisible: Boolean = true
size: Float = 0
position: Float = 0
aggregateOperation: AggregateOperations
viewFieldGroupId: UUID
}
input DeleteViewFieldInput {
"""The id of the view field to delete."""
id: UUID!
}
input DestroyViewFieldInput {
"""The id of the view field to destroy."""
id: UUID!
}
input UpdateViewFieldGroupInput {
"""The id of the view field group to update"""
id: UUID!
"""The view field group to update"""
update: UpdateViewFieldGroupInputUpdates!
}
input UpdateViewFieldGroupInputUpdates {
name: String
position: Float
isVisible: Boolean
deletedAt: String
}
input CreateViewFieldGroupInput {
id: UUID
name: String!
viewId: UUID!
position: Float = 0
isVisible: Boolean = true
}
input DeleteViewFieldGroupInput {
"""The id of the view field group to delete."""
id: UUID!
}
input DestroyViewFieldGroupInput {
"""The id of the view field group to destroy."""
id: UUID!
}
input UpsertFieldsWidgetInput {
"""The id of the fields widget whose groups and fields to upsert"""
widgetId: UUID!
"""
The groups (with nested fields) to upsert. Mutually exclusive with "fields".
"""
groups: [UpsertFieldsWidgetGroupInput!]
"""
The ungrouped fields to upsert. When provided, all existing groups are deleted and fields are detached from groups. Mutually exclusive with "groups".
"""
fields: [UpsertFieldsWidgetFieldInput!]
}
input UpsertFieldsWidgetGroupInput {
id: UUID!
name: String!
position: Float!
isVisible: Boolean!
fields: [UpsertFieldsWidgetFieldInput!]!
}
input UpsertFieldsWidgetFieldInput {
"""The id of the view field. Required if fieldMetadataId is not provided."""
viewFieldId: UUID
"""
The id of the field metadata. Used to create a new view field when viewFieldId is not provided.
"""
fieldMetadataId: UUID
isVisible: Boolean!
position: Float!
}
input CreateApiKeyInput {
name: String!
expiresAt: String!
revokedAt: String
roleId: UUID!
}
input UpdateApiKeyInput {
id: UUID!
name: String
expiresAt: String
revokedAt: String
}
input RevokeApiKeyInput {
id: UUID!
}
input CreateApprovedAccessDomainInput {
domain: String!
email: String!
}
input DeleteApprovedAccessDomainInput {
id: UUID!
}
input ValidateApprovedAccessDomainInput {
validationToken: String!
approvedAccessDomainId: UUID!
}
input CreatePageLayoutTabInput {
title: String!
position: Float
pageLayoutId: UUID!
layoutMode: PageLayoutTabLayoutMode = GRID
}
input UpdatePageLayoutTabInput {
title: String
position: Float
icon: String
layoutMode: PageLayoutTabLayoutMode
}
input CreatePageLayoutInput {
name: String!
type: PageLayoutType = RECORD_PAGE
objectMetadataId: UUID
}
input UpdatePageLayoutInput {
name: String
type: PageLayoutType
objectMetadataId: UUID
}
input UpdatePageLayoutWithTabsInput {
name: String!
type: PageLayoutType!
objectMetadataId: UUID
tabs: [UpdatePageLayoutTabWithWidgetsInput!]!
}
input UpdatePageLayoutTabWithWidgetsInput {
id: UUID!
title: String!
position: Float!
icon: String
layoutMode: PageLayoutTabLayoutMode = GRID
widgets: [UpdatePageLayoutWidgetWithIdInput!]!
}
input UpdatePageLayoutWidgetWithIdInput {
id: UUID!
pageLayoutTabId: UUID!
title: String!
type: WidgetType!
objectMetadataId: UUID
gridPosition: GridPositionInput!
position: JSON
configuration: JSON
conditionalDisplay: JSON
conditionalAvailabilityExpression: String
}
input GridPositionInput {
row: Float!
column: Float!
rowSpan: Float!
columnSpan: Float!
}
input CreatePageLayoutWidgetInput {
pageLayoutTabId: UUID!
title: String!
type: WidgetType!
objectMetadataId: UUID
gridPosition: GridPositionInput!
position: JSON
configuration: JSON!
}
input UpdatePageLayoutWidgetInput {
pageLayoutTabId: UUID
title: String
type: WidgetType
objectMetadataId: UUID
gridPosition: GridPositionInput
position: JSON
configuration: JSON
conditionalDisplay: JSON
conditionalAvailabilityExpression: String
}
input CreateAgentInput {
name: String
label: String!
icon: String
description: String
prompt: String!
modelId: String!
roleId: UUID
responseFormat: JSON
modelConfiguration: JSON
evaluationInputs: [String!]
}
input UpdateAgentInput {
id: UUID!
name: String
label: String
icon: String
description: String
prompt: String
modelId: String
roleId: UUID
responseFormat: JSON
modelConfiguration: JSON
evaluationInputs: [String!]
}
input CreateOneObjectInput {
"""The object to create"""
object: CreateObjectInput!
}
input CreateObjectInput {
nameSingular: String!
namePlural: String!
labelSingular: String!
labelPlural: String!
description: String
icon: String
shortcut: String
color: String
skipNameField: Boolean
isRemote: Boolean
primaryKeyColumnType: String
primaryKeyFieldMetadataSettings: JSON
isLabelSyncedWithName: Boolean
}
input DeleteOneObjectInput {
"""The id of the record to delete."""
id: UUID!
}
input UpdateOneObjectInput {
update: UpdateObjectPayload!
"""The id of the object to update"""
id: UUID!
}
input UpdateObjectPayload {
labelSingular: String
labelPlural: String
nameSingular: String
namePlural: String
description: String
icon: String
shortcut: String
color: String
isActive: Boolean
labelIdentifierFieldMetadataId: UUID
imageIdentifierFieldMetadataId: UUID
isLabelSyncedWithName: Boolean
isSearchable: Boolean
}
input CreateOneIndexInput {
"""The custom index to create"""
index: CreateIndexInput!
}
input CreateIndexInput {
objectMetadataId: UUID!
fields: [CreateIndexFieldInput!]!
indexType: IndexType! = BTREE
}
input CreateIndexFieldInput {
fieldMetadataId: UUID!
subFieldName: String
}
input DeleteOneIndexInput {
"""The id of the custom index to delete."""
id: UUID!
}
input CreateLogicFunctionFromSourceInput {
id: UUID
universalIdentifier: UUID
name: String!
description: String
timeoutSeconds: Float
source: JSON
cronTriggerSettings: JSON
databaseEventTriggerSettings: JSON
httpRouteTriggerSettings: JSON
serverRouteTriggerSettings: JSON
toolTriggerSettings: JSON
workflowActionTriggerSettings: JSON
}
input ExecuteOneLogicFunctionInput {
"""Id of the logic function to execute"""
id: UUID!
"""Payload in JSON format"""
payload: JSON!
}
input UpdateLogicFunctionFromSourceInput {
"""Id of the logic function to update"""
id: UUID!
"""The logic function updates"""
update: UpdateLogicFunctionFromSourceInputUpdates!
}
input UpdateLogicFunctionFromSourceInputUpdates {
name: String
description: String
timeoutSeconds: Float
sourceHandlerCode: String
handlerName: String
sourceHandlerPath: String
cronTriggerSettings: JSON
databaseEventTriggerSettings: JSON
httpRouteTriggerSettings: JSON
toolTriggerSettings: JSON
workflowActionTriggerSettings: JSON
}
input CreateCommandMenuItemInput {
workflowVersionId: UUID
frontComponentId: UUID
engineComponentKey: EngineComponentKey!
label: String!
icon: String
shortLabel: String
position: Float
isPinned: Boolean
availabilityType: CommandMenuItemAvailabilityType
hotKeys: [String!]
conditionalAvailabilityExpression: String
availabilityObjectMetadataId: UUID
payload: JSON
pageLayoutId: UUID
}
input UpdateCommandMenuItemInput {
id: UUID!
label: String
icon: String
shortLabel: String
position: Float
isPinned: Boolean
availabilityType: CommandMenuItemAvailabilityType
availabilityObjectMetadataId: UUID
engineComponentKey: EngineComponentKey
hotKeys: [String!]
pageLayoutId: UUID
}
input CreateFrontComponentInput {
id: UUID
name: String!
description: String
sourceComponentPath: String!
builtComponentPath: String!
componentName: String!
builtComponentChecksum: String!
}
input UpdateFrontComponentInput {
"""The id of the front component to update"""
id: UUID!
"""The front component fields to update"""
update: UpdateFrontComponentInputUpdates!
}
input UpdateFrontComponentInputUpdates {
name: String
description: String
}
input SendEmailViaDomainInput {
emailingDomainId: String!
to: [String!]!
cc: [String!]
bcc: [String!]
subject: String!
text: String!
html: String
from: String!
replyTo: [String!]
}
input SendMessageCampaignInput {
listId: String!
unsubscribeTopicId: String
subject: String!
body: String!
fromAddress: String!
}
input CreateUnsubscribeTopicInput {
name: String!
description: String
visibility: UnsubscribeTopicVisibility
}
input UpdateUnsubscribeTopicInput {
id: String!
name: String
description: String
visibility: UnsubscribeTopicVisibility
}
input UpdateMessageChannelInput {
id: UUID!
update: UpdateMessageChannelInputUpdates!
}
input UpdateMessageChannelInputUpdates {
visibility: MessageChannelVisibility
isContactAutoCreationEnabled: Boolean
contactAutoCreationPolicy: MessageChannelContactAutoCreationPolicy
messageFolderImportPolicy: MessageFolderImportPolicy
isSyncEnabled: Boolean
excludeNonProfessionalEmails: Boolean
excludeGroupEmails: Boolean
}
input CreateEmailGroupChannelInput {
handle: String!
}
input CreateEmailingDomainInput {
domain: String!
}
input CreateRoleInput {
id: String
label: String!
description: String
icon: String
canUpdateAllSettings: Boolean
canAccessAllTools: Boolean
canReadAllObjectRecords: Boolean
canUpdateAllObjectRecords: Boolean
canSoftDeleteAllObjectRecords: Boolean
canDestroyAllObjectRecords: Boolean
canBeAssignedToUsers: Boolean
canBeAssignedToAgents: Boolean
canBeAssignedToApiKeys: Boolean
}
input UpdateRoleInput {
update: UpdateRolePayload!
"""The id of the role to update"""
id: UUID!
}
input UpdateRolePayload {
label: String
description: String
icon: String
canUpdateAllSettings: Boolean
canAccessAllTools: Boolean
canReadAllObjectRecords: Boolean
canUpdateAllObjectRecords: Boolean
canSoftDeleteAllObjectRecords: Boolean
canDestroyAllObjectRecords: Boolean
canBeAssignedToUsers: Boolean
canBeAssignedToAgents: Boolean
canBeAssignedToApiKeys: Boolean
}
input UpsertObjectPermissionsInput {
roleId: UUID!
objectPermissions: [ObjectPermissionInput!]!
}
input ObjectPermissionInput {
objectMetadataId: UUID!
canReadObjectRecords: Boolean
canUpdateObjectRecords: Boolean
canSoftDeleteObjectRecords: Boolean
canDestroyObjectRecords: Boolean
}
input UpsertPermissionFlagsInput {
roleId: UUID!
permissionFlagKeys: [String!]!
}
input UpsertFieldPermissionsInput {
roleId: UUID!
fieldPermissions: [FieldPermissionInput!]!
}
input FieldPermissionInput {
objectMetadataId: UUID!
fieldMetadataId: UUID!
canReadFieldValue: Boolean
canUpdateFieldValue: Boolean
}
input UpsertRowLevelPermissionPredicatesInput {
roleId: UUID!
objectMetadataId: UUID!
predicates: [RowLevelPermissionPredicateInput!]!
predicateGroups: [RowLevelPermissionPredicateGroupInput!]!
}
input RowLevelPermissionPredicateInput {
id: UUID
fieldMetadataId: UUID!
operand: RowLevelPermissionPredicateOperand!
value: JSON
subFieldName: String
workspaceMemberFieldMetadataId: String
workspaceMemberSubFieldName: String
rowLevelPermissionPredicateGroupId: UUID
positionInRowLevelPermissionPredicateGroup: Float
}
input RowLevelPermissionPredicateGroupInput {
id: UUID
objectMetadataId: UUID!
parentRowLevelPermissionPredicateGroupId: UUID
logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator!
positionInRowLevelPermissionPredicateGroup: Float
}
input RunAgentInput {
agentUniversalIdentifier: String!
prompt: String!
}
input CreateWebhookInput {
id: UUID
targetUrl: String!
operations: [String!]!
description: String
secret: String
}
input UpdateWebhookInput {
"""The id of the webhook to update"""
id: UUID!
"""The webhook fields to update"""
update: UpdateWebhookInputUpdates!
}
input UpdateWebhookInputUpdates {
targetUrl: String
operations: [String!]
description: String
secret: String
}
input CreateOneFieldMetadataInput {
"""The record to create"""
field: CreateFieldInput!
}
input CreateFieldInput {
type: FieldMetadataType!
name: String!
label: String!
description: String
icon: String
isActive: Boolean
isSystem: Boolean
isUIEditable: Boolean
isUIReadOnly: Boolean
isNullable: Boolean
isUnique: Boolean
defaultValue: JSON
options: JSON
settings: JSON
objectMetadataId: UUID!
isLabelSyncedWithName: Boolean
isRemoteCreation: Boolean
relationCreationPayload: JSON
morphRelationsCreationPayload: [JSON!]
}
input UpdateOneFieldMetadataInput {
"""The id of the record to update"""
id: UUID!
"""The record to update"""
update: UpdateFieldInput!
}
input UpdateFieldInput {
universalIdentifier: String
name: String
label: String
description: String
icon: String
isActive: Boolean
isSystem: Boolean
isUIEditable: Boolean
isUIReadOnly: Boolean
isNullable: Boolean
isUnique: Boolean
defaultValue: JSON
options: JSON
settings: JSON
objectMetadataId: UUID
isLabelSyncedWithName: Boolean
morphRelationsUpdatePayload: [JSON!]
}
input DeleteOneFieldInput {
"""The id of the field to delete."""
id: UUID!
}
input CreateViewGroupInput {
id: UUID
isVisible: Boolean = true
fieldValue: String!
position: Float = 0
viewId: UUID!
}
input UpdateViewGroupInput {
"""The id of the view group to update"""
id: UUID!
"""The view group to update"""
update: UpdateViewGroupInputUpdates!
}
input UpdateViewGroupInputUpdates {
fieldMetadataId: UUID
isVisible: Boolean
fieldValue: String
position: Float
}
input DeleteViewGroupInput {
"""The id of the view group to delete."""
id: UUID!
}
input DestroyViewGroupInput {
"""The id of the view group to destroy."""
id: UUID!
}
input UpdateMessageFolderInput {
id: UUID!
update: UpdateMessageFolderInputUpdates!
}
input UpdateMessageFolderInputUpdates {
isSynced: Boolean!
}
input UpdateMessageFoldersInput {
ids: [UUID!]!
update: UpdateMessageFolderInputUpdates!
}
input UpdateCalendarChannelInput {
id: UUID!
update: UpdateCalendarChannelInputUpdates!
}
input UpdateCalendarChannelInputUpdates {
visibility: CalendarChannelVisibility
isContactAutoCreationEnabled: Boolean
contactAutoCreationPolicy: CalendarChannelContactAutoCreationPolicy
isSyncEnabled: Boolean
}
input FileAttachmentInput {
id: UUID!
filename: String!
}
input CreateSkillInput {
id: UUID
name: String!
label: String!
icon: String
description: String
content: String!
}
input UpdateSkillInput {
id: UUID!
name: String
label: String
icon: String
description: String
content: String
isActive: Boolean
}
input GetAuthorizationUrlForSSOInput {
identityProviderId: UUID!
workspaceInviteHash: String
}
input SignUpInNewWorkspaceInput {
displayName: String
subdomain: String
}
input CreateApplicationRegistrationInput {
name: String!
universalIdentifier: String
oAuthRedirectUris: [String!]
oAuthScopes: [String!]
}
input UpdateApplicationRegistrationInput {
id: String!
update: UpdateApplicationRegistrationPayload!
}
input UpdateApplicationRegistrationPayload {
name: String
oAuthRedirectUris: [String!]
oAuthScopes: [String!]
isListed: Boolean
}
input CreateApplicationRegistrationVariableInput {
applicationRegistrationId: String!
key: String!
value: String!
description: String
isSecret: Boolean
}
input UpdateApplicationRegistrationVariableInput {
id: String!
update: UpdateApplicationRegistrationVariablePayload!
}
input UpdateApplicationRegistrationVariablePayload {
value: String
resetValue: Boolean
description: String
}
input UpdateWorkspaceMemberSettingsInput {
workspaceMemberId: UUID!
update: JSON!
}
input ActivateWorkspaceInput {
"""
Deprecated: the workspace name is set at creation (signUpInNewWorkspace) and this field is ignored during activation. Kept for backward compatibility.
"""
displayName: String
}
input UpdateWorkspaceInput {
subdomain: String
customDomain: String
displayName: String
logo: String
inviteHash: String
isPublicInviteLinkEnabled: Boolean
allowImpersonation: Boolean
isGoogleAuthEnabled: Boolean
isMicrosoftAuthEnabled: Boolean
isPasswordAuthEnabled: Boolean
isGoogleAuthBypassEnabled: Boolean
isMicrosoftAuthBypassEnabled: Boolean
isPasswordAuthBypassEnabled: Boolean
defaultRoleId: UUID
isTwoFactorAuthenticationEnforced: Boolean
trashRetentionDays: Float
eventLogRetentionDays: Float
fastModel: String
smartModel: String
aiAdditionalInstructions: String
editableProfileFields: [String!]
enabledAiModelIds: [String!]
useRecommendedModels: Boolean
isInternalMessagesImportEnabled: Boolean
}
input WorkspaceMigrationInput {
actions: [WorkspaceMigrationDeleteActionInput!]!
}
input WorkspaceMigrationDeleteActionInput {
type: WorkspaceMigrationActionType!
metadataName: AllMetadataName!
universalIdentifier: String!
}
enum WorkspaceMigrationActionType {
delete
create
update
}
input SetupOIDCSsoInput {
name: String!
issuer: String!
clientID: String!
clientSecret: String!
}
input SetupSAMLSsoInput {
name: String!
issuer: String!
id: UUID!
ssoURL: String!
certificate: String!
fingerprint: String
}
input DeleteSsoInput {
identityProviderId: UUID!
}
input EditSsoInput {
id: UUID!
status: SSOIdentityProviderStatus!
}
enum AnalyticsType {
PAGEVIEW
TRACK
}
input SendEmailInput {
connectedAccountId: String!
to: String!
cc: String
bcc: String
subject: String!
body: String!
inReplyTo: String
files: [SendEmailAttachmentInput!]
}
input SendEmailAttachmentInput {
id: String!
name: String!
}
input EmailAccountConnectionParameters {
IMAP: ConnectionParametersInput
SMTP: ConnectionParametersInput
CALDAV: ConnectionParametersInput
}
input ConnectionParametersInput {
host: String!
port: Float!
username: String
password: String
connectionSecurity: EmailConnectionSecurity
}
input UpdateLabPublicFeatureFlagInput {
publicFeatureFlag: String!
value: Boolean!
}
input CreateOneAppTokenInput {
"""The record to create"""
appToken: CreateAppTokenInput!
}
input CreateAppTokenInput {
expiresAt: DateTime!
}
enum FileFolder {
ProfilePicture
WorkspaceLogo
Attachment
PersonPicture
CorePicture
File
AgentChat
BuiltLogicFunction
BuiltFrontComponent
PublicAsset
Source
FilesField
Dependencies
Workflow
EmailAttachment
AppTarball
GeneratedSdkClient
}
type Subscription {
onEventSubscription(eventStreamId: String!): EventSubscription
logicFunctionLogs(input: LogicFunctionLogsInput!): LogicFunctionLogs!
onAgentChatEvent(threadId: UUID!): AgentChatEvent!
eventLogsLive(table: EventLogTable!): [EventLogRecord!]
}
input LogicFunctionLogsInput {
applicationId: UUID
applicationUniversalIdentifier: UUID
name: String
id: UUID
universalIdentifier: UUID
}