Chapi

POST /api/name-to-rut

Busca RUTs a partir de un nombre completo. Devuelve resultados paginados.

Headers requeridos

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

Query parameters

ParámetroTipoDefaultMáximoDescripción
pageinteger1Página solicitada (1-indexed).
page_sizeinteger2525Cantidad de resultados por página.

Si page queda fuera de rango, el API responde 404 No data found.

Request body

CampoTipoRequeridoDescripción
namestringNombre completo a buscar.

Ejemplo válido

{ "name": "Juan Pérez" }

Respuestas

200 OK

Schema: PaginatedRUTResponse.

{
  "count": 137,
  "page": 1,
  "page_size": 25,
  "total_pages": 6,
  "results": [
    { "rut": "12345678-9", "full_name": "Juan Pérez González" },
    { "rut": "9876543-K", "full_name": "Juan Pérez Soto" }
  ]
}

Campos

CampoTipoDescripción
countintegerTotal de coincidencias en todas las páginas.
pageintegerPágina devuelta.
page_sizeintegerTamaño de la página devuelta.
total_pagesintegerCantidad total de páginas.
resultsarray de RUTCoincidencias en esta página.

RUT

CampoTipoDescripción
rutstring (read-only)RUT en formato canónico.
full_namestring nullable (≤ 255)Nombre completo asociado. Puede ser null.

Errores

CódigoCausa
400Nombre ausente o con formato inválido.
402Insufficient balance — saldo insuficiente.
404No data found — sin coincidencias o página fuera de rango.

Ejemplos

curl

curl -X POST 'https://app.chapi.cl/api/name-to-rut?page=1&page_size=25' \
  -H "Authorization: Token TU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Juan Pérez"}'

Python (requests)

import requests

def search_by_name(name: str, token: str, page: int = 1, page_size: int = 25):
    r = requests.post(
        "https://app.chapi.cl/api/name-to-rut",
        params={"page": page, "page_size": page_size},
        headers={"Authorization": f"Token {token}"},
        json={"name": name},
        timeout=30,
    )
    if r.status_code == 404:
        return {"count": 0, "results": []}
    r.raise_for_status()
    return r.json()

result = search_by_name("Juan Pérez", "TU_TOKEN")
print(f"{result['count']} matches; page 1 of {result.get('total_pages', 0)}")

JavaScript (fetch)

const params = new URLSearchParams({ page: "1", page_size: "25" });
const resp = await fetch(`https://app.chapi.cl/api/name-to-rut?${params}`, {
  method: "POST",
  headers: {
    "Authorization": "Token TU_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ name: "Juan Pérez" }),
});
if (resp.status === 404) {
  console.log("Sin coincidencias.");
} else if (!resp.ok) {
  throw new Error(`HTTP ${resp.status}`);
} else {
  const data = await resp.json();
  console.log(`${data.count} matches`);
}

Iterar todas las páginas

def iter_all(name, token):
    page = 1
    while True:
        result = search_by_name(name, token, page=page, page_size=25)
        for r in result.get("results", []):
            yield r
        if page >= result.get("total_pages", 0):
            return
        page += 1