Experience & Runtime API

Consulte y ejecute webtoons, juegos FMV, chatbots de personajes y vídeo lineal con una API basada en entitlements. El catálogo requiere catalog:read; las sesiones e interacciones, runtime:session.

Endpoints

MétodoRutaToken de Runtime
GET/catalog/experiencesNo
GET/catalog/experiences/{experience_id}No
GET/catalog/experiences/{experience_id}/unitsNo
POST/runtime/sessionsSe emite una vez en la respuesta
GET/runtime/sessions/{session_id}Obligatorio
POST/runtime/sessions/{session_id}/revokeObligatorio
GET/runtime/sessions/{session_id}/manifestObligatorio
POST/runtime/sessions/{session_id}/fmv/decisionsObligatorio
POST/runtime/sessions/{session_id}/chat/turnsObligatorio

Catálogo de Experience

Interprete territorio, idioma, plataforma y capabilities dentro de la misma fila offers[]. No combine campos de offers o paquetes de derechos distintos. Los derechos de webtoon, FMV y chat son concesiones explícitas y se deniegan por defecto.

curl "https://signal-partners.newunivers.ai/v1/catalog/experiences?experience_type=webtoon&territory=KR&language=ko&platform=web" \
  -H "Authorization: Bearer nsp_live_xxx" \
  -H "X-NU-Partner-Id: org_acme"

Sesiones de Runtime

curl -X POST "https://signal-partners.newunivers.ai/v1/runtime/sessions" \
  -H "Authorization: Bearer nsp_live_xxx" \
  -H "X-NU-Partner-Id: org_acme" \
  -H "X-NU-Request-Id: req_runtime_0001" \
  -H "Content-Type: application/json" \
  -d '{
    "experience_id": "exp_webtoon_01",
    "country": "KR",
    "language": "ko",
    "platform": "web",
    "viewer_id_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "expires_in": 1800
      }'
  • country, language y platform son obligatorios.
  • El TTL solicitado es de 60 a 3.600 segundos. La caducidad real no supera el final más próximo del entitlement, deal o derecho.
  • El valor original de session_token solo aparece en la respuesta de creación; el servidor guarda únicamente su hash.
  • Las llamadas posteriores deben enviar la clave de API y X-NU-Runtime-Token.
  • Use un request ID estable al crear sesiones; es obligatorio en decisiones FMV y turnos de chat. La revocación es idempotente.
  • Los derechos, deals y entitlements se comprueban en cada llamada, por lo que una revocación afecta de inmediato a las sesiones existentes.

Manifest y rutas de contenido

El manifest solo devuelve valores logical_path seguros y ligados a la release. No expone buckets de origen, claves de almacenamiento ni URL privadas. Las URL de entrega por sesión se añadirán cuando exista un delivery plane separado.

Decisiones FMV

curl -X POST "https://signal-partners.newunivers.ai/v1/runtime/sessions/run_01/fmv/decisions" \
  -H "Authorization: Bearer nsp_live_xxx" \
  -H "X-NU-Partner-Id: org_acme" \
  -H "X-NU-Runtime-Token: nsp_rt_xxx" \
  -H "X-NU-Request-Id: req_fmv_0001" \
  -H "Content-Type: application/json" \
      -d '{"choice_id":"choice_left"}'

El servidor aplica de forma atómica solo choices incondicionales permitidas en el nodo actual. Reintentar el mismo ID devuelve el mismo resultado; reutilizarlo con otra sesión o payload devuelve 409.

Chat de personajes

curl -X POST "https://signal-partners.newunivers.ai/v1/runtime/sessions/run_01/chat/turns" \
  -H "Authorization: Bearer nsp_live_xxx" \
  -H "X-NU-Partner-Id: org_acme" \
  -H "X-NU-Runtime-Token: nsp_rt_xxx" \
  -H "X-NU-Request-Id: req_chat_0001" \
  -H "Content-Type: application/json" \
  -d '{"message":"Hello"}'
  • La base actual es solo texto y comprueba PII y los presupuestos de turnos/tokens configurados tanto en entrada como en salida.
  • El texto original no se escribe en metadatos de audit, event ni usage. ChatTurn guarda solo una huella HMAC específica de la finalidad.
  • Una respuesta rechazada tras llamar al proveedor se mide solo con los tokens consumidos y un motivo no textual; cuenta para el presupuesto de la sesión.
  • Las respuestas correctas se cifran y conservan temporalmente hasta 24 horas para su reproducción idempotente; después caducan.
  • Si no hay proveedor aprobado o falla, la solicitud termina con 503 service_unavailable sin inventar una respuesta.