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

# Catch up on Hug events

> A daemon catches up on its Hugs' events (answers, expiry, cancellation) after a restart, from each Hug's last processed event; up to 500 Hugs per call. Also says how each Hug stands, so one that ended while the daemon was away can end there too.

Daemon only: requires the daemon's realm token (`Authorization: Bearer cliq_dt_…`). User tokens are refused.



## OpenAPI

````yaml /openapi/hub-by-tag/hub-hugs.yaml post /v1/hugs/get_events
openapi: 3.0.3
info:
  title: 'CliqHub API: Hugs'
  version: 1.0.0
  description: >-
    A Hug is a run asking people for input: an agent (a review gate, or its own
    `ctx.ask`) opens

    one with a prompt, context (markdown, files, check results, an earlier
    conversation) and the

    inputs it needs — text, number, boolean, a choice, a file, a channel.
    CliqHub posts it to the

    Hug's channels; anyone it reaches who can view runs in the realm answers on
    the Hug page, and

    can change their answer while it is open. Every answer is sent back to the
    agent, which decides

    when it has heard enough and closes the Hug; it expires after its time (at
    most 7 days).


    Seeing a Hug needs `runs.view` on its realm; answering also needs the Hug to
    be addressed to

    you (your own channel, or one of its shared channels). `create`, `close` and
    `get_events` are

    for daemons only.
servers:
  - url: https://{host}
    variables:
      host:
        default: cliqhub.io
        description: CliqHub host
security: []
tags:
  - name: Hugs
    description: >-
      A Hug is a run asking people for input: an agent (a review gate, or its
      own `ctx.ask`) opens

      one with a prompt, context (markdown, files, check results, an earlier
      conversation) and the

      inputs it needs — text, number, boolean, a choice, a file, a channel.
      CliqHub posts it to the

      Hug's channels; anyone it reaches who can view runs in the realm answers
      on the Hug page, and

      can change their answer while it is open. Every answer is sent back to the
      agent, which decides

      when it has heard enough and closes the Hug; it expires after its time (at
      most 7 days).


      Seeing a Hug needs `runs.view` on its realm; answering also needs the Hug
      to be addressed to

      you (your own channel, or one of its shared channels). `create`, `close`
      and `get_events` are

      for daemons only.
paths:
  /v1/hugs/get_events:
    post:
      tags:
        - Hugs
      summary: Catch up on Hug events
      description: >-
        A daemon catches up on its Hugs' events (answers, expiry, cancellation)
        after a restart, from each Hug's last processed event; up to 500 Hugs
        per call. Also says how each Hug stands, so one that ended while the
        daemon was away can end there too.


        Daemon only: requires the daemon's realm token (`Authorization: Bearer
        cliq_dt_…`). User tokens are refused.
      operationId: POST_v1_hugs_get_events
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                daemon_id:
                  type: string
                  minLength: 1
                  description: The daemon asking (its own Hugs only).
                cursors:
                  type: array
                  items:
                    type: object
                    properties:
                      hug_id:
                        type: string
                        minLength: 1
                      after_seq:
                        type: integer
                    required:
                      - hug_id
                      - after_seq
                  minItems: 1
                  maxItems: 500
                  description: '`{ hug_id, after_seq }` per Hug.'
              required:
                - daemon_id
                - cursors
            examples:
              default:
                value:
                  daemon_id: 7d1c2b3a-4e5f-4a6b-8c7d-9e0f1a2b3c4d
                  cursors:
                    - hug_id: 6c2d1e0f-9a8b-4c7d-8e6f-5a4b3c2d1e0f
                      after_seq: 0
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - data
                properties:
                  ok:
                    type: boolean
                    enum:
                      - true
                    description: Always `true` on success.
                  data:
                    type: object
                    properties:
                      events:
                        type: array
                        items:
                          type: object
                          properties:
                            hug_id:
                              type: string
                            seq:
                              type: integer
                            type:
                              type: string
                              enum:
                                - response
                                - expired
                                - cancelled
                            payload:
                              type: object
                              additionalProperties: true
                      hugs:
                        type: array
                        items:
                          type: object
                          properties:
                            hug_id:
                              type: string
                            status:
                              type: string
                            last_seq:
                              type: integer
                      has_more:
                        type: boolean
              example:
                ok: true
                data:
                  events:
                    - hug_id: 6c2d1e0f-9a8b-4c7d-8e6f-5a4b3c2d1e0f
                      seq: 1
                      type: response
                      payload:
                        response:
                          response_id: 3f2e1d0c-9b8a-4c7d-8e6f-5a4b3c2d1e0f
                          responder:
                            user_id: 9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d
                            name: Sapan
                          via:
                            - security
                          values:
                            decision: approve
                          comment: null
                          responded_at: '2026-10-07T10:20:00Z'
                  hugs:
                    - hug_id: 6c2d1e0f-9a8b-4c7d-8e6f-5a4b3c2d1e0f
                      status: open
                      last_seq: 1
                  has_more: 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`: A user token was used, or the daemon's token belongs to
            another realm.
          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
        '422':
          description: >-
            `invalid_params`: The body fails the request schema: a required
            field is missing or a value has the wrong type or format. The
            message lists every issue as `field: problem`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HubErr'
              examples:
                invalid_params:
                  summary: invalid_params
                  value:
                    ok: false
                    error: 'daemon_id: Required'
                    code: invalid_params
        '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.