クイックスタート
承認済みパートナーから最初のストリーム再生とイベント追跡までを10ステップで進めます。すべてSandbox(https://signal-partners.newunivers.ai/v1)で実行します。Sandboxガイドを参照してください。
最初にベースURLを設定します。組織IDとキーは承認claimとブートストラップのレスポンスから取得します:
export NSP_BASE="https://signal-partners.newunivers.ai/v1"
1. 組織の承認を受ける
プライバシーポリシーに同意してパートナー申請を送信します:
curl -X POST "$NSP_BASE/partner-applications" \
-H "Content-Type: application/json" \
-d '{
"company_name": "Acme Streaming",
"service_type": "OTT",
"contact_name": "Jin Park",
"contact_email": "dev@acme.example",
"privacy_consent": true,
"target_territories": ["KR", "JP"],
"expected_use_case": "Catalog licensing + VOD playback"
}'レスポンスのapplication_referenceとstatus_tokenを直ちに安全なシークレット保管庫へ保存してください。状態トークンは一度だけ表示され、URLやログには入れません。同じメールで24時間以内に再送すると、新規申請ではなく既存のapplication_idを返します。NUの審査中は状態をポーリングします。
statusがapprovedでclaim_availableがtrueになった後、claimを正確に一度実行してください。
export NSP_APPLICATION_REFERENCE="nsp_app_..."
export NSP_STATUS_TOKEN="nsp_ast_..."
curl -X POST "$NSP_BASE/partner-applications/status" -H "Content-Type: application/json" -d "{"application_reference":"$NSP_APPLICATION_REFERENCE","status_token":"$NSP_STATUS_TOKEN"}"
curl -X POST "$NSP_BASE/partner-applications/claim" -H "Content-Type: application/json" -d "{"application_reference":"$NSP_APPLICATION_REFERENCE","status_token":"$NSP_STATUS_TOKEN"}"
export NSP_APPROVAL_TOKEN="nsp_appr_..."2. 最初のSandboxキーを発行
承認後、/partner-applications/claimから一度取得した承認トークンをnsp_test_プレフィックスのSandboxキーへ交換します。シークレットは一度だけ表示されるため保管してください。読み取り専用のパートナーポータルでも同じキーで状態を確認できますが、キー作成・ローテーション・失効はAPIのみです。
curl -X POST "$NSP_BASE/api-keys/bootstrap" \
-H "Content-Type: application/json" \
-d "{ \"approval_token\": \"$NSP_APPROVAL_TOKEN\" }"
export NSP_ADMIN_KEY="nsp_test_xxxxxxxxxxxxxxxx"3. 最小権限でスコープを設定
ブートストラップキーで、このガイドに必要なcatalog:read、playback:token、events:writeだけを持つ狭い統合キーを作成します。api_keys:writeを持つサーバー管理キーは別に保管し、必要に応じて許可オリジンとIPを固定します。APIキーを参照してください。
curl --fail-with-body -X POST "$NSP_BASE/api-keys" \
-H "Authorization: Bearer $NSP_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"environment": "sandbox",
"scopes": ["catalog:read", "playback:token", "events:write"]
}'
export NSP_KEY="nsp_test_xxxxxxxxxxxxxxxx"4. Postmanコレクションをダウンロード
PostmanコレクションとSandbox環境ファイルをダウンロードしてPostmanへインポートし、base_urlとapi_keyを上記の値に設定します。
5. カタログタイトルを一覧
curl "$NSP_BASE/catalog/titles?territory=KR&limit=5" \
-H "Authorization: Bearer $NSP_KEY"組織はAPIキーから安全に導出されるため、X-NU-Partner-Idを別途送る必要はありません。
data[]からtitle_idを選び、GET /catalog/titles/{title_id}/episodesでエピソードを一覧してepisode_idをコピーします。カタログAPIを参照してください。
6. 再生を認可
viewer_id_hashは視聴者IDとsaltから自社で計算するSHA-256です。Productionでは64文字の小文字16進数が必要で、生のPIIは禁止です。任意の非PII preferencesでホスト型WebViewをパーソナライズできます。
サンプル値を再利用しないでください。パートナーが秘密に保管するsaltでサーバー上にてハッシュを計算します。
export NSP_VIEWER_HASH="$(printf '%s' 'stable-viewer-id:replace-with-secret-salt' | sha256sum | cut -d' ' -f1)"curl -X POST "$NSP_BASE/playback/tokens" \
-H "Authorization: Bearer $NSP_KEY" \
-H "Content-Type: application/json" \
-d '{
"title_id": "ttl_abc",
"episode_id": "ep_001",
"viewer_id_hash": "'"$NSP_VIEWER_HASH"'",
"country": "KR",
"device": "web",
"origin": "https://app.acme.example",
"preferences": { "subtitle_language": "ko", "autoplay_next": true },
"expires_in": 1800
}'Sandbox再生にはライセンス契約は不要ですが権利ゲートは適用されます。タイトルには表示可能で未失効の権利パッケージが必要で、countryを送る場合は許可地域でなければterritory_not_allowedでブロックされます。レスポンスはplayback_session_id、expires_at、ホスト型webview_url、署名付きhls/dashを含むmanifest、event_endpointとrequired_eventsを含むtrackingを返します。再生APIを参照してください。
7. 再生
同じセッションに対する2つの同等な方法から選びます:
- ホスト型WebView(推奨):
webview_urlをWebView(WKWebView/android.webkit.WebView)または<iframe>で開きます。プレイヤー統合は不要でpreferencesが自動適用されます。URLには署名トークンがあるためシークレットとして扱います。 - 自社プレイヤー: HLSプレイヤー(hls.js、AVPlayer、ExoPlayer)を
manifest.hlsへ向けます。CDNはセグメント配信前に署名とTTLを検証し、マスターファイルは公開しません。
8. イベントを送信
curl -X POST "$NSP_BASE/events" \
-H "Authorization: Bearer $NSP_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_id": "evt_acme_0001",
"event_type": "EPISODE_STARTED",
"title_id": "ttl_abc",
"episode_id": "ep_001",
"playback_session_id": "pbs_123",
"occurred_at": "2026-06-24T00:00:00Z"
}'200と{ data: { event_id, status: "validated", received_at } }を返します。event_idは組織ごとに一意で冪等であり、再送すると409 duplicate_event_idを返します。イベントAPIを参照してください。
9. 取り込みを確認
状態がvalidatedであることを確認します。エラーレスポンスのrequest_idをログへ保存し、安定したevent_idを使って再試行が二重計上ではなくduplicate_event_idを返すようにします。
10. Productionキーを要求
統合完了後はProductionチェックリストに従います。Production契約を締結してstatusをactive、production_api_enabledをtrueにし(ライセンスAPI)、nsp_live_キーを要求してallowed_origins/allowed_ipsを設定後、NSP_BASEをhttps://signal-partners.newunivers.ai/v1へ切り替えます。