curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-flex",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-flex",
"prompt": "A blue cat on the grass",
"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-flex",
prompt: "A blue cat on the grass",
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": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance, please top up",
"type": "payment_required"
}
}
Flux 2.0
Pembuatan Gambar FLUX.2
Kirim tugas asinkron FLUX.2 untuk pembuatan gambar dari teks atau gambar referensi. API mengembalikan ID tugas; lakukan polling pada endpoint tugas untuk mendapatkan gambar yang dihasilkan.
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-flex",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-flex",
"prompt": "A blue cat on the grass",
"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-flex",
prompt: "A blue cat on the grass",
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": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance, please top up",
"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-flex",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-flex",
"prompt": "A blue cat on the grass",
"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-flex",
prompt: "A blue cat on the grass",
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": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance, please top up",
"type": "payment_required"
}
}
Model yang Didukung
| Model | Deskripsi |
|---|---|
flux-2-flex | Pembuatan gambar dengan kontrol terperinci atas langkah sampling dan panduan. |
flux-2-pro | Keseimbangan antara kualitas dan kecepatan untuk alur kerja produksi umum. |
flux-2-max | Model FLUX.2 dengan kualitas tertinggi untuk detail maksimal. |
Otorisasi
string
wajib
Semua endpoint memerlukan autentikasi Bearer Token.Dapatkan API key dari Manajemen API Key, lalu tambahkan ke header permintaan:
Authorization: Bearer YOUR_API_KEY
Body
string
wajib
Nama model:
flux-2-flexflux-2-proflux-2-max
boolean
default:"false"
Menentukan apakah moderasi konten dijalankan sebelum tugas gambar dikirim.
true: periksa prompt dan gambar input denganomni-moderation-latestfalseatau dihilangkan: tidak mengirim permintaan moderasi, tanpa biaya atau latensi moderasi tambahan (default)
string
wajib
Deskripsi teks untuk gambar yang akan dibuat atau perubahan yang akan diterapkan pada gambar referensi.
string
default:"2MP"
Preset resolusi gambar. Nilai yang didukung:
1MP2MP(default)3MP4MP
1MP setara dengan 1,048,576 piksel.Untuk kompatibilitas dengan integrasi lama, alias berikut juga didukung: 512, 512P, dan 1M setara dengan 1MP; 1K dan 1024 setara dengan 2MP; 2K dan 2048 setara dengan 3MP; 4K setara dengan 4MP. Nilai lain akan ditolak.Preset menentukan dimensi gambar ketika size berupa rasio aspek. Preset ini diabaikan jika dimensi piksel yang tepat diberikan melalui size atau melalui width dan height.string
default:"1:1"
Rasio aspek atau dimensi piksel gambar.
size juga mendukung auto: ketika image_urls diberikan, rasio aspek gambar referensi akan diikuti dengan tetap mempertahankan tingkat resolution saat ini; tanpa gambar referensi, default 1:1 digunakan.Opsi ukuran yang didukung:1:1(default)4:33:416:99:163:22:321:99:21auto- mengikuti rasio aspek gambar referensi
1024x1536. Dimensi piksel yang tepat tunduk pada batas piksel yang sama dengan width dan height.Urutan prioritas ukuran adalah pasangan width + height, string piksel di size, resolution + rasio aspek di size, lalu default 2MP + 1:1 (1440×1440).integer
Lebar gambar dalam piksel. Jika diberikan,
height juga wajib diberikan. Setiap dimensi minimal 64 piksel. Jika hanya salah satu dimensi diberikan, tugas akan gagal.Pasangan width dan height yang lengkap memiliki prioritas tertinggi serta mengabaikan resolution dan size.integer
Tinggi gambar dalam piksel. Jika diberikan,
width juga wajib diberikan. Setiap dimensi minimal 64 piksel. Jika hanya salah satu dimensi diberikan, tugas akan gagal.Gambar keluaran tidak boleh melebihi 4 MP (width × height ≤ 4.194.304), dan jumlah piksel gambar keluaran beserta semua gambar referensi tidak boleh melebihi 9 MP.array
Gambar referensi untuk pembuatan gambar dari gambar. Berikan melalui URL yang dapat diakses publik atau dalam format Base64.
- Maksimum: 8 gambar
- Jumlah piksel gambar keluaran beserta semua gambar referensi tidak boleh melebihi 9 MP
string
default:"jpeg"
Format gambar hasil:
jpeg, png, atau webp. Default-nya adalah jpeg.integer
default:"1"
Jumlah gambar yang dibuat. Hanya nilai
1 yang didukung.integer
Seed acak. Gunakan kembali seed dan parameter yang sama untuk menghasilkan gambar yang dapat direproduksi; hilangkan parameter ini untuk menggunakan seed acak.
boolean
default:"false"
Menentukan apakah prompt ditingkatkan dan ditulis ulang sebelum pembuatan gambar. Default-nya adalah
false; atur ke true untuk mengaktifkannya. Tetapkan false secara eksplisit untuk menonaktifkan penulisan ulang prompt.integer
default:"2"
Toleransi keamanan dari
0 hingga 5. Nilai yang lebih tinggi lebih permisif.integer
default:"50"
Jumlah langkah sampling dari
1 hingga 50. Nilai yang lebih tinggi dapat meningkatkan detail, tetapi membutuhkan waktu lebih lama.Parameter ini hanya didukung oleh flux-2-flex. Jangan kirimkan bersama flux-2-pro atau flux-2-max.number
default:"5.0"
Panduan prompt dari
1.5 hingga 10. Nilai yang lebih tinggi mengikuti prompt dengan lebih ketat.Parameter ini hanya didukung oleh flux-2-flex. Jangan kirimkan bersama flux-2-pro atau flux-2-max.Tabel Referensi Resolusi
| Rasio aspek | 1MP | 2MP (default) | 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 |
Contoh Penggunaan
Pembuatan gambar dari teks
{
"model": "flux-2-pro",
"prompt": "A cinematic city at night with neon reflections on wet streets",
"resolution": "1MP",
"size": "16:9"
}
Pembuatan gambar dari gambar referensi
{
"model": "flux-2-pro",
"prompt": "Place the person from the first image in the scene from the second image and match the lighting",
"image_urls": [
"https://example.com/person.jpg",
"https://example.com/scene.jpg"
],
"resolution": "2MP",
"output_format": "webp"
}
Dimensi gambar yang tepat
{
"model": "flux-2-max",
"prompt": "A highly detailed botanical illustration",
"width": 1024,
"height": 1536
}
Kontrol FLUX.2 Flex
{
"model": "flux-2-flex",
"prompt": "A minimalist poster with the headline SUMMER SALE and the subheading 50% OFF",
"resolution": "3MP",
"size": "3:4",
"steps": 50,
"guidance": 6.5
}
Respons
integer
Kode status respons.
array
Mengambil Hasil
Lakukan polling padaGET /v1/tasks/{task_id} hingga tugas mencapai status completed atau failed. Lihat API Status Tugas untuk skema respons lengkap.
Tugas yang selesai mencakup satu gambar yang dihasilkan:
{
"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
}
]
}
}
}
data.result.images[0].url[0]. Masa berlakunya ditentukan oleh timestamp Unix di data.result.images[0].expires_at; unduh gambar sebelum waktu tersebut.
Status tugas
| Status | Arti |
|---|---|
submitted / pending | Tugas diterima atau berada dalam antrean; lanjutkan polling |
processing | Gambar sedang dibuat; lanjutkan polling |
completed | Tugas selesai; hasil tersedia di result.images |
failed | Tugas gagal; alasannya tersedia di data.error.message dan dana dikembalikan sepenuhnya |
{
"code": 200,
"data": {
"status": "failed",
"error": {
"type": "task_failed",
"code": "task_failed",
"message": "`steps` must be between 1 and 50 (got 0)"
}
}
}
task_id; saat dipolling, tugas berubah menjadi failed. Alasan spesifik selalu tersedia di error.message, sedangkan error.code adalah task_failed. Dana untuk tugas yang gagal dikembalikan sepenuhnya.
Catatan
- Tugas diproses secara asinkron. Respons pengiriman mengembalikan
task_iduntuk polling. - Parameter
nharus bernilai1; setiap permintaan menghasilkan tepat satu gambar. - Gambar referensi dapat diberikan melalui URL yang dapat diakses publik atau dalam format Base64.
- Hingga 8 gambar referensi didukung, dengan batas total 9 MP untuk gambar masukan dan keluaran.
- Dimensi keluaran yang tepat dapat ditetapkan melalui
sizeberupa piksel, atau dengan memberikanwidthdanheightsecara berpasangan. Jika digunakan, keduanya harus minimal 64 piksel; gambar keluaran dibatasi hingga 4 MP. - Masa berlaku URL hasil ditentukan oleh nilai
expires_atyang dikembalikan dalam respons tugas. prompt_upsamplingbernilaifalsesecara default.