Session Launch
The per-launch public contract between the API and the SDK.
What is a Session Launch?
Both mint endpoints return a SessionLaunchResponse — not a full runtime configuration document:
session— minimal public facts (id, experience, revision, expiry, locale, mode, capabilities)launch— asymmetrically signed opaque bootstrap for@liforma/client/player.liforma.ai
Do I need to parse launch?
No. The SDK and player consume launch automatically. Do not parse
it — its structure is unsupported and may change. Opaque means contract boundary, not a promise
that page JavaScript cannot inspect the bytes.
Example response
session-launch.json
{
"session": {
"id": "sess_…",
"experienceId": "exp_…",
"experienceRevisionId": "…",
"expiresAt": "2026-08-11T12:30:00.000Z",
"locale": "en-GB",
"secondaryLocale": "fr-FR",
"mode": "conversation",
"status": "active",
"capabilities": {
"speech": { "input": true, "output": true, "externalAudio": false },
"conversation": { "managed": true },
"avatar": { "enabled": true },
"tools": { "enabled": false }
}
},
"launch": "eyJ…"
} Public session fields
| Field | Purpose |
|---|---|
id | Session id (sess_…) |
experienceId | Experience being run |
experienceRevisionId | Published revision this session runs |
expiresAt | ISO 8601 expiry |
locale | Resolved primary / user language (BCP 47) |
secondaryLocale | Paired / learning language when dual; omitted for plain sessions |
mode | conversation or presenter |
capabilities | Avatar, speech I/O, tools, external audio flags |
Transport, pipeline, renderer, characters, and credentials live only inside opaque launch (private runtime bootstrap). Player chrome
(startButton, returnUrl, …) is configured via SDK attach, not mint.
How launches are minted
| Endpoint | Auth |
|---|---|
POST /v1/browser-sessions | Origin allowlist + browser embeds enabled |
POST /v1/sessions | Developer API key |
Both return 201 with the same SessionLaunchResponse shape and Cache-Control: no-store, private.