Chapi

POST /api/check

Crea un Check de antecedentes para un RUT, o reutiliza el Check existente del mes calendario actual si ya hay uno.

Headers requeridos

HeaderValor
AuthorizationToken <token> (si no usas cookie auth)
Content-Typeapplication/json

Request body

CampoTipoRequeridoDefaultDescripción
rutstringRUT a verificar. Patrón: \d{1,2}\.?\d{3}\.?\d{3}-[\dkK]$. Ver Convenciones.
ai_summarybooleannofalseSi true, genera adicionalmente un resumen en lenguaje natural del Check (campo ai_summary de la respuesta).

Ejemplo válido

{
  "rut": "22222222-2",
  "ai_summary": true
}

Ejemplos inválidos

BodyResultado
{"rut": "22222222"}400 Invalid RUT (falta dígito verificador)
{"rut": "abc"}400 Invalid RUT
{}400 Invalid RUT (rut requerido)

Respuestas

200 OK

Devuelve el Check creado o el existente del mes calendario en curso. Schema: ACheck.

{
  "id": "5c7e0a1e-3c1d-4e0a-bf5a-2a0a9b1c0d1e",
  "permalink": "https://app.chapi.cl/check/5c7e0a1e-3c1d-4e0a-bf5a-2a0a9b1c0d1e",
  "rut": "22222222-2",
  "name": "Nombre Apellido",
  "data": {
    "causas_penales_count": 0,
    "causas_penales_rut_match_count": 0,
    "causas_penales_name_match_count": 0,
    "causas_civiles_count": 2,
    "causas_laborales_count": 0,
    "causas_sindicales_count": 0,
    "international_sanctions_count": 0,
    "pep": false
  },
  "created_at": "2026-05-01T12:00:00Z",
  "score": { "value": 0.18, "label": "low" },
  "pdf_report_url": "https://app.chapi.cl/checks/5c7e0a1e/report.pdf",
  "ai_summary": "El RUT presenta 2 causas civiles..."
}

Campos de la respuesta

CampoTipoDescripción
idstring (uuid)Identificador único del Check.
permalinkstring (uri)URL al detalle del Check en el panel app.chapi.cl.
rutstring (≤ 10 chars)RUT consultado (normalizado).
namestringNombre completo asociado al RUT.
dataobjectContadores y flags agregados — ver tabla abajo.
created_atstring (ISO 8601)Fecha y hora de creación del Check.
scoreobjectScore de riesgo — ver tabla abajo.
pdf_report_urlstring (uri)URL al PDF del reporte.
ai_summarystringResumen en lenguaje natural si ai_summary=true en el request; cadena vacía si no.

data (CheckData)

CampoTipoDescripción
causas_penales_countintegerTotal de causas penales detectadas.
causas_penales_rut_match_countintegerCausas penales con match exacto por RUT.
causas_penales_name_match_countintegerCausas penales con match por nombre (sin RUT).
causas_civiles_countintegerTotal de causas civiles.
causas_laborales_countintegerTotal de causas laborales.
causas_sindicales_countintegerTotal de causas sindicales.
international_sanctions_countintegerCoincidencias en listas de sanciones internacionales.
pepbooleantrue si la persona aparece como PEP (Persona Expuesta Políticamente).

score (CheckScore)

CampoTipoDescripción
valuenumber (double)Valor numérico del score.
labelstring enumExactamente uno de: "low", "medium", "high".

Errores

CódigomessageCausa
400Invalid RUTEl RUT no calza el regex.
402Insufficient balanceSaldo de créditos agotado.
404No data foundNo se encontró persona o empresa asociada al RUT.

Schema de error: { "message": "..." }. Más detalles en Errores.

Ejemplos

curl

curl -X POST https://app.chapi.cl/api/check \
  -H "Authorization: Token TU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rut": "22222222-2", "ai_summary": true}'

Python (requests)

import requests

resp = requests.post(
    "https://app.chapi.cl/api/check",
    headers={"Authorization": "Token TU_TOKEN"},
    json={"rut": "22222222-2", "ai_summary": True},
    timeout=30,
)
resp.raise_for_status()
check = resp.json()
print(check["score"]["label"], check["data"]["causas_penales_count"])

JavaScript (fetch)

const resp = await fetch("https://app.chapi.cl/api/check", {
  method: "POST",
  headers: {
    "Authorization": "Token TU_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ rut: "22222222-2", ai_summary: true }),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const check = await resp.json();
console.log(check.score.label, check.data.causas_penales_count);