---
title: "Historial de interacciones de email de un contacto"
method: POST
path: "/analytics/user-interactions"
tags: ["Query"]
---

# Historial de interacciones de email de un contacto

`POST /analytics/user-interactions`

## Request

- Base URL: `http://localhost:8081`
- URL: `http://localhost:8081/analytics/user-interactions`
- Auth: HTTP bearer

Devuelve la línea temporal de interacciones de email de un contacto
(envíos, aperturas, clics, rebotes...) para la pestaña de historial de
interacciones del CRM.

El aislamiento por tenant se aplica automáticamente con la jerarquía
del JWT (tenant propio + descendientes). Un SUPERADMIN puede consultar
otro tenant enviando la cabecera `x-tenant-id` (se expande a ese tenant
más su jerarquía).

Por defecto devuelve el historial completo (máximo 10000 filas, más
recientes primero). El parámetro opcional `sinceDays` limita la ventana
temporal y abarata la consulta.

## Headers

- `x-tenant-id` string

## Request body

- object
  - `userId` string, required: ID del contacto (usuario del CRM)
  - `sinceDays` integer: Opcional — limitar el historial a los últimos N días

## Response `200`

Historial de interacciones obtenido correctamente

- object
  - `success` boolean
  - `data` object[]
    - `date` string, date-time
    - `channel` string
    - `campaignId` string, nullable
    - `campaignName` string, nullable
    - `eventType` string
    - `messageId` string, nullable
    - `recipientEmail` string, nullable
  - `timestamp` string, date-time

## Other responses

- `400`: Solicitud inválida
- `401`: No autorizado - Token JWT inválido o faltante. Los rechazos del middleware de autenticación usan el envelope `AuthError` (`{ success, message, code? }`); un `activeTenantId` mal formado devuelve `code: INVALID_ACTIVE_TENANT` (ver `components.responses.InvalidActiveTenant`), un token de tipo no admitido `code: INVALID_TOKEN_TYPE` con `message: Tipo de token no aceptado`, y un token de impersonación cuya sesión terminó `code: IMPERSONATION_SESSION_TERMINATED`.
- `403`: Acceso denegado antes de ejecutar ninguna consulta. Dos casos: - **Rol no admitido** (`error.code: FORBIDDEN`): las rutas de datos solo admiten tokens con rol ADMIN, OWNER o SUPERADMIN (los `campaign_service_token` de nev-api llevan rol ADMIN). Un token de fan (USER), STAFF, EXTERNAL o sin rol recibe 403. - **Selección ajena** (`code: ACTIVE_TENANT_FORBIDDEN`): la organización seleccionada (`activeTenantId`) no pertenece a la jerarquía actual de `tenantId`.
- `500`: Error interno del servidor
- `503`: No se pudo leer la jerarquía de tenants (MongoDB no disponible). Reintentable; nunca se sustituye por un ámbito parcial o global.

---

[API](https://skmtc.dev/nevent/apis/nevent-data-api.md) · [All operations](https://skmtc.dev/nevent/apis/nevent-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nevent/apis/nevent-data-api/revisions/81035d32c1c1?raw)
