When a price is wrong on the storefront, the first question is “who changed it, and when?” In minipim the answer is always on record.
Every change, attributed
Every change made through minipim’s API — which is everything, because the admin itself uses the same API — is written to an append-only audit log in the same transaction as the change. A change that fails leaves no entry; a change that succeeds always has one.
Each entry records the action (create, update or delete), the thing that changed, the time, and the actor: a named team member, an API key, a connector sync, or the system. Edits made by an AI agent through the MCP server are attributed to the key it uses, so agent work is as traceable as anyone’s.
The Audit page lists the latest activity, filterable by action and by type of record, and each row expands to show what changed. The full log is available from the API, filterable by record, action and date.
Every change is an event
Underneath the audit log is a typed event bus. Every mutation emits one of 75 event types — product.updated, variant.created, category.assigned, media.attached, content_page.updated and so on — and a test in the codebase calls every mutating route to make sure it does.
Those events are what webhooks deliver: subscribe a storefront to product.* and it hears about every product change, from any source, signed with HMAC-SHA256.
Good to know
- Entries record which fields changed, not their previous values.
- The log is kept indefinitely; there’s no export or retention setting yet.
- Webhook deliveries aren’t retried, so pair them with a periodic catch-up on
updatedSince.