Webhooks
Webhook tester and signed-event inspector
OpenVibe.Events delivers each event as POST with the body {"event": <envelope>, "seq": <n>} and these headers, signed with your subscription secret:
X-OpenVibe-Timestamp: <unix seconds>, the time this attempt was sent. Every retry gets a new one.
X-OpenVibe-Signature-V2: t=<that timestamp>,v2=<hex HMAC-SHA256 of "<t>.<raw body>"> (v2).
Verify against the raw bytes , before parsing, with a constant-time comparison. v2 covers the time as well as the body, so a captured delivery cannot be replayed later: refuse it when t is more than 300 seconds from your clock, in either direction, and reject a delivery whose v2 header is missing, does not verify or is stale. The v1 header (X-OpenVibe-Signature, an HMAC of the body alone, which verifies forever) was retired on 2026-09-28: Events no longer sends it. parseDelivery(raw, headers, secret, { requireV2: true }) in openvibe-sdk/events does all of this; verifyDeliveryV2() checks v2 and the window. The tester below checks v2 the same way, says whether the timestamp is inside the window now, and decides as a receiver that requires v2 does.
Verify a delivery
Generate a sample delivery
Event type ai.run.cached ai.run.failed ai.run.queued ai.run.succeeded billing.cashout.denied billing.cashout.paid billing.cashout.requested billing.entitlement.changed billing.receipt.external billing.staff.action billing.subscription.canceled billing.transaction.reversed billing.transaction.settled blog.index_document.deleted blog.index_document.upserted blog.moderation.action blog.post.created blog.post.deleted blog.post.published blog.post.unpublished blog.post.updated blog.schedule.failed bot.command.refused bot.estop.cleared bot.estop.set bot.robot.offline bot.robot.online chat.dm.created chat.message.created chat.message.deleted chat.moderation.action chat.room.message.created chat.room.message.deleted community.comment.created community.index_document.deleted community.index_document.upserted community.moderation.action community.paste.created community.paste.deleted community.paste.updated coupons.confidence.changed coupons.coupon.created coupons.coupon.disabled coupons.coupon.expired coupons.coupon.updated coupons.index_document.deleted coupons.index_document.upserted coupons.moderation.action coupons.report.created deals.index_document.deleted deals.index_document.upserted deals.moderation.action deals.offer.created deals.offer.expired deals.offer.updated deals.vote.changed deals.watch.matched events.usage.recorded games.blueprint.unlocked games.mod.disabled games.mod.enabled games.mod.grants_changed games.mod.installed games.mod.revoked games.moderation.action games.player.joined games.player.left games.skill.leveled games.world.saved host.deploy.activated host.deploy.created host.deploy.failed host.domain.verified host.release.published live.index_document.deleted live.index_document.upserted live.moderation.action live.release.deployed live.stream.ended live.stream.started media.clip.failed media.clip.ready media.index_document.deleted media.index_document.upserted media.job.cancelled media.job.failed media.job.proposed media.job.queued media.job.retrying media.job.started media.job.succeeded media.moderation.action media.object.deleted media.object.uploaded media.object.visibility_changed media.provider.capacity_warning media.provider.health_degraded media.replica.draining media.replica.evicted media.replica.ready media.replica.requested media.storage.alert media.storage.recovered media.vod.failed media.vod.ready network.account.deleted network.account.export_requested network.app.created network.app.revoked network.block.changed network.confirmation.changed network.credential.revoked network.credential.rotated network.follow.created network.follow.deleted network.grant.changed network.mod.grants_changed network.module.updated network.node.revoked network.notification.created network.principal_grant.changed network.subject.merged network.user.token_valid_after network.user.updated news.cluster.updated news.index_document.deleted news.index_document.upserted news.moderation.action news.source.failed news.source.ingested news.story.created news.story.flagged news.story.published news.story.retracted news.story.unpublished news.story.updated openre.key.rotated openre.output.failed openre.output.healthy openre.recording.requested openre.session.ended openre.session.failed openre.session.started reviews.entity.merged reviews.entity.split reviews.index_document.deleted reviews.index_document.upserted reviews.moderation.action reviews.signal.added reviews.signal.removed reviews.summary.published reviews.summary.unpublished reviews.summary.updated run.job.cancelled run.job.expired run.job.failed run.job.queued run.job.started run.job.succeeded search.document.indexed search.document.removed services.app.deprecated services.app.published services.app.revoked services.moderation.action sources.fetch.failed sources.index_document.deleted sources.index_document.upserted sources.item.created sources.item.removed sources.item.updated space.moderation.action space.post.created space.thread.created tips.goal.updated tips.interaction.cancelled tips.interaction.erased tips.interaction.failed tips.interaction.moderated tips.interaction.ready tips.overlay.delivered tips.overlay.failed tools.job.created tools.job.failed tools.job.started tools.job.succeeded tools.moderation.action tools.usage.recorded trade.alert.triggered trade.index_document.deleted trade.index_document.upserted trade.moderation.action trade.observation.created trade.source.recovered trade.source.stale vip.membership.changed vip.plan.published watch.check.failed watch.observation.recorded watch.watch.created watch.watch.paused watch.watch.removed watch.watch.triggered watch.watch.updated wiki.index_document.deleted wiki.index_document.upserted wiki.moderation.action wiki.page.deleted wiki.page.published wiki.page.unpublished wiki.page.updated wiki.revision.created wiki.space.updated wiki.watch.triggered
Secret to sign with
Generate