Skip to main content

What is a Receipt?

Every run — whether it passes or gets blocked — writes a signed JSON receipt to receipts/. It records:
  • Who ran the workflow (user_email)
  • Which workflow ran
  • Which policies passed or failed, and why
  • Which actions were taken and whether they succeeded
  • Timestamp
  • HMAC-SHA256 signature (tamper-proof)

Receipt Format

A blocked run looks the same, but "decision": "BLOCK" and actions_taken is empty.

Verify a Receipt

The signature covers every field. Tampering with any value — even whitespace — invalidates it.

Receipt Browser (local UI)

Browse, filter, and verify your receipts locally — no cloud account needed.
Features:
  • Every run listed (PASS / BLOCK / ROLLED_BACK)
  • Click into the full signed JSON
  • Invalid signatures highlighted in red
  • Dark mode toggle
  • Ships with pip install enact-sdk — zero extra dependencies

The run_id

When you call enact.run(), you get back a receipt with a run_id:
The run_id is the handle you pass to enact.rollback(). Save it.

Push to Cloud

If you have a cloud account, push receipts so they’re searchable in the cloud UI:
See Cloud → Overview for setup.