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

Build

Live activity

Show what players are doing in your game under their name: mode, map, party size, images and buttons.

The Voznest app for Windows runs a small local endpoint. Your game (or any app) sends what the player is doing; it appears on their profile, in member lists and to their friends, with your project's name and icon — never a name the game makes up. Players can turn activity sharing off at any time.

Endpoint

RequestBody / queryNotes
GET /v1/ping—Is Voznest running? Answers { ok, app, version, protocol }
POST /v1/activity{ clientId, pid?, activity }Set or replace your activity. activity: null clears it
DELETE /v1/activity?clientId=…Clear it
  • Host 127.0.0.1, first free port of 47390–47394.
  • clientId is your project id from the developer portal. Unknown ids are ignored (the player keeps their detected game).
  • With pid, the activity ends when that process exits. Without it, it ends 2 minutes after your last update.
  • Send Content-Type: application/json. Requests from web pages are refused.
bash
curl -X POST http://127.0.0.1:47390/v1/activity \  -H "Content-Type: application/json" \  -d '{    "clientId": "<your project id>",    "pid": 1234,    "activity": {      "type": "playing",      "details": "Ranked · Map: Harbor",      "state": "In a group",      "party": { "size": [2, 5] },      "startedAt": 1767225600000,      "assets": { "largeImage": "https://cdn.example.com/harbor.png", "largeText": "Harbor",                  "smallImage": "https://cdn.example.com/rank-gold.png", "smallText": "Gold III" },      "buttons": [{ "label": "Watch the match", "url": "https://example.com/live/42" }]    }  }'

Activity fields

FieldTypeLimits
typeplaying | listening | watching | streaming | competingDefault playing
detailsstring≤128 — first line (mode, track…)
statestring≤128 — second line
party.size[current, max]Shown as (2 of 5)
startedAt / endsAtepoch millisecondsElapsed or remaining timer
assets.largeImage / smallImagehttps URLServed through Voznest's image proxy; players never contact your host
assets.largeText / smallTextstring≤128 — hover text
buttons[{ label, url }]Up to 2; label ≤32; https links only

Example (C#)

csharp
using System.Net.Http.Json;var http = new HttpClient();async Task SetPresence(object? activity){    // Try the first ports in order: another copy of Voznest may hold 47390.    foreach (var port in new[] { 47390, 47391, 47392, 47393, 47394 })    {        try        {            var res = await http.PostAsJsonAsync($"http://127.0.0.1:{port}/v1/activity",                new { clientId = "<your project id>", pid = Environment.ProcessId, activity });            if (res.IsSuccessStatusCode) return;        }        catch (HttpRequestException) { /* Voznest isn't running on this port */ }    }}await SetPresence(new { details = "Main menu", startedAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() });
Live activity wins over games Voznest detects by itself. Update at most every few seconds; the app sends changes on, not every call.

Bots

Agents set their own status over the gateway with presence:activity ({ type, name, details?, state? }).

PreviousActivities (Embedded Apps)Next Messages