Errores
Todos los errores devueltos por el API tienen el mismo schema:
{ "message": "Texto descriptivo del error" }
Códigos HTTP usados
| Código | Significado | Cuándo |
|---|---|---|
200 | OK | Operación exitosa. |
400 | Bad Request | RUT inválido (no calza el regex), nombre ausente o con formato inválido. |
402 | Payment Required | Saldo de créditos insuficiente para ejecutar la operación (POST /api/check, POST /api/name-to-rut, POST /api/rut-to-name). |
404 | Not Found | No se encontró persona o empresa para el RUT, o la búsqueda por nombre no arrojó resultados (incluye paginación fuera de rango). |
Mensajes específicos por endpoint
| Endpoint | Código | message |
|---|---|---|
POST /api/check | 400 | Invalid RUT |
POST /api/check | 402 | Insufficient balance |
POST /api/check | 404 | No data found |
GET /api/check/{rut} | 400 | Invalid RUT |
GET /api/check/{rut} | 404 | (sin Check para ese RUT en el mes calendario actual) |
POST /api/name-to-rut | 400 | (nombre ausente o inválido) |
POST /api/name-to-rut | 402 | Insufficient balance |
POST /api/name-to-rut | 404 | No data found |
POST /api/rut-to-name | 400 | Invalid RUT |
POST /api/rut-to-name | 402 | Insufficient balance |
POST /api/rut-to-name | 404 | No data found |
Manejo recomendado
import requests
def chapi_check(rut: str, token: str) -> dict | None:
r = requests.post(
"https://app.chapi.cl/api/check",
headers={"Authorization": f"Token {token}"},
json={"rut": rut},
timeout=30,
)
if r.status_code == 200:
return r.json()
if r.status_code == 400:
raise ValueError(f"RUT inválido: {rut}")
if r.status_code == 402:
raise RuntimeError("Saldo insuficiente — recarga créditos.")
if r.status_code == 404:
return None # No hay datos para este RUT
r.raise_for_status()
Pendiente de aclaración
Rate limits. No hay políticas de rate limit documentadas en el OpenAPI actual. No se especifica si existe
429 Too Many Requests ni cuáles son los límites por token. Asume que un consumo razonable (decenas de requests por minuto) está permitido.Reintentos seguros.
GET /api/check/{rut} es idempotente — reintentar es seguro. POST /api/check también es seguro de reintentar dentro del mismo mes calendario porque devuelve el Check existente sin generar uno nuevo. POST /api/name-to-rut y POST /api/rut-to-name son consultas (no mutaciones) y son seguras de reintentar.5xx. Manejo y semántica de errores
5xx no está documentada. Asume política estándar: con un 503 o 504 vale la pena un reintento con backoff exponencial; con 500 reporta a soporte.