Skip to main content
A case is the abstraction Frayme uses to hold everything related to one decision. A case has a type, a subject, and a payload. It flows through a workflow, accumulates evidence, and resolves into a decision.

Canonical shape

Every case carries the same envelope:
FieldTypeNotes
case_idstringGlobally unique. Idempotency anchor.
typeenumtransaction · kyc · kyb
subjectobjectThe entity the case is about (see below by type).
payloadobjectType-specific body.
opened_atdatetimeWhen the case entered Frayme.
The subject shape varies with the case type:
"subject": {
  "main_account": "...",
  "subaccount": "...",
  "counterpart": { "key", "ispb", "document", "wallet_address", "tx_hash" },
  "currency": "BRL | USD | USDC",
  "amount": 12500
}

Lifecycle of a case

1

Open

Posted to the workflow endpoint or fanned-out from a stream. Validated against the workflow’s input schema.
2

Enrich

Data Source and Custom API nodes attach vendor responses to the case context.
3

Evaluate

Rule, Decision Table, AI and Scorecard nodes consume the enriched context and emit a verdict.
4

Route

Split nodes send the case down the appropriate branch — auto-approve, manual review, block, regulator report.
5

Decide

Terminal Output node writes the decision. Analyst may override from the queue within the audit retention window.

Idempotency

Frayme can receive an idempotencyKey as the idempotency key. A second post with the same key returns the previously committed decision rather than re-running the graph.