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

# Analytics de tickets

> Agregações aditivas (dia/semana/mês × dimensão) dos tickets do Talk, no formato pronto para BI.

Retorna linhas no grão **dia / semana / mês × dimensão** com **componentes aditivos** dos tickets do Talk.

Contagens: `tickets_created_count`, `tickets_closed`, `tickets_in_service`, `redistributed_timeout`, `total_messages`.

<Warning>
  Toda métrica de SLA vem como **par soma+contagem** — nunca a média pronta: `time_to_assignment_sum_seconds`/`_count`, `first_response_sum_seconds`/`_count`, `handle_time_sum_seconds`/`_count`. As somas estão em **segundos**: divida pela contagem para a média (e por 60 para minutos).
</Warning>

<Info>
  Os dados têm até \~6h de defasagem — veja `as_of` / `stale` e o header `X-Data-As-Of`. `tickets_in_service` é um retrato pontual (um ticket muda de estado numa execução posterior). CSAT e produto entram numa versão futura.
</Info>


## OpenAPI

````yaml GET /v1/analytics/tickets/{granularity}
openapi: 3.1.0
info:
  title: Morada Data Export API
  version: 1.0.0
  description: >-
    Exportação incremental das conversas, mensagens, contatos e deals do seu
    workspace na Morada.ai, além de relatórios operacionais em nível de linha e
    analytics agregado (componentes aditivos) que reproduzem os dashboards da
    plataforma.
servers:
  - url: https://data-api.morada.ai
    description: Produção
security:
  - workspaceApiKey: []
tags:
  - name: Exportação
    description: Exportação incremental de entidades do workspace.
  - name: Relatórios
    description: >-
      Relatórios operacionais em nível de linha, com janela de tempo
      obrigatória.
  - name: Analytics
    description: >-
      Agregações aditivas prontas para BI, reproduzindo os dashboards da
      plataforma.
paths:
  /v1/analytics/tickets/{granularity}:
    get:
      tags:
        - Analytics
      summary: Analytics de tickets do Talk (componentes aditivos)
      description: >-
        Agregações aditivas (dia/semana/mês × dimensão) dos tickets do Talk, no
        formato pronto para BI.
      parameters:
        - in: path
          name: granularity
          required: true
          description: 'Tamanho do balde. Um de: `day`, `week` (segunda-feira ISO), `month`.'
          schema:
            type: string
            enum:
              - day
              - week
              - month
        - in: query
          name: from
          required: false
          description: 'Data ISO (limite inferior, inclusivo). Padrão: 30 dias atrás.'
          schema:
            type: string
            format: date
        - in: query
          name: to
          required: false
          description: 'Data ISO (limite superior, exclusivo). Padrão: agora.'
          schema:
            type: string
            format: date
        - in: query
          name: tz
          required: false
          description: >-
            Timezone IANA para o agrupamento por dia. Padrão:
            `America/Sao_Paulo`.
          schema:
            type: string
            default: America/Sao_Paulo
        - in: query
          name: group_by
          required: false
          description: >-
            Lista separada por vírgulas das dimensões permitidas: `queue`,
            `queue_name`, `agent`, `agent_name`, `status`, `source`.
          schema:
            type: string
        - in: query
          name: queue
          required: false
          description: 'Filtro: lista separada por vírgulas de ids de fila (`queue_id`).'
          schema:
            type: string
        - in: query
          name: agent
          required: false
          description: >-
            Filtro: lista separada por vírgulas de ids de usuário do atendente
            (`agent_user_id`).
          schema:
            type: string
        - in: query
          name: status
          required: false
          description: >-
            Filtro: lista separada por vírgulas de status (`waiting`,
            `in_service`, `redistributed`, `closed`).
          schema:
            type: string
        - in: query
          name: source
          required: false
          description: 'Filtro: lista separada por vírgulas de origens do ticket.'
          schema:
            type: string
      responses:
        '200':
          description: >-
            Linhas agregadas de componentes aditivos (contagens e pares
            soma+contagem).
          content:
            application/json:
              schema:
                type: object
                required:
                  - granularity
                  - tz
                  - from
                  - to
                  - as_of
                  - stale
                  - group_by
                  - data
                  - count
                properties:
                  granularity:
                    type: string
                    description: Granularidade aplicada (`day`, `week` ou `month`).
                  tz:
                    type: string
                    description: Timezone IANA usado no agrupamento.
                  from:
                    type: string
                    description: Limite inferior efetivo da janela.
                  to:
                    type: string
                    description: Limite superior efetivo da janela.
                  as_of:
                    type:
                      - string
                      - 'null'
                    description: >-
                      Momento (ISO 8601) da última execução de ETL bem-sucedida
                      deste metricset; `null` quando desconhecido.
                  stale:
                    type: boolean
                    description: >-
                      `true` quando os dados estão defasados (mais que ~2× a
                      cadência de 6h) ou o frescor é desconhecido.
                  group_by:
                    type: array
                    items:
                      type: string
                    description: Dimensões aplicadas no agrupamento.
                  data:
                    type: array
                    description: >-
                      Uma linha por balde × combinação de dimensões. Cada
                      dimensão de `group_by` aparece como uma chave adicional na
                      linha. Para cada média/SLA, divida `_sum` por `_count` (e,
                      para os gráficos em minutos, divida ainda por 60 usando as
                      versões `_sec_`).
                    items:
                      type: object
                      additionalProperties: true
                      properties:
                        period:
                          type: string
                          description: >-
                            Início do balde no fuso `tz` (data ISO em `day`;
                            segunda-feira ISO em `week`; primeiro dia do mês em
                            `month`).
                        tickets_created_count:
                          type: integer
                          description: Tickets criados no balde.
                        tickets_closed:
                          type: integer
                          description: Tickets encerrados.
                        tickets_in_service:
                          type: integer
                          description: >-
                            Tickets em atendimento. Snapshot pontual — um ticket
                            pode mudar de balde numa execução posterior do ETL.
                        redistributed_timeout:
                          type: integer
                          description: Tickets redistribuídos por estouro de tempo.
                        total_messages:
                          type: integer
                          description: >-
                            Total de mensagens humanas (soma de
                            `total_human_messages`).
                        time_to_assignment_sum_seconds:
                          type: number
                          description: >-
                            Soma do tempo até a atribuição, em segundos. Divida
                            por `time_to_assignment_count` para a média em
                            segundos (÷60 para minutos).
                        time_to_assignment_count:
                          type: integer
                          description: >-
                            Número de tickets que contribuem para
                            `time_to_assignment_sum_seconds`.
                        first_response_sum_seconds:
                          type: number
                          description: >-
                            Soma do tempo de primeira resposta, em segundos.
                            Divida por `first_response_count` para a média em
                            segundos (÷60 para minutos).
                        first_response_count:
                          type: integer
                          description: >-
                            Número de tickets que contribuem para
                            `first_response_sum_seconds`.
                        handle_time_sum_seconds:
                          type: number
                          description: >-
                            Soma do tempo de atendimento (handle time), em
                            segundos. Congelado no snapshot do ETL. Divida por
                            `handle_time_count` para a média em segundos (÷60
                            para minutos).
                        handle_time_count:
                          type: integer
                          description: >-
                            Número de tickets que contribuem para
                            `handle_time_sum_seconds`.
                  count:
                    type: integer
                    description: Número de linhas em `data`.
        '400':
          description: >-
            Parâmetro inválido, granularidade desconhecida ou janela acima do
            teto permitido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erro'
        '401':
          description: Chave de acesso ausente ou inválida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erro'
        '429':
          description: >-
            Limite de requisições excedido (cerca de 120 por minuto por
            workspace).
          headers:
            Retry-After:
              description: Segundos a aguardar antes de repetir a requisição.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Erro'
components:
  schemas:
    Erro:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: Descrição do erro.
  securitySchemes:
    workspaceApiKey:
      type: http
      scheme: bearer
      description: >-
        Workspace API key no formato `mk_...`, gerada na plataforma em
        **Integrações → Configurar API**.

````