Audit Log
Query mutating API operations and auth lifecycle events for your organization. Entries are ordered newest-first and clamped to the per-tier retention window.
Retention windows
| Plan | Retention | |------|-----------| | Free | 3 days | | Pro | 90 days | | Custom | Per contract |
List audit-log entries
Section titled “List audit-log entries”GET /v1/audit-logQuery parameters
Section titled “Query parameters”| Parameter | Type | Description |
|-----------|------|-------------|
| from | ISO-8601 datetime | Lower bound (inclusive). Silently clamped to the retention window if older. |
| to | ISO-8601 datetime | Upper bound (inclusive). Defaults to now. |
| action | string | Filter by exact action (see Action types). |
| actor_key_prefix | string | Filter by the first 20 chars of the actor API key. |
| cursor | string | Opaque pagination cursor from a previous response. |
| limit | integer (1–200) | Page size. Defaults to 50. |
Action types
Section titled “Action types”| Action | Trigger |
|--------|---------|
| auth.signup | Organization registered |
| auth.signin | Successful sign-in |
| auth.signout | Sign-out |
| auth.failure | Invalid API key on an authenticated route |
| key.create | Agent-scoped key created |
| key.delete | Agent-scoped key revoked |
| key.regenerate | Org key regenerated |
| org.update | Org name or settings changed |
| account.delete | Account deleted |
| agent.create / .update / .delete | Agent CRUD |
| calendar.create / .update / .delete | Calendar CRUD |
| event.create / .update / .delete | Event CRUD |
| webhook.create / .update / .delete | Webhook subscription CRUD |
| ical_subscription.create / .update / .delete | iCal subscription CRUD |
| rate_limit.exceeded | Request throttled (429) |
Example
Section titled “Example”curl "https://api.chronary.ai/v1/audit-log?limit=20" \ -H "Authorization: Bearer chr_sk_your_key_here"from chronary import Chronary
client = Chronary(api_key="chr_sk_your_key_here")result = client.audit_log.list(limit=20)
for entry in result.data: print(f"{entry.created_at} {entry.action} {entry.status}")
# Paginateif result.pagination.next_cursor: next_page = client.audit_log.list(cursor=result.pagination.next_cursor)import Chronary from '@chronary/sdk';
const client = new Chronary({ apiKey: 'chr_sk_your_key_here' });const result = await client.auditLog.list({ limit: 20 });
for (const entry of result.data) { console.log(entry.created_at, entry.action, entry.status);}
// Paginateif (result.pagination.next_cursor) { const nextPage = await client.auditLog.list({ cursor: result.pagination.next_cursor });}client, _ := chronary.NewClient(chronary.WithAPIKey("chr_sk_your_key_here"))
result, err := client.AuditLog.List(ctx, &chronary.ListAuditLogParams{ Limit: 20,}, nil)
for _, entry := range result.Data { fmt.Println(entry.CreatedAt, entry.Action, entry.Status)}chronary audit-log list --limit 20chronary audit-log list --action agent.createchronary audit-log list --from 2026-05-01T00:00:00ZResponse
Section titled “Response”{ "data": [ { "id": "aud_abc123def456", "action": "agent.create", "actor_key_prefix": "chr_sk_abcdef12345678", "agent_id": null, "resource": "", "ip": "203.0.113.10", "status": 201, "method": "POST", "path": "/v1/agents", "duration_ms": 42, "request_id": "req_8e9f...", "created_at": "2026-05-10T10:00:00.000Z" } ], "pagination": { "next_cursor": null }, "retention_days": 90, "range_clamped": false}Response fields
Section titled “Response fields”| Field | Type | Description |
|-------|------|-------------|
| data | array | Array of audit entries, newest first. |
| pagination.next_cursor | string | null | Pass this as cursor to fetch the next page. null = no more results. |
| retention_days | integer | null | Your plan’s retention window (days). null = unlimited. |
| range_clamped | boolean | true when the requested from was outside the retention window and was automatically clamped. |