> ## Documentation Index
> Fetch the complete documentation index at: https://docs-stg.outerlayer.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Designate a factory's control plane

> Marks one of the factory's linked repositories as its control plane, replacing the one it had. The control plane governs every other repository the factory links. The repository is read before it is stored: its ref is resolved to a commit and `.outerlayer/config.json` is parsed at that commit. A missing config is accepted. Requires 'governance.insert'.



## OpenAPI

````yaml /openapi.yaml put /v1/orgs/{orgName}/apps/{appId}/context-source
openapi: 3.0.3
info:
  contact:
    email: hello@outerlayer.ai
    url: https://www.outerlayer.ai
  description: >-
    The OuterLayer Gateway API lets you ingest coding-agent sessions and record
    evidence of work programmatically.


    Most teams reach it through the `outerlayer` CLI, which calls it for them.

    Call it directly to build your own integration or to automate what the
    dashboard does.


    Versioning: every endpoint is prefixed with `/v1/`. Breaking changes ship
    under a new version prefix (`/v2/`, etc.) with a 90-day-minimum deprecation
    window; anything additive lands on the current prefix.


    Vocabulary: the dashboard calls this API's `app` a **factory** — the unit
    that owns a set of repositories, the agent sessions worked on them, and the
    evidence they produce. They are the same entity. The API keeps `app` in its
    paths, headers, and field names because those are a published contract; only
    the product surface was renamed.
  title: OuterLayer Gateway API
  version: '1.0'
servers:
  - description: Production (OuterLayer Cloud)
    url: https://api.outerlayer.ai
  - description: Local dev server (self-hosted gateway)
    url: http://localhost:9418
security:
  - AppId: []
    BearerAuth: []
tags:
  - description: >-
      What a CLI login token can read about its owner without naming a factory,
      such as the factories they can use.
    name: Account
  - description: >-
      Coding-agent session ingest (outerlayer sync) and content-addressed
      session images.
    name: Agents
  - description: >-
      Evidence artifacts (screenshots, recordings, reports, logs) emitted as
      proof of a change and anchored to pull requests.
    name: Artifacts
  - description: >-
      Pass/fail outcomes of checks run in your own CI or compute, anchored to
      pull requests with the run URL as proof.
    name: Emitted Results
  - description: >-
      The acceptance criteria of a work item, recorded as one list. The Criteria
      tab, its count and the item status read that list.
    name: Criteria
  - description: >-
      What any agent found wrong about a change under review or about a rule it
      ran on, recorded on a work item.
    name: Findings
  - description: >-
      Find, file and edit the issue a spec lives in, through OuterLayer, with no
      tracker credential on the caller's side.
    name: Specs
  - description: >-
      Add or remove a source's statement that it is working on an issue or pull
      request, and read what is currently live.
    name: Work Items
  - description: >-
      What the factory's GitHub App installation lets builds do on each
      connected repository, and whether each default branch requires a pull
      request.
    name: Repositories
  - description: >-
      A runner host's heartbeat — its CLI version, slots and last request for
      work — and the factory's list of hosts with a derived status.
    name: Hosts
  - description: Query server feature availability.
    name: Capabilities
  - description: Per-model LLM pricing data. Public, unauthenticated.
    name: Pricing
  - description: >-
      Create, list, and revoke factory API keys. Plaintext returned exactly once
      at creation.
    name: API Keys
  - description: >-
      Factory CRUD — a factory is owned by an organization and is the unit every
      other resource hangs off. Lets a headless agent provision one without the
      dashboard.
    name: Apps
  - description: >-
      Agent-coding session list and full transcript reads, with actor-privacy
      controls for machine keys.
    name: Sessions
  - description: >-
      Per-model token spend and fleet-wide agent behavior tiles, including
      two-window comparisons.
    name: Metrics
  - description: Synced-commit history of the app's `.outerlayer/` context tree.
    name: Context
  - description: >-
      Session→PR attribution: which agent sessions produced which pull requests,
      and what each attributed PR cost.
    name: PRs
  - description: Service health checks.
    name: Health
  - description: >-
      Org member and role administration, authenticated with an org-scoped
      management API key (`olk_…`) minted in the dashboard's settings.
    name: Org Management
  - description: OAuth 2.1 discovery metadata for MCP connector clients.
    name: OAuth
paths:
  /v1/orgs/{orgName}/apps/{appId}/context-source:
    put:
      tags:
        - Context
      summary: Designate a factory's control plane
      description: >-
        Marks one of the factory's linked repositories as its control plane,
        replacing the one it had. The control plane governs every other
        repository the factory links. The repository is read before it is
        stored: its ref is resolved to a commit and `.outerlayer/config.json` is
        parsed at that commit. A missing config is accepted. Requires
        'governance.insert'.
      operationId: designate-factory-context-source
      parameters:
        - in: path
          name: orgName
          required: true
          schema:
            minLength: 1
            type: string
        - in: path
          name: appId
          required: true
          schema:
            format: uuid
            type: string
      requestBody:
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                ref:
                  default: main
                  maxLength: 200
                  minLength: 1
                  type: string
                repository:
                  pattern: ^[\w.-]+\/[\w.-]+$
                  type: string
              required:
                - repository
              type: object
      responses:
        '201':
          content:
            application/json:
              schema:
                properties:
                  data:
                    properties:
                      created_at:
                        type: string
                      governs:
                        items:
                          type: string
                        type: array
                      ref:
                        type: string
                      repository:
                        type: string
                      validated_sha:
                        nullable: true
                        type: string
                    required:
                      - repository
                      - ref
                      - governs
                      - validated_sha
                      - created_at
                    type: object
                required:
                  - data
                type: object
          description: Stored.
        '400':
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    type: object
                required:
                  - error
                type: object
          description: The repository is not "owner/repo".
        '401':
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    type: object
                required:
                  - error
                type: object
          description: >-
            Missing or invalid credentials: a management API key, or a signed-in
            session from a member of this org.
        '402':
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        enum:
                          - entitlement_required
                        type: string
                      current:
                        type: number
                      entitlement:
                        type: string
                      limit:
                        type: number
                      message:
                        type: string
                    required:
                      - code
                      - message
                      - entitlement
                    type: object
                required:
                  - error
                type: object
          description: Management API keys require an Enterprise plan.
        '403':
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    type: object
                required:
                  - error
                type: object
          description: >-
            The caller lacks 'governance.insert' in this org, or the key does
            not belong to this org.
        '404':
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    type: object
                required:
                  - error
                type: object
          description: No factory with that id in this org.
        '409':
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    type: object
                required:
                  - error
                type: object
          description: >-
            The repository is already the control plane of another factory in
            this org.
        '422':
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    type: object
                required:
                  - error
                type: object
          description: >-
            The repository is not linked to this factory
            (`repository_not_linked`), or its ref could not be resolved, or its
            config is not valid JSON (`context_source_unreadable`).
      security:
        - ManagementApiKeyAuth: []
        - DashboardSessionAuth: []
components:
  securitySchemes:
    AppId:
      description: Factory id the request is scoped to.
      in: header
      name: X-Outerlayer-App-Id
      type: apiKey
    BearerAuth:
      description: API key (sk_outerlayer_*)
      scheme: bearer
      type: http
    ManagementApiKeyAuth:
      description: Management API key (olk_*), scoped to one org. Needs an Enterprise plan.
      scheme: bearer
      type: http
    DashboardSessionAuth:
      description: >-
        A signed-in member's dashboard session token. Works on every plan; the
        member's role in the org decides what it may do.
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.