Every webhook event uses the standard envelope. The table below lists every event type currently emitted, grouped by resource.
Subscribe to the events you care about when creating a webhook endpoint — do not subscribe to *. Fine-grained subscriptions are cheaper, faster, and easier to debug.
A usage billing period closed and records were finalized.
UsagePeriod
usage.invoice.created
A usage-based invoice was generated from finalized records.
UsageInvoice
usage.event.ingested
A usage event was accepted. High-volume — opt in with narrow filters.
UsageEvent
usage.event.rejected
Ingestion rejected the event (validation failed). Not billable.
UsageEvent
usage.event.excluded
A meter considered the event but filter conditions excluded it.
UsageEvent
usage.event.quarantined
The event could not be matched to a single active meter.
UsageEvent
usage.cap.exceeded
A hard usage cap refused the event. Nothing persisted, nothing charged.
UsageEvent
meter.created
A usage meter was created.
Meter
meter.updated
A usage meter was updated.
Meter
meter.archived
A usage meter was archived.
Meter
entitlement.expired
Time-bounded entitlement ended.
Entitlement
Usage ingest events (usage.event.ingested, usage.event.excluded, usage.event.quarantined, usage.cap.exceeded) are delivered at-least-once. Dedupe on data.dedupeKey (usage:{eventId}:{kind}, or usage:batch:{index}:{kind} when no row was persisted). usage.event.ingested is high-volume — subscribe only with narrow endpoint filters.
Event payloads follow the same API versioning rules — new fields can appear at any time, existing fields never change meaning under an existing version header. Pin the endpoint's version when you create it via the dashboard or API.