Skip to Content

Logs

Faable Auth records significant account events β€” email deliveries, webhook calls, authentication events, and more β€” in a Logs resource. You can query it from the dashboard or via the API to audit what happened, debug delivery problems, and feed your own observability pipeline.

Logs are read-only: entries are written by the system and cannot be deleted by API. Some entry types are configured to auto-expire (Mongo TTL); others persist indefinitely so they can serve as an audit trail.

Endpoints

MethodPathPurpose
GET/logsList logs (paginated).
GET/logs/:log_idFetch a single log entry.

Both require an authenticated account session.

Anatomy of a log entry

{ "id": "log_…", "account": "acc_…", "type": "email.team_invite", "status": "success", "message": "Sent to invitee", "data": { "to": "new.member@example.com", "from": "no-reply@example.com", "event_type": "team_invite", "source": "builtin", "subject": "You've been invited to Project X", "message_id": "<…@example.com>" }, "expires_at": null, "createdAt": "2026-05-12T10:42:01.000Z", "updatedAt": "2026-05-12T10:42:01.000Z" }
FieldDescription
typeA dotted string identifying the event family. Examples: email.user.welcome, email.team_invite, webhook.user.created.
statusOne of success, failed, skipped, info.
messageShort human-readable description (often the error message when status=failed).
dataType-specific structured payload β€” its shape depends on the log type.
expires_atWhen set, the row is deleted automatically by Mongo’s TTL index at that time.

Common log types

email.* β€” notification deliveries

Recorded for every transactional email Faable sends (welcome, passwordless OTP, team invite, change-email, security alerts, custom templates…).

data includes:

  • to, from, subject
  • event_type β€” the trigger that produced the email
  • source β€” builtin, custom (your override), or external (Auth0-style template provider)
  • message_id β€” the provider’s message identifier (useful for tracing in your ESP)
  • error β€” populated when status=failed

webhook.* β€” webhook deliveries

One entry per webhook attempt.

data includes:

  • subscription_id β€” which subscription was fired
  • event_id, event_type β€” what was delivered
  • duration_ms β€” request duration
  • request, response β€” bodies truncated at 64 KB
  • error β€” present on timeouts or non-2xx responses

See Webhooks for the delivery contract.

Filtering

The ?query= parameter accepts FaableQL β€” a compact filter syntax used across Faable resources. Field-value pairs are colon-separated:

GET /logs?query=type:email.user.welcome&pageSize=50 GET /logs?query=status:failed&pageSize=20 GET /logs?query=type:webhook.user.created status:failed

Pagination follows the standard Faable cursor pattern (pageSize, cursor).

Retention

  • Entries without expires_at persist indefinitely.
  • Entries written with a TTL (e.g. high-volume PII-containing events like login records) disappear automatically once the TTL elapses.

If you need long-term retention beyond the defaults, mirror logs to your own warehouse using Webhooks.

Next steps

Last updated on