playback-svc

Abrir una sesión de playback (PlaybackIntent → SessionDescriptor)

El Planner resuelve el intent en un PlaybackPlan composicional (mode derivado, no lo manda el cliente) y la entrega; la sesión y su capability quedan ligadas al actor. Sin MediaIndex del asset: PLAYBACK_NO_CAPABILITIES. Acceso: Bearer de identity con policy `resource:asset:play`.

POST
/sessions

El Planner resuelve el intent en un PlaybackPlan composicional (mode derivado, no lo manda el cliente) y la entrega; la sesión y su capability quedan ligadas al actor. Sin MediaIndex del asset: PLAYBACK_NO_CAPABILITIES.

Acceso: Bearer de identity con policy resource:asset:play.

Authorization

bearerAuth
AuthorizationBearer <token>

Access token de identity-svc (JWT EdDSA, caducidad corta). Se verifica en local y después contra la sesión viva (revocation-aware).

In: header

Request Body

application/json

Intent de reproducción: asset y capabilities del cliente (video, audio y contenedores obligatorios), con preferencias opcionales. Las entradas de capability viajan sin cerrar su vocabulario (forward-compat).

TypeScript Definitions

Use the request body type in TypeScript.

Intent de reproducción: asset y capabilities del cliente (video, audio y contenedores obligatorios), con preferencias opcionales. Las entradas de capability viajan sin cerrar su vocabulario (forward-compat).

intent*

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X POST "https://example.com/sessions" \  -H "Content-Type: application/json" \  -d '{    "intent": {      "assetId": "string",      "client": {        "audio": [          null        ],        "containers": [          null        ],        "video": [          null        ]      }    }  }'
{  "descriptor": {    "actor": {      "roles": [        "string"      ],      "service": "string",      "sessionId": "string",      "userId": "string"    },    "assetId": "string",    "createdAt": "string",    "delivery": {      "certHash": "string",      "endpoint": "string",      "packaging": {        "capability": "string",        "codecs": "string",        "engine": "zig",        "packagingId": "string",        "segments": 1,        "targetDurationS": 1      },      "tcpEndpoint": "string",      "tokenTtlMs": 0,      "transport": "string"    },    "expiresAt": "string",    "plan": {      "audio": {        "action": "copy",        "channels": "mono",        "codec": "aac"      },      "container": {        "action": "copy",        "input": "matroska",        "output": "matroska"      },      "delivery": {        "tokenTtlMs": 0,        "transport": "string",        "url": "string"      },      "estimatedCost": {        "score": 0,        "serverSideCompute": true,        "tier": "free"      },      "mode": "direct",      "reasons": [        {          "kind": "container-direct",          "message": "string"        }      ],      "source": {        "kind": "string",        "score": 0      },      "subtitles": {        "action": "none",        "format": "srt"      },      "video": {        "action": "copy",        "codec": "h264",        "filters": [          {            "kind": "scale",            "params": [              "string"            ]          }        ]      }    },    "sessionId": "string"  }}