> For the complete documentation index, see [llms.txt](https://prometheo.gitbook.io/prometheo-api/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://prometheo.gitbook.io/prometheo-api/conversations.md).

# Conversations

## Listar conversaciones

> Obtiene una lista paginada de las conversaciones de tu organización, ordenadas por la fecha del último mensaje. Pensado para exportar conversaciones a tu sistema o sincronizarlas periódicamente.\
> \
> \*\*Cómo paginar:\*\* cada respuesta trae un \`next\_cursor\`. Volvé a llamar al endpoint pasándolo en el parámetro \`cursor\` hasta que \`has\_more\` sea \`false\`. El cursor debe usarse siempre con los mismos filtros (\`updated\_after\`, \`connection\_type\`, \`direction\`) con los que se obtuvo.\
> \
> \*\*Cuota mensual:\*\* cada conversación devuelta cuenta como 1 documento contra la cuota mensual de tu organización (por defecto 500.000 documentos/mes). El estado actual se expone en los headers \`X-Export-Quota-Limit\`, \`X-Export-Quota-Remaining\` y \`X-Export-Quota-Reset\`.\
> \
> \*\*Rate limit:\*\* 20 requests por minuto por organización sobre los endpoints de exportación, además de los límites globales.\
> \
> \*\*Tip:\*\* si lo que necesitás es enterarte de nuevos mensajes en tiempo real, suscribite a los webhooks (\`message.incoming\`, \`message.outgoing\`, \`lead.smart\_tag\_assigned\`, \`lead.variable\_assigned\`). Este endpoint está pensado para la carga inicial o para resincronizaciones.

```json
{"openapi":"3.0.3","info":{"title":"Prometheo External API","version":"1.0.0"},"tags":[{"name":"Conversations"}],"servers":[{"url":"https://api.prometheo.ai/public/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key"}},"schemas":{"ConversationListResponse":{"type":"object","required":["success","conversations","pagination"],"properties":{"success":{"type":"boolean"},"conversations":{"type":"array","items":{"$ref":"#/components/schemas/ConversationExport"}},"pagination":{"$ref":"#/components/schemas/ExportCursorPagination"}}},"ConversationExport":{"type":"object","description":"Representación pública de una conversación.","properties":{"id":{"type":"string","description":"ID de la conversación."},"conversation_with":{"type":"string","description":"Identificador del contacto (teléfono, usuario, etc)."},"user_name":{"type":"string","nullable":true,"description":"Nombre del contacto tal como se muestra en Prometeo."},"connection_type":{"type":"string","nullable":true,"description":"Canal por el que se desarrolla la conversación.","enum":["whatsapp-business","whatsapp-lite","whatsapp-hybrid","instagram","facebook","email","tiktok","mercado-libre"]},"is_group":{"type":"boolean","description":"Indica si se trata de un chat grupal."},"bot_active":{"type":"boolean","description":"Si el bot está activo en esta conversación al momento de consultarla."},"not_seen_messages":{"type":"integer","description":"Cantidad de mensajes sin leer."},"last_message_at":{"type":"string","format":"date-time","nullable":true,"description":"Fecha del último mensaje de la conversación."},"created_at":{"type":"string","format":"date-time","nullable":true},"updated_at":{"type":"string","format":"date-time","nullable":true}}},"ExportCursorPagination":{"type":"object","description":"Datos de paginación para los endpoints de exportación.","required":["limit","has_more"],"properties":{"limit":{"type":"integer","description":"Cantidad de resultados devueltos en esta página. Puede ser menor al solicitado si tu cuota mensual está por agotarse."},"has_more":{"type":"boolean","description":"Indica si quedan más resultados por paginar."},"next_cursor":{"type":"string","nullable":true,"description":"Cursor para pedir la próxima página. Es `null` cuando `has_more` es `false`."}}},"ApiError":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}},"ExportQuotaExceededError":{"type":"object","description":"Se devuelve con código `429` cuando tu organización agotó la cuota mensual de documentos exportados. La cuota se reinicia automáticamente el primer día del próximo mes (fecha exacta en `quota.reset_at`).","required":["success","error","message","quota"],"properties":{"success":{"type":"boolean"},"error":{"type":"string","enum":["EXPORT_QUOTA_EXCEEDED"]},"message":{"type":"string"},"quota":{"type":"object","description":"Detalle del estado actual de la cuota.","required":["used","limit","remaining","period","reset_at"],"properties":{"used":{"type":"integer","description":"Documentos ya consumidos en el mes en curso."},"limit":{"type":"integer","description":"Cuota mensual total asignada a tu organización."},"remaining":{"type":"integer","description":"Documentos disponibles. Vale `0` cuando se agotó la cuota."},"period":{"type":"string","description":"Período de la cuota en formato `YYYY-MM` (UTC)."},"reset_at":{"type":"string","format":"date-time","description":"Fecha en que la cuota vuelve a cero (UTC)."}}}}}}},"paths":{"/conversations":{"get":{"tags":["Conversations"],"summary":"Listar conversaciones","description":"Obtiene una lista paginada de las conversaciones de tu organización, ordenadas por la fecha del último mensaje. Pensado para exportar conversaciones a tu sistema o sincronizarlas periódicamente.\n\n**Cómo paginar:** cada respuesta trae un `next_cursor`. Volvé a llamar al endpoint pasándolo en el parámetro `cursor` hasta que `has_more` sea `false`. El cursor debe usarse siempre con los mismos filtros (`updated_after`, `connection_type`, `direction`) con los que se obtuvo.\n\n**Cuota mensual:** cada conversación devuelta cuenta como 1 documento contra la cuota mensual de tu organización (por defecto 500.000 documentos/mes). El estado actual se expone en los headers `X-Export-Quota-Limit`, `X-Export-Quota-Remaining` y `X-Export-Quota-Reset`.\n\n**Rate limit:** 20 requests por minuto por organización sobre los endpoints de exportación, además de los límites globales.\n\n**Tip:** si lo que necesitás es enterarte de nuevos mensajes en tiempo real, suscribite a los webhooks (`message.incoming`, `message.outgoing`, `lead.smart_tag_assigned`, `lead.variable_assigned`). Este endpoint está pensado para la carga inicial o para resincronizaciones.","parameters":[{"name":"updated_after","in":"query","description":"Solo conversaciones cuyo último mensaje sea posterior a esta fecha (ISO 8601). Por defecto, los últimos 7 días.","schema":{"type":"string","format":"date-time"}},{"name":"cursor","in":"query","description":"Cursor devuelto en la página anterior. Pasalo tal cual.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Cantidad de conversaciones por página (máximo 100).","schema":{"type":"integer","default":50,"minimum":1,"maximum":100}},{"name":"connection_type","in":"query","description":"Filtrar por tipo de conexión.","schema":{"type":"string","enum":["whatsapp-business","whatsapp-lite","whatsapp-hybrid","instagram","facebook","email","tiktok","mercado-libre"]}},{"name":"direction","in":"query","description":"Orden por fecha del último mensaje.","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}}],"responses":{"200":{"description":"Lista de conversaciones obtenida exitosamente","headers":{"X-Export-Quota-Limit":{"description":"Cuota mensual total de documentos para tu organización.","schema":{"type":"integer"}},"X-Export-Quota-Remaining":{"description":"Documentos disponibles después de procesar este request.","schema":{"type":"integer"}},"X-Export-Quota-Reset":{"description":"Fecha (ISO 8601, UTC) en que la cuota vuelve a cero. Corresponde al primer día del próximo mes.","schema":{"type":"string","format":"date-time"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationListResponse"}}}},"400":{"description":"Parámetros inválidos (por ejemplo `connection_type` o `direction` fuera de los valores permitidos).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"No autorizado (API Key ausente o inválida)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Superaste el rate limit o la cuota mensual. Los errores de cuota incluyen detalles del consumo y la fecha de reseteo.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/ExportQuotaExceededError"}]}}}},"500":{"description":"Error interno","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## Obtener una conversación por ID

> Devuelve los datos básicos de una conversación. Consume 1 documento de la cuota mensual. Si la conversación no existe o pertenece a otra organización, se devuelve \`404\`.

```json
{"openapi":"3.0.3","info":{"title":"Prometheo External API","version":"1.0.0"},"tags":[{"name":"Conversations"}],"servers":[{"url":"https://api.prometheo.ai/public/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key"}},"schemas":{"ConversationResponse":{"type":"object","required":["success","conversation"],"properties":{"success":{"type":"boolean"},"conversation":{"$ref":"#/components/schemas/ConversationExport"}}},"ConversationExport":{"type":"object","description":"Representación pública de una conversación.","properties":{"id":{"type":"string","description":"ID de la conversación."},"conversation_with":{"type":"string","description":"Identificador del contacto (teléfono, usuario, etc)."},"user_name":{"type":"string","nullable":true,"description":"Nombre del contacto tal como se muestra en Prometeo."},"connection_type":{"type":"string","nullable":true,"description":"Canal por el que se desarrolla la conversación.","enum":["whatsapp-business","whatsapp-lite","whatsapp-hybrid","instagram","facebook","email","tiktok","mercado-libre"]},"is_group":{"type":"boolean","description":"Indica si se trata de un chat grupal."},"bot_active":{"type":"boolean","description":"Si el bot está activo en esta conversación al momento de consultarla."},"not_seen_messages":{"type":"integer","description":"Cantidad de mensajes sin leer."},"last_message_at":{"type":"string","format":"date-time","nullable":true,"description":"Fecha del último mensaje de la conversación."},"created_at":{"type":"string","format":"date-time","nullable":true},"updated_at":{"type":"string","format":"date-time","nullable":true}}},"ApiError":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}},"ExportQuotaExceededError":{"type":"object","description":"Se devuelve con código `429` cuando tu organización agotó la cuota mensual de documentos exportados. La cuota se reinicia automáticamente el primer día del próximo mes (fecha exacta en `quota.reset_at`).","required":["success","error","message","quota"],"properties":{"success":{"type":"boolean"},"error":{"type":"string","enum":["EXPORT_QUOTA_EXCEEDED"]},"message":{"type":"string"},"quota":{"type":"object","description":"Detalle del estado actual de la cuota.","required":["used","limit","remaining","period","reset_at"],"properties":{"used":{"type":"integer","description":"Documentos ya consumidos en el mes en curso."},"limit":{"type":"integer","description":"Cuota mensual total asignada a tu organización."},"remaining":{"type":"integer","description":"Documentos disponibles. Vale `0` cuando se agotó la cuota."},"period":{"type":"string","description":"Período de la cuota en formato `YYYY-MM` (UTC)."},"reset_at":{"type":"string","format":"date-time","description":"Fecha en que la cuota vuelve a cero (UTC)."}}}}}}},"paths":{"/conversations/{id}":{"get":{"tags":["Conversations"],"summary":"Obtener una conversación por ID","description":"Devuelve los datos básicos de una conversación. Consume 1 documento de la cuota mensual. Si la conversación no existe o pertenece a otra organización, se devuelve `404`.","parameters":[{"name":"id","in":"path","required":true,"description":"ID de la conversación.","schema":{"type":"string"}}],"responses":{"200":{"description":"Conversación obtenida exitosamente","headers":{"X-Export-Quota-Limit":{"schema":{"type":"integer"}},"X-Export-Quota-Remaining":{"schema":{"type":"integer"}},"X-Export-Quota-Reset":{"schema":{"type":"string","format":"date-time"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationResponse"}}}},"401":{"description":"No autorizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Conversación no encontrada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Superaste el rate limit o la cuota mensual.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/ExportQuotaExceededError"}]}}}},"500":{"description":"Error interno","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```

## Obtener eventos de una conversación

> Devuelve un listado paginado con todo lo que pasó en la conversación: mensajes, smart tags asignados o removidos, variables extraídas, cambios de estado del bot y asignaciones de moderador. Todos los eventos llegan ordenados por fecha en una sola secuencia, para que puedas reconstruir la línea de tiempo completa.\
> \
> Cada item trae un campo \`type\` que indica de qué se trata:\
> \
> \- \`message\` — un mensaje del lead o del asistente. Incluye los archivos\
> &#x20; adjuntos y un resumen de las funciones ejecutadas por el bot\
> &#x20; (\`tool\_calls\` con \`function\_name\` y \`arguments\`).\
> \
> \- \`tag\_assigned\` — smart tags que fueron agregados o quitados al lead.\
> \- \`data\_extracted\` — variables capturadas durante la conversación,\
> &#x20; ya sea por el bot o por un moderador.\
> \
> \- \`bot\_activation\_updated\` — el bot fue activado o desactivado.\
> \- \`moderator\_assigned\` — un moderador fue asignado a la conversación.\
> \
> \*\*Cómo paginar:\*\* usá el \`next\_cursor\` devuelto para pedir la próxima página hasta que \`has\_more\` sea \`false\`. Pasalo tal cual, sin interpretarlo.\
> \
> \*\*Filtrado por tipo:\*\* si solo te interesan algunos eventos (por ejemplo \`types=message\` o \`types=message,data\_extracted\`), pasalos como parámetro. Además de filtrar la respuesta, \*\*reduce el consumo de cuota\*\* porque evitamos buscar los tipos que no pediste.\
> \
> \*\*Cuota mensual:\*\* cada evento devuelto cuenta como 1 documento contra la cuota mensual de tu organización. El estado se expone en los headers \`X-Export-Quota-\*\`.

```json
{"openapi":"3.0.3","info":{"title":"Prometheo External API","version":"1.0.0"},"tags":[{"name":"Conversations"}],"servers":[{"url":"https://api.prometheo.ai/public/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key"}},"schemas":{"ConversationEventsResponse":{"type":"object","required":["success","events","pagination"],"properties":{"success":{"type":"boolean"},"events":{"type":"array","items":{"$ref":"#/components/schemas/ConversationEvent"}},"pagination":{"$ref":"#/components/schemas/ExportCursorPagination"}}},"ConversationEvent":{"description":"Un evento dentro de la conversación. El campo `type` indica de qué tipo de evento se trata y define la forma del resto del objeto.","oneOf":[{"$ref":"#/components/schemas/ConversationMessageEvent"},{"$ref":"#/components/schemas/ConversationTagAssignedEvent"},{"$ref":"#/components/schemas/ConversationBotActivationUpdatedEvent"},{"$ref":"#/components/schemas/ConversationDataExtractedEvent"},{"$ref":"#/components/schemas/ConversationModeratorAssignedEvent"}],"discriminator":{"propertyName":"type","mapping":{"message":"#/components/schemas/ConversationMessageEvent","tag_assigned":"#/components/schemas/ConversationTagAssignedEvent","bot_activation_updated":"#/components/schemas/ConversationBotActivationUpdatedEvent","data_extracted":"#/components/schemas/ConversationDataExtractedEvent","moderator_assigned":"#/components/schemas/ConversationModeratorAssignedEvent"}}},"ConversationMessageEvent":{"type":"object","description":"Mensaje enviado o recibido en la conversación.","required":["type","id","conversation_id","from_me","created_at"],"properties":{"type":{"type":"string","enum":["message"]},"id":{"type":"string","description":"ID del mensaje."},"conversation_id":{"type":"string","description":"ID de la conversación a la que pertenece."},"from_me":{"type":"boolean","description":"`true` si el mensaje fue enviado desde tu organización (bot, moderador, seguimiento, etc). `false` si lo envió el contacto."},"sender_type":{"type":"string","nullable":true,"description":"Origen del mensaje. Permite distinguir envíos automáticos de mensajes del bot reactivo o de un moderador. En mensajes antiguos donde no se registró el origen, se infiere a partir de `from_me` (`bot` o `user`).","enum":["user","bot","moderator","follow_up","lead_reminder","mass_send","template","external","instagram_private_reply","google_sheets_outbound","meta_forms"]},"text":{"type":"string","nullable":true,"description":"Contenido de texto del mensaje. Puede ser `null` si el mensaje contiene solo archivos."},"has_media":{"type":"boolean","description":"Indica si el mensaje incluye algún archivo adjunto."},"attachments":{"type":"array","description":"Archivos adjuntos al mensaje.","items":{"$ref":"#/components/schemas/ConversationMessageAttachment"}},"tool_calls":{"type":"array","nullable":true,"description":"Resumen de las funciones ejecutadas por el bot para generar este mensaje. Es `null` cuando no se ejecutó ninguna.","items":{"$ref":"#/components/schemas/ConversationToolCallSummary"}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time","nullable":true}}},"ConversationMessageAttachment":{"type":"object","description":"Archivo adjunto enviado dentro de un mensaje.","properties":{"url":{"type":"string","nullable":true,"description":"URL para descargar el archivo desde el proveedor original."},"type":{"type":"string","nullable":true,"description":"Tipo del archivo (por ejemplo `image`, `audio`, `video`, `document`)."},"filename":{"type":"string","nullable":true,"description":"Nombre del archivo, cuando está disponible."},"transcription":{"type":"string","nullable":true,"description":"Transcripción del contenido (por ejemplo, para audios)."}}},"ConversationToolCallSummary":{"type":"object","description":"Resumen de una función ejecutada por el bot durante la conversación. Solo incluye el nombre de la función y los argumentos con los que fue invocada; la respuesta interna de la función no se expone.","properties":{"function_name":{"type":"string","description":"Nombre de la función ejecutada."},"arguments":{"description":"Argumentos con los que se llamó a la función. Normalmente es un objeto JSON; si no se pudo parsear, se devuelve el string tal cual.","oneOf":[{"type":"object","additionalProperties":true},{"type":"string"}]}}},"ConversationTagAssignedEvent":{"type":"object","description":"Smart tags que se agregaron o quitaron al lead.","required":["type","id","conversation_id","created_at"],"properties":{"type":{"type":"string","enum":["tag_assigned"]},"id":{"type":"string"},"conversation_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"assigner":{"$ref":"#/components/schemas/ConversationEventAssigner"},"tags_added":{"type":"array","description":"Smart tags que se agregaron en esta acción.","items":{"$ref":"#/components/schemas/SmartTag"}},"tags_removed":{"type":"array","description":"Smart tags que se quitaron en esta acción.","items":{"$ref":"#/components/schemas/SmartTag"}}}},"ConversationEventAssigner":{"type":"object","nullable":true,"description":"Indica quién originó la acción. Puede ser un moderador humano o el propio bot. La estructura puede variar según el caso.","additionalProperties":true},"SmartTag":{"type":"object","description":"Smart tag asignado a un lead","properties":{"id":{"type":"string","description":"ID del smart tag"},"name":{"type":"string","description":"Nombre del smart tag"}}},"ConversationBotActivationUpdatedEvent":{"type":"object","description":"El bot fue activado o desactivado en esta conversación.","required":["type","id","conversation_id","created_at","bot_active"],"properties":{"type":{"type":"string","enum":["bot_activation_updated"]},"id":{"type":"string"},"conversation_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"assigner":{"$ref":"#/components/schemas/ConversationEventAssigner"},"bot_active":{"type":"boolean","description":"Estado del bot luego del cambio."}}},"ConversationDataExtractedEvent":{"type":"object","description":"Variables capturadas durante la conversación, ya sea por el bot automáticamente o por un moderador completándolas manualmente. Útil para auditar cuándo y cómo se obtuvo cada dato del lead.","required":["type","id","conversation_id","created_at","extracted_data"],"properties":{"type":{"type":"string","enum":["data_extracted"]},"id":{"type":"string"},"conversation_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"assigner":{"$ref":"#/components/schemas/ConversationEventAssigner"},"extracted_data":{"type":"object","description":"Variables capturadas con sus valores.","additionalProperties":true}}},"ConversationModeratorAssignedEvent":{"type":"object","description":"Un moderador fue asignado a la conversación.","required":["type","id","conversation_id","created_at"],"properties":{"type":{"type":"string","enum":["moderator_assigned"]},"id":{"type":"string"},"conversation_id":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"moderator_id":{"type":"string","nullable":true,"description":"ID del moderador asignado."}}},"ExportCursorPagination":{"type":"object","description":"Datos de paginación para los endpoints de exportación.","required":["limit","has_more"],"properties":{"limit":{"type":"integer","description":"Cantidad de resultados devueltos en esta página. Puede ser menor al solicitado si tu cuota mensual está por agotarse."},"has_more":{"type":"boolean","description":"Indica si quedan más resultados por paginar."},"next_cursor":{"type":"string","nullable":true,"description":"Cursor para pedir la próxima página. Es `null` cuando `has_more` es `false`."}}},"ApiError":{"type":"object","required":["success","message"],"properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}},"ExportQuotaExceededError":{"type":"object","description":"Se devuelve con código `429` cuando tu organización agotó la cuota mensual de documentos exportados. La cuota se reinicia automáticamente el primer día del próximo mes (fecha exacta en `quota.reset_at`).","required":["success","error","message","quota"],"properties":{"success":{"type":"boolean"},"error":{"type":"string","enum":["EXPORT_QUOTA_EXCEEDED"]},"message":{"type":"string"},"quota":{"type":"object","description":"Detalle del estado actual de la cuota.","required":["used","limit","remaining","period","reset_at"],"properties":{"used":{"type":"integer","description":"Documentos ya consumidos en el mes en curso."},"limit":{"type":"integer","description":"Cuota mensual total asignada a tu organización."},"remaining":{"type":"integer","description":"Documentos disponibles. Vale `0` cuando se agotó la cuota."},"period":{"type":"string","description":"Período de la cuota en formato `YYYY-MM` (UTC)."},"reset_at":{"type":"string","format":"date-time","description":"Fecha en que la cuota vuelve a cero (UTC)."}}}}}}},"paths":{"/conversations/{id}/events":{"get":{"tags":["Conversations"],"summary":"Obtener eventos de una conversación","description":"Devuelve un listado paginado con todo lo que pasó en la conversación: mensajes, smart tags asignados o removidos, variables extraídas, cambios de estado del bot y asignaciones de moderador. Todos los eventos llegan ordenados por fecha en una sola secuencia, para que puedas reconstruir la línea de tiempo completa.\n\nCada item trae un campo `type` que indica de qué se trata:\n\n- `message` — un mensaje del lead o del asistente. Incluye los archivos\n  adjuntos y un resumen de las funciones ejecutadas por el bot\n  (`tool_calls` con `function_name` y `arguments`).\n\n- `tag_assigned` — smart tags que fueron agregados o quitados al lead.\n- `data_extracted` — variables capturadas durante la conversación,\n  ya sea por el bot o por un moderador.\n\n- `bot_activation_updated` — el bot fue activado o desactivado.\n- `moderator_assigned` — un moderador fue asignado a la conversación.\n\n**Cómo paginar:** usá el `next_cursor` devuelto para pedir la próxima página hasta que `has_more` sea `false`. Pasalo tal cual, sin interpretarlo.\n\n**Filtrado por tipo:** si solo te interesan algunos eventos (por ejemplo `types=message` o `types=message,data_extracted`), pasalos como parámetro. Además de filtrar la respuesta, **reduce el consumo de cuota** porque evitamos buscar los tipos que no pediste.\n\n**Cuota mensual:** cada evento devuelto cuenta como 1 documento contra la cuota mensual de tu organización. El estado se expone en los headers `X-Export-Quota-*`.","parameters":[{"name":"id","in":"path","required":true,"description":"ID de la conversación.","schema":{"type":"string"}},{"name":"created_after","in":"query","description":"Solo eventos ocurridos después de esta fecha (ISO 8601). Si se omite, se devuelve el historial completo de la conversación.","schema":{"type":"string","format":"date-time"}},{"name":"cursor","in":"query","description":"Cursor devuelto en la página anterior. Pasalo tal cual.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Cantidad de eventos por página (máximo 100).","schema":{"type":"integer","default":50,"minimum":1,"maximum":100}},{"name":"direction","in":"query","description":"Orden cronológico.","schema":{"type":"string","enum":["asc","desc"],"default":"asc"}},{"name":"types","in":"query","description":"Lista separada por coma de tipos de evento a incluir. Si se omite, se devuelven todos. Restringir los tipos reduce el consumo de cuota.","schema":{"type":"string"}}],"responses":{"200":{"description":"Eventos obtenidos exitosamente","headers":{"X-Export-Quota-Limit":{"schema":{"type":"integer"}},"X-Export-Quota-Remaining":{"schema":{"type":"integer"}},"X-Export-Quota-Reset":{"schema":{"type":"string","format":"date-time"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConversationEventsResponse"}}}},"400":{"description":"Parámetros inválidos (por ejemplo un valor en `types` que no está permitido).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"No autorizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"Conversación no encontrada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Superaste el rate limit o la cuota mensual.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ApiError"},{"$ref":"#/components/schemas/ExportQuotaExceededError"}]}}}},"500":{"description":"Error interno","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}
```
