# How to build a refund audit trail

> What a refund audit trail should record, why it must be append-only, and five steps to build one that holds up in disputes and audits.

- Canonical URL: https://lumtry.com/guides/refund-audit-trail
- Last updated: 2026-09-24

A refund audit trail is the ordered record of every refund decision: the request, the policy version that applied, who approved it, and what the processor did. To build one, capture each step as an event that cannot be edited, tie the events together with one identifier, and keep the policy each decision relied on.

## What should a refund audit trail record?

Every event that changed the case: the request as it arrived, the facts the policy read, the rule that fired, any approval or decline with the approver's identity, and the processor call with its reference. Each event needs a UTC timestamp, the actor, and the policy version in force.

## Why does an audit trail need to be append-only?

A record anyone can edit proves nothing. If an event can change after the fact, a chargeback reviewer or an auditor has no reason to trust it. With append-only storage, a correction is a new event that points at the old one, so the history stays complete.

## How do you connect events that belong to the same refund?

Carry one correlation ID from the first request through every workflow step, log line and processor call. Pair it with an idempotency key on each processor refund, so a retry can never pay twice and the trail shows one payment for one decision.

## How does Lumtry keep the audit trail?

Lumtry writes every case event to an append-only audit log that workspace users cannot edit or delete, carries a correlation ID on each one, and pins the policy version when a case starts. Slack and phone approvals are recorded against the approver's mapped identity, and the dashboard stays the source of truth.

## Build the trail in five steps

1. **Publish the policy as a version**: Write the refund rules down and publish them as a numbered version. Record that version on every case, so a later edit never rewrites what an earlier decision relied on.
2. **Capture the request as it arrived**: Store the customer's request and the order facts at intake, before any decision, with the source channel and a UTC timestamp.
3. **Record each decision with its actor**: Log the rule that fired or the person who approved, with a verified identity. An approval from Slack or a phone call is recorded the same way as one from the dashboard.
4. **Execute the refund with an idempotency key**: Send a unique key with every processor refund and store the processor's reference beside the decision, so a retry cannot pay twice.
5. **Make the log append-only**: Deny edits and deletes on the audit log for everyone but a narrow service path, and correct mistakes with new events.

## Frequently asked questions

### How long should refund records be kept?

That depends on your jurisdiction, your processor agreements and your accountant's advice. Keep the audit trail at least as long as a chargeback can still be filed against the order, and longer where tax or consumer law asks for it.

### Is a spreadsheet of refunds an audit trail?

Not on its own. A spreadsheet can be edited without a trace and rarely records which policy applied or who approved. It can be a report built from an audit trail, but it is not the trail itself.

### Does an audit trail help with chargebacks?

Yes. A dispute response is stronger when it shows the order, the policy the customer agreed to and each step of the refund decision in order. An append-only trail gives you that file without rebuilding it by hand.

### Do AI suggestions appear in the audit trail?

They should. In Lumtry, AI advice is recorded as advice, next to the policy rule that actually decided the case, so a reviewer can see what the model suggested and what the policy and approvers did.

## Related

- [Home](https://lumtry.com/index.md): Decide refunds by a versioned policy, send the exceptions to your team in Slack or the dashboard, and keep every step on the record. Start free.
- [Guides](https://lumtry.com/guides.md): Answer-first guides to refunds, returns, chargebacks, approvals and audit trails for Shopify, WooCommerce and BigCommerce merchants.
- [Slack approvals for Stripe](https://lumtry.com/guides/slack-refund-approvals-for-stripe.md): How to route Stripe refunds that need a person to Slack, approve them from the message, and keep the dashboard as the source of truth.
- [Voice approvals](https://lumtry.com/guides/voice-refund-approvals.md): How outbound phone calls let an approver confirm a held refund when they are away from Slack and the dashboard, with the answer recorded.
- [Return abuse screening](https://lumtry.com/guides/return-abuse-screening.md): How to score refund requests on claim history, missing returns and unusual values, and hold risky cases for a person without slowing honest customers.
- [Chargeback evidence](https://lumtry.com/guides/chargeback-evidence-automation.md): How to assemble dispute evidence from orders, policy and the refund audit trail so every chargeback response starts from a complete file.
- [Refunds for AI agents](https://lumtry.com/guides/mcp-refunds-for-ai-agents.md): How AI assistants can look up refund cases and propose refunds over the Model Context Protocol while policy and people keep the final say.
- [Retention offers](https://lumtry.com/guides/retention-offers-before-refund.md): When to offer store credit, an exchange or a partial refund before paying money back, and how a policy decides which offer fits a case.
- [Marketplace refunds](https://lumtry.com/guides/multichannel-marketplace-refunds.md): How to bring store and marketplace refunds from Amazon and eBay into one queue, with a policy per channel and every decision in one audit trail.
- [AI decisions and contests](https://lumtry.com/guides/ai-decision-record-and-contest.md): How Lumtry records every AI-assisted refund decision and lets a shopper contest it, with a person reviewing and deciding the outcome.
- [Simulate a policy](https://lumtry.com/guides/simulate-a-policy-before-publishing.md): How to replay a draft policy against recent decisions with no model call, and how an explainer's suggestion can land in a draft without ever publishing it.
- [Canadian refund rules](https://lumtry.com/guides/canadian-refund-rules-for-merchants.md): What Quebec and Ontario require for online sales, why a posted refund policy can create legal exposure, and how to set these rules as your own policy in Lumtry.
- [Pricing](https://lumtry.com/pricing.md): Lumtry plans by case volume and seats, from Free to Enterprise, with add-ons and capped outcome fees. Start free or hear when billing opens.
- [MCP server](https://lumtry.com/developers/mcp.md): Connect an AI assistant or your own agent to your refund workspace through the Model Context Protocol. Read cases and propose actions, never move money.
- [Trust](https://lumtry.com/trust.md): How Lumtry secures merchant data, keeps AI inside a deterministic refund policy, lists every sub-processor and explains data flow and retention. Review it.
- [llms.txt](https://lumtry.com/llms.txt)
