Voznest Forge

Workspace

WorkspaceProjects

Development

DocsAPI ReferenceSDKsEmbed StudioChangelog
  1. Forge
  2. /Docs

Start here

Getting StartedQuickstartPlatform ConceptsEnvironments

Build

ProjectsIdentityAgentsGatewayCapabilitiesPermissions ReferenceInstallationsLive activity

Commands & interactions

CommandsContext-menu CommandsInteractionsComponentsModals (Forms)Activities (Embedded Apps)

Acting in hubs

MessagesEmbedsEmbeds v2 (Blocks)Embeds v3Incoming WebhooksHub Management APIEvent StreamDelivery

Sign in with Voznest

AccessOpenID Connect

API

APIAuthenticationErrorsRate LimitsSecurity

Publish & operate

App Market & ListingTemplates & SandboxObservability & Team Tools

Tools

SDKsExamplesFAQ & TroubleshootingReference

Commands & interactions

Activities (Embedded Apps)

Put your own web app inside voice rooms — games, whiteboards, watch parties.

An activity is a web page you host that people open together inside a voice room. Anyone who is a speaker in the room can start it from Activities; everyone in the room sees the same activity until it's ended. Only projects installed in that hub, with an activity URL, are offered.

Setting it up

  • Project Settings → Listing → Activity URL (must be https://). Or PATCH /applications/:id with activityUrl.
  • Your page must allow being framed by https://voznest.com: send Content-Security-Policy: frame-ancestors https://voznest.com and no X-Frame-Options: DENY.

The sandbox

The page runs in an iframe with sandbox="allow-scripts allow-same-origin allow-forms allow-pointer-lock allow-popups" (same-origin means your origin — never Voznest's) and allow="autoplay; fullscreen; gamepad". It receives no cookies, tokens or account data from Voznest; the referrer is not sent.

Talking to Voznest

html
<!-- Your activity page (served from your own https:// domain) --><script>  // 1. Tell Voznest you're ready.  window.parent.postMessage({ type: "quorvyn:ready" }, "https://voznest.com");  // 2. Receive a minimal context: who is playing and which room they're in.  window.addEventListener("message", (e) => {    if (e.origin !== "https://voznest.com" || e.data?.type !== "quorvyn:context") return;    const { instanceId, user } = e.data;   // instanceId = the voice room; user = { id, displayName } or null    joinGame(instanceId, user);            // e.g. open a websocket to YOUR backend for this room  });</script>
MessageDirectionPayload
quorvyn:readyyour page → Voznest—
quorvyn:contextVoznest → your pageinstanceId (the voice room — same for everyone in it), user { id, displayName }

Sync state between participants through your own backend, keyed by instanceId. Treat user as a hint for display — if you need a verified identity, add "Sign in with Voznest" (Access) inside the activity.

Always check event.origin before trusting a message, and only post to https://voznest.com.
PreviousModals (Forms)Next Live activity