Decisions and Outcomes
Understand terminal Action states, version-bound decisions, signed receipts, and reported execution outcomes.
An Action begins in open state and can become resolved, cancelled, or expired. Terminal state is immutable.
Version and fingerprint binding
Material changes advance action_version and change the canonical fingerprint. High-risk clients should send both values when resolving so a stale review fails closed.
Newly resolved Actions include a compact Ed25519-signed receipt bound to the Action ID, version, fingerprint, response, and resolution metadata. Fetch trusted public keys from:
https://api.actionbox.cloud/.well-known/actionbox-receipt-keys.jsonOlder terminal rows created before receipt support may not contain a receipt.
Execution outcomes
A human decision records authorization; it does not prove the software operation succeeded. After executing an approved operation, report one outcome for the exact resolved Action snapshot.
outcome = resolved.report_outcome(
"success",
duration_ms=48_312,
rollback=False,
)Exact retries are idempotent. A conflicting second outcome is rejected.
Webhook authenticity
Webhook transport uses a separate per-Source HMAC secret. Verify the exact raw callback body and timestamp as described in Webhooks and callbacks. Do not confuse the HMAC delivery signature with the offline-verifiable Ed25519 decision receipt.