Skip to content

Observe

Product analytics, error tracking, request traces and alerts for every app, in one dashboard.

Recording events

Terminal
curl -X POST https://api.dianthan.com/v1/logs \
  -H "X-API-Key: dn_live_…" -H "X-App-Id: app_…" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "export.completed",
    "actor_user_id": "usr_x81…",
    "body": { "format": "pdf", "pages": 14, "ms": 812 }
  }'
  • type names the event. Use noun.verb in the past tense: export.completed, invite.sent.
  • actor_user_id is optional. It must be a user of this app, and it links the event to that person.
  • body holds whatever you want to break down by later.

Read events back with GET /v1/logs, filtered by type or actor_user_id. That makes a "your activity" page a single request. GET /v1/logs/counts returns daily and total counts per type.

The dashboard

Your dashboard lists every app with sign-ups, sign-ins, active users and your own events, each compared with the previous period. Open an app for daily charts and breakdowns by any field in an event's body, such as success rate by format or failures by host. Sign-in uses a single-use emailed link. The dashboard sets no third-party cookies and loads no third-party assets.

Errors and traces

Report errors from your server or browser:

Terminal
curl -X POST https://api.dianthan.com/v1/telemetry/errors \
  -H "X-API-Key: dn_live_…" -H "X-App-Id: app_…" \
  -H "Content-Type: application/json" \
  -d '{"message":"Cannot read properties of undefined (reading \"id\")","stack":"…","url":"/exports/42"}'

Errors are grouped by cause. Dianthan also traces a sample of its own requests for each app, so GET /v1/telemetry/traces shows latency percentiles for each route without any extra setup.

Alerts

Terminal
curl -X POST https://api.dianthan.com/v1/alerts \
  -H "X-API-Key: dn_live_…" -H "X-App-Id: app_…" \
  -H "Content-Type: application/json" \
  -d '{"name":"Slow API","metric":"p95_latency_ms","threshold":800,"window_minutes":15,"webhook_id":"whk_…"}'

Two metrics are available: new_errors (errors in the window above the threshold) and p95_latency_ms (latency above the threshold). Alerts are checked every few minutes. When one fires, it's delivered to the webhook you named, which can forward it to email, Slack or anything else.

In preview: a weekly digest across all your apps, and uptime checks against your public URLs with a status page you can share.

Undo

Every record change is written to the audit log with the key or person that made it and a copy of the record as it was before. That makes one credential's changes reversible: give each agent its own key, and if one does something it shouldn't, roll back everything it changed in a window.

Terminal
curl -X POST https://api.dianthan.com/v1/audit-log/revert \
  -H "Authorization: Bearer $OWNER_TOKEN" -H "X-App-Id: app_…" -H "Content-Type: application/json" \
  -d '{ "api_key_id": "key_…", "since": "2026-11-13T02:00:00Z" }'

The first call is a preview (dry_run defaults to true) and lists each change with how it would be undone: records the key created are deleted, changed records get their earlier version back, deleted records are brought back with their original id. Send "dry_run": false to apply it. A record that someone else has changed since is skipped and listed, never overwritten. The undo is itself written to the audit log as audit.reverted.

Undo needs an owner or admin of the app, and covers records. The console has the same thing under Operations, Audit and undo.