The returnEasier audit log is an immutable record of everything that happens with your requests: every time one is created, approved, marked as received or refunded, a row that cannot be modified or deleted is left behind. Each event is sealed with a SHA-256 hash chained to the previous one, forming a tamper-proof chain. When you need to provide evidence —to an auditor, to the authorities or to your adviser— you go to Compliance → Export and download a ZIP with the entire history and an integrity file to verify it.
Why is the record immutable?
The events table is append-only: the database only allows adding rows. A PostgreSQL trigger rejects any attempt to UPDATE or DELETE it, wherever it comes from (the app, a script, a migration or an attacker with privileges). It is not a configuration promise: it is enforced in the database engine.
On top of that foundation the hash chain is built:
- Each event is converted to a canonical JSON (sorted keys, no ambiguity) and a SHA-256 is computed for it.
- That hash is computed including the previous event's hash (
hash_anterior). The first event of each chain is the 'genesis'. - If someone changed a single value of a past event, its hash would change and would no longer match the
hash_anteriorof the following event: the tampering gives itself away.
The requests (return_requests) also carry their own hash and previous hash, which are included in the export so that they can be verified outside the app.
How do I export my auditable history?
The export lives in Compliance → Export (route /app/settings/compliance/export) inside the app, in the Shopify Admin.
- Open Compliance → Export in the side menu.
- Set a date range: 'from' and 'to' (date format). You can leave both empty to export all your history. Dates are interpreted in your store's time zone (Europe/Madrid by default).
- Click export. Depending on the number of requests in the range, returnEasier does one of two things (see below).
Instant download or by email, depending on volume
returnEasier matches the delivery to the size of the range so as not to block the browser with huge downloads:
| Requests in the range | What happens |
|---|---|
| 0 – 100 | The ZIP is generated and downloads instantly. |
| 101 – 1000 | returnEasier emails you the ZIP (temporary link). |
| More than 1000 | The export is rejected: narrow the date range. |
The hard limit is 1000 requests per export. If your history is larger, split it into several date ranges (for example, quarter by quarter) and export each one.
What is inside the ZIP?
The file is named returneasier-auditoria-<your-store>-<date>.zip and contains:
README.txt— a plain-language guide: what each file is and how to verify integrity.solicitudes.csv— one row per request, with columns such aspublic_id,tipo,estado,creada_en_utc,resuelta_en_utc,pedido,cliente_email,cliente_nombre,importe,moneda,motivo,resolucion_preferida,notas_cliente,hash,hash_anteriorandrefund_id.eventos.csv— the complete append-only record:public_id,evento,actor,actor_id,fecha_utc,hash,hash_anteriorandpayload_json.pdfs/— the withdrawal confirmation PDFs of each withdrawal, one per request.INTEGRITY.json— the integrity file: algorithm (SHA-256), counts, the hash of each file in the ZIP and the verification of each event chain.
How do I verify the integrity of the export?
The INTEGRITY.json is the key piece for proving that nothing has been touched:
- It carries the SHA-256 hash of each file in the ZIP. Recompute the hash of, for example,
eventos.csvwith any standard tool and compare it with the one listed there. - It includes the verification of each event chain: for each request it indicates whether its chain is 'ok' or 'broken' and, where applicable, the reason (forked chain, cycle, hash that does not recompute…).
- If any PDF could not be retrieved (for example, because it was deleted by a GDPR request), it is noted in the list of unavailable PDFs with its reason, instead of failing the entire export.
The INTEGRITY.json itself cannot contain its own hash, so it is the only file that does not self-check; everything else does.
Relationship with other features
The audit log is the foundation of the legal templates and of the withdrawal confirmation PDF (see 'What does the withdrawal confirmation PDF contain?'): every withdrawal confirmation sent to the customer is anchored to the hash chain. To understand which emails generate those events, see 'What emails does returnEasier send and to whom?'. And before uninstalling or cancelling, it is worth exporting your history: it is covered in 'What happens to my data if I uninstall or cancel returnEasier?'.