Skip to main content

What is the intent state machine?

Every validated transaction in Mandate is tracked as an intent. The intent moves through a strict state machine from validation to on-chain confirmation (or failure). The entry state depends on which endpoint the agent uses: action-based validation creates an allowed intent, raw validation creates a reserved intent.

State diagram

State reference

Transitions

Terminal vs non-terminal states

Terminal states end the intent lifecycle. No further transitions are possible. Terminal states: allowed, confirmed, failed, expired, rejected Non-terminal states: reserved, approval_pending, approved, broadcasted Non-terminal states have TTLs enforced by a scheduled expiration job. When the TTL expires, the intent moves to expired and any reserved quota is released back to the agent’s budget.

Quota behavior by terminal state

Polling for status

Use GET /api/intents/{id}/status to check the current state. The SDK provides convenience methods:
Both methods throw MandateError if the intent reaches a terminal failure state.

Next Steps

Intent Lifecycle Concepts

Conceptual explanation of how intents move through the system.

MandateClient

SDK methods for validation, event posting, and status polling.

Check Status (CLI)

Poll intent status from the command line.