Audit
An append-only, SHA-256 hash-chained audit log with a /verify integrity endpoint and behavioral-baseline anomaly detection — provable tamper-evidence most CIAM platforms don't offer.
Qeet ID writes an append-only audit log where each entry is SHA-256
hash-chained to the previous one. Because every record commits the hash of its
predecessor, altering or deleting any entry breaks the chain — and a /verify
endpoint proves the chain is intact.
A genuine differentiator
Tamper-evident, hash-chained audit with an integrity endpoint is something most mainstream identity platforms don't ship. (Externally-verifiable Merkle checkpoints — provable to a third party — are on the roadmap.)
Read the log
/v1/tenants/{tenantID}/auditQuery audit eventscurl "https://api.id.qeet.in/v1/tenants/$TENANT/audit?limit=50&action=role.assigned&actor_user_id=$USER" \
-H "Authorization: ApiKey $QEETID_API_KEY"action, resource_type, and actor_user_id filter server-side; cursor (the id of
the last-seen event) keyset-paginates through the rest.
Verify integrity
The verify endpoint recomputes the chain and reports whether it's intact (and where it breaks, if it doesn't).
/v1/tenants/{tenantID}/audit/verifyVerify the hash chaincurl "https://api.id.qeet.in/v1/tenants/$TENANT/audit/verify" \
-H "Authorization: ApiKey $QEETID_API_KEY"
# → { "ok": true, "rows_checked": 12840 }What's recorded
Security-relevant state changes are audited: sign-ins (success + failure), MFA events, refresh-token theft detection, role/permission and policy changes, session creation/revocation, admin configuration changes, API-key lifecycle, and GDPR operations. After a GDPR erasure, the audit record of the deletion survives with PII redacted — you keep a provable trail without retaining personal data.
Audit retention is governed by per-tenant retention settings; auto-purge respects the hash chain.
Anomaly detection
A background sweep builds a rolling behavioral baseline per (tenant, actor) — which action types they take, what hours they're normally active, which IPs they act from — and flags new events that deviate: a first-time action type, an unusual hour, or a brand-new IP. It's a transparent, weighted-novelty score (0–1), not a black-box model — every flag names exactly which signals fired.
/v1/tenants/{tenantID}/audit/anomaliesList anomalies/v1/tenants/{tenantID}/audit/anomalies/{id}/resolveResolve an anomaly{
"action": "billing.plan_changed",
"actor_email": "admin@acme.example",
"score": 0.7,
"reasons": ["new_action_type", "new_ip"],
"status": "open"
}Cold start
An actor needs a minimum history (20 events by default,
min_baseline_events) before anything is flagged for them — otherwise a
brand-new admin's very first actions would all look "100% novel." Tune this
and the score threshold per tenant:
/v1/tenants/{tenantID}/audit/anomaly-settingsUpdate detection settingsAlso in the console: Security & Compliance → Audit Intelligence, alongside a finally-
wired UI for the /verify integrity check above.