Audit feed for SIEM

For HR administrators

Your security team can collect Jadiroon's audit log in its SIEM (Splunk, Microsoft Sentinel, QRadar, Elastic, …): every change made in the app or through the API, sign-ins, data exports and super-admin activity, with who, what, which record, before and after, IP address and user agent. There are two ways to get it, and you can use both.

Pull: audit feedPush: audit.recorded webhook
HowPoll GET /api/v1/audit-eventsJadiroon POSTs each row to your endpoint
LatencyYour polling intervalSeconds
Catch-up after an outageAny time (rows are kept as long as the audit log)Retries with backoff for several days (see Retries), events kept 30 days
Permissionaudit.viewaudit.view, and audit.recorded picked on the endpoint

Both carry the same object; it is described on the Audit events reference page.

Pull: polling the feed

  1. Create an integration for the SIEM with only audit.view (add recruitment.candidate.contact only if the SIEM may hold candidate contact values; without it they read [redacted]).
  2. First run: page through GET /api/v1/audit-events?limit=100 from the start, following nextCursor until it is null.
  3. Store the occurredAt of the last row.
  4. Every few minutes: call again with updatedSince = that stored time, and skip ids you already have (rows at exactly that time come back).

Rows come oldest first and never change, so the feed is append-only from your point of view.

Push: the audit.recorded event

  1. In Settings → Integrations → (integration) → Webhooks, add an endpoint (your SIEM's HTTP collector, behind a small receiver that verifies the signature) and tick audit.recorded. It is listed separately and is not included in *.
  2. Each audit row is sent as one event, data.object = the audit row.
  3. Verify the signature and deduplicate by event id as described on Webhooks.

Use the pull feed as the backfill whenever the endpoint was down longer than the retry window.

What the feed contains, and what it doesn't

  • Contains: every mutation (app, API, automation), sign-ins (auth.signed_in), password changes, data exports (audit.log.exported, people.participation.exported, …), integration key and endpoint changes (settings.integration.*), and actions by Jadiroon super admins inside your workspace.
  • Does not contain API reads. Reading through the API is not audited, so the feed shows what your integrations changed, not what they read.
  • Secrets (passwords, tokens) are blanked when the row is written. Candidate contact values are masked at read time unless the key holds recruitment.candidate.contact, and pay changes (positions, job descriptions, pay scales), pay ids and amounts stored at the top level of metadata (for example on a position or opening creation) and metadata.gradeCode are left out unless it holds structure.functional.salary.

Mapping to SIEM fields

SIEM fieldAudit row
Event timeoccurredAt
Event idid (pull) or the event id (push)
Action / event typeaction
User / principalactor.type, actor.id, actor.name (integration actors also carry metadata.actorIntegration.keyPrefix)
Objecttarget.type, target.id, target.label
Source IP, user agentipAddress, userAgent
Detailsmetadata (for example changes with { from, to })

Entity-wide collection

On a dedicated deployment, an entity or holding SIEM can read every workspace's audit rows through one deployment-level read integration. Its feed also includes platform rows (workspaceId: null): Platform Console actions such as workspace creation, super-admin entries and exits, console role and integration changes, and failed console sign-in attempts (admin.login_failed). Filter on action if you only want some of them.