본문으로 건너뛰기

Seedance 2.0 Mini로 클립을 이어 붙입니다. 영상의 마지막 프레임에서 4초에서 15초 길이의 새 구간이 시작되고(소리 포함), 원본과 이어진 부분이 합쳐진 파일 하나를 480p 또는 720p로 받습니다.

최저가 $0.025/초

플레이그라운드

요청 보내기

빠른 시작

예시는 선택한 엔드포인트의 공개 파라미터 정의를 사용합니다. API 키와 예시 미디어를 바꾼 뒤 서버에서 요청하세요.

SDK 및 연동
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

API 인증

API 키는 서버 환경 변수 SPICY_API_KEY에 보관하세요. Bearer 인증을 사용하고 JSON 요청에는 Content-Type: application/json을 지정하세요.

Authorization: Bearer $SPICY_API_KEY
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "bytedance/seedance-2.0-mini/video-extend",
  "input": {
    "bitrate_mode": "standard",
    "duration_seconds": 5,
    "enable_web_search": false,
    "generate_audio": true,
    "resolution": "720p",
    "video_url": "https://example.com/reference.mp4"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

이 모델의 입력 스키마에서 뽑아낸 예시입니다. API도 모든 요청을 같은 스키마로 검증합니다.

입력 파라미터

이 필드들은 요청 본문의 input 객체 안에 넣습니다. 이름과 타입은 API와 동일합니다. 기본값이 적혀 있지 않은 필드는 임의로 가정하지 마세요.

video_urlstring필수

이어 붙일 클립입니다. MP4, MOV, WebM이며 60초까지 가능합니다. 마지막 프레임이 새 구간의 시작 프레임이 되므로, 깨끗하고 선명한 프레임에서 잘라 주세요. 원본은 과금되지 않습니다.

기본값
지정되지 않음
제약 조건
minLength:1
format:"uri"
contentMediaType:["video/mp4","video/webm","video/quicktime"]
watermarkboolean선택

새 구간에 모델 자체의 눈에 보이는 "AI generated" 워터마크를 넣습니다. 기본값은 꺼짐이며, 게시하는 곳에서 AI로 만든 영상에 표시를 요구할 때 켜세요. 가격에는 영향이 없습니다.

기본값
false
bitrate_modestring선택

모델이 전달하는 새 구간의 인코딩 비트레이트로, `standard`(기본값) 또는 `high`입니다. high는 미세한 질감과 빠른 움직임을 더 선명하게 유지하는 대신 구간 파일이 훨씬 커집니다. 합쳐진 파일은 플랫폼이 다시 인코딩합니다. 가격에는 영향이 없습니다.

기본값
"standard"
허용 값
"standard""high"
seedinteger선택

0에서 2147483647 사이의 정수입니다. 생략하면 실행마다 다른 값이 정해집니다. 바꾼 항목의 효과를 하나씩 비교할 때 고정하세요. 비교를 위한 도구이며 프레임 단위로 같은 결과를 보장하지는 않습니다.

기본값
지정되지 않음
제약 조건
minimum:0
maximum:2147483647
enable_web_searchboolean선택요금에 영향

기본값은 꺼짐입니다. 켜면 모델이 새 구간을 그리기 전에 프롬프트와 관련된 정보를 웹에서 검색할 수 있습니다. 켠 요청은 표준보다 높은 웹 검색 요금으로 과금되며, 제출 전에 보이는 견적에 이미 반영되어 있습니다.

기본값
false
generate_audioboolean선택

기본값은 켜짐이며, 새 구간에 생성된 소리가 붙습니다. 이 요금 구간에서는 꺼도 가격이 내려가지 않습니다. 원본은 어느 쪽이든 자신의 소리를 유지하며, 한쪽이 무음이면 합쳐진 파일은 무음으로 채워집니다.

기본값
true
duration_secondsinteger선택요금에 영향

새 구간의 길이로, 정수 초 4에서 15 사이이거나 모델이 정하게 하는 -1입니다. -1이면 먼저 15초를 잡아 두고 실제로 전달된 길이에 맞춰 정산합니다. 기본값은 5입니다. 원본은 앞에 붙으며 과금되지 않습니다.

기본값
5
허용 값
-1456789101112131415
resolutionstring선택요금에 영향

새 구간의 크기로, 480p 또는 720p이며 기본값은 720p입니다. 원본에 맞추세요. 이 설정은 새 구간의 화질만 정하므로, 낮추면 새 부분이 원본보다 부드럽게 보입니다. 합쳐진 파일은 클립의 화면 구도를 유지하며 검은 띠는 생기지 않습니다. 이음새를 맞추기 위해 화면 가장자리가 몇 퍼센트 정도 잘리거나 조정될 수 있습니다. 모델이 돌려준 영상의 화면 비율이 눈에 띄게 다르면 새 구간을 화면에 꽉 차게 확대해 가운데에 맞추고, 넘치는 부분은 잘라 냅니다. 가격을 결정합니다.

기본값
"720p"
허용 값
"480p""720p"
last_image_urlstring선택

선택 사항인 목표 끝 프레임입니다. 새 구간이 모델이 정한 곳이 아니라 이 이미지에서 끝납니다. 전환이나 익숙한 프레임으로 돌아오는 연출에 유용합니다. 클립의 마지막 프레임과 같은 비율로 주세요. 다르면 맞춰 잘립니다. 각 변은 300에서 6000픽셀이어야 하며, 더 작은 이미지는 과금 전에 입력 검사에서 거부됩니다.

기본값
지정되지 않음
제약 조건
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]
promptstring선택

선택 사항입니다. 이어서 일어나는 일, 즉 이어지는 동작, 카메라 움직임, 소리를 적습니다. 생략하면 모델이 마지막 프레임을 보고 움직임을 정합니다. 피사체와 장면은 시작 프레임이 이미 정해 두므로, 글은 움직임에 쓰세요.

기본값
지정되지 않음
제약 조건
minLength:1

작업 추적

HTTP 202는 접수되었다는 뜻이며 생성 완료가 아닙니다. 반환된 taskId를 저장하고 같은 작업을 조회하세요. 결과를 기다리는 동안 작업을 다시 생성하지 마세요.

접수 응답
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

접수 응답에 이번 예상 비용이 포함되므로 앱의 작업 기록과 청구 화면에 같은 금액을 표시할 수 있습니다.

작업 조회
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

약 2초 간격으로 시작해서 점점 간격을 넓히세요. 종료 상태가 나오면 멈추고, 연결이 끊겼더라도 원래 taskId를 그대로 조회하세요. 다시 생성할 때는 처음에 쓴 Idempotency-Key와 본문을 그대로 써야 합니다.

아니면 콜백이 찾아오게 하세요
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

작업을 만들 때 callBackUrl을 넘기면 완료된 레코드가 POST로 전달됩니다 — 폴링 루프가 아예 필요 없습니다. 모든 전달에는 X-Webhook-Timestamp, X-Webhook-Signature, X-Webhook-Payload-Version이 함께 옵니다. 서명은 taskId.timestamp.sha256(body)에 대한 base64 HMAC-SHA256이므로 반드시 원본 바이트로 검증해야 합니다. JSON을 파싱했다가 다시 직렬화하면 바이트가 달라져 검증이 실패합니다. 실패한 전달은 재시도되므로 같은 taskId가 두 번 올 수 있습니다. 핸들러를 멱등하게 만드세요. 먼저 2xx로 답하고 처리는 그다음에 — 응답이 느리면 전달 실패로 간주됩니다.

결과 읽기

state가 succeeded일 때만 output을 사용하세요. 실패 시 errorCode, errorMessage, request_id로 원인을 확인하세요. 예시 비용과 상태는 실제 청구 내역이 아닙니다.

완료 응답 예시
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "bytedance/seedance-2.0-mini/video-extend",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp4",
          "mime": "video/mp4",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp4?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

사용 가능한 파일은 assets[].url에서 바로 열거나 다운로드할 수 있으며 API Authorization 헤더가 필요하지 않습니다. 서명 URL은 expiresAt에 만료됩니다. 보관 기간 내에 작업을 다시 조회하면 URL이 갱신됩니다. 처리 중이거나 사용할 수 없는 파일에는 URL이 없습니다. 서명 URL은 비공개로 보관하세요.

SDK 및 연동

앱, 터미널, AI 어시스턴트 또는 시각적 워크플로에서 SpicyAPI를 사용하세요. 원하는 설정 가이드를 선택하세요.

ComfyUI에서 쓰기

ComfyUI Manager나 아래 명령으로 SpicyAPI 노드를 설치한 뒤 캔버스에서 Seedance 2.0 Mini · Video Extend를 검색하세요. 노드는 이 페이지와 같은 옵션을 제공하며, 실행하기 전에 가격을 보여 줍니다.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi