라이선스 API
특정 지역/언어에서 타이틀을 배포할 권리에 대한 가격을 산정하고 요청합니다. 견적(quote)은 구속력이 없는 가격 추정치이며(license:read),요청(request)은 NU가 검토하고 체결하는 실제 계약을 개시합니다 (license:write).
엔드포인트
| 메서드 | 경로 | 용도 |
|---|---|---|
| POST | /licenses/quote | 가격 추정 + 권리 확인(구속력 없음) |
| POST | /licenses/requests | 라이선스 요청(계약) 생성 |
| GET | /licenses | 보유한 계약 목록 조회(상태로 필터링) |
| GET | /licenses/{license_id} | 계약 상세 |
비즈니스 모델
| business_model | 설명 |
|---|---|
MG_RS | 최소 보장금 + 수익 배분(MG는 RS에서 회수) |
PURE_RS | 순수 수익 배분, 최소 보장금 없음 |
FLAT_LICENSE | 기간 단위 정액 라이선스 비용 |
API_FEE_RS | API/플랫폼 수수료 + 수익 배분 |
DATA_LICENSE | 데이터/지표 라이선싱 |
UNDECIDED | 아직 선택되지 않음(모델 합의 전 기본값) |
이 모델들이 정산금으로 어떻게 반영되는지는 정산 API를 참고하세요.
견적 vs 요청
- 견적 — 반복 호출해도 안전하며, 추정치와
availability블록을 반환합니다. 아무것도 확정되지 않습니다. - 요청 — NU 검토를 위해 계약을 제출합니다. 계약 라이프사이클에 진입하며
active상태가 되기 전에 서명된 계약서가 필요할 수 있습니다.
견적 받기
curl -X POST "https://nu-signal-partners.vercel.app/v1/licenses/quote" \
-H "Authorization: Bearer nsp_live_xxx" \
-H "X-NU-Partner-Id: org_acme" \
-H "X-NU-Request-Id: req_license_0001" \
-H "Content-Type: application/json" \
-d '{
"title_id": "ttl_abc",
"territories": ["KR", "JP"],
"languages": ["ko", "en"],
"exclusive": false,
"resale_allowed": false,
"expected_monthly_views": 200000,
"business_model": "MG_RS"
}'{
"data": {
"result": "auto_quote",
"availability": {
"available": true,
"rights_status": "clear",
"conflicts": []
},
"estimated_terms": {
"business_model": "mg_rs",
"mg_amount": 25000,
"revenue_share_rate": 0.35,
"flat_license_fee": null,
"api_fee_monthly": null,
"currency": "USD"
},
"next_step": "submit_license_request"
}
}요청 생성
curl -X POST "https://nu-signal-partners.vercel.app/v1/licenses/requests" \
-H "Authorization: Bearer nsp_live_xxx" \
-H "X-NU-Partner-Id: org_acme" \
-H "Content-Type: application/json" \
-d '{
"title_id": "ttl_abc",
"territories": ["KR"],
"languages": ["ko"],
"exclusive": false,
"business_model": "MG_RS",
"expected_monthly_views": 200000,
"message": "Launch on Acme OTT, KR only."
}'{
"data": {
"license_deal_id": "lic_123",
"status": "requested",
"next_step": "nu_internal_review"
}
}요청이 성공하면 HTTP 200을 반환합니다. 이 엔드포인트는 선택적 X-NU-Request-Id를 통해 멱등하게 동작합니다. 완료된 요청을 재전송하면 원래 응답을 반환하고, 아직 처리 중인 동시 중복 요청은 409 conflict를 반환합니다.
계약 상태 라이프사이클
requested → reviewing → quoted → negotiating → approved → contracting → signed → active → expired
↘ rejected ↘ cancelledproduction_api_enabled: true인active계약만이 해당 타이틀 + 지역 + 에피소드 세트에 대한 프로덕션 재생을 승인합니다.
목록 조회 & 필터링
curl "https://nu-signal-partners.vercel.app/v1/licenses?status=active" \
-H "Authorization: Bearer nsp_live_xxx" -H "X-NU-Partner-Id: org_acme"계약의 data[]를 반환합니다. pagination 봉투는 없습니다.
동기화 유지(폴링)
웹훅은 제공되지 않습니다. 상태 변경(계약이 quoted, active 등으로 이동)을 감지하려면 updated_since를 사용해 이 엔드포인트를 폴링하세요. 지금까지 확인한 가장 큰 updated_at 값을 전달하면 그 이후로 변경된 계약만 오름차순으로 받게 되어 워터마크를 전진시킬 수 있습니다.
# poll every minute or so:
curl "https://nu-signal-partners.vercel.app/v1/licenses?updated_since=2026-06-24T10:00:00Z" \
-H "Authorization: Bearer nsp_live_xxx" -H "X-NU-Partner-Id: org_acme"
# advance your cursor to the max updated_at in data[]이후 재생에서 license_not_active가 반환되면, 여기에서 해당 계약의 status와 production_api_enabled를 확인하세요.