Product Prototypes
Ecosystem ยท Webhooks

Webhooks 2.0

This prototype explores a significant upgrade to Kit's webhook management experience. Today, webhooks are functional but bare โ€” you can create them, and that's about it. Developers have no visibility into delivery health, no way to edit a webhook without deleting and recreating it, and no in-product documentation to reference when building an integration.

The goal of this work is to make webhooks a first-class feature for developers building on Kit โ€” with the tooling, transparency, and documentation that serious integrations require.

Open prototype
What's in this prototype
๐Ÿ“‹
Redesigned list view
The main webhook table now shows an inline sparkline for delivery activity over the last 7 days, making it easy to spot a broken webhook at a glance. You can sort by created date or total delivery volume, and filter by status or event source. Hovering the sparkline shows a tooltip with delivery stats.
๐Ÿ“Š
Performance panel
Clicking a webhook opens a side panel with a 7-day performance view โ€” two line charts showing total vs failed deliveries, and average response time over time. Below the charts is a log of the 8 most recent delivery attempts with status code, response time, and timestamp. This replaces the old flat delivery log.
โœ๏ธ
Inline editing
Developers can now edit a webhook's target URL, subscribed events, and payload style directly from the panel without deleting and recreating it. The event picker is collapsible and has a live search filter โ€” important as the event list grows. Edit mode is accessible from the โ‹ฏ overflow menu.
โž•
Create flow
A multi-step modal walks through configuring the target URL, choosing events by category (subscriber, purchase, etc.), and selecting a payload style โ€” snapshot for the full object, thin for just the ID. The signing secret is revealed once on creation with a copy button and a prominent "save this now" prompt.
๐Ÿ”‘
Signing secret management
The signing secret can be rolled via the overflow menu or directly through the API (POST /v4/webhooks/{id}/roll_secret). Rolling generates a new secret immediately with a 24-hour overlap window, so developers can rotate without downtime. The old secret expires permanently after 24 hours.
๐Ÿ“–
Developer documentation (prototype only)
A full-screen dark-mode documentation experience built into the prototype for convenience, modelled on developers.kit.com. The right panel shows live code samples in Response, cURL, Node.js, and Ruby โ€” updating as you navigate. In the real product, this content lives on the external developer docs site, not in-app.
Documentation pages included
๐Ÿš€
Quickstart
A 5-step guide covering: build an endpoint, verify the signature, register with Kit, handle events, and test. Includes a full Express + Rails example showing idiomatic event routing with async processing.
๐Ÿงช
Testing guide
Covers three testing approaches: using the Send test delivery button in the dashboard, local development with ngrok or Cloudflare Tunnel, and triggering real events. Also covers using webhook.site for request inspection.
๐Ÿ“ฆ
Delivery payload
Explains snapshot vs thin payload styles, how Kit handles different HTTP response codes (2xx, 3xx, 4xx, 5xx), the retry schedule with exponential backoff over 72 hours, how to handle duplicate deliveries with idempotency keys, and that event ordering is not guaranteed.
๐Ÿ”
Verifying signatures
Step-by-step HMAC-SHA256 verification, replay attack protection using the X-Kit-Timestamp header with a 5-minute tolerance window, CSRF exemption instructions for Rails, Django, and Laravel, and guidance on rolling the signing secret with the 24-hour overlap.
๐Ÿ“ก
Event types & objects
A reference table of all subscribable events showing what objects are included in each payload, with links to the full object schemas. Separate object reference pages cover the subscriber, tag, custom_field, and purchase shapes in detail.
๐Ÿ”ง
API reference
Full CRUD reference for the webhooks API: list, create, edit (PATCH), and delete โ€” each with request/response examples in cURL, Node.js, and Ruby. Includes the roll_secret endpoint with notes on the signing secret overlap window.
Design & product decisions
Webhooks as a standalone page, not part of Rules
Today, webhooks created by apps surface directly in the creator's Rules page with no indication of where they came from. The Fetchbase team's support ticket captured the problem exactly: a creator with 428 tags ends up with 856 system-generated webhook rules that clutter their dashboard and make their own automations impossible to manage. When apps are uninstalled, those webhooks remain โ€” owned by an app that no longer has access to clean them up.
Giving webhooks their own dedicated page solves the pollution problem, but it also sets up everything else in this prototype. You can't add filtering, performance monitoring, or editing to something buried inside another feature's UI. A standalone page is the foundation the whole experience builds on.
PRD โ€” Problem Alignment
Multi-event webhooks (one endpoint, many events)
Kit's current architecture requires a separate webhook per object instance โ€” one per tag, one per form, one per sequence. That means a developer monitoring all tag changes for a creator needs 856 webhooks, not 2. This isn't just a UX annoyance; it makes real-time sync impractical at scale and forces apps to resort to polling workarounds.
The prototype models multi-event endpoints as the default: one URL, one signing secret, a selected set of events. The Stripe analysis makes the case for why this is the right data model: with single-event endpoints, developers are forced into either endpoint sprawl (separate URL per event, N signing secrets) or an over-permissioned catch-all. Multi-event lets them do what they actually want. The Stripe research also flags this as a "build it into the data model now" decision โ€” retrofitting it later requires a breaking migration.
PRD โ€” Remove forced instance associations ยท Stripe analysis
Sparkline activity charts in the list view
Most webhook UIs show a simple "last delivery: success / fail" status badge. This misses the most dangerous failure mode: sustained silent degradation. An endpoint failing 20% of deliveries looks "Active" if the last one happened to succeed โ€” but hundreds of events have been silently dropped.
The Stripe research identifies their dual-line sparkline โ€” total deliveries overlaid with failures โ€” as specifically designed to make this impossible to miss across the whole list without clicking in. The visual gap between the two lines is the error signal. The prototype adopts the same pattern. Hovering a sparkline shows the delivery stats for that webhook.
Stripe analysis โ€” Debugging: dual-line sparklines
Snapshot vs thin payload styles
The prototype offers two payload modes. Snapshot embeds the full object state in the payload โ€” self-contained, no follow-up API call required, the right default for creators, Zapier automations, and simple scripts. Thin sends only event metadata and a resource ID; the developer fetches current state from the API at processing time.
The distinction matters for production integrations. Thin payloads are naturally idempotent โ€” fetching the API always returns current state, so retried events don't cause stale data problems. They're also smaller, which matters at high volume. The Stripe analysis recommends offering both and defaulting to snapshot for its lower barrier to entry, with thin as an explicit developer opt-in. The PRD includes payload style as a first-class configuration option in the creation flow.
PRD โ€” Payload improvements ยท Stripe analysis โ€” Payload styles
Per-webhook performance panel with 7-day charts
The current Kit experience gives developers no visibility into whether their webhooks are working. There's no delivery log, no error rate, no performance history โ€” just a status badge that says active or inactive. Developers find out webhooks are failing when their integration breaks, not before.
The Stripe research breaks down exactly what each chart type reveals: the event deliveries chart (total vs failed) shows whether failures are isolated incidents or sustained degradation. The response time chart (min/avg/max) surfaces whether a receiving server is slowing down before it starts returning errors โ€” a leading indicator of an impending failure. The three-line response time view is particularly useful for distinguishing a consistently slow handler from one that's usually fast but occasionally times out. The prototype implements both charts with a 7-day window.
Stripe analysis โ€” Destination detail: performance dashboard
Signing secret with a 24-hour rotation overlap window
HMAC signing secrets are the primary security mechanism for webhooks โ€” they let developers verify that deliveries genuinely come from Kit and haven't been tampered with. The PRD identifies signatures as a significant piece of work (ECO-2860) and a reliability priority.
Secret rotation is where most webhook implementations fall down. If rolling the secret immediately invalidates the old one, a developer must coordinate their server deployment exactly with the roll โ€” any delay drops deliveries or causes auth failures. Stripe's approach, adopted in this prototype, is a 24-hour overlap window where Kit accepts signatures from both the old and new secrets simultaneously. This allows zero-downtime rotation: roll the secret, update the environment variable, deploy at your own pace, and the old secret stays valid until the window closes. The roll endpoint (POST /v4/webhooks/{id}/roll_secret) is also available via the API so rotation can be automated.
PRD โ€” Webhook signatures ยท Stripe analysis โ€” Secret rotation
Developer documentation (what to invest in)
The PRD identifies documentation as one of the most actionable improvements: Kit's current webhook docs are sparse, hard to find, show everything as "required" even when it isn't, have no payload examples, and don't explain what actually triggers each event. Developers are expected to piece together integrations from incomplete reference material.
The prototype embeds a full documentation experience for convenience โ€” so reviewers can see the content in context โ€” but the real home for this is developers.kit.com, not in-app. The prototype's docs are modelled on the existing developer docs site style, with several patterns borrowed from Stripe. Per-page code samples in four languages update as you navigate. The quickstart leads with the return-2xx-then-process pattern, which the Stripe analysis identifies as "the single most common developer mistake" โ€” doing expensive work synchronously causes timeout โ†’ retry โ†’ timeout loops. The testing guide, idempotency guidance, and CSRF exemption instructions are drawn from patterns Stripe documents because developers consistently get tripped up on them.
PRD โ€” Documentation improvements ยท Stripe analysis โ€” Developer experience
Questions for the team
Things to explore and validate