{
  "aboutHtml": "<p>Seedance 1.5 Pro는 ByteDance Seed의 기본 오디오·영상 공동 생성 모델입니다. 시각적 행동, 발화, 리듬을 함께 모델링해 장면에 캐릭터 연기, 동기화된 대화, 설계된 사운드스케이프를 포함할 수 있습니다. 영상만의 요구사항과 다른 핵심은 누가 말하고 어떻게 대사를 전달하며 행동 주변에서 청중이 무엇을 듣는지처럼 소리가 장면 설명의 일부가 된다는 것입니다.</p><h4>오디오·영상 공동 생성</h4><p>문서에 명시된 소리 범위에는 환경음, 행동 효과음, 합성음, 악기, 배경 음악, 보컬이 포함됩니다. 모델은 물체가 테이블을 치거나 문이 열리거나 캐릭터가 말하는 것처럼 화면에서 일어나는 일과 소리를 연결하도록 설계되었습니다. 짧은 극적 순간, 음성이 있는 제품 광고, 연기와 소리 모두에 분위기가 달린 장면에 활용하세요.</p><p>프롬프트는 피사체와 움직임으로 시작한 뒤 환경, 카메라, 시각 스타일, 소리를 추가하세요. 간단한 장면은 “요리사가 작은 냄비의 뚜껑을 들고 웃으며 ‘준비됐어요’라고 말한다. 부드럽게 김이 나오고 뚜껑을 카운터에 내려놓는 조용한 부딪힘 소리가 이어진다.”라고 쓸 수 있습니다. 이는 대사와 효과음에 눈에 보이는 원인을 제공합니다.</p><h4>대화와 보이스오버</h4><p>모델은 독백과 여러 화자의 대화를 지원하며 캐릭터의 입 움직임을 맞춥니다. 안내는 표준 중국어, 광둥어·산시성(陝西)·쓰촨을 포함한 중국어 방언, 영어, 일본어, 한국어, 스페인어, 인도네시아어 발화를 문서화합니다. 문서상의 프롬프트 언어는 중국어와 영어입니다. 프롬프트 언어와 발화 대사에 요청하는 언어는 별도의 선택입니다.</p><p>각 화자를 일관된 시각적 특징으로 식별하고 대사를 따옴표로 쓰세요. 차분한 목소리, 망설이는 응답, 더 빠른 속도 같은 표현 지시를 포함하고 발화 순서를 명시하세요. 두 화자라면 누가 먼저 말하고 카메라가 누구의 반응을 보여 주는지 설명하세요. 선택한 클립에 맞는 짧은 대화는 화자가 지정되지 않은 긴 문단보다 모델에 명확한 연기 목표를 제공합니다.</p><p>보이스오버는 음색, 감정, 억양, 말하기 속도로 지시할 수 있습니다. 카메라는 제품에 머물고 목소리가 제품을 설명하거나 화면 속 화자 없이 내레이터가 분위기를 설정할 때 유용합니다. 안내는 표현을 바꾸면서 알아볼 수 있는 음색을 유지하는 것을 설명합니다. 실제 문구, 발음, 연기를 화면과 함께 검토하세요.</p><h4>효과음과 배경 음악</h4><p>캐릭터가 들어올 때의 발소리, 창밖에서 강해지는 비, 코트를 입을 때 움직이는 천처럼 행동과 연결된 사건으로 효과음을 설명하세요. 배경 음악은 기본적으로 프롬프트에 맞춰 생성됩니다. 중요하면 분위기, 스타일, 리듬을 지정하고 장면에 비해 언제 시작하거나 페이드해야 하는지 명시하세요.</p><p>조용한 시연에는 절제된 음악을 요청하고 제품을 다루는 소리를 강조하세요. 애니메이션 장면에는 음악 리듬과 일치해야 할 행동 박자를 설명하세요. 생성 사운드트랙은 모노입니다. 문서상의 오디오 제어는 별도로 준비한 사운드트랙이 필요한 프로젝트를 위해 무음 영상도 허용합니다.</p><h4>숏 전환과 카메라 지시</h4><p>모델은 일관된 시각적 처리의 숏 변경, 대화용 리버스 숏, 전환 타이밍 지시를 지원합니다. 유용한 대화 시퀀스는 두 화자를 미디엄 숏으로 보여 주고 응답하는 화자로 전환한 뒤 첫 화자의 반응으로 돌아올 수 있습니다. 숏이 바뀔 때 각 사람의 정체성을 명시하세요.</p><p>안내는 하이·로·눈높이 각도, 어깨 너머 및 주관 시점, 와이드·미디엄·클로즈 프레이밍을 다룹니다. 카메라 움직임을 시작 구도, 방향, 이동 폭, 종료 구도로 설명하세요. 예를 들어 느린 돌리 인은 대사가 끝날 때 화자의 표정에서 끝날 수 있습니다. 목적 없이 카메라 기법 여러 개를 나열하지 말고 움직임을 이야기에 연결하세요.</p><h4>모드, 출력, 미리보기</h4><p>문서상의 입력 모드는 텍스트 영상 변환, 첫 프레임 이미지 영상 변환, 첫·마지막 프레임 이미지 영상 변환입니다. 준비한 첫 이미지는 시작 구도를 설정하고 마지막 이미지는 의도한 끝점을 정의할 수 있습니다. 출력 규격은 24 fps MP4, 480p·720p·1080p, 4~12초 길이 설정을 명시합니다. 모델은 지원 범위 안에서 정수 초 길이를 선택할 수도 있습니다. 문서상의 비율은 21:9, 16:9, 4:3, 1:1, 3:4, 9:16이며 적응형 프레이밍을 지원합니다.</p><p>제조사는 2단계 Draft 워크플로를 설명합니다. 480p 미리보기로 장면 구조, 숏 선택, 움직임, 프롬프트 의도를 살핀 뒤 제작 입력을 재사용하는 최종 생성으로 이어집니다. 최종 해상도를 고르기 전에 계획한 연기를 판단하는 방법입니다. 미리보기 자체는 480p로 제한되며 마지막 프레임 반환을 지원하지 않습니다. 제작사의 Draft 작업 ID는 생성 뒤 7일 동안 유효합니다. 그 기간 안에 해당 ID로 최종 영상을 생성하세요.</p><p>이미지 중심 작업은 의도한 프레이밍에 맞게 원본 사진을 준비하세요. 출력 비율을 바꾸면 이미지가 잘릴 수 있습니다. 같은 seed를 반복하면 유사한 프레임을 만들지만 동일한 프레임은 보장되지 않으며 고정 카메라 지시도 완벽한 고정 보장은 아닙니다. 특히 대화 클립을 하나의 시청각 연기로 판단하세요. 올바른 화자, 들리는 대사, 얼굴 반응, 카메라 강조가 모두 같은 사건을 뒷받침해야 합니다.</p>",
  "aboutText": "Seedance 1.5 Pro는 ByteDance Seed의 기본 오디오·영상 공동 생성 모델입니다. 시각적 행동, 발화, 리듬을 함께 모델링해 장면에 캐릭터 연기, 동기화된 대화, 설계된 사운드스케이프를 포함할 수 있습니다. 영상만의 요구사항과 다른 핵심은 누가 말하고 어떻게 대사를 전달하며 행동 주변에서 청중이 무엇을 듣는지처럼 소리가 장면 설명의 일부가 된다는 것입니다.\n\n### 오디오·영상 공동 생성\n\n문서에 명시된 소리 범위에는 환경음, 행동 효과음, 합성음, 악기, 배경 음악, 보컬이 포함됩니다. 모델은 물체가 테이블을 치거나 문이 열리거나 캐릭터가 말하는 것처럼 화면에서 일어나는 일과 소리를 연결하도록 설계되었습니다. 짧은 극적 순간, 음성이 있는 제품 광고, 연기와 소리 모두에 분위기가 달린 장면에 활용하세요.\n\n프롬프트는 피사체와 움직임으로 시작한 뒤 환경, 카메라, 시각 스타일, 소리를 추가하세요. 간단한 장면은 “요리사가 작은 냄비의 뚜껑을 들고 웃으며 ‘준비됐어요’라고 말한다. 부드럽게 김이 나오고 뚜껑을 카운터에 내려놓는 조용한 부딪힘 소리가 이어진다.”라고 쓸 수 있습니다. 이는 대사와 효과음에 눈에 보이는 원인을 제공합니다.\n\n### 대화와 보이스오버\n\n모델은 독백과 여러 화자의 대화를 지원하며 캐릭터의 입 움직임을 맞춥니다. 안내는 표준 중국어, 광둥어·산시성(陝西)·쓰촨을 포함한 중국어 방언, 영어, 일본어, 한국어, 스페인어, 인도네시아어 발화를 문서화합니다. 문서상의 프롬프트 언어는 중국어와 영어입니다. 프롬프트 언어와 발화 대사에 요청하는 언어는 별도의 선택입니다.\n\n각 화자를 일관된 시각적 특징으로 식별하고 대사를 따옴표로 쓰세요. 차분한 목소리, 망설이는 응답, 더 빠른 속도 같은 표현 지시를 포함하고 발화 순서를 명시하세요. 두 화자라면 누가 먼저 말하고 카메라가 누구의 반응을 보여 주는지 설명하세요. 선택한 클립에 맞는 짧은 대화는 화자가 지정되지 않은 긴 문단보다 모델에 명확한 연기 목표를 제공합니다.\n\n보이스오버는 음색, 감정, 억양, 말하기 속도로 지시할 수 있습니다. 카메라는 제품에 머물고 목소리가 제품을 설명하거나 화면 속 화자 없이 내레이터가 분위기를 설정할 때 유용합니다. 안내는 표현을 바꾸면서 알아볼 수 있는 음색을 유지하는 것을 설명합니다. 실제 문구, 발음, 연기를 화면과 함께 검토하세요.\n\n### 효과음과 배경 음악\n\n캐릭터가 들어올 때의 발소리, 창밖에서 강해지는 비, 코트를 입을 때 움직이는 천처럼 행동과 연결된 사건으로 효과음을 설명하세요. 배경 음악은 기본적으로 프롬프트에 맞춰 생성됩니다. 중요하면 분위기, 스타일, 리듬을 지정하고 장면에 비해 언제 시작하거나 페이드해야 하는지 명시하세요.\n\n조용한 시연에는 절제된 음악을 요청하고 제품을 다루는 소리를 강조하세요. 애니메이션 장면에는 음악 리듬과 일치해야 할 행동 박자를 설명하세요. 생성 사운드트랙은 모노입니다. 문서상의 오디오 제어는 별도로 준비한 사운드트랙이 필요한 프로젝트를 위해 무음 영상도 허용합니다.\n\n### 숏 전환과 카메라 지시\n\n모델은 일관된 시각적 처리의 숏 변경, 대화용 리버스 숏, 전환 타이밍 지시를 지원합니다. 유용한 대화 시퀀스는 두 화자를 미디엄 숏으로 보여 주고 응답하는 화자로 전환한 뒤 첫 화자의 반응으로 돌아올 수 있습니다. 숏이 바뀔 때 각 사람의 정체성을 명시하세요.\n\n안내는 하이·로·눈높이 각도, 어깨 너머 및 주관 시점, 와이드·미디엄·클로즈 프레이밍을 다룹니다. 카메라 움직임을 시작 구도, 방향, 이동 폭, 종료 구도로 설명하세요. 예를 들어 느린 돌리 인은 대사가 끝날 때 화자의 표정에서 끝날 수 있습니다. 목적 없이 카메라 기법 여러 개를 나열하지 말고 움직임을 이야기에 연결하세요.\n\n### 모드, 출력, 미리보기\n\n문서상의 입력 모드는 텍스트 영상 변환, 첫 프레임 이미지 영상 변환, 첫·마지막 프레임 이미지 영상 변환입니다. 준비한 첫 이미지는 시작 구도를 설정하고 마지막 이미지는 의도한 끝점을 정의할 수 있습니다. 출력 규격은 24 fps MP4, 480p·720p·1080p, 4~12초 길이 설정을 명시합니다. 모델은 지원 범위 안에서 정수 초 길이를 선택할 수도 있습니다. 문서상의 비율은 21:9, 16:9, 4:3, 1:1, 3:4, 9:16이며 적응형 프레이밍을 지원합니다.\n\n제조사는 2단계 Draft 워크플로를 설명합니다. 480p 미리보기로 장면 구조, 숏 선택, 움직임, 프롬프트 의도를 살핀 뒤 제작 입력을 재사용하는 최종 생성으로 이어집니다. 최종 해상도를 고르기 전에 계획한 연기를 판단하는 방법입니다. 미리보기 자체는 480p로 제한되며 마지막 프레임 반환을 지원하지 않습니다. 제작사의 Draft 작업 ID는 생성 뒤 7일 동안 유효합니다. 그 기간 안에 해당 ID로 최종 영상을 생성하세요.\n\n이미지 중심 작업은 의도한 프레이밍에 맞게 원본 사진을 준비하세요. 출력 비율을 바꾸면 이미지가 잘릴 수 있습니다. 같은 seed를 반복하면 유사한 프레임을 만들지만 동일한 프레임은 보장되지 않으며 고정 카메라 지시도 완벽한 고정 보장은 아닙니다. 특히 대화 클립을 하나의 시청각 연기로 판단하세요. 올바른 화자, 들리는 대사, 얼굴 반응, 카메라 강조가 모두 같은 사건을 뒷받침해야 합니다.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "295bc31624470c244c22bccfa522dcdc14d590d2e2e04bcdd622ccd860470b6d",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ko",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">ByteDance: Seedance 1.5 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"닫기\">×</button></div><div class=\"idline\"><span>ByteDance /</span><code>bytedance/seedance-1-5-pro</code><button type=\"button\" id=\"copy-id\">ID 복사</button></div><nav class=\"card-jump-nav\" aria-label=\"모델 카드 섹션\"><button type=\"button\" data-card-jump=\"overview\">시작하기</button><button type=\"button\" data-card-jump=\"methods\">입력 및 메서드</button><button type=\"button\" data-card-jump=\"pricing\">요금</button><button type=\"button\" data-card-jump=\"examples\">예제</button><button type=\"button\" data-card-jump=\"results\">결과</button><button type=\"button\" data-card-jump=\"aliases\">별칭</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API 메서드\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|videos|/v1/videos|bytedance%2Fseedance-1-5-pro\">동영상</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">시작하기</h3><p class=\"mdesc-full\">ByteDance Seedance 1.5 Pro는 동기화된 대사, 효과음, 음악과 함께 영상을 생성합니다. 화자, 감정, 카메라, 소리 분위기를 연출해 짧은 드라마, 음성 광고, 캐릭터 장면을 발전시킬 수 있습니다.</p><dl class=\"card-io\" data-card-io><div><dt>허용 입력</dt><dd>텍스트 · 이미지</dd></div><div><dt>결과</dt><dd>동영상</dd></div></dl><details class=\"card-about\"><summary>모델 소개</summary><p class=\"note-s\" data-model-method-boundary>이 설명은 모델의 기능을 다룹니다. Ailoot에서 사용할 수 있는 입력, 출력 및 옵션은 아래에 선택한 메서드별로 표시됩니다.</p><div class=\"mabout\" id=\"m-about\"><p>Seedance 1.5 Pro는 ByteDance Seed의 기본 오디오·영상 공동 생성 모델입니다. 시각적 행동, 발화, 리듬을 함께 모델링해 장면에 캐릭터 연기, 동기화된 대화, 설계된 사운드스케이프를 포함할 수 있습니다. 영상만의 요구사항과 다른 핵심은 누가 말하고 어떻게 대사를 전달하며 행동 주변에서 청중이 무엇을 듣는지처럼 소리가 장면 설명의 일부가 된다는 것입니다.</p><h4>오디오·영상 공동 생성</h4><p>문서에 명시된 소리 범위에는 환경음, 행동 효과음, 합성음, 악기, 배경 음악, 보컬이 포함됩니다. 모델은 물체가 테이블을 치거나 문이 열리거나 캐릭터가 말하는 것처럼 화면에서 일어나는 일과 소리를 연결하도록 설계되었습니다. 짧은 극적 순간, 음성이 있는 제품 광고, 연기와 소리 모두에 분위기가 달린 장면에 활용하세요.</p><p>프롬프트는 피사체와 움직임으로 시작한 뒤 환경, 카메라, 시각 스타일, 소리를 추가하세요. 간단한 장면은 “요리사가 작은 냄비의 뚜껑을 들고 웃으며 ‘준비됐어요’라고 말한다. 부드럽게 김이 나오고 뚜껑을 카운터에 내려놓는 조용한 부딪힘 소리가 이어진다.”라고 쓸 수 있습니다. 이는 대사와 효과음에 눈에 보이는 원인을 제공합니다.</p><h4>대화와 보이스오버</h4><p>모델은 독백과 여러 화자의 대화를 지원하며 캐릭터의 입 움직임을 맞춥니다. 안내는 표준 중국어, 광둥어·산시성(陝西)·쓰촨을 포함한 중국어 방언, 영어, 일본어, 한국어, 스페인어, 인도네시아어 발화를 문서화합니다. 문서상의 프롬프트 언어는 중국어와 영어입니다. 프롬프트 언어와 발화 대사에 요청하는 언어는 별도의 선택입니다.</p><p>각 화자를 일관된 시각적 특징으로 식별하고 대사를 따옴표로 쓰세요. 차분한 목소리, 망설이는 응답, 더 빠른 속도 같은 표현 지시를 포함하고 발화 순서를 명시하세요. 두 화자라면 누가 먼저 말하고 카메라가 누구의 반응을 보여 주는지 설명하세요. 선택한 클립에 맞는 짧은 대화는 화자가 지정되지 않은 긴 문단보다 모델에 명확한 연기 목표를 제공합니다.</p><p>보이스오버는 음색, 감정, 억양, 말하기 속도로 지시할 수 있습니다. 카메라는 제품에 머물고 목소리가 제품을 설명하거나 화면 속 화자 없이 내레이터가 분위기를 설정할 때 유용합니다. 안내는 표현을 바꾸면서 알아볼 수 있는 음색을 유지하는 것을 설명합니다. 실제 문구, 발음, 연기를 화면과 함께 검토하세요.</p><h4>효과음과 배경 음악</h4><p>캐릭터가 들어올 때의 발소리, 창밖에서 강해지는 비, 코트를 입을 때 움직이는 천처럼 행동과 연결된 사건으로 효과음을 설명하세요. 배경 음악은 기본적으로 프롬프트에 맞춰 생성됩니다. 중요하면 분위기, 스타일, 리듬을 지정하고 장면에 비해 언제 시작하거나 페이드해야 하는지 명시하세요.</p><p>조용한 시연에는 절제된 음악을 요청하고 제품을 다루는 소리를 강조하세요. 애니메이션 장면에는 음악 리듬과 일치해야 할 행동 박자를 설명하세요. 생성 사운드트랙은 모노입니다. 문서상의 오디오 제어는 별도로 준비한 사운드트랙이 필요한 프로젝트를 위해 무음 영상도 허용합니다.</p><h4>숏 전환과 카메라 지시</h4><p>모델은 일관된 시각적 처리의 숏 변경, 대화용 리버스 숏, 전환 타이밍 지시를 지원합니다. 유용한 대화 시퀀스는 두 화자를 미디엄 숏으로 보여 주고 응답하는 화자로 전환한 뒤 첫 화자의 반응으로 돌아올 수 있습니다. 숏이 바뀔 때 각 사람의 정체성을 명시하세요.</p><p>안내는 하이·로·눈높이 각도, 어깨 너머 및 주관 시점, 와이드·미디엄·클로즈 프레이밍을 다룹니다. 카메라 움직임을 시작 구도, 방향, 이동 폭, 종료 구도로 설명하세요. 예를 들어 느린 돌리 인은 대사가 끝날 때 화자의 표정에서 끝날 수 있습니다. 목적 없이 카메라 기법 여러 개를 나열하지 말고 움직임을 이야기에 연결하세요.</p><h4>모드, 출력, 미리보기</h4><p>문서상의 입력 모드는 텍스트 영상 변환, 첫 프레임 이미지 영상 변환, 첫·마지막 프레임 이미지 영상 변환입니다. 준비한 첫 이미지는 시작 구도를 설정하고 마지막 이미지는 의도한 끝점을 정의할 수 있습니다. 출력 규격은 24 fps MP4, 480p·720p·1080p, 4~12초 길이 설정을 명시합니다. 모델은 지원 범위 안에서 정수 초 길이를 선택할 수도 있습니다. 문서상의 비율은 21:9, 16:9, 4:3, 1:1, 3:4, 9:16이며 적응형 프레이밍을 지원합니다.</p><p>제조사는 2단계 Draft 워크플로를 설명합니다. 480p 미리보기로 장면 구조, 숏 선택, 움직임, 프롬프트 의도를 살핀 뒤 제작 입력을 재사용하는 최종 생성으로 이어집니다. 최종 해상도를 고르기 전에 계획한 연기를 판단하는 방법입니다. 미리보기 자체는 480p로 제한되며 마지막 프레임 반환을 지원하지 않습니다. 제작사의 Draft 작업 ID는 생성 뒤 7일 동안 유효합니다. 그 기간 안에 해당 ID로 최종 영상을 생성하세요.</p><p>이미지 중심 작업은 의도한 프레이밍에 맞게 원본 사진을 준비하세요. 출력 비율을 바꾸면 이미지가 잘릴 수 있습니다. 같은 seed를 반복하면 유사한 프레임을 만들지만 동일한 프레임은 보장되지 않으며 고정 카메라 지시도 완벽한 고정 보장은 아닙니다. 특히 대화 클립을 하나의 시청각 연기로 판단하세요. 올바른 화자, 들리는 대사, 얼굴 반응, 카메라 강조가 모두 같은 사건을 뒷받침해야 합니다.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Ailoot에서 사용 가능 · 입력 및 메서드</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · 동영상</b> <code>POST /v1/videos</code></summary><dl class=\"method-capabilities\"><div><dt>입력</dt><dd><code>text</code>, <code>image</code></dd></div><div><dt>출력</dt><dd><code>video</code></dd></div><div><dt>출력 형식</dt><dd>원본 MP4 바이트(정규화·트랜스코딩 없음)</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>필드</th><th>유형</th><th>요건</th><th>값과 한도</th><th>기본값</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>bytedance/seedance-1-5-pro</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">prompt</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>integer</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>필수</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>4, 5, 6, 7, 8, 9, 10, 11, 12</div><div>최솟값: 1</div><div>최댓값: 600</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">resolution</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>480p, 720p, 1080p</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">aspect_ratio</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>1:1, 3:4, 9:16, 9:21, 4:3, 16:9, 21:9</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">generate_audio</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>boolean</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>false, true</div><div>조건: 이 옵션을 생략하면 오디오 포함 요금이 선택됩니다. 오디오 제외 요금을 선택하려면 false로 설정하세요. 오디오 트랙이 반환되었는지는 결과의 has_audio로 확인하세요.</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">frame_images</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>array</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>최소 항목 수: 1</div><div>최대 항목 수: 2</div><div>입력 콘텐츠: 프레임 객체 배열입니다. 각 객체에는 type=image_url, url을 포함하는 image_url 및 frame_type이 있습니다. HTTPS 이미지 URL을 사용하고 frame_type을 first_frame 또는 last_frame으로 설정하세요. 각 프레임 역할은 최대 한 번만 나타날 수 있습니다.</div><div>정확한 키: type, image_url, frame_type</div><div>조건: 이 키는 각 프레임 객체를 설명합니다. image_url에는 url만 포함됩니다. 텍스트만 사용하는 요청에서는 frame_images를 생략하세요.</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">input_references</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>array</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">size</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>480x480, 480x640, 480x854, 480x1120, 640x480, 720x720, 720x960, 720x1280, 720x1680, 854x480, 960x720, 1080x1080, 1080x1440, 1080x1920, 1080x2520, 1120x480, 1280x720, 1440x1080, 1680x720, 1920x1080, 2520x1080</div><div>패턴: ^[1-9][0-9]*x[1-9][0-9]*$</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">seed</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>integer</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>최솟값: -9,223,372,036,854,775,808</div><div>최댓값: 9,223,372,036,854,775,807</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">callback_url</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span><div>패턴: ^https://</div></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">session_id</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">trace</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>object</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">user</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span><code>string</code></td><td data-cell-label=\"요건\"><span class=\"card-cell-label\">요건</span>선택 사항</td><td data-cell-label=\"값과 한도\"><span class=\"card-cell-label\">값과 한도</span></td><td data-cell-label=\"기본값\" data-default=\"unspecified\"><span class=\"card-cell-label\">기본값</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>입력 자료 조합</summary><p class=\"note-s\"><b>텍스트로 동영상 생성</b> · 작성한 프롬프트입니다. · 필수: model, prompt, duration</p><p class=\"note-s\"><code>prompt는 텍스트로, duration은 정수 단위 초로 제공하세요. 지원되는 해상도와 화면 비율 또는 나열된 정확한 크기를 선택하세요.</code></p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: 유형: string · bytedance/seedance-1-5-pro</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: 유형: string · 최대 UTF-8 바이트 수: 10,000 · 공백이 아닌 문자 필수: 예</p><p class=\"note-s\"><b>이미지로 동영상 생성</b> · 작성한 프롬프트와 첫 프레임 이미지입니다. · 필수: model, prompt, duration, frame_images</p><p class=\"note-s\"><code>frame_images는 배열입니다. 각 프레임 객체에는 type, image_url, frame_type이 있으며, image_url에는 url이 포함됩니다. type을 image_url로 설정하세요. first_frame을 사용하고 필요하면 last_frame을 지정하세요. 각 프레임 역할은 최대 한 번만 나타날 수 있습니다. 각 프레임에 공개 HTTPS 이미지 URL을 제공하세요. 지원되는 해상도와 화면 비율 또는 나열된 정확한 크기를 선택하세요.</code></p><p class=\"note-s\">정확한 키: type, image_url, frame_type</p><p class=\"note-s\"><code class=\"card-field-name\">model</code>: 유형: string · bytedance/seedance-1-5-pro</p><p class=\"note-s\"><code class=\"card-field-name\">prompt</code>: 유형: string · 최대 UTF-8 바이트 수: 10,000 · 공백이 아닌 문자 필수: 예</p></details><details class=\"note-s\" data-method-contract><summary>메서드 매개변수와 수명 주기</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>매개변수</th><th>명세</th></tr></thead><tbody><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>content_type</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>application/json</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>required</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>model, prompt, duration</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>material_types</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>text, image</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>additional_properties</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>false</td></tr><tr><th data-cell-label=\"매개변수\" scope=\"row\"><span class=\"card-cell-label\">매개변수</span><code>optional_controls</code></th><td data-cell-label=\"명세\"><span class=\"card-cell-label\">명세</span>resolution, aspect_ratio, generate_audio, frame_images, input_references, size, seed, callback_url, session_id, trace, user</td></tr></tbody></table></div><p>수명 주기: <code>submit_once_poll_original</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}</code></p><p class=\"note-s\"><code>GET /v1/videos/{public_id}/content</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">요금</h3><div class=\"card-result-process\" data-billing-basis><h5>최종 요금 계산 방식</h5><p class=\"note-s\">표시된 요율은 생성 전 비용을 예상하는 데 사용됩니다. 최종 청구액은 최초 생성에 기록된 비용으로 계산됩니다. 측정된 출력 길이와 예상 수량은 최종 청구 수량이 아닙니다.</p></div><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>요금 정보는 요청 옵션을 추가하지 않습니다. 지원되는 매개변수는 선택한 메서드에 표시됩니다.</p><dl data-price-conditions><dt>빠른 모드</dt><dd>미지정 <span class=\"note-s\">빠른 모드를 선택한 경우</span></dd><dt>Flex 모드</dt><dd>미지정 <span class=\"note-s\">flex 모드를 선택한 경우</span></dd><dt>최대 추론 수준</dt><dd>미지정 <span class=\"note-s\">최대 추론 수준에 default 조정값을 적용하는 경우</span></dd></dl></div><div data-declared-tariff-pricing><h4>비교용 예상 요금</h4><h4>설정별 가격</h4><p class=\"note-s\">각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>설정</th><th>요금표</th><th>예측 수량</th><th>과금 단위</th><th>과금 조건</th><th>요금</th></tr></thead><tbody><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>기본 토큰 요금</th><td data-cell-label=\"요금표\"><span class=\"card-cell-label\">요금표</span>기본 요금</td><td data-cell-label=\"예측 수량\"><span class=\"card-cell-label\">예측 수량</span>—</td><td data-cell-label=\"과금 단위\"><span class=\"card-cell-label\">과금 단위</span>—</td><td data-cell-label=\"과금 조건\"><span class=\"card-cell-label\">과금 조건</span>—</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>입력 · 입력 토큰 · 비교 전용 추정치</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>출력 · 출력 토큰 · 비교 전용 추정치</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 읽기 · 비교 전용 추정치</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 쓰기 · 비교 전용 추정치</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div><div><span>입력 · 캐시 쓰기, 1시간 · 비교 전용 추정치</span> <b>—</b> <span class=\"price-unit\">/ 1K 토큰</span></div></td></tr><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>동영상 토큰 요금</th><td data-cell-label=\"요금표\"><span class=\"card-cell-label\">요금표</span>—</td><td data-cell-label=\"예측 수량\"><span class=\"card-cell-label\">예측 수량</span>—</td><td data-cell-label=\"과금 단위\"><span class=\"card-cell-label\">과금 단위</span>1K 동영상 토큰당</td><td data-cell-label=\"과금 조건\"><span class=\"card-cell-label\">과금 조건</span>이 가격 키에는 추가 조건이 명시되어 있지 않습니다.</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>출력 · 동영상 토큰 가격 · 비교 전용 추정치</span> <b>$0.0048</b> <span class=\"price-unit\">1K 동영상 토큰당</span></div><p class=\"note-s\">비디오 토큰 요율이 기본 가격 참고값입니다. 초당 대표 예상 요금은 별도 참고값이며 추가 요금이 아닙니다.</p></td></tr><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>동영상 토큰 요금</th><td data-cell-label=\"요금표\"><span class=\"card-cell-label\">요금표</span>—</td><td data-cell-label=\"예측 수량\"><span class=\"card-cell-label\">예측 수량</span>—</td><td data-cell-label=\"과금 단위\"><span class=\"card-cell-label\">과금 단위</span>1K 동영상 토큰당</td><td data-cell-label=\"과금 조건\"><span class=\"card-cell-label\">과금 조건</span>오디오: without_audio</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>출력 · 동영상 토큰 가격 · 비교 전용 추정치</span> <b>$0.0024</b> <span class=\"price-unit\">1K 동영상 토큰당</span></div><p class=\"note-s\">비디오 토큰 요율이 기본 가격 참고값입니다. 초당 대표 예상 요금은 별도 참고값이며 추가 요금이 아닙니다.</p></td></tr><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>예상 생성 비용</th><td data-cell-label=\"요금표\"><span class=\"card-cell-label\">요금표</span>—</td><td data-cell-label=\"예측 수량\"><span class=\"card-cell-label\">예측 수량</span>1회 생성 예상치</td><td data-cell-label=\"과금 단위\"><span class=\"card-cell-label\">과금 단위</span>—</td><td data-cell-label=\"과금 조건\"><span class=\"card-cell-label\">과금 조건</span>—</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>출력 · 예상 생성 비용 · 비교 전용 추정치</span> <b>$0.05184</b> <span class=\"price-unit\">생성 전 추정치</span></div><p class=\"note-s\">이 예상 금액은 추가 요금이나 생성 완료 시 적용되는 고정 요금이 아닙니다.</p></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot는 요청 전에 예상 금액을 미리 확보합니다. 결과를 받은 뒤 측정된 사용량을 기준으로 최종 요금을 정산합니다. 스트리밍 정산에는 최종 사용량 기록을 사용합니다. <a href=\"/docs/ko/billing/reserve/\">금액 확보와 정산 방식 →</a></p><div data-declared-reference-pricing><h4>참조 요금 상세 정보</h4><p class=\"note-s\">모델 수준의 참조 요금표는 메서드 선택, 견적 또는 요금을 변경하지 않습니다. 실제 과금에는 선택한 Ailoot 메서드 요금이 적용됩니다.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>동영상 설정별 요금 참조</summary><h4>설정별 가격</h4><p class=\"note-s\">각 요금을 표시된 조건과 대조하세요. 서로 대체되는 설정 묶음마다 하나의 요금만 적용하세요.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>설정</th><th>과금 조건</th><th>요금</th></tr></thead><tbody><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>동영상 토큰 요금</th><td data-cell-label=\"과금 조건\"><span class=\"card-cell-label\">과금 조건</span>이 가격 키에는 추가 조건이 명시되어 있지 않습니다.</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>출력 · 동영상 토큰 가격</span> <b>$0.0048</b> <span class=\"price-unit\">1K 동영상 토큰당</span></div><p class=\"note-s\">비디오 토큰 요율이 기본 가격 참고값입니다. 초당 대표 예상 요금은 별도 참고값이며 추가 요금이 아닙니다.</p></td></tr><tr><th data-cell-label=\"설정\" scope=\"row\"><span class=\"card-cell-label\">설정</span>동영상 토큰 요금</th><td data-cell-label=\"과금 조건\"><span class=\"card-cell-label\">과금 조건</span>오디오: without_audio</td><td data-cell-label=\"요금\"><span class=\"card-cell-label\">요금</span><div><span>출력 · 동영상 토큰 가격</span> <b>$0.0024</b> <span class=\"price-unit\">1K 동영상 토큰당</span></div><p class=\"note-s\">비디오 토큰 요율이 기본 가격 참고값입니다. 초당 대표 예상 요금은 별도 참고값이며 추가 요금이 아닙니다.</p></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">요청 예제</h3><h4>Ailoot Ultra · 동영상</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"코드 예제 형식\"><button class=\"cg-tab\" id=\"model-code-1128-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1128-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · 동영상 생성</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"코드 복사\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1128-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1128-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nfrom pathlib import Path\nPath(&#39;request.json&#39;).write_text(&#39;{&quot;aspect_ratio&quot;:&quot;16:9&quot;,&quot;duration&quot;:8,&quot;model&quot;:&quot;bytedance/seedance-1-5-pro&quot;,&quot;prompt&quot;:&quot;A serene mountain landscape at sunset&quot;,&quot;resolution&quot;:&quot;720p&quot;}&#39;, encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">결과 수신 및 저장</h3><h4>Ailoot Ultra · 동영상</h4><p class=\"note-s\">소유한 콘텐츠의 서명된 URL</p><ul class=\"card-result-paths\"><li><code>GET /v1/videos/{public_id}</code></li><li><code>GET /v1/videos/{public_id}/content</code></li></ul><h5>작업 상태 확인</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"코드 예제 형식\"><button class=\"cg-tab\" id=\"model-code-1129-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1129-panel-0\" aria-selected=\"true\" tabindex=\"0\">GET · 원래 작업의 상태 조회</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"코드 복사\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1129-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1129-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_STATUS_URL&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nif not isinstance(r.get(&#39;id&#39;),str) or not r[&#39;id&#39;]:raise SystemExit(&#39;Keep the original response and headers for reconciliation; no returned ID&#39;)\nPath(&#39;status-url.txt&#39;).write_text(&#39;https://api.ailoot.ai/v1/videos/&#39;+quote(r[&#39;id&#39;],safe=&#39;&#39;))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error &quot;$(cat status-url.txt)&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -D status-headers.txt -o status.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div><details class=\"card-about\"><summary>기타 콘텐츠 조회</summary><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"코드 예제 형식\"><button class=\"cg-tab\" id=\"model-code-1130-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1130-panel-0\" aria-selected=\"true\" tabindex=\"0\">완료된 내 소유 출력 모두 저장</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"코드 복사\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1130-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1130-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nexport AILOOT_API_KEY\npython3 - &lt;&lt;&#39;PY_ASSETS&#39;\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path(&#39;status.json&#39;).read_text())\nif r.get(&#39;status&#39;)!=&#39;completed&#39;:raise SystemExit(&#39;Keep the original ID and read its status; never recreate an unknown job&#39;)\nif not isinstance(r.get(&#39;data&#39;),list) or not r[&#39;data&#39;]:raise SystemExit(&#39;Keep the complete original status; no completed outputs supplied&#39;)\nurls=[]\nfor i,u in enumerate(r.get(&#39;data&#39;,[])):\n    if not isinstance(u,str):raise SystemExit(&#39;Keep the original response; unexpected asset shape&#39;)\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin(&#39;https://api.ailoot.ai&#39;,path);z=urlsplit(u)\n    if z.scheme!=&#39;https&#39; or z.netloc!=&#39;api.ailoot.ai&#39; or z.username or z.password:raise SystemExit(&#39;Use the actual returned Ailoot owned content URL&#39;)\n    target=Path(&#39;owned-&#39;+label+&#39;.bin&#39;)\n    subprocess.run([&#39;curl&#39;,&#39;--fail-with-body&#39;,&#39;--silent&#39;,&#39;--show-error&#39;,u,&#39;-H&#39;,&#39;Authorization: Bearer &#39;+os.environ[&#39;AILOOT_API_KEY&#39;],&#39;-D&#39;,str(target)+&#39;.headers&#39;,&#39;-o&#39;,str(target)],check=True)\nprint(&#39;All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.&#39;)\nPY_ASSETS\n</code></pre></div></div></div></details><div class=\"card-result-process\" data-all-results><h5>완료된 결과 모두 보관</h5><p class=\"note-s\">완료된 모든 동영상과 반환된 파일을 저장하고, 실제로 반환된 모든 자산 URL에서 가져오세요.</p><p class=\"note-s\">실제로 소유한 모든 출력과 함께 반환된 측정 메타데이터를 보존하세요.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>원래 응답을 확인해야 할 경우</h5><p class=\"note-s\">503 result_pending_check + 원래 id + X-Should-Retry:false; 원래 요청을 절대로 재전송하지 마세요.</p></div><details class=\"card-about\" data-output-fields><summary>응답 필드</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>필드</th><th>유형</th><th>의미</th></tr></thead><tbody><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">index</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>integer</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>출력 목록에서 이 동영상의 영부터 시작하는 위치입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">content_url</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>string</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>완료된 이 동영상의 서명된 HTTPS 다운로드 URL입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">sha256</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>string | null</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>원본 동영상 바이트의 SHA-256 다이제스트입니다. 확인할 수 없으면 null입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">size_bytes</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>integer | null</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>바이트 단위 원본 동영상 파일 크기입니다. 확인할 수 없으면 null입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">duration_ms</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>integer | null</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>밀리초 단위로 측정한 동영상 길이입니다. 확인할 수 없으면 null입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">width</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>integer | null</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>픽셀 단위 동영상 너비입니다. 확인할 수 없으면 null입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">height</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>integer | null</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>픽셀 단위 동영상 높이입니다. 확인할 수 없으면 null입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">video_codec</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>string | null</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>동영상 코덱 식별자입니다. 기록되지 않았으면 null입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">has_audio</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>boolean | null</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>동영상에 오디오 트랙이 포함되어 있는지 나타냅니다. 측정하지 않았으면 null입니다.</td></tr><tr><th data-cell-label=\"필드\" scope=\"row\"><span class=\"card-cell-label\">필드</span><code class=\"card-field-name\">audio_codec</code></th><td data-cell-label=\"유형\" data-field-type><span class=\"card-cell-label\">유형</span>string | null</td><td data-cell-label=\"의미\"><span class=\"card-cell-label\">의미</span>오디오 코덱 식별자입니다. 식별자가 기록되지 않았으면 null입니다.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>오류와 다음 단계</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>응답</th><th>조건</th><th>다음 단계</th></tr></thead><tbody><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>404 · <code>not_found_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>동영상에 접근할 수 없거나 해당 동영상 ID를 찾지 못했습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>동영상 접근 권한을 확인하세요. 기존 동영상에는 원래 공개 ID와 동일한 API 키를 사용하세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>401 · <code>authentication_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>API 키가 인증된 계정과 일치하지 않습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>제출 전에 API 키와 계정 접근 권한을 확인하세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>요청을 읽을 수 없거나 다운로드 인덱스가 유효하지 않습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>요청 본문을 수정하세요. 다운로드할 때는 원래 작업에서 반환된 출력 인덱스를 선택하세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>선택한 동영상 설정의 요금을 계산할 수 없습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>지원되는 동영상 설정을 선택하고 필수 옵션을 모두 지정한 뒤 수정된 요청을 제출하세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>동영상 입력 또는 원래 이어 만들기 작업이 유효하지 않습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>유효한 HTTPS 입력을 사용하세요. 이어 만들기에는 동일한 API 키로 완료된 원본의 공개 동영상 ID를 사용하세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>402 · <code>billing_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>사용 가능한 잔액 또는 한도로는 예약할 수 없습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>새 요청을 전송하기 전에 사용 가능한 잔액과 한도를 확인하세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>503 · <code>server_error</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>동영상 검증, 저장소 또는 서비스 접근을 일시적으로 사용할 수 없습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>서비스를 사용할 수 있을 때까지 기다리세요. 이미 동영상 ID가 있으면 새로 생성하지 말고 해당 원래 작업을 확인하세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>원래 동영상 결과와 청구액을 확인해야 합니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>반환된 동영상 ID를 보존하고 해당 작업을 확인하세요. 확인 중에는 대체 생성 요청을 전송하지 마세요.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>503 · <code>owned_result_unavailable</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>기존 동영상 다운로드를 일시적으로 사용할 수 없습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>나중에 동일한 동영상 작업을 확인하고 기존 출력을 다운로드하세요. 새로 생성하면 별도의 작업이 만들어집니다.</td></tr><tr><th data-cell-label=\"응답\" scope=\"row\"><span class=\"card-cell-label\">응답</span>409 · <code>video_not_ready</code></th><td data-cell-label=\"조건\"><span class=\"card-cell-label\">조건</span>동영상 콘텐츠가 게시되지 않았습니다.</td><td data-cell-label=\"다음 단계\"><span class=\"card-cell-label\">다음 단계</span>원래 작업 상태를 확인하세요. completed를 보고하면 다운로드하고, failed를 보고하면 청구 확인 안내를 따르세요.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">별칭</h3><h4>모델 별칭</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=bytedance%2Fseedance-1-5-pro&amp;route=Ultra&amp;caller=bytedance%2Fseedance-1-5-pro&amp;fmt=videos\"><code>bytedance/seedance-1-5-pro</code></a></span></p><h4>메서드 경로 별칭</h4><p class=\"note-s\">위에 표시된 메서드 경로를 사용하세요.</p><h4>관련 호출용 ID</h4><p class=\"note-s\"><a href=\"#m=bytedance%2Fseedance-1-5-pro&amp;route=Ultra&amp;caller=bytedance%2Fseedance-1-5-pro&amp;fmt=videos\"><code>bytedance/seedance-1-5-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "bytedance/seedance-1-5-pro",
        "fmt": "videos",
        "http": "POST",
        "path": "/v1/videos",
        "request_model_id": "bytedance/seedance-1-5-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|videos|/v1/videos|bytedance%2Fseedance-1-5-pro",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "표시된 요율은 생성 전 비용을 예상하는 데 사용됩니다. 최종 청구액은 최초 생성에 기록된 비용으로 계산됩니다. 측정된 출력 길이와 예상 수량은 최종 청구 수량이 아닙니다.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "실제로 소유한 모든 출력과 함께 반환된 측정 메타데이터를 보존하세요.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "동영상에 접근할 수 없거나 해당 동영상 ID를 찾지 못했습니다.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "동영상 접근 권한을 확인하세요. 기존 동영상에는 원래 공개 ID와 동일한 API 키를 사용하세요.",
                "type": "not_found_error"
              },
              {
                "condition": "API 키가 인증된 계정과 일치하지 않습니다.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "제출 전에 API 키와 계정 접근 권한을 확인하세요.",
                "type": "authentication_error"
              },
              {
                "condition": "요청을 읽을 수 없거나 다운로드 인덱스가 유효하지 않습니다.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "요청 본문을 수정하세요. 다운로드할 때는 원래 작업에서 반환된 출력 인덱스를 선택하세요.",
                "type": "invalid_request_error"
              },
              {
                "condition": "선택한 동영상 설정의 요금을 계산할 수 없습니다.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "지원되는 동영상 설정을 선택하고 필수 옵션을 모두 지정한 뒤 수정된 요청을 제출하세요.",
                "type": "price_unavailable"
              },
              {
                "condition": "동영상 입력 또는 원래 이어 만들기 작업이 유효하지 않습니다.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "유효한 HTTPS 입력을 사용하세요. 이어 만들기에는 동일한 API 키로 완료된 원본의 공개 동영상 ID를 사용하세요.",
                "type": "invalid_request_error"
              },
              {
                "condition": "사용 가능한 잔액 또는 한도로는 예약할 수 없습니다.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "새 요청을 전송하기 전에 사용 가능한 잔액과 한도를 확인하세요.",
                "type": "billing_error"
              },
              {
                "condition": "동영상 검증, 저장소 또는 서비스 접근을 일시적으로 사용할 수 없습니다.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "서비스를 사용할 수 있을 때까지 기다리세요. 이미 동영상 ID가 있으면 새로 생성하지 말고 해당 원래 작업을 확인하세요.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "원래 동영상 결과와 청구액을 확인해야 합니다.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "반환된 동영상 ID를 보존하고 해당 작업을 확인하세요. 확인 중에는 대체 생성 요청을 전송하지 마세요.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "기존 동영상 다운로드를 일시적으로 사용할 수 없습니다.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "나중에 동일한 동영상 작업을 확인하고 기존 출력을 다운로드하세요. 새로 생성하면 별도의 작업이 만들어집니다.",
                "type": "server_error"
              },
              {
                "condition": "동영상 콘텐츠가 게시되지 않았습니다.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "원래 작업 상태를 확인하세요. completed를 보고하면 다운로드하고, failed를 보고하면 청구 확인 안내를 따르세요.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + 원래 id + X-Should-Retry:false; 원래 요청을 절대로 재전송하지 마세요."
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-1-5-pro"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "prompt는 텍스트로, duration은 정수 단위 초로 제공하세요. 지원되는 해상도와 화면 비율 또는 나열된 정확한 크기를 선택하세요.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "작성한 프롬프트입니다."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-1-5-pro"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images는 배열입니다. 각 프레임 객체에는 type, image_url, frame_type이 있으며, image_url에는 url이 포함됩니다. type을 image_url로 설정하세요. first_frame을 사용하고 필요하면 last_frame을 지정하세요. 각 프레임 역할은 최대 한 번만 나타날 수 있습니다. 각 프레임에 공개 HTTPS 이미지 URL을 제공하세요. 지원되는 해상도와 화면 비율 또는 나열된 정확한 크기를 선택하세요.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "작성한 프롬프트와 첫 프레임 이미지입니다."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "출력 목록에서 이 동영상의 영부터 시작하는 위치입니다.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "완료된 이 동영상의 서명된 HTTPS 다운로드 URL입니다.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "원본 동영상 바이트의 SHA-256 다이제스트입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "바이트 단위 원본 동영상 파일 크기입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "밀리초 단위로 측정한 동영상 길이입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "픽셀 단위 동영상 너비입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "픽셀 단위 동영상 높이입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "동영상 코덱 식별자입니다. 기록되지 않았으면 null입니다.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "동영상에 오디오 트랙이 포함되어 있는지 나타냅니다. 측정하지 않았으면 null입니다.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "오디오 코덱 식별자입니다. 식별자가 기록되지 않았으면 null입니다.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "소유한 콘텐츠의 서명된 URL",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-1-5-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-1-5-pro"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "9:21",
                  "4:3",
                  "16:9",
                  "21:9"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "9:21",
                    "4:3",
                    "16:9",
                    "21:9"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "이 옵션을 생략하면 오디오 포함 요금이 선택됩니다. 오디오 제외 요금을 선택하려면 false로 설정하세요. 오디오 트랙이 반환되었는지는 결과의 has_audio로 확인하세요.",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "이 키는 각 프레임 객체를 설명합니다. image_url에는 url만 포함됩니다. 텍스트만 사용하는 요청에서는 frame_images를 생략하세요.",
                "content": "프레임 객체 배열입니다. 각 객체에는 type=image_url, url을 포함하는 image_url 및 frame_type이 있습니다. HTTPS 이미지 URL을 사용하고 frame_type을 first_frame 또는 last_frame으로 설정하세요. 각 프레임 역할은 최대 한 번만 나타날 수 있습니다.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxItems": 0,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "480x1120",
                  "640x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "854x480",
                  "960x720",
                  "1080x1080",
                  "1080x1440",
                  "1080x1920",
                  "1080x2520",
                  "1120x480",
                  "1280x720",
                  "1440x1080",
                  "1680x720",
                  "1920x1080",
                  "2520x1080"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "480x1120",
                    "640x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "854x480",
                    "960x720",
                    "1080x1080",
                    "1080x1440",
                    "1080x1920",
                    "1080x2520",
                    "1120x480",
                    "1280x720",
                    "1440x1080",
                    "1680x720",
                    "1920x1080",
                    "2520x1080"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "9:21",
                    "4:3",
                    "16:9",
                    "21:9"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-1-5-pro"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "480x1120",
                    "640x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "854x480",
                    "960x720",
                    "1080x1080",
                    "1080x1440",
                    "1080x1920",
                    "1080x2520",
                    "1120x480",
                    "1280x720",
                    "1440x1080",
                    "1680x720",
                    "1920x1080",
                    "2520x1080"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Request geometry is required for the pre-generation estimate and reserve. Returned geometry and track time describe the generated output; final charge follows the actual billed configuration.",
                "Video references with *_with_video_input quantity are rejected; image/audio references only where model reference types admit them."
              ]
            },
            "unsupported": [
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "비디오 토큰 요율이 기본 가격 참고값입니다. 초당 대표 예상 요금은 별도 참고값이며 추가 요금이 아닙니다.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "동영상 토큰 요금",
            "units": [
              {
                "amount": "0.0048000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000048",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "이 예상 금액은 추가 요금이나 생성 완료 시 적용되는 고정 요금이 아닙니다.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "예상 생성 비용",
            "units": [
              {
                "amount": "0.05184",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.05184",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"bytedance/seedance-1-5-pro\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"720p\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0048000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000048",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.05184",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.05184",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "bytedance/seedance-1-5-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0048000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000048",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_without_audio",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000024",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.05184",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.05184",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    }
  ],
  "model_id": "bytedance/seedance-1-5-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "f6d30fa8c3e495d95fa3f1dc3a2c68c2695eb8ffce164c988bcfb3586ab4a6ea",
    "input_html_sha256": "dada82a71deefbb89d3f35bd6ca3b6fad775290195f5ff12d9799cc7c77e73bf",
    "private_audit_sha256": "93ab30d20b333785d027ed3c1695e4efb6ce3e4838fbd23cb56446f8988113b3",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ko/bytedance-seedance-1-5-pro/",
    "description": "ByteDance Seedance 1.5 Pro는 동기화된 대사, 효과음, 음악과 함께 영상을 생성합니다. 화자, 감정, 카메라, 소리 분위기를 연출해 짧은 드라마, 음성 광고, 캐릭터 장면을 발전시킬 수 있습니다.",
    "locale": "ko",
    "md_url": "https://ailoot.ai/models/ko/bytedance-seedance-1-5-pro/index.md",
    "title": "ByteDance: Seedance 1.5 Pro — Ailoot",
    "url": "https://ailoot.ai/models/ko/bytedance-seedance-1-5-pro/"
  },
  "rawModel": {
    "about": "Seedance 1.5 Pro는 ByteDance Seed의 기본 오디오·영상 공동 생성 모델입니다. 시각적 행동, 발화, 리듬을 함께 모델링해 장면에 캐릭터 연기, 동기화된 대화, 설계된 사운드스케이프를 포함할 수 있습니다. 영상만의 요구사항과 다른 핵심은 누가 말하고 어떻게 대사를 전달하며 행동 주변에서 청중이 무엇을 듣는지처럼 소리가 장면 설명의 일부가 된다는 것입니다.\n\n### 오디오·영상 공동 생성\n\n문서에 명시된 소리 범위에는 환경음, 행동 효과음, 합성음, 악기, 배경 음악, 보컬이 포함됩니다. 모델은 물체가 테이블을 치거나 문이 열리거나 캐릭터가 말하는 것처럼 화면에서 일어나는 일과 소리를 연결하도록 설계되었습니다. 짧은 극적 순간, 음성이 있는 제품 광고, 연기와 소리 모두에 분위기가 달린 장면에 활용하세요.\n\n프롬프트는 피사체와 움직임으로 시작한 뒤 환경, 카메라, 시각 스타일, 소리를 추가하세요. 간단한 장면은 “요리사가 작은 냄비의 뚜껑을 들고 웃으며 ‘준비됐어요’라고 말한다. 부드럽게 김이 나오고 뚜껑을 카운터에 내려놓는 조용한 부딪힘 소리가 이어진다.”라고 쓸 수 있습니다. 이는 대사와 효과음에 눈에 보이는 원인을 제공합니다.\n\n### 대화와 보이스오버\n\n모델은 독백과 여러 화자의 대화를 지원하며 캐릭터의 입 움직임을 맞춥니다. 안내는 표준 중국어, 광둥어·산시성(陝西)·쓰촨을 포함한 중국어 방언, 영어, 일본어, 한국어, 스페인어, 인도네시아어 발화를 문서화합니다. 문서상의 프롬프트 언어는 중국어와 영어입니다. 프롬프트 언어와 발화 대사에 요청하는 언어는 별도의 선택입니다.\n\n각 화자를 일관된 시각적 특징으로 식별하고 대사를 따옴표로 쓰세요. 차분한 목소리, 망설이는 응답, 더 빠른 속도 같은 표현 지시를 포함하고 발화 순서를 명시하세요. 두 화자라면 누가 먼저 말하고 카메라가 누구의 반응을 보여 주는지 설명하세요. 선택한 클립에 맞는 짧은 대화는 화자가 지정되지 않은 긴 문단보다 모델에 명확한 연기 목표를 제공합니다.\n\n보이스오버는 음색, 감정, 억양, 말하기 속도로 지시할 수 있습니다. 카메라는 제품에 머물고 목소리가 제품을 설명하거나 화면 속 화자 없이 내레이터가 분위기를 설정할 때 유용합니다. 안내는 표현을 바꾸면서 알아볼 수 있는 음색을 유지하는 것을 설명합니다. 실제 문구, 발음, 연기를 화면과 함께 검토하세요.\n\n### 효과음과 배경 음악\n\n캐릭터가 들어올 때의 발소리, 창밖에서 강해지는 비, 코트를 입을 때 움직이는 천처럼 행동과 연결된 사건으로 효과음을 설명하세요. 배경 음악은 기본적으로 프롬프트에 맞춰 생성됩니다. 중요하면 분위기, 스타일, 리듬을 지정하고 장면에 비해 언제 시작하거나 페이드해야 하는지 명시하세요.\n\n조용한 시연에는 절제된 음악을 요청하고 제품을 다루는 소리를 강조하세요. 애니메이션 장면에는 음악 리듬과 일치해야 할 행동 박자를 설명하세요. 생성 사운드트랙은 모노입니다. 문서상의 오디오 제어는 별도로 준비한 사운드트랙이 필요한 프로젝트를 위해 무음 영상도 허용합니다.\n\n### 숏 전환과 카메라 지시\n\n모델은 일관된 시각적 처리의 숏 변경, 대화용 리버스 숏, 전환 타이밍 지시를 지원합니다. 유용한 대화 시퀀스는 두 화자를 미디엄 숏으로 보여 주고 응답하는 화자로 전환한 뒤 첫 화자의 반응으로 돌아올 수 있습니다. 숏이 바뀔 때 각 사람의 정체성을 명시하세요.\n\n안내는 하이·로·눈높이 각도, 어깨 너머 및 주관 시점, 와이드·미디엄·클로즈 프레이밍을 다룹니다. 카메라 움직임을 시작 구도, 방향, 이동 폭, 종료 구도로 설명하세요. 예를 들어 느린 돌리 인은 대사가 끝날 때 화자의 표정에서 끝날 수 있습니다. 목적 없이 카메라 기법 여러 개를 나열하지 말고 움직임을 이야기에 연결하세요.\n\n### 모드, 출력, 미리보기\n\n문서상의 입력 모드는 텍스트 영상 변환, 첫 프레임 이미지 영상 변환, 첫·마지막 프레임 이미지 영상 변환입니다. 준비한 첫 이미지는 시작 구도를 설정하고 마지막 이미지는 의도한 끝점을 정의할 수 있습니다. 출력 규격은 24 fps MP4, 480p·720p·1080p, 4~12초 길이 설정을 명시합니다. 모델은 지원 범위 안에서 정수 초 길이를 선택할 수도 있습니다. 문서상의 비율은 21:9, 16:9, 4:3, 1:1, 3:4, 9:16이며 적응형 프레이밍을 지원합니다.\n\n제조사는 2단계 Draft 워크플로를 설명합니다. 480p 미리보기로 장면 구조, 숏 선택, 움직임, 프롬프트 의도를 살핀 뒤 제작 입력을 재사용하는 최종 생성으로 이어집니다. 최종 해상도를 고르기 전에 계획한 연기를 판단하는 방법입니다. 미리보기 자체는 480p로 제한되며 마지막 프레임 반환을 지원하지 않습니다. 제작사의 Draft 작업 ID는 생성 뒤 7일 동안 유효합니다. 그 기간 안에 해당 ID로 최종 영상을 생성하세요.\n\n이미지 중심 작업은 의도한 프레이밍에 맞게 원본 사진을 준비하세요. 출력 비율을 바꾸면 이미지가 잘릴 수 있습니다. 같은 seed를 반복하면 유사한 프레임을 만들지만 동일한 프레임은 보장되지 않으며 고정 카메라 지시도 완벽한 고정 보장은 아닙니다. 특히 대화 클립을 하나의 시청각 연기로 판단하세요. 올바른 화자, 들리는 대사, 얼굴 반응, 카메라 강조가 모두 같은 사건을 뒷받침해야 합니다.",
    "alias_of": null,
    "aliases": [],
    "author": "ByteDance",
    "available": null,
    "canonical_model": "bytedance/seedance-1-5-pro",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "text",
        "image"
      ],
      "manufacturer_output": [
        "video"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.05184",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.05184",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ],
        "summary": "구성의 전체 요금 정보는 상세 정보에서 확인할 수 있습니다."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "09b7f40b8299fa0acb9ef099",
        "label": "동영상 설정별 요금 참조",
        "profiles": [
          {
            "basis": "비디오 토큰 요율이 기본 가격 참고값입니다. 초당 대표 예상 요금은 별도 참고값이며 추가 요금이 아닙니다.",
            "dimensions": {
              "conditions": "이 가격 키에는 추가 조건이 명시되어 있지 않습니다."
            },
            "label": "동영상 토큰 요금",
            "units": [
              {
                "amount": "0.0048",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "비디오 토큰 요율이 기본 가격 참고값입니다. 초당 대표 예상 요금은 별도 참고값이며 추가 요금이 아닙니다.",
            "dimensions": {
              "conditions": "오디오: without_audio"
            },
            "label": "동영상 토큰 요금",
            "units": [
              {
                "amount": "0.0024",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "key": "video_token",
                "label": "Video-token price",
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "rate_role": "typed_video_token_primary_reference",
                "side": "out",
                "unit": "video_token"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "videos"
    ],
    "id": "bytedance/seedance-1-5-pro",
    "input": [
      "text",
      "image"
    ],
    "kind": "video",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "billing_basis": {
          "basis": "original_invoice_usd",
          "description": "표시된 요율은 생성 전 비용을 예상하는 데 사용됩니다. 최종 청구액은 최초 생성에 기록된 비용으로 계산됩니다. 측정된 출력 길이와 예상 수량은 최종 청구 수량이 아닙니다.",
          "forecast_quantity_is_estimate": true,
          "physical_output_is_billable_quantity": false,
          "version": "original_invoice_usd_v1"
        },
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "실제로 소유한 모든 출력과 함께 반환된 측정 메타데이터를 보존하세요.",
            "defaults": {
              "aspect_ratio": null,
              "duration": null,
              "generate_audio": "endpoint capability flag when published; omitted unknown stays unknown; never guarantees audio track",
              "resolution": null,
              "seed": null,
              "size": null,
              "wire_omissions_preserved": true
            },
            "errors": [
              {
                "condition": "동영상에 접근할 수 없거나 해당 동영상 ID를 찾지 못했습니다.",
                "http_status": 404,
                "public_identifier_field": "error.type",
                "recovery": "동영상 접근 권한을 확인하세요. 기존 동영상에는 원래 공개 ID와 동일한 API 키를 사용하세요.",
                "type": "not_found_error"
              },
              {
                "condition": "API 키가 인증된 계정과 일치하지 않습니다.",
                "http_status": 401,
                "public_identifier_field": "error.type",
                "recovery": "제출 전에 API 키와 계정 접근 권한을 확인하세요.",
                "type": "authentication_error"
              },
              {
                "condition": "요청을 읽을 수 없거나 다운로드 인덱스가 유효하지 않습니다.",
                "http_status": 400,
                "public_identifier_field": "error.type",
                "recovery": "요청 본문을 수정하세요. 다운로드할 때는 원래 작업에서 반환된 출력 인덱스를 선택하세요.",
                "type": "invalid_request_error"
              },
              {
                "condition": "선택한 동영상 설정의 요금을 계산할 수 없습니다.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "지원되는 동영상 설정을 선택하고 필수 옵션을 모두 지정한 뒤 수정된 요청을 제출하세요.",
                "type": "price_unavailable"
              },
              {
                "condition": "동영상 입력 또는 원래 이어 만들기 작업이 유효하지 않습니다.",
                "http_status": 422,
                "public_identifier_field": "error.type",
                "recovery": "유효한 HTTPS 입력을 사용하세요. 이어 만들기에는 동일한 API 키로 완료된 원본의 공개 동영상 ID를 사용하세요.",
                "type": "invalid_request_error"
              },
              {
                "condition": "사용 가능한 잔액 또는 한도로는 예약할 수 없습니다.",
                "http_status": 402,
                "public_identifier_field": "error.type",
                "recovery": "새 요청을 전송하기 전에 사용 가능한 잔액과 한도를 확인하세요.",
                "type": "billing_error"
              },
              {
                "condition": "동영상 검증, 저장소 또는 서비스 접근을 일시적으로 사용할 수 없습니다.",
                "http_status": 503,
                "public_identifier_field": "error.type",
                "recovery": "서비스를 사용할 수 있을 때까지 기다리세요. 이미 동영상 ID가 있으면 새로 생성하지 말고 해당 원래 작업을 확인하세요.",
                "type": "server_error"
              },
              {
                "code": "result_pending_check",
                "condition": "원래 동영상 결과와 청구액을 확인해야 합니다.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "반환된 동영상 ID를 보존하고 해당 작업을 확인하세요. 확인 중에는 대체 생성 요청을 전송하지 마세요.",
                "type": "server_error"
              },
              {
                "code": "owned_result_unavailable",
                "condition": "기존 동영상 다운로드를 일시적으로 사용할 수 없습니다.",
                "http_status": 503,
                "public_identifier_field": "error.code",
                "recovery": "나중에 동일한 동영상 작업을 확인하고 기존 출력을 다운로드하세요. 새로 생성하면 별도의 작업이 만들어집니다.",
                "type": "server_error"
              },
              {
                "condition": "동영상 콘텐츠가 게시되지 않았습니다.",
                "http_status": 409,
                "public_identifier_field": "error.type",
                "recovery": "원래 작업 상태를 확인하세요. completed를 보고하면 다운로드하고, failed를 보고하면 청구 확인 안내를 따르세요.",
                "type": "video_not_ready"
              }
            ],
            "hints": [
              "No null values or duplicate keys at any JSON object level",
              "No duration/resolution/aspect default is inserted",
              "Prompt required for all21 despite broader official image-only schema",
              "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
              "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
              "No n/output-count/client price fields accepted",
              "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel_endpoint": null,
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}/content",
                  "query": {
                    "index": "actual output index"
                  }
                }
              ],
              "create": {
                "http": "POST",
                "path": "/v1/videos"
              },
              "mode": "submit_once_poll_original",
              "public_id": "video_<uuid>; owner user/key/group scope",
              "status": [
                {
                  "http": "GET",
                  "path": "/v1/videos/{public_id}"
                }
              ],
              "submit_status": 202,
              "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
              "terminal_provider_states": [
                "failed",
                "cancelled",
                "expired"
              ],
              "unknown": "503 result_pending_check + 원래 id + X-Should-Retry:false; 원래 요청을 절대로 재전송하지 마세요."
            },
            "material_combinations": [
              {
                "mode": "text_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-1-5-pro"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "prompt는 텍스트로, duration은 정수 단위 초로 제공하세요. 지원되는 해상도와 화면 비율 또는 나열된 정확한 크기를 선택하세요.",
                "required": [
                  "model",
                  "prompt",
                  "duration"
                ],
                "required_material": "작성한 프롬프트입니다."
              },
              {
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "mode": "image_to_video",
                "model": {
                  "enum": [
                    "bytedance/seedance-1-5-pro"
                  ],
                  "enum_known": true,
                  "type": "string"
                },
                "prompt": {
                  "max_utf8_bytes": 10000,
                  "non_whitespace": true,
                  "type": "string"
                },
                "representation": "frame_images는 배열입니다. 각 프레임 객체에는 type, image_url, frame_type이 있으며, image_url에는 url이 포함됩니다. type을 image_url로 설정하세요. first_frame을 사용하고 필요하면 last_frame을 지정하세요. 각 프레임 역할은 최대 한 번만 나타날 수 있습니다. 각 프레임에 공개 HTTPS 이미지 URL을 제공하세요. 지원되는 해상도와 화면 비율 또는 나열된 정확한 크기를 선택하세요.",
                "required": [
                  "model",
                  "prompt",
                  "duration",
                  "frame_images"
                ],
                "required_material": "작성한 프롬프트와 첫 프레임 이미지입니다."
              }
            ],
            "operation_modes": [
              "text_to_video",
              "image_to_video_frame_images"
            ],
            "outputs": {
              "content_range_supported": true,
              "every_actual_output": true,
              "family": "video",
              "fields": [
                {
                  "condition": "Always present for each completed output.",
                  "description": "출력 목록에서 이 동영상의 영부터 시작하는 위치입니다.",
                  "field_path": "outputs[].index",
                  "json_schema": {
                    "type": "integer"
                  },
                  "name": "index",
                  "nullable": false,
                  "type": "integer"
                },
                {
                  "condition": "Present after the owned result is available and a signed URL is created.",
                  "description": "완료된 이 동영상의 서명된 HTTPS 다운로드 URL입니다.",
                  "field_path": "outputs[].content_url",
                  "json_schema": {
                    "type": "string"
                  },
                  "name": "content_url",
                  "nullable": false,
                  "type": "string"
                },
                {
                  "condition": "A nonempty recorded digest is returned; otherwise null.",
                  "description": "원본 동영상 바이트의 SHA-256 다이제스트입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].sha256",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "sha256",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when the recorded file size is positive.",
                  "description": "바이트 단위 원본 동영상 파일 크기입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].size_bytes",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "size_bytes",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned when the measured duration is positive.",
                  "description": "밀리초 단위로 측정한 동영상 길이입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].duration_ms",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "duration_ms",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "픽셀 단위 동영상 너비입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].width",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "width",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Width, height and the video codec are returned together when recorded.",
                  "description": "픽셀 단위 동영상 높이입니다. 확인할 수 없으면 null입니다.",
                  "field_path": "outputs[].height",
                  "json_schema": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "name": "height",
                  "nullable": true,
                  "type": "integer | null"
                },
                {
                  "condition": "Returned together with positive recorded width and height.",
                  "description": "동영상 코덱 식별자입니다. 기록되지 않았으면 null입니다.",
                  "field_path": "outputs[].video_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "video_codec",
                  "nullable": true,
                  "type": "string | null"
                },
                {
                  "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                  "description": "동영상에 오디오 트랙이 포함되어 있는지 나타냅니다. 측정하지 않았으면 null입니다.",
                  "field_path": "outputs[].has_audio",
                  "json_schema": {
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "name": "has_audio",
                  "nullable": true,
                  "type": "boolean | null"
                },
                {
                  "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                  "description": "오디오 코덱 식별자입니다. 식별자가 기록되지 않았으면 null입니다.",
                  "field_path": "outputs[].audio_codec",
                  "json_schema": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": "audio_codec",
                  "nullable": true,
                  "type": "string | null"
                }
              ],
              "format": "original MP4 bytes; no normalization/transcode",
              "max_aggregate_seconds": 2400,
              "max_bytes_per_output": 67108864,
              "max_seconds_per_output": 600,
              "result": "소유한 콘텐츠의 서명된 URL",
              "unmeasured_fields_nullable": true
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "bytedance/seedance-1-5-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "schema": {
                  "const": "bytedance/seedance-1-5-pro"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "minLength": 1,
                "name": "prompt",
                "required": true,
                "schema": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12
                ],
                "enum_known": true,
                "maximum": 600,
                "minimum": 1,
                "name": "duration",
                "required": true,
                "schema": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480p",
                  "720p",
                  "1080p"
                ],
                "enum_known": true,
                "name": "resolution",
                "required": false,
                "schema": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "1:1",
                  "3:4",
                  "9:16",
                  "9:21",
                  "4:3",
                  "16:9",
                  "21:9"
                ],
                "enum_known": true,
                "name": "aspect_ratio",
                "required": false,
                "schema": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "9:21",
                    "4:3",
                    "16:9",
                    "21:9"
                  ]
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "conditions": "이 옵션을 생략하면 오디오 포함 요금이 선택됩니다. 오디오 제외 요금을 선택하려면 false로 설정하세요. 오디오 트랙이 반환되었는지는 결과의 has_audio로 확인하세요.",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  true
                ],
                "enum_known": true,
                "name": "generate_audio",
                "required": false,
                "schema": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "type": "boolean"
              },
              {
                "availability": "source_interface",
                "conditions": "이 키는 각 프레임 객체를 설명합니다. image_url에는 url만 포함됩니다. 텍스트만 사용하는 요청에서는 frame_images를 생략하세요.",
                "content": "프레임 객체 배열입니다. 각 객체에는 type=image_url, url을 포함하는 image_url 및 frame_type이 있습니다. HTTPS 이미지 URL을 사용하고 frame_type을 first_frame 또는 last_frame으로 설정하세요. 각 프레임 역할은 최대 한 번만 나타날 수 있습니다.",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "type",
                  "image_url",
                  "frame_type"
                ],
                "maxItems": 2,
                "max_items": 2,
                "minItems": 1,
                "min_items": 1,
                "name": "frame_images",
                "required": false,
                "schema": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxItems": 0,
                "name": "input_references",
                "required": false,
                "schema": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "type": "array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "480x480",
                  "480x640",
                  "480x854",
                  "480x1120",
                  "640x480",
                  "720x720",
                  "720x960",
                  "720x1280",
                  "720x1680",
                  "854x480",
                  "960x720",
                  "1080x1080",
                  "1080x1440",
                  "1080x1920",
                  "1080x2520",
                  "1120x480",
                  "1280x720",
                  "1440x1080",
                  "1680x720",
                  "1920x1080",
                  "2520x1080"
                ],
                "enum_known": true,
                "name": "size",
                "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                "required": false,
                "schema": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "480x1120",
                    "640x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "854x480",
                    "960x720",
                    "1080x1080",
                    "1080x1440",
                    "1080x1920",
                    "1080x2520",
                    "1120x480",
                    "1280x720",
                    "1440x1080",
                    "1680x720",
                    "1920x1080",
                    "2520x1080"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maximum": 9223372036854775807,
                "minimum": -9223372036854775808,
                "name": "seed",
                "required": false,
                "schema": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "callback_url",
                "pattern": "^https://",
                "required": false,
                "schema": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "session_id",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "trace",
                "required": false,
                "schema": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "maxLength": 256,
                "name": "user",
                "required": false,
                "schema": {
                  "maxLength": 256,
                  "type": "string"
                },
                "type": "string"
              }
            ],
            "request_schema": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "aspect_ratio": {
                  "enum": [
                    "1:1",
                    "3:4",
                    "9:16",
                    "9:21",
                    "4:3",
                    "16:9",
                    "21:9"
                  ]
                },
                "callback_url": {
                  "format": "uri",
                  "pattern": "^https://",
                  "type": "string",
                  "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                },
                "creativity": false,
                "duration": {
                  "enum": [
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12
                  ],
                  "maximum": 600,
                  "minimum": 1,
                  "type": "integer"
                },
                "frame_images": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "frame_type": {
                        "enum": [
                          "first_frame",
                          "last_frame"
                        ]
                      },
                      "image_url": {
                        "additionalProperties": false,
                        "properties": {
                          "url": {
                            "format": "uri",
                            "pattern": "^https://",
                            "type": "string",
                            "x-source-rule": "public HTTPS; no userinfo, fragment, whitespace, private/reserved hosts; own-media links additionally require owner/signature/status/hash/MIME/bytes"
                          }
                        },
                        "required": [
                          "url"
                        ],
                        "type": "object"
                      },
                      "type": {
                        "const": "image_url"
                      }
                    },
                    "required": [
                      "type",
                      "image_url",
                      "frame_type"
                    ],
                    "type": "object"
                  },
                  "maxItems": 2,
                  "minItems": 1,
                  "type": "array",
                  "x-source-unique-role": "frame_type"
                },
                "generate_audio": {
                  "enum": [
                    false,
                    true
                  ],
                  "x-omitted-default": "published audio capability when true/false; unknown if null; output audio must be measured"
                },
                "input_references": {
                  "items": false,
                  "maxItems": 0,
                  "type": "array"
                },
                "model": {
                  "const": "bytedance/seedance-1-5-pro"
                },
                "previous_job_id": false,
                "prompt": {
                  "minLength": 1,
                  "type": "string",
                  "x-source-max-utf8-bytes": 10000,
                  "x-source-non-whitespace": true
                },
                "provider": false,
                "resolution": {
                  "enum": [
                    "480p",
                    "720p",
                    "1080p"
                  ]
                },
                "seed": {
                  "maximum": 9223372036854775807,
                  "minimum": -9223372036854775808,
                  "type": "integer"
                },
                "session_id": {
                  "maxLength": 256,
                  "type": "string"
                },
                "size": {
                  "enum": [
                    "480x480",
                    "480x640",
                    "480x854",
                    "480x1120",
                    "640x480",
                    "720x720",
                    "720x960",
                    "720x1280",
                    "720x1680",
                    "854x480",
                    "960x720",
                    "1080x1080",
                    "1080x1440",
                    "1080x1920",
                    "1080x2520",
                    "1120x480",
                    "1280x720",
                    "1440x1080",
                    "1680x720",
                    "1920x1080",
                    "2520x1080"
                  ],
                  "pattern": "^[1-9][0-9]*x[1-9][0-9]*$",
                  "type": "string"
                },
                "trace": {
                  "additionalProperties": true,
                  "properties": {
                    "generation_name": {
                      "type": "string"
                    },
                    "parent_span_id": {
                      "type": "string"
                    },
                    "span_name": {
                      "type": "string"
                    },
                    "trace_id": {
                      "type": "string"
                    },
                    "trace_name": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "upscale_factor": false,
                "user": {
                  "maxLength": 256,
                  "type": "string"
                }
              },
              "required": [
                "model",
                "prompt",
                "duration"
              ],
              "title": "Video generation request",
              "type": "object",
              "x-source-global-rules": [
                "No null values or duplicate keys at any JSON object level",
                "No duration/resolution/aspect default is inserted",
                "Prompt required for all21 despite broader official image-only schema",
                "A request must also pass model membership, exact price card, SKU selection and frozen quote construction",
                "Non-string known trace fields reject; other trace keys retain arbitrary JSON",
                "No n/output-count/client price fields accepted",
                "Provider passthrough disabled for all21; feed allowlist names do not supply provider slug/value contract"
              ],
              "x-source-material-combinations": [
                "Exact model/card, positive published duration, model resolution/aspect membership and valid frozen quote are all required; independent enum arrays are not proven provider Cartesian combinations.",
                "Use exact published size or compatible resolution/aspect. Omitted options stay omitted; no guessed geometry.",
                "first_frame/last_frame roles each occur at most once; frame_images wins mode precedence over input_references.",
                "provider options are unavailable for this model despite any published passthrough-name allowlist.",
                "Request geometry is required for the pre-generation estimate and reserve. Returned geometry and track time describe the generated output; final charge follows the actual billed configuration.",
                "Video references with *_with_video_input quantity are rejected; image/audio references only where model reference types admit them."
              ]
            },
            "unsupported": [
              "provider",
              "previous_job_id",
              "upscale_factor",
              "creativity"
            ]
          },
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "text",
              "image"
            ],
            "optional_controls": [
              "resolution",
              "aspect_ratio",
              "generate_audio",
              "frame_images",
              "input_references",
              "size",
              "seed",
              "callback_url",
              "session_id",
              "trace",
              "user"
            ],
            "required": [
              "model",
              "prompt",
              "duration"
            ]
          },
          "lifecycle": {
            "cancel_endpoint": null,
            "content": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}/content",
                "query": {
                  "index": "actual output index"
                }
              }
            ],
            "create": {
              "http": "POST",
              "path": "/v1/videos"
            },
            "mode": "submit_once_poll_original",
            "public_id": "video_<uuid>; owner user/key/group scope",
            "status": [
              {
                "http": "GET",
                "path": "/v1/videos/{public_id}"
              }
            ],
            "submit_status": 202,
            "terminal_failure_public": "200 failed + charge_pending_check=true; inspect original operation",
            "terminal_provider_states": [
              "failed",
              "cancelled",
              "expired"
            ],
            "unknown": "503 result_pending_check + originalid + X-Should-Retry:false; never replay original"
          },
          "method": {
            "http": "POST",
            "path": "/v1/videos"
          },
          "method_aliases": [],
          "operation_modes": [
            "text_to_video",
            "image_to_video_frame_images"
          ],
          "output": {
            "content_range_supported": true,
            "every_actual_output": true,
            "family": "video",
            "fields": [
              {
                "condition": "Always present for each completed output.",
                "description": "Zero-based position of this video in the outputs list.",
                "field_path": "outputs[].index",
                "json_schema": {
                  "type": "integer"
                },
                "name": "index",
                "nullable": false,
                "type": "integer"
              },
              {
                "condition": "Present after the owned result is available and a signed URL is created.",
                "description": "Signed HTTPS download URL for this completed video.",
                "field_path": "outputs[].content_url",
                "json_schema": {
                  "type": "string"
                },
                "name": "content_url",
                "nullable": false,
                "type": "string"
              },
              {
                "condition": "A nonempty recorded digest is returned; otherwise null.",
                "description": "SHA-256 digest of the original video bytes; null if unavailable.",
                "field_path": "outputs[].sha256",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "sha256",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when the recorded file size is positive.",
                "description": "Size of the original video file in bytes; null if unavailable.",
                "field_path": "outputs[].size_bytes",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "size_bytes",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned when the measured duration is positive.",
                "description": "Measured video duration in milliseconds; null if unavailable.",
                "field_path": "outputs[].duration_ms",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "duration_ms",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video width in pixels; null if unavailable.",
                "field_path": "outputs[].width",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "width",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Width, height and the video codec are returned together when recorded.",
                "description": "Video height in pixels; null if unavailable.",
                "field_path": "outputs[].height",
                "json_schema": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "name": "height",
                "nullable": true,
                "type": "integer | null"
              },
              {
                "condition": "Returned together with positive recorded width and height.",
                "description": "Video codec identifier; null if not recorded.",
                "field_path": "outputs[].video_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "video_codec",
                "nullable": true,
                "type": "string | null"
              },
              {
                "condition": "Returned when width, height and the video codec are recorded; false is a known result.",
                "description": "Whether the video contains an audio track; null if not measured.",
                "field_path": "outputs[].has_audio",
                "json_schema": {
                  "type": [
                    "boolean",
                    "null"
                  ]
                },
                "name": "has_audio",
                "nullable": true,
                "type": "boolean | null"
              },
              {
                "condition": "Returned when video metadata is recorded and the audio codec identifier is nonempty.",
                "description": "Audio codec identifier; null when no identifier is recorded.",
                "field_path": "outputs[].audio_codec",
                "json_schema": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": "audio_codec",
                "nullable": true,
                "type": "string | null"
              }
            ],
            "format": "original MP4 bytes; no normalization/transcode",
            "max_aggregate_seconds": 2400,
            "max_bytes_per_output": 67108864,
            "max_seconds_per_output": 600,
            "result": "signed owned content URLs",
            "unmeasured_fields_nullable": true
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "비디오 토큰 요율이 기본 가격 참고값입니다. 초당 대표 예상 요금은 별도 참고값이며 추가 요금이 아닙니다.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "동영상 토큰 요금",
            "units": [
              {
                "amount": "0.0048000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000048",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "이 예상 금액은 추가 요금이나 생성 완료 시 적용되는 고정 요금이 아닙니다.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "예상 생성 비용",
            "units": [
              {
                "amount": "0.05184",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.05184",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nfrom pathlib import Path\nPath('request.json').write_text('{\"aspect_ratio\":\"16:9\",\"duration\":8,\"model\":\"bytedance/seedance-1-5-pro\",\"prompt\":\"A serene mountain landscape at sunset\",\"resolution\":\"720p\"}', encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/videos \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · create video",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_STATUS_URL'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nr=json.loads(Path('result.json').read_text())\nif not isinstance(r.get('id'),str) or not r['id']:raise SystemExit('Keep the original response and headers for reconciliation; no returned ID')\nPath('status-url.txt').write_text('https://api.ailoot.ai/v1/videos/'+quote(r['id'],safe=''))\nPY_STATUS_URL\ncurl --fail-with-body --silent --show-error \"$(cat status-url.txt)\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -D status-headers.txt -o status.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('status.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "GET original status",
            "language": "bash"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nexport AILOOT_API_KEY\npython3 - <<'PY_ASSETS'\nimport json,os,subprocess\nfrom pathlib import Path\nfrom urllib.parse import urljoin,urlsplit\nr=json.loads(Path('status.json').read_text())\nif r.get('status')!='completed':raise SystemExit('Keep the original ID and read its status; never recreate an unknown job')\nif not isinstance(r.get('data'),list) or not r['data']:raise SystemExit('Keep the complete original status; no completed outputs supplied')\nurls=[]\nfor i,u in enumerate(r.get('data',[])):\n    if not isinstance(u,str):raise SystemExit('Keep the original response; unexpected asset shape')\n    urls.append((str(i),u))\nfor label,path in urls:\n    u=urljoin('https://api.ailoot.ai',path);z=urlsplit(u)\n    if z.scheme!='https' or z.netloc!='api.ailoot.ai' or z.username or z.password:raise SystemExit('Use the actual returned Ailoot owned content URL')\n    target=Path('owned-'+label+'.bin')\n    subprocess.run(['curl','--fail-with-body','--silent','--show-error',u,'-H','Authorization: Bearer '+os.environ['AILOOT_API_KEY'],'-D',str(target)+'.headers','-o',str(target)],check=True)\nprint('All returned owned URLs saved; complete metadata, timing and usage remain in the JSON.')\nPY_ASSETS\n",
            "label": "Save every completed owned output",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "videos",
        "hints": [],
        "http": "POST",
        "in": null,
        "input": [
          "text",
          "image"
        ],
        "label": "Видео",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "video"
        ],
        "path": "/v1/videos",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "original_invoice_usd",
          "image_input_price": null,
          "image_output_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "No additional condition is declared in this pricing key.",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0048000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000048",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "The video-token rate is the primary price reference. Per-second headline estimates are separate references, not an extra charge.",
            "dimensions": {
              "conditions": "audio: without_audio",
              "quoted_unit": "per 1,000 video tokens"
            },
            "label": "Video-token price",
            "units": [
              {
                "amount": "0.0024000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": false,
                "estimate_only": true,
                "key": "video_tokens_without_audio",
                "label": "Video-token price",
                "native_amount_usd_per_unit": "0.0000024",
                "native_quantity": 1,
                "public_unit_label": "per 1,000 video tokens",
                "quantity": 1000,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "video_token"
              }
            ]
          },
          {
            "basis": "This estimate is not an additional charge or a fixed rate for the completed generation.",
            "dimensions": {
              "forecast_quantity": "one generation estimate"
            },
            "label": "Estimated generation cost",
            "units": [
              {
                "amount": "0.05184",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": false,
                "estimate_only": true,
                "key": "forecast_usd",
                "label": "Estimated generation cost",
                "native_amount_usd_per_unit": "0.05184",
                "native_quantity": 1,
                "public_unit_label": "estimate before generation",
                "quantity": 1,
                "quantity_is_estimate": true,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "request_estimate"
              }
            ]
          }
        ],
        "request_model_id": "bytedance/seedance-1-5-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/videos/{public_id}",
          "GET /v1/videos/{public_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0048000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000048",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0024000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": false,
            "estimate_only": true,
            "key": "video_tokens_without_audio",
            "label": "Video-token price",
            "native_amount_usd_per_unit": "0.0000024",
            "native_quantity": 1,
            "public_unit_label": "per 1,000 video tokens",
            "quantity": 1000,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.05184",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": false,
            "estimate_only": true,
            "key": "forecast_usd",
            "label": "Estimated generation cost",
            "native_amount_usd_per_unit": "0.05184",
            "native_quantity": 1,
            "public_unit_label": "estimate before generation",
            "quantity": 1,
            "quantity_is_estimate": true,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "request_estimate"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "bytedance/seedance-1-5-pro",
        "request_model_id": "bytedance/seedance-1-5-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "ByteDance: Seedance 1.5 Pro",
    "price": {
      "estimate_only": true,
      "in": null,
      "in_label": null,
      "out": 0.05184,
      "out_label": "estimate before generation",
      "scope_label": "Estimated generation cost",
      "sort_in": null,
      "sort_out": 0.05184,
      "varies": false
    },
    "pricing_profiles": [
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "draft_estimate_conversion_factor": "0.6",
          "draft_quantity_is_estimate_not_actual": true,
          "maker_model_id": "seedance-1-5-pro-251215",
          "output_audio": true,
          "quoted_unit": "1000000_video_tokens"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000048",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "draft_estimate_conversion_factor": "0.6",
              "draft_quantity_is_estimate_not_actual": true,
              "maker_model_id": "seedance-1-5-pro-251215",
              "output_audio": true,
              "quoted_unit": "1000000_video_tokens"
            },
            "key": "base",
            "label": "base",
            "profile_index": 0,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "draft_estimate_conversion_factor": "0.7",
          "draft_quantity_is_estimate_not_actual": true,
          "maker_model_id": "seedance-1-5-pro-251215",
          "output_audio": false,
          "quoted_unit": "1000000_video_tokens"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000024",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "draft_estimate_conversion_factor": "0.7",
              "draft_quantity_is_estimate_not_actual": true,
              "maker_model_id": "seedance-1-5-pro-251215",
              "output_audio": false,
              "quoted_unit": "1000000_video_tokens"
            },
            "key": "base",
            "label": "base",
            "profile_index": 1,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "draft_estimate_conversion_factor": "0.6",
          "draft_quantity_is_estimate_not_actual": true,
          "maker_model_id": "seedance-1-5-pro-251215",
          "output_audio": true,
          "quoted_unit": "1000000_video_tokens"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000024",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "draft_estimate_conversion_factor": "0.6",
              "draft_quantity_is_estimate_not_actual": true,
              "maker_model_id": "seedance-1-5-pro-251215",
              "output_audio": true,
              "quoted_unit": "1000000_video_tokens"
            },
            "key": "base",
            "label": "base",
            "profile_index": 2,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "native_profile_selection_pending": true,
          "scope": "manufacturer_reference"
        },
        "dimensions": {
          "billable_token_source": "usage.completion_tokens",
          "draft_estimate_conversion_factor": "0.7",
          "draft_quantity_is_estimate_not_actual": true,
          "maker_model_id": "seedance-1-5-pro-251215",
          "output_audio": false,
          "quoted_unit": "1000000_video_tokens"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0000012",
            "amount_unit": "usd_per_token",
            "conditions": {
              "billable_token_source": "usage.completion_tokens",
              "draft_estimate_conversion_factor": "0.7",
              "draft_quantity_is_estimate_not_actual": true,
              "maker_model_id": "seedance-1-5-pro-251215",
              "output_audio": false,
              "quoted_unit": "1000000_video_tokens"
            },
            "key": "base",
            "label": "base",
            "profile_index": 3,
            "quantity": "1",
            "rate_role": "binding_component_rate",
            "side": "out",
            "unit": "video_token"
          }
        ]
      },
      {
        "applicability": {
          "client_selectable": false,
          "no_method_admission_claim": true,
          "scope": "supplier_tariff_reference"
        },
        "dimensions": {},
        "label": "Ailoot Ultra · Tariff components",
        "units": [
          {
            "amount": "0.0048000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "video token",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000048",
            "key": "video_tokens",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000048",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          },
          {
            "amount": "0.0024000",
            "amount_unit": "usd_per_thousand_tokens",
            "basis": "audio=false",
            "billing_original_currency": "USD",
            "billing_original_rate": "0.0000024",
            "key": "video_tokens_without_audio",
            "label": "video token",
            "native_amount_usd_per_unit": "0.0000024",
            "native_quantity": 1,
            "quantity": 1000,
            "side": "out",
            "unit": "video_token"
          }
        ]
      }
    ],
    "public_id": "bytedance/seedance-1-5-pro",
    "short": "ByteDance Seedance 1.5 Pro는 동기화된 대사, 효과음, 음악과 함께 영상을 생성합니다. 화자, 감정, 카메라, 소리 분위기를 연출해 짧은 드라마, 음성 광고, 캐릭터 장면을 발전시킬 수 있습니다."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "ByteDance Seedance 1.5 Pro는 동기화된 대사, 효과음, 음악과 함께 영상을 생성합니다. 화자, 감정, 카메라, 소리 분위기를 연출해 짧은 드라마, 음성 광고, 캐릭터 장면을 발전시킬 수 있습니다.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_exact_canonical_sha256": "01b7c25413b821741884a60670b62e0674c777f4821dcb182eda0ddaf61235d7",
    "raw_model_js_projection_sha256": "b2262533c83af1cc73f52118e4bc100899c7484cb333519800e960a4df5533d9",
    "raw_model_json_sha256": "01b7c25413b821741884a60670b62e0674c777f4821dcb182eda0ddaf61235d7",
    "renderer_sha256": "6825a317438b70ab0939441dcebefece462384e77f7e96cce899605c4b208caa"
  },
  "sourceRevision": "a93b816fd8e5364002672d0357791e4438e7e24a9dcdb0f012f3a1fd22bd6a1f"
}
