Webhooks that arrive — once.
Stripe webhooks are at-least-once delivery, opaque ordering, and no replay. Vine is signed, ordered, cursor-paginated, with 90-day deterministic replay — the kind of event spine an auditor and an agent can both rely on.
Settings · Webhooks
Event spine
Signed, at-least-once event delivery across every Garden service with 90-day cursor replay. Ed25519-attested, retried with backoff, dead-lettered on exhaustion.
Events today
Delivery success
Retrying
Cursor
Streaming events
SIGNED · AT-LEAST-ONCE · 90D REPLAY| Event type | Source service | Timestamp | Delivery | Cursor |
|---|---|---|---|---|
| invoice.paid | Cabbage | 13:42:52 | Delivered | 92,014 |
| payment.authorized | Chard | 13:42:41 | Delivered | 92,013 |
| journal.posted | Bean | 13:42:30 | Delivered | 92,012 |
| ofac.hit | Sage | 13:42:19 | Retrying | 92,011 |
| transfer.signed | Greenhouse | 13:42:08 | Delivered | 92,010 |
| sweep.scheduled | Kale | 13:41:57 | Delivered | 92,009 |
| payout.failed | Chard | 13:41:46 | Failed | 92,008 |
| balance.synced | Branches | 13:41:35 | Delivered | 92,007 |
At-least-once delivery, with the receipts.
Every outbound webhook gets exponential-backoff retries, up to 12 attempts. Failures hold in a dead-letter queue for 90 days. There you inspect, retry, or drop. Every attempt is ed25519-signed. Consumers ack by cursor — replay from any point is two API calls.
Delivery · evt_91a8c4f · invoice.issued · 4 attempts → ok
| # | When | Status | Latency | Body | Outcome |
|---|---|---|---|---|---|
| #1 | 14:02:11.184 | 503 | 240 ms | service unavailable | fail |
| #2 | 14:02:12.402 | timeout | 30 s | no response · subscriber slow | fail |
| #3 | 14:02:44.118 | 500 | 1.2 s | internal · stack trace truncated | fail |
| #4 | 14:04:18.402 | 200 | 118 ms | ok · ack received | delivered |
- evt_4f12behttps://helsinki.example/hooks412 precondition failed · cursor stale5 attempts—
- evt_7c01a8https://forerun.example/gardentls handshake failed · expired cert7 attempts—
- evt_2c0911https://pinnacle.example/hk/grdnsubscriber endpoint moved · 301 not followed3 attemptsin 4m 12s
An event bus you can prove things about.
Webhooks aren't enough. You need ordering, signatures, and replay.
| Capability | Stripe Webhooks | Segment | Snowplow | Vine |
|---|---|---|---|---|
| Signed events | secret-based | — | — | ✓ ed25519 |
| Strictly-ordered per tenant | — | — | — | ✓ cursor |
| Deterministic replay | — | — | — | ✓ 90 days |
| At-least-once delivery | ✓ | ✓ | ✓ | ✓ |
| Posts ledger entries on delivery | — | — | — | ✓ Bean |
| Agent-readable schema | OpenAPI | — | — | ✓ MCP descriptor |
| Schema evolution policy | additive | — | — | ✓ versioned |
| Dead-letter visible | — | — | — | ✓ inspectable |
Agents that subscribe, not poll.
An agent connects to Vine, subscribes to topics under a capability scope, and receives ordered events as they happen. Replay from any cursor is two API calls.
What Vine carries.
- 01Signed events (ed25519) per tenant with ordered cursor
- 02At-least-once delivery with idempotent consumer pattern
- 0390-day deterministic replay from any cursor
- 04Topic-level subscriptions with capability-scoped access
- 05MCP-fetchable schema for every event
- 06Dead-letter queue with retry policy
- 07Versioned schemas with backwards-compat guarantees
- 08Direct streaming over Server-Sent Events or webhooks




