페이지를 준비하는 중…
▥ Seedance 2.5 출시! ›
요금제문서업데이트계정
가이드개요Image APIVideo API
이 페이지의 내용빠른 시작인증엔드포인트라우팅 모드결제 및 청구작업 및 폴링업로드웹훅오류
리소스모델 카탈로그요금 안내API 키웹훅 엔드포인트OpenAPI 명세서비스 상태제품 업데이트
개요Image APIVideo API
문서

MLMux API

하나의 API 키와 단일 요청 형식으로 이미지 및 비디오 생성 모델을 사용하세요. 이미지는 응답으로 즉시 반환되며, 비디오는 폴링하거나 웹훅으로 수신할 수 있는 작업으로 실행됩니다.

빠른 시작

  1. 01

    API 키 생성하기

    콘솔 → API 키에서 키를 생성하세요. 전체 키는 한 번만 표시되므로 MLMUX_API_KEY 등으로 즉시 저장하세요.

  2. 02

    요청 보내기

    모델 ID와 프롬프트를 사용하여 이미지 또는 비디오 엔드포인트를 호출하세요. 사용량은 키를 소유한 계정에 청구됩니다.

  3. 03

    결과 받기

    이미지 요청은 응답으로 URL을 반환합니다. 비디오 요청은 작업을 반환하며, 해당 작업의 poll_url을 폴링하거나 웹훅을 구독할 수 있습니다.

인증

https://api.mlmux.com으로 보내는 모든 요청의 Authorization: Bearer 헤더에 키를 포함하세요. 키는 sk-로 시작합니다. API는 다른 헤더나 쿼리 문자열에 포함된 키를 허용하지 않습니다.

키가 작동하는지 확인하려면 호출 가능한 모델 목록을 조회하세요:

GEThttps://api.mlmux.com/v1/models
curl https://api.mlmux.com/v1/models \
  -H "Authorization: Bearer $MLMUX_API_KEY"
응답
{
  "object": "list",
  "data": [
    { "id": "nano-banana-2", "object": "model", "owned_by": "platform" },
    { "id": "model/seedance-2.5-max", "object": "model", "owned_by": "platform" }
  ]
}

엔드포인트

모든 엔드포인트는 https://api.mlmux.com 아래에 있습니다. 별도의 언급이 없는 한 요청 및 응답 본문은 JSON입니다.

메서드경로설명
GET/v1/models호출할 수 있는 모델 ID 목록을 조회합니다.
POST/v1/images/generations프롬프트로부터 이미지를 생성합니다.
POST/v1/images/edits입력 이미지를 편집하거나 합성합니다. JSON 또는 multipart를 지원합니다.
GET/v1/images/generations/{task_id}비동기 이미지 작업을 조회합니다. 편집 작업은 /v1/images/edits/{task_id}를 사용합니다.
POST/v1/videos/generations비디오 작업을 생성합니다.
GET/v1/videos/generations/{task_id}비디오 작업을 조회합니다.
GET/v1/tasks/{task_id}ID로 모든 작업을 조회합니다.
POST/v1/tasks/{task_id}/cancel완료되지 않은 작업을 취소합니다.
POST/v1/uploads참조 파일을 업로드하고 URL을 가져옵니다.
GET/v1/account/balance크레딧 잔액을 조회합니다.

라우팅 모드

업스트림 티어를 선택하려면 요청 본문에 route_mode를 설정하세요. 요청은 지정된 티어에 유지되며 다른 티어로 자동 전환되지 않습니다. 해당 모델에 대해 해당 티어가 비활성화되어 있으면 요청은 route_mode_disabled 오류와 함께 실패합니다. 이 필드를 생략하면 MLMux는 API 키에 설정된 라우트 모드를 사용하고, 그 다음 모델 기본값인 official-cheap을 사용합니다.

값설명
official제공업체의 공식 라우트이며, 제공업체의 정가로 청구됩니다.
official-cheap더 저렴한 공식 라우트입니다. 새 요청 및 API 키의 기본값입니다.

결제 및 청구

사용량은 크레딧으로 청구되며, 1 크레딧은 1 미국 달러에 해당합니다. 비디오 모델은 출력 토큰당 청구되며, 이미지 모델은 모델에 따라 업스트림 토큰당 또는 이미지당 청구됩니다. 각 라우트별 요금은 가격 페이지를 참조하세요.

작업 응답에는 작업 생성 시 estimated_charge_credits가 표시되고, 작업 성공 후 actual_charge_credits가 표시되며 둘 다 크레딧 단위입니다. 웹훅 페이로드에는 actual_charge_nano_credits가 정수로 표시되며, 1,000,000,000 나노크레딧이 1 크레딧과 같습니다.

GET /v1/account/balance를 사용하여 남은 잔액을 확인하세요.

작업 및 폴링

비디오 요청 및 "async": true로 전송된 이미지 요청은 작업 정보와 함께 HTTP 202를 반환합니다. 작업 상태가 succeeded, failed, expired 또는 canceled가 될 때까지 작업의 poll_url을 몇 초마다 폴링하세요.

상태설명
queued접수되어 시작 대기 중입니다.
submitted업스트림 제공업체로 전송되었습니다.
running생성 중입니다. progress는 0부터 100까지 진행됩니다.
succeeded완료되었습니다. 이제 응답에 출력 URL이 포함됩니다.
failed실패했습니다. message에 이유가 설명되어 있습니다.
expired작업 시간 제한 내에 완료되지 않았습니다.
canceled취소 엔드포인트를 통해 취소되었습니다.

작업 취소

POSThttps://api.mlmux.com/v1/tasks/{task_id}/cancel

대기 중(queued), 제출됨(submitted) 또는 실행 중(running)인 작업은 취소할 수 있으며, 보류되었던 크레딧이 반환됩니다. 응답은 {"id": "task_…", "status": "canceled"}입니다. 그 외의 상태인 작업은 409 task_not_cancelable을 반환합니다.

안전한 재시도

비동기 비디오 및 이미지 생성 요청은 최대 160자의 Idempotency-Key 헤더를 지원합니다. 동일한 본문으로 동일한 키를 다시 전송하면 새 작업을 생성하는 대신 기존 작업을 반환합니다. 다른 본문으로 동일한 키를 전송하면 409 idempotency_key_reused를 반환합니다. 동기식 요청 및 이미지 편집에서는 이 헤더를 지원하지 않습니다.

업로드

로컬 파일을 참조로 사용하려면 multipart 필드 file로 업로드하세요. 최대 50 MB의 이미지, 비디오, 오디오가 지원되며 3일 동안 보관됩니다. 반환된 url을 생성 요청의 URL 필드에 전달하세요.

POSThttps://api.mlmux.com/v1/uploads
요청
curl https://api.mlmux.com/v1/uploads \
  -H "Authorization: Bearer $MLMUX_API_KEY" \
  -F "file=@start-frame.jpg"
응답
{
  "url": "https://.../uploads/3f8a....jpg",
  "asset_id": 1024,
  "mime_type": "image/jpeg",
  "size_bytes": 482113,
  "asset_type": "image"
}

웹훅

Console → Webhooks에서 엔드포인트를 생성하고 수신할 이벤트를 선택하세요. 요청이나 작업이 완료되면 MLMux가 해당 URL로 JSON 본문이 포함된 POST 요청을 보냅니다.

이벤트설명
request.succeeded요청 또는 작업이 성공했습니다.
request.failed요청 또는 작업이 실패했습니다. data.error_code 및 data.error_message에서 원인을 확인할 수 있습니다.
webhook.testConsole에서 엔드포인트를 테스트할 때 전송됩니다.
페이로드
{
  "event_id": "evt_5b0d...",
  "event_type": "request.succeeded",
  "created_at": "2026-10-26T08:00:00Z",
  "data": {
    "request_id": "task_task_01a9...",
    "task_id": "task_01a9...",
    "public_model_id": "model/seedance-2.5-max",
    "api_method": "videos.generations.create",
    "image_count": 0,
    "image_resolution": "",
    "video_seconds": 8,
    "video_resolution": "720p",
    "actual_charge_nano_credits": 1790000000,
    "latency_ms": 94210
  }
}

서명 검증

각 전송은 엔드포인트의 서명 암호(whsec_…)로 서명되며, 이는 생성하거나 교체할 때 한 번만 표시됩니다. X-MLMux-Signature 헤더에는 Unix 타임스탬프 t와 서명 v1(타임스탬프, 마침표, 원시 요청 본문의 16진수 HMAC-SHA256)이 포함됩니다. 동일한 값을 계산하여 비교하고, 오래된 타임스탬프는 거부하세요.

Node.js
import crypto from "node:crypto";

// header: X-MLMux-Signature: t=1767225600,v1=5f8c...
export function verifyMLMuxSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map((part) => part.split("=")));
  const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
  const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
  return fresh && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1 ?? ""));
}

10초 이내에 2xx 상태 코드를 반환하세요. MLMux는 약 11시간에 걸쳐 최대 6회 재시도합니다. 중복 전송을 무시하려면 X-MLMux-Event-ID를 사용하세요.

오류

오류는 동일한 JSON 형식을 공유합니다. message 대신 code를 기준으로 분기 처리하세요. 지원팀에 문의할 때는 X-Request-ID 헤더에도 반환되는 request_id를 함께 알려주세요.

오류 응답
{
  "error": {
    "message": "Invalid API key",
    "type": "invalid_request_error",
    "code": "invalid_api_key",
    "request_id": "req_9f2c..."
  }
}
HTTP코드의미
400invalid_request본문이 유효한 JSON이 아니거나, 이미지 생성 시 알 수 없는 route_mode와 같이 필드 유형이 올바르지 않습니다.
400invalid_valueresolution, size, aspect_ratio, n 등의 값이 모델에서 지원되지 않습니다.
400model_not_found모델 ID가 존재하지 않거나 사용할 수 없습니다.
400invalid_video_request비디오 모드, 참조 개수, 비율, 해상도 또는 길이가 올바르지 않습니다.
400content_policy_violation프롬프트 또는 입력값이 콘텐츠 검열 정책에 의해 차단되었습니다.
401invalid_api_keyAPI 키가 누락되었거나 유효하지 않거나 만료되었거나 비활성화되었습니다.
402insufficient_credits잔액이 예상 요금을 처리하기에 부족합니다. 크레딧을 충전한 후 다시 시도하세요.
402spend_limit_exceeded요청이 Console에 설정된 지출 한도를 초과합니다.
402api_key_monthly_limit_exceeded요청이 이 API 키의 월간 예산을 초과합니다.
403email_verification_requiredAPI를 사용하기 전에 계정 이메일 주소를 인증하세요.
403model_not_allowed이 API 키는 다른 모델로 사용이 제한되어 있습니다.
403forbidden_asset_referenceasset:// 참조가 이 계정에 속하지 않습니다.
404task_not_found작업이 존재하지 않거나 다른 계정에 속해 있습니다.
409idempotency_key_reusedIdempotency-Key가 이미 다른 본문에서 사용되었습니다.
409task_not_cancelable작업이 이미 완료되었습니다.
429rate_limit_exceeded이 키 또는 계정의 분당 요청 한도를 초과했습니다.
429capacity_exhausted선택한 라우트의 모든 업스트림이 사용 중입니다.
502model_unavailable선택한 라우트에 이 모델에 대해 사용 가능한 업스트림이 없습니다.
502generation_failed업스트림 제공자가 출력을 생성하지 못했습니다.
503generation_unavailable업스트림 제공자를 일시적으로 사용할 수 없습니다.
503route_mode_disabled선택한 라우트 모드가 이 모델에 대해 비활성화되어 있습니다. 다른 route_mode를 전송하세요.
504generation_timeout업스트림 제공자에서 시간 초과가 발생했습니다.

429 응답에는 Retry-After 헤더가 포함됩니다. 해당 시간(초)만큼 대기한 후 다시 시도하고, 5xx 오류는 지수 백오프로 재시도하세요.

다음Image API