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

# Chat figures that cannot be derived from a page

> Counts computed with COUNT(*) over the caller's full scope, for the
dashboard.

Exists because the figure it replaces was summed from the thread list,
which is bounded at 500 — a total assembled from a page reports
truncation as completeness (see issues #180, #184, #188, #197).

Scope matches GET /chat/threads: an admin counts every thread, a user
counts only threads they are still a participant in.

"Today" is UTC midnight to now. The boundary is fixed server-side and is
NOT accepted from the caller.




## OpenAPI

````yaml /ai-app/openapi.yaml get /chat/stats
openapi: 3.0.3
info:
  title: Hill90 API
  description: Hill90 platform API — agent management and lifecycle operations.
  version: 0.1.0
servers:
  - url: /
    description: Relative (behind Traefik reverse proxy)
security: []
paths:
  /chat/stats:
    get:
      summary: Chat figures that cannot be derived from a page
      description: |
        Counts computed with COUNT(*) over the caller's full scope, for the
        dashboard.

        Exists because the figure it replaces was summed from the thread list,
        which is bounded at 500 — a total assembled from a page reports
        truncation as completeness (see issues #180, #184, #188, #197).

        Scope matches GET /chat/threads: an admin counts every thread, a user
        counts only threads they are still a participant in.

        "Today" is UTC midnight to now. The boundary is fixed server-side and is
        NOT accepted from the caller.
      responses:
        '200':
          description: Chat statistics
          content:
            application/json:
              schema:
                type: object
                properties:
                  messages_today:
                    type: integer
                    description: >-
                      Messages created since UTC midnight, in the caller's
                      scope.
                    example: 17
        '401':
          description: Unauthenticated
        '500':
          description: |
            The count could not be computed. Deliberately not answered as 0 —
            zero means zero, not "I failed".
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````