API Reference

Valkoru API

La API de Valkoru permite integrar inteligencia territorial en tu propio sistema. Puedes correr simulaciones sobre las 216.341 manzanas del Censo 2024, propagar opinión entre territorios vecinos y exportar reportes ejecutivos — todo desde tu stack.

Base URL: https://api.valkoru.cl  ·  Todas las respuestas son application/json salvo el endpoint de reporte (PDF).

Flujo típico

Una integración completa sigue cuatro pasos en secuencia:

  1. Simular — lanzas un job con el estímulo y el territorio; el servidor corre el modelo por manzanas en paralelo
  2. Consultar — haces polling a GET /results/{job_id} hasta status = "done"
  3. Propagar — opcional: propaga los scores entre manzanas vecinas por rondas (modelo Friedkin-Johnsen)
  4. Exportar — genera un PDF con resumen ejecutivo y métricas de propagación

Autenticación

Todos los endpoints protegidos requieren el header X-API-Key con tu API key. Las keys tienen el formato vk-... y se generan desde tu panel o vía API.

# Todas las requests autenticadas llevan este header
X-API-Key: vk-tu_api_key_aqui
Las API keys no se pueden recuperar después de su creación — solo se muestra el secreto completo una vez. Guárdala en una variable de entorno, nunca en el código fuente.

Crear tu primera API Key

Las API keys se generan desde la aplicación, en la sección Ajustes. Necesitas una cuenta activa.

🔑
¿Ya tienes cuenta? Ve a Ajustes → API Keys y haz clic en Nueva key. El secreto completo solo se muestra una vez — cópialo en ese momento.

¿No tienes cuenta aún? Crear cuenta gratis →

Formato de la key

Todas las keys tienen el prefijo vk- seguido de 32 caracteres aleatorios. En el panel solo se muestra el prefijo corto (vk-AbCdEfG) — el secreto completo nunca vuelve a estar visible.

# Ejemplo de API key
vk-AbCdEfGhIjKlMnOpQrStUvWxYz012345678
formato

Simular territorio

Lanza una simulación sobre un conjunto de manzanas. El modelo corre en paralelo — el job se encola y puedes consultar el progreso con polling.

POST /simulate
ParámetroTipoDescripción
estimulostringTexto del anuncio, campaña o estímulo a evaluar
campanastringNombre de la campaña (encabezado del estímulo)
comunasstring[]Lista de comunas en mayúsculas. Ej: ["PROVIDENCIA", "NUNOA"]
region_codesstring[]Códigos de región. Ej: ["13"] para RM
providerstringopenai (default) · heuristic (sin LLM, más rápido)
layer_presetstringbase · financiero · consumo · bienestar · seguridad · completo
max_manzanasintegerMuestra máxima (10–500). Default: 50
curl https://api.valkoru.cl/simulate \
  -H "X-API-Key: vk-..." \
  -H "Content-Type: application/json" \
  -d '{
    "campana": "Tocó Crédito, Toca MACHBANK",
    "estimulo": "Crédito de consumo con abono inmediato, tasa desde 0,94%. 100% digital, sin filas.",
    "comunas": ["PROVIDENCIA", "NUNOA", "MAIPU"],
    "layer_preset": "financiero",
    "max_manzanas": 50
  }'
bash
Respuesta
{
  "job_id":       "uuid-del-job",
  "total":        50,
  "coverage_pct": 12.4
}
json

Consultar resultados

El job corre de forma asíncrona. Haz polling hasta que status sea "done" o "error". Tiempo típico: 15–60 segundos según el número de manzanas.

GET /results/{job_id}
curl https://api.valkoru.cl/results/uuid-del-job \
  -H "X-API-Key: vk-..."
bash
Respuesta cuando status = "done"
{
  "status":   "done",
  "total":    50,
  "results": [
    {
      "objectid":   131422,
      "manzent":    "13101000100",
      "comuna":     "PROVIDENCIA",
      "score":      74,          // receptividad 0-100
      "reaccion":   "Los residentes ven el producto...",
      "razones":    ["Alta bancarización", "..."],
      "dimensiones": {
        "economica": 78,
        "cultural":  65,
        "politica":  60,
        "emocional": 72
      },
      "confidence": 0.83,      // calidad del estimado
      "divergence": +12        // diferencia LLM vs prior censal
    }
    // ... 49 manzanas más
  ]
}
json

Propagar opinión entre territorios

Simula cómo los scores se difunden entre manzanas vecinas a lo largo de rondas — modelo Friedkin-Johnsen con personalidad territorial derivada de clustering censal. Devuelve un snapshot del mapa por cada ronda y métricas de dinámica.

POST /propagate
ParámetroTipoDescripción
job_idrequeridoID del job de simulación completado
iterationsintegerRondas de propagación (1–30). Default: 10
thresholdfloatRadio de influencia en metros (50–5000). Default: 700
curl https://api.valkoru.cl/propagate \
  -H "X-API-Key: vk-..." \
  -H "Content-Type: application/json" \
  -d '{"job_id": "uuid-del-job", "iterations": 10}'
bash
Respuesta
{
  "iterations": 10,
  "steps": [
    // paso 0 (inicial) — incluye comuna y arquetipo territorial
    [{ "objectid": 131422, "score": 74, "delta": 0, "comuna": "PROVIDENCIA", "archetype": "Élite profesional" }, ...],
    // pasos 1-10
    [{ "objectid": 131422, "score": 72, "delta": -2 }, ...]
  ],
  "metrics": {
    "delta_promedio":           -1.2,
    "avg_abs_delta":           3.4,
    "pct_movimiento_material": 38.0,  // % con |Δ| ≥ 3
    "punto_inflexion":         2,       // ronda con mayor velocidad
    "convergencia":            true,
    "velocidades_por_ronda":   [2.1, 1.8, 0.4, ...],
    "top_volatiles":           [[131422, -8.2], ...],
    "top_resistentes":         [[131500, -0.1], ...]
  }
}
json

Exportar reporte PDF

Genera un reporte ejecutivo en PDF con resumen por comunas, distribución de receptividad, resumen LLM y — si incluyes métricas de propagación — una sección de dinámica territorial.

POST /reporte
Devuelve application/pdf como binario.
curl https://api.valkoru.cl/reporte \
  -H "X-API-Key: vk-..." \
  -H "Content-Type: application/json" \
  -o reporte.pdf \
  -d '{
    "job_id": "uuid-del-job",
    "estimulo": "Crédito de consumo con abono inmediato...",
    "comuna": "PROVIDENCIA",
    "prop_metrics": { ... }
  }'
bash

Consultar territorio disponible

GET /territory/options
Devuelve todas las regiones y sus comunas disponibles.
GET /territory/estimate?comunas=PROVIDENCIA&comunas=NUNOA
Devuelve el número de manzanas elegibles y si el alcance requiere proyecto.
curl "https://api.valkoru.cl/territory/estimate?comunas=PROVIDENCIA&comunas=NUNOA" \
  -H "X-API-Key: vk-..."
bash
Respuesta
{
  "n_manzanas":      4821,
  "n_comunas":       2,
  "n_regiones":      1,
  "project_required": false
}
json

Capas de datos disponibles

El parámetro layer_preset en /simulate controla qué datos adicionales ve el modelo al evaluar cada manzana.

PresetCapas incluidasMejor para
baseCenso + CASENAnálisis general, demografía e ingreso
financierobase + EFHFintech, crédito, bancarización, productos bancarios
consumobase + EPFRetail, alimentación, gasto discrecional
bienestarbase + EBSSalud mental, satisfacción, estrés económico
seguridadbase + ENUSCDelivery nocturno, seguros, movilidad urbana
completoTodas las capasAnálisis profundo, mayor costo computacional
GET /layers/options
Devuelve presets y capas disponibles con descripciones.

Gestión de API Keys

GET /auth/keys
Lista tus API keys activas (sin mostrar el secreto completo).
DELETE /auth/keys/{key_id}
Revoca una API key. La acción es inmediata e irreversible.

Errores

CódigoCausa
401API key inválida, revocada o ausente
400Parámetros inválidos o territorio vacío
403Límite de simulaciones gratuitas agotado, o alcance requiere proyecto
404Job no encontrado o no pertenece a tu cuenta
500Error interno — contactar soporte
Los errores 403 con código project_scope_required indican que el territorio seleccionado supera los límites del plan self-service. Escríbenos a contacto@valkoru.cl para definir alcance.