Audit logs your customers can verify.
Send who did what, in which customer organization. Invoance numbers each event, signs it, and gives that customer a read-only view. Enterprise buyers ask for this in security reviews. This is the version they can check.
organization_id | Which of your customers the event belongs to |
|---|---|
| action | What happened, for example member.role.updated |
| actor | Who did it: type, id, optional name |
| targets | What it was done to |
| context | Optional location and user agent |
occurred_at | When it happened in your system |
| seq | Assigned by Invoance. Gap-free per organization |
import { InvoanceClient, verifyAuditEvent } from "invoance";
const client = new InvoanceClient();
const ev = await client.audit.events.ingest({
organizationId: "org_01J8F3KQ2R7VWX9YB4ND6MCZAH",
action: "member.role.updated",
actor: { type: "user", id: "user_123" },
});
// later, anywhere, with no network call
const event = await client.audit.events.get(ev.event_id);
console.log(verifyAuditEvent(event).valid); // true
- A gap-free sequence number per customer organization. A missing number is evidence that something was removed.
- An Ed25519 signature on every event, verifiable offline with the SDK.
- A read-only portal and an embeddable viewer for your customers.
- CSV and NDJSON exports, and webhook streams to your customer's own systems.
- Auth0 and Clerk integrations that forward identity events for you.
Enterprise security reviews
Answer the audit log line in the questionnaire with a working portal.
Customer admin consoles
Embed the viewer so admins see their own organization's activity.
Incident timelines
Show a signed sequence of events instead of rebuilding it from application logs.
Create an organization
One audit organization per customer. Each has its own sequence and retention period.
Send events
Call the API from the code path where the action happens. An idempotency key makes retries safe.
Invoance numbers and signs
The writer assigns the next seq inside a transaction, then signs the canonical bytes.
Your customer reads and verifies
Through the portal, the embedded viewer, an export, or the offline verifier in the SDK.
How is this different from logging to our own database?
Can customers verify without calling Invoance?
What happens when retention ends?
Send your first record.
Free on the Developer plan.