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.
Events
Event spine · streaming
- 13:42:08Cabbageinvoice.issuedinfo
INV-2941 · ACME Holdings · $14,820.00
- 13:42:19Chardpayment.authorizedok
pi_2c4f1a · adyen · 240ms · 3DS
- 13:42:30Beanjournal.postedok
J-2026-04-29-04417 · sealed blake3:9f3a2c…
- 13:42:41Celeryrecon.draftedinfo
drift −$0.18 · confidence 0.98
- 13:42:52Greenhousetransfer.signedok
cold/01 → ops/03 · 2 of 3 · USDC
- 13:43:03Sageofac.hitreview
case 7e2c · adverse media · low
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 where you can inspect, retry, or drop. Every attempt is ed25519-signed and consumers ack by cursor — replaying 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.
tool vine.events.subscribe Subscribe to topic(s) under scope tool vine.events.replay Replay from cursor tool vine.events.ack Acknowledge cursor advance resource topics://vine Live topic registry
GET /vine/v1/events Cursor-paginated event stream POST /vine/v1/subscriptions Create webhook subscription POST /vine/v1/replays Replay from cursor GET /vine/v1/topics List topics + retention GET /vine/v1/dlq Dead-letter queue
Authorization: Bearer arsenal:act_vn… X-Garden-Capability: vine.events.subscribe · topics=cabbage.* chard.* X-Garden-Cursor: 92010 X-Garden-Signature: ed25519=…
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























