VitrinaAPI

Revisar y desconectar canales

Leer los canales de mensajería del workspace, revisar su salud y desconectarlos.

GET /messaging-accounts lista las cuentas de mensajería conectadas al workspace, entre ellas un número de WhatsApp, una casilla de correo o una cuenta de Instagram. Este capítulo cubre esa lectura más la desconexión. Conectar un canal nuevo no está aquí. Cada proveedor pide OAuth, un código QR o un formulario de credenciales que ningún script completa solo, así que esa mitad sigue siendo un flujo de la app.

Leer pide messaging_accounts:read; desconectar, messaging_accounts:write. secrets viene siempre tachado: la clave real sobrevive en la respuesta, con <redacted> en lugar de su valor.

Ver los canales conectados

curl https://api.vitrinadev.com/api/v1/messaging-accounts \
  -H "Authorization: Bearer $VITRINA_KEY"
{
  "data": [
    {
      "id": "e4e4e4e4-0000-4000-8000-000000000001",
      "tenant_id": "a1a1a1a1-0000-4000-8000-000000000001",
      "name": "Correo de ventas",
      "kind": "email_atribu",
      "channels": ["email"],
      "config": { "connected_via": "atribu_partner" },
      "secrets": { "atribu_access_token": "<redacted>" },
      "enabled": true,
      "default_team_id": "cccccccc-0000-4000-8000-000000000001",
      "assignment_mode": "auto_round_robin",
      "assignee_user_ids": [],
      "created_at": "2026-01-10T13:00:00.000Z",
      "updated_at": "2026-09-10T13:00:00.000Z"
    }
  ],
  "meta": { "total": 1 }
}

Salud en vivo

curl https://api.vitrinadev.com/api/v1/messaging-accounts/e4e4e4e4-0000-4000-8000-000000000001/health \
  -H "Authorization: Bearer $VITRINA_KEY"

Esto marca ahora mismo y no lee lo último guardado. stored viaja aparte, con la foto que dejó el chequeo periódico, para que compares contra lo que ya se sabía:

{
  "data": {
    "channel": "email",
    "kind": "email_atribu",
    "connected_via": "atribu_partner",
    "identity": { "display_name": "[email protected]" },
    "webhook": { "status": "delivering", "last_event_at": "2026-09-15T18:20:00.000Z" },
    "whatsapp": null,
    "stored": { "status": "ok", "checked_at": "2026-09-15T18:00:00.000Z" }
  }
}

whatsapp solo trae algo (quality_rating, messaging_limit) cuando kind es whatsapp_cloud; en cualquier otro canal viene null. Si el chequeo mismo falla, con el proveedor caído o el token vencido, la respuesta igual es 200, y la falla queda reportada en identity o en webhook. ?refresh=true fuerza una consulta fresca en vez de la caché del proveedor.

Trampa

La respuesta cambia según cómo esté conectado el canal

La forma de la respuesta no es igual entre proveedores. Tenlo en cuenta si construyes algo sobre /health.

connected_viaidentitywebhook
atribu_partner, la conexión gestionadaResuelto en vivo contra el proveedorReal
direct, una casilla IMAP/SMTP manualArmado con lo que guardó el flujo de conexiónSiempre null

Por la conexión gestionada pasan WhatsApp, Instagram, el correo de Gmail y de Outlook, y el calendario de Google. Una casilla manual no tiene un webhook de proveedor que monitorear, y por eso ese campo viene vacío. Instagram, Messenger y TikTok solo funcionan hoy por la conexión gestionada: para ellos no hay formulario de credenciales manual, como sí lo hay para el correo IMAP.

Desconectar

curl -X DELETE https://api.vitrinadev.com/api/v1/messaging-accounts/e4e4e4e4-0000-4000-8000-000000000001 \
  -H "Authorization: Bearer $VITRINA_KEY"

204, sin cuerpo. Primero se da de baja la suscripción del lado del proveedor, en modo best-effort, que no hace nada en un canal que no la tiene. Después se borra la fila local. Toda conversación, mensaje y lead que el canal ya produjo queda intacto.

Tráfico por canal

curl https://api.vitrinadev.com/api/v1/messaging-accounts/stats \
  -H "Authorization: Bearer $VITRINA_KEY"

Viene una fila por canal con tráfico en los últimos 30 días. Un canal sin mensajes está ausente en vez de aparecer con ceros:

{
  "data": [
    {
      "messaging_account_id": "e4e4e4e4-0000-4000-8000-000000000001",
      "conversations_total": 128,
      "messages_30d": 640,
      "inbound_30d": 410,
      "outbound_30d": 230,
      "last_message_at": "2026-09-15T18:20:00.000Z"
    }
  ]
}

La referencia de Canales trae el contrato campo por campo de esta lectura y de la desconexión.

En esta página