- Chile primero, diseño country-agnostic: hoy los sujetos son chilenos (
country: "CL", RUT comodoc_id); nuevos países se enchufan sin cambios de contrato. - Frescura en vivo: cada informe consulta las fuentes de datos al momento de la compra y declara, por fuente, si el dato está
live,cachedounavailable. Nada de data rancia en silencio. - Cumplimiento incorporado: la
purposedeclarada es obligatoria (ley de protección de datos de Chile), cada score lleva sus códigos de razón, y cada informe incluye un código de verificación pública.
Qscore es un producto pagado, gated por el service flag
risk de tu cuenta y facturado por informe (fees standalone risk_report_person / risk_report_company). Si la generación falla después del cobro, el fee se reembolsa automáticamente y el informe queda failed con su error_code. Excepción: tu propio informe (self) es gratis — ver “Tu propio informe (self)” más abajo.Cómo funciona
La generación es síncrona: elPOST consulta los registros de buró, calcula el score, renderiza el PDF y devuelve el informe listo en una sola respuesta. Una fuente caída no hace fallar un informe pagado — se genera con la data persistida y la fuente se declara cached (o unavailable si no aportó nada) en la sección sources.
Tu propio informe (self)
Si tienes una cuenta verificada (KYC/KYB aprobado), puedes generar y descargar tu propio informe Qscore directamente. Es tu derecho de acceso a tus datos personales (ARCO / Ley 21.719 de Chile), no una compra:- Gratis: nunca cobra fee.
- Sin penalización al score: los informes self quedan excluidos del conteo de consultas de tu score — revisar tu propio informe jamás lo perjudica.
- Anti-oráculo por diseño: la identidad del sujeto sale del
tax_idverificado en tu KYC/KYB. El request no aceptadoc_id— pedir el informe de un tercero por estos endpoints es imposible. - Límite de frecuencia: un informe nuevo cada 30 días. Si ya tienes uno
readydentro de la ventana, elPOSTlo devuelve conidempotency_hit: true(HTTP 200) en vez de generar otro.
Generar (o reusar) tu informe
POST /v1/qscore/my-report — el body es opcional: {"lang": "en"|"es"|"zh"} (default en). La generación es síncrona: la respuesta trae el informe terminado. No necesitas idempotency_key — la idempotencia es determinista por cuenta, sujeto y día (un doble submit el mismo día devuelve el informe ya creado).
Genera tu propio informe
201 Created (informe nuevo generado)
200 OK con el mismo informe y "idempotency_hit": true. Si la generación falla, la respuesta es 201 con status: "failed" y su error_code / error_message (nada se cobró — el informe self es gratis).
Leer tu último informe
GET /v1/qscore/my-report devuelve tu informe self más reciente (cualquier estado) sin generar uno nuevo — 404 not_found si nunca generaste uno.
Descargar el PDF
GET /v1/qscore/my-report/pdf descarga el PDF de tu último informe self (Content-Disposition: attachment; filename="qscore_self_<id>.pdf"). Si el informe aún no está ready, responde 404 pdf_not_ready.
El PDF lleva el mismo código de verificación pública que cualquier informe Qscore — cualquiera que lo tenga puede comprobar su autenticidad en GET /verify/qscore/{code} (ver “Verificación pública” más abajo).
Errores del informe self
El endpoint comercial
POST /v1/qscore/reports rechaza purpose: "self_access" con 400 invalid_purpose — el acceso self solo va por /v1/qscore/my-report. El webhook risk_report_ready de un informe self lleva un campo extra "purpose": "self_access" en su payload (los informes comerciales lo omiten).1. Comprar un informe
POST /v1/qscore/reports crea y genera el informe completo. La idempotency_key es obligatoria (el informe cobra un fee: un retry con la misma clave devuelve el informe original con idempotency_hit: true y jamás cobra dos veces).
- Persona
- Empresa
Crear informe de persona
201 Created (informe listo)
error_code: "generation_failed" persistido en el informe. Reejecutar con la misma idempotency_key devuelve el informe original (o su falla) — jamás cobra dos veces.
2. El score (modelo v1)
El score correqscore-v1: base 600, rango 1–999, ajustado por hechos adversos (morosidades vigentes, protestos, quiebras, consultas recientes) y señales positivas (líneas activas, profundidad de historial, actividad de la empresa, datos alternativos).
Cada informe lleva sus
reason_codes — la capa de explicabilidad del score:
Comparación con pares de la industria (solo informes de empresa)
Los informes de empresa pueden incluir el bloquepeer_benchmark: la posición del score dentro de su segmento — mismo país y misma industria (clasificación ISIC, tomada del registro tributario).
Reglas del benchmark:
- Solo informes de empresa — los informes de persona nunca lo incluyen (el bloque se omite).
- La industria sale del registro tributario y queda asociada al sujeto (la última conocida manda).
- La población comparable es el último score de cada empresa del mismo país e industria, excluyendo al sujeto evaluado.
- Se publica solo con al menos 5 empresas comparables — con menos, el bloque no aparece en el informe (nunca se inventa contexto estadístico).
percentilese lee como “mejor que el N% del segmento”;median_scorees la mediana del segmento.
3. Consulta e historial
Listar informes
GET /v1/qscore/reports lista los informes comprados por tu cuenta. from y to (fechas YYYY-MM-DD, zona horaria de tu organización, ambos inclusive) son obligatorios; los filtros subject_id y status (pending, ready, failed) son opcionales; paginación con page / page_size (default 50, máx 200).
Listar informes
200 OK
Detalle del informe
GET /v1/qscore/reports/{report_id} devuelve el informe; cuando está ready incluye el objeto report completo (mismo shape que la respuesta de creación).
Descargar el PDF
GET /v1/qscore/reports/{report_id}/pdf descarga el PDF brandeado (application/pdf, filename qscore_<report_id>.pdf). Mientras el informe no esté ready responde 404 pdf_not_ready. El PDF es un documento privado: se descarga autenticado — jamás se adjunta a emails ni se expone en URLs públicas.
Ficha del sujeto y score vigente (sin comprar un informe nuevo)
GET /v1/qscore/subjects/{doc_id}?country=CL devuelve la ficha del sujeto (identidad + último score) de un documento sobre el que ya compraste informes:
200 OK (ficha del sujeto)
GET /v1/qscore/subjects/{doc_id}/score?country=CL devuelve solo el score vigente (404 no_score si el sujeto aún no tiene):
200 OK (score vigente)
4. Estados del informe
5. Errores
Catálogo completo en Errores.
6. Webhooks
Suscríbete a los eventos de Qscore en tu configuración de webhooks. Los tres son eventos de audiencia cuenta, firmados como todo webhook.risk_report_ready — un informe terminó de generarse
risk_report_ready — un informe terminó de generarse
risk_report_ready
"purpose": "self_access"; los informes comerciales lo omiten.risk_score_changed — el score del sujeto se movió
risk_score_changed — el score del sujeto se movió
Se emite cuando un informe nuevo calcula un score distinto al anterior del sujeto.
risk_score_changed
risk_monitoring_alert — un sujeto monitoreado cambió
risk_monitoring_alert — un sujeto monitoreado cambió
Se emite por cada suscripción de monitoreo activa cuando el score del sujeto cae bajo tu piso
monitor_since_score, aparecen registros nuevos en el buró o se eliminan registros. La primera evaluación tras suscribirte solo siembra el baseline y nunca alerta.risk_monitoring_alert
7. Verificación pública
Cada PDF del informe imprime un código de verificación y su URL. Cualquiera que tenga el código puede verificar la autenticidad del informe — sin PII — enGET /verify/qscore/{code} (sin auth):
200 OK (informe válido)
404 con {"valid": false, ...}. El endpoint tiene rate limit por IP y no revela nada más que la validez, la banda y la fecha.
8. Disputas ARCO
Los titulares de los datos pueden ejercer sus derechos ARCO (acceso, rectificación, cancelación, oposición). Tu cuenta abre una disputa contra un registro específico de un sujeto:Abrir una disputa
201 Created
open → under_review → resolved_corrected | resolved_rejected (final). Lístala con GET /v1/qscore/subjects/{doc_id}/disputes?country=CL&status=open (paginado) y lee una con GET /v1/qscore/disputes/{dispute_id}. La resolución la hace el admin de tu organización desde el panel de administración.
9. Monitoreo
Cuando ya tienes un informeready de un sujeto, suscríbelo al monitoreo continuo y recibe un webhook risk_monitoring_alert cada vez que algo relevante cambia: el score cae bajo tu umbral, aparecen registros nuevos en el buró o se eliminan registros. El monitoreo es gratuito — el único requisito es el informe comprado (la misma política del endpoint de score: nadie vigila a un tercero sin haber pagado por conocerlo).
Suscribir (o actualizar umbrales)
200 OK
monitor_since_score(opcional, 1–999): alerta cuando el score cae bajo este umbral (triggerscore_drop_below).only_material(defaultfalse): entruesolo los cambios materiales disparan la alerta.- El worker re-evalúa cada sujeto monitoreado cada ~5 minutos. La primera pasada solo siembra el baseline — jamás alerta sobre datos que ya viste en el informe que pagaste.
GET /v1/qscore/subjects/{doc_id}/monitoring, lista todos los sujetos monitoreados de la cuenta con GET /v1/qscore/monitoring?active=true&page=1&page_size=50 (paginado: items, page, page_size, total) y desactiva con DELETE:
Desactivar el monitoreo
200 OK
DELETE desactiva (active: false) — la historia de la suscripción jamás se borra, y un nuevo PUT la reactiva con umbrales frescos.
El payload de la alerta (risk_monitoring_alert) lleva los triggers (score_drop_below, new_records, records_removed), el score actual y el anterior, la banda y los registros nuevos — ejemplo completo en webhooks.
10. Scoring por lotes (carteras)
Para evaluar una cartera completa en vez de un sujeto a la vez, sube un lote conPOST /v1/qscore/batches: hasta 5.000 sujetos (JSON o CSV), un solo country y purpose para todo el lote, y un fee estimado calculado por adelantado. La API responde 202 Accepted al instante y un worker en segundo plano genera los informes individuales uno por uno — cada ítem es un informe Qscore estándar con su propio PDF, su fee y su reembolso automático si la generación falla.
- Un solo aviso al final: cuando el lote termina recibes exactamente un webhook
risk_batch_completedy un email de resumen (nunca uno por sujeto). - Seguimiento: lista e inspecciona lotes, revisa sus ítems paginados y descarga el CSV consolidado en
GET /v1/qscore/batches/{id}/results.csv.
Preguntas frecuentes
¿El score se recalcula en cada informe?
¿El score se recalcula en cada informe?
Sí. Cada compra consulta las fuentes en vivo y recalcula el score con el modelo
qscore-v1 vigente. Si una fuente está caída, el informe se genera con la data persistida y la fuente se declara cached/unavailable en la sección sources — nunca en silencio.¿Qué pasa si el informe falla después de cobrarme?
¿Qué pasa si el informe falla después de cobrarme?
El fee se reembolsa automáticamente en el mismo flujo y el informe queda
failed con su error_code. Tu idempotency_key reapunta a ese informe fallido; para reintentar, usa una clave nueva.¿Por qué la finalidad es obligatoria?
¿Por qué la finalidad es obligatoria?
La ley chilena de protección de datos exige una finalidad declarada y legítima para consultar datos crediticios de una persona o empresa. Se almacena con el informe y se imprime en él (auditabilidad para el titular).
¿Puedo consultar el score de alguien sin pagar un informe?
¿Puedo consultar el score de alguien sin pagar un informe?
Sí — si ya compraste un informe de ese sujeto,
GET /v1/qscore/subjects/{doc_id}/score devuelve el último score calculado sin costo adicional. El primer informe de un sujeto siempre es un informe completo pagado.¿El PDF se envía por email?
¿El PDF se envía por email?
No. El email de “informe listo” no lleva adjunto a propósito (minimización de datos de terceros). El PDF solo se descarga autenticado desde la API.
¿Qué países están soportados?
¿Qué países están soportados?
Chile hoy (
country: "CL", RUT como doc_id). El contrato es country-agnostic: nuevos países funcionarán con los mismos endpoints cuando se enchufen sus fuentes.¿Cada cuánto se revisa un sujeto monitoreado?
¿Cada cuánto se revisa un sujeto monitoreado?
Cada ~5 minutos. El webhook
risk_monitoring_alert solo se emite cuando algo cambió contra el baseline (o solo en cambios materiales con only_material: true) — nunca recibes una alerta por un no-op.