중국 본토 사용자 안내: 중국 본토 사용자는
https://toapis.cn 를 API 엔드포인트(Base URL)로 사용해 주세요. 본 문서의 예시에서 https://toapis.com 을 https://toapis.cn 로 바꿔 주세요.generation.completed, generation.failed를 전송하고 테스트는 endpoint.test입니다. 최소 1회 전달이므로 동일 event ID를 멱등 처리하세요.
Token 편집에서 HTTPS 기본 URL, 한 번만 표시되는 32-byte secret, 활성화와 테스트를 설정합니다. callback_url이 없으면 기본 URL을 사용하며, 지정 시 같은 scheme/host/port의 path/query만 변경할 수 있습니다. 미설정 시 400 webhook_not_configured입니다.
data.error 는 일부 작업 조회의 reason 필드를 보장하지 않습니다.
task_type: image|video. 결과는 공개 작업 조회 형식과 같으며 channel ID, upstream task ID/key, credential, PrivateData는 포함하지 않습니다.
사용량, 과금 및 작업 조회의 차이
이미지와 동영상 성공 이벤트는data.usage를 포함할 수 있습니다. 과금 수량, 확인 가능한 모델 토큰 내역, 도구 사용 횟수의 정의는 작업 조회와 같습니다. 작업 사용량 필드를 참고하세요. 동영상 이벤트는 data.generation도 포함할 수 있습니다. Seedance 메타데이터와 호환 사용량은 동영상 작업 조회를 참고하세요.
data.billing은 status, credits, cost_usd를 포함할 수 있습니다. 금액은 십진수 문자열이며 pending이면 생략합니다. refunded는 순 청구 금액이 0으로 확인되었음을 뜻합니다. 확인할 수 없는 객체는 생략하지만 무료라는 의미는 아닙니다. Webhook과 작업 조회는 같은 확인 조건을 사용합니다. 제출 시 한 번에 과금되는 고정 과금 작업을 포함해 과금이 확인되면 둘 다 settled와 실제 금액을 반환합니다. data.usage에 charge_type 등 과금 수량이 있으면 data.billing도 항상 settled입니다.
data.billing 필드 값
성공 이벤트는
settled이며, 정산에서 선차감 금액을 전부 돌려준 경우에는 refunded입니다. 실패 이벤트는 환불이 완료된 뒤 전송되며 refunded입니다. 금액을 확인할 수 없으면 data.billing 객체 전체를 생략합니다.
data.usage 필드 값
charge_type부터 input_images까지는 과금 수량이며 data.billing.status=settled와 함께만 반환합니다. 토큰 내역과 도구 사용 횟수는 업스트림 모델이 제공한 대로 독립적으로 반환합니다. 반환하지 않는 필드는 0으로 채우지 않고 생략합니다.
Webhook은 이벤트 생성 시점의 스냅샷이며 작업 조회는 가장 최근에 확인된 상태를 읽습니다. 누락된 사용량이나 금액을 기다리지 않고 전달하며 재시도 규칙도 바꾸지 않습니다. 생성된 이벤트를 나중에 보완하지 않고 재시도 시 원래 이벤트 본문을 사용합니다.
이벤트 구조와 api_version: "v1"은 유지됩니다. Webhook은 data.task_id, SUCCESS / FAILURE, 문자열 진행률 "100%"를 사용합니다. 작업 조회는 id, 소문자 상태, 정수 진행률을 사용합니다. 시간 필드는 공개 generation.task 조회와 이름과 의미가 같으며 모두 Unix 초입니다. data.created_at은 작업 제출 시각, data.finished_at은 종료 시각이며, 성공 시 data.completed_at과 data.expires_at(결과 만료 시각, 종료 시각 + 24시간)도 반환합니다. 값이 없는 필드는 생략합니다. 기존 data.submitted_at은 data.created_at으로 대체되어 더 이상 반환되지 않습니다. 이벤트 최상위 created_at은 이벤트 생성 시각이며 작업 제출 시각이 아닙니다. 접근 정책에 따라 두 응답의 미디어 URL은 다를 수 있습니다.
Seedance 동영상 성공 이벤트 예시
예시는 필드 구조를 보여 주며 모델의 현재 가격이나 고정 과금 방식을 나타내지 않습니다. 실제 작업에서 반환된 필드와 금액을 확인하세요. Seedance 성공 이벤트의data.result.data[]에도 fallback_url과 fallback_last_frame_url이 포함될 수 있습니다. url과 last_frame_url을 우선 사용하고 원본 URL에 접근할 수 없을 때만 해당 대체 URL을 사용하세요. 대체 필드 생략은 작업 실패를 의미하지 않습니다. 이벤트는 생성 시점의 URL을 유지하며 이후 사본이 변경되어도 기존 이벤트나 재시도 페이로드를 수정하지 않습니다. 필드 정의와 사용 방법은동영상 작업 조회를 참고하세요.
event_id + "." + timestamp + "." + raw_request_body, 알고리즘은 HMAC-SHA256입니다. 최초 요청은 5분 초과 timestamp를 거부하고 secret 회전 후 24시간은 신/구 서명을 모두 허용합니다.
Python
Node.js
Go
2xx만 성공이고 3xx는 따라가지 않으며 4xx/5xx는 재시도합니다. timeout은 10초입니다. 매 전달마다 HTTPS, userinfo, fragment, 잘못된 port, SSRF, DNS/IP와 DNS rebinding을 검증합니다. 실패 시 상태 조회를 대체 경로로 사용하고 만료 가능한 결과 URL을 즉시 저장하세요. 실명 인증, 결제, OAuth callback은 제외됩니다. 속도 제한.