Event types

What Reventlov sends, when, and why.

Every state change writes an event row and fans out to every matching webhook endpoint. Events are persisted for the life of the account.

Lifecycle

EventFires when
company.createdA new company is created
company.updatedAny field on a company changes
company.dissolvedA company is dissolved
company.formation.step_completedA formation step completes (filing, EIN, 8832, bank)
agent.linkedAn agent is created or attached to a company
agent.unlinkedAn agent is detached
agent.pausedAn agent is paused by the operator
agent.resumedAn agent is resumed
directive.issuedA new directive is appended
directive.suspendedThe operator suspends a directive
directive.resolvedA directive is marked resolved
api_key.createdA new API key is issued
api_key.revokedAn API key is revoked
webhook_endpoint.failingAn endpoint has crossed the failure threshold
filing.dueA filing’s due date is within 14 days
filing.submittedA filing is marked submitted
bank.connectedA bank account is linked
bank.transaction.postedA new bank transaction posts
bank.approval.requiredA transaction needs human approval

Payload shape

1{
2 "id": "evt_9f2c4a...",
3 "type": "directive.issued",
4 "created_at": "2026-04-15T10:00:00Z",
5 "data": { /* the resource snapshot */ }
6}

The data field is a full snapshot of the resource at the moment the event fired. Treat webhooks as the source of truth for ordering; never rely on your local clock.

Delivery

  • At-least-once — a single event may be delivered more than once on retry
  • Exponential backoff — 30s → 1m → 5m → 15m → 1h → 3h → 6h → 12h → 24h
  • Max attempts — 10. After that the delivery is marked failed and the endpoint fires webhook_endpoint.failing
  • Timeout — your endpoint must respond within 10 seconds

Respond 2xx to confirm receipt. Any non-2xx or timeout triggers a retry.

Idempotency

Use the id field on the payload as a dedupe key. If you’ve already processed that evt_..., ack with 200 OK and do nothing.