Experience & Runtime API

웹툰, FMV 게임, 캐릭터 챗봇과 선형 영상을 하나의 entitlement 기반 API로 조회하고 실행합니다. 카탈로그에는 catalog:read, 세션과 상호작용에는 runtime:session 스코프가 필요합니다.

엔드포인트

메서드경로Runtime 토큰
GET/catalog/experiences아니오
GET/catalog/experiences/{experience_id}아니오
GET/catalog/experiences/{experience_id}/units아니오
POST/runtime/sessions응답에서 한 번 발급
GET/runtime/sessions/{session_id}필수
POST/runtime/sessions/{session_id}/revoke필수
GET/runtime/sessions/{session_id}/manifest필수
POST/runtime/sessions/{session_id}/fmv/decisions필수
POST/runtime/sessions/{session_id}/chat/turns필수

Experience 카탈로그

지역, 언어, 플랫폼과 capability는 반드시 같은 offers[] 행 안에서 해석하세요. 서로 다른 offer나 rights package의 필드를 합쳐 새로운 허용 범위를 만들면 안 됩니다. 웹툰·FMV·캐릭터 챗 권한은 각각 명시 grant이며 기본값은 거부입니다.

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"

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, platform은 필수입니다.
  • 요청 TTL은 60~3,600초이며 실제 만료는 entitlement, deal, rights 중 가장 이른 종료 시각을 넘지 않습니다.
  • session_token 원문은 생성 응답에만 나타나며 서버에는 해시만 저장됩니다.
  • 이후 호출은 API 키와 X-NU-Runtime-Token을 함께 보내야 합니다.
  • 세션 생성에는 안정적인 request ID를 권장하고, FMV 결정과 chat turn에는 반드시 보내야 합니다. revoke는 자체 멱등입니다.
  • 권리·deal·entitlement는 매 호출마다 다시 검사되어 철회가 기존 세션에도 즉시 반영됩니다.

Manifest와 콘텐츠 경로

Manifest는 release에 고정된 안전한 logical_path만 반환합니다. 원본 bucket, storage key 또는 공개되지 않은 저장소 URL은 노출하지 않습니다. 실제 session-scoped 전송 URL은 별도 delivery plane이 제공될 때 추가됩니다.

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"}'

현재 노드에서 허용된 무조건 choice만 서버가 원자적으로 적용합니다. 동일 요청 ID의 재시도는 같은 결과를 반환하며, 다른 세션이나 payload에 재사용하면 409를 반환합니다.

캐릭터 대화

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"}'
  • 현재 foundation은 text-only이며 PII와 설정된 turn/token budget을 입력·출력에서 검사합니다.
  • 원문은 audit, event, usage metadata에 기록하지 않고 ChatTurn에는 목적별 HMAC 지문만 저장합니다.
  • Provider 호출 뒤 거절된 응답은 원문 없이 실제 소비 token과 비콘텐츠 거절 사유만 계량하며 세션 예산에 포함합니다.
  • 성공 응답은 멱등 재생을 위해 암호화되어 최대 24시간 임시 보존된 뒤 만료됩니다.
  • 승인된 provider가 없거나 실패하면 임의 응답 없이 503 service_unavailable로 종료합니다.