schema { query: RootQuery mutation: RootMutation subscription: RootSubscription } """ Directs the executor to defer this fragment when the `if` argument is true or undefined. """ directive @defer( """Deferred when true or undefined.""" if: Boolean = true """Unique name""" label: String ) on FRAGMENT_SPREAD | INLINE_FRAGMENT directive @extends on INTERFACE | OBJECT directive @external on FIELD_DEFINITION directive @goField(forceResolver: Boolean, name: String, omittable: Boolean) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION directive @isDogfood on FIELD_DEFINITION directive @key on INTERFACE | OBJECT """ Indicates exactly one field must be supplied and this field must not be `null`. """ directive @oneOf on INPUT_OBJECT directive @provides on FIELD_DEFINITION directive @requires on FIELD_DEFINITION """ AIConversation represents an AI agent conversation that can be shared via Warp Drive. """ type AIConversation { """ The ID of the ambient agent task associated with this conversation, if any. """ ambientAgentTaskId: ID """Artifacts (plans, PRs) created during this conversation.""" artifacts: [AIConversationArtifact!]! conversationId: ID! """Public profile for the user who originally created the conversation, when available.""" creator: PublicUserProfile """Base64-encoded proto binary of the final task list.""" finalTaskList: String! """Describes the format of the conversation transcript data.""" format: AIConversationFormat! """The harness that produced this conversation.""" harness: AgentHarness! metadata: ObjectMetadata! permissions: ObjectPermissions! title: String! usage: ConversationUsage! """The working directory where the conversation was started.""" workingDirectory: String } union AIConversationArtifact = FileArtifact | PlanArtifact | PullRequestArtifact | ScreenshotArtifact type AIConversationFormat { """ Format of the TUI serialized block, or null if no serialized block is available. """ blockSnapshot: SerializedBlockFormat """True if there's a Warp MAA task list available for this format.""" hasTaskList: Boolean! } enum AICreditsUsageAndCostSubjectType { SERVICE_ACCOUNT TEAM USER } enum AICreditsUsageAndCostType { """ Sentinel value used on synthetic UsageEntry rows that aggregate across multiple cost types. Real usage rows never carry this value. """ AGGREGATE AMBIENT_BONUS_GRANT BASE_LIMIT BONUS_GRANT PAYG } enum AICreditsUsageBucket { """ Sentinel value used on synthetic UsageEntry rows that aggregate across multiple usage buckets. Real usage rows never carry this value. """ AGGREGATE AI COMPUTE PLATFORM SUGGESTED_CODE_DIFFS VOICE } enum AICreditsUsageSource { """ Sentinel value used on synthetic UsageEntry rows that aggregate across multiple usage sources. Real usage rows never carry this value. """ AGGREGATE CLOUD LOCAL } type APIKeyAgentInfo { name: String! uid: ID! } type APIKeyProperties { agentInfo: APIKeyAgentInfo createdAt: Time! expiresAt: Time keySuffix: String! lastUsedAt: Time name: String! ownerType: OwnerType! uid: ID! } type APIKeyPropertiesOutput implements Response { apiKeys: [APIKeyProperties!]! responseContext: ResponseContext! } union APIKeyPropertiesResult = APIKeyPropertiesOutput | UserFacingError enum AccessLevel { Editor Full Viewer } """ Error type for when a user tries to do an action that requires a paid subscription but their subscription is delinquent due to payment issues. """ type AccountDelinquencyError implements UserFacingErrorInterface { message: String! } """Acquisition channel question response input""" input AcquisitionChannelQuestionResponseInput { answer: AcquisitionChannelSurveyResponse! details: String } """Acquisition channel options for onboarding survey responses""" enum AcquisitionChannelSurveyResponse { FRIEND INTERNET IN_THE_WILD TEAMMATE } """ More recent actions are returned with their exact timestamps. Older actions are bundled together to save space at the cost of being less time specific. """ union ActionRecord = BundledActions | SingleAction enum ActionType { EXECUTED } input AddInviteLinkDomainRestrictionInput { domain: String! teamUid: ID! } type AddInviteLinkDomainRestrictionOutput implements Response { responseContext: ResponseContext! success: Boolean! } union AddInviteLinkDomainRestrictionResult = AddInviteLinkDomainRestrictionOutput | UserFacingError input AddObjectGuestsInput { accessLevel: AccessLevel! objectUid: ID! userEmails: [String!]! } type AddObjectGuestsOutput implements Response { objectPermissions: ObjectPermissions! responseContext: ResponseContext! userProfiles: [PublicUserProfile!] } union AddObjectGuestsResult = AddObjectGuestsOutput | UserFacingError enum AddonCreditAutoReloadStatus { FAILED SUCCEEDED } type AddonCreditsOption { credits: Int! priceUsdCents: Int! } type AddonCreditsSettings { autoReloadEnabled: Boolean! maxMonthlySpendCents: Int selectedAutoReloadCreditDenomination: Int } input AddonCreditsSettingsInput { autoReloadEnabled: Boolean maxMonthlySpendCents: Int selectedAutoReloadCreditDenomination: Int } enum AdminEnablementSetting { DISABLE ENABLE RESPECT_USER_SETTING } """The harness that produced an agent conversation.""" enum AgentHarness { CLAUDE_CODE CODEX GEMINI OZ } """Controls whether a team can configure settings for agent harnesses.""" type AgentHarnessesPolicy { toggleable: Boolean! } """Controls how many agent identities (service accounts) a team can have.""" type AgentIdentitiesPolicy { isUnlimited: Boolean! maxServiceAccounts: Int! } """An ambient agent task with its current state and status.""" type AgentTask { """When the task was created.""" createdAt: Time! """The unique identifier for the task.""" id: ID! """The shared session ID associated with this task, if any.""" sharedSessionId: ID """ When the task transitioned to IN_PROGRESS state. Null if the task has not started yet. """ startedAt: Time """The current state of the task.""" state: AgentTaskState! """Optional status message about the task.""" statusMessage: AgentTaskStatusMessage """The title of the task.""" title: String! """When the task was last updated.""" updatedAt: Time! } """ State of an ambient agent task. Some internal states are not exposed to the client. """ enum AgentTaskState { """The agent could not proceed because the task was blocked or unclear""" BLOCKED """The task was cancelled by the user""" CANCELLED """A worker has claimed this task""" CLAIMED """The task failed due to an internal Warp/system error""" ERROR """ The task could not be completed due to task/input issues (for example invalid requirements, missing permissions, or missing resources) """ FAILED """An agent is working on this task""" IN_PROGRESS """The agent successfully completed this task""" SUCCEEDED } """Status message for an agent task.""" type AgentTaskStatusMessage { """ Machine-readable error code from the platform error catalog. Only present when the status message represents an error. """ errorCode: PlatformErrorCode """The status message text.""" message: String! """ Whether the client may retry the operation. Only present on terminal tasks. When true, the error was transient — the system retried automatically but exhausted its attempts, and submitting a new task may succeed. When false, retrying without addressing the underlying cause (e.g. insufficient credits, invalid configuration) will not succeed. """ retryable: Boolean } input AgentTaskStatusMessageInput { """ Machine-readable error code from the platform error catalog. Only set when the status message represents an error. The server derives retryability from the error code. """ errorCode: PlatformErrorCode """The status message text.""" message: String! } enum AgentVisibility { PERSONAL TEAM } type AiAutonomyPolicy { enabled: Boolean! toggleable: Boolean! } type AiAutonomySettings { applyCodeDiffsSetting: AiAutonomyValue computerUseSetting: ComputerUseAutonomyValue createPlansSetting: AiAutonomyValue executeCommandsAllowlist: [String!] executeCommandsDenylist: [String!] executeCommandsSetting: AiAutonomyValue readFilesAllowlist: [String!] readFilesSetting: AiAutonomyValue writeToPtySetting: WriteToPtyAutonomyValue } input AiAutonomySettingsInput { applyCodeDiffsSetting: AiAutonomyValue computerUseSetting: ComputerUseAutonomyValue createPlansSetting: AiAutonomyValue executeCommandsAllowlist: [String!] executeCommandsDenylist: [String!] executeCommandsSetting: AiAutonomyValue readFilesAllowlist: [String!] readFilesSetting: AiAutonomyValue writeToPtySetting: WriteToPtyAutonomyValue } enum AiAutonomyValue { AGENT_DECIDES ALWAYS_ALLOW ALWAYS_ASK RESPECT_USER_SETTING } type AiInRemoteSessionsPolicy { toggleable: Boolean! } type AiOverages { currentMonthlyRequestCostCents: Int! currentMonthlyRequestsUsed: Int! currentPeriodEnd: Time! currentPeriodStart: Time! @deprecated(reason: "Use currentPeriodEnd instead") } type AiPermissionsPolicy { aiInRemoteSessionsPolicy: AiInRemoteSessionsPolicy } type AiPermissionsSettings { allowAiInRemoteSessions: Boolean! remoteSessionRegexList: [String!]! } input AiPermissionsSettingsInput { allowAiInRemoteSessions: Boolean remoteSessionRegexList: [String!] } type AmbientAgentSettings { defaultHostSlug: String enableWarpAttribution: AdminEnablementSetting! instanceShape: InstanceShape localAgentTracking: AgentVisibility! warpHostedAgentsEnabled: Boolean! } input AmbientAgentSettingsInput { defaultHostSlug: String enableWarpAttribution: AdminEnablementSetting instanceShape: InstanceShapeInput localAgentTracking: AgentVisibility warpHostedAgentsEnabled: Boolean } type AmbientAgentsPolicy { allowedLocalAgentTrackingOptions: [AgentVisibility!]! enabled: Boolean! instanceShape: InstanceShape maxConcurrentAgents: Int! maxInstanceRuntimeSeconds: Int! selfHostedEnabled: Boolean! toggleable: Boolean! } type AmbientTaskUpdated { taskId: ID! taskUpdatedTs: Time! } enum AnonymousUserExpirationType { EXPIRATION_14_DAYS NO_EXPIRATION } type AnonymousUserInfo { anonymousUserType: AnonymousUserType! expiresAt: Time isExpired: Boolean! linkedAt: Time personalObjectLimits: AnonymousUserPersonalObjectLimits } type AnonymousUserPersonalObjectLimits { envVarLimit: Int! notebookLimit: Int! workflowLimit: Int! } enum AnonymousUserType { NATIVE_CLIENT_ANONYMOUS_USER NATIVE_CLIENT_ANONYMOUS_USER_FEATURE_GATED WEB_CLIENT_ANONYMOUS_USER } type AnyoneWithLinkSharingPolicy { toggleable: Boolean! } """Statistics for file diff operations.""" type ApplyFileDiffStats { count: Int! filesChanged: Int! linesAdded: Int! linesRemoved: Int! } type AvailableHarnesses { harnesses: [HarnessInfo!]! } type AvailableLlms { choices: [LlmInfo!]! defaultId: String! preferredCodexModelId: String } type AwsProviderConfig { roleArn: String! } type BillingCycleUsageHistory { currentPeriodEnd: Time! currentPeriodStart: Time! summaries: [BillingCycleUsageSummary!]! } type BillingCycleUsageSummary { entries: [UsageEntry!]! periodEnd: Time! periodStart: Time! } type BillingMetadata { aiOverages: AiOverages customerType: CustomerType! delinquencyStatus: DelinquencyStatus! serviceAgreements: [ServiceAgreement!]! tier: Tier! } type Block { command: String embedDisplaySetting: DisplaySetting! output: String showPrompt: Boolean! stylizedCommand: String stylizedOutput: String stylizedPrompt: String stylizedPromptAndCommand: String timeStartedTerm: Time title: String """ Note that uid is equivalent to the id field in v1. This currently corresponds to either block_id or hash_id in the database. """ uid: ID! } input BlockInput { command: String embedDisplaySetting: DisplaySetting! = COMMAND_AND_OUTPUT output: String showPrompt: Boolean! = false stylizedCommand: String stylizedOutput: String stylizedPrompt: String stylizedPromptAndCommand: String timeStartedTerm: Time title: String } """Represents a single bonus grant.""" type BonusGrant { costCents: Int! createdAt: Time! expiration: Time grantType: BonusGrantType! reason: String! requestCreditsGranted: Int! requestCreditsRemaining: Int! userFacingMessage: String } type BonusGrantSpendingInfo { currentMonthCreditsPurchased: Int! currentMonthPeriodEnd: Time! currentMonthSpendCents: Int! } """The type of bonus grant.""" enum BonusGrantType { AMBIENT_ONLY ANY } type BonusGrantsInfo { grants: [BonusGrant!]! spendingInfo: BonusGrantSpendingInfo } """ Error type for when a user tries to purchase add-on credits but exceeds their monthly spending limit. """ type BudgetExceededError implements UserFacingErrorInterface { message: String! } input BulkCreateGenericStringObjectsInput { objects: [GenericStringObjectInput!]! owner: Owner! } type BulkCreateGenericStringObjectsOutput { objects: [CreateGenericStringObjectOutput!]! } input BulkCreateObjectsInput { genericStringObjects: BulkCreateGenericStringObjectsInput } type BulkCreateObjectsOutput implements Response { genericStringObjects: BulkCreateGenericStringObjectsOutput responseContext: ResponseContext! } union BulkCreateObjectsResult = BulkCreateObjectsOutput | UserFacingError """ A return type for MULTIPLE actions, all of the same type. This includes a count of the actions and the time period (in UTC) they span. """ type BundledActions { actionType: ActionType! count: Int! latestProcessedAtTimestamp: Time! latestTimestamp: Time! oldestTimestamp: Time! } type ByoApiKeyPolicy { enabled: Boolean! } """Token count for a specific usage category.""" type CategoryTokenBreakdown { category: String! tokens: Int! } input ClientContext { version: String } type CloudConversationStoragePolicy { defaultSetting: AdminEnablementSetting! isUnlimited: Boolean! limit: Int! toggleable: Boolean! } type CloudConversationStorageSettings { setting: AdminEnablementSetting! } input CloudConversationStorageSettingsInput { setting: AdminEnablementSetting } type CloudEnvironment { config: CloudEnvironmentConfig! creator: PublicUserProfile lastEditor: PublicUserProfile """The most recently created task for this environment, if any.""" lastTaskCreated: AgentTask lastTaskRunTimestamp: Time lastUpdated: Time! scope: Space! """ True when the most recent task for this environment failed during setup (i.e., it was created but never started running). """ setupFailed: Boolean! uid: ID! } type CloudEnvironmentConfig { description: String dockerImage: String! githubRepos: [GitHubRepo!]! name: String! providers: ProvidersConfig secrets: [SecretRefOutput!] setupCommands: [String!] } enum CloudEnvironmentSortBy { """Sort by most recently updated first""" LAST_UPDATED """Sort alphabetically by environment name""" NAME } union CloudObject = AIConversation | Folder | GenericStringObject | Notebook | Workflow """ Used to represent the entrypoint that a user came from when performing an action. """ enum CloudObjectEventEntrypoint { Blocklist """DriveIndex is equivalent to the v1 entrypoint "ManagementUI".""" DriveIndex ImportModal Onboarding ResourceCenter TeamSettings UniversalSearch Unknown UpgradePage } input CloudObjectInput { uid: ID! } type CloudObjectOutput implements Response { actionHistories: [ObjectActionHistory!] object: CloudObjectWithDescendants! responseContext: ResponseContext! } union CloudObjectResult = CloudObjectOutput | UserFacingError union CloudObjectWithDescendants = AIConversation | FolderWithDescendants | GenericStringObject | Notebook | Workflow type CodebaseContextConfigOutput implements Response { embeddingCadence: Int! embeddingConfig: EmbeddingConfig! responseContext: ResponseContext! } union CodebaseContextConfigResult = CodebaseContextConfigOutput | UserFacingError type CodebaseContextPolicy { defaultEnabledValue: Boolean! embeddingGenerationBatchSize: Int! isUnlimitedIndices: Boolean! maxFilesPerRepo: Int! maxIndices: Int! toggleable: Boolean! } type CodebaseContextSettings { enabled: Boolean! setting: AdminEnablementSetting! } input CodebaseContextSettingsInput { enabled: AdminEnablementSetting } enum ComputerUseAutonomyValue { ALWAYS_ALLOW ALWAYS_ASK NEVER RESPECT_USER_SETTING } input ConfirmFileArtifactUploadInput { artifactUid: ID! checksum: String! } type ConfirmFileArtifactUploadOutput implements Response { artifact: FileArtifact! responseContext: ResponseContext! } union ConfirmFileArtifactUploadResult = ConfirmFileArtifactUploadOutput | UserFacingError """ A Warp Drive entity that can contain other objects. Today, all objects are either inside a folder or at the root of a drive. """ union Container = FolderContainer | Space """ Marker for the client to provide a CRC32C checksum of the upload content. The checksum should be serialized as a base64-encoded big-endian 4-byte value. """ type ContentCRC32CFieldValue { _: Boolean } """Marker for the client to provide the upload content.""" type ContentDataFieldValue { _: Boolean } scalar ContentHash """The kind of a context-window segment.""" enum ContextWindowSegmentType { UNKNOWN SYSTEM_PROMPT TOOL_DEFINITIONS CONVERSATION_HISTORY LATEST_INPUT IMAGES OTHER } """A single portion of the context window, described by its kind and token count.""" type ContextWindowSegment { """The kind of context window segment this entry represents.""" segmentType: ContextWindowSegmentType! """The estimated number of tokens this segment occupies.""" tokenCount: Int! } """Represents usage data for a single multi-agent conversation.""" type ConversationUsage { conversationId: String! lastUpdated: Time! title: String! usageMetadata: ConversationUsageMetadata! } """Metadata about resource usage within a conversation.""" type ConversationUsageMetadata { """Token usage using a user's API key, keyed by model.""" byokTokenUsage: [TokenUsage!]! """ A breakdown of the context window usage into segments, each carrying a kind and token count. Segment token counts add up to the token total represented by contextWindowUsage. The client derives per-segment percentages. """ contextWindowSegments: [ContextWindowSegment!]! contextWindowUsage: Float! """The total number of inference credits spent so far in the conversation""" creditsSpent: Float! """The total number of platform credits spent so far in the conversation.""" platformCreditsSpent: Float! summarized: Boolean! """ Deprecated: Use warpTokenUsage and byokTokenUsage instead. This field combines both Warp API key and user API key usage. """ tokenUsage: [ModelTokenUsage!]! @deprecated(reason: "Use warpTokenUsage and byokTokenUsage instead") toolUsageMetadata: ToolUsageMetadata! """Token usage using the Warp API key, keyed by model.""" warpTokenUsage: [TokenUsage!]! } """Worker type for agent tasks.""" input CreateAgentTaskInput { """ Optional JSON-serialized agent config snapshot to store on the task. This should be a JSON object matching the AmbientAgentConfig schema used by ambient agents (e.g. {"model_id":"...","environment_id":"..."}). If provided, the server will persist it to ai_tasks.agent_config_snapshot at creation time. """ agentConfigSnapshot: String """Optional environment UID to run the task in.""" environmentUid: ID """Optional run ID of the parent that spawned this local task.""" parentRunId: ID """The prompt for the agent task.""" prompt: String! } type CreateAgentTaskOutput implements Response { responseContext: ResponseContext! """The ID of the created task.""" taskId: ID! } union CreateAgentTaskResult = CreateAgentTaskOutput | UserFacingError input CreateAnonymousUserInput { anonymousUserType: AnonymousUserType! expirationType: AnonymousUserExpirationType! referralCode: String } type CreateAnonymousUserOutput implements Response { anonymousUserType: AnonymousUserType! expiresAt: Time firebaseUid: String! idToken: String! isInviteValid: Boolean! responseContext: ResponseContext! } union CreateAnonymousUserResult = CreateAnonymousUserOutput | UserFacingError input CreateFileArtifactUploadTargetInput { conversationId: ID description: String filepath: String! mimeType: String runId: ID sizeBytes: Int } type CreateFileArtifactUploadTargetOutput implements Response { artifact: FileArtifact! responseContext: ResponseContext! uploadTarget: CreateUploadTarget! } union CreateFileArtifactUploadTargetResult = CreateFileArtifactUploadTargetOutput | UserFacingError input CreateFolderInput { initialFolderId: ID name: String! owner: Owner! } type CreateFolderOutput implements Response { folder: Folder! responseContext: ResponseContext! } union CreateFolderResult = CreateFolderOutput | UserFacingError input CreateGenericStringObjectInput { genericStringObject: GenericStringObjectInput! owner: Owner! } type CreateGenericStringObjectOutput implements Response { clientId: ID! genericStringObject: GenericStringObject! responseContext: ResponseContext! revisionTs: Time! } union CreateGenericStringObjectResult = CreateGenericStringObjectOutput | UserFacingError input CreateManagedSecretInput { description: String encryptedValue: String! name: String! owner: Owner! type: ManagedSecretType! } type CreateManagedSecretOutput implements Response { managedSecret: ManagedSecret! responseContext: ResponseContext! } union CreateManagedSecretResult = CreateManagedSecretOutput | UserFacingError input CreateManagedMcpClientConfigInput { uid: ID! } type CreateManagedMcpClientConfigOutput implements Response { transportKind: ManagedMcpTransportKind! mcpConfigJson: String! proxyUrl: String proxyToken: String authorizationHeaderName: String authorizationHeaderValue: String expiresAt: Time responseContext: ResponseContext! } union CreateManagedMcpClientConfigResult = CreateManagedMcpClientConfigOutput | UserFacingError input CreateNotebookInput { aiDocumentId: String conversationId: String data: String entrypoint: CloudObjectEventEntrypoint! initialFolderId: ID owner: Owner! title: String } type CreateNotebookOutput implements Response { notebook: Notebook! responseContext: ResponseContext! revisionTs: Time! } union CreateNotebookResult = CreateNotebookOutput | UserFacingError input CreateSimpleIntegrationInput { agentUid: ID config: SimpleIntegrationConfig! enabled: Boolean! integrationType: String! isUpdate: Boolean! = false } type CreateSimpleIntegrationOutput implements Response { authUrl: String message: String! responseContext: ResponseContext! success: Boolean! txId: ID } union CreateSimpleIntegrationResult = CreateSimpleIntegrationOutput | UserFacingError input CreateTeamInput { discoverable: Boolean! = false entrypoint: CloudObjectEventEntrypoint! name: String! } type CreateTeamOutput implements Response { responseContext: ResponseContext! workspace: Workspace! } union CreateTeamResult = CreateTeamOutput | UserFacingError type CreateUploadTarget { fields: [UploadField!]! headers: [CreateUploadTargetHeader!]! method: String! url: String! } type CreateUploadTargetHeader { name: String! value: String! } input CreateWorkflowInput { data: String! entrypoint: CloudObjectEventEntrypoint! initialFolderId: ID owner: Owner! } type CreateWorkflowOutput implements Response { responseContext: ResponseContext! revisionTs: Time! workflow: Workflow! } union CreateWorkflowResult = CreateWorkflowOutput | UserFacingError type CustomLlmPolicy { toggleable: Boolean! } enum CustomerType { BUILD BUILD_MAX BUSINESS ENTERPRISE FREE LEGACY LIGHTSPEED PROSUMER PRO_TRIAL SELF_SERVE TEAM_TRIAL TURBO } input DeleteConversationInput { conversationId: ID! } type DeleteConversationOutput implements Response { """The UID of the conversation object that was marked for deletion.""" deletedUid: ID! responseContext: ResponseContext! success: Boolean! } union DeleteConversationResult = DeleteConversationOutput | UserFacingError input DeleteInviteLinkDomainRestrictionInput { teamUid: ID! uid: ID! } type DeleteInviteLinkDomainRestrictionOutput implements Response { responseContext: ResponseContext! success: Boolean! } union DeleteInviteLinkDomainRestrictionResult = DeleteInviteLinkDomainRestrictionOutput | UserFacingError input DeleteManagedSecretInput { name: String! owner: Owner! } type DeleteManagedSecretOutput implements Response { responseContext: ResponseContext! } union DeleteManagedSecretResult = DeleteManagedSecretOutput | UserFacingError input DeleteObjectInput { uid: ID! } type DeleteObjectOutput implements Response { """ An array of UIDs of all objects marked for deletion as part of this action. """ deletedUids: [ID!]! responseContext: ResponseContext! success: Boolean! } union DeleteObjectResult = DeleteObjectOutput | UserFacingError input DeleteTeamInviteInput { email: String! teamUid: ID! } type DeleteTeamInviteOutput implements Response { responseContext: ResponseContext! success: Boolean! } union DeleteTeamInviteResult = DeleteTeamInviteOutput | UserFacingError type DeletedObjectUids { folderUids: [ID!] genericStringObjectUids: [ID!] notebookUids: [ID!] workflowUids: [ID!] } enum DelinquencyStatus { NO_DELINQUENCY PAST_DUE TEAM_LIMIT_EXCEEDED UNPAID } type DirectApiUsOnlyInferencePolicy { default: Boolean! } type DirectLinkSharingPolicy { toggleable: Boolean! } enum DisableReason { ADMIN_DISABLED OUT_OF_REQUESTS PROVIDER_OUTAGE REQUIRES_UPGRADE } type DiscoverableTeamData { name: String! numMembers: Int! teamAcceptingInvites: Boolean! teamUid: ID! } enum DisplaySetting { COMMAND COMMAND_AND_OUTPUT OUTPUT } type DomainCapturePolicy { toggleable: Boolean! } type DomainCaptureSettings { enabled: Boolean! } input DomainCaptureSettingsInput { enabled: Boolean } type EmailInvite { email: String! expired: Boolean! } enum EmbeddingConfig { """ Corresponds to the OpenAI text-embedding-3-small model with 256 dimensions. """ OPENAI_TEXT_SMALL_3_256 """Corresponds to the Voyage voyage-3.5 model with 512 dimensions.""" VOYAGE_3_5_512 """Corresponds to the Voyage voyage-3.5-lite model with 512 dimensions.""" VOYAGE_3_5_LITE_512 """Corresponds to the Voyage voyage-4 model with 512 dimensions.""" VOYAGE_4_512 """Corresponds to the Voyage voyage-code-3 model with 512 dimensions.""" VOYAGE_CODE_3_512 } """This mutation is equivalent to deleteAllObjectsInASpace in v1.""" input EmptyTrashInput { owner: Owner! } type EmptyTrashOutput implements Response { """ An array of UIDs of all objects marked for deletion as part of this action. """ deletedUids: [ID!]! responseContext: ResponseContext! success: Boolean! } union EmptyTrashResult = EmptyTrashOutput | UserFacingError type EnterpriseAnalyticsDataCollectionSettings { enabled: Boolean! } input EnterpriseAnalyticsDataCollectionSettingsInput { enabled: Boolean } type EnterpriseAnalyticsPolicy { default: Boolean! enabled: Boolean! toggleable: Boolean! } type EnterpriseBillingSettings { maxMonthlyCloudAgentsSpendCents: Int maxMonthlyLocalAgentsSpendCents: Int maxMonthlyPerUserTotalSpendCents: Int maxMonthlyTotalSpendCents: Int } input EnterpriseBillingSettingsInput { maxMonthlyCloudAgentsSpendCents: Int maxMonthlyLocalAgentsSpendCents: Int maxMonthlyPerUserTotalSpendCents: Int maxMonthlyTotalSpendCents: Int } type EnterpriseCreditsAutoReloadPolicy { autoReloadCostCents: Int! autoReloadCreditDenomination: Int! enabled: Boolean! } type EnterprisePayAsYouGoPolicy { enabled: Boolean! paygCostPerThousandCreditsCents: Int! } type EnterpriseSecretRedactionPolicy { toggleable: Boolean! } type EnterpriseSpendingLimitsPolicy { enabled: Boolean! } type EnterpriseUsageThresholdsPolicy { cloudSpendingLimitThresholdPercentages: [Int!] enabled: Boolean! localSpendingLimitThresholdPercentages: [Int!] totalCreditDepletionThresholdPercentages: [Int!] totalSpendingLimitThresholdPercentages: [Int!] } """The set of experiments that could be enabled server-side.""" enum Experiment { AGENT_MODE_ANALYTICS_CONTROL AGENT_MODE_ANALYTICS_EXPERIMENT AGENT_MODE_EARLY_ACCESS_EXPERIMENT AGENT_MODE_HIGHER_LIMIT_EXPERIMENT AGENT_MODE_LOWER_LIMIT_EXPERIMENT AGENT_MODE_UNLIMITED_REQUESTS_CONTROL AGENT_MODE_UNLIMITED_REQUESTS_EXPERIMENT AGENT_ONBOARDING_CONTROL AGENT_ONBOARDING_SKIPPABLE AGENT_ONBOARDING_UNSKIPPABLE AMBIENT_AGENTS_CONTROL AMBIENT_AGENTS_EXPERIMENT BUILD_PLAN_AUTO_RELOAD_BANNER_TOGGLE BUILD_PLAN_AUTO_RELOAD_CONTROL BUILD_PLAN_AUTO_RELOAD_POST_PURCHASE_MODAL CLOUD_PREFERENCES_CONTROL CLOUD_PREFERENCES_GRADUAL_ROLLOUT_EXPERIMENT CODEBASE_CONTEXT_CONTROL CODEBASE_CONTEXT_EXPERIMENT DISABLE_AGENT_MODE_EXPERIMENT ENV_VARS_EARLY_ACCESS_EXPERIMENT FREE_TIER_TO_BUILD_CONVERSION_CONTROL FREE_TIER_TO_BUILD_CONVERSION_DRIP_COUPON FREE_TIER_TO_BUILD_CONVERSION_IMMEDIATE_COUPON FREE_TIER_TO_BUILD_CONVERSION_INTERSTITIAL_EMAIL FREE_TIER_TO_BUILD_CONVERSION_INTERSTITIAL_ONLY FREE_USER_INITIAL_CREDITS_CONTROL FREE_USER_INITIAL_CREDITS_FIVE_HUNDRED FREE_USER_INITIAL_CREDITS_THREE_HUNDRED FREE_USER_NO_AI_CONTROL FREE_USER_NO_AI_EXPERIMENT LINUX_LAUNCH_EXPERIMENT MULTI_AGENT_CONTROL MULTI_AGENT_EXPERIMENT MULTI_ARM_REVERSE_AI_TRIAL_CONTROL MULTI_ARM_REVERSE_AI_TRIAL_FIVE_HUNDRED_REQUESTS MULTI_ARM_REVERSE_AI_TRIAL_ONE_THOUSAND_FIVE_HUNDRED_REQUESTS MULTI_ARM_REVERSE_AI_TRIAL_ONE_THOUSAND_REQUESTS OVERLIMIT_AGENT_MODE_CONTROL OVERLIMIT_AGENT_MODE_GRADUAL_ROLLOUT_EXPERIMENT OZ_MULTI_HARNESS_CONTROL OZ_MULTI_HARNESS_EXPERIMENT PROMPT_SUGGESTIONS_VIA_MAA_CONTROL PROMPT_SUGGESTIONS_VIA_MAA_EXPERIMENT PROMPT_SUGGESTIONS_VIA_MAA_OOB REVERSE_PRO_TRIAL_CONTROL REVERSE_PRO_TRIAL_EXPERIMENT REVERSE_PRO_TRIAL_ONE_WEEK_CONTROL REVERSE_PRO_TRIAL_ONE_WEEK_EXPERIMENT REVERSE_TRIAL_CONTROL REVERSE_TRIAL_EXPERIMENT SESSION_SHARING_CONTROL SESSION_SHARING_EXPERIMENT SPLIT_CREDIT_COST_CONTROL SPLIT_CREDIT_COST_EXPERIMENT SSH_REMOTE_SERVER_CONTROL SSH_REMOTE_SERVER_EXPERIMENT SUGGESTED_CODE_DIFFS_CONTROL SUGGESTED_CODE_DIFFS_EXPERIMENT TMUX_SSH_WARPIFICATION_CONTROL TMUX_SSH_WARPIFICATION_EXPERIMENT UPGRADE_TO_PRO_MODAL_CONTROL UPGRADE_TO_PRO_MODAL_EXPERIMENT_NO_PROMO UPGRADE_TO_PRO_MODAL_EXPERIMENT_WITH_PROMO USAGE_BASED_PRICING_CONTROL USAGE_BASED_PRICING_EXPERIMENT WINDOWS_LAUNCH_CONTROL WINDOWS_LAUNCH_EXPERIMENT } input ExpireApiKeyInput { keyUID: ID! } type ExpireApiKeyOutput implements Response { responseContext: ResponseContext! success: Boolean! } union ExpireApiKeyResult = ExpireApiKeyOutput | UserFacingError type FeatureModelChoice { agentMode: AvailableLlms! cliAgent: AvailableLlms! coding: AvailableLlms! computerUseAgent: AvailableLlms! planning: AvailableLlms! } type FileArtifact { artifactUid: ID! description: String filepath: String! mimeType: String! sizeBytes: Int } """ A user's own Firebase profile. This includes information that should not be exposed to other users - see PublicUserProfile for a public-facing equivalent. """ type FirebaseProfile { displayName: String email: String needsSsoLink: Boolean! photoUrl: String uid: String! } type Folder { isWarpPack: Boolean! metadata: ObjectMetadata! name: String! permissions: ObjectPermissions! } type FolderContainer { folderUid: ID! } type FolderWithDescendants { descendants: [CloudObject!]! folder: Folder! } input Fragment { """The actual content of the file.""" content: String! """The SHA-256 hash of the file content.""" contentHash: ContentHash! } type FragmentLocation { byteEnd: Int! byteStart: Int! filePath: String! } input FragmentLocationInput { byteEnd: Int! byteStart: Int! filePath: String! } input FreeAvailableModelsInput { """The download referral source, if any (e.g. \"codex\").""" referrer: String } type FreeAvailableModelsOutput implements Response { featureModelChoice: FeatureModelChoice! responseContext: ResponseContext! } union FreeAvailableModelsResult = FreeAvailableModelsOutput | UserFacingError type GcpProviderConfig { projectNumber: String! serviceAccountEmail: String workloadIdentityFederationPoolId: String! workloadIdentityFederationProviderId: String! } input GenerateApiKeyInput { """ Optional agent UID to use as the authenticated principal for this key. The team is resolved from the agent automatically. The caller must be a member of that team. The agent must be available on the team's current plan. """ agentUid: ID expiresAt: Time name: String! teamId: ID } type GenerateApiKeyOutput implements Response { apiKey: APIKeyProperties! """ The raw API key - this is only returned once and should be saved by the client """ rawApiKey: String! responseContext: ResponseContext! } union GenerateApiKeyResult = GenerateApiKeyOutput | UserFacingError type GenerateCodeEmbeddingResult { """The hash of the code fragment that was embedded.""" hash: ContentHash! """Whether the embedding was successfully generated.""" success: Boolean! } type GenerateCodeEmbeddingsError { error: String! } input GenerateCodeEmbeddingsInput { embeddingConfig: EmbeddingConfig! fragments: [Fragment!]! repoMetadata: RepoMetadata! rootHash: NodeHash! } type GenerateCodeEmbeddingsOutput implements Response { embeddingConfig: EmbeddingConfig! embeddingResults: [GenerateCodeEmbeddingResult!]! responseContext: ResponseContext! } union GenerateCodeEmbeddingsResult = GenerateCodeEmbeddingsError | GenerateCodeEmbeddingsOutput | UserFacingError type GenerateCommandsFailure { type: GenerateCommandsFailureType! } enum GenerateCommandsFailureType { AI_PROVIDER_ERROR BAD_PROMPT OTHER RATE_LIMITED } """This API is used for command search requests.""" input GenerateCommandsInput { """ In v1, GenerateCommandsInput had the optional field contextJson. That information will now be included in requestContext. """ prompt: String! } type GenerateCommandsOutput implements Response { responseContext: ResponseContext! status: GenerateCommandsStatus! } union GenerateCommandsResult = GenerateCommandsOutput | UserFacingError union GenerateCommandsStatus = GenerateCommandsFailure | GenerateCommandsSuccess type GenerateCommandsSuccess { commands: [GeneratedCommand!]! } type GenerateDialogueFailure { requestLimitInfo: RequestLimitInfo! } input GenerateDialogueInput { prompt: String! """ In v1, GenerateDialogueInput had the optional field contextJson. That information will now be included in requestContext. """ transcript: [TranscriptPart!]! } type GenerateDialogueOutput implements Response { responseContext: ResponseContext! status: GenerateDialogueStatus! } union GenerateDialogueResult = GenerateDialogueOutput | UserFacingError union GenerateDialogueStatus = GenerateDialogueFailure | GenerateDialogueSuccess type GenerateDialogueSuccess { answer: String! requestLimitInfo: RequestLimitInfo! transcriptSummarized: Boolean! truncated: Boolean! } type GenerateMetadataForCommandFailure { type: GenerateMetadataForCommandFailureType! } enum GenerateMetadataForCommandFailureType { AI_PROVIDER_ERROR BAD_COMMAND OTHER RATE_LIMITED } """This API is used for templatizing commands.""" input GenerateMetadataForCommandInput { command: String! } type GenerateMetadataForCommandOutput implements Response { responseContext: ResponseContext! status: GenerateMetadataForCommandStatus! } union GenerateMetadataForCommandResult = GenerateMetadataForCommandOutput | UserFacingError union GenerateMetadataForCommandStatus = GenerateMetadataForCommandFailure | GenerateMetadataForCommandSuccess type GenerateMetadataForCommandSuccess { description: String! parameterizedCommand: String! parameters: [GeneratedMetadataForCommand!]! title: String! } type GenerateUniqueUpgradePromoCodeOutput implements Response { promoCode: String responseContext: ResponseContext! showInterstitial: Boolean! } union GenerateUniqueUpgradePromoCodeResult = GenerateUniqueUpgradePromoCodeOutput | UserFacingError type GeneratedCommand { command: String! description: String! parameters: [GeneratedCommandParameter!]! } type GeneratedCommandParameter { description: String! id: String! } type GeneratedMetadataForCommand { description: String! name: String! value: String! } type GenericStringObject { format: GenericStringObjectFormat! metadata: ObjectMetadata! permissions: ObjectPermissions! serializedModel: String! } enum GenericStringObjectFormat { JsonAIExecutionProfile JsonAIFact JsonCloudEnvironment JsonEnvVarCollection JsonMCPServer JsonPreference JsonScheduledAmbientAgent JsonTemplatableMCPServer JsonWorkflowEnum } input GenericStringObjectInput { clientId: ID! entrypoint: CloudObjectEventEntrypoint! format: GenericStringObjectFormat! initialFolderId: ID serializedModel: String! uniquenessKey: GenericStringObjectUniqueKey } input GenericStringObjectUniqueKey { key: String! uniquePer: UniquePer! } """ Error type for when a user tries to create a generic string object with a unique key but that object already exists. """ type GenericStringObjectUniqueKeyConflict implements UserFacingErrorInterface { message: String! } union GenericStringObjectUpdate = GenericStringObjectUpdateRejected | ObjectUpdateSuccess type GenericStringObjectUpdateRejected { conflictingGenericStringObject: GenericStringObject! revisionTs: Time! } type GetCloudEnvironmentsOutput implements Response { cloudEnvironments: [CloudEnvironment!]! responseContext: ResponseContext! } union GetCloudEnvironmentsResult = GetCloudEnvironmentsOutput | UserFacingError input GetIntegrationsUsingEnvironmentInput { environmentId: String! } type GetIntegrationsUsingEnvironmentOutput implements Response { providerNames: [String!]! responseContext: ResponseContext! } union GetIntegrationsUsingEnvironmentResult = GetIntegrationsUsingEnvironmentOutput | UserFacingError input GetOAuthConnectTxStatusInput { txId: ID! } type GetOAuthConnectTxStatusOutput implements Response { responseContext: ResponseContext! status: OAuthConnectTxStatus! } union GetOAuthConnectTxStatusResult = GetOAuthConnectTxStatusOutput | UserFacingError type GetRelevantFragmentsError { error: String! } input GetRelevantFragmentsInput { embeddingConfig: EmbeddingConfig! query: String! repoMetadata: RepoMetadata! rootHash: NodeHash! } type GetRelevantFragmentsOutput implements Response { candidateHashes: [ContentHash!]! responseContext: ResponseContext! } union GetRelevantFragmentsResult = GetRelevantFragmentsError | GetRelevantFragmentsOutput | UserFacingError type GitHubRepo { owner: String! repo: String! } enum GithubAccountType { ORGANIZATION UNKNOWN USER } """User needs to authenticate with GitHub""" type GithubAuthRequiredOutput implements Response { appInstallLink: String! authUrl: String! responseContext: ResponseContext! txId: ID! } """User is connected to GitHub and we have their info""" type GithubConnectedOutput implements Response { appInstallLink: String! installedRepos: [RepoResult!]! responseContext: ResponseContext! username: String } type GithubInstallation { accountLogin: String! accountType: GithubAccountType associatedTeamUids: [String!]! id: ID! repositorySelection: String } """ GithubReposLanguageStat represents detected language usage for a set of repos. """ type GithubReposLanguageStat { bytes: Int! language: String! percentage: Float! } """ Error type for when a user provides GitHub repositories that do not exist or are not accessible. This is intended to be reusable across APIs that accept GitHub repo inputs. """ type GithubRepositoryNotFoundError implements UserFacingErrorInterface { message: String! repositories: [GitHubRepo!]! } union GuestSubject = PendingUserGuest | TeamGuest | UserGuest input HarnessAuthSecretsInput { claudeAuthSecretName: String codexAuthSecretName: String } type HarnessAuthSecretsOutput implements Response { managedSecrets: [ManagedSecret!]! responseContext: ResponseContext! } union HarnessAuthSecretsResult = HarnessAuthSecretsOutput | UserFacingError type HarnessConfig { enabled: Boolean! } input HarnessConfigInput { enabled: Boolean } """A harness available to the requesting user.""" type HarnessInfo { """ Models the user can pick for this harness. Empty for harnesses without a configured catalog. """ availableModels: [HarnessModel!]! displayName: String! enabled: Boolean! harness: AgentHarness! } input HarnessInput { type: String! } """A single model available for a third-party harness.""" type HarnessModel { displayName: String! id: ID! reasoningLevel: String } """ Per-harness enablement settings for a team. Defaults to enabled for all harnesses. Only configurable on enterprise plans. """ type HarnessSettings { harnessConfigs: [HarnessSettingsEntry!]! optOutOfNewHarnesses: Boolean! } type HarnessSettingsEntry { displayName: String! harness: AgentHarness! settings: HarnessConfig! } input HarnessSettingsEntryInput { harness: AgentHarness! settings: HarnessConfigInput! } input HarnessSettingsInput { harnessConfigs: [HarnessSettingsEntryInput!] optOutOfNewHarnesses: Boolean } enum HostEnablementSetting { ENFORCE RESPECT_USER_SETTING } """ImageTag represents a Docker image tag with repository information.""" type ImageTag { """Full image name with tag (e.g., "warpdotdev/dev-ubuntu:latest")""" image: String! """Languages label from the image (e.g., ["go", "golang"])""" languages: [String!]! """Repository name (e.g., "dev-ubuntu")""" repository: String! """Tag name (e.g., "latest", "24.04")""" tag: String! } type InstanceShape { memoryGb: Int! vcpus: Int! } input InstanceShapeInput { memoryGb: Int! vcpus: Int! } """Error type for when the client cannot access task attachments.""" type InvalidAttachmentError implements UserFacingErrorInterface { message: String! } """Generic error type for invalid input validation failures.""" type InvalidInputError implements UserFacingErrorInterface { message: String! } """ Error type for when the client provides an invalid managed secret value. """ type InvalidSecretError implements UserFacingErrorInterface { message: String! } """Returned when the provided user code is no longer valid.""" type InvalidUserCodeError implements UserFacingErrorInterface { message: String! } type InviteLinkDomainRestriction { domain: String! uid: ID! } """Input for the issueTaskIdentityToken mutation.""" input IssueTaskIdentityTokenInput { """The intended audience for the token (e.g. a cloud provider URL).""" audience: String! """ The requested token duration in seconds. The server may cap this to a maximum value. """ requestedDurationSeconds: Int! """ Controls how the OIDC subject claim is formatted. Each element names a claim to include. """ subjectTemplate: [String!] } type IssueTaskIdentityTokenOutput implements Response { """When the token expires.""" expiresAt: Time! """The OIDC issuer that signed the token.""" issuer: String! responseContext: ResponseContext! """The signed OIDC JWT.""" token: String! } union IssueTaskIdentityTokenResult = IssueTaskIdentityTokenOutput | UserFacingError input JoinTeamWithTeamDiscoveryInput { entrypoint: TeamDiscoveryEntrypoint! teamUid: ID! } type JoinTeamWithTeamDiscoveryOutput implements Response { responseContext: ResponseContext! success: Boolean! } union JoinTeamWithTeamDiscoveryResult = JoinTeamWithTeamDiscoveryOutput | UserFacingError input LeaveObjectInput { objectUid: ID! } type LeaveObjectOutput { objectUid: ID! responseContext: ResponseContext! } union LeaveObjectResult = LeaveObjectOutput | UserFacingError type LinkSharing { accessLevel: AccessLevel! source: Container } type LinkSharingSettings { anyoneWithLinkSharingEnabled: Boolean! directLinkSharingEnabled: Boolean! } input LinkSharingSettingsInput { anyoneWithLinkSharingEnabled: Boolean directLinkSharingEnabled: Boolean } input ListAIConversationsInput { """ If specified, fetch only these conversation IDs. If empty or null, fetches all conversations for the user. """ conversationIds: [ID!] } type ListAIConversationsOutput implements Response { conversations: [AIConversation!]! responseContext: ResponseContext! } union ListAIConversationsResult = ListAIConversationsOutput | UserFacingError input ListHarnessAuthSecretsInput { """ Harness whose auth-credential secrets should be returned. Harnesses that don't use auth secrets (e.g. OZ) always return an empty result. """ harness: AgentHarness! } type ListWarpDevImagesOutput implements Response { """List of available Warp dev base images from Docker Hub""" images: [ImageTag!]! responseContext: ResponseContext! } union ListWarpDevImagesResult = ListWarpDevImagesOutput | UserFacingError type ListedHarnessAuthSecretsConfig { claudeAuthSecretName: String codexAuthSecretName: String } type ListedHarnessConfig { type: String! } type ListedSimpleIntegrationConfig { basePrompt: String! computerUseEnabled: Boolean! environmentUid: String! harness: ListedHarnessConfig harnessAuthSecrets: ListedHarnessAuthSecretsConfig mcpServersJson: String! modelId: String! secrets: [SecretRefOutput!] workerHost: String } type LlmContextWindow { """ Default context window size used when the client does not send an explicit base_model_context_window_limit. For non-configurable models this equals max. """ default: Uint! """ When true, the client can pick a context window size in the range [min, max]. """ isConfigurable: Boolean! """ Maximum context window size. The upper bound for any user override and the effective ceiling the server enforces on the request. """ max: Uint! """ Minimum context window size the user may select. For non-configurable models this equals max. """ min: Uint! } type LlmHostSettings { enabled: Boolean! enablementSetting: HostEnablementSetting """ Full resource name of the GCP workload identity provider that Gemini Enterprise clients exchange Warp OIDC JWTs against (used as both the JWT audience and the STS exchange audience). """ gcpAudience: String """ Email of the GCP service account that Gemini Enterprise clients impersonate after the STS exchange. Empty means the federated token is used directly. """ gcpSaEmail: String """ IAM role ARN that Oz Cloud Agents assume via the OIDC trust flow to obtain credentials for AWS Bedrock requests. """ oidcAssumeRoleArn: String optOutOfNewModels: Boolean! region: String } type LlmHostSettingsEntry { host: LlmModelHost! settings: LlmHostSettings! } """Equivalent to UpdateOrganizationSettings in v1.""" input LlmHostSettingsInput { enabled: Boolean enablementSetting: HostEnablementSetting oidcAssumeRoleArn: String optOutOfNewModels: Boolean region: String } input LlmHostSettingsInputEntry { host: LlmModelHost! settings: LlmHostSettingsInput! } type LlmInfo { baseModelName: String! """The model's context window configuration. Always non-null.""" contextWindow: LlmContextWindow! description: String disableReason: DisableReason displayName: String! hostConfigs: [RoutingHostConfig!]! id: String! onboardingInfo: LlmOnboardingInfo pricing: LlmPricing! provider: LlmProvider! reasoningLevel: String spec: LlmSpec usageMetadata: LlmUsageMetadata! visionSupported: Boolean! } """ LLM model hosting provider type. Add self-hosted and other cloud providers here as needed. """ enum LlmModelHost { AWS_BEDROCK CUSTOM_ENDPOINT DIRECT_API GEMINI_ENTERPRISE } type LlmModelHostSettings { defaultHostModelRef: String enabled: Boolean! hostModelRef: String } type LlmModelHostSettingsEntry { host: LlmModelHost! settings: LlmModelHostSettings! } input LlmModelHostSettingsInput { enabled: Boolean hostModelRef: String } input LlmModelHostSettingsInputEntry { host: LlmModelHost! settings: LlmModelHostSettingsInput! } type LlmModelSettings { hostSettings: [LlmModelHostSettingsEntry!]! } type LlmModelSettingsEntry { modelId: String! settings: LlmModelSettings! } input LlmModelSettingsInput { hostSettings: [LlmModelHostSettingsInputEntry!] } input LlmModelSettingsInputEntry { modelId: String! settings: LlmModelSettingsInput! } type LlmOnboardingInfo { description: String! title: String! } type LlmPricing { discountPercentage: Float } enum LlmProvider { ANTHROPIC GOOGLE OPENAI UNKNOWN XAI } type LlmSettings { enabled: Boolean! hostConfigs: [LlmHostSettingsEntry!]! modelConfigs: [LlmModelSettingsEntry!]! } input LlmSettingsInput { apiKey: String baseUrl: String deploymentName: String enabled: Boolean hostOverrides: [LlmHostSettingsInputEntry!] modelOverrides: [LlmModelSettingsInputEntry!] } type LlmSpec { cost: Float! quality: Float! speed: Float! } type LlmUsageMetadata { creditMultiplier: Float requestMultiplier: Int! @deprecated(reason: "Use creditMultiplier instead") } """A template for the MCP Gallery.""" type MCPGalleryTemplate { description: String! galleryItemId: String! instructionsInMarkdown: String jsonTemplate: MCPJsonTemplate! template: String! title: String! version: Int! } """A JSON template with variables for an MCP server configuration.""" type MCPJsonTemplate { json: String! variables: [MCPTemplateVariable!]! } """A variable in an MCP JSON template.""" type MCPTemplateVariable { allowedValues: [String!] key: String! } type ManagedSecret { createdAt: Time! """ An optional description of the secret (for example, instructions on how to rotate it). """ description: String """The name of this secret. Secret names are unique for a given owner.""" name: String! """The user or team who owns this secret.""" owner: Space! """The kind of secret value.""" type: ManagedSecretType! updatedAt: Time! } """A managed secret value representing an Anthropic API key.""" type ManagedSecretAnthropicApiKeyValue { apiKey: String! } """ A managed secret value representing Anthropic Bedrock access key credentials. """ type ManagedSecretAnthropicBedrockAccessKeyValue { awsAccessKeyId: String! awsRegion: String! awsSecretAccessKey: String! """ Optional AWS session token. Only required when using temporary credentials (e.g. STS-issued credentials). Persistent IAM access keys do not need one. """ awsSessionToken: String } """A managed secret value representing an Anthropic Bedrock API key.""" type ManagedSecretAnthropicBedrockApiKeyValue { awsBearerTokenBedrock: String! awsRegion: String! } """ManagedSecretConfig contains configuration for managed secrets.""" type ManagedSecretConfig { """ Public key for uploading managed secrets. This is the base64 representation of a keyset serialized with tink's binary format. """ publicKey: String } """A managed secret value representing an OpenAI API key.""" type ManagedSecretOpenAiApiKeyValue { apiKey: String! """ Optional base URL for the OpenAI API. When set, the harness uses this instead of the provider default (e.g. for regional endpoints). """ baseUrl: String } """A raw, unencrypted managed secret value.""" type ManagedSecretRawValue { value: String! } enum ManagedMcpTransportKind { URL COMMAND } """Type of Warp-managed secret values.""" enum ManagedSecretType { ANTHROPIC_API_KEY ANTHROPIC_BEDROCK_ACCESS_KEY ANTHROPIC_BEDROCK_API_KEY DOTENVX OPENAI_API_KEY RAW_VALUE } union ManagedSecretValue = ManagedSecretAnthropicApiKeyValue | ManagedSecretAnthropicBedrockAccessKeyValue | ManagedSecretAnthropicBedrockApiKeyValue | ManagedSecretOpenAiApiKeyValue | ManagedSecretRawValue input ManagedSecretsInput { """Pagination cursor, currently unused.""" cursor: String } type ManagedSecretsOutput implements Response { managedSecrets: [ManagedSecret!]! responseContext: ResponseContext! } union ManagedSecretsResult = ManagedSecretsOutput | UserFacingError type MemberSpendLimit { maxMonthlySpendCents: Int! principalType: PrincipalType! principalUid: String! } enum MembershipRole { ADMIN OWNER USER } input MerkleTreeNode { children: [NodeHash!]! hash: NodeHash! } """ Error type for when a user tries to mint a custom token for a non-anonymous user. """ type MintCustomTokenForNonAnonymousUserError implements UserFacingErrorInterface { message: String! } type MintCustomTokenOutput implements Response { customToken: String! responseContext: ResponseContext! } union MintCustomTokenResult = MintCustomTokenOutput | UserFacingError """ Token usage by model within a conversation. Deprecated: Use TokenUsage instead. """ type ModelTokenUsage { modelId: String! totalTokens: Int! } input MoveObjectInput { newFolderUid: ID newOwner: Owner! objectType: ObjectType! uid: ID! } type MoveObjectOutput implements Response { metadata: ObjectMetadata! responseContext: ResponseContext! success: Boolean! } union MoveObjectResult = MoveObjectOutput | UserFacingError type MultiAdminPolicy { enabled: Boolean! } scalar NodeHash type Notebook { aiDocumentId: String data: String! metadata: ObjectMetadata! permissions: ObjectPermissions! title: String! } union NotebookUpdate = NotebookUpdateRejected | ObjectUpdateSuccess type NotebookUpdateRejected { conflictingNotebook: Notebook! revisionTs: Time! } """Poll the status of an OAuth connect transaction.""" enum OAuthConnectTxStatus { COMPLETED EXPIRED FAILED IN_PROGRESS PENDING } input OSContext { category: String linuxKernelVersion: String name: String version: String } """ The uid of the object, the history of actions on it, and the timestamp of the latest action so the client can check if the response is more or less recent than the action history it currently stores for this object. """ type ObjectActionHistory { actions: [ActionRecord!] latestProcessedAtTimestamp: Time latestTimestamp: Time objectType: ObjectType! uid: ID! } type ObjectActionOccurred { history: ObjectActionHistory! } type ObjectContentUpdated { lastEditor: PublicUserProfile object: CloudObject! } type ObjectDeleted { objectUid: ID! } type ObjectGuest { accessLevel: AccessLevel! source: Container subject: GuestSubject! } type ObjectMetadata { creatorUid: ID currentEditorUid: ID isWelcomeObject: Boolean! lastEditorUid: ID metadataLastUpdatedTs: Time! """The object's immediate parent.""" parent: Container! revisionTs: Time! trashedTs: Time uid: ID! } type ObjectMetadataUpdated { metadata: ObjectMetadata! } type ObjectPermissions { """ Access settings for link-based sharing. If not set, link sharing is disabled, and recipients must be added directly. """ anyoneLinkSharing: LinkSharing """Guests that this object has been directly shared with""" guests: [ObjectGuest!]! lastUpdatedTs: Time! space: Space! } type ObjectPermissionsUpdated { objectUid: ID! permissions: ObjectPermissions! userProfiles: [PublicUserProfile!] } enum ObjectType { AIConversation Folder GenericStringObject Notebook Workflow } type ObjectUpdateSuccess { lastEditorUid: ID! revisionTs: Time! } input OnboardingSurveyResponse { answer: String! questionIdentifier: String! } """Onboarding survey status enum matching the database enum values""" enum OnboardingSurveyStatus { COMPLETED SHOWN SKIPPED } type OveragesPricing { pricePerRequestUsdCents: Int! } input Owner { type: OwnerType! """ This field is optional because we only need it when OwnerType is Team. For Users, we infer the desired UID based on the logged-in user. """ uid: ID } enum OwnerType { Team User } """ Error type for when a user tries to purchase add-on credits but payment method is declined. """ type PaymentMethodDeclinedError implements UserFacingErrorInterface { message: String! } type PendingUserGuest { email: String } """ Error type for when a user tries to create a personal object but has hit their billing limit """ type PersonalObjectsLimitExceeded implements UserFacingErrorInterface { limit: Int! message: String! objectType: ObjectType! } type PlanArtifact { documentUid: ID! notebookUid: ID title: String } type PlanPricing { codebaseContextFileLimit: Int! codebaseLimit: Int! maxTeamSize: Int monthlyPlanPricePerMonthUsdCents: Int! plan: StripeSubscriptionPlan! requestLimit: Int yearlyPlanPricePerMonthUsdCents: Int! } """ Machine-readable error code from the platform error catalog. Used in task status messages to identify the class of error. See platformerrors package for the canonical definitions. """ enum PlatformErrorCode { """Request lacks valid authentication credentials (e.g. invalid API key).""" AUTHENTICATION_REQUIRED """Spending budget limit has been reached.""" BUDGET_EXCEEDED """Task prompt or environment violated the platform's content policy.""" CONTENT_POLICY_VIOLATION """ Client-side environment setup failed (clone, setup command, MCP, etc.). """ ENVIRONMENT_SETUP_FAILED """ User hasn't authorized a required external service (e.g. GitHub, Linear). """ EXTERNAL_AUTHENTICATION_REQUIRED """Required feature is not enabled for the user's plan.""" FEATURE_NOT_AVAILABLE """Team has no remaining add-on credits.""" INSUFFICIENT_CREDITS """Integration is disabled and must be enabled.""" INTEGRATION_DISABLED """Integration setup is incomplete.""" INTEGRATION_NOT_CONFIGURED """Catch-all for unexpected server-side errors. Retryable.""" INTERNAL_ERROR """Request is malformed or contains invalid parameters.""" INVALID_REQUEST """Principal lacks permission for the requested operation.""" NOT_AUTHORIZED """Referenced resource does not exist.""" RESOURCE_NOT_FOUND """ Transient infrastructure failure (capacity, sandbox creation, etc.). Retryable. """ RESOURCE_UNAVAILABLE } enum PoolingType { USER } input PopulateMerkleTreeCacheInput { embeddingConfig: EmbeddingConfig! repoMetadata: RepoMetadata rootHash: NodeHash! } type PopulateMerkleTreeCacheOutput implements Response { responseContext: ResponseContext! success: Boolean! } union PopulateMerkleTreeCacheResult = PopulateMerkleTreeCacheOutput | UserFacingError type PricingInfo { addonCreditsOptions: [AddonCreditsOption!]! overages: OveragesPricing! plans: [PlanPricing!]! } type PricingInfoOutput implements Response { pricingInfo: PricingInfo! responseContext: ResponseContext! } union PricingInfoResult = PricingInfoOutput | UserFacingError """Type of principal making the authenticated request.""" enum PrincipalType { SERVICE_ACCOUNT USER } input ProvideNegativeFeedbackResponseForAiConversationInput { conversationId: ID! requestIds: [ID!]! } type ProvidersConfig { aws: AwsProviderConfig gcp: GcpProviderConfig } """ PublicUserProfile holds public information about a user that can be shown to other users. """ type PublicUserProfile { displayName: String email: String photoUrl: String uid: String! } type PullRequestArtifact { branch: String! url: String! } type PurchaseAddOnCreditsPolicy { enabled: Boolean! } input PurchaseAddonCreditsInput { credits: Int! teamUid: ID! } type PurchaseAddonCreditsOutput implements Response { responseContext: ResponseContext! success: Boolean! } union PurchaseAddonCreditsResult = PurchaseAddonCreditsOutput | UserFacingError """ The request contains a UTC timestamp of when the action occurred. The JSON data is an optional field representing any other data we might want to know about the action (e.g., what was the exit code of a workflow execution?) """ input RecordObjectActionInput { action: ActionType! jsonData: String timestamp: Time! uid: ID! } """ A successfully recorded action returns the full action history for that object. """ type RecordObjectActionOutput implements Response { history: ObjectActionHistory! responseContext: ResponseContext! } union RecordObjectActionResult = RecordObjectActionOutput | UserFacingError """ referrals.graphqls defines types and queries related to our referrals process. Note that we use the term "referrals" here and in our code, but the relevant db table is called "invites". """ type ReferralInfo { isReferred: Boolean! numberClaimed: Int! referralCode: String! } input RemoveObjectGuestInput { email: String objectUid: ID! teamUid: ID } type RemoveObjectGuestOutput implements Response { objectPermissions: ObjectPermissions! responseContext: ResponseContext! } union RemoveObjectGuestResult = RemoveObjectGuestOutput | UserFacingError input RemoveObjectLinkPermissionsInput { uid: ID! } type RemoveObjectLinkPermissionsOutput implements Response { responseContext: ResponseContext! success: Boolean! } union RemoveObjectLinkPermissionsResult = RemoveObjectLinkPermissionsOutput | UserFacingError input RemoveUserFromTeamInput { entrypoint: CloudObjectEventEntrypoint! teamUid: ID! userUid: ID! } type RemoveUserFromTeamOutput implements Response { responseContext: ResponseContext! success: Boolean! } union RemoveUserFromTeamResult = RemoveUserFromTeamOutput | UserFacingError input RenameTeamInput { newName: String! teamUid: ID! } type RenameTeamOutput implements Response { responseContext: ResponseContext! success: Boolean! } union RenameTeamResult = RenameTeamOutput | UserFacingError input RepoInput { owner: String! repo: String! } input RepoMetadata { """Local path to the repository.""" path: String } type RepoResult { isPublic: Boolean! owner: String! repo: String! status: UserRepoAuthStatus! } input RequestContext { clientContext: ClientContext! osContext: OSContext! } type RequestLimitInfo { acceptedAutosuggestionsLimit: Int! @deprecated(reason: "No longer tracked. Always returns 0.") acceptedAutosuggestionsSinceLastRefresh: Int! @deprecated(reason: "No longer tracked. Always returns 0.") embeddingGenerationBatchSize: Int! isUnlimited: Boolean! isUnlimitedAutosuggestions: Boolean! isUnlimitedCodebaseIndices: Boolean! isUnlimitedSuggestedCodeDiffs: Boolean! isUnlimitedVoice: Boolean! maxCodebaseIndices: Int! maxFilesPerRepo: Int! nextRefreshTime: Time! requestLimit: Int! requestLimitPooling: PoolingType! @deprecated(reason: "Only user pooling is available") requestLimitRefreshDuration: RequestLimitRefreshDuration! requestsUsedSinceLastRefresh: Int! suggestedCodeDiffsLimit: Int! suggestedCodeDiffsSurfacedSinceLastRefresh: Int! voiceRequestLimit: Int! voiceRequestsUsedSinceLastRefresh: Int! voiceTokenLimit: Int! voiceTokensUsedSinceLastRefresh: Int! @deprecated(reason: "No longer tracked. Always returns 0.") } enum RequestLimitRefreshDuration { EVERY_TWO_WEEKS MONTHLY WEEKLY } type RequestsRefundedOutput implements Response { requestsRefunded: Int! responseContext: ResponseContext! } union RequestsRefundedResult = RequestsRefundedOutput | UserFacingError type RerankFragment { content: String! contentHash: ContentHash! location: FragmentLocation! } input RerankFragmentInput { content: String! contentHash: ContentHash! location: FragmentLocationInput! } type RerankFragmentsError { error: String! } input RerankFragmentsInput { fragments: [RerankFragmentInput!]! query: String! } type RerankFragmentsOutput implements Response { rankedFragments: [RerankFragment!]! responseContext: ResponseContext! } union RerankFragmentsResult = RerankFragmentsError | RerankFragmentsOutput | UserFacingError input ResetInviteLinksInput { teamUid: ID! } type ResetInviteLinksOutput implements Response { responseContext: ResponseContext! success: Boolean! } union ResetInviteLinksResult = ResetInviteLinksOutput | UserFacingError interface Response { responseContext: ResponseContext! } type ResponseContext { serverVersion: String } """Role question response input""" input RoleQuestionResponseInput { answer: RoleSurveyResponse! } """Role options for onboarding survey responses""" enum RoleSurveyResponse { BACKEND_ENGINEER BUSINESS_ANALYST DATA DEVOPS_SRE ENGINEERING_MANAGER FRONTEND_ENGINEER FULLSTACK_ENGINEER MARKETER MOBILE_ENGINEER OTHER PRODUCT_DESIGNER PRODUCT_MANAGER SALES_BUSINESS_DEV STUDENT } type RootMutation { addInviteLinkDomainRestriction(input: AddInviteLinkDomainRestrictionInput!, requestContext: RequestContext!): AddInviteLinkDomainRestrictionResult! addObjectGuests(input: AddObjectGuestsInput!, requestContext: RequestContext!): AddObjectGuestsResult! bulkCreateObjects(input: BulkCreateObjectsInput!, requestContext: RequestContext!): BulkCreateObjectsResult! confirmFileArtifactUpload(input: ConfirmFileArtifactUploadInput!, requestContext: RequestContext!): ConfirmFileArtifactUploadResult! """ Creates a new agent task with the given parameters. Used by local CLI runs to create tasks before execution. """ createAgentTask(input: CreateAgentTaskInput!, requestContext: RequestContext!): CreateAgentTaskResult! createAnonymousUser(input: CreateAnonymousUserInput!, requestContext: RequestContext!): CreateAnonymousUserResult! createFileArtifactUploadTarget(input: CreateFileArtifactUploadTargetInput!, requestContext: RequestContext!): CreateFileArtifactUploadTargetResult! createFolder(input: CreateFolderInput!, requestContext: RequestContext!): CreateFolderResult! createGenericStringObject(input: CreateGenericStringObjectInput!, requestContext: RequestContext!): CreateGenericStringObjectResult! createManagedMcpClientConfig(input: CreateManagedMcpClientConfigInput!, requestContext: RequestContext!): CreateManagedMcpClientConfigResult! createManagedSecret(input: CreateManagedSecretInput!, requestContext: RequestContext!): CreateManagedSecretResult! createNotebook(input: CreateNotebookInput!, requestContext: RequestContext!): CreateNotebookResult! createSimpleIntegration(input: CreateSimpleIntegrationInput!, requestContext: RequestContext!): CreateSimpleIntegrationResult! createTeam(input: CreateTeamInput!, requestContext: RequestContext!): CreateTeamResult! createWorkflow(input: CreateWorkflowInput!, requestContext: RequestContext!): CreateWorkflowResult! deleteConversation(input: DeleteConversationInput!, requestContext: RequestContext!): DeleteConversationResult! deleteInviteLinkDomainRestriction(input: DeleteInviteLinkDomainRestrictionInput!, requestContext: RequestContext!): DeleteInviteLinkDomainRestrictionResult! deleteManagedSecret(input: DeleteManagedSecretInput!, requestContext: RequestContext!): DeleteManagedSecretResult! deleteObject(input: DeleteObjectInput!, requestContext: RequestContext!): DeleteObjectResult! deleteTeamInvite(input: DeleteTeamInviteInput!, requestContext: RequestContext!): DeleteTeamInviteResult! emptyTrash(input: EmptyTrashInput!, requestContext: RequestContext!): EmptyTrashResult! expireApiKey(input: ExpireApiKeyInput!, requestContext: RequestContext!): ExpireApiKeyResult! generateApiKey(input: GenerateApiKeyInput!, requestContext: RequestContext!): GenerateApiKeyResult! """Generates source code embeddings for the given set of code fragments.""" generateCodeEmbeddings(input: GenerateCodeEmbeddingsInput!, requestContext: RequestContext!): GenerateCodeEmbeddingsResult! generateCommands(input: GenerateCommandsInput!, requestContext: RequestContext!): GenerateCommandsResult! generateDialogue(input: GenerateDialogueInput!, requestContext: RequestContext!): GenerateDialogueResult! generateMetadataForCommand(input: GenerateMetadataForCommandInput!, requestContext: RequestContext!): GenerateMetadataForCommandResult! generateUniqueUpgradePromoCode(requestContext: RequestContext!): GenerateUniqueUpgradePromoCodeResult! giveUpNotebookEditAccess(input: UpdateNotebookEditAccessInput!, requestContext: RequestContext!): UpdateNotebookEditAccessResult! grabNotebookEditAccess(input: UpdateNotebookEditAccessInput!, requestContext: RequestContext!): UpdateNotebookEditAccessResult! issueTaskIdentityToken(input: IssueTaskIdentityTokenInput!, requestContext: RequestContext!): IssueTaskIdentityTokenResult! joinTeamWithTeamDiscovery(input: JoinTeamWithTeamDiscoveryInput!, requestContext: RequestContext!): JoinTeamWithTeamDiscoveryResult! """The API for leaving an object as a direct guest or link-shared.""" leaveObject(input: LeaveObjectInput!, requestContext: RequestContext!): LeaveObjectResult! mintCustomToken(requestContext: RequestContext!): MintCustomTokenResult! moveObject(input: MoveObjectInput!, requestContext: RequestContext!): MoveObjectResult! populateMerkleTreeCache(input: PopulateMerkleTreeCacheInput!, requestContext: RequestContext!): PopulateMerkleTreeCacheResult! provideNegativeFeedbackResponseForAiConversation(input: ProvideNegativeFeedbackResponseForAiConversationInput!, requestContext: RequestContext!): RequestsRefundedResult! purchaseAddonCredits(input: PurchaseAddonCreditsInput!, requestContext: RequestContext!): PurchaseAddonCreditsResult! """ The generic API for recording an action (EXECUTED, OPENED, etc.) on some object. """ recordObjectAction(input: RecordObjectActionInput!, requestContext: RequestContext!): RecordObjectActionResult! removeObjectGuest(input: RemoveObjectGuestInput!, requestContext: RequestContext!): RemoveObjectGuestResult! removeObjectLinkPermissions(input: RemoveObjectLinkPermissionsInput!, requestContext: RequestContext!): RemoveObjectLinkPermissionsResult! """ `removeUserFromTeam` is the only mutation that should be used to remove a user from a team in v2. Usage of the `leaveTeam` mutation in v1 will eventually be removed. """ removeUserFromTeam(input: RemoveUserFromTeamInput!, requestContext: RequestContext!): RemoveUserFromTeamResult! renameTeam(input: RenameTeamInput!, requestContext: RequestContext!): RenameTeamResult! resetInviteLinks(input: ResetInviteLinksInput!, requestContext: RequestContext!): ResetInviteLinksResult! sendOnboardingSurveyResponses(input: SendOnboardingSurveyResponsesInput!, requestContext: RequestContext!): SendOnboardingSurveyResponsesResult! sendReferralInviteEmails(input: SendReferralInviteEmailsInput!, requestContext: RequestContext!): SendReferralInviteEmailsResult! sendTeamInviteEmail(input: SendTeamInviteEmailInput!, requestContext: RequestContext!): SendTeamInviteEmailResult! setIsInviteLinkEnabled(input: SetIsInviteLinkEnabledInput!, requestContext: RequestContext!): SetIsInviteLinkEnabledResult! setObjectLinkPermissions(input: SetObjectLinkPermissionsInput!, requestContext: RequestContext!): SetObjectLinkPermissionsResult! setTeamDiscoverability(input: SetTeamDiscoverabilityInput!, requestContext: RequestContext!): SetTeamDiscoverabilityResult! setTeamMemberRole(input: SetTeamMemberRoleInput!, requestContext: RequestContext!): SetTeamMemberRoleResult! setUserIsOnboarded(requestContext: RequestContext!): SetUserIsOnboardedResult! shareBlock(input: ShareBlockInput!, requestContext: RequestContext!): ShareBlockResult! stripeBillingPortal(input: StripeBillingPortalInput!, requestContext: RequestContext!): StripeBillingPortalResult! transferGenericStringObjectOwner(input: TransferGenericStringObjectOwnerInput!, requestContext: RequestContext!): TransferGenericStringObjectOwnerResult! transferNotebookOwner(input: TransferNotebookOwnerInput!, requestContext: RequestContext!): TransferNotebookOwnerResult! transferTeamOwnership(input: TransferTeamOwnershipInput!, requestContext: RequestContext!): TransferTeamOwnershipResult! @deprecated(reason: "Use setTeamMemberRole instead") transferWorkflowOwner(input: TransferWorkflowOwnerInput!, requestContext: RequestContext!): TransferWorkflowOwnerResult! trashObject(input: TrashObjectInput!, requestContext: RequestContext!): TrashObjectResult! unshareBlock(input: UnshareBlockInput!, requestContext: RequestContext!): UnshareBlockResult! untrashObject(input: UntrashObjectInput!, requestContext: RequestContext!): UntrashObjectResult! """This is how the client updates the server with its progress on a task.""" updateAgentTask(input: UpdateAgentTaskInput!, requestContext: RequestContext!): UpdateAgentTaskResult! updateFolder(input: UpdateFolderInput!, requestContext: RequestContext!): UpdateFolderResult! updateGenericStringObject(input: UpdateGenericStringObjectInput!, requestContext: RequestContext!): UpdateGenericStringObjectResult! updateManagedSecret(input: UpdateManagedSecretInput!, requestContext: RequestContext!): UpdateManagedSecretResult! updateMerkleTree(input: UpdateMerkleTreeInput!, requestContext: RequestContext!): UpdateMerkleTreeResult! updateNotebook(input: UpdateNotebookInput!, requestContext: RequestContext!): UpdateNotebookResult! updateObjectGuests(input: UpdateObjectGuestsInput!, requestContext: RequestContext!): UpdateObjectGuestsResult! updateOnboardingSurveyStatus(input: UpdateOnboardingSurveyStatusInput!, requestContext: RequestContext!): UpdateOnboardingSurveyStatusResult! updateUserSettings(input: UpdateUserSettingsInput!, requestContext: RequestContext!): UpdateUserSettingsResult! updateWorkflow(input: UpdateWorkflowInput!, requestContext: RequestContext!): UpdateWorkflowResult! """This is the public API for updating workspace settings.""" updateWorkspaceSettings(input: UpdateWorkspaceSettingsInput!, requestContext: RequestContext!): UpdateWorkspaceSettingsResult! } type RootQuery { apiKeys(requestContext: RequestContext!): APIKeyPropertiesResult! cloudObject(input: CloudObjectInput!, requestContext: RequestContext!): CloudObjectResult! codebaseContextConfig(requestContext: RequestContext!): CodebaseContextConfigResult! """ Returns the model choices available on the free tier without requiring authentication. Used during pre-login onboarding. """ freeAvailableModels(input: FreeAvailableModelsInput!, requestContext: RequestContext!): FreeAvailableModelsResult! """ Get cloud environments accessible to the principal. Defaults to LAST_UPDATED sorting if not specified. """ getCloudEnvironments(requestContext: RequestContext!, sortBy: CloudEnvironmentSortBy): GetCloudEnvironmentsResult! getIntegrationsUsingEnvironment(input: GetIntegrationsUsingEnvironmentInput!, requestContext: RequestContext!): GetIntegrationsUsingEnvironmentResult! getOAuthConnectTxStatus(input: GetOAuthConnectTxStatusInput!, requestContext: RequestContext!): GetOAuthConnectTxStatusResult! getRelevantFragments(input: GetRelevantFragmentsInput!, requestContext: RequestContext!): GetRelevantFragmentsResult! """ Retrieve managed secrets that serve as authentication credentials for the given harness, scoped to the caller's personal drive and team drives. """ harnessAuthSecrets(input: ListHarnessAuthSecretsInput!, requestContext: RequestContext!): HarnessAuthSecretsResult! listAIConversations(input: ListAIConversationsInput!, requestContext: RequestContext!): ListAIConversationsResult! """ List available Warp development base images from Docker Hub. Returns all images with the 'dev-' prefix from the warpdotdev organization. """ listWarpDevImages: ListWarpDevImagesResult! managedSecrets(input: ManagedSecretsInput!, requestContext: RequestContext!): ManagedSecretsResult! pricingInfo(requestContext: RequestContext!): PricingInfoResult! rerankFragments(input: RerankFragmentsInput!, requestContext: RequestContext!): RerankFragmentsResult! """Retrieve execution history for a scheduled agent.""" scheduledAgentHistory(input: ScheduledAgentHistoryInput!, requestContext: RequestContext!): ScheduledAgentHistoryResult! simpleIntegrations(input: SimpleIntegrationsInput!, requestContext: RequestContext!): SimpleIntegrationsResult! suggestCloudEnvironmentImage(input: SuggestCloudEnvironmentImageInput!, requestContext: RequestContext!): SuggestCloudEnvironmentImageResult! """ Syncs the client merkle tree with the server merkle tree, returning the nodes that have changed. """ syncMerkleTree(input: SyncMerkleTreeInput!, requestContext: RequestContext!): SyncMerkleTreeResult! """ Fetch attachments for a task. Requires the caller to have ViewAction permission on the task. Note: This query returns a Task object to allow future extension. In the future, this may be merged with taskSecrets into a single task query. """ task(input: TaskInput!, requestContext: RequestContext!): TaskResult! taskGitCredentials(input: TaskGitCredentialsInput!, requestContext: RequestContext!): TaskGitCredentialsResult! taskSecrets(input: TaskSecretsInput!, requestContext: RequestContext!): TaskSecretsResult! updatedCloudObjects(input: UpdatedCloudObjectsInput!, requestContext: RequestContext!): UpdatedCloudObjectsResult! user(requestContext: RequestContext!): UserResult! userGithubInfo(requestContext: RequestContext!): UserGithubInfoResult! userRepoAuthStatus(input: UserRepoAuthStatusInput!, requestContext: RequestContext!): UserRepoAuthStatusResult! } type RootSubscription { """Equivalent to GetCloudObjectUpdates in v1.""" warpDriveUpdates: WarpDriveUpdate! } type RoutingHostConfig { enabled: Boolean! modelRoutingHost: LlmModelHost! } type SandboxedAgentSettings { executeCommandsDenylist: [String!] } input SandboxedAgentSettingsInput { executeCommandsDenylist: [String!] } """Scheduled agent execution history information.""" type ScheduledAgentHistory { """The last time the scheduled task ran. Null if it has never run.""" lastRan: Time """The next time the scheduled task will run. Null if not scheduled.""" nextRun: Time } input ScheduledAgentHistoryInput { scheduleId: ID! } type ScheduledAgentHistoryOutput implements Response { history: ScheduledAgentHistory! responseContext: ResponseContext! } union ScheduledAgentHistoryResult = ScheduledAgentHistoryOutput | UserFacingError type ScreenshotArtifact { artifactUid: ID! description: String mimeType: String! } """ Error type for when a plan change would put the team over the target tier's seat cap. """ type SeatCapExceededError implements UserFacingErrorInterface { message: String! } type SecretRedactionRegex { name: String pattern: String! } input SecretRedactionRegexInput { name: String pattern: String! } type SecretRedactionSettings { enabled: Boolean! regexList: [String!]! @deprecated(reason: "Use regexes field instead") regexes: [SecretRedactionRegex!]! } input SecretRedactionSettingsInput { enabled: Boolean regexes: [SecretRedactionRegexInput!] } input SecretRefInput { """The managed secret name to include.""" name: String! } type SecretRefOutput { name: String! } input SendOnboardingSurveyResponsesInput { responses: [OnboardingSurveyResponse!]! } type SendOnboardingSurveyResponsesOutput implements Response { responseContext: ResponseContext! success: Boolean! } union SendOnboardingSurveyResponsesResult = SendOnboardingSurveyResponsesOutput | UserFacingError """sendReferralInviteEmails is equivalent to sendInvite in v1.""" input SendReferralInviteEmailsInput { emails: [String!]! } type SendReferralInviteEmailsOutput implements Response { responseContext: ResponseContext! successfulEmails: [String!]! } union SendReferralInviteEmailsResult = SendReferralInviteEmailsOutput | UserFacingError input SendTeamInviteEmailInput { email: String! teamUid: ID! } type SendTeamInviteEmailOutput implements Response { responseContext: ResponseContext! success: Boolean! } union SendTeamInviteEmailResult = SendTeamInviteEmailOutput | UserFacingError enum SerializedBlockFormat { JSON_V1 } type ServiceAgreement { addonCreditAutoReloadStatus: AddonCreditAutoReloadStatus currentPeriodEnd: Time! status: ServiceAgreementStatus! stripeSubscriptionId: String sunsettedToBuildTs: Time type: ServiceAgreementType! } enum ServiceAgreementStatus { ACTIVE CANCELED PAST_DUE UNPAID } enum ServiceAgreementType { BUSINESS ENTERPRISE LEGACY LIGHTSPEED PROSUMER PRO_TRIAL @deprecated(reason: "PRO_TRIAL is no longer active") SELF_SERVE TEAM_TRIAL @deprecated(reason: "TEAM_TRIAL is no longer active") TURBO } type SessionSharingPolicy { enabled: Boolean! isUnlimited: Boolean! limit: Int! maxConcurrentViewers: Int! maxSessionBytesSize: Int! } input SetIsInviteLinkEnabledInput { newValue: Boolean! teamUid: ID! } type SetIsInviteLinkEnabledOutput implements Response { responseContext: ResponseContext! success: Boolean! } union SetIsInviteLinkEnabledResult = SetIsInviteLinkEnabledOutput | UserFacingError input SetObjectLinkPermissionsInput { accessLevel: AccessLevel! uid: ID! } type SetObjectLinkPermissionsOutput implements Response { responseContext: ResponseContext! success: Boolean! } union SetObjectLinkPermissionsResult = SetObjectLinkPermissionsOutput | UserFacingError input SetTeamDiscoverabilityInput { discoverable: Boolean! teamUid: ID! } type SetTeamDiscoverabilityOutput implements Response { responseContext: ResponseContext! success: Boolean! } union SetTeamDiscoverabilityResult = SetTeamDiscoverabilityOutput | UserFacingError input SetTeamMemberRoleInput { role: MembershipRole! teamUid: ID! userUid: ID! } type SetTeamMemberRoleOutput implements Response { responseContext: ResponseContext! success: Boolean! } union SetTeamMemberRoleResult = SetTeamMemberRoleOutput | UserFacingError type SetUserIsOnboardedOutput implements Response { responseContext: ResponseContext! } union SetUserIsOnboardedResult = SetUserIsOnboardedOutput | UserFacingError input ShareBlockInput { block: BlockInput! } type ShareBlockOutput implements Response { responseContext: ResponseContext! urlEnding: String! } union ShareBlockResult = ShareBlockOutput | UserFacingError type SharedNotebooksPolicy { isUnlimited: Boolean! limit: Int! } """ Error type for when a user tries to create a shared object but has hit their billing limit """ type SharedObjectsLimitExceeded implements UserFacingErrorInterface { limit: Int! message: String! objectType: ObjectType! } type SharedWorkflowsPolicy { isUnlimited: Boolean! limit: Int! } type SimpleIntegration { agentUid: ID connectionLink: String! connectionStatus: SimpleIntegrationConnectionStatus! createdAt: Time description: String! integrationConfig: ListedSimpleIntegrationConfig providerSlug: String! updatedAt: Time } input SimpleIntegrationConfig { basePrompt: String computerUseEnabled: Boolean environmentUid: String harness: HarnessInput harnessAuthSecrets: HarnessAuthSecretsInput mcpServersJson: String modelId: String removeMcpServerNames: [String!] secrets: [SecretRefInput!] workerHost: String } enum SimpleIntegrationConnectionStatus { ACTIVE CONNECTION_ERROR INTEGRATION_NOT_CONFIGURED NOT_CONNECTED NOT_ENABLED } input SimpleIntegrationsInput { providers: [String!]! } type SimpleIntegrationsOutput implements Response { integrations: [SimpleIntegration!]! message: String responseContext: ResponseContext! } union SimpleIntegrationsResult = SimpleIntegrationsOutput | UserFacingError """A return type for a SINGLE action and when it occurred.""" type SingleAction { actionType: ActionType! processedAtTimestamp: Time! timestamp: Time! } type SingleSignOnPolicy { toggleable: Boolean! } type Space { type: SpaceType! uid: ID! } enum SpaceType { Team User } """A literal string value.""" type StaticUploadFieldValue { value: String! } input StripeBillingPortalInput { teamUid: ID! } type StripeBillingPortalOutput implements Response { responseContext: ResponseContext! url: String! } union StripeBillingPortalResult = StripeBillingPortalOutput | UserFacingError enum StripeSubscriptionPlan { BUILD BUILD_BUSINESS BUILD_MAX BUSINESS LIGHTSPEED PRO TEAM TURBO } type SuggestCloudEnvironmentImageAuthRequiredOutput implements Response { authUrl: String! responseContext: ResponseContext! txId: ID! } input SuggestCloudEnvironmentImageInput { repos: [RepoInput!]! } type SuggestCloudEnvironmentImageOutput implements Response { detectedLanguages: [GithubReposLanguageStat!]! image: String! needsCustomImage: Boolean! reason: String! responseContext: ResponseContext! } union SuggestCloudEnvironmentImageResult = SuggestCloudEnvironmentImageAuthRequiredOutput | SuggestCloudEnvironmentImageOutput | UserFacingError """Structured survey responses input with type-safe fields per question""" input SurveyResponsesInput { ACQUISITION_CHANNEL: AcquisitionChannelQuestionResponseInput ROLE: RoleQuestionResponseInput USAGE_PLAN: UsagePlanQuestionResponseInput } type SyncMerkleTreeError { error: String! } input SyncMerkleTreeInput { embeddingConfig: EmbeddingConfig! hashedNodes: [NodeHash!]! } type SyncMerkleTreeOutput implements Response { changedNodes: [NodeHash!]! responseContext: ResponseContext! } union SyncMerkleTreeResult = SyncMerkleTreeError | SyncMerkleTreeOutput | UserFacingError """ Error type for when a user violates terms of service, typically flagged by fraud detection. """ type TOSViolationError implements UserFacingErrorInterface { message: String! } """ Task object containing attachments. In the future, this can be extended with more fields (secrets, etc.) and merged with other task queries into a single unified query. """ type Task { """List of attachments (images/files) associated with this task.""" attachments: [TaskAttachment!]! """The ID of the task.""" taskId: ID! } """A task attachment (file or image) with presigned download URL.""" type TaskAttachment { """Presigned URL for downloading the attachment (valid for 15 minutes).""" downloadUrl: String! """ Unique identifier for this file (UUID from GCS). Can be used to distinguish files with duplicate names. """ fileId: ID! """Original filename of the attachment.""" filename: String! """MIME type of the attachment.""" mimeType: String! } """A set of git credentials for a single hosting provider.""" type TaskGitCredential { """ The email address associated with the token, if available. Null for service-account (installation) tokens. """ email: String """The git hosting provider (e.g. "github.com").""" host: String! """The OAuth or installation access token.""" token: String! """ The GitHub username associated with the token, if available. Null for service-account (installation) tokens. """ username: String } """Input for the taskGitCredentials query.""" input TaskGitCredentialsInput { """The ID of the task.""" taskId: ID! """A short-lived token authorizing credential retrieval for the workload.""" workloadToken: String! } type TaskGitCredentialsOutput implements Response { credentials: [TaskGitCredential!]! responseContext: ResponseContext! } union TaskGitCredentialsResult = TaskGitCredentialsOutput | UserFacingError """Input for task-related queries.""" input TaskInput { """The ID of the task.""" taskId: ID! } type TaskOutput implements Response { responseContext: ResponseContext! task: Task! } union TaskResult = TaskOutput | UserFacingError type TaskSecretEntry { name: String! value: ManagedSecretValue! } """Input for the taskSecrets query.""" input TaskSecretsInput { """The ID of the task.""" taskId: ID! """A short-lived token authorizing secret retrieval for the workload.""" workloadToken: String! } type TaskSecretsOutput implements Response { responseContext: ResponseContext! secrets: [TaskSecretEntry!]! } union TaskSecretsResult = TaskSecretsOutput | UserFacingError """ The Team type is a sub-organizational unit within a workspace. Teams are used to group drive objects and users together. """ type Team { """ adminUid is equivalent to creatorFirebaseUid in the v1 Team type. creatorId in v1 Team type is deprecated and should not be used. Use adminUid instead. """ adminUid: String! @deprecated(reason: "Use members.role to determine admin status") """ The email domain associated with the team, if one has been set by Warp staff. Required for features that key off the team's domain (e.g. domain capture, SSO). """ domain: String managedSecrets: ManagedSecretConfig memberSpendLimits: [MemberSpendLimit!] members: [TeamMember!]! name: String! uid: ID! } enum TeamDiscoveryEntrypoint { TeamSettings WebSignup } type TeamGuest { uid: ID! } """ Helper user structure that limits the visibility of user fields so that certain endpoints cannot query for certain fields, etc. """ type TeamMember { displayName: String email: String! photoUrl: String role: MembershipRole! uid: ID! } type TeamMembershipsChanged { teamMembershipsLastUpdatedTs: Time! } type TeamSizePolicy { isUnlimited: Boolean! limit: Int! } type TelemetryDataCollectionPolicy { default: Boolean! toggleable: Boolean! } type TelemetrySettings { forceEnabled: Boolean! } input TelemetrySettingsInput { enabled: AdminEnablementSetting } type Tier { agentHarnessesPolicy: AgentHarnessesPolicy agentIdentitiesPolicy: AgentIdentitiesPolicy aiAutonomyPolicy: AiAutonomyPolicy aiPermissionsPolicy: AiPermissionsPolicy ambientAgentsPolicy: AmbientAgentsPolicy anyoneWithLinkSharingPolicy: AnyoneWithLinkSharingPolicy byoApiKeyPolicy: ByoApiKeyPolicy cloudConversationStoragePolicy: CloudConversationStoragePolicy codebaseContextPolicy: CodebaseContextPolicy customLlmPolicy: CustomLlmPolicy description: String! directApiUsOnlyInferencePolicy: DirectApiUsOnlyInferencePolicy directLinkSharingPolicy: DirectLinkSharingPolicy domainCapturePolicy: DomainCapturePolicy enterpriseAnalyticsPolicy: EnterpriseAnalyticsPolicy enterpriseCreditsAutoReloadPolicy: EnterpriseCreditsAutoReloadPolicy enterprisePayAsYouGoPolicy: EnterprisePayAsYouGoPolicy enterpriseSecretRedactionPolicy: EnterpriseSecretRedactionPolicy enterpriseSpendingLimitsPolicy: EnterpriseSpendingLimitsPolicy enterpriseUsageThresholdsPolicy: EnterpriseUsageThresholdsPolicy multiAdminPolicy: MultiAdminPolicy name: String! pricing: TierPricing purchaseAddOnCreditsPolicy: PurchaseAddOnCreditsPolicy sessionSharingPolicy: SessionSharingPolicy sharedNotebooksPolicy: SharedNotebooksPolicy sharedWorkflowsPolicy: SharedWorkflowsPolicy singleSignOnPolicy: SingleSignOnPolicy teamSizePolicy: TeamSizePolicy telemetryDataCollectionPolicy: TelemetryDataCollectionPolicy ugcDataCollectionPolicy: UgcDataCollectionPolicy usageBasedPricingPolicy: UsageBasedPricingPolicy usageVisibilityPolicy: UsageVisibilityPolicy warpAiPolicy: WarpAiPolicy warpBasicPolicy: WarpBasicPolicy } type TierPricing { autoReloadCostCents: Int autoReloadCreditDenomination: Int enablePayAsYouGo: Boolean monthlyPlanPricePerMonthCents: Int paygCostPerThousandCreditsCents: Int yearlyPlanPricePerMonthCents: Int } """ scalar Time is a built-in piece of gqlgen. A GQL field with this type will get converted to time.Time on the Go side and an RFC3339 formatted string on the client side. """ scalar Time """Token usage by model within a conversation.""" type TokenUsage { modelId: String! """ Breakdown of total tokens by usage category (e.g. primary_agent, cli, compaction). """ tokenUsageByCategory: [CategoryTokenBreakdown!]! totalTokens: Int! } """Basic count of tool invocations.""" type ToolCallStats { count: Int! } """Tool usage statistics for a conversation.""" type ToolUsageMetadata { applyFileDiffStats: ApplyFileDiffStats! callMcpToolStats: ToolCallStats! fileGlobStats: ToolCallStats! grepStats: ToolCallStats! readFilesStats: ToolCallStats! readMcpResourceStats: ToolCallStats! readShellCommandOutputStats: ToolCallStats! runCommandStats: ToolCallStats! runCommandsExecuted: Int! searchCodebaseStats: ToolCallStats! suggestCreatePlanStats: ToolCallStats! suggestPlanStats: ToolCallStats! useComputerStats: ToolCallStats! writeToLongRunningShellCommandStats: ToolCallStats! } """This API is used for AI dialogue requests.""" input TranscriptPart { assistant: String! user: String! } input TransferGenericStringObjectOwnerInput { owner: Owner! uid: ID! } type TransferGenericStringObjectOwnerOutput implements Response { metadata: ObjectMetadata! responseContext: ResponseContext! success: Boolean! } union TransferGenericStringObjectOwnerResult = TransferGenericStringObjectOwnerOutput | UserFacingError input TransferNotebookOwnerInput { owner: Owner! uid: ID! } type TransferNotebookOwnerOutput implements Response { metadata: ObjectMetadata! responseContext: ResponseContext! success: Boolean! } union TransferNotebookOwnerResult = TransferNotebookOwnerOutput | UserFacingError input TransferTeamOwnershipInput { newOwnerEmail: String! } type TransferTeamOwnershipOutput implements Response { responseContext: ResponseContext! success: Boolean! } union TransferTeamOwnershipResult = TransferTeamOwnershipOutput | UserFacingError input TransferWorkflowOwnerInput { owner: Owner! uid: ID! } type TransferWorkflowOwnerOutput implements Response { metadata: ObjectMetadata! responseContext: ResponseContext! success: Boolean! } union TransferWorkflowOwnerResult = TransferWorkflowOwnerOutput | UserFacingError input TrashObjectInput { uid: ID! } type TrashObjectOutput implements Response { metadata: ObjectMetadata! responseContext: ResponseContext! success: Boolean! } union TrashObjectResult = TrashObjectOutput | UserFacingError enum UgcCollectionEnablementSetting { DISABLE ENABLE RESPECT_USER_SETTING } type UgcCollectionSettings { setting: UgcCollectionEnablementSetting! } input UgcCollectionSettingsInput { setting: UgcCollectionEnablementSetting } type UgcDataCollectionPolicy { default: Boolean! @deprecated(reason: "Use defaultSetting instead") defaultSetting: UgcCollectionEnablementSetting! toggleable: Boolean! } """ scalar Uint is an unsigned integer. Maps to uint/uint32/uint64 on the Go side and a non-negative number on the client side. """ scalar Uint enum UniquePer { User } input UnshareBlockInput { blockUid: String! } type UnshareBlockOutput implements Response { responseContext: ResponseContext! success: Boolean! } union UnshareBlockResult = UnshareBlockOutput | UserFacingError input UntrashObjectInput { uid: ID! } type UntrashObjectOutput implements Response { metadata: ObjectMetadata! responseContext: ResponseContext! success: Boolean! } union UntrashObjectResult = UntrashObjectOutput | UserFacingError input UpdateAgentTaskInput { """ If set, the task is associated with this AI conversation UUID for follow-up messages. """ conversationId: ID """If set, the task is associated with this shared session.""" sessionId: ID """ Optional status message about the task (e.g., progress update, error message, completion summary). """ statusMessage: AgentTaskStatusMessageInput """ID of the task to update.""" taskId: ID! """If set, the task is changed into this state.""" taskState: AgentTaskState } type UpdateAgentTaskOutput implements Response { responseContext: ResponseContext! } union UpdateAgentTaskResult = UpdateAgentTaskOutput | UserFacingError input UpdateFolderInput { name: String! uid: ID! } type UpdateFolderOutput implements Response { responseContext: ResponseContext! update: ObjectUpdateSuccess! } union UpdateFolderResult = UpdateFolderOutput | UserFacingError input UpdateGenericStringObjectInput { """ The incoming revision for the update. If unset the update is always accepted. NOTE: later releases may reject an update if a revision is unset. """ revisionTs: Time serializedModel: String! uid: ID! } type UpdateGenericStringObjectOutput implements Response { responseContext: ResponseContext! update: GenericStringObjectUpdate! } union UpdateGenericStringObjectResult = UpdateGenericStringObjectOutput | UserFacingError input UpdateManagedSecretInput { description: String encryptedValue: String name: String! owner: Owner! } type UpdateManagedSecretOutput implements Response { managedSecret: ManagedSecret! responseContext: ResponseContext! } union UpdateManagedSecretResult = UpdateManagedSecretOutput | UserFacingError type UpdateMerkleTreeError { error: String! } input UpdateMerkleTreeInput { embeddingConfig: EmbeddingConfig! nodes: [MerkleTreeNode!]! } type UpdateMerkleTreeNodeResult { """The hash of the intermediate Merkle tree node that was inserted.""" hash: NodeHash! """ Whether the node was successfully inserted. Insertion may fail if a node's children do not exist. """ success: Boolean! } type UpdateMerkleTreeOutput implements Response { responseContext: ResponseContext! results: [UpdateMerkleTreeNodeResult!]! } union UpdateMerkleTreeResult = UpdateMerkleTreeError | UpdateMerkleTreeOutput | UserFacingError input UpdateNotebookEditAccessInput { uid: ID! } type UpdateNotebookEditAccessOutput implements Response { accepted: Boolean! metadata: ObjectMetadata! responseContext: ResponseContext! } union UpdateNotebookEditAccessResult = UpdateNotebookEditAccessOutput | UserFacingError input UpdateNotebookInput { data: String """ The incoming revision for the update.If unset the update is always accepted. NOTE: later releases may reject an update if a revision is unset. """ revisionTs: Time title: String uid: ID! } type UpdateNotebookOutput implements Response { responseContext: ResponseContext! update: NotebookUpdate! } union UpdateNotebookResult = UpdateNotebookOutput | UserFacingError input UpdateObjectGuestsInput { accessLevel: AccessLevel! emails: [String!] objectUid: ID! } type UpdateObjectGuestsOutput implements Response { objectPermissions: ObjectPermissions! responseContext: ResponseContext! } union UpdateObjectGuestsResult = UpdateObjectGuestsOutput | UserFacingError """Input for updating onboarding survey status""" input UpdateOnboardingSurveyStatusInput { responses: SurveyResponsesInput status: OnboardingSurveyStatus! } """ Output for updating onboarding survey status - returns the updated status """ type UpdateOnboardingSurveyStatusOutput implements Response { responseContext: ResponseContext! status: OnboardingSurveyStatus! } """Union result for updating onboarding survey status""" union UpdateOnboardingSurveyStatusResult = UpdateOnboardingSurveyStatusOutput | UserFacingError input UpdateUserSettingsInput { cloudConversationStorageEnabled: Boolean crashReportingEnabled: Boolean telemetryEnabled: Boolean } type UpdateUserSettingsOutput implements Response { responseContext: ResponseContext! } union UpdateUserSettingsResult = UpdateUserSettingsOutput | UserFacingError input UpdateWorkflowInput { data: String! """ The incoming revision for the update.If unset the update is always accepted. NOTE: later releases may reject an update if a revision is unset. """ revisionTs: Time uid: ID! } type UpdateWorkflowOutput implements Response { responseContext: ResponseContext! update: WorkflowUpdate! } union UpdateWorkflowResult = UpdateWorkflowOutput | UserFacingError input UpdateWorkspaceSettingsInput { setAddonCreditsSettings: AddonCreditsSettingsInput setAiAutonomySettings: AiAutonomySettingsInput setAiPermissionsSettings: AiPermissionsSettingsInput setAmbientAgentSettings: AmbientAgentSettingsInput setCloudConversationStorageSettings: CloudConversationStorageSettingsInput setCodebaseContextSettings: CodebaseContextSettingsInput setDomainCaptureSettings: DomainCaptureSettingsInput setEnterpriseAnalyticsDataCollectionSettings: EnterpriseAnalyticsDataCollectionSettingsInput setEnterpriseBillingSettings: EnterpriseBillingSettingsInput setHarnessSettings: HarnessSettingsInput setLinkSharingSettings: LinkSharingSettingsInput setLlmSettings: LlmSettingsInput setSandboxedAgentSettings: SandboxedAgentSettingsInput setSecretRedactionSettings: SecretRedactionSettingsInput setTelemetrySettings: TelemetrySettingsInput setUgcCollectionSettings: UgcCollectionSettingsInput setUsageBasedPricingSettings: UsageBasedPricingSettingsInput workspaceUid: String! } type UpdateWorkspaceSettingsOutput implements Response { responseContext: ResponseContext! workspaceSettings: WorkspaceSettings! } union UpdateWorkspaceSettingsResult = UpdateWorkspaceSettingsOutput | UserFacingError input UpdatedCloudObjectsInput { folders: [UpdatedObjectInput!] forceRefresh: Boolean! genericStringObjects: [UpdatedObjectInput!] notebooks: [UpdatedObjectInput!] workflows: [UpdatedObjectInput!] } type UpdatedCloudObjectsOutput implements Response { actionHistories: [ObjectActionHistory!] deletedObjectUids: DeletedObjectUids! folders: [Folder!] genericStringObjects: [GenericStringObject!] mcpGallery: [MCPGalleryTemplate!] notebooks: [Notebook!] responseContext: ResponseContext! userProfiles: [PublicUserProfile!] workflows: [Workflow!] } union UpdatedCloudObjectsResult = UpdatedCloudObjectsOutput | UserFacingError input UpdatedObjectInput { """ The latest ts for an action on this object. This refers to any action at all. If this timestamp is out-of-date, at least one action has occurred that the client doesn't know about. """ actionsTs: Time """ The latest metadata ts the client currently has for this object. This is only nullable to remain backwards-compatible with clients that don't pass the metadata ts. """ metadataTs: Time """ The latest permissions ts the client currently has for this object. This is only nullable to remain backwards-compatible with clients that don't pass the permissions ts. """ permissionsTs: Time """The latest revision the client currently has for this object.""" revisionTs: Time! uid: ID! } """ A single name/value pair for a multipart form field in a presigned POST upload. """ type UploadField { name: String! value: UploadFieldValue! } """The value of a multipart form field in a presigned POST upload target.""" union UploadFieldValue = ContentCRC32CFieldValue | ContentDataFieldValue | StaticUploadFieldValue type UsageBasedPricingPolicy { toggleable: Boolean! } type UsageBasedPricingSettings { enabled: Boolean! maxMonthlySpendCents: Int } input UsageBasedPricingSettingsInput { enabled: Boolean maxMonthlySpendCents: Int } type UsageEntry { costCents: Int! costType: AICreditsUsageAndCostType! creditsUsed: Int! subjectDisplayName: String subjectType: AICreditsUsageAndCostSubjectType! subjectUid: String usageBucket: AICreditsUsageBucket! usageSource: AICreditsUsageSource! } """Usage plan question response input""" input UsagePlanQuestionResponseInput { answer: UsagePlanSurveyResponse! details: String } """Usage plan options for onboarding survey responses""" enum UsagePlanSurveyResponse { AI_CODE_PRODUCTION AI_PERSONAL_PROJECTS EXPLORING_TOOL OTHER REPLACE_TERMINAL } """ Granularity at which a user can see AI usage across their team. Non-admins always collapse to OWN_ONLY regardless of tier. """ enum UsageVisibilityGranularity { FULL_BREAKDOWN OWN_ONLY PER_USER_TOTALS TEAM_AGGREGATE } type UsageVisibilityPolicy { adminGranularity: UsageVisibilityGranularity! maxPriorCycles: Int! } """ The User type is the primary way of interacting with our graph. Nearly all data is scoped to the currently logged-in user. """ type User { anonymousUserInfo: AnonymousUserInfo availableHarnesses: AvailableHarnesses! billingMetadata: BillingMetadata blocks: [Block!]! bonusGrants: [BonusGrant!]! completedOzWebappFtue: Boolean! """ Returns a history of user's conversation usage data over the past N days (defaulting to 30 days). Results can be paginated by providing a limit. If lastUpdatedEndTimestamp is provided, only conversations with lastUpdated earlier than this timestamp are returned. This enables cursor-based pagination. """ conversationUsage(days: Int, lastUpdatedEndTimestamp: Time, limit: Int): [ConversationUsage!]! discoverableTeams: [DiscoverableTeamData!]! """ We differentiate between `null` and `[]` here: - `null` means the server can't provide the latest experiment state. The client should use whatever experiment state is last successfully queried. - `[]` means that the user is not part of any server-side enabled experiments. """ experiments: [Experiment!] githubInstallations: UserGithubInstallationsOutput! """ Global skills that are always available to the calling principal. The client will fetch and install these, so they're available in every conversation on every device. This is currently only supported for agents, not individual users. """ globalSkills: [String!]! isOnWorkDomain: Boolean! isOnboarded: Boolean! llms: FeatureModelChoice! managedSecrets: ManagedSecretConfig onboardingSurveyStatus: OnboardingSurveyStatus profile: FirebaseProfile! referrals: ReferralInfo! requestLimitInfo: RequestLimitInfo! """ User settings may return null if the user has no settings in the DB. The client uses this to differentiate between "you don't have settings" and "your settings are their default values". """ settings: UserSettings workspaces: [Workspace!]! } """ NOTE: We use this `UserFacingError` wrapper to maintain backwards compatibility with the client when introducing new error types. This means that the return type of mutations should be a union with the `UserFacingError` wrapper, instead of unioning directly with `UserFacingErrorInterface` or any specific error that implements it. This is because of a known bug with the rust graphql-client library we use on the client side that prevents us from querying union types with interfaces directly: https://github.com/graphql-rust/graphql-client/issues/454 This would mean that if we unioned directly with a specific implementation of `UserFacingErrorInterface`, we would not be able to add new error types to the union without breaking the client. We union with `UserFacingError` instead, which will remain known type that the client can query even if new types of errors that implement `UserFacingErrorInterface` are returned back by the server. """ type UserFacingError implements Response { error: UserFacingErrorInterface! responseContext: ResponseContext! } """ `UserFacingErrorInterface` is what all the expected error types that are returned in mutations should implement. This gives us a baseline default schema that clients can fallback to so that we’re backwards compatible when introducing new user-error types. When adding new error types, you should implement this interface and union your success type with the wrapper `UserFacingError` type (and NOT with `UserFacingErrorInterface`). For example: ``` type MyMutationSuccess { ... } type MyCustomError implements UserFacingErrorInterface { message: String! customField: String! } union MyMutationResult = MyMutationSuccess | UserFacingError ``` Since any mutation can return any error that implements `UserFacingErrorInterface`, when defining new error types you should try to make them re-usable across different APIs rather than mutation specific. See `SharedObjectsLimitExceeded` for an example. """ interface UserFacingErrorInterface { message: String! } union UserGithubInfoResult = GithubAuthRequiredOutput | GithubConnectedOutput | UserFacingError type UserGithubInstallationsOutput implements Response { installations: [GithubInstallation!]! responseContext: ResponseContext! } type UserGuest { firebaseUid: ID! } type UserOutput implements Response { apiKeyOwnerType: OwnerType principalType: PrincipalType! responseContext: ResponseContext! user: User! } enum UserRepoAuthStatus { NO_INSTALLATION_OR_ACCESS_FOR_REPO SUCCESS USER_NOT_CONNECTED_TO_GITHUB } input UserRepoAuthStatusInput { repos: [RepoInput!]! } type UserRepoAuthStatusOutput implements Response { authUrl: String responseContext: ResponseContext! statuses: [RepoResult!]! txId: ID } union UserRepoAuthStatusResult = UserFacingError | UserRepoAuthStatusOutput union UserResult = UserFacingError | UserOutput """ UserSettings is a top-level subfield of user that contains user-specific settings. Workspace specific settings like telemetry enablement override these user settings. UserSettings types and mutations are the v2 equivalent of the v1 user_settings.graphqls file. """ type UserSettings { isCloudConversationStorageEnabled: Boolean! isCrashReportingEnabled: Boolean! isTelemetryEnabled: Boolean! } type WarpAiPolicy { acceptedAutosuggestionsLimit: Int! disablePremiumModels: Boolean! isCodeSuggestionsToggleable: Boolean! isGitOperationsAiEnabled: Boolean! isNextCommandEnabled: Boolean! isPromptSuggestionsToggleable: Boolean! isUnlimited: Boolean! isUnlimitedAutosuggestions: Boolean! isUnlimitedSuggestedCodeDiffs: Boolean! isUnlimitedVoice: Boolean! isVoiceEnabled: Boolean! isWarpDriveObjectIndexingEnabled: Boolean! limit: Int! passiveSuggestionsSpendLimitCents: Float! requestPoolingType: PoolingType! suggestedCodeDiffsLimit: Int! tokenLimit: Int! voiceRequestLimit: Int! voiceTokenLimit: Int! } type WarpBasicPolicy { enabled: Boolean! } union WarpDriveUpdate = AmbientTaskUpdated | ObjectActionOccurred | ObjectContentUpdated | ObjectDeleted | ObjectMetadataUpdated | ObjectPermissionsUpdated | TeamMembershipsChanged type Workflow { data: String! metadata: ObjectMetadata! permissions: ObjectPermissions! } union WorkflowUpdate = ObjectUpdateSuccess | WorkflowUpdateRejected type WorkflowUpdateRejected { conflictingWorkflow: Workflow! revisionTs: Time! } """ The Workspace type is our top-level type that contains all of our collaborative objects and features. Currently this is a no-op (a user effectively has a single workspace), but in the future we will support multiple workspaces per user, each with their own teams. TODO(skambashi): REV-549 - migrate billing information from team to workspace """ type Workspace { adminUid: String! @deprecated(reason: "Use members.role to determine admin status") """ availableLlms returns the LLMs available to the user. By default, this returns only the models that the user can actively select in the warp-internal client. When includeAllConfigurableLlms is true, this returns all models that can be configured in organization settings, which is useful for displaying names in the admin UI (e.g., admin model settings page). """ availableLlms(includeAllConfigurableLlms: Boolean = false): AvailableLlms! billingCycleUsageHistory: BillingCycleUsageHistory """ billingMetadata is the equivalent of the v1 billingMetadata field in the Team type. """ billingMetadata: BillingMetadata! """Deprecated: Use bonusGrantsInfo instead.""" bonusGrants: [BonusGrant!]! @deprecated(reason: "Use bonusGrantsInfo.grants instead") bonusGrantsInfo(includeExhausted: Boolean = false, includeExpired: Boolean = false): BonusGrantsInfo! featureModelChoice: FeatureModelChoice! """ hasBillingHistory is the equivalent of the v1 hasBillingHistory field in the Team type. """ hasBillingHistory: Boolean! """ inviteCode is equivalent to inviteCode field in the v1 Team type. Unlike v1, inviteCode is a string instead of a nested object since the only value actually used by the client is the code itself. """ inviteCode: String inviteLinkDomainRestrictions: [InviteLinkDomainRestriction!]! isEligibleForDiscovery: Boolean! memberSpendLimits: [MemberSpendLimit!] members: [WorkspaceMember!]! name: String! pendingEmailInvites: [EmailInvite!]! """ settings is the equivalent of the v1 organizationSettings field in the Team type with additional fields v1 fields (team.isDiscoverable, team.isInviteLinkEnabled). """ settings: WorkspaceSettings! stripeCustomerId: ID teams: [Team!]! totalRequestsUsedSinceLastRefresh: Int! uid: ID! } type WorkspaceMember { email: String! role: MembershipRole! uid: ID! usageInfo: WorkspaceMemberUsageInfo! } type WorkspaceMemberUsageInfo { isRequestLimitProrated: Boolean! isUnlimited: Boolean! requestLimit: Int! requestsUsedSinceLastRefresh: Int! } type WorkspaceSettings { addonCreditsSettings: AddonCreditsSettings! aiAutonomySettings: AiAutonomySettings! aiPermissionsSettings: AiPermissionsSettings! ambientAgentSettings: AmbientAgentSettings cloudConversationStorageSettings: CloudConversationStorageSettings! codebaseContextSettings: CodebaseContextSettings! domainCaptureSettings: DomainCaptureSettings! enterpriseAnalyticsDataCollectionSettings: EnterpriseAnalyticsDataCollectionSettings! enterpriseBillingSettings: EnterpriseBillingSettings harnessSettings: HarnessSettings isDiscoverable: Boolean! isInviteLinkEnabled: Boolean! linkSharingSettings: LinkSharingSettings! llmSettings: LlmSettings! sandboxedAgentSettings: SandboxedAgentSettings secretRedactionSettings: SecretRedactionSettings! telemetrySettings: TelemetrySettings! ugcCollectionSettings: UgcCollectionSettings! usageBasedPricingSettings: UsageBasedPricingSettings! } enum WriteToPtyAutonomyValue { ALWAYS_ALLOW ALWAYS_ASK ASK_ON_FIRST_WRITE RESPECT_USER_SETTING }