
# API de resúmenes

Hay dos tipos de resúmenes escritos por IA disponibles a través de la API:

- **Resúmenes de chat**: un breve resumen de la conversación de un contacto, generado bajo demanda. Es lo mismo que el control de resumen en un chat (consulta [Resumen de chat](../chats/chat-interface.md#chat-summary)).
- **Resúmenes diarios**: el resumen diario de todas tus conversaciones que [Resúmenes diarios](../daily-summaries/daily-summaries.md) genera cada mañana: estadísticas, un bloque de markdown por sección y cualquier tarea que la IA haya creado a partir de él.

- **URL base** — `https://api.youraiconnector.com/v1`
- **Autenticación** — tu clave de API (consulta [Autenticación](authentication.md)). Una [clave con alcance limitado](api-keys.md#scoped-keys) necesita la sección `Summaries`.
- **Errores y paginación** — consulta [Errores y paginación](errors-and-pagination.md)

Todos los ejemplos a continuación muestran la forma de consulta `?apiKey=` en cURL y el encabezado `X-API-Key` en JavaScript y Python; cualquiera de los dos funciona en todos los endpoints.

---

## Generar un resumen de chat

`POST /summaries` — envía el `phoneNumber` del contacto (con código de país) o su `email`; uno de los dos es obligatorio.

La IA lee la conversación **cerrada** más reciente del contacto, o la que sigue abierta si aún no se ha cerrado ninguna, y redacta un resumen de la misma. El resumen se guarda en el contacto (aparece en **Resúmenes** en el panel de contacto de la aplicación) y se devuelve en la respuesta, por lo que puedes enviarlo directamente a un CRM, un canal de Slack o un correo electrónico.

**Coste:** el mismo que una respuesta de IA en el nivel de calidad de IA del agente: Pro 1 crédito, Max 0.25, Mini 0.15; con tu propia clave de Anthropic conectada, Pro cuesta 0. La solicitud se rechaza antes de generar nada si el saldo no es suficiente.

**cURL**

```bash
curl -X POST "https://api.youraiconnector.com/v1/summaries?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phoneNumber": "+31612345678"}'
```

**JavaScript**

```javascript
const res = await fetch("https://api.youraiconnector.com/v1/summaries", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ email: "jane@example.com" }),
});
const { summary } = await res.json();
```

**Python**

```python
import requests

r = requests.post(
    "https://api.youraiconnector.com/v1/summaries",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"phoneNumber": "+31612345678"},
)
print(r.json()["summary"])
```

**Respuesta**

```json
{
  "success": true,
  "message": "Chat summary generated successfully",
  "summary": "Jane asked about the 10-session package for her two children (ages 6 and 9) and preferred Saturday mornings. She booked a trial lesson for Saturday at 10:00 and wants to know whether siblings get a discount."
}
```

| Estado | Significado |
|---|---|
| `400` | No se envió ni `phoneNumber` ni `email`. |
| `404` | No hay ningún contacto que coincida, el contacto aún no tiene conversaciones o la conversación no tiene mensajes. El `message` del cuerpo indica cuál es el motivo. |
| `500` | La generación falló (por ejemplo, por falta de créditos). |

> **Receta de automatización: correo electrónico de reserva con un resumen.** En una [automatización](../automations/automations.md) con el activador **Cita reservada**, añade un paso de **Solicitud HTTP** que llame a este endpoint con `${trigger.contact.phone_number}` (o el correo electrónico del contacto), y luego un paso de **Correo electrónico** que inserte el `summary` de la respuesta del paso HTTP junto con un enlace al chat (la dirección de tu aplicación seguida de `/chats/` y el ID de contacto del activador). Tu equipo obtiene el contexto de la reserva en el mismo correo, sin necesidad de abrir la bandeja de entrada.

> **Lectura de resúmenes anteriores.** No existe un endpoint que enumere los resúmenes de chat almacenados. Guarda el texto de la respuesta si lo necesitas más tarde, o genéralo de nuevo (cada llamada se factura).

### Alternativa: por ID de contacto

`POST /summaries/chat-summary` con `{"contactId": "..."}` realiza la misma generación para un contacto del que ya tienes el ID. Solo confirma el éxito (`{"success": true, "data": "Chat summary generated successfully"}`) y **no** devuelve el texto, así que usa `POST /summaries` cuando quieras el resumen en sí. Un miembro del equipo cuya clave esté limitada a sus contactos asignados recibirá `404` para un contacto fuera de ese alcance.

---

## Lea los resúmenes de chat más recientes de muchos contactos

`POST /contacts/summaries/latest`: envíe hasta 500 ID de contacto y obtenga el resumen de chat más reciente de cada contacto en una sola llamada. No se genera nada, por lo que no cuesta créditos. Esta es la lectura detrás de la columna **Resumen de IA** de la [exportación CSV de contactos](../get-started/exporting-contacts.md).

```json
{ "contactIds": ["contact_abc123", "contact_def456"] }
```

**Respuesta**

```json
{
  "success": true,
  "summaries": {
    "contact_abc123": {
      "summary": "Asked for a quote for 20 units, prefers delivery next week.",
      "end_date_time": "2026-09-15T14:02:11.000Z"
    }
  }
}
```

Un contacto que aún no tiene un resumen, que no está en su cuenta o que está fuera de los contactos visibles de un miembro del equipo simplemente se excluye de `summaries`. Los ID deben ser únicos, y una lista con más de 500 se rechazará con `400`: divídala en lotes. Un miembro del equipo necesita al menos el permiso de **Visualización** en Mensajes.

```bash
curl -X POST "https://api.youraiconnector.com/v1/contacts/summaries/latest?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contactIds": ["contact_abc123", "contact_def456"]}'
```

---

## Obtener un resumen diario

`GET /summaries/daily/{date}` — `date` es `YYYY-MM-DD`. Devuelve el resumen de ese día, o `null` bajo `summary` cuando aún no se ha generado ninguno, además de la configuración de tus secciones.

**cURL**

```bash
curl "https://api.youraiconnector.com/v1/summaries/daily/2026-09-08?apiKey=YOUR_API_KEY"
```

**Respuesta**

```json
{
  "success": true,
  "data": {
    "summary": {
      "date": "2026-09-08",
      "status": "completed",
      "generated_at": "2026-09-09T05:02:11.000Z",
      "stats": {
        "total_conversations": 42,
        "total_messages_sent": 310,
        "total_messages_received": 268,
        "human_alerts": 3,
        "bookings": 5,
        "new_contacts": 11,
        "sales": 2
      },
      "sections": {
        "wins_losses_improvements": "## Wins\n- ...",
        "tasks_action_items": "- Call Jane back about the sibling discount",
        "human_alerts_reviews": "...",
        "sentiment_analysis": "...",
        "booked_meetings_sales": "..."
      },
      "contact_map": { "Jane Doe": "uid_whatsapp_31612345678" },
      "auto_tasks": [],
      "created_task_ids": []
    },
    "section_configs": [
      { "id": "wins_losses_improvements", "name": "Wins, Losses & Improvements", "enabled": true, "position": 0 }
    ]
  }
}
```

- **`status`** — `pending`, `generating`, `completed` o `failed` (con `error` activado). Realice sondeos en este endpoint después de una regeneración hasta que aparezca `completed`.
- **`sections`** — una cadena de markdown por sección, identificada por el ID de la sección. Las cinco secciones estándar son `wins_losses_improvements`, `tasks_action_items`, `human_alerts_reviews`, `sentiment_analysis` y `booked_meetings_sales`; las secciones que añada en **Configurar** en la página de Resúmenes diarios obtienen un ID `custom_…`. Los nombres y el orden se reflejan en `section_configs`.
- **`contact_map`** — nombre para mostrar a ID de contacto, para que pueda convertir los nombres en el texto en enlaces.
- **`auto_tasks`** / **`created_task_ids`** — los elementos de acción que la IA extrajo y las tareas que creó a partir de ellos (cuando **Crear tarjetas de tarea a partir de elementos de acción** está activado).

| Estado | Significado |
|---|---|
| `400` | `date` no está `YYYY-MM-DD`, o es para una fecha futura. |
| `403` | Los Resúmenes diarios están desactivados para la cuenta. |

> ¿Prefiere una notificación push en lugar de realizar sondeos? El [evento de webhook](../integrations/webhooks.md) **Resumen diario creado** entrega la misma carga útil en el momento en que termina un resumen matutino.

---

## Regenerar un resumen diario

`POST /summaries/daily/{date}/regenerate` — inicia una nueva generación para ese día en segundo plano y devuelve inmediatamente `status: "generating"` y un `sections` vacío. Realice sondeos en `GET /summaries/daily/{date}` hasta que se complete. Se aplican las mismas reglas que para el enlace **Intentar de nuevo** en la aplicación.

El cuerpo opcional `{"deleteTasks": false}` mantiene las tareas creadas en la ejecución anterior; por defecto, se eliminan y se vuelven a crear a partir del nuevo resumen. Envíe un booleano real: la cadena `"false"` se ignora y se trata como el valor predeterminado.

```bash
curl -X POST "https://api.youraiconnector.com/v1/summaries/daily/2026-09-08/regenerate?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"deleteTasks": false}'
```

---

## Referencia rápida

| Tarea | Endpoint |
|---|---|
| Generar un resumen de chat y obtener el texto | `POST /summaries` |
| Generar un resumen de chat por ID de contacto (no se devuelve texto) | `POST /summaries/chat-summary` |
| Leer el resumen de chat más reciente de hasta 500 contactos | `POST /contacts/summaries/latest` |
| Leer el resumen de un día | `GET /summaries/daily/{date}` |
| Regenerar el resumen de un día | `POST /summaries/daily/{date}/regenerate` |
