Skip to main content
O System Facts é o registro compartilhado do que aconteceu nos seus fluxos de negócio. Cada serviço que participa de um fluxo, chamado de producer, envia um fato imutável quando um momento de negócio acontece. Um pedido é feito. Um pagamento é liquidado. O System Facts confere cada fato contra o contrato que o producer registrou, armazena o fato uma única vez e liga os fatos que compartilham uma referência em um único fluxo. Assim você pergunta o que aconteceu com o pedido ORD-2026-000123 e recebe todos os fatos desse fluxo, de todos os producers, em uma só resposta. Um fato armazenado nunca muda. O System Facts registra e correlaciona. Ele não edita o histórico.

Conceitos


Um tipo de referência com correlation: exact liga o seu fato a todo fato que carrega a mesma referência. Quando um fato liga dois fluxos, eles se unem em um só. O id do fluxo absorvido continua resolvendo para o fluxo que sobrevive. Um tipo de referência registrado com searchable: true pode listar todo fato que o carrega.

Integre em quatro passos


1

Registre os tipos de referência

Registre cada tipo de identificador que seus fatos carregam com PUT /v1/reference-types/{type}, como acme.order_id e acme.payment_id. Faça isso no pipeline de deploy, antes de qualquer contrato usar o tipo.
2

Registre uma versão de contrato

Registre uma versão de cada tipo de fato com PUT /v1/contracts/{producer}/{namespace}/{type}/{schemaVersion}. Faça isso no pipeline de deploy, antes do rollout do producer. O System Facts só aceita fatos depois que o registro tem sucesso.
3

Envie fatos

Envie um envelope por momento de negócio com POST /v1/facts. Use a credencial de serviço do producer para o tenant.
Um primeiro envio responde 201.
4

Leia os fluxos

Leia um fluxo pelo id com GET /v1/flows/{flowAggregationId}. Encontre o único fluxo de uma referência com GET /v1/flows/by-reference. Liste todo fato que carrega uma referência searchable com GET /v1/flows.
Toda escrita é idempotente, então um producer pode reenviar depois de um timeout.

Autenticação e permissões


Toda requisição, exceto os health probes públicos, envia Authorization: Bearer <token>. Fatos e fluxos pertencem ao tenant do token. Os catálogos de tipos de referência e de contratos são compartilhados por todos os tenants do deploy. Uma permissão ausente responde 403 SF-0014. Um token ausente ou inválido responde 401 SF-0013.

Convenções


  • Tenant. O serviço sempre toma o tenant do token. Ele nunca lê um tenant de um caminho, de um parâmetro de consulta ou de um corpo.
  • Escritas idempotentes. Um primeiro registro ou envio responde 201. A mesma requisição de novo responde 200 e não muda nada. O envio de um fato acrescenta duplicate: true.
  • Imutabilidade. Uma versão de contrato, um tipo de referência e um fato nunca mudam. Conteúdo diferente sob a mesma identidade responde 409. Um tipo de referência pode ganhar um mask de exibição uma vez.
  • Paginação. Uma lista responde uma página e um nextCursor. Envie-o de volta como o parâmetro de cursor da página que você quer. Trate-o como opaco. Pare quando ele for omitido.
  • Timestamps. RFC 3339 em UTC, como 2026-10-19T14:32:10Z.
  • Tamanho. Um envelope de fato tem no máximo 256 KiB por padrão. Um envelope maior responde 413 SF-0012.
  • Nomes. O primeiro segmento separado por ponto de todo nome de namespace e de tipo de referência deve ser um dos prefixos reservados do deploy. O padrão é lerian. Estas páginas usam acme.

Sensibilidade e valores protegidos


A sensitivity de um tipo de referência decide como as leituras mostram seus valores. Um contrato pode marcar campos do payload da mesma forma com x-sensitivity. Com mask: document, um valor masked mostra ***.456.789-** para 11 dígitos e **.345.678/0001-** para 14 dígitos. O System Facts recusa qualquer outra quantidade de dígitos no envio. Toda classe correlaciona exatamente como none, porque a comparação parte do valor em texto claro. Todo digest armazenado tem chave. Ele nunca é um hash simples. Um valor protegido volta com protected: true, e os campos protegidos do payload aparecem em protectedFields. Para encontrar um fluxo por uma referência protegida, envie sempre o valor em texto claro. O System Facts calcula o digest dele e compara com o digest armazenado.

Erros


Todo erro é application/problem+json (RFC 9457) com um code estável.

Lista de erros

Consulte cada código, quando o serviço o responde e se vale tentar de novo.

Registrar uma versão de contrato

Comece pela operação que todo producer executa primeiro.