diff --git a/docs.json b/docs.json
index d27efcb..14fc262 100644
--- a/docs.json
+++ b/docs.json
@@ -119,6 +119,7 @@
]
},
"info/api-keys",
+ "info/audit-logs",
"browsers/file-io",
"browsers/curl",
"browsers/ssh",
@@ -295,6 +296,7 @@
"reference/cli/managed-auth",
"reference/cli/projects",
"reference/cli/api-keys",
+ "reference/cli/audit-logs",
"reference/cli/mcp"
]
}
diff --git a/info/audit-logs.mdx b/info/audit-logs.mdx
new file mode 100644
index 0000000..17e3f78
--- /dev/null
+++ b/info/audit-logs.mdx
@@ -0,0 +1,183 @@
+---
+title: "Audit Logs"
+description: "Search and export audit logs for API requests across your organization"
+---
+
+Audit logs record authenticated API requests across your entire organization. Use them to review who called Kernel, which endpoint they called, when the request happened, and how the request completed.
+
+Choose the endpoint that matches the amount of data you need:
+
+| Endpoint | Best for | Output |
+|----------|----------|--------|
+| [Search](#search-audit-logs) | Interactive investigation and recent activity | Paginated JSON events |
+| [Export](#export-audit-logs) | Archival, compliance, and offline analysis | Gzip-compressed JSON Lines (`.jsonl.gz`) |
+
+Audit logs are ordered newest first. Time windows use an inclusive `start` and exclusive `end`: `[start, end)`. A search or export can cover up to 30 days. Split longer periods into multiple time windows.
+
+Both endpoints are also available from the [CLI](/reference/cli/audit-logs). For the underlying HTTP API, see [search](https://kernel.sh/docs/api-reference/audit-logs/list-audit-logs) and [export](https://kernel.sh/docs/api-reference/audit-logs/download-an-audit-log-export-chunk) in the API reference.
+
+## Filter audit logs
+
+The API and SDKs use the same filters for search and export:
+
+- `auth_strategy` filters by authentication method, such as `api_key`, `dashboard`, or `oauth`.
+- `service` filters by the service that emitted the audit event.
+- `method` returns only requests that use the specified HTTP method.
+- `exclude_method` omits requests that use any of the specified HTTP methods.
+- `search` matches path, user ID, email, client IP, or status.
+- `search_user_id` matches requests from the specified user IDs in addition to any free-text matches.
+
+## Search audit logs
+
+Each API page contains up to 100 events. The SDK pagination helpers request older pages as you iterate.
+
+
+```typescript TypeScript
+import Kernel from '@onkernel/sdk';
+
+const kernel = new Kernel({
+ apiKey: process.env.KERNEL_API_KEY,
+});
+
+for await (const event of kernel.auditLogs.list({
+ start: '2026-06-01T00:00:00Z',
+ end: '2026-06-02T00:00:00Z',
+ method: 'POST',
+})) {
+ console.log(event.timestamp, event.method, event.path, event.status);
+}
+```
+
+```python Python
+import os
+from kernel import Kernel
+
+client = Kernel(api_key=os.environ["KERNEL_API_KEY"])
+
+for event in client.audit_logs.list(
+ start="2026-06-01T00:00:00Z",
+ end="2026-06-02T00:00:00Z",
+ method="POST",
+):
+ print(event.timestamp, event.method, event.path, event.status)
+```
+
+```go Go
+package main
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ "github.com/kernel/kernel-go-sdk"
+)
+
+func main() {
+ ctx := context.Background()
+ client := kernel.NewClient()
+
+ pager := client.AuditLogs.ListAutoPaging(ctx, kernel.AuditLogListParams{
+ Start: time.Date(2026, time.June, 1, 0, 0, 0, 0, time.UTC),
+ End: time.Date(2026, time.June, 2, 0, 0, 0, 0, time.UTC),
+ Method: kernel.String("POST"),
+ })
+ for pager.Next() {
+ event := pager.Current()
+ fmt.Println(event.Timestamp, event.Method, event.Path, event.Status)
+ }
+ if err := pager.Err(); err != nil {
+ panic(err)
+ }
+}
+```
+
+
+See the [API reference](https://kernel.sh/docs/api-reference/audit-logs/list-audit-logs) for the full request and response schema.
+
+## Export audit logs
+
+The SDK download helpers default to `jsonl.gz` and write a complete export to a destination you provide. They:
+
+- request every chunk until the export is complete
+- validate pagination metadata and each chunk's SHA-256 checksum before writing
+- retry transient HTTP and transfer failures
+- append verified chunks in order
+
+The helpers don't close the destination. Python provides equivalent sync and async methods; both accept a synchronous binary destination.
+
+
+```typescript TypeScript
+import { open } from 'node:fs/promises';
+import Kernel from '@onkernel/sdk';
+
+const kernel = new Kernel({
+ apiKey: process.env.KERNEL_API_KEY,
+});
+
+const file = await open('audit-logs.jsonl.gz', 'w');
+try {
+ await kernel.auditLogs.download(
+ {
+ start: '2026-06-01T00:00:00Z',
+ end: '2026-06-02T00:00:00Z',
+ exclude_method: ['GET'],
+ },
+ file,
+ );
+} finally {
+ await file.close();
+}
+```
+
+```python Python
+import os
+from kernel import Kernel
+
+client = Kernel(api_key=os.environ["KERNEL_API_KEY"])
+
+with open("audit-logs.jsonl.gz", "wb") as file:
+ client.audit_logs.download(
+ to=file,
+ start="2026-06-01T00:00:00Z",
+ end="2026-06-02T00:00:00Z",
+ exclude_method=["GET"],
+ )
+```
+
+```go Go
+package main
+
+import (
+ "context"
+ "os"
+ "time"
+
+ "github.com/kernel/kernel-go-sdk"
+)
+
+func main() {
+ ctx := context.Background()
+ client := kernel.NewClient()
+
+ file, err := os.Create("audit-logs.jsonl.gz")
+ if err != nil {
+ panic(err)
+ }
+ defer file.Close()
+
+ _, err = client.AuditLogs.Download(ctx, kernel.AuditLogDownloadParams{
+ Start: time.Date(2026, time.June, 1, 0, 0, 0, 0, time.UTC),
+ End: time.Date(2026, time.June, 2, 0, 0, 0, 0, time.UTC),
+ ExcludeMethod: []string{"GET"},
+ }, file)
+ if err != nil {
+ panic(err)
+ }
+}
+```
+
+
+Export chunks contain one JSON object per line. They use the same fields as search results and add `event_id`.
+
+For direct HTTP integrations, see the [API reference](https://kernel.sh/docs/api-reference/audit-logs/download-an-audit-log-export-chunk) for pagination headers, formats, and the full request and response schema.
diff --git a/reference/cli.mdx b/reference/cli.mdx
index 7a47a9d..b0cc1a3 100644
--- a/reference/cli.mdx
+++ b/reference/cli.mdx
@@ -61,6 +61,9 @@ kernel --version
Create, list, rename, and delete API keys.
+
+ Search and download organization audit logs.
+
## Quick Start
diff --git a/reference/cli/audit-logs.mdx b/reference/cli/audit-logs.mdx
new file mode 100644
index 0000000..300272c
--- /dev/null
+++ b/reference/cli/audit-logs.mdx
@@ -0,0 +1,93 @@
+---
+title: "Audit Logs"
+---
+
+Search and download [organization audit logs](/info/audit-logs) from the CLI.
+
+Time values can be dates (`2026-06-01`) or timestamps (`2026-06-01T15:04:05Z`). Dates begin at midnight UTC.
+
+## `kernel audit-logs search`
+
+Search audit logs within a time window. Results are ordered newest first.
+
+```bash
+kernel audit-logs search \
+ --start 2026-06-01 \
+ --end 2026-06-08 \
+ --search /browsers \
+ --limit 500 \
+ --output json
+```
+
+If you omit the time flags, the command searches from 24 hours ago through now. The start is inclusive and the end is exclusive. Each time window can cover up to 30 days.
+
+| Flag | Description |
+|------|-------------|
+| `--start