Saltar al contenido principal
Este es una web oficial del Gobierno de la República Dominicana.
Así es como puedes saberlo

Los sitios oficiales usan .gob.do

Un dominio .gob.do pertenece a una institución del Estado dominicano.

Los sitios seguros usan HTTPS

Un candado o https:// indica que la conexión con el sitio es cifrada.

Logotipo FonVivienda
Beta

API contract en construcción —la especificación técnica que describe cómo se comunican los sistemas—, publicada para revisión de los burós de crédito y de la ABA. Los esquemas pueden cambiar.

API de Segmentación de Escoreabilidad para Vivienda Social

Este servicio permite a FonVivienda/MIVHED transmitir a los burós de crédito el registro de un solicitante de vivienda social validado, y recibir de vuelta su segmentación de escoreabilidad (A/B/C), en tiempo real y con trazabilidad completa.

33
Campos del registro del solicitante
A·B·C
Único resultado que retorna a FonVivienda
< 2 s
Objetivo de respuesta por solicitante (p95)

Qué es un «API contract» y qué no es

A lo largo de este documento se habla del API contract. Es un término técnico: designa la especificación que describe cómo dos sistemas se comunican —qué campos se envían, con qué formato, qué responde el otro extremo y qué errores pueden ocurrir. Su función es que ambos equipos de desarrollo programen contra la misma definición y todo encaje a la primera.

No es un contrato legal. No crea obligaciones jurídicas, no sustituye al convenio entre las instituciones ni al acuerdo de tratamiento de datos. Esos instrumentos se firman aparte y son los que amparan el intercambio; este documento solo dice cómo se ejecuta técnicamente.

Por qué el servicio se llama así

El nombre evita una confusión que apareció en la revisión: este API no devuelve un score. Devuelve una etiqueta de segmento que indica si el solicitante es evaluable y por qué vía. Llamarlo «API de score» daría a entender que el Estado recibe el puntaje de cada ciudadano, que es exactamente lo que el proceso acordado prohíbe.

Lo que el buró devuelve aquíLo que el buró NO devuelve aquí
Segmento A, B o C; indicador escoreable; códigos de razón; identificación del modelo y su certificación. Score, banda de riesgo homologada, probabilidad de incumplimiento, variables del modelo o cualquier valor numérico de solvencia.

Objeto del servicio

La banca privada no ha estado financiando la vivienda social porque una porción mayoritaria de los solicitantes carece de historial crediticio tradicional y, sin historial, no existe un perfil de riesgo que sustente la decisión ni la provisión exigida por el Reglamento de Evaluación de Activos (REA).

Este API materializa el Paso 4 y el Paso 5 del proceso acordado: la consulta de evaluación desde FonVivienda hacia los burós y el retorno de la segmentación, de forma programática y sin intervención manual.

Posición en el proceso end-to-end

Recepción de la solicitud → Validación social y financiera → Preparación del registroConsulta de evaluación (este API)Segmentación por el buró (este API) → Enrutamiento del expediente → Decisión bancaria → Bancarización → Reporte y monitoreo.

Regla de oro: qué NO retorna el buró

!
El score y la banda de riesgo nunca viajan hacia FonVivienda.

El único dato que este API devuelve al Estado es la etiqueta de segmento (A, B o C) y sus códigos de razón. El valor del score y la banda de riesgo homologada permanecen en el buró y se entregan exclusivamente a la entidad bancaria que los consulta por su propio canal comercial.

Cualquier implementación que incluya score, banda_riesgo, probabilidad_incumplimiento o equivalentes en la respuesta a FonVivienda incumple el API contract y será rechazada por el validador de esquema con 422 · FV-422-011. Esta restricción protege el principio de no constituir una base de scores individuales de acceso general.

Modo de intercambio

El intercambio es uno a uno: una consulta por solicitante, resuelta en línea. Es el flujo que la operación diaria necesita, porque los expedientes llegan de forma continua e incluyen reenvíos por subsanación que deben reevaluarse al momento.

ModoInvocaciónRespuestaCuándo usarlo
Síncrono
Predeterminado
POST /evaluaciones200 con el segmento · p95 < 2 sCaso normal. El buró resuelve identidad y segmenta en línea.
AsíncronoPOST /evaluaciones
con Prefer: respond-async
202 + callback firmadoCuando el buró necesita consultar fuentes externas de data alternativa y no puede resolver dentro del tiempo de respuesta.
El modo asíncrono no es un mecanismo de carga masiva: sigue siendo una consulta por solicitante, cuyo resultado se entrega más tarde. El control de volumen se hace por concurrencia y límites de tasa, no agrupando registros (ver límites de uso).

Alcance y límites

Dentro del alcance

  • Transmisión del registro del solicitante validado, incluido el consentimiento informado.
  • Retorno de la segmentación A/B/C con códigos de razón normalizados.
  • Trazabilidad completa: identificador de evaluación, de registro y de petición, con firma verificable.
  • Catálogos compartidos y esquemas versionados.

Fuera del alcance

  • Entrega del score o de la banda de riesgo a FonVivienda (ver regla de oro).
  • El canal buró ↔ banco, que se rige por los contratos comerciales vigentes de cada entidad.
  • El API de monitoreo anonimizado FonVivienda ↔ Superintendencia, que se especifica por separado.
  • La consulta a fuentes de data alternativa (Unipago/TSS, servicios), que cada buró resuelve internamente.

Ruta de implementación

  1. Confirmar el rol de su institución en A quién está dirigido.
  2. Leer Antes de empezar y solicitar credenciales de sandbox.
  3. Revisar el diccionario de datos y confirmar la disponibilidad de cada campo.
  4. Implementar autenticación, firma e idempotencia.
  5. Validar el payload contra los JSON Schema publicados.
  6. Ejercitar el API contract en el entorno de pruebas con datos ficticios.

A quién está dirigido

Este documento se dirige a quienes deben implementar o revisar el API contract, es decir, la especificación técnica que describe cómo se comunican los sistemas. Todos los demás participantes del convenio aparecen aquí como contexto: intervienen en el proceso, pero no consumen este API.

Destinatarios de este documento

Burós de crédito Destinatario principal

Equifax/DataCrédito, Kalifika/Califica y TransUnion. Son quienes implementan el lado receptor del API contract: exponen el endpoint de evaluación, resuelven identidad, aplican su motor tradicional y su modelo de data alternativa, y devuelven la etiqueta de segmento.

Qué necesita de este documento

ABA Coordinador y revisor

Asociación de Bancos Múltiples de la República Dominicana. Convoca el convenio y articula al sector bancario. No consume este API, pero revisa el contrato en representación de la banca que después consumirá el resultado por su propio canal con el buró.

Qué necesita de este documento

FonVivienda / MIVHED Emisor y custodio del API contract

Publica y mantiene esta especificación, construye el cliente que envía cada solicitante y el receptor que recibe los callbacks. Es el owner del proceso de punta a punta.

Otros actores

Participan en el proceso general de financiamiento de vivienda social, pero no intervienen en este API contract. Se enumeran para ubicar el API dentro del ecosistema.

ActorRol en el procesoRelación con este API
Entidades bancariasDecisor final del créditoConsumen la banda de riesgo y el score directamente de su buró contratado, por su canal comercial existente. Ese intercambio es ajeno a esta especificación.
Superintendencia de BancosSupervisorCertifica estadísticamente los modelos de data alternativa y custodia la central de riesgo. El monitoreo anonimizado de la cartera se especifica por separado.
Junta MonetariaÓrgano normativoAprueba la incorporación de la data alternativa al REA. Sin relación operativa con el API.
BID y BANDEXFondo de GarantíaAportan y operan la cobertura que mitiga el riesgo del financiamiento. Se activa después de la decisión bancaria.
Banco CentralLiquidez dirigidaProvee el fondo revolvente para vivienda social.
Unipago / TSSFuente de data alternativaSuministra la trazabilidad de aportes a la seguridad social. Cada buró la consulta por su cuenta; no viaja por este API.
Solicitante (ciudadano)Titular de los datosOtorga el consentimiento que habilita toda consulta. Sus derechos se describen en Consentimiento y datos personales.

Quién hace qué

ResponsabilidadFonViviendaBuróABA
Definir y publicar el API contractResponsableConsultadoConsultado
Capturar y validar los datos del solicitanteResponsable
Recabar y custodiar el consentimientoResponsableVerifica
Exponer el endpoint de evaluaciónResponsable
Resolver identidad y segmentarResponsable
Certificar el modelo ante el reguladorInformadoResponsableConsultado
Enrutar el expediente a la bancaResponsableFacilita
Homologar bandas para la bancaInformadoResponsableCoordina

Arquitectura y flujo de mensajes

Quién llama a quién, en qué orden y con qué mecanismo de transporte. El diagrama refleja la colaboración BPMN acordada, reducida a los intercambios que este API cubre.

Mapa de participantes

Ciudadano Solicitud + consentimiento FonVivienda / MIVHED Owner del proceso Validación social y financiera Enrutamiento del expediente Buró de crédito Equifax · Kalifika · TransUnion Motor tradicional + alternativo Homologación de bandas Entidad bancaria Política de crédito Decisión de otorgamiento Superintendencia Central de riesgo Certificación del modelo Unipago / TSS Señales de data alternativa POST /evaluaciones segmento A/B/C score + banda (solo al banco) reporte de crédito certifica expediente

Las líneas punteadas indican intercambios fuera del alcance de este API contract. El trazo rojo señala el único canal por el que circula el score.

Secuencia del intercambio

#ActorAcciónMensaje
1FonViviendaPrepara el registro del solicitante validadoPOST /evaluaciones · cuerpo firmado HMAC + Idempotency-Key
2BuróValida esquema y firma
3BuróResuelve identidad y segmenta A/B/C
4BuróResponde en línea200 OK · {segmento, escoreable, motivos}
5FonViviendaEnruta a banca (A, B) o a educación financiera (C)

Direcciones y responsabilidades

DirecciónQuién expone el endpointQuién lo implementaEndpoints
FonVivienda → BuróEl buróCada buró, conforme a este API contract/evaluaciones, /evaluaciones/{id}, /consentimientos/revocaciones, /catalogos, /esquemas, /salud
Buró → FonViviendaFonViviendaFonViviendaPOST {callback_url} declarada en la petición asíncrona

FonVivienda es el publicador y custodio del API contract: define los esquemas, los catálogos y las reglas de validación. Cada buró implementa el lado receptor y declara su base_url durante el registro (ver Antes de empezar).

Máquina de estados de la evaluación

En el flujo habitual la evaluación nace y termina dentro de la misma petición, en estado COMPLETADA. Los demás estados solo aparecen en la variante de respuesta diferida descrita en la referencia de endpoints.

EstadoSignificadoTransiciones válidasTerminal
RECIBIDAAcuse emitido; la evaluación está encolada.EN_PROCESO, RECHAZADANo
EN_PROCESOEl buró está resolviendo identidad y segmentando.COMPLETADA, ERRORNo
COMPLETADASegmento asignado y notificado.
RECHAZADAFalló la validación de esquema, firma o consentimiento.
ERRORFallo interno del buró; puede reenviarse con nueva Idempotency-Key.
EXPIRADAHan transcurrido 30 días desde COMPLETADA; el resultado ya no se sirve.

Antes de empezar

Requisitos de habilitación, entornos disponibles y datos que cada parte debe entregar para completar el registro técnico.

Entornos

La integración recorre tres entornos independientes. Cada uno tiene su propio juego de credenciales, sus propias claves de firma y su propia base de datos: nada se comparte entre ellos. Avanzar de uno al siguiente exige superar la lista de verificación del entorno anterior.

Las URL base aún no están definidas. Se publicarán al habilitar cada entorno y pueden variar respecto de los ejemplos que aparecen en esta documentación. Hasta entonces figuran como TBD.

1 · Sandbox — construir y equivocarse sin consecuencias

Primer entorno al que se conecta un buró. Existe para que el equipo de desarrollo pruebe el API contract sin ningún riesgo: si algo se rompe, no afecta a nadie.

URL baseTBD
DatosExclusivamente sintéticos. Cédulas generadas, nombres ficticios, direcciones inventadas.
AutenticaciónOAuth 2.0 con credenciales de prueba. Sin mTLS, para bajar la fricción inicial.
DisponibilidadSin compromiso de servicio. Puede reiniciarse o vaciarse sin aviso.
Datos persistentesSe purgan periódicamente. No usarlo como repositorio de pruebas.
Quién otorga accesoDirección de Tecnología de FonVivienda, a solicitud del buró.

Prohibido enviar datos personales reales al sandbox. El entorno no cuenta con los controles de retención ni de cifrado en reposo exigidos para información personal, y su contenido puede ser visible para el equipo técnico de ambas partes durante la depuración.

2 · Certificación — demostrar que la integración funciona

Réplica fiel de producción en configuración y controles de seguridad, pero sin datos reales de ciudadanos. Aquí se ejecuta y se firma la lista de verificación que habilita el paso a producción. Es también el entorno donde se prueban las versiones nuevas del API contract antes de liberarlas.

URL baseTBD
DatosSintéticos de volumen realista, más una muestra anonimizada acordada entre las partes.
AutenticaciónOAuth 2.0 + mTLS, con los mismos certificados y el mismo rigor que producción.
DisponibilidadHorario hábil, con aviso previo de mantenimientos.
Datos persistentesSe conservan durante la ventana de certificación como evidencia de las pruebas.
Quién otorga accesoFonVivienda, tras completar el registro técnico del participante.

3 · Producción — ciudadanos reales

Único entorno donde circulan datos de solicitantes reales, con consentimiento vigente. Todo lo que ocurre aquí queda registrado en la bitácora de auditoría y es exigible ante el regulador.

URL baseTBD
DatosReales, sujetos a consentimiento informado y a las reglas de retención de la sección de datos personales.
AutenticaciónOAuth 2.0 + mTLS + lista blanca de direcciones IP de salida.
DisponibilidadContinua, con ventana de mantenimiento anunciada.
Datos persistentesSí, con las políticas de retención y borrado acordadas.
Quién otorga accesoFonVivienda, previa certificación aprobada y firma del acuerdo de tratamiento de datos.

Cómo distinguir el entorno desde el código

Toda petición declara su entorno en la cabecera X-FV-Ambiente. El receptor rechaza con 403 cualquier petición cuyo valor no coincida con el entorno en el que está desplegado. Es una salvaguarda deliberada: evita que una configuración mal apuntada envíe datos reales al sandbox, o datos de prueba a producción.

Registro del participante

Cada buró entrega a la Dirección de Tecnología de FonVivienda:

DatoFormatoEjemplo
buro_id asignadoEnumEQUIFAX · KALIFIKA · TRANSUNION
URL base del receptorHTTPShttps://api.buro.com.do/fonvivienda/v1
Certificado cliente mTLSX.509 PEMCN del certificado y huella SHA-256
Clave secreta de firma32 bytes, base64Intercambio fuera de banda; rotación semestral
Rango de IP de salidaCIDR200.88.x.0/24
Buzón técnico de incidenciasCorreoCon acuse en menos de 4 horas hábiles
Contacto de seguridadNombre y teléfonoEscalamiento 24/7 para incidentes de datos

FonVivienda entrega a cada buró: client_id, client_secret, la clave HMAC de firma, su certificado de servidor y la callback_url por entorno.

Requisitos técnicos mínimos

  • TLS 1.2 o superior, con preferencia por TLS 1.3. Se rechazan suites sin forward secrecy.
  • Content-Type application/json; charset=utf-8. Codificación UTF-8 obligatoria — los campos de dirección y nombre contienen tildes y la letra ñ.
  • Compresión gzip aceptada en petición y respuesta.
  • Tamaño máximo de cuerpo: 256 KB. Un registro de solicitante bien formado pesa alrededor de 2 KB; superar el límite devuelve 413.
  • Reloj sincronizado por NTP con desviación menor a 60 segundos: la firma incorpora marca de tiempo con ventana antirreplay de 300 segundos.
  • Soporte de idempotencia con retención de 24 horas por clave.

Cabeceras obligatorias

CabeceraObligatoriaDescripción
AuthorizationBearer <access_token> obtenido por client credentials.
Content-Typeapplication/json; charset=utf-8.
X-FV-EmisorIdentificador del emisor: FONVIVIENDA.
X-FV-Destinatarioburo_id del receptor.
X-FV-AmbienteSANDBOX · CERTIFICACION · PRODUCCION. Debe coincidir con el entorno del host.
X-FV-Version-ContratoVersión semántica del API contract, p. ej. 1.0.0.
X-Request-IdUUID v4 único por intento. Se refleja en la respuesta y en los registros de auditoría.
Idempotency-KeyEn POSTUUID v4 estable entre reintentos del mismo envío lógico.
X-FV-SignatureFirma HMAC-SHA256 del cuerpo. Ver Autenticación y firma.
Accept-EncodingRecomendadagzip.

Lista de verificación de certificación

Para promover una integración a producción, el buró debe demostrar en el entorno de certificación:

  • Resolución síncrona correcta de 1 000 evaluaciones sintéticas consecutivas, dentro del objetivo de latencia.
  • Rechazo con 422 de registros inválidos, con el detalle por campo y el código de negocio correspondiente.
  • Comportamiento idempotente ante un reenvío con la misma Idempotency-Key.
  • Rechazo con 401 ante firma inválida y ante marca de tiempo fuera de la ventana antirreplay.
  • Ejecución del modo asíncrono: 202, callback firmado y reintento correcto ante un 500 simulado del receptor.
  • Ausencia total de score, banda_riesgo o campos equivalentes en la respuesta.
  • Respeto de los límites de tasa con cabeceras RateLimit-* y Retry-After.

Datos que se envían

Diccionario completo del registro del solicitante: las 33 columnas del archivo de muestra del piloto, su equivalente en el modelo JSON, sus reglas de validación y su clasificación de sensibilidad.

Origen de la especificación

El modelo de datos se deriva literalmente del archivo data de ejemplo.xlsx entregado como muestra del piloto: 14 registros del programa Familia Feliz, con nombres y cédulas enmascarados, y 33 columnas (A a AG). Nada se ha inventado: cada campo del JSON tiene una columna de origen trazable, y los campos nuevos se identifican explícitamente.

Las diez variables solicitadas por Kalifika ya existen en el archivo

Las columnas W a AF corresponden exactamente a las variables pedidas en el correo del 3 de agosto de 2026. El problema no es de modelo de datos sino de captura: en la muestra vienen en cero o sin dato.

Diccionario de datos

Diccionario de datos del registro del solicitante · versión de la especificación 1.0.0
Col.Campo en el archivoRuta JSON TipoObligatorioPIIReglas y observaciones

Clasificación de sensibilidad

NivelCamposTratamiento exigido
CríticoIdentificación (cédula/RNC)Llave de cruce. Viaja en claro solo dentro del canal cifrado; nunca en URL, en registros de aplicación ni en el callback (allí se usa identificacion_hash).
AltoNombres, apellidos, fecha de nacimiento, dirección, teléfonos, correosMinimización: se envían únicamente para resolución de identidad. Prohibido su uso para fines comerciales o de mercadeo.
MedioIngresos, composición del hogar, tipo de vivienda, rentaInsumo del modelo. Retención limitada a la vigencia del consentimiento.
BajoPrograma, provincia, fecha de solicitud, correlativoSin restricción adicional. Utilizable en reportes agregados.

Campos que añade el API contract

No existen en el Excel y son obligatorios en el API:

Ruta JSONTipoPor qué se añade
registro_idstringIdentificador estable y opaco del expediente, asignado por FonVivienda. Es la llave de correlación en el callback, y evita usar la cédula como identificador de mensaje. Patrón FV-AAAA-#######.
consentimiento.*objectSin consentimiento verificable no puede consultarse información crediticia. El objeto porta fecha, canal, versión de términos y huella de la evidencia.
expediente.estadoenumDistingue un expediente VALIDADO de uno en SUBSANACION reenviado, lo que permite al buró tratar reprocesos sin duplicar consultas.
hogar.rol_en_hogarenumJunto a hogar.hogar_id permite reconstruir el núcleo familiar sin exponer la cédula del jefe de hogar.
ingresos.monedaenumElimina la ambigüedad de los montos. Valor fijo DOP en esta versión.
*_disponibilidadenumDistingue explícitamente «no aplica», «no capturado» y «valor cero». Ver la nota siguiente.

Cero no es lo mismo que «no sé»

En la muestra, Ingresos informales y Nivel de estudios traen el literal "No disponible en base consultada", mientras que Remesas o Ingreso del cónyuge traen 0. Un modelo de riesgo que interprete ambos como «cero ingresos» sesga el resultado.

El API contract resuelve esto enviando el valor como null y acompañándolo de un campo hermano <campo>_disponibilidad con valores DISPONIBLE, NO_CAPTURADO, NO_APLICA o NO_DECLARA.

Muestra de datos

Los 14 registros del archivo, con la identificación, los nombres, apellidos y correos ya enmascarados en el origen, y el identificador de hogar sustituido por su forma seudonimizada.

Archivo de muestra del piloto · programa Familia Feliz

Registro completo en JSON

El registro 1 de la muestra, transformado al modelo del API contract. Obsérvese la normalización de los campos multivalor (Profesión y Contrato laboral vienen separados por ; en el archivo) y el uso de null con campo de disponibilidad.

Catálogos y códigos

Valores admitidos en los campos enumerados. Los catálogos se sirven además por GET /catalogos/{id} con ETag, de modo que la integración no tenga que codificarlos de forma rígida.

Todos los valores de enumeración viajan en mayúsculas, sin tildes y con guion bajo. El literal en español para presentación se obtiene del catálogo, no se transmite en el mensaje.

Segmentación de escoreabilidad

SegmentoDefiniciónVía de evaluaciónEnrutamiento por FonVivienda
ATiene información en buró suficiente para un score convencional.Score tradicionalEntidad bancaria con apetito, con los incentivos aplicables.
BSin historial tradicional, pero la data alternativa permite estimar su perfil de riesgo.Modelo de data alternativaEntidad bancaria, señalando el sustento en modelo certificado.
CNo dispone de historial tradicional ni de data alternativa suficiente.No escoreable por el momentoEducación financiera y apertura de cuenta básica para comenzar a generar data.

Códigos de razón de la segmentación

Se devuelven en resultados[].motivos[]. Explican por qué el solicitante quedó en ese segmento, sin revelar el peso ni la fórmula del modelo propietario.

CódigoSegmentoDescripción
SEG-A-01AHistorial crediticio tradicional suficiente y vigente.
SEG-A-02AHistorial tradicional con antigüedad limitada, complementado con data alternativa.
SEG-B-01BTrazabilidad de aportes a la seguridad social (Unipago/TSS).
SEG-B-02BHistorial de pagos de servicios: energía, agua o telefonía.
SEG-B-03BSeñales de permanencia y estabilidad domiciliaria.
SEG-B-04BVínculo con núcleo familiar con historial verificable.
SEG-C-01CIdentidad no resuelta: la cédula no arroja coincidencia en las fuentes consultadas.
SEG-C-02CSeñales de data alternativa por debajo del umbral mínimo del modelo.
SEG-C-03CAntigüedad de las señales insuficiente (menos de 6 meses observables).
SEG-C-04CConsentimiento no verificable o revocado al momento de la consulta.
Los códigos de razón que el buró entrega a la entidad bancaria son un conjunto distinto y más amplio, homologado por la industria conforme a la Propuesta 1 del proceso. Este catálogo cubre solamente lo que retorna a FonVivienda.

JSON Schema

Esquemas normativos en JSON Schema draft 2020-12. Son la fuente de verdad del API contract: ante cualquier discrepancia entre esta documentación y el esquema, prevalece el esquema.

Descarga y resolución de referencias

Los esquemas se publican en GET /esquemas/{nombre} y se identifican con un $id absoluto y versionado. Se recomienda cachearlos por ETag y validar en tiempo de compilación, no de ejecución.

Esquema del solicitante

Objeto que describe al solicitante. Es la carga útil de POST /evaluaciones en sus dos modos.

Esquema de la petición de evaluación

Sobre que envuelve al solicitante con los metadatos del intercambio.

Esquema del acuse asíncrono

Respuesta 202 cuando la petición se envía con Prefer: respond-async.

Esquema del resultado y del callback

Mismo objeto resultado para la respuesta 200 del modo síncrono, para GET /evaluaciones/{id} y para el evento evaluacion.completada entregado a la callback_url. Nótese la ausencia deliberada de cualquier campo de score.

additionalProperties: false en el objeto resultado no es un detalle estilístico: es el mecanismo que impide técnicamente que un buró añada un campo de score a la respuesta hacia FonVivienda.

Esquema de error

Todos los errores siguen RFC 9457 (Problem Details for HTTP APIs) con extensiones propias del API contract.

Documento OpenAPI

Especificación OpenAPI 3.1 del servicio, apta para generar clientes y servidores. Se muestra abreviada; la descarga contiene el documento completo.

Referencia de endpoints

Nueve operaciones cubren el ciclo completo: obtención de token, evaluación síncrona y asíncrona, consulta de una evaluación, callback de retorno, revocación de consentimiento, catálogos, esquemas y sonda de salud.

Resumen de operaciones
MétodoRutaDirecciónAlcance OAuthOperación

Códigos HTTP y errores

Semántica exacta de cada código de estado, si debe reintentarse y qué acción corresponde. Un cliente correctamente implementado se comporta de forma distinta ante un 429 y ante un 422: el primero se reintenta, el segundo nunca.

Respuestas de éxito

CódigoNombreCuándo se emiteCuerpo y cabeceras

Errores del cliente (4xx)

Salvo 408, 425 y 429, ningún 4xx debe reintentarse sin modificar la petición.

CódigoNombreCuándo se emite¿Reintentar?Acción del cliente

Errores del servidor (5xx)

CódigoNombreCuándo se emite¿Reintentar?Acción del cliente

Formato del cuerpo de error

Content-Type application/problem+json conforme a RFC 9457.

Catálogo de códigos de negocio

El campo codigo del cuerpo de error es estable entre versiones y es el que deben usar los clientes para bifurcar su lógica; el texto de title y detail puede cambiar.

CódigoHTTPTítuloCuándo ocurre y cómo resolverlo

Política de reintentos

Regla general

Reintentar solo ante 408, 425, 429, 500, 502, 503, 504 y errores de red, con retroceso exponencial y fluctuación aleatoria, conservando la misma Idempotency-Key y generando un nuevo X-Request-Id.

Máximo 6 intentos. Si el servidor envía Retry-After, ese valor manda sobre el cálculo local.

IntentoEspera baseFluctuación aplicada
11 s± 250 ms
22 s± 500 ms
34 s± 1 s
48 s± 2 s
516 s± 4 s
632 s± 8 s

Superados los 6 intentos, el envío se marca como fallido, se registra el X-Request-Id del último intento y se notifica al buzón técnico. No se reintenta indefinidamente: una evaluación atascada bloquea el enrutamiento de ese expediente.

Autenticación y firma

Tres controles se aplican de forma acumulativa: identidad del canal por mTLS, autorización por OAuth 2.0 y autenticidad e integridad del mensaje por firma HMAC-SHA256.

Las tres capas

CapaMecanismoQué garantizaFallo devuelve
CanalTLS mutuo (mTLS), certificado X.509 clienteQue el sistema que llama es efectivamente el registrado.Cierre de conexión TLS
AutorizaciónOAuth 2.0 client credentials, JWT de vida cortaQue el cliente tiene permiso para esa operación.401 · 403
MensajeHMAC-SHA256 sobre marca de tiempo y cuerpoQue el cuerpo no fue alterado ni reenviado.401 · FV-401-004

Obtención del token

  • Vigencia del token: 900 segundos. Debe renovarse de forma proactiva al 80 % de su vida.
  • No se emiten refresh tokens: el flujo es de máquina a máquina.
  • El token es un JWT firmado con RS256; las llaves públicas se publican en /.well-known/jwks.json.
  • Nunca debe registrarse el token completo en bitácoras. Registrar únicamente su jti.

Alcances

AlcanceConcedido aPermite
evaluaciones:writeFonViviendaEnviar evaluaciones y notificar revocaciones de consentimiento.
evaluaciones:readFonViviendaConsultar el estado y el resultado de una evaluación.
catalogos:readAmbas partesLeer catálogos y esquemas.
callback:writeBuróEntregar resultados a la callback_url de FonVivienda.

Firma del mensaje

La cabecera X-FV-Signature transporta la marca de tiempo y la firma:

Construcción de la cadena a firmar

  1. Obtener t = segundos Unix del momento del envío.
  2. Serializar el cuerpo JSON exactamente como se transmitirá, byte a byte. No se aplica canonicalización: se firma lo que viaja.
  3. Concatenar t, un punto y el cuerpo: "{t}.{cuerpo}".
  4. Calcular HMAC-SHA256 con la clave secreta compartida y codificar el resultado en hexadecimal minúsculo.

Verificación en el receptor

  • Rechazar si |ahora − t| > 300 segundos → 401 · FV-401-005.
  • Comparar en tiempo constante (crypto.timingSafeEqual) para evitar ataques de temporización.
  • Rechazar si el par (t, v1) ya se procesó dentro de la ventana → 409 · FV-409-002.
  • Durante la rotación de claves se aceptan simultáneamente la clave vigente y la anterior, por 7 días.

El callback del buró hacia FonVivienda se firma con la misma construcción pero con la clave del buró, en la cabecera X-FV-Signature. FonVivienda rechaza con 401 cualquier callback sin firma válida: es la única defensa contra la inyección de resultados falsos.

Idempotencia

Todo POST exige Idempotency-Key con un UUID v4. El receptor guarda, por clave, la huella SHA-256 del cuerpo y la respuesta emitida durante 24 horas.

SituaciónRespuestaComportamiento
Clave nueva202Se procesa normalmente y se almacena el resultado.
Clave repetida, mismo cuerpo202Se devuelve la respuesta original con la cabecera Idempotent-Replay: true. No se reprocesa.
Clave repetida, cuerpo distinto409FV-409-001. Indica un error del cliente: debe generarse una clave nueva.
Clave ausente en POST428FV-428-001 · Precondición requerida.

Límites de uso

OperaciónLímiteVentana y notas
POST /evaluaciones120 peticiones/minutoPor client_id. Ráfagas de hasta 40 en 5 segundos y un máximo de 20 peticiones concurrentes.
GET /evaluaciones/{id}600 peticiones/minutoSondeo recomendado: no más de 1 consulta cada 30 segundos por evaluación.
POST /consentimientos/revocaciones60 peticiones/minutoSin límite de concurrencia adicional.
GET /catalogos60 peticiones/minutoUsar ETag e If-None-Match; un 304 no consume cuota.

Toda respuesta incluye RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset. Al agotarse la cuota se devuelve 429 con Retry-After en segundos.

Rotación de credenciales

  • Clave HMAC: rotación semestral programada, con solapamiento de 7 días.
  • Certificado mTLS: vigencia máxima de 12 meses; aviso a los 60, 30 y 7 días.
  • client_secret: rotación anual o inmediata ante sospecha de compromiso.
  • Ante un incidente, la revocación es efectiva en menos de 15 minutos y se notifica por el canal de seguridad registrado.

Consentimiento y datos personales

El consentimiento informado del potencial deudor es condición habilitante de todo el intercambio. Sin él, la consulta de información crediticia —tradicional o alternativa— carece de base legal.

El objeto de consentimiento

CampoTipoDescripción
otorgadobooleanDebe ser true. Un registro con false no debe enviarse; se rechaza con 422 · FV-422-106.
fecha_horadate-timeISO 8601 con desplazamiento horario explícito (-04:00).
canalenumPRESENCIAL · WEB · APP · TELEFONICO.
version_terminosstringIdentificador de la versión del texto aceptado, p. ej. CONS-2026-01.
referencia_evidenciastringHuella sha256: del documento o del asiento de aceptación. No se transmite el documento.
vigencia_hastadateVencimiento del consentimiento. Máximo 12 meses desde su otorgamiento.
alcancearrayBURO_TRADICIONAL, DATA_ALTERNATIVA, SEGURIDAD_SOCIAL, SERVICIOS_BASICOS.

Evidencia y verificabilidad

FonVivienda conserva la evidencia original (formulario firmado, asiento de aceptación digital con sello de tiempo o grabación) y transmite únicamente su huella criptográfica. Ante un requerimiento del titular o del regulador, la huella permite demostrar que la evidencia no ha sido alterada.

El buró no debe almacenar los datos personales de un solicitante más allá de lo necesario para producir la segmentación y para sustentar la auditoría del modelo. El contrato no habilita el enriquecimiento de bases comerciales con esta población.

Revocación

Cuando un ciudadano revoca su consentimiento, FonVivienda notifica al buró por POST /consentimientos/revocaciones con el registro_id y la identificacion. El buró debe:

  • Detener toda consulta futura asociada a ese titular en un plazo máximo de 24 horas.
  • Marcar los resultados previos como derivados de un consentimiento revocado.
  • Confirmar la ejecución con 202 y un identificador de tratamiento.

Si la revocación llega mientras una evaluación está EN_PROCESO, esta se resuelve como segmento C con motivo SEG-C-04.

Minimización y retención

DatoRetención máximaJustificación
Cuerpo completo del mensaje90 díasResolución de incidencias y conciliación operativa.
Nombres, apellidos, dirección, contactoVigencia del consentimientoSolo para resolución de identidad.
Variables del modelo y resultado5 añosValidación y backtesting del modelo ante la Superintendencia.
Bitácoras de auditoría (sin PII)7 añosTrazabilidad regulatoria.
Huella de consentimiento10 añosPrueba de base legal del tratamiento.

Trazabilidad y auditoría

Cada consulta genera un asiento inmutable con: X-Request-Id, registro_id, buro_id, marca de tiempo, resultado de segmento y referencia del consentimiento. Nunca se registra el cuerpo completo con datos personales en bitácoras de aplicación; los campos de nivel Alto y Crítico se enmascaran antes de escribir.

Entorno de pruebas

Genere una petición con datos ficticios, fírmela y envíela al endpoint que usted indique —el receptor de su buró o un servicio de captura de peticiones— para verificar el contrato de extremo a extremo sin escribir una sola línea de código.

Use exclusivamente datos ficticios. Este simulador envía el contenido del editor a la URL que usted escriba. No pegue aquí registros de solicitantes reales.

Paso 1 · Destino

Indique dónde debe recibirse la petición. Si aún no tiene un receptor, cree un endpoint temporal en un servicio de captura de peticiones y pegue aquí la URL.

Debe ser https://. El receptor tiene que responder con las cabeceras CORS Access-Control-Allow-Origin para que el navegador exponga la respuesta; si no lo hace, use el modo opaco o el comando cURL equivalente.

Solo se usa en su navegador para calcular X-FV-Signature. No se transmite.

Se envía como Authorization: Bearer ….

Paso 2 · Generar la petición

Se construye a partir de un registro de la muestra del piloto, con cédula sintética de dígito verificador válido e identificador de hogar seudonimizado.

Paso 3 · Validar contra el esquema

Validación local contra el subconjunto normativo del JSON Schema: tipos, obligatoriedad, patrones, enumeraciones, rangos y las reglas cruzadas FV-422-1xx.

Paso 4 · Firmar y enviar

Al enviar se calcula la firma HMAC-SHA256 sobre {timestamp}.{cuerpo} y se arma el juego completo de cabeceras del API contract.

«Enviar en serie» ejecuta 14 peticiones consecutivas, una por solicitante, como haría el cliente real: el API contract no admite agrupar registros en una sola llamada.

Cabeceras que se enviarán

Paso 5 · Respuesta

Código de estado
Latencia de la petición

Consola

--:--:-- Consola lista. Genere una petición y pulse «Firmar y enviar».

Cuerpo de la respuesta

Simulador del callback del buró

Genera el evento evaluacion.completada que el buró enviaría de vuelta a la callback_url de FonVivienda. Sirve para que el equipo de FonVivienda construya y pruebe su receptor antes de que el buró esté listo.

Equivalente en cURL

Copie y ejecute desde una terminal si su receptor no admite peticiones desde el navegador.

Ejemplos de código

Implementaciones de referencia del envío firmado y de la recepción del callback, en las tecnologías de uso más frecuente en el sector.

cURL

Python

Con requests y la biblioteca estándar. Incluye reintentos con retroceso exponencial e idempotencia estable.

C# / .NET

Node.js — receptor del callback

Lado FonVivienda: verificación de firma en tiempo constante y ventana antirreplay antes de aceptar el resultado.

Java