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

> Read one sequence’s numbers plus who will never be reached and who is waiting on a human, with reasons. Use to act on stuck people rather than just count them.

# Get an outbound sequence's numbers



## OpenAPI

````yaml get /sequences/{sequenceId}/stats
openapi: 3.1.0
info:
  title: OpenCX API
  description: >

    OpenCX is an AI-powered, all-in-one platform for customer support and
    outbound communications.


    Use this API to manage your OpenCX organization's AI agents, actions,
    conversations, contacts, and more.


    To get started, generate a new API key from the dashboard.


    ## Authentication

    All API endpoints require authentication using a Bearer token. You can
    generate an API key from your OpenCX dashboard.


    ## Rate Limiting

    API requests are rate limited to ensure fair usage. The current limits are:

    - 100 requests per minute for standard endpoints

    - 1000 requests per minute for streaming endpoints


    ## Error Handling

    The API uses standard HTTP status codes and returns detailed error messages
    in the response body.
  version: 1.0-beta
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: http://localhost:8080
    description: Development
  - url: https://api.open.cx
    description: Production
security:
  - bearerAuth: []
paths:
  /sequences/{sequenceId}/stats:
    get:
      summary: Get an outbound sequence's numbers
      description: >-
        How many people are enrolled, how many a launch would reach, how many
        have been contacted, how many answered, how many will never be reached,
        and how many are waiting on a human. The last two also name the people
        themselves, so the caller can act on them. The same rollup the list rows
        carry, addressed singly — every surface reads these through one
        implementation.
      operationId: getSequenceStats
      parameters:
        - schema:
            type: string
            format: uuid
            pattern: >-
              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
          in: path
          name: sequenceId
          required: true
          description: The unique identifier of the sequence
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SequenceStatsDto'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
components:
  schemas:
    SequenceStatsDto:
      $schema: https://json-schema.org/draft/2020-12/schema
      $id: '#/components/schemas/SequenceStatsDto'
      type: object
      properties:
        people:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Everyone this sequence is for: enrolled minus the people the judge
            turned down. Not scoped to a status — someone who replied, finished
            or opted out was still part of the audience. Always equals will_send
            + might_send.
        will_send:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The JUDGED half of `people`, not "everyone here passed": those who
            cleared the arming floor, plus anyone a later run scored below it
            after we had already armed or messaged them — a verdict cannot
            un-send a message. Before launch the two readings coincide, which is
            the only place this is shown as "will send to"; afterwards read
            `in_flight` for what can still happen.
        might_send:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Never judged. These arm too — an unjudged list is user authority.
            For a sequence that has not launched, the audience it would send to
            is will_send + might_send; once it has, some of those people are
            already done and `in_flight` is the forward-looking number.
        rejected:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Judged and turned down BEFORE anything was sent — the exact
            complement of `people`, so the two are `enrolled`. Someone already
            armed when a later run failed them is not here; they stay in the
            audience.
        enrolled:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The whole list, judged-down included — people + rejected.
        has_criteria:
          type: boolean
          description: >-
            Whether there is anything for the judge to work against. Decides
            whether the audience has a split worth showing at all.
        sent:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        replied:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
        wont_reach:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Concluded without ever being reached — journey over, nothing sent.
            Terminal only: parked people and deferrals are excluded, since
            neither is a conclusion. people = sent + wont_reach + (in flight and
            never contacted) — someone mid-sequence has been contacted AND is
            still in flight, so the plain three-term form double counts them.
        needs_you:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Parked: waiting on a human to fix something, after which the journey
            resumes where it stopped. Kept apart from wont_reach because it is a
            call to action, not attrition. A SLICE of the still-in-flight
            people, not a fourth bucket beside them — someone parked after step
            0 is counted here and in `sent`, so do not add this to the others.
        finished:
          type: boolean
          description: >-
            Nothing left in flight and something already went out. Derived,
            never stored — the status stays `active`, so enrolling more people
            revives the sequence on its own.
        busy:
          type: boolean
          description: An enrich or judge run is in flight for this sequence.
        unreachable:
          type: array
          items:
            type: object
            properties:
              contact_id:
                anyOf:
                  - type: string
                  - type: 'null'
              display_name:
                anyOf:
                  - type: string
                  - type: 'null'
              phone:
                anyOf:
                  - type: string
                  - type: 'null'
              email:
                anyOf:
                  - type: string
                  - type: 'null'
              whatsapp_user_id:
                anyOf:
                  - type: string
                  - type: 'null'
              avatar_url:
                anyOf:
                  - type: string
                  - type: 'null'
              reason:
                anyOf:
                  - type: string
                  - type: 'null'
              event:
                anyOf:
                  - type: string
                  - type: 'null'
              step_index:
                anyOf:
                  - type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  - type: 'null'
            required:
              - contact_id
              - display_name
              - phone
              - email
              - whatsapp_user_id
              - avatar_url
              - reason
              - event
              - step_index
            additionalProperties: false
          description: >-
            Who we will never reach, newest first. Capped — the count is on
            `wont_reach`.
        blocked:
          type: array
          items:
            type: object
            properties:
              contact_id:
                anyOf:
                  - type: string
                  - type: 'null'
              display_name:
                anyOf:
                  - type: string
                  - type: 'null'
              phone:
                anyOf:
                  - type: string
                  - type: 'null'
              email:
                anyOf:
                  - type: string
                  - type: 'null'
              whatsapp_user_id:
                anyOf:
                  - type: string
                  - type: 'null'
              avatar_url:
                anyOf:
                  - type: string
                  - type: 'null'
              reason:
                anyOf:
                  - type: string
                  - type: 'null'
              event:
                anyOf:
                  - type: string
                  - type: 'null'
              step_index:
                anyOf:
                  - type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  - type: 'null'
            required:
              - contact_id
              - display_name
              - phone
              - email
              - whatsapp_user_id
              - avatar_url
              - reason
              - event
              - step_index
            additionalProperties: false
          description: >-
            Who is waiting on a human, newest first. Capped — the count is on
            `needs_you`.
      required:
        - people
        - will_send
        - might_send
        - rejected
        - enrolled
        - has_criteria
        - sent
        - replied
        - wont_reach
        - needs_you
        - finished
        - busy
        - unreachable
        - blocked
      additionalProperties: false
    ErrorDto:
      type: object
      properties:
        statusCode:
          type: integer
        message:
          type: string
        error:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````