ORD-2026-000123 y recibes todos los hechos de ese flujo, de todos los producers, en una sola respuesta.
Un hecho almacenado nunca cambia. System Facts registra y correlaciona. No edita el historial.
Conceptos
Un tipo de referencia con
correlation: exact une su hecho con todo hecho que lleve la misma referencia. Cuando un hecho une dos flujos, estos se fusionan en uno. El id del flujo absorbido sigue resolviendo hacia el flujo que sobrevive.
Un tipo de referencia registrado con searchable: true puede listar todo hecho que lo lleve.
Integra en cuatro pasos
1
Registra los tipos de referencia
Registra cada tipo de identificador que llevan tus hechos con
PUT /v1/reference-types/{type}, como acme.order_id y acme.payment_id. Hazlo desde tu pipeline de despliegue, antes de que cualquier contrato use el tipo.2
Registra una versión de contrato
Registra una versión de cada tipo de hecho con
PUT /v1/contracts/{producer}/{namespace}/{type}/{schemaVersion}. Hazlo desde tu pipeline de despliegue, antes del rollout del producer. System Facts acepta hechos solo después de que el registro tiene éxito.3
Envía hechos
Envía un envelope por momento de negocio con Un primer envío responde
POST /v1/facts. Usa la credencial de servicio del producer para el tenant.201.4
Lee los flujos
Lee un flujo por su id con
GET /v1/flows/{flowAggregationId}. Encuentra el único flujo de una referencia con GET /v1/flows/by-reference. Lista todo hecho que lleve una referencia searchable con GET /v1/flows.Autenticación y permisos
Toda solicitud, excepto los health probes públicos, envía
Authorization: Bearer <token>. Los hechos y los flujos pertenecen al tenant del token. Los catálogos de tipos de referencia y de contratos los comparten todos los tenants del despliegue.
Un permiso ausente responde
403 SF-0014. Un token ausente o inválido responde 401 SF-0013.
Convenciones
- Tenant. El servicio siempre toma el tenant del token. Nunca lee un tenant de una ruta, de un parámetro de consulta ni de un cuerpo.
- Escrituras idempotentes. Un primer registro o envío responde
201. La misma solicitud de nuevo responde200y no cambia nada. El envío de un hecho agregaduplicate: true. - Inmutabilidad. Una versión de contrato, un tipo de referencia y un hecho nunca cambian. Contenido distinto bajo la misma identidad responde
409. Un tipo de referencia puede ganar unmaskde visualización una vez. - Paginación. Una lista responde una página y un
nextCursor. Envíalo de vuelta como el parámetro de cursor de la página que quieres. Trátalo como opaco. Detente cuando se omita. - Timestamps. RFC 3339 en UTC, como
2026-10-19T14:32:10Z. - Tamaño. Un envelope de hecho pesa como máximo 256 KiB por defecto. Uno más grande responde
413SF-0012. - Nombres. El primer segmento separado por punto de todo nombre de namespace y de tipo de referencia debe ser uno de los prefijos reservados del despliegue. El valor por defecto es
lerian. Estas páginas usanacme.
Sensibilidad y valores protegidos
La
sensitivity de un tipo de referencia decide cómo muestran sus valores las lecturas. Un contrato puede marcar campos del payload de la misma forma con x-sensitivity.
Con
mask: document, un valor masked muestra ***.456.789-** para 11 dígitos y **.345.678/0001-** para 14 dígitos. System Facts rechaza cualquier otra cantidad de dígitos al enviar.
Toda clase correlaciona exactamente como none, porque la comparación parte del valor en texto claro. Todo digest almacenado lleva clave. Nunca es un hash simple.
Un valor protegido vuelve con protected: true, y los campos protegidos del payload aparecen en protectedFields. Para encontrar un flujo por una referencia protegida, envía siempre el valor en texto claro. System Facts calcula su digest y lo compara con el digest almacenado.
Errores
Todo error es
application/problem+json (RFC 9457) con un code estable.
Lista de errores
Consulta cada código, cuándo lo responde el servicio y si conviene reintentar.
Registrar una versión de contrato
Empieza por la operación que todo producer ejecuta primero.

