---
title: "OpenVibe.Events: durable events, signed webhooks and replay"
canonical: "https://openvibe.events/"
updated: null
---

# OpenVibe.Events: durable events, signed webhooks and replay

HTML: [OpenVibe.Events: durable events, signed webhooks and replay](https://openvibe.events/)

# Events your services can count on.

The event backbone of the OpenVibe network. Publish an event once and every subscriber gets it: stored durably, signed, retried with backoff, and replayable after a failure. 35 OpenVibe services published to it this week.

[Read the guide](https://github.com/OpenVibers/OpenVibe.Events#readme) [See an example](#examples)

Alpha. The API is at https://openvibe.events; developer apps sign in through OpenVibe.Network.

1. Search****286,167**
2. Sources****208,207**
3. OpenVibe AI****138,669**
4. Deals****125,506**

and 31 more services

**The bus** 1,042,789 events this week

**216** subscriptions receive them, signed and retried

This week, from the bus's own counts.

Part of [OpenVibe Services](https://openvibe.services/): the building blocks every OpenVibe product runs on, with one console, one account and one SDK.

- **191,050**events in the last 24 hours
- **1,042,789**events this week
- **36**services published this week
- **129**event types this week
- **216**active subscriptions from 50 consumers
- **1,908,443**deliveries made in the last 30 days

No deliveries are waiting in the dead-letter queue.

## Public events this week

[Set up a webhook](#howto)

The public event types anyone may read, newest arrival first: when each last arrived, who published it and what it means. Subscribe to a pattern such as `live.stream.*` to get them as signed webhooks; any reader can also pull them with a cursor.

- ### OpenVibe.Host: release published

   

  13 Nov 2026, 05:27 UTC · from [OpenVibe.Host](https://openvibe.host) · 6,036 this week

   

  `host.release.published`
- ### OpenVibe.Services: app deprecated

   

  13 Nov 2026, 05:22 UTC · from [OpenVibe.Services](https://openvibe.services) · 7 this week

   

  `services.app.deprecated`
- ### A developer app was published

   

  13 Nov 2026, 05:22 UTC · from [OpenVibe.Services](https://openvibe.services) · 7 this week

   

  `services.app.published`
- ### OpenVibe.Services: app revoked

   

  13 Nov 2026, 05:22 UTC · from [OpenVibe.Services](https://openvibe.services) · 7 this week

   

  `services.app.revoked`
- ### A message in a public chat room

   

  13 Nov 2026, 05:05 UTC · from [OpenVibe.Chat](https://openvibe.chat) · 580 this week

   

  `chat.message.created`
- ### A deal changed on OpenVibe.Deals

   

  13 Nov 2026, 04:58 UTC · from [OpenVibe.Deals](https://openvibe.deals) · 21,251 this week

   

  `deals.offer.updated`
- ### A deal was added on OpenVibe.Deals

   

  13 Nov 2026, 04:58 UTC · from [OpenVibe.Deals](https://openvibe.deals) · 8,499 this week

   

  `deals.offer.created`
- ### A paste was shared on OpenVibe.Community

   

  13 Nov 2026, 04:28 UTC · from [OpenVibe.Community](https://openvibe.community) · 96 this week

   

  `community.paste.created`
- ### A stream ended on OpenVibe.Live

   

  13 Nov 2026, 03:24 UTC · from [OpenVibe.Live](https://openvibe.live) · 109 this week

   

  `live.stream.ended`
- ### A market observation on OpenVibe.Trade

   

  13 Nov 2026, 03:04 UTC · from [OpenVibe.Trade](https://openvibe.trade) · 68,355 this week

   

  `trade.observation.created`
- ### A channel went live on OpenVibe.Live

   

  13 Nov 2026, 02:50 UTC · from [OpenVibe.Live](https://openvibe.live) · 126 this week

   

  `live.stream.started`
- ### A coupon was added on OpenVibe.Coupons

   

  12 Nov 2026, 21:33 UTC · from [OpenVibe.Coupons](https://openvibe.coupons) · 133 this week

   

  `coupons.coupon.created`
- ### OpenVibe.Community: paste deleted

   

  12 Nov 2026, 17:41 UTC · from [OpenVibe.Community](https://openvibe.community) · 8 this week

   

  `community.paste.deleted`
- ### OpenVibe.Community: comment created

   

  12 Nov 2026, 17:02 UTC · from [OpenVibe.Community](https://openvibe.community) · 4 this week

   

  `community.comment.created`
- ### OpenVibe.Chat: message edited

   

  12 Nov 2026, 02:49 UTC · from [OpenVibe.Chat](https://openvibe.chat) · 2 this week

   

  `chat.message.edited`
- ### OpenVibe.Chat: room message created

   

  10 Nov 2026, 12:18 UTC · from [OpenVibe.Chat](https://openvibe.chat) · 6 this week

   

  `chat.room.message.created`
- ### OpenVibe.Video: video published

   

  6 Nov 2026, 23:43 UTC · from [OpenVibe.Video](https://openvibe.video) · 1 this week

   

  `mediahub.video.published`

## Who published this week

16 items

Events by the service that published them over the last seven days. Every one was stored before any subscriber saw it.

- [OpenVibe.Search](https://search.openvibe.network)286,167
- OpenVibe.Sources208,207
- [OpenVibe AI](https://ai.openvibe.services)138,669
- [OpenVibe.Deals](https://openvibe.deals)125,506
- tours104,279
- [OpenVibe.Trade](https://openvibe.trade)68,355
- [OpenVibe.Media](https://openvibe.media)36,531
- [OpenVibe.Reviews](https://openvibe.reviews)22,059
- [OpenVibe.Work](https://openvibe.work)12,920
- [OpenVibe.Help](https://openvibe.help)12,777
- [OpenVibe.Host](https://openvibe.host)6,133
- [OpenVibe.Community](https://openvibe.community)5,743
- [OpenVibe.Live](https://openvibe.live)4,693
- [OpenVibe.Bot](https://openvibe.bot)3,143
- [OpenVibe.Network](https://openvibe.network)2,080
- [OpenVibe.News](https://openvibe.news)1,183

And 20 more.

## What you get

**Publish once** One event or up to a hundred at a time, stored atomically and numbered in order. Sending the same event id twice never stores it twice.

**Signed webhooks** Subscribe with a topic pattern such as media.vod.\*. Every delivery is HMAC-signed with its timestamp and retried with backoff.

**Dead letters and replay** Deliveries that keep failing wait in a dead-letter queue. Replay them, or catch a new subscription up from a point in its history.

**Pull with a cursor** Read events in order with an opaque cursor when you would rather pull than receive webhooks.

**Realtime for browsers** Server-sent events, authorized per topic with a one-use ticket from OpenVibe.Network, and resumable after a reconnect.

**Developer apps** An app publishes under its own project's names and keeps sandbox and production apart: sandbox events never reach production.

Publish, subscribe, pull curl examples

## Publish, subscribe, pull

With an app token from OpenVibe.Network (client credentials, audience openvibe.events).

Publish

~~~~
curl -X POST https://openvibe.events/api/v1/events \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{ "event_id": "evt_01JAB2C3D4E5F6G7H8J9K0MNPQ", "event_type": "app.<project_key>.order.created",
        "version": 1, "source": "app-<app id>", "actor": { "type": "app", "id": "app_<ULID>" },
        "timestamp": "2026-10-07T12:00:00Z", "subject": { "type": "order", "id": "42" },
        "payload": { "total": 3 } }'
~~~~

Subscribe

~~~~
curl -X POST https://openvibe.events/api/v1/subscriptions \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{ "topic_pattern": "app.<project_key>.*", "endpoint": "https://hooks.example.com/openvibe" }'
# → { "id": "sub_…", "secret": "whsec_…" }  the secret is shown once
~~~~

Pull

~~~~
curl "https://openvibe.events/api/v1/events?topic=app.<project_key>.*&limit=100" -H "Authorization: Bearer $TOKEN"
# then the same with &after=<next_cursor> from the previous page
~~~~

## Receive a webhook safely

4 items

1. **Keep the secret**The subscription's secret is shown once, when you create it or rotate it.
2. **Check the signature**Verify X-OpenVibe-Signature-V2 over the timestamp and the raw body, and refuse anything older than five minutes.
3. **Answer quickly**Reply 2xx once the event is safely stored; anything else is retried, then dead-lettered.
4. **Expect repeats**A retry can bring the same event again: keep its event id and handle it once.

## Questions

7 questions

### What is OpenVibe.Events?

The event bus of the OpenVibe network. A service publishes an event once; Events stores it, then delivers it to every subscriber as a signed webhook, keeps it for pulls with a cursor, and streams public ones to browsers.

### Who can publish?

OpenVibe services with the events.event.publish capability, and developer apps under their own project's names (app.<project\_key>.\*) with an app token from OpenVibe.Network.

### How do I know a webhook really came from Events?

Every delivery is signed over its timestamp and raw body (X-OpenVibe-Signature-V2). Check it with verifyDeliveryV2 from openvibe-sdk/events and refuse anything more than five minutes old.

### What if my endpoint is down?

The delivery is retried with backoff. One that keeps failing waits in the dead-letter queue, where it can be replayed, and a new subscription can catch up from a point in history.

### How long are events kept?

Thirty days in the hot store for delivery, pulls and replay, then a year in the replay tier for pulls and stream resumes.

### Can a browser listen?

Yes. Server-sent events at /realtime/stream, authorized per topic with a one-use ticket from OpenVibe.Network, and resumable after a reconnect.

### Are sandbox and production separate?

Yes. A developer app's sandbox events never reach production apps or subscriptions, and are pruned after seven days.
