---
title: "List factories"
method: GET
path: "/factory"
tags: ["Factories"]
---

# List factories

`GET /factory`

## Request

- Base URL: `https://app.warp.dev/api/v1`
- URL: `https://app.warp.dev/api/v1/factory`
- Auth: HTTP bearer

List factories accessible to the authenticated principal, restricted
to the request's active team when one is set. An optional team_uid
query parameter overrides the active team and restricts results to a
single team, and an optional search query parameter filters by a
case-insensitive substring match on the factory name or alias.

## Query parameters

- `team_uid` string
- `search` string
- `limit` integer
- `cursor` string

## Headers

- `X-Warp-Team-Uid` string

## Response `200`

List of factories

- ListFactoriesResponse: Response body for listing factories.
  - `factories` Factory[], required
    - `uid` string, required: Public UID of the factory.
    - `team_uid` string, required: Public UID of the team that owns the factory.
    - `name` string, required: Display name of the factory.
    - `description` string, nullable, required: Optional description of the factory.
    - `alias` string, nullable, required: Optional display handle for the factory, unique across the team's Warp workspace when set.
    - `avatar_url` string, nullable, required: Short-lived signed URL for displaying the factory's avatar. The URL may change between reads.
    - `code_forge` 'GITHUB' | 'GITLAB' | 'AZURE_DEVOPS' | 'NONE', required: Primary source-control provider for the factory. GITHUB and GITLAB identify the compatibility primary when repositories span one or more forges. AZURE_DEVOPS identifies Azure Repos. NONE declares a repo-less factory with no native repositories; its environment relies on setup_commands to clone from any host.
    - `code_forges` FactoryCodeForge[], required: Enabled source-control providers for the factory. Empty when the factory has no enabled forge; never contains NONE.
    - `repositories` FactoryRepository[], required: Repositories scoped to the factory, independent of its default environment.
      - `owner` string, required: Repository owner (or full namespace for GitLab).
      - `repo` string, required: Repository name.
      - `code_forge` 'GITHUB' | 'GITLAB' | 'AZURE_DEVOPS': The concrete source-control provider hosting a repository.
      - `provider_metadata` object: Provider-specific repository identity and settings, such as the Azure DevOps organization, project ID, and repository ID.
    - `default_environment` string, nullable, required: Public UID of the factory's default environment. File-managed factories may omit this default.
    - `default_model` string, nullable, required: The default model ID for the factory's runs. File-managed factories may omit this default. Live-managed create and PATCH requests still capture a concrete validated model ID.
    - `scoring` FactoryScoringConfig, required
      - `default_model` string, nullable, required: Optional factory override for the model used by managed scorers and scorer-creation prefills. null or absent resolves to the platform judge default. User-created scorers still require an explicit model_id on create.
    - `self_improvement` FactorySelfImprovementConfig
      - `default_runner_uid` string
      - `secrets` SecretRef[]
        - `name` string, required: Name of the managed secret.
      - `mcp_servers` object
      - `reviewer_type` 'none' | 'admins' | 'team' | 'custom': Owning-team pool from which one eligible reviewer is randomly selected for self-improvement pull requests and Factory reviews in GitHub-managed or Warp-managed Factories. `admins` requests a team admin or owner. `team` requests any team member. `custom` requests a member listed in `reviewer_emails`. `none` explicitly disables reviewer assignment. Omitted when the Factory declares no pool, in which case `self_improvement_defaults.reviewer_type` applies.
      - `failed_run_threshold` integer: Per-agent count of distinct scored-failing source runs required for scheduled self-improvement. Must be between 1 and 50: one self-improvement run can triage at most 50 failure findings. Omitted to use the server default. The age-based flush and manual dispatch are unchanged.
      - `reviewer_emails` string[]: Owning-team member emails reviewers are chosen from. Only allowed when `reviewer_type` is `custom`: a Factory YAML change that sets emails with any other reviewer type fails validation, including the pull request check.
      - `model` string: The model self-improvement runs use, as a model ID or custom model router key. Falls back to `self_improvement_defaults.model` when not provided.
    - `self_improvement_defaults` FactorySelfImprovementDefaults
      - `reviewer_type` 'none' | 'admins' | 'team', required: Reviewer pool used when the Factory declares no `reviewer_type`.
      - `model` string, required: Model self-improvement runs use when the Factory declares no `model`.
      - `failed_run_threshold` integer, required: Per-agent count of distinct scored-failing source runs that triggers scheduled self-improvement when the Factory declares no `failed_run_threshold`.
    - `credential_strategy` 'CREATOR' | 'EXECUTOR', required: Default credential strategy for runs executed by the factory's named agents. - EXECUTOR (default): runs authenticate with the named agent's own credentials (e.g. a GitHub App installation token for the factory's team). - CREATOR: runs authenticate with the credentials of the principal that created the run.
    - `restrict_followups_to_starter` boolean: When true, only the Warp user who started a run may send it follow-ups. Senders on Slack, GitHub, Linear and other integrations are matched to Warp users through their linked accounts; follow-ups from agents and the system are unaffected.
    - `allow_service_account_followups` boolean: When true, follow-ups sent with a service account's API key are accepted even though restrict_followups_to_starter is true. Has no effect while restrict_followups_to_starter is false.
    - `integrations` FactoryIntegration[], nullable, required: Integration providers attached to the factory, independent of the automation triggers configured for it. null means the factory has not declared anything yet; an empty array means no providers are attached.
      - `type` 'jira' | 'linear' | 'microsoft-teams' | 'slack', required: Integration provider that can be attached to a factory. github is not accepted here; repository access comes from the factory's code forge.
      - `linear` FactoryLinearIntegrationSettings
        - `team_ids` string[], required: Linear team IDs for the one-time agent-session automation seed. Discovery follows enabled seated automation filters afterward.
      - `jira` FactoryJiraIntegrationSettings
        - `project_keys` string[], required: Jira project keys (for example APP, not the numeric project ID) for the one-time agent-session automation seed. Discovery follows enabled seated automation filters afterward.
      - `slack` FactorySlackIntegrationSettings: Plain channel-thread reply settings. These apply when the shared per-Factory reply-setting rollout is enabled.
        - `auto_respond_to_thread_replies` boolean, nullable: When true, eligible plain channel thread replies still reach the reply-intent classifier. When false, those replies are ignored unless they @-mention the Factory. Each provider defines the omitted default. Direct messages are unchanged.
      - `microsoft-teams` FactoryTeamsIntegrationSettings: Plain channel-thread reply settings. These apply when the shared per-Factory reply-setting rollout is enabled.
        - `auto_respond_to_thread_replies` boolean, nullable: When true, eligible plain channel thread replies still reach the reply-intent classifier. When false, those replies are ignored unless they @-mention the Factory. Each provider defines the omitted default. Direct messages are unchanged.
    - `agent_defaults` FactoryAgentDefaults, required: Default execution settings inherited by the factory's named agents when they declare no override of their own.
      - `harness` Harness: Specifies which execution harness to use for the agent run. Default (nil/empty) uses Warp's built-in harness. When stored as a named agent's default (create/update agent identity), this field replaces the deprecated base_harness/base_model pair: a harness other than `oz` here requires the agent's base_model to be empty, since the two describe mutually exclusive default models.
        - `type` union: The harness type identifier: `oz` for Warp's built-in harness (default), or any third-party harness.
          - 'oz': Warp's built-in harness (default).
          - 'claude' | 'codex' | 'gemini' | 'pi': A third-party harness; every harness other than Warp's built-in `oz`. - claude: Claude Code - codex: Codex CLI - gemini: Gemini CLI - pi: Pi
        - `model_id` string: Model to use with a third-party harness (e.g. "claude-haiku-4-5"). Only applies when type is a harness other than `oz`; the top-level config model_id targets the built-in Warp harness instead. When omitted or empty, the harness uses its own default model. For an individual Warp-managed Factory Claude Code agent, send an explicit empty string to use the environment's model. Omitting model_id when replacing that agent's harness is invalid.
        - `reasoning_level` string: Reasoning effort for harnesses that support it (e.g. Codex). Only applies when type is a harness other than `oz`. Ignored by harnesses that do not support reasoning levels.
      - `harness_auth_secrets` HarnessAuthSecrets: Authentication secrets for third-party harnesses. Only the secret for the harness specified gets injected into the environment.
        - `claude_auth_secret_name` string: Name of a managed secret for Claude Code harness authentication. The secret must exist within the caller's personal or team scope. Only applicable when harness type is "claude".
        - `codex_auth_secret_name` string: Name of a managed secret for Codex harness authentication. The secret must exist within the caller's personal or team scope. Only applicable when harness type is "codex".
        - `pi_auth_secret_name` string: Name of a managed secret for Pi harness authentication. The secret must exist within the caller's personal or team scope and must be a credential for the model provider named by the provider prefix of harness.model_id. Only applicable when harness type is "pi".
      - `default_runner_uid` string, required: Default runner UID for the factory's named agents. Empty when unset, in which case the environment's default runner applies.
      - `secrets` SecretRef[], required: Secrets attached to the factory's named agents by default.
        - `name` string, required: Name of the managed secret.
      - `mcp_servers` object, required: MCP server configurations attached to the factory's named agents by default. Only warp_id (managed MCP) entries are representable for a Warp-managed factory.
      - `worker_host` string, required: Default worker host for the factory's named agents. Empty when unset, in which case the workspace default applies.
    - `scorer_defaults` FactoryScorerDefaults, required: Sparse execution defaults for scorers. An omitted field inherits the corresponding agent default; an explicit empty collection overrides the agent default with no values.
      - `default_runner_uid` string: Default runner UID for scorers. Omitted to inherit the agent default.
      - `secrets` SecretRef[]: Scorer-default secrets. Omitted to inherit the agent defaults; an empty array explicitly clears them.
        - `name` string, required: Name of the managed secret.
      - `mcp_servers` object: Scorer-default MCP servers. Omitted to inherit the agent defaults; an empty object explicitly clears them.
    - `creator` FactoryCreator: The user who created a factory, when resolvable.
      - `uid` string, required: Firebase UID of the user who created the factory.
      - `email` string, nullable: Creator's email, when available.
    - `created_at` string, date-time, required: Time the factory was created.
    - `updated_at` string, date-time, required: Time the factory was last updated.
  - `page_info` PageInfo, required
    - `has_next_page` boolean, required: Whether there are more results available
    - `next_cursor` string: Opaque cursor for fetching the next page

## Other responses

- `401`: Authentication required
- `403`: Factory access is not enabled for the authenticated principal
- `500`: Internal server error

## Changes

- **2026-11-04** `4b5d145669be`: 2 info
  - added the optional property `factories/items/allow_service_account_followups` to the response with the `200` status
  - added the optional property `factories/items/restrict_followups_to_starter` to the response with the `200` status
- **2026-10-21** `7ee3ba55debc`: 3 info
  - added the optional property `factories/items/self_improvement/allOf[#/components/schemas/FactorySelfImprovementConfig]/default_runner_uid` to the response with the `200` status
  - added the optional property `factories/items/self_improvement/allOf[#/components/schemas/FactorySelfImprovementConfig]/mcp_servers` to the response with the `200` status
  - added the optional property `factories/items/self_improvement/allOf[#/components/schemas/FactorySelfImprovementConfig]/secrets` to the response with the `200` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/warp/apis/oz-agent-api/changes/factory/get.md)

---

[API](https://skmtc.dev/warp/apis/oz-agent-api.md) - [All operations](https://skmtc.dev/warp/apis/oz-agent-api/llms.txt) - [OpenAPI document](https://skmtc.dev/warp/apis/oz-agent-api/revisions/4b5d145669be?raw)
