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

FieldPurpose
schemaVersionManifest version for SDK negotiation
sessionTokenShort-lived JWT for runtime calls (internal to SDK)
transportHow the SDK connects — http, livekit, etc.
runtimeCDN base URL, input mode, renderer type
charactersAvatar, voice, STT language, agent per character
integrationReturn URL and close navigation behaviour
stateInitial world state snapshot (updates via events)
toolsExternal capabilities available to characters

How manifests are minted

EndpointAuth
POST /v1/public-sessionsOrigin allowlist + public experience flag
POST /v1/sessionsDeveloper API key

Both return the same manifest shape. Only the minting path differs.