---
title: "Get a factory"
method: GET
path: "/factory/{uid}"
tags: ["Factories"]
---

# Get a factory

`GET /factory/{uid}`

## Request

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

Get a factory by its UID.

## Path parameters

- `uid` string, required

## Response `200`

Factory details

- Factory: Public representation of a factory.
  - `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.

## Other responses

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

## Changes

- **2026-11-04** `4b5d145669be`: 2 info
  - added the optional property `allow_service_account_followups` to the response with the `200` status
  - added the optional property `restrict_followups_to_starter` to the response with the `200` status
- **2026-10-21** `7ee3ba55debc`: 3 info
  - added the optional property `self_improvement/allOf[#/components/schemas/FactorySelfImprovementConfig]/default_runner_uid` to the response with the `200` status
  - added the optional property `self_improvement/allOf[#/components/schemas/FactorySelfImprovementConfig]/mcp_servers` to the response with the `200` status
  - added the optional property `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/:uid/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)
