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

> Page through the people in a sequence with status, fit, judgment tallies, projected columns and a per-step journey. Filter by status, judgment band or batch key.

# List a campaign's people (paginated summary rows)



## OpenAPI

````yaml get /sequences/{sequenceId}/contacts
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}/contacts:
    get:
      summary: List a campaign's people (paginated summary rows)
      description: >-
        Summary rows for the sequence audience — identities, status, fit,
        judgment tallies. Sorted fit-highest-first (never-judged last); pass
        `next_cursor` back as `cursor` for the next page. Verdict paragraphs and
        enrichment live on the per-person detail read.
      operationId: listSequenceContacts
      parameters:
        - schema:
            type: string
            enum:
              - candidate
              - active
              - parked
              - exited
              - completed
          in: query
          name: status
          required: false
        - schema:
            type: string
            enum:
              - qualified
              - not_qualified
              - never_judged
          in: query
          name: band
          required: false
        - schema:
            type: string
            minLength: 1
            maxLength: 200
          in: query
          name: batch_key
          required: false
        - schema:
            type: string
            maxLength: 500
          in: query
          name: cursor
          required: false
        - schema:
            type: integer
            minimum: 1
            maximum: 200
          in: query
          name: limit
          required: false
        - 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/ListSequenceContactsDto'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDto'
components:
  schemas:
    ListSequenceContactsDto:
      $schema: https://json-schema.org/draft/2020-12/schema
      $id: '#/components/schemas/ListSequenceContactsDto'
      type: object
      properties:
        contacts:
          type: array
          items:
            type: object
            properties:
              contact_id:
                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)$
              display_name:
                anyOf:
                  - type: string
                  - type: 'null'
              avatar_url:
                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'
              status:
                type: string
                enum:
                  - candidate
                  - active
                  - parked
                  - exited
                  - completed
              park_reason:
                anyOf:
                  - type: string
                  - type: 'null'
              exit_reason:
                anyOf:
                  - type: string
                  - type: 'null'
              fit:
                anyOf:
                  - type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  - type: 'null'
              fit_reason:
                anyOf:
                  - type: string
                  - type: 'null'
              batch_key:
                anyOf:
                  - type: string
                  - type: 'null'
              source:
                type: string
              next_step_index:
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
              qualification:
                anyOf:
                  - type: object
                    properties:
                      run_id:
                        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)$
                      judged_at:
                        type: string
                        format: date-time
                        pattern: >-
                          ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                      input_hash:
                        type: string
                      counts:
                        type: object
                        properties:
                          must_total:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          must_passed:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          must_failed:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          must_unsure:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          nice_total:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          nice_weight_total:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          nice_weight_earned:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                          nice_unsure:
                            type: integer
                            minimum: -9007199254740991
                            maximum: 9007199254740991
                        required:
                          - must_total
                          - must_passed
                          - must_failed
                          - must_unsure
                          - nice_total
                          - nice_weight_total
                          - nice_weight_earned
                          - nice_unsure
                        additionalProperties: false
                    required:
                      - run_id
                      - judged_at
                      - input_hash
                      - counts
                    additionalProperties: false
                  - type: 'null'
              columns:
                type: object
                propertyNames:
                  type: string
                additionalProperties: {}
              journey:
                type: array
                items:
                  type: object
                  properties:
                    step_index:
                      type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    channel:
                      type: string
                    state:
                      type: string
                      enum:
                        - not_reached
                        - waiting
                        - parked
                        - deferred
                        - skipped
                        - sent
                        - delivered
                        - read
                        - replied
                        - answered
                        - no_answer
                        - busy
                        - failed
                    at:
                      anyOf:
                        - type: string
                          format: date-time
                          pattern: >-
                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                        - type: 'null'
                    session_id:
                      anyOf:
                        - type: string
                        - type: 'null'
                    session_ticket_number:
                      anyOf:
                        - type: integer
                          minimum: -9007199254740991
                          maximum: 9007199254740991
                        - type: 'null'
                    reason:
                      type: string
                  required:
                    - step_index
                    - channel
                    - state
                    - at
                    - session_id
                    - session_ticket_number
                  additionalProperties: false
              created_at:
                type: string
                format: date-time
                pattern: >-
                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
              updated_at:
                type: string
                format: date-time
                pattern: >-
                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
            required:
              - contact_id
              - display_name
              - avatar_url
              - phone
              - email
              - whatsapp_user_id
              - status
              - park_reason
              - exit_reason
              - fit
              - fit_reason
              - batch_key
              - source
              - next_step_index
              - qualification
              - columns
              - journey
              - created_at
              - updated_at
            additionalProperties: false
        next_cursor:
          anyOf:
            - type: string
            - type: 'null'
        total:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Total rows matching the filters (ignores pagination).
      required:
        - contacts
        - next_cursor
        - total
      additionalProperties: false
    ErrorDto:
      type: object
      properties:
        statusCode:
          type: integer
        message:
          type: string
        error:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````