Data Lifecycle
Holofin tracks every document deletion with idempotent jobs and cryptographically signed receipts. This page covers the audit trail, the receipt format, and how to verify a receipt.
Overview
When a document reaches the end of its retention period or is purged as part of an account closure, Holofin creates a Deletion Job that tracks the deletion across every storage layer. Once all layers are confirmed deleted, the job is marked CONFIRMED and a signed Deletion Receipt is generated as cryptographic proof.
This gives your organization an auditable record of what was deleted, when, and why, for GDPR compliance reviews, internal audits, and regulatory inquiries.
Deletion Jobs
A Deletion Job is created whenever a document is scheduled for deletion. Each job is idempotent: retries, crashes and duplicate triggers reuse the same job instead of creating a new one.
Deletion Layers
Each job tracks deletion across three independent storage layers:
A job is only marked CONFIRMED once all three layers are true.
Triggers
retention_policyDocument exceeded its configured retention period (ZDR, 30, 60, or 90 days) and was automatically scheduled for deletion.account_purgeAll documents in an organization were scheduled for deletion as part of an account closure or data purge request.manualDocument was explicitly deleted by a user or API call.
Idempotency
Each Deletion Job is identified by a deterministic idempotency key, a SHA-256 hash of:
sha256("{tenant_id}:{resource_id}:{policy}:{scheduled_date}")This means the same document + policy + date always produces the same job. If the system crashes and retries, or if a duplicate trigger fires, the existing job is reused instead of creating a new one. The attempt_count field tracks how many times a job has been started.
Deletion Receipts
When a Deletion Job reaches CONFIRMED, Holofin generates a Deletion Receipt: a JSON document, signed with HMAC-SHA256, that proves the deletion completed across all storage layers.
Receipt Payload
Receipt Fields
Signature Verification
Each receipt includes a 64-character hex HMAC-SHA256 signature computed over the canonical JSON payload. This allows you to independently verify that a receipt has not been tampered with.
How Signing Works
- The receipt payload is serialized to canonical JSON: keys sorted alphabetically, compact separators (
,and:), no whitespace. - An HMAC-SHA256 is computed using a dedicated signing secret (
DELETION_RECEIPT_SIGNING_SECRET). - The resulting 64-character hex digest is stored alongside the receipt.
Verification Example (Python)
Use hmac.compare_digest (not ==) for timing-safe comparison.
Accessing Deletion Logs
Deletion jobs and receipts are available through the Holofin dashboard. All data is scoped to the authenticated user's organization; you cannot access receipts belonging to another tenant.
Individual receipts can be downloaded as JSON from the deletion history table. The Export All Receipts button downloads a ZIP archive containing one JSON file per receipt, named <receipt_id>.json. Each file includes both the payload and signature fields for independent verification.