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

# Automation coverage per recurring problem, with Neo's plan for each

> For each recurring problem of the tenant's problem map: the share of its ticket work Neo did over the window (`coverage_pct`, by stage and fix step, with the agents that did it), the technician hours a month still left (`remaining_hours_per_month`), and Neo's nightly plan to raise it (`recommendation`: `summary`, `plan`, `changes`, `expected_gain_pts`). `days` is 30 or 90 (default 90); the plans and the desk `recommendation_summary` ride the 90-day read only. `nightly_enabled` false means the nightly judge does not run for this tenant yet, so there are no figures. Agents the caller may not view are not named, and a plan that changes such an agent is left out. Credits are the tenant's own consumption, not a cost.



## OpenAPI

````yaml https://api.neoagent.io/public-api/openapi.json get /public-api/insights/problems/coverage
openapi: 3.1.0
info:
  description: >-
    Neo's public contract for the dashboard ChatAgent, partner integrations, and
    MSP automation. Every response is wrapped in a `{data, meta}` envelope;
    errors use `{error: {code, message, details?}, meta: {request_id}}`.
    Authenticate with a `Bearer neo_sk_<env>_<secret>` API key (service account)
    or a Microsoft Entra ID JWT (dashboard user). Signed-URL endpoints (end-user
    feedback links) take a `signature` query parameter instead.
  title: Neo Public API
  version: 1.0.0
servers:
  - url: https://api.neoagent.io
security: []
tags:
  - description: Service metadata — health, OpenAPI.
    name: Meta
  - description: Agents and workflows — read, version history, delete, stats.
    name: Agents
  - description: Agent/workflow execution history, sub-resources, retry/cancel.
    name: Executions
  - description: >-
      Every tool call the tenant's agents made in the last 30 days, within the
      caller's workflow access.
    name: Audit Log
  - description: PSA webhook events and their workflow-match results.
    name: Callbacks
  - description: Technician-in-the-loop approval requests.
    name: TIL requests
  - description: RMM script executions triggered by agents.
    name: RMM scripts
  - description: Dispatch-agent field-update decisions.
    name: Dispatch
  - description: The authenticated tenant.
    name: Tenant
  - description: Agent-builder schema catalogs (raw JSON payloads).
    name: Schemas
  - description: Escalate to the Neo team (HubSpot ticket).
    name: Escalation
  - description: Tenant settings.
    name: Settings
  - description: Tenant API-key management (dashboard JWT only).
    name: API keys
  - description: End-user feedback links (signed-URL auth).
    name: Feedback
  - description: End-client companies (CRUD + bulk-update).
    name: End companies
  - description: Channels — bind a CONVERSATIONAL agent to a transport (Teams or Slack).
    name: Channels
  - description: PSA/RMM/M365 integration status and connection management.
    name: Integrations
  - description: Technician roster (controls TIL routing and paging).
    name: Technicians
  - description: Future runs queued for TRIGGERED agents.
    name: Scheduled work
  - description: Subscription state and customer-facing credit usage (no provider $).
    name: Billing
  - description: Inbox messages and announcements.
    name: Inbox & Comms
  - description: Tenant-authored agent skills (CRUD) and the built-in skill catalog.
    name: Skills
paths:
  /public-api/insights/problems/coverage:
    get:
      tags:
        - Insights
      summary: Automation coverage per recurring problem, with Neo's plan for each
      description: >-
        For each recurring problem of the tenant's problem map: the share of its
        ticket work Neo did over the window (`coverage_pct`, by stage and fix
        step, with the agents that did it), the technician hours a month still
        left (`remaining_hours_per_month`), and Neo's nightly plan to raise it
        (`recommendation`: `summary`, `plan`, `changes`, `expected_gain_pts`).
        `days` is 30 or 90 (default 90); the plans and the desk
        `recommendation_summary` ride the 90-day read only. `nightly_enabled`
        false means the nightly judge does not run for this tenant yet, so there
        are no figures. Agents the caller may not view are not named, and a plan
        that changes such an agent is left out. Credits are the tenant's own
        consumption, not a cost.
      operationId: public_api.insights_problem_coverage_get
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/ProblemCoverageReport'
                  meta:
                    $ref: '#/components/schemas/SuccessMeta'
                required:
                  - data
                  - meta
                type: object
          description: Success.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Bad request — malformed input.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Unauthenticated — missing or invalid credentials.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Forbidden — authenticated but not allowed.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Not found.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Conflict — the resource is in a state that blocks this operation.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Request validation failed.
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Rate limited — see Retry-After.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
          description: Internal server error.
      security:
        - bearerAuth: []
components:
  schemas:
    ProblemCoverageReport:
      description: >-
        Automation coverage over the tenant's recurring problems for the last
        `days` days. `nightly_enabled` false

        means the nightly judge does not run for this tenant yet, so there are
        no figures; `has_catalog` false means no

        whole-desk problem map exists yet. `credits_consumed` is the tenant's
        own credit consumption over the window.

        `recommendation_summary` is Neo's one-paragraph view over the plans, on
        the 90-day read only.
      properties:
        agents:
          items:
            $ref: '#/components/schemas/ProblemAgent'
          title: Agents
          type: array
        coverage_pct:
          title: Coverage Pct
          type: number
        credits_consumed:
          title: Credits Consumed
          type: integer
        days:
          title: Days
          type: integer
        effort_hours_per_month:
          anyOf:
            - type: number
            - type: 'null'
          title: Effort Hours Per Month
        has_catalog:
          title: Has Catalog
          type: boolean
        last_judged_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Last Judged At
        nightly_enabled:
          title: Nightly Enabled
          type: boolean
        problems:
          items:
            $ref: '#/components/schemas/ProblemCoverage'
          title: Problems
          type: array
        recommendation_summary:
          anyOf:
            - type: string
            - type: 'null'
          title: Recommendation Summary
        remaining_hours_per_month:
          anyOf:
            - type: number
            - type: 'null'
          title: Remaining Hours Per Month
        tickets:
          title: Tickets
          type: integer
        tickets_queued:
          title: Tickets Queued
          type: integer
        tickets_unmatched:
          title: Tickets Unmatched
          type: integer
        weeks:
          items:
            $ref: '#/components/schemas/CoverageWeekReport'
          title: Weeks
          type: array
        window_end:
          title: Window End
          type: string
        window_start:
          title: Window Start
          type: string
      required:
        - days
        - window_start
        - window_end
        - has_catalog
        - nightly_enabled
        - tickets
        - tickets_unmatched
        - tickets_queued
        - coverage_pct
        - effort_hours_per_month
        - remaining_hours_per_month
        - last_judged_at
        - problems
        - weeks
        - agents
        - credits_consumed
        - recommendation_summary
      title: ProblemCoverageReport
      type: object
    SuccessMeta:
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
        request_id:
          format: uuid
          type: string
        timings_ms:
          additionalProperties:
            type: number
          type: object
        warnings:
          description: >-
            Non-fatal warnings about the created/updated resource (e.g. an
            unhealthy PSA callback).
          items:
            type: string
          type: array
      required:
        - request_id
        - timings_ms
      type: object
    ErrorEnvelope:
      properties:
        error:
          properties:
            code:
              description: Stable machine-readable error code.
              type: string
            details:
              additionalProperties: true
              type: object
            message:
              type: string
          required:
            - code
            - message
          type: object
        meta:
          properties:
            request_id:
              format: uuid
              type:
                - string
                - 'null'
          type: object
      required:
        - error
        - meta
      type: object
    ProblemAgent:
      description: >-
        An agent that did some of the work on the problem's tickets, with the
        number of tickets it worked on.
      properties:
        agent_id:
          title: Agent Id
          type: integer
        agent_name:
          title: Agent Name
          type: string
        tickets:
          title: Tickets
          type: integer
      required:
        - agent_id
        - agent_name
        - tickets
      title: ProblemAgent
      type: object
    ProblemCoverage:
      description: >-
        One recurring problem over the window. `coverage_pct` is the share of
        its ticket work Neo did; a ticket Neo

        never ran on counts as 0. `remaining_hours_per_month` is the technician
        time still left after Neo's work, over

        `effort_hours_per_month`; both null when no map priced the problem or
        nobody logged time on it. `worked_on_at`

        is when a user last marked it as worked on. `coverage_trend_pts`
        compares the last 14 days of the window with

        the 14 before; null when either half has too few tickets.
      properties:
        agents:
          items:
            $ref: '#/components/schemas/ProblemAgent'
          title: Agents
          type: array
        coverage_pct:
          title: Coverage Pct
          type: number
        coverage_trend_pts:
          anyOf:
            - type: number
            - type: 'null'
          title: Coverage Trend Pts
        effort_hours_per_month:
          anyOf:
            - type: number
            - type: 'null'
          title: Effort Hours Per Month
        fix_steps:
          items:
            $ref: '#/components/schemas/ProblemFixStepCoverage'
          title: Fix Steps
          type: array
        hours_per_ticket:
          anyOf:
            - type: number
            - type: 'null'
          title: Hours Per Ticket
        machine_generated:
          title: Machine Generated
          type: boolean
        name:
          title: Name
          type: string
        problem_id:
          title: Problem Id
          type: integer
        recommendation:
          anyOf:
            - $ref: '#/components/schemas/ProblemPlan'
            - type: 'null'
        remaining_hours_per_month:
          anyOf:
            - type: number
            - type: 'null'
          title: Remaining Hours Per Month
        stages:
          items:
            $ref: '#/components/schemas/ProblemStageCoverage'
          title: Stages
          type: array
        tickets:
          title: Tickets
          type: integer
        tickets_per_month:
          title: Tickets Per Month
          type: number
        tickets_queued:
          title: Tickets Queued
          type: integer
        tickets_with_neo:
          title: Tickets With Neo
          type: integer
        worked_on_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Worked On At
      required:
        - problem_id
        - name
        - machine_generated
        - tickets
        - tickets_per_month
        - tickets_with_neo
        - tickets_queued
        - coverage_pct
        - coverage_trend_pts
        - hours_per_ticket
        - effort_hours_per_month
        - remaining_hours_per_month
        - worked_on_at
        - stages
        - fix_steps
        - agents
        - recommendation
      title: ProblemCoverage
      type: object
    CoverageWeekReport:
      description: >-
        One calendar week (Monday to Sunday, UTC): the desk coverage over the
        tickets created in it, null when it has

        no counted ticket, and the points each agent accounts for.
      properties:
        agents:
          items:
            $ref: '#/components/schemas/CoverageWeekAgent'
          title: Agents
          type: array
        coverage_pct:
          anyOf:
            - type: number
            - type: 'null'
          title: Coverage Pct
        tickets:
          title: Tickets
          type: integer
        week_start:
          title: Week Start
          type: string
      required:
        - week_start
        - tickets
        - coverage_pct
        - agents
      title: CoverageWeekReport
      type: object
    Pagination:
      properties:
        has_more:
          type: boolean
        next_cursor:
          type:
            - string
            - 'null'
      required:
        - next_cursor
        - has_more
      type: object
    ProblemFixStepCoverage:
      properties:
        coverage_pct:
          title: Coverage Pct
          type: number
        id:
          title: Id
          type: string
        text:
          title: Text
          type: string
      required:
        - id
        - text
        - coverage_pct
      title: ProblemFixStepCoverage
      type: object
    ProblemPlan:
      description: >-
        Neo's plan to raise the coverage of one problem, written nightly.
        `agent_ids` are the existing agents the

        plan changes (empty for a new agent); `expected_gain_pts` the coverage
        points the whole plan should add.
      properties:
        agent_ids:
          items:
            type: integer
          title: Agent Ids
          type: array
        changes:
          items:
            $ref: '#/components/schemas/ProblemPlanChange'
          title: Changes
          type: array
        created_at:
          title: Created At
          type: string
        expected_gain_pts:
          title: Expected Gain Pts
          type: integer
        plan:
          title: Plan
          type: string
        summary:
          title: Summary
          type: string
      required:
        - summary
        - plan
        - changes
        - expected_gain_pts
        - agent_ids
        - created_at
      title: ProblemPlan
      type: object
    ProblemStageCoverage:
      description: >-
        One stage of the ticket work on a problem: its share of the effort, and
        the share of it Neo did.
      properties:
        coverage_pct:
          title: Coverage Pct
          type: number
        stage:
          $ref: '#/components/schemas/TicketStage'
        weight_pct:
          title: Weight Pct
          type: number
      required:
        - stage
        - weight_pct
        - coverage_pct
      title: ProblemStageCoverage
      type: object
    CoverageWeekAgent:
      properties:
        agent_id:
          title: Agent Id
          type: integer
        pts:
          title: Pts
          type: number
      required:
        - agent_id
        - pts
      title: CoverageWeekAgent
      type: object
    ProblemPlanChange:
      description: >-
        One change of a plan: a short title, what to carry out, and the stages
        or fix steps it raises.
      properties:
        covers:
          items:
            type: string
          title: Covers
          type: array
        detail:
          title: Detail
          type: string
        title:
          title: Title
          type: string
      required:
        - title
        - detail
        - covers
      title: ProblemPlanChange
      type: object
    TicketStage:
      description: >-
        The stages of a ticket's life. FIX stands for the problem's own fix
        steps.
      enum:
        - TRIAGE
        - DISPATCH
        - DIAGNOSE
        - FIX
        - INFORM
        - DOCUMENT
        - CLOSE
      title: TicketStage
      type: string
  securitySchemes:
    bearerAuth:
      description: >-
        `Authorization: Bearer <token>` where `<token>` is either a
        `neo_sk_<env>_<secret>` API key (service account) or a Microsoft Entra
        ID access token (dashboard user).
      scheme: bearer
      type: http

````

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