Session Manifests
The per-launch contract between the API and the SDK.
What is a Session Manifest?
A Session Manifest is a JSON document returned when a session is minted. It tells the SDK everything needed to run this launch:
- Which experience and characters are active
- How to connect (transport)
- Where to load avatar assets (CDN)
- Integration rules (return URL, close button)
- Session lifetime and authorisation token
Do I need to read it?
Usually no. The SDK consumes the manifest automatically. Inspect it for debugging, advanced integrations, or server-side minting.
Example
manifest.json
{
"schemaVersion": 1,
"sessionId": "sess_01…",
"experienceId": "exp_01DEMO1SPANISHCAFE",
"expiresAt": "2026-06-16T12:30:00Z",
"sessionToken": "eyJ…",
"experience": {
"title": "Spanish Tutor Sofia",
"slug": "spanish-tutor-sofia",
"mode": "conversation"
},
"transport": { "type": "http", "config": { "apiBaseUrl": "https://api.liforma.ai" } },
"runtime": {
"cdnBaseUrl": "https://cdn.liforma.ai",
"input": "browserStt",
"renderer": "morph2d"
},
"characters": [{
"characterId": "char_…",
"displayName": "Sofia",
"avatarId": "ava_c4e71fe5",
"voiceId": "es-ES-ElviraNeural",
"sttLang": "es-ES",
"agentId": "agt_spanish_tutor"
}],
"activeCharacterId": "char_…"
} Key fields
| Field | Purpose |
|---|---|
schemaVersion | Manifest version for SDK negotiation |
sessionToken | Short-lived JWT for runtime calls (internal to SDK) |
transport | How the SDK connects — http, livekit, etc. |
runtime | CDN base URL, input mode, renderer type |
characters | Avatar, voice, STT language, agent per character |
integration | Return URL and close navigation behaviour |
state | Initial world state snapshot (updates via events) |
tools | External capabilities available to characters |
How manifests are minted
| Endpoint | Auth |
|---|---|
POST /v1/public-sessions | Origin allowlist + public experience flag |
POST /v1/sessions | Developer API key |
Both return the same manifest shape. Only the minting path differs.