Core concepts
Mandate, decision, and record: the three objects every Saifuro event is made of.
Three objects. Everything in Saifuro is one of them, or a relationship between them.
Mandate
A mandate is an agent's authority to spend, written down.
It carries the principal granting the authority, the agent it applies to, limits by amount and by frequency, permitted categories, an expiry date, and a revocation switch.
A procurement agent might hold a mandate capped at 500 dollars per transaction and 5,000 per month, restricted to SaaS vendors, expiring in ninety days, with anything above 250 requiring its owner to confirm.
That mandate, as the system holds it:
{
"mandate": "mnd_7f3a",
"principal": "role:procurement_lead",
"agent": "agt_procurement_01",
"limits": { "per_transaction": 500, "per_month": 5000, "currency": "USD" },
"categories": ["saas"],
"review_above": 250,
"expires": "2026-11-18",
"status": "active"
}Revocation takes effect on the next request. Nothing changes in the agent's code.
Decision
One spend request evaluated against whatever mandates and policies were in force at that moment.
The decision keeps the request, the policy version, the verdict, and the reason. The policy version matters more than it looks: rules change, and without it you cannot explain a verdict from March using the rules from July.
Record
The line in the log where the decision lands. Records are appended, never edited and never deleted. A correction is a new record, not a rewrite of the old one.
How they relate
A mandate sets the bounds, a decision applies them to one request, and the record is what you show the auditor.
Field names above are illustrative. The canonical schema ships with the integration tooling at onboarding.

