Audit log

Who approved what,and when.

Every approval, denial, and delivery attempt is written to an append-only log you can open, filter, and point a compliance reviewer at.

app.finalapproval.ai/dashboard/history

Workspace · Acme

Decision history

AllApprovedDeniedPending
TimeTitleChannelByStatus
14:20
today
Publish blog post: A quieter way to ship agentsContentpm@approved
11:03
today
Issue $240 refund — order #4891Billingsofia@approved
09:42
today
Deploy database migration 2026_04_10_team_idDeploysraj@denied
17:55
yesterday
Send promo email to 18,420 subscribersMarketingpm@approved
14:10
yesterday
Cancel subscription for acme-coBillingsofia@denied

Filter what you need

Slice by channel, status, or reviewer.

The history view is searchable and filterable out of the box. Jump to one channel, to one reviewer's decisions, or to every denial in the last week.

  • Filter by channel, status, date range, or reviewer
  • Free-text search across titles and bodies
  • Export filtered results as CSV for the auditor
filters
ChannelBilling
StatusDenied
Reviewersofia@
Date rangeLast 30 days

Row-level detail

Open any row. See the whole story.

Every row expands to show the original body, the data payload, the delivery log, and the reviewer's denial reason if there was one. Nothing is hidden once a decision has been made.

  • Original HTML body preserved verbatim
  • Structured data payload shown beside the rendered view
  • Full delivery attempt trail with status codes
apr_4f9c · denieddenied

Reason

Migration touches a table we're actively indexing. Re-run after the index build completes tomorrow AM.

Delivery log

09:43:02 · #1200

Append-only

You don't edit the record. You add to it.

Approvals are immutable once resolved. Denials, retries, and manual replays append new rows instead of mutating the original. The log reads like a ledger.

  • No edits, no deletes — by design
  • Manual replays create a new delivery row, not a new decision
  • Retention controlled at the workspace level
append-only · chn_b12a
  1. t+0sapproval.createdapr_4f9c
  2. t+32sapproval.viewedby pm@
  3. t+41sapproval.resolvedapproved
  4. t+41swebhook.attempt503
  5. t+71swebhook.attempt503
  6. t+3mwebhook.attempt200 · delivered

An audit trail the compliance team can actually read.

Nothing to set up. Every approval your team resolves joins the log automatically.