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

# One problem with its findings

> One problem's figures, as `GET /v1/problems` returns them (`findingCount` is the row's `findings`), plus its findings, newest recorded first, at most 100 (`findingsTruncated` says there are more). Each finding carries its cause, suggestion, command, error line, the rule it relates to, how it joined the problem (`joinedBy`) and the other problems it reports. `since` and `until` narrow the figures and the findings to that window.



## OpenAPI

````yaml /openapi.yaml get /v1/problems/{problemId}
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/problems/{problemId}:
    get:
      tags:
        - Findings
      summary: One problem with its findings
      description: >-
        One problem's figures, as `GET /v1/problems` returns them
        (`findingCount` is the row's `findings`), plus its findings, newest
        recorded first, at most 100 (`findingsTruncated` says there are more).
        Each finding carries its cause, suggestion, command, error line, the
        rule it relates to, how it joined the problem (`joinedBy`) and the other
        problems it reports. `since` and `until` narrow the figures and the
        findings to that window.
      operationId: get-problem
      parameters:
        - in: path
          name: problemId
          required: true
          schema:
            type: string
        - description: ISO 8601 instant. Only findings recorded at or after it count.
          in: query
          name: since
          required: false
          schema:
            description: ISO 8601 instant. Only findings recorded at or after it count.
            type: string
        - description: >-
            ISO 8601 instant. Only findings recorded before it count. Must be
            after `since`.
          in: query
          name: until
          required: false
          schema:
            description: >-
              ISO 8601 instant. Only findings recorded before it count. Must be
              after `since`.
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    properties:
                      avgMinutesLost:
                        description: >-
                          `minutesLost` divided by the measured findings; null
                          when none is measured.
                        nullable: true
                        type: number
                      category:
                        description: The category of the problem's newest finding.
                        enum:
                          - context
                          - flaky-test
                          - tooling
                          - environment
                          - defect
                          - other
                        type: string
                      findingCount:
                        description: >-
                          Findings of this problem in the window: the list row's
                          `findings`.
                        type: integer
                      findings:
                        description: Newest recorded first, at most 100.
                        items:
                          properties:
                            callerKind:
                              enum:
                                - machine
                                - session
                                - human
                              type: string
                            category:
                              enum:
                                - context
                                - flaky-test
                                - tooling
                                - environment
                                - defect
                                - other
                              type: string
                            cause:
                              nullable: true
                              type: string
                            command:
                              nullable: true
                              type: string
                            contextSourceSha:
                              nullable: true
                              type: string
                            detail:
                              nullable: true
                              type: string
                            error:
                              nullable: true
                              type: string
                            file:
                              type: string
                            headSha:
                              nullable: true
                              type: string
                            id:
                              type: string
                            joinedBy:
                              description: >-
                                How the finding joined this problem.
                                `strict_key` is an exact match; `agent_link` is
                                the agent's judgment.
                              enum:
                                - strict_key
                                - agent_link
                                - new
                                - no_candidates
                                - backfill
                                - null
                              nullable: true
                              type: string
                            line:
                              nullable: true
                              type: integer
                            minutesLost:
                              description: >-
                                Minutes between the two session events the agent
                                marked; null without both.
                              nullable: true
                              type: number
                            number:
                              description: The work item's number in this factory.
                              nullable: true
                              type: integer
                            otherProblems:
                              description: The other problems this finding reports.
                              items:
                                properties:
                                  id:
                                    type: string
                                  title:
                                    type: string
                                required:
                                  - id
                                  - title
                                type: object
                              type: array
                            recordedAt:
                              type: string
                            recordedBy:
                              type: string
                            ruleLine:
                              nullable: true
                              type: integer
                            rulePath:
                              nullable: true
                              type: string
                            ruleQuote:
                              nullable: true
                              type: string
                            ruleRelation:
                              enum:
                                - wrong
                                - broken
                                - missing
                                - null
                              nullable: true
                              type: string
                            suggestion:
                              nullable: true
                              type: string
                            symbol:
                              nullable: true
                              type: string
                            test:
                              nullable: true
                              type: string
                            title:
                              type: string
                            whereRecorded:
                              additionalProperties:
                                nullable: true
                              type: object
                          required:
                            - id
                            - number
                            - category
                            - title
                            - file
                            - line
                            - rulePath
                            - ruleLine
                            - ruleQuote
                            - ruleRelation
                            - detail
                            - cause
                            - suggestion
                            - command
                            - error
                            - test
                            - symbol
                            - whereRecorded
                            - minutesLost
                            - headSha
                            - contextSourceSha
                            - recordedBy
                            - callerKind
                            - recordedAt
                            - joinedBy
                            - otherProblems
                          type: object
                        type: array
                      findingsTruncated:
                        description: >-
                          True when the problem has more than 100 findings in
                          the window. The figures still count all of them.
                        type: boolean
                      firstReportedAt:
                        type: string
                      id:
                        type: string
                      lastReportedAt:
                        type: string
                      minutesLost:
                        description: >-
                          Sum of the measured minutes over its findings; null
                          when none is measured. A finding that reports several
                          problems counts in full toward each.
                        nullable: true
                        type: number
                      reports:
                        description: Distinct work items with a finding of this problem.
                        type: integer
                      strictKeys:
                        description: >-
                          The strict keys the problem owns, as stored: the exact
                          text that joins a finding to it. A problem joined only
                          by agent choice has none.
                        items:
                          type: string
                        type: array
                      title:
                        type: string
                      unmeasuredFindings:
                        description: Findings with no measured time.
                        type: integer
                    required:
                      - id
                      - title
                      - category
                      - strictKeys
                      - reports
                      - minutesLost
                      - unmeasuredFindings
                      - avgMinutesLost
                      - firstReportedAt
                      - lastReportedAt
                      - findingCount
                      - findings
                      - findingsTruncated
                    type: object
                required:
                  - data
                type: object
          description: The problem and its findings.
        '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 `problemId` that is not a UUID, a malformed `since` or `until`, or
            `until` not after `since`.
        '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.
        '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 key lacks `evidence.read`, or is scoped to one work item.
        '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 such problem in this factory.
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.