Audit Logs
Every action in Conto, creating agents, executing payments, changing policies, and freezing accounts, is recorded in a database-enforced append-only audit log with SHA-256 hash chains for tamper detection in normal operation. When the external archive is enabled, Conto also writes signed daily checkpoints to S3 Object Lock inCOMPLIANCE mode, independently protecting prior
chain heads from privileged database changes or backup restoration.
What Gets Logged
Payment decision receipts
Conto captures payment evidence at the database boundary for everyPaymentRequest, Transaction,
and ApprovalRequest lifecycle change. This includes successful payments and intermediate or
terminal decisions such as approval required, approved, denied, executing, confirmed, failed,
cancelled, and expired.
Each receipt can correlate the payment request, transaction, and approval request and records:
- what was requested: amount, currency, recipient, purpose, category, agent, and wallet;
- the decision at that point: status, policy result, approval requirement, reasons, violations, and denial reason;
- the controls in force: assigned policy versions and rules, wallet limits, counterparty posture, and the approval workflow configuration;
- who acted and when: user, agent, API credential, or Conto system attribution with timestamp; and
- execution evidence: transaction ID, chain transaction hash, block, confirmation, failure, and review status when available.
Actions
Resources
Logs track actions on agents, wallets, transactions, policies, organization members, API and SDK keys, alerts, counterparties, approval workflows, payment and budget requests, billing, and supported x402 or MPP payment records.Log Entry Fields
Customer audit responses and exports provide these fields for understanding and reconciling an event:resourceReference.id is present when the affected record has a supported customer reference, so
you can reconcile an audit entry with API records or a support request. Authentication sessions and
generic settings records intentionally return a null reference ID.
Change Detection
When a resource is updated,changes includes only documented customer fields such as status,
name, role, limits, and alert resolution. Arbitrary metadata, network request details,
authentication data, and unsupported state fields are not returned in audit responses or exports.
Tamper-Evident Hash Chain
Conto maintains a SHA-256 integrity chain for audit entries, so modifying an earlier entry causes a later verification check to fail. New entries use a canonical, length-prefixed hash payload that covers the actor, organization, payment and transaction correlation, request and decision states, network attribution, idempotency key, timestamp, and predecessor hash. Owners and admins can verify chain integrity for a selected date range from Audit Logs in the signed-in dashboard. The same verification shows whether an external immutable checkpoint is configured, current, pending, or behind newer activity. Response:historicalCoverage.status is
attested_gap. The response then discloses the missing ranges, surviving-evidence digest,
attestation reason and time, and the first sequence in the complete post-baseline chain. Conto does
not resequence or rehash surviving entries, and does not describe the pre-baseline history as
complete. The signed external checkpoint includes the same baseline disclosure.
External Immutable Checkpoints
The daily integrity job first recomputes every audit hash and checks sequence continuity. It writes a checkpoint only after that verification passes. Each checkpoint contains:- the organization and exact audit sequence range;
- the final audit-chain hash and previous checkpoint hash;
- any immutable historical-baseline disclosure and surviving-evidence digest;
- canonical manifest and object SHA-256 checksums;
- an HMAC-SHA256 signature and signing-key identifier;
- the S3 object version; and
- the confirmed
COMPLIANCEretention deadline.
COMPLIANCE retention cannot be shortened or bypassed by an ordinary
storage administrator. Before each checkpoint, Conto lists the retained object versions for that
organization and compares the newest external sequence and hash with the database head. This makes
a database rollback detectable even if its local anchor receipts were rolled back too.
The external archive is deployment configuration, not an automatic property of every Conto
installation. If Audit Logs → Verify says “External immutable storage is not configured,” the
database trail remains append-only and tamper-evident but must not be represented as externally
immutable.
Signing keys use explicit IDs. On rotation, operators retain retired IDs and secrets in
AUDIT_ANCHOR_VERIFICATION_KEYS; this allows seven-year receipts to remain verifiable without using
an old key for new checkpoints.
The audit-integrity-sweep Inngest job runs daily at 02:15 UTC. Failures remain visible per
organization in the app, while operations receives one aggregate email when an incident opens or
changes, at most one reminder every 24 hours, and one recovery email. An independent Vercel
watchdog checks the heartbeat at 08:00 and 20:00 UTC and returns a failing cron status when the
sweep is missing, stale, or unsuccessful. It shares the same notification ledger, so it cannot
duplicate the incident email. After a later sweep verifies the affected chain or external
checkpoint, Conto resolves the corresponding incident and appends an ALERT_RESOLVED system event
to that organization’s audit chain. If either the alert update or its audit evidence cannot be
persisted, the sweep remains unhealthy.
Viewing Logs
Dashboard
Go to Audit Logs in the sidebar. Filter by:- Action type
- Resource type
- Actor (user or API key)
- Date range