Kling 3.0 Motion Control
이미지 한 장의 인물이 3~30초 영상 하나의 움직임을 720p 또는 1080p로 따라 하게 하고, 배경을 영상에서 가져올지 이미지에서 가져올지 고릅니다. 결과는 이미지 방향 기준 최대 10초, 영상 방향 기준 최대 30초입니다.
- 비동기: 생성 호출은 작업 ID를 반환하며, 작업이 성공하면 영상이 준비됩니다.
- 두 입력 모두 필수입니다. 인물 이미지 하나와 3~30초 길이의 동작 영상 하나입니다. 이미지 속 인물이 영상의 움직임을 따라 합니다.
character_orientation은 인물의 방향을 무엇에 맞출지와 결과 길이를 정합니다.image(기본값)는 최대 10초,video는 최대 30초입니다.duration필드는 없습니다. 결과는 선택한 방향의 제한 안에서 동작 영상 길이와 같습니다.- 완성된 영상의 초 단위로, 720p 또는 1080p 요금이 과금되며 생성 시 보류된 금액에서 정산됩니다. 실패한 작업은 비용이 들지 않습니다.
이 문서 작성 시점에 두 Kling 모션 컨트롤 모델은 실시간 GET /v1/media/models 목록에 없습니다. 목록에 없는 동안 작업을 만들면 503 processing_unavailable로 응답하며 비용은 청구되지 않습니다. 개발하기 전에 목록을 확인하세요.
API Explorer에서 이 모델을 엽니다. BeatAPI API 키를 입력해 작업을 만드세요. 실제 호출이며 본인 잔액에서 과금됩니다.
모델 ID
두 모델이 이 엔드포인트와 같은 입력을 사용합니다. 아래 값은 게이트웨이 계약에서 그대로 가져왔으며, background_source는 Kling 3.0 Motion Control만 받습니다.
엔드포인트와 인증
POST https://api.beatapi.io/v1/videos/tasks
Authorization
string
필수
BeatAPI API 키를 Bearer <BEATAPI_API_KEY>로 보내세요. 키는 대시보드에서 만듭니다. 키는 서버에 보관하고, 브라우저나 모바일 앱에 포함하지 마세요.
본문은 Content-Type: application/json과 함께 JSON으로 보냅니다. Idempotency-Key는 선택 사항입니다. 논리적 요청마다 고유한 값(최대 255자)을 보내고, 완전히 같은 본문을 재시도할 때만 다시 사용하세요. 24시간 안에 같은 키와 본문으로 재시도하면 첫 응답을 Idempotent-Replayed: true와 함께 다시 반환하고, 같은 키에 다른 본문을 보내면 409 idempotency_conflict를 반환합니다. 2xx 이외의 응답은 저장되지 않으므로 400이나 402 이후의 재시도는 다시 실행됩니다.
요청 처리 방식
작업 만들기
아래 파라미터를 엔드포인트로 POST하세요. 201은 작업이 접수되었고 가격만큼 잔액이 보류되었다는 뜻이며, 작업은 백그라운드에서 실행됩니다. data.id를 저장하세요.
완료 기다리기
status가 succeeded 또는 failed가 될 때까지 GET /v1/tasks/{task_id}를 호출하고, 호출 사이에 data.poll_after_seconds만큼 기다리세요(이미지 5초, 영상 8초). 또는 task.succeeded와 task.failed에 대한 웹훅을 등록하세요. 처리 시간 초과로 중단된 작업은 이벤트를 보내지 않으므로 폴링은 대비책으로 유지하세요.
입력 모드
요청 파라미터
model
string
필수
실행할 모델입니다.
값: kling-3-motion-control
값이 잘못된 경우
- 누락:
"model" is required - 이 엔드포인트에 이미지 모델을 보낸 경우:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
prompt
string
선택
인물이나 장면에 대한 선택적 텍스트 안내입니다. 움직임 자체는 영상에서 가져옵니다.
길이: 2500자 이하
- 길이는 문자 수로 계산합니다(CJK 문자도 1자). 빈 문자열도 받습니다.
값이 잘못된 경우
- 제한보다 긴 경우:
"prompt" has an unsupported length
images
string[]
필수
인물 이미지: 링크는 정확히 하나입니다. 움직임을 따라 할 인물입니다.
항목 수: 1–1
각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.
- 공개 HTTPS 링크 하나가 든 목록을 보내세요. 로컬 파일은
POST /v1/files로 업로드한 뒤 반환된data.url을 여기에 쓰면 됩니다. - 작업 생성 시 이미지 크기, 형식, 픽셀 크기는 검사하지 않습니다.
값이 잘못된 경우
- 누락:
"images" is required - 빈 목록:
"images" requires at least 1 item - 링크가 둘 이상:
"images" accepts at most 1 items - https:// 링크가 아닌 경우:
"images[0]" must be a public HTTPS URL
reference_videos
string[]
필수
동작 영상: 링크는 정확히 하나입니다. images의 인물이 이 영상의 움직임을 따라 합니다.
항목 수: 1–1
각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.
- 길이는 3~30초여야 합니다(미디어 제한 참고). 결과는
character_orientation으로 정한 제한 안에서 이 영상 길이와 같습니다. - 호스트가 허용하면 게이트웨이는 작업 생성 전에 바이트 범위 요청으로 파일 헤더에서 길이를 읽습니다.
- 로컬 파일은
POST /v1/files로 업로드하고(영상 최대 100 MB) 반환된data.url을 여기에 쓰면 됩니다.
생성된 영상의 초 수만큼 과금되므로 필요한 동작만 남도록 클립을 잘라 두세요. character_orientation: "image"에서는 결과가 최대 10초입니다.
값이 잘못된 경우
- 누락:
"reference_videos" is required - 빈 목록:
"reference_videos" requires at least 1 item - 링크가 둘 이상:
"reference_videos" accepts at most 1 items - https:// 링크가 아닌 경우:
"reference_videos[0]" must be a public HTTPS URL - 3초보다 짧거나 30초보다 긴 경우:
reference_videos[0] is 2 seconds long; this model takes reference video of 3 to 30 seconds. - 호스트가 오류나 빈 파일로 응답하는 경우:
reference_videos[0] could not be downloaded: the URL returned HTTP 404.
resolution
string
선택기본값: 720p
출력 해상도이자 가격 등급입니다. 1080p는 720p보다 초당 가격이 높습니다.
허용 값: 720p, 1080p
기본값: 720p
- 소문자만 가능합니다. 생략하면
720p가 사용됩니다.
값이 잘못된 경우
- 목록에 없는 값(예:
480p,4k,1080P):"resolution" must be one of: [720p 1080p]
character_orientation
string
선택기본값: image
인물의 방향을 인물 이미지(image)에 맞출지 동작 영상(video)에 맞출지 정합니다.
허용 값: image, video
기본값: image
- 결과의 최대 길이도 정합니다.
image는 최대 10초,video는 최대 30초입니다(방향에 따른 길이 참고). - 생략하면
image가 사용되므로, 10초보다 긴 동작 영상에는video를 명시해야 합니다. - 작업 생성 시 잔액에서 보류되는 금액도 정합니다. 방향이 허용하는 최대 길이 기준입니다(과금 참고).
값이 잘못된 경우
- 목록에 없는 값:
"character_orientation" must be one of: [image video]
background_source
string
선택기본값: input_video
결과의 배경을 어디서 가져올지 정합니다. input_video는 동작 영상의 배경을, input_image는 인물 이미지의 배경을 유지합니다.
허용 값: input_video, input_image
기본값: input_video
- 생략하면
input_video가 사용됩니다. - 이 필드는 Kling 3.0 Motion Control만 받습니다.
값이 잘못된 경우
- 목록에 없는 값:
"background_source" must be one of: [input_video input_image]
게이트웨이는 작업을 만들기 전에 다음 조합도 검사합니다.
- 인물 이미지 정확히 하나와 업로드한 3~30초 동작 영상 하나. character_orientation image에서는 출력이 최대 10초입니다
입력 미디어 제한
게이트웨이는 작업을 만들기 전에 모든 입력을 읽고, 아래 제한을 벗어난 입력은 해당 입력을 명시한 400 bad_request로 거부합니다. 과금되지 않습니다.
- 작업 생성 시 길이 제한을 검사하는 것은 동작 영상뿐입니다. 파일 헤더로 측정하며 3~30초, 허용 오차 0.1초입니다. 메시지에는 필드 오류처럼 0부터 센 위치로 입력이 표시됩니다:
reference_videos[0] is 45 seconds long; this model takes reference video of 3 to 30 seconds. - 길이를 읽을 수 없는 클립(호스트가 바이트 범위 요청을 허용하지 않거나 파일이 MP4·MOV가 아님)은 이 단계에서 거부되지 않으며 측정되지도 않습니다. 생성 호출은 호스트가 오류나 빈 파일로 응답할 때만 거부됩니다(예:
reference_videos[0] could not be downloaded: the URL returned HTTP 404.). - 최대 10초 클립에는
image를 사용하세요. 10초보다 긴 동작 영상에는character_orientation: "video"를 보내세요. - 작업 생성 시 이미지 크기, 형식, 픽셀 크기는 검사하지 않습니다.
- 로컬 파일이 있나요?
POST /v1/files로 업로드하고(png, jpg, jpeg, webp 이미지 최대 50 MB, mp4·mov 영상 최대 100 MB) 반환된data.url을 전달하세요.
방향에 따른 길이
duration 필드는 없습니다. 결과는 동작 영상 길이와 같으며, character_orientation이 상한을 정합니다.
- 작업이 끝나면 생성된 영상에 대해 보고된 사용량으로 금액을 정산하며, 보통 길이에 정가 초당 요금을 곱한 값입니다. 보류 금액과의 차액은 반환됩니다. 사용량이 보고되지 않으면 보류 금액이 청구됩니다. 과금을 참고하세요.
이 모델이 받지 않는 필드
다음 필드를 보내면 무시되지 않고 과금 전에 거부됩니다.
duration,aspect_ratio,generate_audio,seed,task_type,output_format,reference_images,reference_audios,quality,sound,watermark및 다른 영상 모델의 모든 필드 →field "duration" is not supported by model kling-3-motion-control(보낸 필드 포함).- API가 전혀 모르는 필드 →
unknown field: <name>.
요청 예시
동작 전이
영상 링크를 3~30초 길이의 직접 준비한 MP4 또는 MOV로 바꾸세요(공개 샘플 영상은 없습니다). character_orientation을 생략했으므로 image가 적용되어 결과는 최대 10초입니다.
1080p, 방향은 영상 기준
10초보다 긴 클립: video에서는 최대 30초 결과가 가능합니다. 영상 링크를 직접 준비한 클립으로 바꾸세요. 결과가 길수록 작업 생성 시 잔액에서 더 많이 보류됩니다.
인물 이미지의 배경 유지
결과에 동작 영상의 배경 대신 인물 이미지의 배경이 유지됩니다. 영상 링크를 직접 준비한 클립으로 바꾸세요.
응답
작업 생성(201)
작업 객체입니다. 작업이 성공할 때까지 output는 null입니다. ‘실행 중’으로 표시된 필드는 작업이 끝나면 사라집니다.
완료된 작업
GET /v1/tasks/{task_id}는 HTTP 200과 함께 status: "succeeded", 그리고 data.output에 결과를 반환합니다.
출력 필드
실패한 작업
실패한 작업도 GET /v1/tasks/{task_id}에서는 HTTP 200입니다. 실패 정보는 본문에 있습니다. 보류 금액이 전액 환불되므로 과금되지 않습니다.
전체 예시
작업을 만들고, 서버의 폴링 안내에 따라 기다린 뒤 결과 URL을 출력합니다. 환경 변수에 BEATAPI_API_KEY를 설정하고 requests를 설치하세요.
과금
- 이 가격은 모델이 목록에 오른 뒤부터 적용됩니다. 그전까지는 생성 요청이 거부되며 비용이 청구되지 않습니다.
- 완성된 영상의 초 단위로
resolution에 따라 과금됩니다.character_orientation과 프롬프트는 요금에 영향을 주지 않습니다. 아래 표는 8초 결과 기준 가격입니다. - 결과가 동작 영상 길이와 같으므로 작업 생성 시점에는 최종 가격을 알 수 없습니다. 게이트웨이는 방향이 허용하는 최대치(
image는 10초,video는 30초)를 해상도 요금으로 보류합니다.image에서는 약 1.40(1080p),video에서는 약 4.20(1080p)입니다. 잔액이 이 금액을 감당하지 못하면 생성 호출이402 insufficient_credits로 실패합니다. - 작업이 끝나면 생성된 영상에 대해 보고된 사용량(보통 길이에 정가 초당 요금을 곱한 값)으로 정산하고 나머지 보류 금액은 반환합니다. 사용량이 보고되지 않으면 보류 금액이 청구됩니다. 청구 금액은
usage.credits_charged와usage.credits_settled에 표시됩니다. 이 모델의usage.billable_duration_seconds는 완성된 영상의 길이가 아니라 생성 시 보류한 초 수(10 또는 30)를 나타내므로, 실제 지불 금액은 크레딧 필드에서 확인하세요. - 실패한 작업은 제출 후 콘텐츠 검수에서 거부된 경우를 포함해 전액 환불됩니다. 작업이 생기기 전에 거부된 요청은 비용이 들지 않습니다.
현재 정가이며 가격 페이지와 같습니다. 별도 할인 계약이 있는 계정은 더 적게 지불하며, 실제 청구 금액은 항상 작업의 data.usage에서 확인할 수 있습니다.
자주 발생하는 오류
HTTP 오류 요약
작업이 생성되기 전의 오류는 2xx가 아닌 응답으로 오며 과금되지 않습니다. error.code 또는 error.retryable로 분기하세요. message에 문제가 표시됩니다. 전체 목록과 재시도 정책은 오류에 있습니다.
두 모델의 차이
인증
API 키를 Authorization: Bearer <BEATAPI_API_KEY>로 보내세요.
헤더
본문은 Content-Type: application/json과 함께 JSON으로 보냅니다. Idempotency-Key는 선택 사항입니다. 논리적 요청마다 고유한 값(최대 255자)을 보내고, 완전히 같은 본문을 재시도할 때만 다시 사용하세요. 24시간 안에 같은 키와 본문으로 재시도하면 첫 응답을 Idempotent-Replayed: true와 함께 다시 반환하고, 같은 키에 다른 본문을 보내면 409 idempotency_conflict를 반환합니다. 2xx 이외의 응답은 저장되지 않으므로 400이나 402 이후의 재시도는 다시 실행됩니다.
요청
인물 이미지: 링크는 정확히 하나입니다. 움직임을 따라 할 인물입니다.
항목 수: 1–1
각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.
- 공개 HTTPS 링크 하나가 든 목록을 보내세요. 로컬 파일은
POST /v1/files로 업로드한 뒤 반환된data.url을 여기에 쓰면 됩니다. - 작업 생성 시 이미지 크기, 형식, 픽셀 크기는 검사하지 않습니다.
값이 잘못된 경우
- 누락:
"images" is required - 빈 목록:
"images" requires at least 1 item - 링크가 둘 이상:
"images" accepts at most 1 items - https:// 링크가 아닌 경우:
"images[0]" must be a public HTTPS URL
실행할 모델입니다.
값: kling-3-motion-control
값이 잘못된 경우
- 누락:
"model" is required - 이 엔드포인트에 이미지 모델을 보낸 경우:
"model" nano-banana-2 is served by POST /v1/images/tasks, not this endpoint
동작 영상: 링크는 정확히 하나입니다. images의 인물이 이 영상의 움직임을 따라 합니다.
항목 수: 1–1
각 항목은 공개 https:// URL입니다. 로컬 파일은 POST /v1/files로 먼저 업로드한 뒤 반환된 data.url을 전달하세요.
- 길이는 3~30초여야 합니다(미디어 제한 참고). 결과는
character_orientation으로 정한 제한 안에서 이 영상 길이와 같습니다. - 호스트가 허용하면 게이트웨이는 작업 생성 전에 바이트 범위 요청으로 파일 헤더에서 길이를 읽습니다.
- 로컬 파일은
POST /v1/files로 업로드하고(영상 최대 100 MB) 반환된data.url을 여기에 쓰면 됩니다.
참고: 생성된 영상 초 수만큼 과금되므로 필요한 동작만 남도록 클립을 자르세요. character_orientation: "image"를 쓰면 결과는 최대 10초입니다.
값이 잘못된 경우
- 누락:
"reference_videos" is required - 빈 목록:
"reference_videos" requires at least 1 item - 링크가 둘 이상:
"reference_videos" accepts at most 1 items - https:// 링크가 아닌 경우:
"reference_videos[0]" must be a public HTTPS URL - 3초보다 짧거나 30초보다 긴 경우:
reference_videos[0] is 2 seconds long; this model takes reference video of 3 to 30 seconds. - 호스트가 오류나 빈 파일로 응답하는 경우:
reference_videos[0] could not be downloaded: the URL returned HTTP 404.
결과의 배경을 어디서 가져올지 정합니다. input_video는 동작 영상의 배경을, input_image는 인물 이미지의 배경을 유지합니다.
허용 값: input_video, input_image
기본값: input_video
- 생략하면
input_video가 사용됩니다. - 이 필드는 Kling 3.0 Motion Control만 받습니다.
값이 잘못된 경우
- 목록에 없는 값:
"background_source" must be one of: [input_video input_image]
인물의 방향을 인물 이미지(image)에 맞출지 동작 영상(video)에 맞출지 정합니다.
허용 값: image, video
기본값: image
- 결과의 최대 길이도 정합니다.
image는 최대 10초,video는 최대 30초입니다(방향에 따른 길이 참고). - 생략하면
image가 사용되므로, 10초보다 긴 동작 영상에는video를 명시해야 합니다. - 작업 생성 시 잔액에서 보류되는 금액도 정합니다. 방향이 허용하는 최대 길이 기준입니다(과금 참고).
값이 잘못된 경우
- 목록에 없는 값:
"character_orientation" must be one of: [image video]
인물이나 장면에 대한 선택적 텍스트 안내입니다. 움직임 자체는 영상에서 가져옵니다.
길이: 2500자 이하
- 길이는 문자 수로 계산합니다(CJK 문자도 1자). 빈 문자열도 받습니다.
값이 잘못된 경우
- 제한보다 긴 경우:
"prompt" has an unsupported length
출력 해상도이자 가격 등급입니다. 1080p는 720p보다 초당 가격이 높습니다.
허용 값: 720p, 1080p
기본값: 720p
- 소문자만 가능합니다. 생략하면
720p가 사용됩니다.
값이 잘못된 경우
- 목록에 없는 값(예:
480p,4k,1080P):"resolution" must be one of: [720p 1080p]
응답
작업 객체입니다. 작업이 성공할 때까지 output는 null입니다. ‘실행 중’으로 표시된 필드는 작업이 끝나면 사라집니다.

