Consultar certificados de cotizaciones de Previred
Lee los certificados oficiales de cotizaciones ya emitidos para esta conexión, uno por trabajador.
| Tool ID | previred.certificados.consultar |
| Nombre MCP | previred__certificados__consultar |
| Conector | previred |
| Plano | action |
| Lee el alcance | certificados (debe estar habilitado en la conexión) |
| Scope (permiso) | previred:read |
| Auth | none |
| Versión | 1 |
| Sensible | sí |
| Deprecado | no |
| Comportamiento | readOnly=true, destructive=false, idempotent=true, openWorld=false |
Requiere conexión. Indica cuál en cada llamada: header
X-Connect-Connectionen REST, campoconnectionIden elexecutede MCP y en las opciones del SDK. No hay resolución implícita, ni siquiera con una sola conexión activa: la conexión es la empresa. El id sale deconexiones.estado.consultar.
Qué hace
Es el documento que Previred firma y que una persona pide para probar lo que se le cotizó: 'certificadoUrl' es un enlace firmado para descargarlo. Hay un certificado VIGENTE por trabajador, que cada sincronización reemplaza, y cubre la ventana máxima que Previred admite terminando en el período sincronizado; 'periodoDesde' y 'periodoHasta' dicen cuál es. Si lo que buscas son los montos y no el documento, 'previred.cotizaciones.consultar' los tiene sin descargar nada. Lectura pura: NO contacta a Previred ni dispara una sincronización. Si el período nunca se sincronizó devuelve una lista vacía, que NO significa que no haya datos en Previred. Para traer datos nuevos, usa 'previred.conexion.sincronizar' primero. Pagina con 'cursor': cuando la respuesta trae 'cursor' distinto de null hay más filas, reenvía ese valor tal cual; nunca lo construyas a mano.
Entrada
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
rutTrabajador | string ^\d{1,8}-[\dkK]$ | no | Filtra por UN trabajador. El RUT va sin puntos y con guion antes del dígito verificador: se guarda cifrado y el filtro corre sobre un índice ciego, así que solo calza escrito exactamente en esa forma. |
cursor | string | no | Continúa desde donde quedó la página anterior: reenvía tal cual el 'cursor' que vino en la respuesta. Es opaco, así que nunca lo construyas a mano. Sin él, la consulta empieza por el principio. |
limit | entero 1-500 | no · default 100 | Cuántas filas traer como máximo, entre 1 y 500. Si se omite, 100. |
JSON Schema de entrada
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"rutTrabajador": {
"type": "string",
"pattern": "^\\d{1,8}-[\\dkK]$",
"description": "Filtra por UN trabajador. El RUT va sin puntos y con guion antes del dígito verificador: se guarda cifrado y el filtro corre sobre un índice ciego, así que solo calza escrito exactamente en esa forma."
},
"cursor": {
"description": "Continúa desde donde quedó la página anterior: reenvía tal cual el 'cursor' que vino en la respuesta. Es opaco, así que nunca lo construyas a mano. Sin él, la consulta empieza por el principio.",
"type": "string"
},
"limit": {
"default": 100,
"description": "Cuántas filas traer como máximo, entre 1 y 500. Si se omite, 100.",
"type": "integer",
"minimum": 1,
"maximum": 500
}
}
}Ejemplo
curl -X POST https://connect.emisso.ai/api/v1/tools/previred.certificados.consultar/execute \
-H "Authorization: Bearer connect_sk_…" \
-H "X-Connect-Connection: conn_9tKfR2mQx4Vb" \
-H "Content-Type: application/json" \
-d '{"input":{"rutTrabajador":"12345678-5"}}'const data = await connect.tools.previred.certificados.consultar({ rutTrabajador: "12345678-5" }, { connectionId: "conn_9tKfR2mQx4Vb" });{
"tool": "previred.certificados.consultar",
"params": {
"rutTrabajador": "12345678-5"
},
"connectionId": "conn_9tKfR2mQx4Vb"
}Salida esperada (200):
{
"data": {
"certificados": [
{
"rutTrabajador": "12345678-5",
"nombreTrabajador": "PEREZ SOTO JUAN ANDRES",
"periodoDesde": "2023-07",
"periodoHasta": "2026-06",
"bytes": 25147,
"certificadoUrl": null,
"syncedAt": "2026-08-11T14:02:11.000Z"
}
],
"cursor": null
},
"meta": {
"request_id": "req_…",
"tool_id": "previred.certificados.consultar",
"plane": "action",
"latency_ms": 24,
"audit_status": "recorded"
}
}El RUT se guarda cifrado y el filtro corre sobre un índice ciego: mándalo sin puntos y con guion.
Salida
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
certificados | lista de objeto | sí | Los certificados guardados: hay uno vigente por trabajador, y cada sincronización lo reemplaza por uno más nuevo en vez de acumular uno por mes. |
certificados[].rutTrabajador | string | sí | El RUT del trabajador al que pertenece el certificado, sin puntos y con guion. |
certificados[].nombreTrabajador | string | null | sí |
certificados[].periodoDesde | string | sí | Primer mes que cubre el certificado, en formato AAAA-MM. No lo elige quien llama: el conector usa la ventana más ancha que Previred admite, terminando en el período que se sincronizó. |
certificados[].periodoHasta | string | sí | Último mes que cubre el certificado, en formato AAAA-MM: el período que se sincronizó. |
certificados[].bytes | entero | sí | Tamaño del PDF en bytes. |
certificados[].certificadoUrl | string | null | sí |
certificados[].syncedAt | string | sí | Cuándo se guardó esta fila en Connect (ISO 8601). Dice qué tan fresca está la caché: si la última sincronización es vieja, lo que falta puede existir en Previred y todavía no haberse traído. |
cursor | string | null | sí |
JSON Schema de salida
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"certificados": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rutTrabajador": {
"type": "string",
"description": "El RUT del trabajador al que pertenece el certificado, sin puntos y con guion."
},
"nombreTrabajador": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "El nombre del trabajador según Previred, o null si el portal no lo trajo."
},
"periodoDesde": {
"type": "string",
"description": "Primer mes que cubre el certificado, en formato AAAA-MM. No lo elige quien llama: el conector usa la ventana más ancha que Previred admite, terminando en el período que se sincronizó."
},
"periodoHasta": {
"type": "string",
"description": "Último mes que cubre el certificado, en formato AAAA-MM: el período que se sincronizó."
},
"bytes": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Tamaño del PDF en bytes."
},
"certificadoUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Enlace firmado de vida corta para descargar el PDF del certificado, o null si todavía no se ha emitido. Caduca a los pocos minutos y no sirve para compartir."
},
"syncedAt": {
"type": "string",
"description": "Cuándo se guardó esta fila en Connect (ISO 8601). Dice qué tan fresca está la caché: si la última sincronización es vieja, lo que falta puede existir en Previred y todavía no haberse traído."
}
},
"required": [
"rutTrabajador",
"nombreTrabajador",
"periodoDesde",
"periodoHasta",
"bytes",
"certificadoUrl",
"syncedAt"
],
"additionalProperties": false
},
"description": "Los certificados guardados: hay uno vigente por trabajador, y cada sincronización lo reemplaza por uno más nuevo en vez de acumular uno por mes."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Cuando no es null quedan más filas: reenvíalo tal cual en 'cursor' para pedir la página siguiente. En null significa que esta fue la última."
}
},
"required": [
"certificados",
"cursor"
],
"additionalProperties": false
}Errores de esta tool
| Código | HTTP | Reintentable | Qué hacer |
|---|---|---|---|
connection_disabled | 403 | no | Reactívala en /connections o usa otra conexión del mismo sistema. |
alcance_not_enabled | 403 | no | Habilita el alcance en /connections o quítalo del input de la sincronización. |
Toda llamada puede devolver además los códigos transversales (validation_error, unauthorized, scope_not_granted, rate_limited, entre otros): el detalle vive en el catálogo de errores.
Próximos pasos
previred.conexion.sincronizar: la tool que escribe los datos que esta lectura devuelve.- Sincronizar y consultar: por qué leer datos reales son dos pasos.