CarlyEmail docs

Every meaningful action appends an event. It is the same stream that drives webhooks, and it is queryable after the fact.

Event Fires when
message.received Inbound mail stored
message.received.spam …and it was classified spam
message.received.unauthenticated …and it failed authentication
message.sent Accepted for delivery
message.delivered Confirmed delivered
message.bounced Rejected by the recipient's server
message.complained Marked as spam by the recipient
message.rejected Refused before sending
domain.verified A custom domain finished verifying

Inbox events — label.added, label.removed — are on a separate stream.

curl "https://api.carlyemail.com/v0/inboxes/$INBOX_ID/events?limit=50" \
  -H "Authorization: Bearer $CARLYEMAIL_API_KEY"

Events are written before any delivery is attempted, so a webhook that never arrived is still recoverable from here. If an endpoint was down for an hour, this is how you find out what you missed.

Metrics

GET /v0/metrics/events aggregates the same stream into counts over time, per organization and per pod.

Note

Metrics buckets are per minute. A period shorter than 60 seconds is refused rather than silently rounded.