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

# Report run activity

> A daemon sends a batch of run events for the live timeline (phase started, input
required, run completed, …). They are stored, sent to everyone watching Stream run
activity, and lifecycle events update the run's state. Events for a run CliqHub does not
know are dropped (`dropped: true`) so the daemon stops resending them.

Daemon push: requires the daemon's realm token (`cliq_dt_…`) for the realm that owns the run given by `run_id`.



## OpenAPI

````yaml /openapi/hub-by-tag/hub-runs.yaml post /v1/runs/report_activity
openapi: 3.0.3
info:
  title: 'CliqHub API: Runs'
  version: 1.0.0
  description: >-
    Runs of a team on a daemon. People start runs (Start a run), follow them
    (Get a run, Stream

    run activity, Search run logs, Get run telemetry), and control them (Cancel
    a run, Resume a

    run, Supply run inputs). CliqHub hands each control to the run's daemon,
    which must be

    online: when it is not, the call fails with a `run/daemon_offline` or
    `run/daemon_stranded`

    conflict (cancel instead marks the run cancelled on CliqHub).


    Daemons report what happens during a run through the other endpoints here,
    with their realm

    token: Record a new run, Update run status, Complete a run, and three
    separate channels for

    run activity (the live timeline), run telemetry (token usage and traces) and
    run logs (text).
servers:
  - url: https://{host}
    variables:
      host:
        default: cliqhub.io
        description: CliqHub host
security: []
tags:
  - name: Runs
    description: >-
      Runs of a team on a daemon. People start runs (Start a run), follow them
      (Get a run, Stream

      run activity, Search run logs, Get run telemetry), and control them
      (Cancel a run, Resume a

      run, Supply run inputs). CliqHub hands each control to the run's daemon,
      which must be

      online: when it is not, the call fails with a `run/daemon_offline` or
      `run/daemon_stranded`

      conflict (cancel instead marks the run cancelled on CliqHub).


      Daemons report what happens during a run through the other endpoints here,
      with their realm

      token: Record a new run, Update run status, Complete a run, and three
      separate channels for

      run activity (the live timeline), run telemetry (token usage and traces)
      and run logs (text).
paths:
  /v1/runs/report_activity:
    post:
      tags:
        - Runs
      summary: Report run activity
      description: >-
        A daemon sends a batch of run events for the live timeline (phase
        started, input

        required, run completed, …). They are stored, sent to everyone watching
        Stream run

        activity, and lifecycle events update the run's state. Events for a run
        CliqHub does not

        know are dropped (`dropped: true`) so the daemon stops resending them.


        Daemon push: requires the daemon's realm token (`cliq_dt_…`) for the
        realm that owns the run given by `run_id`.
      operationId: POST_v1_runs_report_activity
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                run_id:
                  type: string
                  minLength: 1
                  description: The run.
                daemon_id:
                  type: string
                  nullable: true
                  description: The reporting daemon.
                realm_id:
                  type: string
                  nullable: true
                  description: The run's realm, when known.
                events:
                  type: array
                  items:
                    type: object
                    properties:
                      event_type:
                        type: string
                        minLength: 1
                      phase:
                        type: string
                        nullable: true
                      agent:
                        type: string
                        nullable: true
                      payload_json:
                        type: string
                        nullable: true
                      created_at:
                        type: number
                    required:
                      - event_type
                      - created_at
                  description: >-
                    Events, each with `event_type`, `created_at` (epoch
                    milliseconds), and optionally `phase`, `agent` and
                    `payload_json` (a JSON string).
                replay:
                  type: boolean
                  description: '`true` when resending events after a reconnect.'
              required:
                - run_id
                - events
            examples:
              default:
                value:
                  run_id: 0c8d7e6f-5a4b-4c3d-9e2f-1a0b9c8d7e6f
                  daemon_id: 7d1c2b3a-4e5f-4a6b-8c7d-9e0f1a2b3c4d
                  events:
                    - event_type: phase.completed
                      phase: review
                      agent: claude-code
                      payload_json: '{"message":"3 findings"}'
                      created_at: 1759834480000
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - count
                properties:
                  ok:
                    type: boolean
                    enum:
                      - true
                    description: Always `true` on success.
                  count:
                    type: number
                    description: Events stored.
                  replay:
                    type: boolean
                    description: Echo of `replay`.
                  dropped:
                    type: boolean
                    description: >-
                      Present and `true` when the run does not exist on CliqHub
                      and the events were dropped.
              example:
                ok: true
                count: 1
                replay: false
        '401':
          description: >-
            `unauthorized`: No `Authorization` header, or the token is
            malformed, expired or revoked.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HubErr'
              examples:
                unauthorized:
                  summary: unauthorized
                  value:
                    ok: false
                    error:
                      code: unauthorized
                      message: Authentication required
        '403':
          description: >-
            `forbidden`: You can see the record but your role in its realm is
            too low or lacks the required permission.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HubErr'
              examples:
                forbidden:
                  summary: forbidden
                  value:
                    ok: false
                    error:
                      code: forbidden
                      message: You do not have access to do this
        '404':
          description: >-
            `not_found`: The run does not exist or is in a realm you cannot see
            (404 rather than 403, so its existence is not revealed).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HubErr'
              examples:
                not_found:
                  summary: not_found
                  value:
                    ok: false
                    error:
                      code: not_found
                      message: Not found
        '422':
          description: >-
            `invalid_params`: The body fails the request schema: a field is
            missing or has the wrong type. `details.issues` lists each problem.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HubErr'
              examples:
                invalid_params:
                  summary: invalid_params
                  value:
                    ok: false
                    error: Required
                    code: invalid_params
                    details:
                      issues:
                        - field: run_id
                          message: Required
        '500':
          description: >-
            `internal_error`: An unexpected server fault. Retry later; if it
            persists, report it with the time of the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HubErr'
              examples:
                internal_error:
                  summary: internal_error
                  value:
                    ok: false
                    error: Internal server error
                    code: internal_error
      security:
        - BearerAuth: []
components:
  schemas:
    HubErr:
      type: object
      required:
        - ok
        - error
      description: >-
        Every failure. Route-policy denials (401/403/404, and 400 when neither
        realm_id nor org_id was sent) answer `error` as `{ code, message }`;
        errors raised by the endpoint answer `error` as the message with the
        code beside it in `code`. Every error has a code. See
        [Errors](/hub-api/errors).
      properties:
        ok:
          type: boolean
          description: Always false on error
        error:
          description: The message, or `{ code, message }` for an access denial.
          oneOf:
            - type: string
            - type: object
              required:
                - code
                - message
              properties:
                code:
                  type: string
                message:
                  type: string
        code:
          type: string
          description: Stable error code of an endpoint error.
        details:
          type: object
          additionalProperties: true
          description: Structured detail, when there is some.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: cliq_tok_* | cliq_dt_*
      description: >-
        User PAT (`cliq_tok_…`, including session-scoped) or realm token
        (`cliq_dt_…`).

````

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