Text-to-Image: Generate an image from a text prompt
curl --request POST \
--url https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contents": [
{
"parts": [
{
"text": "A cute cat sitting in a garden, oil painting style, HD details"
}
]
}
],
"generationConfig": {
"responseModalities": [
"IMAGE"
],
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "2K"
}
}
}
'import requests
url = "https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent"
payload = {
"contents": [{ "parts": [{ "text": "A cute cat sitting in a garden, oil painting style, HD details" }] }],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "2K"
}
}
}
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({
contents: [
{
parts: [{text: 'A cute cat sitting in a garden, oil painting style, HD details'}]
}
],
generationConfig: {
responseModalities: ['IMAGE'],
imageConfig: {aspectRatio: '16:9', imageSize: '2K'}
}
})
};
fetch('https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent', 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/v1beta/models/gemini-3-pro-image-preview:generateContent",
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([
'contents' => [
[
'parts' => [
[
'text' => 'A cute cat sitting in a garden, oil painting style, HD details'
]
]
]
],
'generationConfig' => [
'responseModalities' => [
'IMAGE'
],
'imageConfig' => [
'aspectRatio' => '16:9',
'imageSize' => '2K'
]
]
]),
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/v1beta/models/gemini-3-pro-image-preview:generateContent"
payload := strings.NewReader("{\n \"contents\": [\n {\n \"parts\": [\n {\n \"text\": \"A cute cat sitting in a garden, oil painting style, HD details\"\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\n \"IMAGE\"\n ],\n \"imageConfig\": {\n \"aspectRatio\": \"16:9\",\n \"imageSize\": \"2K\"\n }\n }\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/v1beta/models/gemini-3-pro-image-preview:generateContent")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contents\": [\n {\n \"parts\": [\n {\n \"text\": \"A cute cat sitting in a garden, oil painting style, HD details\"\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\n \"IMAGE\"\n ],\n \"imageConfig\": {\n \"aspectRatio\": \"16:9\",\n \"imageSize\": \"2K\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent")
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 \"contents\": [\n {\n \"parts\": [\n {\n \"text\": \"A cute cat sitting in a garden, oil painting style, HD details\"\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\n \"IMAGE\"\n ],\n \"imageConfig\": {\n \"aspectRatio\": \"16:9\",\n \"imageSize\": \"2K\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"candidates": [
{
"content": {
"parts": [
{
"inlineData": {
"mimeType": "image/png",
"data": "<string>"
}
}
]
},
"finishReason": "STOP"
}
],
"usageMetadata": {
"promptTokenCount": 10,
"candidatesTokenCount": 258
}
}Nano Banana Pro 이미지 생성
Text-to-Image API 참고
Nano Banana Pro 텍스트-이미지 API 참고 및 대화형 플레이그라운드 — text prompt로 이미지를 생성합니다
POST
/
v1beta
/
models
/
gemini-3-pro-image-preview:generateContent
Text-to-Image: Generate an image from a text prompt
curl --request POST \
--url https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contents": [
{
"parts": [
{
"text": "A cute cat sitting in a garden, oil painting style, HD details"
}
]
}
],
"generationConfig": {
"responseModalities": [
"IMAGE"
],
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "2K"
}
}
}
'import requests
url = "https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent"
payload = {
"contents": [{ "parts": [{ "text": "A cute cat sitting in a garden, oil painting style, HD details" }] }],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {
"aspectRatio": "16:9",
"imageSize": "2K"
}
}
}
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({
contents: [
{
parts: [{text: 'A cute cat sitting in a garden, oil painting style, HD details'}]
}
],
generationConfig: {
responseModalities: ['IMAGE'],
imageConfig: {aspectRatio: '16:9', imageSize: '2K'}
}
})
};
fetch('https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent', 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/v1beta/models/gemini-3-pro-image-preview:generateContent",
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([
'contents' => [
[
'parts' => [
[
'text' => 'A cute cat sitting in a garden, oil painting style, HD details'
]
]
]
],
'generationConfig' => [
'responseModalities' => [
'IMAGE'
],
'imageConfig' => [
'aspectRatio' => '16:9',
'imageSize' => '2K'
]
]
]),
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/v1beta/models/gemini-3-pro-image-preview:generateContent"
payload := strings.NewReader("{\n \"contents\": [\n {\n \"parts\": [\n {\n \"text\": \"A cute cat sitting in a garden, oil painting style, HD details\"\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\n \"IMAGE\"\n ],\n \"imageConfig\": {\n \"aspectRatio\": \"16:9\",\n \"imageSize\": \"2K\"\n }\n }\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/v1beta/models/gemini-3-pro-image-preview:generateContent")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contents\": [\n {\n \"parts\": [\n {\n \"text\": \"A cute cat sitting in a garden, oil painting style, HD details\"\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\n \"IMAGE\"\n ],\n \"imageConfig\": {\n \"aspectRatio\": \"16:9\",\n \"imageSize\": \"2K\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent")
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 \"contents\": [\n {\n \"parts\": [\n {\n \"text\": \"A cute cat sitting in a garden, oil painting style, HD details\"\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\n \"IMAGE\"\n ],\n \"imageConfig\": {\n \"aspectRatio\": \"16:9\",\n \"imageSize\": \"2K\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"candidates": [
{
"content": {
"parts": [
{
"inlineData": {
"mimeType": "image/png",
"data": "<string>"
}
}
]
},
"finishReason": "STOP"
}
],
"usageMetadata": {
"promptTokenCount": 10,
"candidatesTokenCount": 258
}
}오른쪽의 인터랙티브 플레이그라운드에서는 매개변수(종횡비, 해상도, 응답 유형 등)를 드롭다운으로 선택할 수 있습니다. 테스트 요청을 한 번에 보내려면 Authorization 필드에 API Key를 입력하십시오(형식:
Bearer sk-xxx).범위: 이 페이지는 텍스트-투-이미지 생성용입니다. 프롬프트만 입력하면 되며, 이미지 업로드는 필요하지 않습니다. 기존 이미지를 편집하려면 이미지 편집 엔드포인트를 사용하십시오.
🖥️ 브라우저 플레이그라운드 제한(중요)이 엔드포인트는 응답으로 base64로 인코딩된 이미지(
inlineData.data, 일반적으로 수 MB)를 반환합니다. 브라우저 렌더링 한계 때문에 오른쪽의 플레이그라운드에는 응답이 도착한 뒤 请求时发生错误: unable to complete request가 표시될 수 있습니다 — 요청은 실제로 성공했습니다. 브라우저가 이렇게 긴 base64 문자열을 렌더링할 수 없을 뿐입니다.권장 작업 흐름(초보자 친화적):- 아래의 Python / Node.js / cURL 샘플을 복사해 로컬에서 실행하십시오. 코드는 응답을 자동으로
base64.b64decode하고 이미지를 파일로 저장합니다. - 브라우저 내 플레이그라운드를 반드시 사용해야 한다면,
imageSize를 가장 작은 티어(예:1K)로 설정하여 응답을 줄이십시오.
모든 이미지 API는 동기식입니다. 즉, 폴링할 작업 ID가 없으며, 클라이언트가 연결을 끊으면 요청은 계속 과금되지만 결과는 사라집니다. 이 모델에는 충분히 넉넉한 타임아웃을 설정하십시오. 자세한 내용은 이미지 API 필수 사항 및 모범 사례를 참조하십시오.
코드 예제
Python
import requests
import base64
API_KEY = "sk-your-api-key"
PROMPT = "A cute cat sitting in a garden, oil painting style, HD details"
response = requests.post(
"https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent",
headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
json={
"contents": [{"parts": [{"text": PROMPT}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
}
},
timeout=300
).json()
img_data = response["candidates"][0]["content"]["parts"][0]["inlineData"]["data"]
with open("output.png", 'wb') as f:
f.write(base64.b64decode(img_data))
print("Image saved to output.png")
cURL
curl -X POST "https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"parts": [{"text": "Futuristic city night view, neon lights, cyberpunk style"}]}],
"generationConfig": {
"responseModalities": ["IMAGE"],
"imageConfig": {"aspectRatio": "16:9", "imageSize": "2K"}
}
}'
Node.js
import fs from "fs";
const API_KEY = "sk-your-api-key";
const response = await fetch(
"https://api.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent",
{
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
contents: [{ parts: [{ text: "Futuristic city night view, neon lights, cyberpunk style" }] }],
generationConfig: {
responseModalities: ["IMAGE"],
imageConfig: { aspectRatio: "16:9", imageSize: "2K" }
}
})
}
);
const data = await response.json();
const imgBase64 = data.candidates[0].content.parts[0].inlineData.data;
fs.writeFileSync("output.png", Buffer.from(imgBase64, "base64"));
매개변수 빠른 참조
| 매개변수 | 유형 | 필수 | 설명 |
|---|---|---|---|
contents[].parts[].text | string | Yes | 텍스트 프롬프트 |
generationConfig.responseModalities | array | Yes | ["IMAGE"] 또는 ["TEXT","IMAGE"] |
generationConfig.imageConfig.aspectRatio | string | No | 10가지 비율, 기본값 1:1 |
generationConfig.imageConfig.imageSize | string | No | 1K / 2K / 4K, 기본값 1K |
자세한 매개변수 문서, 허용 값, 기본값은 오른쪽 Playground의 필드 설명을 참조하십시오.
aspectRatio, imageSize 같은 모든 enum 유형 필드는 드롭다운 선택을 지원하므로 수동 입력이 필요하지 않습니다.지원되지 않는 기능다음 Google 공식 기능은 APIYI를 통해서는 지원되지 않으며 별도의 과금이 필요합니다:
- Google Search를 통한 Grounding:
tools: [{"google_search": {}}]를 통한 실시간 검색 정보 - thinkingConfig(Thinking 모드): Nano Banana 2에서만 지원되며, Nano Banana Pro에서는 지원되지 않음
인증
API Key from APIYI Console
본문
application/json
이 페이지가 도움이 되었나요?
⌘I