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

# List captures

> Lists captures in stream order (oldest first), full documents included — one request is a complete ingest step. Page with `after=<pageInfo.endCursor>` until `hasNextPage` is `false`, persisting the cursor after each page. The stream never emits a capture behind a cursor you have already advanced past.




## OpenAPI

````yaml /api-reference/openapi.yaml get /api/v1/captures
openapi: 3.1.0
info:
  title: Parable API
  version: 1.0.0
  description: >
    Programmatic access to finished Parable transcripts. Every capture that
    finishes processing with a non-empty transcript enters an append-only stream
    you can poll with a single stored cursor.
servers:
  - url: https://api.parable.so
security:
  - bearerAuth: []
paths:
  /api/v1/captures:
    get:
      summary: List captures
      description: >
        Lists captures in stream order (oldest first), full documents included —
        one request is a complete ingest step. Page with
        `after=<pageInfo.endCursor>` until `hasNextPage` is `false`, persisting
        the cursor after each page. The stream never emits a capture behind a
        cursor you have already advanced past.
      operationId: listCaptures
      parameters:
        - name: limit
          in: query
          required: false
          description: Page size. Default 50, maximum 100.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
        - name: after
          in: query
          required: false
          description: >
            Opaque cursor from a previous response's `pageInfo.endCursor`. Omit
            to start from the beginning of history. Treat cursors as black boxes
            — store and echo them, never interpret them.
          schema:
            type: string
      responses:
        '200':
          description: A page of captures.
          content:
            application/json:
              schema:
                type: object
                required:
                  - captures
                  - pageInfo
                properties:
                  captures:
                    type: array
                    items:
                      $ref: '#/components/schemas/CaptureDocument'
                  pageInfo:
                    $ref: '#/components/schemas/PageInfo'
        '400':
          description: Invalid `limit` or `after` parameter.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Missing, unknown, or deleted API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    CaptureDocument:
      type: object
      description: One finished capture with its full transcript.
      required:
        - id
        - workspace_id
        - mode
        - title
        - summary
        - started_at
        - ended_at
        - duration_ms
        - device
        - participants
        - segments
        - transcript_text
        - calendar_event
        - emitted_at
      properties:
        id:
          type: string
          format: uuid
          description: Capture id — the stable key for deduplication.
        workspace_id:
          type: string
          format: uuid
        mode:
          type: string
          enum:
            - ambient
            - manual
          description: >
            `ambient` = device-initiated on speech; `manual` = user-initiated
            recording.
        title:
          type: string
          description: |
            Model-generated after processing; falls back to a generic label.
        summary:
          type:
            - string
            - 'null'
          description: Model-generated; may be null.
        started_at:
          type: string
          format: date-time
        ended_at:
          type:
            - string
            - 'null'
          format: date-time
        duration_ms:
          type:
            - integer
            - 'null'
        device:
          type: object
          description: >
            The capturing device — the room, in practice: devices are named
            after where they live.
          required:
            - id
            - name
          properties:
            id:
              type: string
              format: uuid
            name:
              type:
                - string
                - 'null'
        participants:
          type: array
          items:
            $ref: '#/components/schemas/Participant'
        segments:
          type: array
          description: >
            The source of truth — time-ordered utterances with speaker
            attribution.
          items:
            $ref: '#/components/schemas/Segment'
        transcript_text:
          type: string
          description: >
            Convenience plain-text rendering of the segments, one
            speaker-labeled line per consecutive same-speaker run.
        calendar_event:
          type: 'null'
          description: >
            Reserved for the Google Calendar integration; always null today.
            Additive later — no schema break.
        emitted_at:
          type: string
          format: date-time
          description: When this document was rendered.
    PageInfo:
      type: object
      required:
        - endCursor
        - hasNextPage
      properties:
        endCursor:
          type:
            - string
            - 'null'
          description: >
            Opaque cursor for the next page. Null when the page is empty — keep
            your previous cursor.
        hasNextPage:
          type: boolean
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - message
            - status
          properties:
            message:
              type: string
            status:
              type: integer
    Participant:
      type: object
      description: One detected speaker in the capture.
      required:
        - label
        - name
        - email
        - matched
        - match_confidence
        - speech_ms
      properties:
        label:
          type: string
          description: The pipeline's local label for this speaker.
        name:
          type:
            - string
            - 'null'
          description: Workspace member name when matched; null otherwise.
        email:
          type:
            - string
            - 'null'
          description: Workspace member email when matched; null otherwise.
        matched:
          type: boolean
          description: Whether the voice resolved to a workspace member.
        match_confidence:
          type:
            - number
            - 'null'
          description: Voice-match confidence in [0, 1]; null when unmatched.
        speech_ms:
          type: integer
          description: Total speaking time in milliseconds.
    Segment:
      type: object
      required:
        - start_ms
        - end_ms
        - speaker
        - text
      properties:
        start_ms:
          type: integer
        end_ms:
          type: integer
        speaker:
          type:
            - string
            - 'null'
          description: Speaker name or label; null for unattributed audio.
        text:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        Workspace API key (`parable_...`), minted in the Parable app under
        Settings → API.

````