curl --request POST \
--url https://api.apiyi.com/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "MAI-Image-2.6-Flash",
"prompt": "A traditional teahouse storefront with a wooden sign that reads \"Welcome\", red lanterns, warm dusk light, photorealistic"
}
'import requests
url = "https://api.apiyi.com/v1/images/generations"
payload = {
"model": "MAI-Image-2.6-Flash",
"prompt": "A traditional teahouse storefront with a wooden sign that reads \"Welcome\", red lanterns, warm dusk light, photorealistic"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'MAI-Image-2.6-Flash',
prompt: 'A traditional teahouse storefront with a wooden sign that reads "Welcome", red lanterns, warm dusk light, photorealistic'
})
};
fetch('https://api.apiyi.com/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apiyi.com/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'MAI-Image-2.6-Flash',
'prompt' => 'A traditional teahouse storefront with a wooden sign that reads "Welcome", red lanterns, warm dusk light, photorealistic'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apiyi.com/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"A traditional teahouse storefront with a wooden sign that reads \\\"Welcome\\\", red lanterns, warm dusk light, photorealistic\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.apiyi.com/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"A traditional teahouse storefront with a wooden sign that reads \\\"Welcome\\\", red lanterns, warm dusk light, photorealistic\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"A traditional teahouse storefront with a wooden sign that reads \\\"Welcome\\\", red lanterns, warm dusk light, photorealistic\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1790999642,
"data": [
{
"b64_json": "<string>"
}
],
"usage": {
"prompt_tokens": 1000,
"total_tokens": 1000,
"output_tokens": 0
}
}Text-to-Image API 레퍼런스
실시간 Playground를 제공하는 MAI-Image 2.6 Text-to-Image API 레퍼런스 — 텍스트 prompt로부터 생성, 최대 1536×1536 영역까지 사용자 정의 너비/높이 지원, 항상 PNG base64를 반환합니다
curl --request POST \
--url https://api.apiyi.com/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "MAI-Image-2.6-Flash",
"prompt": "A traditional teahouse storefront with a wooden sign that reads \"Welcome\", red lanterns, warm dusk light, photorealistic"
}
'import requests
url = "https://api.apiyi.com/v1/images/generations"
payload = {
"model": "MAI-Image-2.6-Flash",
"prompt": "A traditional teahouse storefront with a wooden sign that reads \"Welcome\", red lanterns, warm dusk light, photorealistic"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'MAI-Image-2.6-Flash',
prompt: 'A traditional teahouse storefront with a wooden sign that reads "Welcome", red lanterns, warm dusk light, photorealistic'
})
};
fetch('https://api.apiyi.com/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apiyi.com/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'MAI-Image-2.6-Flash',
'prompt' => 'A traditional teahouse storefront with a wooden sign that reads "Welcome", red lanterns, warm dusk light, photorealistic'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apiyi.com/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"A traditional teahouse storefront with a wooden sign that reads \\\"Welcome\\\", red lanterns, warm dusk light, photorealistic\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.apiyi.com/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"A traditional teahouse storefront with a wooden sign that reads \\\"Welcome\\\", red lanterns, warm dusk light, photorealistic\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"MAI-Image-2.6-Flash\",\n \"prompt\": \"A traditional teahouse storefront with a wooden sign that reads \\\"Welcome\\\", red lanterns, warm dusk light, photorealistic\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1790999642,
"data": [
{
"b64_json": "<string>"
}
],
"usage": {
"prompt_tokens": 1000,
"total_tokens": 1000,
"output_tokens": 0
}
}Bearer sk-xxx), model을(를) 선택한 후 prompt을(를) 입력하고, 필요한 경우 width / height을(를) 설정한 다음 전송하십시오.response_format, seed 또는 negative_prompt을(를) 지원하지 않으며, 이 중 하나라도 전송하면 400 Invalid parameters: xxx이(가) 반환됩니다. gpt-image / DALL·E에서 마이그레이션하는 경우 먼저 response_format을(를) 제거하십시오. 응답은 항상 data[0].b64_json 형식입니다.size을(를) 별도의 알림 없이 무시하고 항상 1024×1024 크기로 렌더링합니다. 정수형 width + height을(를) 사용하십시오(항상 함께 지정): 각 변의 길이는 768 이상이어야 하며, width × height ≤ 2,359,296(1536×1536 면적)이어야 합니다.코드 예제
Python (OpenAI SDK)
from openai import OpenAI
import base64
client = OpenAI(
api_key="sk-your-api-key",
base_url="https://api.apiyi.com/v1",
timeout=180.0 # synchronous call, give it enough time
)
resp = client.images.generate(
model="MAI-Image-2.6-Flash",
prompt='A traditional teahouse storefront with a wooden sign that reads "Welcome", red lanterns, warm dusk light, photorealistic',
# width / height are not standard OpenAI SDK fields, so pass them via extra_body
# Do not pass response_format: it returns 400
extra_body={"width": 1024, "height": 1024}
)
with open("out.png", "wb") as f:
f.write(base64.b64decode(resp.data[0].b64_json))
Python (requests)
import base64
import os
import requests
response = requests.post(
"https://api.apiyi.com/v1/images/generations",
headers={"Authorization": f"Bearer {os.environ['APIYI_API_KEY']}"},
json={
"model": "MAI-Image-2.6",
"prompt": "A red fox sitting on a mossy rock in a misty forest, soft morning light, photorealistic",
"width": 1536,
"height": 1024
},
timeout=180
)
response.raise_for_status()
with open("out.png", "wb") as f:
f.write(base64.b64decode(response.json()["data"][0]["b64_json"]))
cURL
curl -X POST "https://api.apiyi.com/v1/images/generations" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "MAI-Image-2.6-Flash",
"prompt": "A minimalist coffee shop poster with the headline \"Autumn Special\" at the top, warm brown palette",
"width": 1024,
"height": 1536
}' | python3 -c "import sys,json,base64; open('out.png','wb').write(base64.b64decode(json.load(sys.stdin)['data'][0]['b64_json']))"
Node.js (fetch)
import fs from 'node:fs';
const resp = await fetch('https://api.apiyi.com/v1/images/generations', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.APIYI_API_KEY}`
},
body: JSON.stringify({
model: 'MAI-Image-2.6-Flash',
prompt: 'A serene Japanese garden with cherry blossoms, koi pond, golden hour',
width: 1792,
height: 1008 // 16:9; width × height must not exceed 2,359,296
}),
signal: AbortSignal.timeout(120000)
});
const data = await resp.json();
fs.writeFileSync('out.png', Buffer.from(data.data[0].b64_json, 'base64'));
여러 장의 이미지가 필요한 경우: 병렬 요청 전송
text-to-image 엔드포인트는 1회 호출당 1장의 이미지를 반환하므로(n은 적용되지 않음), 요청을 병렬로 실행하십시오:
import base64, os, requests
from concurrent.futures import ThreadPoolExecutor
def gen(i):
r = requests.post(
"https://api.apiyi.com/v1/images/generations",
headers={"Authorization": f"Bearer {os.environ['APIYI_API_KEY']}"},
json={"model": "MAI-Image-2.6-Flash", "prompt": "a watercolor lighthouse at dusk"},
timeout=120
)
r.raise_for_status()
open(f"out-{i}.png", "wb").write(base64.b64decode(r.json()["data"][0]["b64_json"]))
with ThreadPoolExecutor(max_workers=4) as pool:
list(pool.map(gen, range(4)))
파라미터 레퍼런스
| 파라미터 | 타입 | 필수 여부 | 기본값 | 설명 |
|---|---|---|---|---|
model | string | ✅ | — | MAI-Image-2.6 ($0.12/이미지) 또는 MAI-Image-2.6-Flash ($0.06/이미지), 대소문자 구분 |
prompt | string | ✅ | — | 모든 언어의 prompt를 지원합니다. 이미지에 표시되어야 하는 텍스트는 따옴표로 감싸십시오 |
width | integer | ❌ | 1024 | 출력 너비입니다. ≥ 768이어야 하며, 반드시 height와(과) 함께 전송되어야 하고 16의 배수로 내림됩니다 |
height | integer | ❌ | 1024 | 출력 높이입니다. ≥ 768; 너비 × 높이 ≤ 2,359,296 |
response_format | — | — | — | 400을 반환합니다; 응답은 항상 b64_json입니다 |
seednegative_prompt | — | — | — | 400을 반환합니다 |
size | — | — | — | 이 엔드포인트에서는 조용히 무시됩니다 |
n | — | — | — | 이 엔드포인트에서는 아무런 영향을 주지 않으며, 항상 1장의 이미지만 생성됩니다 |
quality, output_format, background, style 및 기타 OpenAI 스타일 필드는 조용히 무시됩니다. 출력은 항상 PNG입니다.응답 형식
{
"created": 1790999642,
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAIAAADwf7zU..."
}
],
"usage": {
"prompt_tokens": 1000,
"total_tokens": 1000,
"input_tokens": 1000,
"output_tokens": 0
}
}
b64_json은(는)data:image/png;base64,접두사가 없는 순수 base64입니다. 이를 직접 디코딩하여 PNG를 가져올 수 있습니다.url필드가 없으며,revised_prompt도 없습니다.- 1024×1024 PNG는 약 1.5–1.7 MB(base64 기준 2.1–2.3 MB)이며, 1536×1536은 약 4–5 MB입니다. 클라이언트의 응답 크기 제한을 확인하시기 바랍니다.
usage(으)로 과금을 대조하지 마십시오: prompt_tokens은 항상 1000 × 이미지 수이고 output_tokens는 항상 0이며, 이는 플레이스홀더입니다. 이 시리즈는 이미지당 과금되며, APIYI 콘솔 청구 내역이 공식 기준입니다.인증
API key from the APIYI console
본문
Model ID (case-sensitive). 2.6 favors quality, Flash favors speed
MAI-Image-2.6-Flash, MAI-Image-2.6 Prompt in any language. Put text that should appear in the image in quotes
"A traditional teahouse storefront with a wooden sign that reads \"Welcome\", red lanterns, warm dusk light, photorealistic"
Output width in pixels. Each side ≥ 768, width × height ≤ 2,359,296 (a 1536×1536 area);
must be sent together with height; rounded down to a multiple of 16.
x >= 7681024
Output height in pixels, same rules as width
x >= 7681024
응답
Image generated
Creation timestamp
1790999642
Image results; always 1 item for text-to-image
Show child attributes
Show child attributes
Placeholder values, not for billing reconciliation. prompt_tokens is always 1000 × images and output_tokens is always 0.
The console bill is authoritative.
Show child attributes
Show child attributes
이 페이지가 도움이 되었나요?