Audit Logs
Every action in Conto — creating agents, executing payments, changing policies, freezing accounts — is recorded in an immutable audit log with SHA-256 hash chains for tamper detection.What Gets Logged
Actions
| Action | Description |
|---|---|
CREATE | Resource created (agent, wallet, policy, etc.) |
UPDATE | Resource modified |
DELETE | Resource removed |
APPROVE / REJECT | Approval decision made |
SUSPEND / ACTIVATE | Agent frozen or unfrozen |
FUND / WITHDRAW / TRANSFER | Wallet balance changes |
PAYMENT_EXECUTED | Payment submitted onchain |
PAYMENT_CONFIRMED | Payment confirmed onchain |
PAYMENT_DENIED | Payment blocked by policy |
PAYMENT_FAILED | Payment transaction failed |
EXTERNAL_PAYMENT_APPROVAL | External wallet payment approved |
EXTERNAL_PAYMENT_CONFIRMED | External wallet payment confirmed |
POLICY_VIOLATION | Policy rule triggered |
ALERT_CREATED / ALERT_RESOLVED | Alert lifecycle |
SETTINGS_CHANGED | Organization settings modified |
PERMISSION_GRANTED / PERMISSION_REVOKED | Role or scope changes |
LOGIN / LOGOUT | User session events |
AUDIT_LOG_EXPORTED | Audit log data exported |
Resources
Logs track actions on:agent, wallet, transaction, policy, policy_rule, organization, user, member, api_key, sdk_key, alert, counterparty, relationship, settings, approval_request, approval_workflow, payment_request.
Log Entry Fields
Each audit log entry contains:| Field | Description |
|---|---|
action | What happened (CREATE, UPDATE, DELETE, etc.) |
resource | What type of resource was affected |
resourceId | ID of the affected resource |
previousState | State before the change (JSON) |
newState | State after the change (JSON) |
actorType | Who did it: USER, API, AGENT, or SYSTEM |
actorId | User ID, API key ID, or “system” |
ipAddress | Client IP (from reverse proxy headers) |
userAgent | Client user agent string |
metadata | Additional context (audit hash, change diff, API key ID) |
createdAt | When the action occurred |
Change Detection
When a resource is updated, the audit service automatically diffs the previous and new states and records which fields changed:Tamper-Evident Hash Chain
Each log entry includes a SHA-256 hash computed over the previous entry’s hash, the timestamp, action, resource, and state data. This creates a chain where modifying any entry invalidates all subsequent hashes. You can verify chain integrity via the API:brokenAt with the ID of the first compromised entry.
Viewing Logs
Dashboard
Go to Audit Logs in the sidebar. Filter by:- Action type
- Resource type
- Actor (user or API key)
- Date range
API
IP Attribution
Audit logs capture the client IP address using platform-set headers in this priority order:cf-connecting-ip(Cloudflare)x-real-ip(nginx)x-forwarded-forfirst entry (Vercel)