API Stock와 Eachlabs 비교
API Stock를 선택할 때
앱이 이미 단계별 흐름을 제어하며 시각적 플랫폼 대신 각 단계의 생성 API가 필요하다면 API Stock를 선택하세요.
Eachlabs를 계속 사용할 때
단일 생성을 넘는 워크플로와 도구가 필요하면 Eachlabs를 유지하세요. 여러 단계의 흐름은 다시 구성하고 각 모델을 카탈로그에서 확인해야 합니다.
Eachlabs API 문서가로로 스크롤하여 표의 모든 열을 확인하세요.
| 연동 항목 | Eachlabs | API Stock |
|---|---|---|
| 요청 | POST /v1/prediction/ | POST /api/v1/generation/create |
| 인증 | Authorization: Bearer | Authorization: Bearer |
| 모델 id | bytedance-seedream-v4-5-text-to-image / version: 0.0.1 | seedream-4-5 |
아래 예제 모델을 비교하며 공급자의 모든 엔드포인트를 비교하지는 않습니다. 모델 이름이 같아도 매개변수, 검토 정책 및 결과가 같다는 보장은 없습니다.
가격 비교: Eachlabs와 API Stock
공통 모델 일부를 같은 과금 단위로 비교합니다. 당사 가격은 현재 카탈로그에서 가져오며, 공급자 가격은 확인 날짜와 출처 링크를 포함한 기록입니다.
| 모델 | API Stock | Eachlabs | 당사 가격 차이 |
|---|---|---|---|
| Seedream 4.52K · 이미지당 · 텍스트로 생성 | API Stock$0.036 | Eachlabs$0.04 | 10% 저렴 |
| Nano Banana이미지당 · 텍스트로 생성 | API Stock$0.015 | Eachlabs$0.04 | 62.5% 저렴 |
참조 이미지 없이 텍스트로 이미지 한 장을 생성하는 공개 기본 요금입니다. 요금제, 대량 할인, 다른 해상도 및 편집에 따라 최종 가격이 달라질 수 있습니다.
작업량별 비용
Seedream 4.5 · 2K
위 설정으로 이미지 1,000장
- API Stock
- $36
- Eachlabs
- $40
Nano Banana
위 설정으로 이미지 1,000장
- API Stock
- $15
- Eachlabs
- $40
위 요금으로 계산한 예시이며 대량 할인, 구독 또는 유료 추가 옵션은 제외합니다. 지연 시간이나 동일한 결과를 보장하지 않습니다.
Eachlabs에서 이전
/v1/prediction을 /api/v1/generation/create로 교체하세요. 버전 모델 id와 input을 공개 id 및 문서 매개변수로 바꾸고 webhook_url을 webhook으로 교체해 결과 처리를 수정하세요.
1
계정을 만들고 선불 잔액을 충전한 후 API 키를 발급하세요.
2
공개 모델 id와 문서의 매개변수로 POST /api/v1/generation/create를 전송하세요. 작업 하나당 결과 하나를 생성합니다.
3
taskId를 읽고 GET /api/v1/task/status/TASK_ID를 폴링하거나 생성 시 webhook을 설정하세요.
Eachlabs
curl --fail-with-body 'https://api.eachlabs.ai/v1/prediction/' \-H "Authorization: Bearer $EACHLABS_API_KEY" \-H 'Content-Type: application/json' \-d '{"model": "bytedance-seedream-v4-5-text-to-image","version": "0.0.1","input": {"prompt": "A ceramic mug on a wooden table, soft morning light","image_size": "landscape_16_9","num_images": 1,"max_images": 1}}'
API Stock
curl --fail-with-body 'https://api.api-stock.com/api/v1/generation/create' \-H "Authorization: Bearer $API_KEY" \-H 'Content-Type: application/json' \-d '{"model": "seedream-4-5","prompt": "A ceramic mug on a wooden table, soft morning light","resolution": "2K","size": "16:9"}'
전체 예제: 작업 생성부터 파일 가져오기까지
서버에서 Node 22+ 또는 Bun과 API_KEY로 실행하세요. 유료 작업 하나를 생성하고 다시 만들지 않고 폴링합니다. URL은 임시이므로 파일을 자체 저장소에 보관하세요.
import { writeFile } from "node:fs/promises";const baseURL = "https://api.api-stock.com/api/v1";const apiKey = process.env.API_KEY;if (!apiKey) throw new Error("Set API_KEY on the server");async function request(path, options = {}) {const response = await fetch(baseURL + path, {...options,headers: {Authorization: `Bearer ${apiKey}`,"Content-Type": "application/json",},signal: AbortSignal.timeout(30_000),});if (!response.ok) throw new Error(await response.text());return response.json();}const { taskId } = await request("/generation/create", {method: "POST",body: JSON.stringify({"model": "seedream-4-5","prompt": "A ceramic mug on a wooden table, soft morning light","resolution": "2K","size": "16:9"}),});if (!taskId) throw new Error("Missing taskId");const deadline = Date.now() + 10 * 60_000;let fileUrl;while (Date.now() < deadline) {const { data } = await request(`/task/status/${encodeURIComponent(taskId)}`);if (data.status === "finished") {fileUrl = data.files?.[0]?.fileUrl;if (!fileUrl) throw new Error("Task finished without a file");break;}if (data.status === "failed" || data.status === "expired") {throw new Error(data.errorMessage || data.status);}await new Promise((resolve) => setTimeout(resolve, 2000));}if (!fileUrl) throw new Error(`Still processing: save taskId ${taskId} and resume polling`);const file = await fetch(fileUrl, { signal: AbortSignal.timeout(60_000) });if (!file.ok) throw new Error(`Download failed: ${file.status}`);const mime = file.headers.get("content-type")?.split(";")[0];const extension = { "image/png": "png", "image/jpeg": "jpg", "image/webp": "webp" }[mime] || "bin";await writeFile(`generated-image.${extension}`, new Uint8Array(await file.arrayBuffer()));
API 키는 서버에 보관하세요. 운영 트래픽을 이전하기 전에 요청 하나의 매개변수, 상태 처리 및 결과를 확인하세요.
자주 묻는 질문
Eachlabs에서 어떻게 이전하나요?
/v1/prediction을 /api/v1/generation/create로 교체하세요. 버전 모델 id와 input을 공개 id 및 문서 매개변수로 바꾸고 webhook_url을 webhook으로 교체해 결과 처리를 수정하세요.
API Stock가 항상 Eachlabs보다 저렴한가요?
아닙니다. 표에서 정확한 모델, 설정 및 과금 단위를 비교하세요. 가격은 오르거나 내릴 수 있으므로 운영 트래픽을 이전하기 전에 두 카탈로그를 확인하세요.
모든 Eachlabs 워크플로를 이전할 수 있나요?
단일 생성을 넘는 워크플로와 도구가 필요하면 Eachlabs를 유지하세요. 여러 단계의 흐름은 다시 구성하고 각 모델을 카탈로그에서 확인해야 합니다.
실패하거나 끝나지 않은 요청은 어떻게 되나요?
미디어 작업은 설정된 경로로 재시도하며 사용 가능한 경우에만 예비 공급자를 사용합니다. 생성이 최종 실패하면 환불됩니다. 처리 중인 작업을 중복 생성하지 말고 폴링하세요. 파일 URL 만료는 생성 실패가 아닙니다.
잔액은 어떻게 충전하나요?
사용 가능한 결제 수단, 통화 및 최소 충전 금액은 결제 전에 계정에 표시됩니다. 구독 없이 모델 사용료가 선불 잔액에서 차감됩니다.
API Stock에서 첫 요청 테스트
모델을 선택하고 매개변수와 가격을 확인한 후 API 키를 만드세요. 트래픽을 이전하기 전에 요청 하나를 테스트하세요.