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
| Method | Path | Purpose |
|---|---|---|
GET | /logs | List logs (paginated). |
GET | /logs/:log_id | Fetch 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"
}| Field | Description |
|---|---|
type | A dotted string identifying the event family. Examples: email.user.welcome, email.team_invite, webhook.user.created. |
status | One of success, failed, skipped, info. |
message | Short human-readable description (often the error message when status=failed). |
data | Type-specific structured payload β its shape depends on the log type. |
expires_at | When 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,subjectevent_typeβ the trigger that produced the emailsourceβbuiltin,custom(your override), orexternal(Auth0-style template provider)message_idβ the providerβs message identifier (useful for tracing in your ESP)errorβ populated whenstatus=failed
webhook.* β webhook deliveries
One entry per webhook attempt.
data includes:
subscription_idβ which subscription was firedevent_id,event_typeβ what was deliveredduration_msβ request durationrequest,responseβ bodies truncated at 64 KBerrorβ 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:failedPagination follows the standard Faable cursor pattern (pageSize, cursor).
Retention
- Entries without
expires_atpersist 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
- Webhooks β stream events to your own backend in real time.
- Change Email and Team Invitations β flows that produce many of the
email.*log entries.