Export audit logs
Append-only, oldest-first stream of audit log records, designed for continuous polling (e.g. SIEM export). Records are immutable once written.
The audit log records every create, update, and delete on your SELECT resources, plus events like login and org membership changes — who changed what, and when. Each record is tied to either a resource (something in SELECT that changed) or an event_type (something that happened with no resource).
| Name | Kind | What it is |
|---|---|---|
actions | resource | Cost-saving actions |
api_keys | resource | API keys |
budgets | resource | Budgets |
connections | resource | Data warehouse connections |
dashboards | resource | Dashboards |
dashboard_digests | resource | Scheduled dashboard digests |
insights | resource | Insights |
monitors_v2 | resource | Monitors |
saved_views | resource | Saved views |
snowflake_warehouses | resource | Snowflake warehouse settings |
teams | resource | Teams |
ticket_integrations | resource | Ticketing tool integrations (Jira, etc.) |
ticket_links | resource | Links between SELECT items and external tickets |
user_roles | resource | User and role assignments |
usage_group_sets | resource | Usage group sets |
session | event | Login / logout |
invitation | event | Org invitation created / revoked |
users | event | User removed from the org |
organization | event | Organization-level settings: trial end date, app warehouse size, feature enablement, data share provisioning |
How to poll
Page with page_token, and drain every poll until page_token is null:
- First run — call with no
page_token. Optionally setchanged_at__gteto a start date to skip old history. - Drain — keep re-requesting with the
page_tokenfrom the previous response until the response returnspage_token: null(you are caught up). - Persist the last non-null
page_tokenyou received. - Next poll — resume from that stored
page_token. It continues strictly after the last record you ingested, so every new record is delivered exactly once.
Do not build your own cursor from
changed_at. Bulk operations can stamp thousands of records with the exact samechanged_at. A client that computes its next request frommax(changed_at)will re-receive duplicates and, if a single-timestamp cluster is larger thanmax_results, loop forever and never advance past it. Always page withpage_token.
sort_order defaults to asc (oldest-first) to preserve the SIEM drain-forward contract above; pass desc for newest-first. A page_token carries the sort_order it was minted with, so resuming with the other order is rejected rather than silently resuming in the wrong direction.
Authorizations
Organization API key (sl_…).
Headers
The organization ID the request is scoped to.
Query Parameters
Maximum number of records to return (1–500).
asc (default, oldest-first) or desc (newest-first).
asc, desc Opaque cursor from a previous response. Omit on the first call.

