Event Storage

Keep webhook event records — queryable, searchable, joinable

Enable collection persistence for verified webhooks and choose how to manage your records. The inbound replay buffer is separate and defaults to 30-day retention.

The 30-day cliff

You integrate Stripe, GitHub, or any webhook sender into your platform. For the first month, everything works fine. Then a customer disputes a charge in month four.

Stripe — 30-day retention

Events are queryable in the Stripe Dashboard for 30 days. After that, gone. You can't trace the original request, can't replay it, can't build a historical audit trail.

GitHub — 30-day delivery history

Webhook deliveries are available for 30 days via the webhook details page. A security incident in month three? The delivery logs are already deleted.

DIY webhook system — retention is a decision you avoid

Most teams keep events as long as the database table exists. When it grows too large, you delete the old ones. Now you own a retention policy nobody documented.

We store events as records, not deliveries

Competitors keep delivery metadata — when it was sent, how many retries, did it succeed. We keep the business event itself.

AspectCompetitorsCentrali
What is keptDelivery metadata: attempt count, response status, timestampAn encrypted inbound payload; optionally a separate collection record
Retention window30 days (Stripe, GitHub) or self-managedInbound buffer: 30 days by default, operator-configurable. Collection records follow separate retention and deletion settings.
Query and searchVia the sender's dashboard (if at all)Via saved queries, full-text search, joins with your data
Reconciliation in month 4Request lost, event lost, no audit trailQuery retained collection records. Inbound replay requires the original buffer row to remain available.

How it works

Signature-verified HTTP-trigger arrivals are buffered before function dispatch. Enable auto-persist or write a function to store separate collection records for queries and search.

1

Webhook arrives

GitHub sends a webhook event to your Centrali endpoint. Signature is verified at the HTTP layer.

2

Becomes a record

Opt into auto-persist to a linked collection, or normalize the payload in a function. Auto-persist stores an encrypted full-payload envelope and projects declared non-secret fields; inspect persistence outcomes for failures.

3

Query anytime

Save a query for projected fields such as payments over $1,000 or failed deployments. Queries remain available while the collection records are retained.

4

Join with your data

Link webhook events to your own records via saved queries. Match Stripe payments to your orders. Connect GitHub pushes to your deployments.

Query events like you query any other data

Query retained collection records for the business event and link them to the actions your application recorded.

// Define a saved query in the console or via API
const eventQuery = {
resource: 'stripe-events',
where: {
and: [
{ 'data.type': { eq: 'charge.dispute.created' } },
{ 'data.amount': { gte: 50000 } },
{ 'createdAt': { gte: '2026-01-01T00:00:00Z' } }
]
},
select: { fields: ['id', 'data.id', 'data.amount', 'data.reason', 'createdAt'] }
};
// Run it anytime
const disputes = await api.queryRecords('stripe-events', eventQuery);
return disputes.data;

Stored queries run over your collections. Events stored as records are queryable; events stored only in a delivery log are not.

Built for teams that need audit trails

Compliance and dispute resolution

Persist selected verified arrivals as records and link them to your actions. Inbound replay is available while the original buffer row is retained.

Debugging production incidents

Inspect retained arrivals and function runs alongside your logs. Replay a buffered arrival through the trigger's current configuration; protect downstream work from duplicate side effects.

Long-tail analytics

Query retained collection records to investigate GitHub workflow failures or Stripe processing times. Plan record retention for the history you need.

Migrating off a webhook service

Plan provider cutover and send signed events to a configured Centrali HTTP trigger. Inbound replay operates on Centrali's own retained buffer rows, not arbitrary imported provider archives.

Trace events end-to-end

Every inbound event, record change, and outbound delivery carries a correlation ID. Follow a single webhook through the entire system.

A GitHub webhook arrives → becomes a record → triggers a function → emits an outbound webhook to your customer. One correlation ID ties them all together. Query the Event Log to see the entire chain.

How we compare

Competitors in the webhook space focus on delivery reliability. We focus on what makes the event worth keeping in the first place.

Svix and Hookdeck hold SOC 2 Type II; we do not. On reliability and compliance certifications, they are the stronger choice. We differentiate on the business event itself.

FeatureCentraliSvixHookdeck
Store event payloads long-term——
Query events with saved queries——
Join events with your own data——
HMAC signing and retries
Delivery log and replay
SOC 2 Type II certification—
Per-customer delivery dashboard—

Keep useful webhook event records

Enable verified-arrival persistence or store records in your function. Manage collection retention separately from the inbound replay buffer.

5-minute setup. No credit card.

View the docs →