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

# Get metrics timeseries

> Charts one metric across your organization over time, with a value for each time bucket and a total for the range.

**Metrics** (`metric`)
- `credits`: credits used across your organization
- `meetingHours`: hours of meetings recorded
- `meetings`: meetings recorded
- `chatMessages`: messages sent to Agents
- `workflowRuns`: Workflow runs

Each meeting is attributed to one member, the person who first added the notetaker, so a person filter counts the meetings attributed to them. Totals include meetings deleted since.

**Buckets** (`unit`)
- `hour`, `day`, `week`, or `month`, in UTC. `credits` is available per day or coarser.

Narrow the results to a person, group, Workflow, source, or specific Agents or models with the filters below.

Buckets are in UTC, so daily totals can differ slightly from the Analytics dashboard, which uses your local time zone.

Requires the Analytics permission (`analytics:read`).



## OpenAPI

````yaml /admin-api-openapi.json get /metrics/timeseries
openapi: 3.1.1
info:
  title: Cassidy Admin API
  description: Read your organization's usage analytics and activity in Cassidy.
  version: 1.0.0
servers:
  - url: https://app.cassidyai.com/api/admin/v1
security: []
tags:
  - name: Analytics
  - name: Workflow runs
  - name: Chats
  - name: Meetings
  - name: Audit logs
externalDocs:
  url: https://docs.cassidyai.com/reference/admin-api
paths:
  /metrics/timeseries:
    get:
      tags:
        - Analytics
      summary: Get metrics timeseries
      description: >-
        Charts one metric across your organization over time, with a value for
        each time bucket and a total for the range.


        **Metrics** (`metric`)

        - `credits`: credits used across your organization

        - `meetingHours`: hours of meetings recorded

        - `meetings`: meetings recorded

        - `chatMessages`: messages sent to Agents

        - `workflowRuns`: Workflow runs


        Each meeting is attributed to one member, the person who first added the
        notetaker, so a person filter counts the meetings attributed to them.
        Totals include meetings deleted since.


        **Buckets** (`unit`)

        - `hour`, `day`, `week`, or `month`, in UTC. `credits` is available per
        day or coarser.


        Narrow the results to a person, group, Workflow, source, or specific
        Agents or models with the filters below.


        Buckets are in UTC, so daily totals can differ slightly from the
        Analytics dashboard, which uses your local time zone.


        Requires the Analytics permission (`analytics:read`).
      operationId: getMetricsTimeseries
      parameters:
        - in: query
          name: userId
          schema:
            description: >-
              Only count usage by this user. For `meetingHours` and `meetings`,
              only count meetings billed to them, which are the meetings they
              were first to add the notetaker to.
            type: string
          description: >-
            Only count usage by this user. For `meetingHours` and `meetings`,
            only count meetings billed to them, which are the meetings they were
            first to add the notetaker to.
        - in: query
          name: externalEmail
          schema:
            description: >-
              Only count usage by this external deployment user (e.g. such as a
              Slack, Microsoft Teams, Google Chat, or email user).
            type: string
          description: >-
            Only count usage by this external deployment user (e.g. such as a
            Slack, Microsoft Teams, Google Chat, or email user).
        - in: query
          name: groupId
          schema:
            description: >-
              Only count usage by members of this group. This uses current group
              membership, so it may include a member's usage from before they
              joined.
            type: string
          description: >-
            Only count usage by members of this group. This uses current group
            membership, so it may include a member's usage from before they
            joined.
        - in: query
          name: agentIds
          schema:
            description: >-
              Only include these Agents, using the IDs from the `agent`
              breakdown or `/chats`. Built-in models combine their thinking
              levels. Pass several as a comma-separated list.
            maxItems: 20
            type: array
            items:
              type: string
          description: >-
            Only include these Agents, using the IDs from the `agent` breakdown
            or `/chats`. Built-in models combine their thinking levels. Pass
            several as a comma-separated list.
        - in: query
          name: excludeAgentIds
          schema:
            description: Leave out these Agents. Pass several as a comma-separated list.
            maxItems: 20
            type: array
            items:
              type: string
          description: Leave out these Agents. Pass several as a comma-separated list.
        - in: query
          name: modelIds
          schema:
            description: >-
              Only include Agents that use these models, such as
              `claude-opus-5-5`, including the built-in model's own Agent.
              Agents count as the model they use today, so changing an Agent's
              model moves its past usage too. Thinking levels are combined. Pass
              several as a comma-separated list.
            maxItems: 20
            type: array
            items:
              type: string
          description: >-
            Only include Agents that use these models, such as
            `claude-opus-5-5`, including the built-in model's own Agent. Agents
            count as the model they use today, so changing an Agent's model
            moves its past usage too. Thinking levels are combined. Pass several
            as a comma-separated list.
        - in: query
          name: excludeModelIds
          schema:
            description: >-
              Leave out Agents that use these models. Pass several as a
              comma-separated list.
            maxItems: 20
            type: array
            items:
              type: string
          description: >-
            Leave out Agents that use these models. Pass several as a
            comma-separated list.
        - in: query
          name: workflowId
          schema:
            description: Only count usage of this Workflow.
            type: string
          description: Only count usage of this Workflow.
        - in: query
          name: source
          schema:
            description: >-
              Only count Agent chat usage from this source, such as `slack` or
              `web`. Available for `credits` and `chatMessages`; with `credits`,
              only Agent chat credits count.
            type: string
            enum:
              - web
              - slack
              - teams
              - googleChat
              - embedded
              - email
              - api
          description: >-
            Only count Agent chat usage from this source, such as `slack` or
            `web`. Available for `credits` and `chatMessages`; with `credits`,
            only Agent chat credits count.
        - in: query
          name: from
          schema:
            type: string
            format: date-time
            description: >-
              Inclusive start of the range as an ISO 8601 timestamp. Rounded
              down to the start of its bucket in UTC.
          required: true
          description: >-
            Inclusive start of the range as an ISO 8601 timestamp. Rounded down
            to the start of its bucket in UTC.
        - in: query
          name: to
          schema:
            type: string
            format: date-time
            description: >-
              Exclusive end of the range as an ISO 8601 timestamp. Rounded up to
              the next bucket boundary in UTC.
          required: true
          description: >-
            Exclusive end of the range as an ISO 8601 timestamp. Rounded up to
            the next bucket boundary in UTC.
        - in: query
          name: metric
          schema:
            type: string
            enum:
              - credits
              - chatMessages
              - workflowRuns
              - meetingHours
              - meetings
            description: The metric to aggregate.
          required: true
          description: The metric to aggregate.
        - in: query
          name: unit
          schema:
            type: string
            enum:
              - hour
              - day
              - week
              - month
            description: >-
              Bucket size. Buckets are in UTC and weeks start on Monday.
              `credits` is available per day or coarser.
          required: true
          description: >-
            Bucket size. Buckets are in UTC and weeks start on Monday. `credits`
            is available per day or coarser.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  from:
                    type: string
                  to:
                    type: string
                  metric:
                    type: string
                    enum:
                      - credits
                      - chatMessages
                      - workflowRuns
                      - meetingHours
                      - meetings
                  unit:
                    type: string
                    enum:
                      - hour
                      - day
                      - week
                      - month
                  total:
                    type: number
                    description: Total for the whole range.
                  buckets:
                    type: array
                    items:
                      type: object
                      properties:
                        start:
                          type: string
                          description: Bucket start as an ISO 8601 timestamp.
                        value:
                          type: number
                      required:
                        - start
                        - value
                required:
                  - from
                  - to
                  - metric
                  - unit
                  - total
                  - buckets
        '400':
          description: Invalid input data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.BAD_REQUEST'
        '401':
          description: Authorization not provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.UNAUTHORIZED'
        '403':
          description: Insufficient access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.FORBIDDEN'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.NOT_FOUND'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error.INTERNAL_SERVER_ERROR'
      security:
        - bearerAuth:
            - analytics:read
components:
  schemas:
    error.BAD_REQUEST:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Invalid input data
        code:
          type: string
          description: The error code
          example: BAD_REQUEST
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
      required:
        - message
        - code
      title: Invalid input data error (400)
      description: The error information
      example:
        code: BAD_REQUEST
        message: Invalid input data
        issues: []
    error.UNAUTHORIZED:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Authorization not provided
        code:
          type: string
          description: The error code
          example: UNAUTHORIZED
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
      required:
        - message
        - code
      title: Authorization not provided error (401)
      description: The error information
      example:
        code: UNAUTHORIZED
        message: Authorization not provided
        issues: []
    error.FORBIDDEN:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Insufficient access
        code:
          type: string
          description: The error code
          example: FORBIDDEN
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
      required:
        - message
        - code
      title: Insufficient access error (403)
      description: The error information
      example:
        code: FORBIDDEN
        message: Insufficient access
        issues: []
    error.NOT_FOUND:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Not found
        code:
          type: string
          description: The error code
          example: NOT_FOUND
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
      required:
        - message
        - code
      title: Not found error (404)
      description: The error information
      example:
        code: NOT_FOUND
        message: Not found
        issues: []
    error.INTERNAL_SERVER_ERROR:
      type: object
      properties:
        message:
          type: string
          description: The error message
          example: Internal server error
        code:
          type: string
          description: The error code
          example: INTERNAL_SERVER_ERROR
        issues:
          description: An array of issues that were responsible for the error
          example: []
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
      required:
        - message
        - code
      title: Internal server error error (500)
      description: The error information
      example:
        code: INTERNAL_SERVER_ERROR
        message: Internal server error
        issues: []
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An Admin API key, starting with `cas_admin_`.

````

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