Enruta

Docs · preview

Decision

Every request produces exactly one decision, and every decision is sealed into the record whether or not money moved.

payeecategorywindowcapbudgetduplicatescreeningthresholdallow/step_up/denyany failed check denies; the budget is reserved at the moment it passes
DecisionMeaningWhat the agent receives
allowThe request matches a policy and fits its limits.A mandate and the credential the payee accepts.
step_upThe request matches a policy that requires a person above this threshold, payee or category.An approval reference and link. The agent waits or moves on.
denyNo matching policy, a limit exceeded, a failed check, or a duplicate.Reasons, machine-readable. The denial itself is sealed.

Reasons

Reasons are stable codes, not prose, so agents and dashboards can branch on them.

CodeWhen
no_matching_policyNo policy covers this agent, payee or category
over_payment_capAmount above the per-payment cap
over_budgetCumulative budget exhausted after reservation
payee_not_allowedPayee outside the allowlist or not verified
category_not_allowedCategory outside the policy
outside_windowTime window or expiry
duplicateSame payee, amount and reference inside the duplicate window
idempotent_replaySame idempotency key; the original decision is returned
screening_hitPayee matched a screening list
approval_requiredStep-up: a named person must sign
approval_declinedThe person refused
approval_expiredNobody signed before the mandate window closed

Latency

Decisions run on lookups and counters only. Enruta targets under 10 ms typical and 50 ms at p99 of added latency on the payment path, inside the two-second window a card issuer gives a real-time authorization.

What is recorded

The decision, every input to it (policy version, budget state before and after, checks run and their results), the actor for any approval, and the time. Denials are recorded with the same care as allows: the absence of a payment is evidence too.