---
title: "Conteos reales por bandeja (total, estado, asignación, canal)"
method: GET
path: "/contacts/counts"
tags: ["Contacts"]
---

# Conteos reales por bandeja (total, estado, asignación, canal)

`GET /contacts/counts`

## Request

- Base URL: `https://api.met.meteor.com.co/api/v1`
- URL: `https://api.met.meteor.com.co/api/v1/contacts/counts`
- Auth: one of:
  - `bearer` (a scheme the document does not define)
  - HTTP bearer

Acepta los mismos filtros que `GET /contacts` y devuelve conteos **facetados**: cada bloque se calcula con todos los filtros activos menos el suyo. Con `assigned_to=42`, los cinco contadores de estado cuentan los chats de esa persona; con `status=open`, los de asesor cuentan solo los abiertos. El bloque que se aplicara su propio filtro daría 0 en todas las demás opciones y no habría cómo volver.

`scopeTotal` es aparte: el universo de la carpeta (asesor/grupo/canal) sin estado, búsqueda ni filtro avanzado — el denominador de "viendo N de M".

`quick` trae los números de los chips rápidos (`all`, `open`, `unread`, `human`, `autopilot`), calculados con todos los filtros activos menos el propio `quick`.

Sin parámetros devuelve los totales del workspace, igual que siempre.

## Query parameters

- `quick` 'open' | 'unread' | 'human' | 'autopilot'
- `filters` string
- `autopilot` boolean
- `unanswered` boolean
- `unread` boolean
- `tag` string
- `agent_group` string
- `assigned_to` string
- `status` 'open' | 'pending' | 'human_requested' | 'finished' | 'archived'
- `channel_id` string
- `search` string
- `q` string

## Response `200`

- object: Sobre en el que viaja toda respuesta correcta de la API. El recurso está en `data`. Los SDKs oficiales lo desenvuelven por ti; un cliente hecho a mano tiene que leer `.data`.
  - `success` true, required: Siempre `true` en una respuesta 2xx.
  - `data` ContactCountsDto, required
    - `archived` number, required
    - `byChannel` object, required: Conteo por canal. La clave es el **nombre** del canal, no su id.
    - `byGroup` object, required: Conteo por grupo de atención. La clave es el id del grupo como string.
    - `byLine` object, required: Conteo por LÍNEA de entrada. La clave es el `$line_id`: el `phone_number_id` de WhatsApp, el `page_id` de Facebook o el `ig_user_id` de Instagram. Es lo que separa en la bandeja dos cuentas conectadas al mismo canal.
    - `byUser` object, required: Conteo por asesor. La clave es el id del usuario como string.
    - `channels` ContactCountsChannelDto[], required
      - `id` number, required
      - `name` string, required
      - `type` string, nullable, required
    - `finished` number, required
    - `human_requested` number, required: Conversaciones donde el contacto pidió hablar con una persona.
    - `lines` ContactCountsLineDto[], required: Las líneas del workspace con su canal y su cuenta. El sidebar arma con esto las sub-bandejas; solo las muestra cuando un canal tiene más de una.
      - `account_id` string, nullable, required
      - `account_name` string, nullable, required
      - `channel_id` number, nullable, required
      - `line_id` string, required
      - `name` string, nullable, required
    - `mine` number, required: Asignadas al usuario que consulta. Con una API key es 0 (no hay asesor).
    - `open` number, required
    - `pending` number, required
    - `quick` ContactCountsQuickDto
      - `all` number, required: Sin chip: lo que trae «Todos».
      - `autopilot` number, required: Con el piloto automático encendido.
      - `human` number, required: En estado `human_requested`.
      - `open` number, required: No cerrados: estado distinto de `finished` y `archived` (sin estado cuenta como abierto).
      - `unread` number, required: Con mensajes sin leer.
    - `scopeTotal` number, required: Universo de la carpeta elegida (asesor, grupo o canal), ignorando estado, búsqueda y filtro avanzado. Es el denominador honesto de "viendo N de M": `total` cambia con cada filtro, así que no sirve para decir de cuánto se está viendo una parte.
    - `total` number, required: Bandeja "Todos": cumple los filtros activos **menos** el de asignación. Sin filtros, el total del workspace.
    - `unassigned` number, required

## Other responses

- `400`: La request no es válida: un campo no pasa validación, falta un parámetro requerido o el recurso no admite la transición solicitada.
- `401`: API key ausente, inválida, revocada o expirada — o el workspace está bloqueado.
- `403`: La key está autenticada pero no puede ejecutar esta operación: scope faltante, capacidad deshabilitada, modo test restringido o recurso fuera de su cartera.
- `404`: El recurso no existe o no está disponible dentro del alcance de la key. No revela la existencia de recursos de otros tenants.
- `429`: Se superó el límite por minuto de la key o la cuota del plan. Respeta `Retry-After`; el SDK ya reintenta solo.
- `500`: Error del servidor o del Met que ejecutaba. El SDK reintenta los 5xx con backoff.

---

[API](https://skmtc.dev/meteor/apis/met-public-api.md) · [All operations](https://skmtc.dev/meteor/apis/met-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meteor/apis/met-public-api/revisions/fc6d3aad75de?raw)
