문서 바로가기
목차

Seedream 5.0 Pro API

Seevio API 키로 이미지를 생성하거나 참조 이미지를 편집하고, 이미지를 레이어로 분리할 수 있습니다. 작업은 비동기로 실행됩니다. taskId를 저장한 뒤 작업 엔드포인트를 폴링하거나 콜백을 수신하세요.

POST https://api.seevio.ai/v1/images/generations

지원 기능

기능지원하는 값
생성 모드text-to-image, image-to-image, layer-decomposition
출력 해상도1K, 1.5K, 2K
화면 비율1:1, 4:3, 3:4, 16:9, 9:16, 2:3, 3:2, 21:9
참조 이미지공개적으로 접근 가능한 HTTPS PNG / JPEG / WebP 이미지 URL이며, 이미지당 최대 30 MB입니다. 텍스트 투 이미지에서는 이미지를 보내지 않고, 이미지 투 이미지에서는 1~10장, 레이어 분리에서는 정확히 1장을 보내세요.
프롬프트앞뒤 공백을 제거한 뒤 4~5000자여야 합니다. layer-decomposition 모드에서만 prompt를 생략하거나 빈 값으로 보낼 수 있습니다.
출력 형식png, jpg

요금 및 크레딧

아래 가격은 반환된 이미지 한 장당 요금입니다. 일반 생성에서는 1장, 레이어 분리에서는 17장에 해당하는 크레딧을 예약합니다. 레이어 분리는 실제 반환된 이미지 수(베이스 이미지 포함)로 정산하고 미사용 크레딧을 원래 잔액으로 돌려줍니다. 실패한 작업은 전액 환불됩니다.

출력 해상도요금 및 크레딧
1K4 크레딧
1.5K4 크레딧
2K8 크레딧

기본 해상도인 2K에서 레이어 분리는 136 크레딧을 예약합니다. 이미지 4장이 반환되면 최종 요금은 32 크레딧이며, 104 크레딧이 반환됩니다.

요청 멱등성은 지원되지 않습니다. 유효한 POST 요청마다 새로운 유료 작업이 생성됩니다. 제출 결과를 확신할 수 없는 경우, 반환된 taskId를 조회하세요. POST 요청을 재시도하면 또 다른 작업이 생성될 수 있습니다.

인증

API 대시보드에서 API 키를 생성하세요. 생성된 전체 API 키 값은 최초 1회만 노출됩니다. 키를 서버 측에 안전하게 보관하고, 모든 API 요청 시 Bearer 토큰으로 포함하여 전송해 주세요.

기본 URL

https://api.seevio.ai
Authorization: Bearer sk_live_your_api_key
Content-Type: application/json

아래 예시 코드를 실행하기 전에 SEEVIO_API_KEY 환경 변수를 설정해야 합니다. JavaScript 예시는 Node.js 기반 서버 환경에서 실행되며, Python 예시는 requests 패키지를 사용합니다.

요청 본문

필드타입필수 여부설명 및 제약 조건
model
string예

모델 ID. Seedream 5.0 Pro을(를) 사용하려면 이 필드를 seedream-5-0-pro(으)로 설정하세요.

callback_url
string아니요

작업이 성공하거나 실패했을 때 POST 콜백을 수신할 수 있는 공개 HTTPS 엔드포인트 주소입니다. 사설망 주소나 localhost는 지원하지 않습니다.

예시: https://example.com/webhooks/seevio
input
object예

생성 설정입니다. 텍스트 투 이미지와 이미지 투 이미지에서는 프롬프트가 필수이며, 레이어 분리에서는 선택 사항입니다.

입력 파라미터

필드타입필수 여부기본값설명 및 제약 조건
input.prompt
string조건부 필수—

앞뒤 공백을 제거한 뒤 4~5000자여야 합니다. layer-decomposition 모드에서만 prompt를 생략하거나 빈 값으로 보낼 수 있습니다.

예시: A minimalist ceramic teapot on a stone pedestal, soft studio lighting
input.generation_type
string아니요text-to-image

새 이미지를 생성하려면 text-to-image, 참조 이미지를 편집하려면 image-to-image, 한 이미지를 재사용 가능한 요소로 분리하려면 layer-decomposition을 사용하세요.

지원하는 값
text-to-image | image-to-image | layer-decomposition
input.image_urls
string[]조건부 필수[]

공개적으로 접근 가능한 HTTPS PNG / JPEG / WebP 이미지 URL이며, 이미지당 최대 30 MB입니다. 텍스트 투 이미지에서는 이미지를 보내지 않고, 이미지 투 이미지에서는 1~10장, 레이어 분리에서는 정확히 1장을 보내세요.

예시: ["https://example.com/teapot.png"]
input.aspect_ratio
string아니요1:1

화면 비율

지원하는 값
1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 2:3 | 3:2 | 21:9
예시: 1:1
input.resolution
string아니요2K

텍스트 투 이미지와 이미지 투 이미지 기능은 1K(기본 품질)와 2K(고품질) 해상도를 지원합니다. 레이어 분리 기능은 1K, 1.5K, 2K를 제공합니다. 기본값은 2K입니다.

지원하는 값
1K | 1.5K | 2K
예시: 2K
input.output_format
string아니요png

요청된 출력 형식입니다. 레이어 분리의 경우, png는 PNG 베이스 이미지를 반환하고 jpg는 JPEG 베이스 이미지를 반환합니다. 분리된 모든 레이어는 투명도가 유지된 PNG 형식으로 반환됩니다.

지원하는 값
png | jpg
예시: png

요청당 하나의 작업이 생성됩니다. 텍스트 투 이미지(Text-to-Image) 및 이미지 투 이미지(Image-to-Image)는 1개의 이미지를 반환하며, 레이어 분리(layer-decomposition)은 베이스 이미지를 포함해 1~17개의 이미지를 반환합니다. 레이어 분리 작업 시에는 aspect_ratio를 전송하지 마세요.

빠른 시작

최소한의 파라미터로 아래 요청을 전송하고, 반환된 taskId를 저장한 후 작업 조회 예시를 통해 진행 상황을 확인하세요. 작업 생성 응답에 포함된 credits 값은 가예약된 크레딧 금액을 나타냅니다.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  }
}'

작업 생성 응답 예시

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 8
}

텍스트로 이미지 생성

Seevio API 키로 이미지를 생성하거나 참조 이미지를 편집하고, 이미지를 레이어로 분리할 수 있습니다. 작업은 비동기로 실행됩니다. taskId를 저장한 뒤 작업 엔드포인트를 폴링하거나 콜백을 수신하세요.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  }
}'

이미지로 이미지 생성

이미지를 편집하려면 generation_type을 image-to-image로 설정하고 image_urls를 제공하세요. 다른 모든 매개변수는 동일한 규격을 사용합니다.

코드 내의 example.com 미디어 URL 주소는 사용자가 직접 접근 가능한 HTTPS 파일 주소로 대체하여 테스트해 주세요. 예시 URL은 API 요청 양식을 보여주기 위한 용도이며 실제로 다운로드 가능한 파일이 아닙니다.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "prompt": "Change the teapot to matte sage green. Preserve its shape and the studio lighting.",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "image-to-image",
    "image_urls": [
      "https://example.com/teapot.png"
    ]
  }
}'

레이어 분리

generation_type을 layer-decomposition으로 설정하고 이미지 URL을 정확히 하나만 입력하세요. aspect_ratio는 생략해야 합니다. output_format은 베이스 이미지 형식만 제어합니다. 분리된 레이어는 투명도가 유지된 PNG 형식으로 항상 반환됩니다. data.results에 포함된 모든 URL을 저장하세요.

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "generation_type": "layer-decomposition",
    "image_urls": [
      "https://example.com/teapot.png"
    ],
    "resolution": "2K",
    "output_format": "png"
  }
}'

레이어 분리는 data.results에 베이스 이미지와 분리된 레이어의 URL을 여러 개 반환할 수 있습니다. 각 URL은 별도의 이미지를 가리킵니다. 결과 수는 작업마다 다르며 총 1~17장입니다. data.results[0]만 읽지 말고 배열 전체를 처리하세요. 완료된 작업의 조회 응답과 완료 웹훅 모두 이 배열을 포함합니다. 최초 생성 응답에는 taskId와 예약 크레딧이 포함되며, 이미지 URL은 포함되지 않습니다.

작업 생성 응답 예시

{
  "taskId": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "credits": 136
}

레이어 분리 완료: 다중 이미지 URL 목록

이 예시 응답에는 베이스 이미지 1장과 레이어 3장, 총 4장의 출력 이미지가 포함됩니다. 실제 작업의 반환 수는 다를 수 있습니다. 요청한 2K 해상도에서 credits는 4장 전체의 최종 요금이며, 처음 예약한 17장 분량 중 미사용 크레딧은 반환된 상태입니다.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "seedream-5-0-pro",
  "credits": 32,
  "failed_code": null,
  "status": "completed",
  "billing_status": "charged",
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/images/example/base.png",
      "https://cdn.seevio.ai/api/images/example/layer-1.png",
      "https://cdn.seevio.ai/api/images/example/layer-2.png",
      "https://cdn.seevio.ai/api/images/example/layer-3.png"
    ],
    "image_expires_at": "2026-10-12T00:00:00.000Z",
    "processing_time": 12
  }
}

모든 반환 이미지 순회 처리

const response = await fetch(
  "https://api.seevio.ai/v1/tasks/TASK_ID",
  { headers: { Authorization: `Bearer ${process.env.SEEVIO_API_KEY}` } }
);
if (!response.ok) throw new Error(await response.text());
const task = await response.json();

if (task.status === "completed") {
  // Process every returned image, including the base image.
  // The number of URLs varies; do not read only results[0].
  for (const [index, imageUrl] of task.data.results.entries()) {
    console.log({ taskId: task.id, index, imageUrl });
    // Download or store this image in your application.
  }
} else if (task.status === "failed") {
  throw new Error(task.failed_reason || "Image generation failed.");
}
// If queued or generating, poll again after at least 5 seconds.

작업 조회

GET https://api.seevio.ai/v1/tasks/{taskId}

예시에 작성된 ID 대신 작업 생성 시 전달받은 taskId를 사용해 주세요. 조회를 요청한 API 키에 귀속된 작업만 반환되며, 소유자가 다르거나 존재하지 않는 ID를 사용해 조회하면 HTTP 404 오류가 발생합니다.

클라이언트 사이드에서 초기 확인 시에는 10~20초 간격으로 폴링을 진행하는 것을 권장하며, HTTP 429 오류가 발생하는 경우 폴링 주기를 더 늘리고 작업 상태가 completed 또는 failed가 되면 조회를 멈추십시오. 프로덕션 환경에서는 웹훅 방식을 적극 권장합니다. 아래의 예시 코드는 각각 단발성 1회 조회를 수행하는 예시입니다.

curl --fail-with-body https://api.seevio.ai/v1/tasks/3f2aK9mR7xQp4TnZ8bLc6YwH \
  -H "Authorization: Bearer $SEEVIO_API_KEY"
상태허용되는 값 및 요구사항
queued작업이 접수되어 처리 대기 중입니다.
generating이미지 생성이 진행 중입니다.
completed작업이 최종 완료되었습니다. 만료되기 전에 data.results에서 결과물 이미지를 다운로드하세요.
failed최종 실패 처리되었습니다. failed_reason과 billing_status 필드를 확인하세요.
필드타입허용되는 값 및 요구사항
idstring작업 식별자입니다. 작업 생성 응답에서 받은 taskId 필드 값과 동일합니다.
created_atnumber작업이 생성된 Unix 타임스탬프(초 단위)입니다.
modelstring이 작업에 사용된 퍼블릭 모델 ID입니다.
billing_statusstring정산 상태를 나타내며, 값은 reserved(가예약), charged(실제 결제), refunded(환불 완료), refund_failed(환불 실패) 중 하나입니다.
creditsnumber생성 응답과 대기 중인 작업에는 예약된 크레딧이 표시됩니다. 완료 후 credits는 실제 요금을 나타내며, 미사용 예약 크레딧은 이미 반환된 상태입니다. 실패한 작업의 필드에는 원래 예약된 금액이 유지됩니다.
failed_reasonstring | null실패한 작업의 구체적인 오류 원인입니다. 정상적으로 처리된 작업의 경우 null이 반환됩니다. 실패 상태의 조회 응답에는 data 필드가 포함되지 않습니다.
failed_codestring | null오류 코드. 자세한 오류 설명은 failed_reason을 확인하세요.
dataobject작업 실패가 아닌 경우에 생성되는 객체입니다. 최종 출력 파일 및 상세 처리 내역을 포함합니다.
data.resultsstring[]레이어 분리의 베이스 이미지를 포함한 모든 출력 이미지 URL입니다. 작업 완료 전이나 만료 후에는 빈 배열로 반환됩니다.
data.image_expires_atstring | null이미지 만료 시간(ISO 8601). 아직 없으면 null.
data.processing_timenumber | null작업 처리 시간(초 단위)을 나타내며, 제공되지 않는 경우 null로 표시됩니다.

대기 중

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": null,
  "status": "queued",
  "billing_status": "reserved",
  "failed_reason": null,
  "data": {
    "results": [],
    "image_expires_at": null,
    "processing_time": null
  }
}

완료됨

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": null,
  "status": "completed",
  "billing_status": "charged",
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/images/example.png"
    ],
    "image_expires_at": "2026-10-12T00:00:00.000Z",
    "processing_time": 12
  }
}

실패함

조회 결과 status=failed로 표시되면 이미지 생성이 실패한 상태입니다. 구체적인 실패 원인은 failed_reason에서, 환불 결과는 billing_status에서 확인하세요. 이 예시의 refunded는 크레딧이 정상적으로 반환되었음을 나타냅니다. credits는 처음 예약된 금액을 유지하며, 응답에 data는 포함되지 않습니다.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171200,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": "400",
  "status": "failed",
  "billing_status": "refunded",
  "failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs."
}

결과 링크는 보관 후 30일 동안 제공됩니다. 만료 후에는 results가 빈 값으로 표시됩니다.

웹훅

작업 생성 시 callback_url 파라미터를 추가하면, 이미지 생성이 완료되거나 실패했을 때 지정하신 주소로 JSON POST 요청을 보내드립니다. 콜백 수신 후 15초 이내에 2xx 응답을 반환해 주셔야 합니다. 콜백 전송에 실패하는 경우 재시도가 진행되므로, 수신부에서는 task ID를 기준으로 중복 처리가 되지 않도록 멱등성을 보장하도록 구현해 주세요.

콜백 엔드포인트는 JSON 요청 본문(Content-Type: application/json)을 포함한 POST 요청을 수락해야 합니다.

콜백을 포함하여 작업 생성하기

curl --fail-with-body https://api.seevio.ai/v1/images/generations \
  -H "Authorization: Bearer $SEEVIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "seedream-5-0-pro",
  "input": {
    "prompt": "A minimalist ceramic teapot on a stone pedestal, soft studio lighting",
    "aspect_ratio": "1:1",
    "resolution": "2K",
    "output_format": "png",
    "generation_type": "text-to-image"
  },
  "callback_url": "https://example.com/webhooks/seevio"
}'

콜백은 작업 조회 응답 구조를 사용하며, 환불된 실패 알림에는 최상위 수준에 credits_refunded가 포함됩니다. id를 사용해 작업을 식별하고 status로 완료와 실패를 구분하세요. 알림은 중복 전송될 수 있으므로 id 및 status 기준으로 멱등성 있게 처리해야 합니다. 콜백은 서명되지 않으므로 인증된 조회 엔드포인트를 통해 작업을 검증하세요. 콜백 전송 실패가 성공한 작업의 환불로 이어지지는 않습니다.

작업 완료: 콜백 페이로드 성공

created_at은 이벤트 생성 시간이고 task_created_at은 작업 생성 시간이며 모두 Unix 초 단위입니다. 예시는 권장 필드를 보여 주며 실제 응답에는 추가 필드가 포함될 수 있습니다.

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171212,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": null,
  "status": "completed",
  "billing_status": "charged",
  "failed_reason": null,
  "data": {
    "results": [
      "https://cdn.seevio.ai/api/images/example.png"
    ],
    "image_expires_at": "2026-10-12T00:00:00.000Z",
    "processing_time": 12
  },
  "task_created_at": 1789171200
}

작업 실패: 콜백 페이로드 실패

{
  "id": "3f2aK9mR7xQp4TnZ8bLc6YwH",
  "created_at": 1789171212,
  "model": "seedream-5-0-pro",
  "credits": 8,
  "failed_code": "400",
  "status": "failed",
  "billing_status": "refunded",
  "failed_reason": "The input or output was flagged as sensitive. Please try again with different inputs.",
  "task_created_at": 1789171200,
  "credits_refunded": 8
}

수신 서버 구현 예시

export async function POST(request: Request) {
  const callbackData = await request.json();

  if (callbackData.status === "completed") {
    const imageUrls = callbackData.data.results;
    // Save the image URLs and mark this task as completed in your application.
    console.log(callbackData.id, imageUrls);
  }

  if (callbackData.status === "failed") {
    const { failed_reason, credits_refunded } = callbackData;
    // Record the failure reason and refunded credits for this task.
    console.error(callbackData.id, failed_reason, credits_refunded);
  }

  return new Response(null, { status: 200 });
}

이 Next.js 예시는 JSON 콜백 본문을 읽고 완료 및 실패한 작업을 직접 처리합니다. 실제 애플리케이션에서는 데이터 영속성과 작업 ID 중복 제거 기능을 추가하세요. 콜백 응답을 보내기 전에 시간이 오래 걸리는 작업은 큐(queue)에 대기시키는 것이 좋습니다.

오류 처리

API 요청 처리 중 오류가 발생하면 HTTP 상태 코드와 함께 오류 정보 객체(error)가 전달되며 해당 객체에는 오류 코드(code)와 에러 메시지(message)가 들어 있습니다. 작업 생성이 성공적으로 접수된 후에도 실제 비디오 생성 과정에서 실패가 발생할 수 있으므로, 주기적으로 조회하거나 실패 콜백 처리를 구현해 두어야 합니다.

{
  "error": {
    "code": "invalid_request",
    "message": "input.prompt is required."
  }
}
HTTP필드해결 방법
400invalid_request
전송한 JSON 형식의 결함 여부, 프롬프트 누락, 파라미터 값의 유효 범위를 확인하거나 미디어 파일의 HTTPS 다운로드 주소가 정상인지 확인 후 다시 시도하세요.
401invalid_api_key
전달된 Bearer 토큰 및 API 키가 활성화 상태인지 확인해 주세요.
402insufficient_credits
계정에 크레딧을 추가로 충전하거나, 생성 사양을 낮추어 예상 작업 크레딧 소비량을 감축하십시오. 응답 메시지에 필요한 금액과 현재 잔액이 포함되어 안내될 수 있습니다.
403forbidden
오류 메시지에 안내된 계정 수준의 제한 사항을 확인해 주세요.
404not_found
검색에 사용한 작업 ID를 다시 확인해 주세요. 요청한 API 키를 소유한 유저가 생성한 작업만 조회가 가능합니다.
429rate_limited
응답 헤더로 전달된 Retry-After 지정 시간만큼 일시 정지 후 다시 전송을 시도해 주세요.
500internal_error
반환된 에러 메시지 및 API 세부 로그를 자세히 살펴보세요. 동일 요청 재시도 시 불필요하게 가예약 및 청구 처리가 중복 발생할 위험이 있으므로 재시도 시 주의해 주십시오.

오류는 error.code 및 error.message 형태로 제공됩니다: 400 invalid_request, 401 invalid_api_key, 402 insufficient_credits, 403 forbidden, 404 not_found, 429 rate_limited, 500 internal_error. 이 중 402 insufficient_credits 오류는 현재 잔여 크레딧이 요청을 처리하기에 부족함을 의미합니다.

호출 비율 제한

태스크 생성: API 키당 기본적으로 분당 최대 100회의 요청이 허용됩니다. 현재 맞춤형 속도 제한은 제공되지 않습니다.

태스크 조회: API 키당 기본적으로 분당 최대 120회의 요청이 허용됩니다. 조회 요청과 태스크 생성 요청은 각각 별도로 계산됩니다.

이미지 및 비디오 생성 요청은 동일한 API 키 속도 제한을 공유합니다.

호출 초과 발생 시(HTTP 429), 작업 생성은 Retry-After: 60을 헤더로 받으며 조회 요청은 Retry-After: 5를 응답 헤더로 받습니다. 지수 백오프 전략을 채택하고 과도하게 빈번한 폴링은 자제해 주세요.

HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded."
  }
}