curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "잔디 위에 있는 파란 고양이",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "잔디 위에 있는 파란 고양이",
"resolution": "2MP",
"size": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "잔디 위에 있는 파란 고양이",
resolution: "2MP",
size: "16:9"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "인증에 실패했습니다. API 키를 확인하세요",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "계정 잔액이 부족합니다. 충전 후 다시 시도하세요",
"type": "payment_required"
}
}
Flux 2.0
Flux 2.0 이미지 생성
-
비동기 처리 모드로, 제출 후 작업 ID를 반환합니다
-
텍스트 기반 이미지 생성, 이미지 기반 이미지 생성 및 다중 참조 이미지 합성을 지원합니다
-
Flex, Pro, Max 세 가지 모델을 지원하며 최대 4MP 이미지를 출력합니다
POST
/
v1
/
images
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "잔디 위에 있는 파란 고양이",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "잔디 위에 있는 파란 고양이",
"resolution": "2MP",
"size": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "잔디 위에 있는 파란 고양이",
resolution: "2MP",
size: "16:9"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "인증에 실패했습니다. API 키를 확인하세요",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "계정 잔액이 부족합니다. 충전 후 다시 시도하세요",
"type": "payment_required"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "잔디 위에 있는 파란 고양이",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "잔디 위에 있는 파란 고양이",
"resolution": "2MP",
"size": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "잔디 위에 있는 파란 고양이",
resolution: "2MP",
size: "16:9"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "인증에 실패했습니다. API 키를 확인하세요",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "계정 잔액이 부족합니다. 충전 후 다시 시도하세요",
"type": "payment_required"
}
}
지원 모델
| 모델명 | 설명 |
|---|---|
flux-2-flex | 샘플링 단계와 프롬프트 가이던스 강도를 조절할 수 있는 세밀 제어 모델 |
flux-2-pro | 속도와 품질의 균형이 좋아 일반적인 프로덕션 워크플로에 적합한 모델 |
flux-2-max | 높은 이미지 품질이 필요한 작업에 적합한 최고 품질 모델 |
인증
string
필수
모든 엔드포인트에는 Bearer Token 인증이 필요합니다.API Key 받기:API Key 관리 페이지에서 API Key를 받으세요.요청 헤더에 다음 값을 추가합니다:
Authorization: Bearer YOUR_API_KEY
Body
string
필수
모델 이름:
flux-2-flex- 세밀한 제어를 지원하는 Flex 모델flux-2-pro- 범용 Pro 모델flux-2-max- 최고 품질의 Max 모델
boolean
기본값:"false"
이미지 작업을 제출하기 전에 콘텐츠 검토를 실행할지 여부를 지정합니다.
true:omni-moderation-latest로 프롬프트와 입력 이미지를 검토false또는 생략: 검토 요청을 보내지 않으며 검토 비용이나 지연이 추가되지 않음(기본값)
string
필수
이미지 생성 또는 편집 내용을 설명하는 텍스트입니다.
string
기본값:"2MP"
출력 해상도 등급:
1MP2MP- 기본값3MP4MP
1MP는 1,048,576픽셀입니다.호환 별칭: 512 / 512P / 1M은 1MP, 1K / 1024는 2MP, 2K / 2048은 3MP, 4K는 4MP와 같습니다. 다른 값은 거부됩니다.실제 출력 크기는 size에도 따라 달라집니다.string
기본값:"1:1"
출력 이미지의 가로세로 비율 또는 픽셀 크기입니다.
size는 auto도 지원합니다. image_urls를 전달하면 현재 resolution 단계를 유지하면서 참조 이미지의 가로세로 비율을 따릅니다. 참조 이미지가 없으면 기본 1:1로 처리됩니다.다음 크기 옵션을 지원합니다:1:1- 정사각형(기본값)4:3- 가로3:4- 세로16:9- 와이드스크린9:16- 세로3:2- 클래식 가로2:3- 클래식 세로21:9- 울트라와이드9:21- 울트라 세로auto- 참조 이미지의 가로세로 비율 따름
"너비x높이" 형식의 픽셀 문자열도 지정할 수 있습니다. 예: "1024x1536".integer
정확한 출력 너비(픽셀 단위)입니다.
height와 함께 지정해야 하며 각 값은 64 이상이어야 합니다.둘 중 하나만 지정하면 작업이 실패합니다.integer
정확한 출력 높이(픽셀 단위)입니다.
width와 함께 지정해야 하며 각 값은 64 이상이어야 합니다.총 출력 픽셀 수는 4MP를 초과할 수 없습니다. 즉, width × height ≤ 4,194,304여야 합니다.array
이미지 기반 이미지 생성이나 다중 참조 이미지 합성에 사용하는 참조 이미지 목록입니다.제한:
- 최대 8장의 이미지 지원
- 공개적으로 접근 가능한 URL 또는 Base64로 인코딩된 입력 이미지 지원
- 출력 이미지와 모든 참조 이미지의 총 픽셀 수는 9MP를 초과할 수 없음
string
기본값:"jpeg"
출력 이미지 인코딩 형식입니다.
jpeg, png, webp를 지원하며 기본값은 jpeg입니다.integer
기본값:"1"
생성할 이미지 수입니다. 값은 반드시
1이어야 합니다. 여러 장이 필요하면 작업을 여러 번 제출하세요.integer
무작위 시드입니다. 동일한 시드와 다른 매개변수를 유지하면 동일한 결과를 재현할 수 있습니다. 생략하면 무작위로 생성됩니다.
boolean
기본값:"false"
프롬프트 강화를 활성화할지 여부:
true- 활성화false- 비활성화(기본값)
false를 명시적으로 설정하면 프롬프트 재작성을 비활성화할 수 있습니다.
integer
기본값:"2"
콘텐츠 검토 허용 수준으로, 범위는 0~5입니다. 값이 높을수록 허용 수준이 높아집니다.
integer
기본값:"50"
샘플링 단계 수로,
flux-2-flex에서만 지원합니다. 범위는 1~50입니다. 값이 높을수록 일반적으로 세부 묘사가 늘어나고 생성 시간이 길어집니다.number
기본값:"5.0"
프롬프트 가이던스 강도로,
flux-2-flex에서만 지원합니다. 범위는 1.5~10입니다. 값이 높을수록 일반적으로 생성 결과가 프롬프트에 더 충실해집니다.해상도 대응표
| 비율 | 1MP | 2MP(기본값) | 3MP | 4MP |
|---|---|---|---|---|
1:1 | 1024×1024 | 1440×1440 | 1536×1536 | 2048×2048 |
4:3 | 1152×864 | 1664×1248 | 1824×1360 | 2336×1760 |
3:4 | 864×1152 | 1248×1664 | 1360×1824 | 1760×2336 |
16:9 | 1344×752 | 1920×1072 | 2048×1152 | 2720×1536 |
9:16 | 752×1344 | 1072×1920 | 1152×2048 | 1536×2720 |
3:2 | 1248×832 | 1728×1152 | 1872×1248 | 2496×1664 |
2:3 | 832×1248 | 1152×1728 | 1248×1872 | 1664×2496 |
21:9 | 1504×640 | 2176×928 | 2304×992 | 3072×1312 |
9:21 | 640×1504 | 928×2176 | 992×2304 | 1312×3072 |
크기 매개변수 우선순위
width와height를 함께 지정하면 정확한 픽셀 크기가 적용됩니다.size에1024x1536같은 픽셀 문자열을 지정하면 정확한 픽셀 크기가 적용됩니다.- 그 외에는
resolution과size의 비율을 기준으로 위 표에서 크기가 결정됩니다. - 크기 값을 모두 생략하면
2MP와1:1, 즉 1440×1440이 적용됩니다.
width 또는 height 중 하나만 지정할 수 없으며, 그렇게 제출하면 작업이 실패합니다.
사용 사례 예시
기본 텍스트 기반 이미지 생성{
"model": "flux-2-pro",
"prompt": "사이버펑크 스타일의 도시 야경, 젖은 거리에 반사되는 네온 불빛",
"resolution": "1MP",
"size": "16:9"
}
{
"model": "flux-2-max",
"prompt": "아침 안개 속 설산과 호수, 풍부한 디테일, 영화 같은 분위기",
"resolution": "4MP",
"size": "3:2"
}
{
"model": "flux-2-pro",
"prompt": "파란 고양이",
"width": 1024,
"height": 1536
}
{
"model": "flux-2-pro",
"prompt": "이미지 1의 인물을 이미지 2의 장면에 배치하고 조명과 색조를 통일",
"image_urls": [
"https://example.com/person.jpg",
"https://example.com/scene.jpg"
],
"resolution": "2MP",
"size": "16:9"
}
{
"model": "flux-2-flex",
"prompt": "미니멀 스타일 포스터, 큰 제목은 SUMMER SALE, 아래 작은 글자는 50% OFF",
"resolution": "3MP",
"size": "3:4",
"steps": 50,
"guidance": 6.5
}
Response
제출에 성공하면data는 배열이며 작업 ID는 data[0].task_id에 있습니다.
integer
응답 상태 코드입니다.
array
작업 결과 조회
작업은 비동기로 처리됩니다. 제출 응답의task_id로 다음 엔드포인트를 요청하고 상태가 completed 또는 failed가 될 때까지 폴링하세요:
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01KFG5BBFNK1YQDTJDZY0P0QT2 \
--header 'Authorization: Bearer <token>'
| 상태 | 설명 |
|---|---|
submitted / pending | 작업이 접수되었거나 대기열에 있습니다. 폴링을 계속하세요 |
processing | 이미지를 생성하고 있습니다. 폴링을 계속하세요 |
completed | 작업이 완료되었습니다. result.images[0].url[0]에서 이미지 URL을 가져올 수 있습니다 |
failed | 작업에 실패했습니다. 응답의 오류 정보를 확인하세요 |
{
"code": 200,
"data": {
"id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2",
"status": "completed",
"progress": 100,
"result": {
"images": [
{
"url": [
"https://upload.apimart.ai/f/image/xxxxxxxx-flux-2.jpeg"
],
"expires_at": 1785220083
}
]
}
}
}
result.images[].url은 문자열 배열입니다. 이 시리즈는 요청당 이미지 1장만 생성하므로 url[0]을 사용하세요. 이미지 URL의 유효 기간은 동일한 객체의 expires_at Unix 타임스탬프를 따릅니다. 만료되기 전에 생성 결과를 저장하세요.
잘못된 모델 매개변수와 작업 실패
잘못된 모델 매개변수는 비동기로 반환됩니다. 제출 시에는 HTTP 200과task_id가 반환되고, 작업을 조회하면 최종 상태가 failed로 바뀌며 구체적인 원인이 data.error.message에 표시됩니다. 따라서 작업이 최종 상태가 될 때까지 폴링해야 합니다.
{
"code": 200,
"data": {
"status": "failed",
"error": {
"type": "task_failed",
"code": "task_failed",
"message": "`steps` must be between 1 and 50 (got 0)"
}
}
}
data.error.code는 항상 task_failed이며 구체적인 원인은 message에 표시됩니다. 실패한 작업은 전액 환불됩니다.
주의사항
- 크기 제한: 출력 이미지는 4MP를 초과할 수 없으며 너비와 높이는 각각 64픽셀 이상이어야 합니다.
- 총 픽셀 제한: 출력 이미지와 모든 참조 이미지의 총 픽셀 수는 9MP를 초과할 수 없습니다.
- 참조 이미지 요구사항: 참조 이미지는 최대 8개까지 지원하며 공개적으로 접근 가능한 이미지 URL 또는 Base64로 인코딩된 입력 이미지를 사용할 수 있습니다.
- 고정 생성 수:
n은 반드시1이어야 하며 요청당 이미지 1장만 생성합니다. - 프롬프트 강화:
prompt_upsampling은 기본적으로 비활성화됩니다. - Flex 전용 매개변수:
steps와guidance는flux-2-flex에만 적용됩니다. - 비동기 작업: 제출에 성공한 후
/v1/tasks/{task_id}를 폴링하여 최종 결과를 가져오세요.