Skip to main content

Guides

How to build a refund audit trail that holds up

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.

Last updated

Explained 1

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.

Explained 2

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.

Explained 3

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.

Explained 4

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.

How to

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.

FAQ

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.

Keep reading