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

# List Org Runs

> List runs across every team in an organization, filtered by status, agent, team, source, evaluation issues and time. Intended for external monitoring: one call covers the whole org instead of one per team. Requires an organization Admin, Executive, or Owner role, and an API key scoped to all teams you can access — a key pinned to a single team is rejected, because this endpoint spans every team in the organization.



## OpenAPI

````yaml https://api.duvo.ai/v2/documentation/mintlify.json get /v2/organizations/{orgId}/runs
openapi: 3.0.3
info:
  title: Duvo Public API
  description: >-
    Public API for programmatic access to Duvo. Authenticate with API keys
    created in the Duvo dashboard.


    ## Rate limits


    Requests are counted per API key. Every response advertises the quota with
    the IETF RateLimit fields, so a client can self-throttle without waiting for
    a rejection:


    - `RateLimit-Policy: "default";q=<quota>;w=<window seconds>` — the policy in
    force: `q` requests per `w` seconds.

    - `RateLimit: "default";r=<remaining>;t=<seconds>` — the live state: `r`
    requests left, quota resetting in `t` seconds.

    - Read the quota from the headers rather than hard-coding it; it differs per
    environment.

    - The same numbers are also sent as `ratelimit-limit`, `ratelimit-remaining`
    and `ratelimit-reset`.


    Once the quota is exhausted the API answers `429 Too Many Requests` with
    `Retry-After` set to the seconds to wait; honor it instead of retrying
    immediately.
  version: 1.0.0
servers:
  - url: https://api.duvo.ai
    description: Production server
security: []
tags:
  - name: Runs
    description: Start, monitor, and manage agent runs (Runs in the Duvo UI)
  - name: Sandboxes
    description: Create sandboxes and upload files for agent runs
  - name: Queues
    description: Manage queues and their agent bindings
  - name: Cases
    description: Create, list, and manage cases and their labels within queues
  - name: Case Approvals
    description: Submit decisions on pending case approval requests issued by an agent run
  - name: Case Attachments
    description: Upload, list, download, and remove the files attached to a case
  - name: Automations
    description: >-
      List and manage automations — the workspace container that groups the
      agents and queues making up one end-to-end process
  - name: Agents
    description: Create and manage agents for automation workloads
  - name: Revisions
    description: Create and manage agent revisions — the underlying Setup for an Agent
  - name: Agent Folders
    description: Organize agents into folders
  - name: Agent Memory
    description: Read an agent's memory files (the Memory feature in the Duvo UI)
  - name: Suggestions
    description: >-
      List, apply, and dismiss an Agent's improvement suggestions (the
      suggestions inbox in the Duvo UI)
  - name: Notifications
    description: >-
      List, read, dismiss, and clear the authenticated user's team notifications
      (the Notification Center in the Duvo UI)
  - name: Schedules
    description: List schedules configured for an agent
  - name: Duvo Pulse
    description: >-
      Create, list, iterate on, and delete Duvo Pulse dashboards — live,
      agent-generated visualizations of your Duvo data
  - name: Case Triggers
    description: >-
      Configure case triggers that automatically dispatch agent runs (Runs in
      the Duvo UI) for cases added to a queue
  - name: Triggers
    description: >-
      Configure event triggers that start a Run automatically when an external
      event fires (e.g. an email arrives, a Linear issue is created, or a file
      changes in Google Drive)
  - name: Skills
    description: Manage team and system skills (reusable knowledge packs).
  - name: Files
    description: Manage team files.
  - name: Plugins
    description: Discover plugins that can be referenced from a revision.
  - name: Organizations
    description: Inspect organizations you belong to and the teams within them
  - name: Team
    description: Inspect the team and members associated with the API key
  - name: Invites
    description: >-
      Invite people to a team — one at a time or in bulk, scoped to a Clarity
      process or the whole team — and manage the team's shareable invite link
  - name: Integrations
    description: Browse the team's catalog of available integration types
  - name: Connections
    description: Manage your connected integrations
  - name: Credentials
    description: >-
      Manage logins (domain + username + password + TOTP) used by agents to sign
      in to websites and desktop applications, and attach them to assignment
      revisions
  - name: Secrets
    description: >-
      Manage env-var secrets injected into runs, and attach them to assignment
      revisions. Only metadata is exposed; values are never returned
  - name: Revision Integrations
    description: >-
      Attach integrations to assignment revisions, pin specific connections, and
      link queues
  - name: ClarityV2
    description: >-
      Manage Clarity v2 process snapshots, automation proposals, and the
      extra-capture-request follow-up loop
paths:
  /v2/organizations/{orgId}/runs:
    get:
      tags:
        - Organizations
      summary: List Org Runs
      description: >-
        List runs across every team in an organization, filtered by status,
        agent, team, source, evaluation issues and time. Intended for external
        monitoring: one call covers the whole org instead of one per team.
        Requires an organization Admin, Executive, or Owner role, and an API key
        scoped to all teams you can access — a key pinned to a single team is
        rejected, because this endpoint spans every team in the organization.
      operationId: listOrgRuns
      parameters:
        - schema:
            default: 20
            type: integer
            minimum: 1
            maximum: 500
          in: query
          name: limit
          required: false
          description: >-
            Number of runs per page (1-500, default 20). The cap is higher than
            the team runs endpoint's because this route serves bulk export: at
            100 requests a minute per key, page size is what bounds how fast a
            month of runs can be pulled.
        - schema:
            type: string
            minLength: 1
          in: query
          name: cursor
          required: false
          description: >-
            Resume after the run a previous page ended on: pass the
            `next_cursor` that page returned, with the same filters and
            sort_order. Runs created or resolved in between cannot shift a
            boundary you have already passed, so a sweep sees every run exactly
            once, and a sweep that started under the default 7-day window keeps
            that window on every page. This list has no offset parameter:
            skipping rows costs the database every skipped row, and a run
            created between two requests shifts every later offset by one, so an
            offset sweep can repeat or miss a run. 400 when the value is not a
            cursor this endpoint issued.
        - schema:
            default: desc
            type: string
            enum:
              - asc
              - desc
          in: query
          name: sort_order
          required: false
          description: Sort direction on created_at (default desc)
        - schema:
            type: string
            enum:
              - not_started
              - pending
              - starting
              - running
              - waiting
              - completed
              - failed
              - interrupted
              - stopped
              - needs_attention
          in: query
          name: status
          required: false
          description: >-
            Filter to runs with this status. `needs_attention` is the monitoring
            status: runs that are waiting on a human or failed, plus runs whose
            latest evaluation flagged a critical issue — a run can finish as
            `completed` and still have accomplished nothing.
        - schema:
            type: string
            format: uuid
          in: query
          name: team_id
          required: false
          description: Filter to runs on this team
        - schema:
            type: string
            format: uuid
          in: query
          name: agent_id
          required: false
          description: Filter to runs for this agent
        - schema:
            type: string
          in: query
          name: source
          required: false
          description: Filter to runs created from this source (e.g. api, scheduling)
        - schema:
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: has_issues
          required: false
          description: >-
            Filter on the run's latest successful evaluation: true returns only
            runs it flagged, false only runs it did not. Only the latest
            evaluation counts — an older flag does not match — and a run whose
            latest evaluation errored, or that has none, counts as unflagged.
            Omit to return both.
        - schema:
            type: string
            enum:
              - critical
              - medium
              - low
          in: query
          name: issue_severity
          required: false
          description: >-
            Only runs whose latest successful evaluation has at least one
            failing rubric at this severity (critical | medium | low). Implies
            has_issues.
        - schema:
            type: string
            format: date-time
          in: query
          name: created_after
          required: false
          description: >-
            Return runs created at or after this ISO-8601 timestamp. Every run
            has a creation time, so this is the window that returns all runs in
            a period whatever state they reached — unlike the started and
            completed windows below, which exclude runs that never started and
            runs still in flight respectively. When the request carries no lower
            time bound (`created_after`, `started_after`, `completed_after` or
            `since`), this defaults to 7 days ago and `default_window_applied`
            is true in the response: an organization's run history is unbounded,
            and a monitor wants what is recent. An upper bound alone keeps the
            default floor. Pass any lower bound to replace it.
        - schema:
            type: string
            format: date-time
          in: query
          name: created_before
          required: false
          description: >-
            Return runs created before this ISO-8601 timestamp (exclusive). Pair
            with `created_after` for a period. A closed creation window is also
            the stable one to paginate: results are ordered by creation time, so
            runs arriving mid-sweep cannot shift a closed window's pages.
        - schema:
            type: string
            format: date-time
          in: query
          name: started_after
          required: false
          description: >-
            Return runs that started at or after this ISO-8601 timestamp. Runs
            that never started are excluded. Pair with `started_before` to bound
            a stuck-run query to a window — without a lower bound,
            `status=running` also counts every run left running months ago.
        - schema:
            type: string
            format: date-time
          in: query
          name: started_before
          required: false
          description: >-
            Return runs that started before this ISO-8601 timestamp. Combine
            with status=running to find stuck runs — `since`/`until` filter on
            completion, so they never match a run that is still going.
        - schema:
            type: string
            format: date-time
          in: query
          name: completed_after
          required: false
          description: >-
            Return runs completed at or after this ISO-8601 timestamp. Runs that
            have not completed are excluded, including every stuck one — reach
            for `started_after`/`started_before` to bound those. Alias of
            `since`; pass one or the other, not both.
        - schema:
            type: string
            format: date-time
          in: query
          name: completed_before
          required: false
          description: >-
            Return runs completed before this ISO-8601 timestamp (exclusive).
            Runs that have not completed are excluded. Alias of `until`; pass
            one or the other, not both.
        - schema:
            type: string
            format: date-time
          in: query
          name: since
          required: false
          description: >-
            Alias of `completed_after`, kept because it is the name the public
            team runs endpoint ships. Prefer `completed_after`: this endpoint
            carries a creation and a start window too, and only the column-named
            pair says which one this is.
        - schema:
            type: string
            format: date-time
          in: query
          name: until
          required: false
          description: >-
            Alias of `completed_before`, kept because it is the name the public
            team runs endpoint ships. Prefer `completed_before`.
        - schema:
            default: 'false'
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: count_only
          required: false
          description: >-
            Skip row selection and enrichment. The normal list response shape is
            returned with an empty row array and the matching total.
        - schema:
            default: 'false'
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: include_total
          required: false
          description: >-
            Return `total`, the count of every matching run ignoring pagination.
            Off by default: counting walks every match where the page stops at
            `limit`, so on a large organization it costs orders of magnitude
            more than the rows themselves. Ask for it when you are driving a
            pager, not when you are polling. Implied by `count_only`.
        - schema:
            type: string
            format: uuid
          in: path
          name: orgId
          required: true
          description: The organization's unique identifier
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  runs:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          format: uuid
                          description: Unique run identifier
                        status:
                          type: string
                          description: Current run status
                        source:
                          nullable: true
                          description: What triggered the run
                          type: string
                        team_id:
                          type: string
                          format: uuid
                          description: >-
                            Team that owns the run. This is the run's own team,
                            which a cross-team transfer pins to the source team
                            — so it is not always the team the agent belongs to
                            now.
                        team_name:
                          nullable: true
                          description: >-
                            Name of that team, or null when the team no longer
                            exists — a run stays pinned to the team that owned
                            it, and that team can since have been deleted.
                          type: string
                        agent_id:
                          type: string
                          format: uuid
                          description: Agent that ran
                        agent_name:
                          type: string
                          description: Name of that agent
                        build_id:
                          nullable: true
                          description: Revision the run executed
                          type: string
                          format: uuid
                        automation_id:
                          nullable: true
                          description: Owning automation, if any
                          type: string
                          format: uuid
                        automation_name:
                          nullable: true
                          description: Name of that automation
                          type: string
                        user_id:
                          nullable: true
                          description: User the run belongs to, if any
                          type: string
                          format: uuid
                        created_at:
                          type: string
                          description: ISO 8601 creation timestamp
                        updated_at:
                          type: string
                          description: ISO 8601 last-update timestamp
                        started_at:
                          nullable: true
                          description: ISO 8601 start timestamp
                          type: string
                        completed_at:
                          nullable: true
                          description: ISO 8601 completion timestamp
                          type: string
                      required:
                        - id
                        - status
                        - source
                        - team_id
                        - team_name
                        - agent_id
                        - agent_name
                        - build_id
                        - automation_id
                        - automation_name
                        - user_id
                        - created_at
                        - updated_at
                        - started_at
                        - completed_at
                      additionalProperties: false
                  total:
                    nullable: true
                    description: >-
                      Total runs matching the filters, ignoring pagination. Null
                      unless `include_total=true` or `count_only=true` — null
                      means not requested, distinct from a count of 0.
                    type: number
                  limit:
                    type: number
                    description: The limit that was applied
                  has_more:
                    type: boolean
                    description: >-
                      Whether another page exists past this one, determined by
                      looking one row ahead rather than inferred from a full
                      page. False on a count_only response.
                  next_cursor:
                    nullable: true
                    description: >-
                      Pass as `cursor` (same filters, same sort_order) to fetch
                      the next page. Null when `has_more` is false. Exact
                      continuation from the last run on this page, unaffected by
                      runs created or resolved in the meantime.
                    type: string
                  created_after:
                    nullable: true
                    description: >-
                      The creation lower bound the query ran with, as ISO 8601:
                      the caller's `created_after`, or 7 days ago when the
                      request carried no time bound at all. Null when the caller
                      bounded the query on another timestamp only.
                    type: string
                  default_window_applied:
                    type: boolean
                    description: >-
                      True when the request carried no time bound and the 7-day
                      creation window was applied for it. A caller that meant
                      "everything" should pass an explicit `created_after`.
                required:
                  - runs
                  - total
                  - limit
                  - has_more
                  - next_cursor
                  - created_after
                  - default_window_applied
                additionalProperties: false
        '400':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  message:
                    type: string
                required:
                  - error
                additionalProperties: false
        '401':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  message:
                    type: string
                required:
                  - error
                additionalProperties: false
        '403':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  message:
                    type: string
                required:
                  - error
                additionalProperties: false
        '500':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  message:
                    type: string
                required:
                  - error
                additionalProperties: false
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key authentication. Get your API key from the Duvo dashboard.

````