Skip to content

Audit log

Dinio records every change made through the API: what was done to which resource, by whom, and how it ended — including attempts that were refused. It never records the data itself: for a change, only the names of the fields that were sent.

interface AuditLog {
id: string;
ts: string; // ISO 8601, e.g. "2026-10-27T08:14:03.120Z"
request_id?: string; // the Request-Id header of that request
category: 'api' | 'relay' | 'auth' | 'system';
action: string; // "<resource>.<verb>": "record.create", "zone.api_key.create", "record.ttl.update"
outcome: 'success' | 'denied' | 'invalid' | 'conflict' | 'not_found' | 'error';
http_status?: number;
actor_type: 'user' | 'user_key' | 'zone_key' | 'edge' | 'system' | 'anonymous';
actor_user_id?: string;
actor_zone_id?: string; // the zone of a zone key
actor_label?: string; // e.g. the user's email
ip?: string; // only on your own actions
resource_type?: string; // "record", "zone", "redirect", …
resource_id?: string;
resource_name?: string; // e.g. "www.example.com A"
zone_id?: string;
fields?: string[]; // for a change: the names of the fields sent
error_code?: string; // e.g. "MANAGED_RECORD"
}

actor_type says how the actor signed in: user in the Dinio web app, user_key with a personal key, zone_key with a zone key.

GET /api/v1/audit-logs

Newest first. What you see depends on the key:

  • a personal key: your own actions, and everything on the zones you are Owner or Administrator of — including what happened before you became one;
  • a zone key: everything on its zone.
Query
from, to ISO 8601 with an offset. Default: the last 24 hours. At most 31 days.
zone_id Only this zone.
action An exact action (record.create), or a prefix ending in * (record.*).
outcome, category, actor_type Only these values.
actor_user_id Only actions of this user.
resource_type, resource_id Only this resource.
request_id Only the entries of one request.
limit Entries per page, 1–500, default 50.
cursor The next_cursor of the previous page.
Terminal window
curl -H "Authorization: Bearer $DINIO_API_KEY" \
"https://api-dinio.bitelex.com/api/v1/audit-logs?zone_id=$ZONE_ID&action=record.*&from=2026-10-20T00:00:00Z"
{
"success": true,
"data": [
{
"id": "0192f1c4-7e2a-7b3c-9d4e-5f6a7b8c9d0e",
"ts": "2026-10-27T08:14:03.120Z",
"category": "api",
"action": "record.update",
"outcome": "success",
"http_status": 200,
"actor_type": "user_key",
"actor_label": "me@example.com",
"resource_type": "record",
"resource_name": "www.example.com A",
"zone_id": "6f1c2a9e-3d4b-4c8a-9a51-0e2f7b1d4c33",
"fields": ["data"]
}
],
"meta": { "limit": 50, "next_cursor": "eyJ0cyI6…" }
}

To read the next page, send the same query with cursor set to meta.next_cursor. A next_cursor of null is the last page.

422 for a bad filter, a range over 31 days, or a cursor this API did not issue. 503 AUDIT_DISABLED when the audit log is not available.