텍스트에서 동영상
원본 미디어가 필요 없으면 텍스트 프롬프트로 시작하세요. seedance-2.0 또는 seedance-2.5를 선택하고 모델별 출력 설정을 확인하세요.
동영상 API
텍스트 기반 영상과 참조 워크플로를 위한 Seedance 동영상 API를 비교하세요. 지원 입력, 가격, 작업 폴링 및 완성 영상 조회를 확인하세요.
현재 Seedance 모델은 완료 토큰으로 과금됩니다. 길이는 예상 사용량에 영향을 주지만 정산 단위는 아닙니다. 결과 조회나 실패 보고를 위해 작업 ID를 보관하세요.
특정 작업을 위해
원본 미디어가 필요 없으면 텍스트 프롬프트로 시작하세요. seedance-2.0 또는 seedance-2.5를 선택하고 모델별 출력 설정을 확인하세요.
움직임 프롬프트로 시작 이미지를 움직이게 만드세요. 다른 입력 모드의 필드를 섞지 말고 선택한 모델의 이미지 기반 영상 가이드를 사용하세요.
장면의 시작과 끝을 유도하도록 첫 프레임과 필요한 경우 마지막 프레임을 제공하세요. 모델 가이드에서 프레임 역할과 미디어 요건을 확인하세요.
문서에 정의된 이미지, 동영상 및 오디오 역할에 따라 참조를 조합하세요. 이미지 또는 동영상 참조가 최소 하나 필요하며 오디오만으로는 부족합니다.
과금 단위
완료 100만 토큰당 USD입니다. 적용 요금은 모델, 출력 해상도 및 동영상 참조 조건에 따라 다릅니다.
운영 제한
연동 가이드
현재 카탈로그 범위
API ID, 작업, 제공업체 및 가격을 비교하세요. 사용 비용을 추정하기 전에 카탈로그 날짜와 각 작업의 과금 단위를 확인하세요.
Seedance 2.0을(를) 사용하여 동영상을 생성합니다.
POST /v1/video/seedance 동영상 작업 제출 참조 문서 GET /v1/jobs/{id} 작업 폴링 참조 문서 480p · 참조 동영상 포함
공식 가격
API Hop 요금 절감 5%
480p · 참조 동영상 없음
공식 가격
API Hop 요금 절감 5%
720p · 참조 동영상 포함
공식 가격
API Hop 요금 절감 5%
720p · 참조 동영상 없음
공식 가격
API Hop 요금 절감 5%
1080p · 참조 동영상 포함
공식 가격
API Hop 요금 절감 5%
1080p · 참조 동영상 없음
공식 가격
API Hop 요금 절감 5%
4k · 참조 동영상 포함
공식 가격
API Hop 요금 절감 5%
4k · 참조 동영상 없음
공식 가격
API Hop 요금 절감 5%
독립적으로 검증되지 않은 참고 가격입니다. 비용을 비교하기 전에 제공업체의 현재 요금, 청구 단위 및 적용 조건을 확인하세요.
Seedance 2.5을(를) 사용하여 동영상을 생성합니다.
POST /v1/video/seedance 동영상 작업 제출 참조 문서 GET /v1/jobs/{id} 작업 폴링 참조 문서 480p · 참조 동영상 포함
공식 가격
API Hop 요금 절감 2%
480p · 참조 동영상 없음
공식 가격
API Hop 요금 절감 2%
720p · 참조 동영상 포함
공식 가격
API Hop 요금 절감 2%
720p · 참조 동영상 없음
공식 가격
API Hop 요금 절감 2%
1080p · 참조 동영상 포함
공식 가격
API Hop 요금 절감 2%
1080p · 참조 동영상 없음
공식 가격
API Hop 요금 절감 2%
독립적으로 검증되지 않은 참고 가격입니다. 비용을 비교하기 전에 제공업체의 현재 요금, 청구 단위 및 적용 조건을 확인하세요.
요청 예시
이 예시는 Seedance 2.5 텍스트 기반 영상 작업 하나를 제출하고 jobId를 보관하며 시간 제한을 두고 GET /v1/jobs/{jobId}를 폴링합니다. COMPLETED 후에만 outputResult를 조회하고 FAILED와 CANCELLED는 별도로 처리하세요. 생성 영상 시연이 아닌 연동 예시입니다.
# Requires bash, curl and jq. A polling timeout does not cancel the job.
set -euo pipefail
BASE_URL="https://api.apihop.ai"
API_KEY='YOUR_API_KEY'
created=$(curl --fail-with-body --silent --show-error --max-time 30 \
"$BASE_URL/v1/video/seedance" \
-H "Authorization: Bearer $API_KEY" -H 'Content-Type: application/json' \
--data '{"model":"seedance-2.5","prompt":"A calm city street at dawn","duration":5,"resolution":"720p"}')
job_id=$(printf '%s' "$created" | jq -er '.data.jobId | select(. != null) | tostring')
deadline=$((SECONDS + 600))
while (( SECONDS < deadline )); do
job=$(curl --fail-with-body --silent --show-error --max-time 30 \
"$BASE_URL/v1/jobs/$job_id" -H "Authorization: Bearer $API_KEY")
status=$(printf '%s' "$job" | jq -er '.data.status')
case "$status" in
COMPLETED) printf '%s' "$job" | jq -e '.data.outputResult'; exit 0 ;;
FAILED|CANCELLED) printf 'Job %s: %s\n' "$job_id" "$status" >&2; exit 1 ;;
esac
sleep 5
done
printf 'Polling timed out; retain jobId for a later status check: %s\n' "$job_id" >&2
exit 1const baseUrl = "https://api.apihop.ai";
const headers = { Authorization: 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' };
async function request(path, options = {}) {
const response = await fetch(baseUrl + path, { ...options, headers, signal: AbortSignal.timeout(30000) });
if (!response.ok) throw new Error('HTTP ' + response.status);
const result = await response.json();
if (result.success === false) throw new Error(JSON.stringify(result.error));
return result.data;
}
const created = await request('/v1/video/seedance', { method: 'POST', body: JSON.stringify({"model":"seedance-2.5","prompt":"A calm city street at dawn","duration":5,"resolution":"720p"}) });
if (!created?.jobId) throw new Error('Missing data.jobId');
const deadline = Date.now() + 10 * 60 * 1000;
let completed = false;
while (Date.now() < deadline) {
const job = await request('/v1/jobs/' + encodeURIComponent(created.jobId));
if (job.status === 'COMPLETED') {
if (job.outputResult == null) throw new Error('Completed job has no outputResult');
console.log(job.outputResult);
completed = true;
break;
}
if (['FAILED', 'CANCELLED'].includes(job.status)) throw new Error('Job ' + job.status);
await new Promise(resolve => setTimeout(resolve, 5000));
}
if (!completed) throw new Error('Polling timed out; retain jobId for a later status check: ' + created.jobId);import json
import time
import urllib.request
base_url = "https://api.apihop.ai"
headers = {'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json'}
def request(path, body=None):
data = json.dumps(body).encode() if body is not None else None
req = urllib.request.Request(base_url + path, data=data, headers=headers)
with urllib.request.urlopen(req, timeout=30) as response:
result = json.load(response)
if result.get('success') is False:
raise RuntimeError(result.get('error'))
return result['data']
created = request('/v1/video/seedance', json.loads("{\"model\":\"seedance-2.5\",\"prompt\":\"A calm city street at dawn\",\"duration\":5,\"resolution\":\"720p\"}"))
job_id = str(created['jobId'])
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
job = request('/v1/jobs/' + job_id)
if job['status'] == 'COMPLETED':
if job.get('outputResult') is None:
raise RuntimeError('Completed job has no outputResult')
print(job['outputResult'])
break
if job['status'] in ('FAILED', 'CANCELLED'):
raise RuntimeError('Job ' + job['status'])
time.sleep(5)
else:
raise TimeoutError('Polling timed out; retain jobId for a later status check: ' + job_id) 계정 문서의 API 기본 URL을 사용하고 예시 자리표시자를 교체하세요. API 키는 Authorization 헤더로 전송하고 URL이나 커밋 파일에 포함하지 마세요.