Compliance

Who changed what,
when, and from where.

Every admin mutation writes a row to the audit log — event edits, tier price changes, promo code creation, branding updates, staff logins. Filter by user, action, subject, date range. See the field-level diff. The line item enterprise auditors, legal teams and DPDP compliance reviews ask for.

Audit · Log
Last 24 hours
312 admin actions logged
event.updated
Priya changed price on VIP
2 min ago
103.87.11.14
promocode.deleted
Rohit deleted EARLY30
7 min ago
49.207.144.9
tier.created
Anaya added Student tier
18 min ago
103.87.11.14

The six things you need to reconstruct any change.

👤
Who
Tenant user ID + name at time of action. Even if the staff member is later deactivated, the log preserves their name.
What
Action name — e.g. event.updated, tier.deleted, promocode.created. Namespaced by subject type + verb.
🎯
On which record
Subject type, subject ID, human-friendly label ("Product Summit 2026" instead of just event #47).
🕒
When
Timestamp to the second. Also shows "18 minutes ago" so you can eyeball recency without doing math.
🌐
From where
IP address + user-agent. Helps spot the "someone logged in from Vietnam at 3am" case that compliance actually cares about.
🔎
What actually changed
Field-level diff — before value + after value for every attribute. Click "Diff" to expand a JSON view.

Every mutation on these subjects.

No manual instrumentation. Add or remove records on any of these models and the log gets a row.

🎤
Events
Every field edit on an event — date, venue, capacity, status, private toggle, banner.
🎟
Ticket tiers
Tier created, price changed, sale window updated, tier deleted. Ignores noisy runtime counters like quantity_sold.
🎁
Add-ons
Every add-on create / edit / delete — workshop capacity changes, dinner price bumps, T-shirt deactivations.
🏷
Promo codes
Code created, discount value changed, expiry moved, code deleted. Ignores times_used to keep the log clean.
🎨
Brand kit
Logo swap, colour change, footer text edit, custom CSS — the moves your ops team makes late Friday and forgets by Monday.
🔒
Secrets redacted
Passwords, API keys, webhook secrets never make it into the log body. Auto-redacted to [REDACTED] before write.

Because "who changed the ticket price?" is a Monday morning conversation.

Client runs a paid conference. Ticket goes live at ₹5,000. Sunday evening someone opens the admin, edits the price to ₹500 (missed a zero), doesn't notice. By Monday 9am, 47 tickets have sold at ₹500. Revenue loss: ₹2.1 lakh. The founder wants to know: who did this?

Without an audit log the answer is a WhatsApp thread. "Was it you?" "No, but I logged in to check the branding on Saturday." "Rohit had the admin open yesterday too." Nobody remembers. Nobody can prove anything. The mistake gets absorbed as a lesson learned. Whoever did it never gets pulled aside.

With an audit log, the answer is a filter. Open Audit Log → filter by tier.updated → sort by time → there's the row. "Rohit, 18 Aug 21:47, changed price from 5000 to 500." Two-minute investigation, one clear conversation, no repeat mistake.

Also: enterprise buyers and legal auditors ask for this by name. "Do you have an audit trail?" is a yes-or-no gate. Now it's a yes.

Where the log matters most.

🎨
Every branding change is logged — if a colour goes wrong Sunday night, you'll know who to ask on Monday.
💳
Workshop capacity changed mid-event? The log names the staff member and shows before / after.
📥
India's Digital Personal Data Protection Act 2023 requires organisations to log admin access to personal data. This is that log.

Questions we get

Are logins logged?
Model mutations are logged automatically. Auth events (login, logout, failed login) can be added via the AuditLogService if you enable them — reach out and we'll flip them on for your tenant.
How long are logs retained?
Indefinitely by default. For very long-lived tenants you can archive rows older than N months via a scheduler job. Ask us if you need a specific retention policy.
Can other tenants see my audit log?
No. Every row is scoped by tenant_id. Query is filtered before it even reaches the view.
Does it capture secrets like API keys?
No. Passwords, key secrets, webhook secrets and known-sensitive fields are auto-redacted before write. Values become [REDACTED] in the diff.
Turn "who did this?" into "here's the row."
See the audit log filter + diff view in 5 minutes.