> ## 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.

# List live work items

> Every live (not withdrawn) work item for this factory, filterable by repository, stage, and section. Page size 100; follow `pagination.cursor` for the rest. `issue`, with `repository`, narrows the page to the single item that subject answers to — a pull request whose closing issue is known resolves to the issue-keyed item, which no client can work out from a number alone. `key` narrows the page to the items whose own tracker key it is, such as a Linear or Jira `ENG-142`, and `tracker` to one tracker's items. `repository` matches a GitHub item by its key and any other item by the repository it was added with. `unclaimed=true` narrows to rows with no live lease. `startable=true` narrows to rows a host can pick up, which is asked per queue: on the ordinary list, an unused build request (`outerlayer work build`, never `work build --local`), no open pull request and no live lease of any holder — a host or a session; under `needs=amend`, an unused amend trigger (a person's `fail` on the general thread that nothing has answered, or a later build request on the item) and no live lease. A request or trigger is used up by any lease that started after it — a host lease released `ok`, `failed`, `timed_out` or `idle`, a host lease that lapsed without ever being released, and a session lease however it ended. The one exception is a host lease released `interrupted`, `stopped` or `lease_lost`, or with no outcome: the attempt was declined or cut short, so the request or trigger stays unused. A linked session is a record, never a blocker; an open pull request moves a build request to the amend queue. `startable=true` lists the oldest request first: by the time of the oldest unused build request, or under `needs=amend` by the amend trigger, with `id` as the tie-break, so recomputing an item never moves its place. Any other list stays ordered by when each item was last computed. `claimed=true` narrows to rows WITH a live lease — the same `claimed` column `unclaimed=true` reads, in the opposite direction; asking for both together is refused with a 400 before any store read. `needs=amend` narrows to items whose general thread waits on an agent after a person's `fail` (or a later build request) and no live claim — each such row carries a `threads` array (the waiting threads only, in the same shape `GET /v1/work-items/{id}/threads` returns) instead of the ordinary fields alone.



## OpenAPI

````yaml /openapi.yaml get /v1/work-items
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/work-items:
    get:
      tags:
        - Work Items
      summary: List live work items
      description: >-
        Every live (not withdrawn) work item for this factory, filterable by
        repository, stage, and section. Page size 100; follow
        `pagination.cursor` for the rest. `issue`, with `repository`, narrows
        the page to the single item that subject answers to — a pull request
        whose closing issue is known resolves to the issue-keyed item, which no
        client can work out from a number alone. `key` narrows the page to the
        items whose own tracker key it is, such as a Linear or Jira `ENG-142`,
        and `tracker` to one tracker's items. `repository` matches a GitHub item
        by its key and any other item by the repository it was added with.
        `unclaimed=true` narrows to rows with no live lease. `startable=true`
        narrows to rows a host can pick up, which is asked per queue: on the
        ordinary list, an unused build request (`outerlayer work build`, never
        `work build --local`), no open pull request and no live lease of any
        holder — a host or a session; under `needs=amend`, an unused amend
        trigger (a person's `fail` on the general thread that nothing has
        answered, or a later build request on the item) and no live lease. A
        request or trigger is used up by any lease that started after it — a
        host lease released `ok`, `failed`, `timed_out` or `idle`, a host lease
        that lapsed without ever being released, and a session lease however it
        ended. The one exception is a host lease released `interrupted`,
        `stopped` or `lease_lost`, or with no outcome: the attempt was declined
        or cut short, so the request or trigger stays unused. A linked session
        is a record, never a blocker; an open pull request moves a build request
        to the amend queue. `startable=true` lists the oldest request first: by
        the time of the oldest unused build request, or under `needs=amend` by
        the amend trigger, with `id` as the tie-break, so recomputing an item
        never moves its place. Any other list stays ordered by when each item
        was last computed. `claimed=true` narrows to rows WITH a live lease —
        the same `claimed` column `unclaimed=true` reads, in the opposite
        direction; asking for both together is refused with a 400 before any
        store read. `needs=amend` narrows to items whose general thread waits on
        an agent after a person's `fail` (or a later build request) and no live
        claim — each such row carries a `threads` array (the waiting threads
        only, in the same shape `GET /v1/work-items/{id}/threads` returns)
        instead of the ordinary fields alone.
      operationId: list-work-items
      parameters:
        - in: query
          name: repository
          required: false
          schema:
            type: string
        - in: query
          name: issue
          required: false
          schema:
            exclusiveMinimum: true
            minimum: 0
            type: integer
        - in: query
          name: key
          required: false
          schema:
            maxLength: 2000
            minLength: 1
            type: string
        - in: query
          name: tracker
          required: false
          schema:
            enum:
              - github
              - linear
              - jira
            type: string
        - in: query
          name: stage
          required: false
          schema:
            type: string
        - in: query
          name: section
          required: false
          schema:
            type: string
        - in: query
          name: updatedSince
          required: false
          schema:
            type: string
        - in: query
          name: cursor
          required: false
          schema:
            type: string
        - description: Only 'true' is accepted; refused together with claimed=true.
          in: query
          name: unclaimed
          required: false
          schema:
            description: Only 'true' is accepted; refused together with claimed=true.
            type: string
        - description: Only 'true' is accepted; refused together with unclaimed=true.
          in: query
          name: claimed
          required: false
          schema:
            description: Only 'true' is accepted; refused together with unclaimed=true.
            type: string
        - description: Only 'true' is accepted.
          in: query
          name: startable
          required: false
          schema:
            description: Only 'true' is accepted.
            type: string
        - in: query
          name: needs
          required: false
          schema:
            enum:
              - amend
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      additionalProperties:
                        nullable: true
                      type: object
                    type: array
                  pagination:
                    properties:
                      cursor:
                        nullable: true
                        type: string
                    required:
                      - cursor
                    type: object
                required:
                  - data
                  - pagination
                type: object
          description: A page of work items.
        '400':
          content:
            application/json:
              schema:
                properties:
                  error:
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    type: object
                required:
                  - error
                type: object
          description: A filter or cursor the route cannot use.
        '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 API key.
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

````

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