API referenceAdmin APISecurity & dataAudit feed

Audit feed

⚠️
Preview — this feature is being built; the design below is the spec.

The audit feed is programmatic access to your organization’s audit log: every security-relevant action, with who did it, what it touched, when and from where. Security teams use it to stream events into a SIEM, alert on sensitive changes (a new administrator, a revoked key, an IP block), and answer auditors without manual CSV exports.

Today the audit log is read and exported (CSV, up to 10,000 rows) in the Console under Settings → Audit Logs. The feed below reads the same entries.

Endpoint

GET /v1/organizations/audit_events

Authenticate with an admin key and send syntic-beta: admin-2026-11-01. The key’s creator must be allowed to read the audit log in the Console (Owner, Administrator, or a custom role with Analytics access).

Query parameters

ParameterDescription
starting_at, ending_atTime window, RFC 3339. Default: the last 24 hours.
actions[]Exact action names, such as api_key.revoked. Repeat for several. A trailing .* matches a prefix: member.*.
actor_idEvents done by one member, admin key or service account.
resource_type, resource_idEvents about one kind of resource, or one resource.
limit1 to 1,000. Default 100.
after_idCursor: events after this event id.
orderasc (default, oldest first: best for streaming) or desc.

Response

{
  "data": [
    {
      "id": "evt_01JCE4G6J8L0N2Q4S6U8",
      "type": "audit_event",
      "action": "api_key.revoked",
      "occurred_at": "2026-11-05T09:58:12Z",
      "actor": { "kind": "user", "id": "user_01J9Y0A2C4E6G8J0L2N4", "email": "dana@example.com" },
      "resource": { "type": "api_key", "id": "apikey_01JB7C9E1G3J5L7N9Q1S", "name": "billing-worker-prod" },
      "workspace_id": "wrkspc_01JC0A2C4E6G8J0L2N4Q",
      "ip_address": "198.51.100.23",
      "user_agent": "Mozilla/5.0 ...",
      "request_id": "req_4a0e8c1d2b3f4a5e6c7d8e9f",
      "details": { "prefix": "sk_live_3f9c" }
    }
  ],
  "has_more": true,
  "first_id": "evt_01JCE4G6J8L0N2Q4S6U8",
  "last_id": "evt_01JCE4K2M4P6R8T0V2X4"
}
FieldMeaning
actionA dotted name. The full list is on Audit logs, plus the API actions below.
actor.kinduser, admin_key, api_key, service_account, directory_sync or system.
resourceWhat was affected. name is what the resource was called when the event happened.
detailsAction-specific context. Never contains secrets or prompt content.

Actions added with the API platform

AreaActions
Admin APIadmin_api.request, admin_key.created, admin_key.updated, admin_key.revoked
Workspacesworkspace.created, workspace.updated, workspace.archived, workspace.unarchived, workspace.member_added, workspace.member_removed
Membersmember.invited, member.invite_resent, member.invite_canceled, member.suspended, member.restored, member.removed
API keysapi_key.updated, api_key.ip_denied
Billingbilling.spend_limit_changed, billing.credits_toggled
Agentsagent.created, agent.updated, agent.archived, agent.deleted, vault.secret_written, vault.secret_deleted, vault.secret_used
Securityservice_account.token_issued, inference.policy_denied, encryption_key.changed, organization.updated

Streaming to a SIEM

Poll with order=asc and after_id set to the last event you stored. Events are written within seconds and never change once written, so the cursor never misses or repeats an event.

# New administrators and revoked keys in the last 7 days
curl -sS -G https://app.syntic.ai/v1/organizations/audit_events \
  -H "Authorization: Bearer $SYNTIC_ADMIN_KEY" \
  -H "syntic-beta: admin-2026-11-01" \
  --data-urlencode "starting_at=$(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ)" \
  --data-urlencode "actions[]=member.change_role" \
  --data-urlencode "actions[]=api_key.revoked"

Retention

Audit events are kept for 1 year by default; Enterprise organizations can extend this to 7 years. Events older than the window are not returned. Stream them to your own storage if you need a longer record.

Errors

Errors use the error envelope.

StatustypecodeWhen
400invalid_request_errorinvalid_time_rangeWindow reversed or older than retention.
400invalid_request_errorinvalid_action_filterMalformed action pattern.
403permission_errorrole_requiredThe key’s creator may not read the audit log.
429rate_limit_errorrate_limitedPolling faster than 60 times a minute.

Build notes for the platform team

  • Read from the existing audit table; add workspace_id, request_id, user_agent and actor.kind columns, and an index on organization and event id for cursor reads.
  • Event ids must sort by time so after_id is a stable cursor.
  • Audit rows are append-only; no API or Console action edits or deletes them.
Was this page helpful?