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

# Topic labeling health

> Read-only labeling-health statistics through Current.account. Requires account membership, ReportPolicy view access and administrator membership. Topics need not be enabled: missing or disabled settings still returns HTTP 200 with actual statistics. Counts use current rank 1 topics; cleared and superseded assignments are excluded. Coverage and teams measure conversations; agents measure correction events; sources measure current labels. Fractions range 0–1 rounded to four decimals and are null with a zero denominator. Empty data has zero counts, empty agent/team arrays and null ratios/timestamps. UTC calendar weeks use the account weekday (default Monday); included inbox restrictions apply.



## OpenAPI

````yaml /api-reference/openapi.json get /api/v2/accounts/{account_id}/topics/labeling_health
openapi: 3.0.4
info:
  title: Tied API
  description: >-
    The Tied REST API. Three families of endpoint, each with its own credential:
    **Application** for everything inside an account, **Platform** for
    provisioning accounts and users, and **Client** for acting as a contact from
    your own surface.
  version: 1.1.0
  termsOfService: https://tied.com/legal
  contact:
    email: hello@tied.com
  license:
    name: MIT License
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://app.tied.com
    description: Tied cloud
security: []
tags:
  - name: Account AgentBots
    description: Account-specific Agent Bots
  - name: Agents
    description: Agent management APIs
  - name: Canned Responses
    description: Pre-defined responses for common queries
  - name: Contacts
    description: Contact management APIs
  - name: Contact Labels
    description: Manage contact labels
  - name: Conversation Assignments
    description: Manage conversation assignments
  - name: Conversation Labels
    description: Manage conversation labels
  - name: Conversations
    description: Conversation management APIs
  - name: Custom Attributes
    description: Custom fields for contacts and conversations
  - name: Custom Filters
    description: Saved filters for conversations
  - name: Inboxes
    description: Communication channels setup
  - name: Integrations
    description: Third-party integrations
  - name: Messages
    description: Message management APIs
  - name: Profile
    description: User profile APIs
  - name: Reports
    description: Analytics and reporting APIs
  - name: Teams
    description: Team management APIs
  - name: Webhooks
    description: Event notification webhooks
  - name: Automation Rule
    description: Workflow automation rules
  - name: Help Center
    description: Knowledge base management
  - name: Contacts API
    description: Public contact APIs
  - name: Conversations API
    description: Public conversation APIs
  - name: Messages API
    description: Public message APIs
  - name: CSAT Survey Page
    description: Customer satisfaction survey
  - name: Account
    description: >-
      The authenticated user's own account — read and update account settings.
      Distinct from the Platform family's **Accounts**, which provisions
      accounts across an installation.
  - name: Audit Logs
    description: Read the account's audit trail
  - name: Inbox API
    description: Public inbox lookup by channel identifier
  - name: Labels
    description: >-
      Create and manage the account's labels. Applying one to a conversation or
      contact is a separate endpoint under those resources.
  - name: Macros
    description: >-
      Saved multi-step actions an agent — or an integration — can run against
      one or more conversations.
  - name: Campaigns
    description: Ongoing website campaigns and one-off SMS and WhatsApp sends.
  - name: Contact Notes
    description: Internal notes on a contact. Never visible to the contact.
  - name: Help Center Categories
    description: Categories group a portal's articles, one tree per allowed locale.
  - name: Help Center Articles
    description: The articles a portal publishes, and their draft and archived states.
  - name: Summary Reports
    description: Per-agent, per-team, per-inbox and per-label totals for a period, as JSON.
  - name: Live Reports
    description: Right-now queue counts. No date range — these describe the present.
  - name: CSAT
    description: >-
      The satisfaction ratings contacts have submitted, and the metrics computed
      from them.
  - name: Notifications
    description: >-
      The per-user notification feed, its read and snooze state, and the
      settings that decide what lands in it.
  - name: Conversation Participants
    description: >-
      The agents watching a conversation. Participants get notified about it
      without being assigned to it.
  - name: Draft Messages
    description: >-
      The unsent reply held for a conversation. Stored in Redis, one per
      conversation.
  - name: Search
    description: >-
      One search service across conversations, contacts, messages and Help
      Center articles.
  - name: Dashboard Apps
    description: Embedded pages that appear as a tab beside a conversation.
  - name: Assignment Policies
    description: How conversations are handed out, and which inbox uses which policy.
  - name: Files
    description: Storing a file so another endpoint can attach it.
  - name: Bot Flows
    description: >-
      Scripted conversation flows, their versions, and the publish and rollback
      that move between them.
  - name: Billing
    description: >-
      Credit balance, usage, invoices, spend controls and the provider-hosted
      payment flows.
  - name: AMB Templates
    description: >-
      Saved Apple Messages primitive payloads an agent can reuse from the
      composer.
  - name: AMB Onboarding
    description: The in-flight Apple Messages for Business registration for an account.
  - name: Widget Session
    description: Starting a widget session and reading the visitor it belongs to.
  - name: Widget Conversation
    description: The visitor's conversation and its messages.
  - name: Widget Context
    description: Campaigns, agents, labels, events and uploads for a widget session.
  - name: CSAT Survey
    description: The public, unauthenticated survey a contact answers from a link.
  - name: Workspace
    description: Scheduling and cancelling deletion of the whole workspace.
  - name: Widget Integrations
    description: Provider actions available to a visitor session in its own conversation.
  - name: Orchestration Studio
    description: >-
      Administrator-only read APIs for Orchestration Studio cases and knowledge
      sources.
  - name: Topic Analytics
    description: Account Topics readiness, labeling health and usage aggregates.
  - name: Analytics V2
    description: >-
      Account-scoped metrics, anonymized benchmarks and audited conversation
      drilldown.
paths:
  /api/v2/accounts/{account_id}/topics/labeling_health:
    parameters:
      - $ref: '#/components/parameters/account_id'
    get:
      tags:
        - Topic Analytics
      summary: Topic labeling health
      description: >-
        Read-only labeling-health statistics through Current.account. Requires
        account membership, ReportPolicy view access and administrator
        membership. Topics need not be enabled: missing or disabled settings
        still returns HTTP 200 with actual statistics. Counts use current rank 1
        topics; cleared and superseded assignments are excluded. Coverage and
        teams measure conversations; agents measure correction events; sources
        measure current labels. Fractions range 0–1 rounded to four decimals and
        are null with a zero denominator. Empty data has zero counts, empty
        agent/team arrays and null ratios/timestamps. UTC calendar weeks use the
        account weekday (default Monday); included inbox restrictions apply.
      operationId: get-topic-labeling-health
      parameters:
        - name: weeks
          in: query
          description: Coverage and correction window in calendar weeks.
          schema:
            type: integer
            minimum: 1
            maximum: 26
            default: 12
        - name: backlog_days
          in: query
          description: Unlabeled age window in days.
          schema:
            type: integer
            minimum: 1
            maximum: 365
            default: 90
      responses:
        '200':
          description: Actual synthetic request response; see topic analytics evidence.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic_labeling_health'
              example:
                window:
                  weeks: 2
                  from: '2026-09-28T00:00:00Z'
                  to: '2026-10-07T12:00:00Z'
                  weekStart: monday
                  backlogDays: 90
                  conversations: 2
                  lowVolume: true
                  minimumConversations: 30
                coverage:
                  weeks:
                    - weekStart: '2026-09-28'
                      conversations: 1
                      labeled: 0
                      coverage: 0
                    - weekStart: '2026-10-05'
                      conversations: 1
                      labeled: 1
                      coverage: 1
                  conversations: 2
                  labeled: 1
                  coverage: 0.5
                  lowVolume: true
                  minimumConversations: 30
                backlog:
                  days: 90
                  unlabeled: 1
                  buckets:
                    zeroToOneDay: 0
                    twoToSevenDays: 1
                    eightToThirtyDays: 0
                    overThirtyDays: 0
                  oldestUnlabeledAt: '2026-10-04T12:00:00Z'
                agents:
                  - agentId: 1
                    name: Demo Agent
                    labeled: 1
                    cleared: 0
                    lastActiveAt: '2026-10-07T12:00:00Z'
                teams:
                  - teamId: 1
                    name: Demo Support
                    conversations: 2
                    labeled: 1
                    coverage: 0.5
                sources:
                  labeled: 1
                  counts:
                    person: 1
                    rule: 0
                    ai: 0
                  shares:
                    person: 1
                    rule: 0
                    ai: 0
                  lowVolume: true
                  minimumConversations: 30
                  lowLabels: true
                  minimumLabeled: 50
          x-example-provenance:
            source: spec/contract/topic_analytics_spec.rb
            capture: >-
              Actual synthetic Rails integration response; full Content-Type and
              scrub details in
              docs/platform-api/topic-analytics-evidence/responses.json.
            scrubbed: true
        '400':
          description: >-
            The request presented both a Devise Token Auth session credential
            and an api_access_token. The request is refused before the action
            runs.
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                    properties:
                      code:
                        type: string
                        enum:
                          - multiple_credentials
                    additionalProperties: false
                additionalProperties: false
              example:
                error:
                  code: multiple_credentials
        '401':
          description: >-
            Unauthenticated or account is not accessible to the caller. Devise
            authentication responses may use an `errors` array; account access
            denials use `error`.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/error_message'
                  - type: object
                    required:
                      - errors
                    properties:
                      errors:
                        type: array
                        items:
                          type: string
        '422':
          description: Invalid period, window, grouping, metric, pagination or version.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_message'
      security:
        - userApiKey: []
components:
  parameters:
    account_id:
      in: path
      name: id
      schema:
        type: integer
      required: true
      description: The numeric ID of the account
  schemas:
    topic_labeling_health:
      type: object
      description: All five health panels; does not require Topics to be enabled.
      required:
        - window
        - coverage
        - backlog
        - agents
        - teams
        - sources
      properties:
        window:
          type: object
          description: Effective coverage and backlog windows.
          required:
            - weeks
            - from
            - to
            - weekStart
            - backlogDays
            - conversations
            - lowVolume
            - minimumConversations
          properties:
            weeks:
              type: integer
              description: Calendar week count.
              minimum: 1
              maximum: 26
            from:
              type: string
              description: Start of oldest calendar week in UTC.
              format: date-time
            to:
              type: string
              description: Current request time in UTC.
              format: date-time
            weekStart:
              type: string
              description: Configured weekday, default monday.
              enum:
                - sunday
                - monday
                - tuesday
                - wednesday
                - thursday
                - friday
                - saturday
            backlogDays:
              type: integer
              description: Backlog window in days.
              minimum: 1
              maximum: 365
            conversations:
              type: integer
              description: Conversations in coverage window.
              minimum: 0
            lowVolume:
              type: boolean
              description: >-
                True below minimumConversations; counts and ratios are still
                returned.
            minimumConversations:
              type: integer
              description: Conversation warning threshold, currently 30.
              minimum: 0
        coverage:
          $ref: '#/components/schemas/topic_health_coverage'
        backlog:
          $ref: '#/components/schemas/topic_health_backlog'
        agents:
          $ref: '#/components/schemas/topic_health_agents'
        teams:
          $ref: '#/components/schemas/topic_health_teams'
        sources:
          $ref: '#/components/schemas/topic_health_sources'
    error_message:
      type: object
      description: >-
        The shape returned by `render_unauthorized`, `render_not_found_error`
        and `render_could_not_create_error`.
      properties:
        error:
          type: string
          description: A single human-readable message.
          example: Resource could not be found
      required:
        - error
    topic_health_coverage:
      type: object
      description: Weekly and total main-topic coverage.
      required:
        - weeks
        - conversations
        - labeled
        - coverage
        - lowVolume
        - minimumConversations
      properties:
        weeks:
          type: array
          description: Every week in the window, oldest first.
          items:
            type: object
            description: One calendar week.
            required:
              - weekStart
              - conversations
              - labeled
              - coverage
            properties:
              weekStart:
                type: string
                description: UTC calendar week start date.
                format: date
              conversations:
                type: integer
                description: Conversations created in the window.
                minimum: 0
              labeled:
                type: integer
                description: Conversations with a current, non-superseded rank 1 topic.
                minimum: 0
              coverage:
                type: number
                description: >-
                  Labeled / conversations rounded to four decimals; null with
                  zero conversations.
                nullable: true
                minimum: 0
                maximum: 1
        conversations:
          type: integer
          description: Conversations created in the window.
          minimum: 0
        labeled:
          type: integer
          description: Conversations with a current, non-superseded rank 1 topic.
          minimum: 0
        coverage:
          type: number
          description: >-
            Labeled / conversations rounded to four decimals; null with zero
            conversations.
          nullable: true
          minimum: 0
          maximum: 1
        lowVolume:
          type: boolean
          description: >-
            True below minimumConversations; counts and ratios are still
            returned.
        minimumConversations:
          type: integer
          description: Conversation warning threshold, currently 30.
          minimum: 0
    topic_health_backlog:
      type: object
      description: Unlabeled conversations in the backlog window.
      required:
        - days
        - unlabeled
        - buckets
        - oldestUnlabeledAt
      properties:
        days:
          type: integer
          description: Backlog age window in days.
          minimum: 1
          maximum: 365
        unlabeled:
          type: integer
          description: Conversations without a current main topic.
          minimum: 0
        buckets:
          type: object
          description: Age buckets measured since conversation creation.
          required:
            - zeroToOneDay
            - twoToSevenDays
            - eightToThirtyDays
            - overThirtyDays
          properties:
            zeroToOneDay:
              type: integer
              description: Age 0–1 whole days.
              minimum: 0
            twoToSevenDays:
              type: integer
              description: Age 2–7 whole days.
              minimum: 0
            eightToThirtyDays:
              type: integer
              description: Age 8–30 whole days.
              minimum: 0
            overThirtyDays:
              type: integer
              description: Age above 30 days, bounded by days.
              minimum: 0
        oldestUnlabeledAt:
          type: string
          description: Oldest unlabeled creation time, or null.
          format: date-time
          nullable: true
    topic_health_agents:
      type: array
      description: At most 100 people, ordered by set count descending then user ID.
      items:
        type: object
        description: Human correction activity; rules and AI are excluded.
        required:
          - agentId
          - name
          - labeled
          - cleared
          - lastActiveAt
        properties:
          agentId:
            type: integer
            description: ID of the person who corrected labels.
          name:
            type: string
            description: Current account member display name; null if no longer a member.
            nullable: true
          labeled:
            type: integer
            description: >-
              Set correction events, including repeated sets on one
              conversation.
            minimum: 0
          cleared:
            type: integer
            description: Clear correction events.
            minimum: 0
          lastActiveAt:
            type: string
            description: Most recent set or clear timestamp in UTC.
            format: date-time
      maxItems: 100
    topic_health_teams:
      type: array
      description: >-
        Top 100 teams by conversation count, then no-team, then optional
        overflow; totals include all conversations.
      items:
        type: object
        description: Team coverage; otherTeams is optional.
        required:
          - teamId
          - name
          - conversations
          - labeled
          - coverage
        properties:
          teamId:
            type: integer
            description: Team ID; null for no-team and otherTeams rows.
            nullable: true
          name:
            type: string
            description: Current team name; null for no-team and otherTeams rows.
            nullable: true
          conversations:
            type: integer
            description: Conversations created in the window.
            minimum: 0
          labeled:
            type: integer
            description: Conversations with a current, non-superseded rank 1 topic.
            minimum: 0
          coverage:
            type: number
            description: >-
              Labeled / conversations rounded to four decimals; null with zero
              conversations.
            nullable: true
            minimum: 0
            maximum: 1
          otherTeams:
            type: integer
            description: >-
              Number of teams merged into the final overflow row; present only
              on that row.
            minimum: 0
      maxItems: 102
    topic_health_sources:
      type: object
      description: Who assigned the current main topics.
      required:
        - labeled
        - counts
        - shares
        - lowVolume
        - minimumConversations
        - lowLabels
        - minimumLabeled
      properties:
        labeled:
          type: integer
          description: Current main topic count in the coverage window.
          minimum: 0
        counts:
          type: object
          description: Source counts.
          required:
            - person
            - rule
            - ai
          properties:
            person:
              type: integer
              description: Current main topics assigned by person.
              minimum: 0
            rule:
              type: integer
              description: Current main topics assigned by rule.
              minimum: 0
            ai:
              type: integer
              description: Current main topics assigned by ai.
              minimum: 0
        shares:
          type: object
          description: Source fractions.
          required:
            - person
            - rule
            - ai
          properties:
            person:
              type: number
              description: Source count / labeled, four decimals; null with no labels.
              nullable: true
              minimum: 0
              maximum: 1
            rule:
              type: number
              description: Source count / labeled, four decimals; null with no labels.
              nullable: true
              minimum: 0
              maximum: 1
            ai:
              type: number
              description: Source count / labeled, four decimals; null with no labels.
              nullable: true
              minimum: 0
              maximum: 1
        lowVolume:
          type: boolean
          description: >-
            True below minimumConversations; counts and ratios are still
            returned.
        minimumConversations:
          type: integer
          description: Conversation warning threshold, currently 30.
          minimum: 0
        lowLabels:
          type: boolean
          description: True below minimumLabeled; returned shares remain populated.
        minimumLabeled:
          type: integer
          description: Label warning threshold, currently 50.
          minimum: 0
  securitySchemes:
    userApiKey:
      type: apiKey
      in: header
      name: api_access_token
      description: >-
        This token can be obtained by visiting the profile page or via rails
        console. Provides access to  endpoints based on the user permissions
        levels. This token can be saved by an external system when user is
        created via API, to perform activities on behalf of the user.

````

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