🍌 Google Nanobanana Image Generation
Generate stunning, high-quality images from text descriptions using Google's latest Gemini AI models. Perfect for creating marketing materials, infographics, charts, product visualizations, and artistic content.
Available Models
| Model | Endpoint | Cost | Best For |
|---|---|---|---|
| Nanobanana (gemini-2.5-flash-image) | /v3/image/generation/google/nanobanana/generate | 3 IC | Fast generation, simple graphics, quick prototypes |
| Nanobanana Pro (gemini-3-pro-image-preview) | /v3/image/generation/google/nanobananapro/generate | 8 IC | High-quality output, complex scenes, detailed artwork, 4K resolution, correct Thai text in images |
Try Demo
Try Our AI Demo
Login or create a free account to use this AI service demo and explore our powerful APIs.
Get 100 Free Credits (IC) when you sign up!
Offer ends December 31, 2025
Key Features
Text-to-Image Generation
Transform your text descriptions into stunning visuals. Simply describe what you want, and the AI will generate it.
High-Fidelity Text Rendering
Accurately generates legible text within images - perfect for infographics, charts, and marketing materials.
Multi-Turn Refinement
Iteratively adjust and refine generated images through conversation - ask for changes and the AI will update accordingly.
Thai Context Optimization
Optimized for Thai-specific content including temples, food, festivals, and cultural elements.
Use Cases
Marketing & Advertising
- Social media graphics
- Banner ads and promotional materials
- Product visualizations
- Campaign imagery
Business & Data Visualization
- Infographics and data charts
- Presentation slides
- Report illustrations
- Process diagrams
E-Commerce
- Product mockups
- Lifestyle photography
- Category banners
- Promotional graphics
Content Creation
- Blog post illustrations
- YouTube thumbnails
- Podcast covers
- Article headers
Getting Started
-
Prerequisites
- An API key from iApp Technology
- Text prompt describing the image you want to generate
-
Quick Start
- Choose between Nanobanana (fast, 3 IC) or Nanobanana Pro (high-quality, 8 IC)
- Send a POST request with your prompt
- Receive base64-encoded image in response
-
Best Practices
- Be descriptive: "A Thai temple at sunset with golden spires" works better than "temple"
- Specify style: "minimalist", "photorealistic", "watercolor", etc.
- Include context: colors, lighting, composition, mood
Please visit API Key Management page to view your existing API key or request a new one.
API Endpoints
| Endpoint | Method | Description | Cost |
|---|---|---|---|
/v3/image/generation/google/nanobanana/generate | POST | Fast image generation (gemini-2.5-flash-image) | 3 IC per request |
/v3/image/generation/google/nanobananapro/generate | POST | High-quality image generation (gemini-3-pro-image-preview) | 8 IC per request |
Request Format
Headers
| Name | Type | Description |
|---|---|---|
| apikey | String | Your iApp API Key |
| Content-Type | String | application/json |
Request Body
{
"contents": [
{
"parts": [
{
"text": "Your image description prompt here"
}
]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"]
}
}
Response Format
{
"candidates": [
{
"content": {
"parts": [
{
"inlineData": {
"mimeType": "image/png",
"data": "base64_encoded_image_data..."
}
}
]
}
}
]
}
Code Examples
- cURL
- Python
- JavaScript
- PHP
- Swift
- Kotlin
curl -X POST 'https://api.iapp.co.th/v3/image/generation/google/nanobanana/generate' \
-H 'apikey: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"contents": [
{
"parts": [
{
"text": "Create a beautiful Thai temple at sunset with golden spires"
}
]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"]
}
}'
import requests
import base64
url = "https://api.iapp.co.th/v3/image/generation/google/nanobanana/generate"
headers = {
"apikey": "YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {
"contents": [
{
"parts": [
{
"text": "Create a beautiful Thai temple at sunset with golden spires"
}
]
}
],
"generationConfig": {
"responseModalities": ["TEXT", "IMAGE"]
}
}
response = requests.post(url, headers=headers, json=payload)
result = response.json()
# Extract and save the image
if result.get("candidates"):
for part in result["candidates"][0]["content"]["parts"]:
if "inlineData" in part:
image_data = base64.b64decode(part["inlineData"]["data"])
with open("generated_image.png", "wb") as f:
f.write(image_data)
print("Image saved as generated_image.png")
const axios = require('axios');
const fs = require('fs');
const url = 'https://api.iapp.co.th/v3/image/generation/google/nanobanana/generate';
const payload = {
contents: [
{
parts: [
{
text: 'Create a beautiful Thai temple at sunset with golden spires'
}
]
}
],
generationConfig: {
responseModalities: ['TEXT', 'IMAGE']
}
};
axios.post(url, payload, {
headers: {
'apikey': 'YOUR_API_KEY',
'Content-Type': 'application/json'
}
})
.then(response => {
const candidates = response.data.candidates;
if (candidates && candidates[0]) {
for (const part of candidates[0].content.parts) {
if (part.inlineData) {
const imageBuffer = Buffer.from(part.inlineData.data, 'base64');
fs.writeFileSync('generated_image.png', imageBuffer);
console.log('Image saved as generated_image.png');
}
}
}
})
.catch(error => console.error(error));
<?php
$url = 'https://api.iapp.co.th/v3/image/generation/google/nanobanana/generate';
$payload = json_encode([
'contents' => [
[
'parts' => [
[
'text' => 'Create a beautiful Thai temple at sunset with golden spires'
]
]
]
],
'generationConfig' => [
'responseModalities' => ['TEXT', 'IMAGE']
]
]);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
'apikey: YOUR_API_KEY',
'Content-Type: application/json'
],
]);
$response = curl_exec($curl);
curl_close($curl);
$result = json_decode($response, true);
if (isset($result['candidates'][0]['content']['parts'])) {
foreach ($result['candidates'][0]['content']['parts'] as $part) {
if (isset($part['inlineData'])) {
$imageData = base64_decode($part['inlineData']['data']);
file_put_contents('generated_image.png', $imageData);
echo "Image saved as generated_image.png\n";
}
}
}
?>
import Foundation
let url = URL(string: "https://api.iapp.co.th/v3/image/generation/google/nanobanana/generate")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("YOUR_API_KEY", forHTTPHeaderField: "apikey")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let payload: [String: Any] = [
"contents": [
[
"parts": [
["text": "Create a beautiful Thai temple at sunset with golden spires"]
]
]
],
"generationConfig": [
"responseModalities": ["TEXT", "IMAGE"]
]
]
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else { return }
if let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
let candidates = json["candidates"] as? [[String: Any]],
let content = candidates.first?["content"] as? [String: Any],
let parts = content["parts"] as? [[String: Any]] {
for part in parts {
if let inlineData = part["inlineData"] as? [String: Any],
let base64String = inlineData["data"] as? String,
let imageData = Data(base64Encoded: base64String) {
// Save or use the image data
print("Image data received: \(imageData.count) bytes")
}
}
}
}
task.resume()
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.io.File
import java.util.Base64
val client = OkHttpClient()
val payload = JSONObject().apply {
put("contents", org.json.JSONArray().apply {
put(JSONObject().apply {
put("parts", org.json.JSONArray().apply {
put(JSONObject().apply {
put("text", "Create a beautiful Thai temple at sunset with golden spires")
})
})
})
})
put("generationConfig", JSONObject().apply {
put("responseModalities", org.json.JSONArray().apply {
put("TEXT")
put("IMAGE")
})
})
}
val request = Request.Builder()
.url("https://api.iapp.co.th/v3/image/generation/google/nanobanana/generate")
.addHeader("apikey", "YOUR_API_KEY")
.addHeader("Content-Type", "application/json")
.post(payload.toString().toRequestBody("application/json".toMediaType()))
.build()
client.newCall(request).execute().use { response ->
val json = JSONObject(response.body?.string() ?: "")
val candidates = json.getJSONArray("candidates")
if (candidates.length() > 0) {
val parts = candidates.getJSONObject(0)
.getJSONObject("content")
.getJSONArray("parts")
for (i in 0 until parts.length()) {
val part = parts.getJSONObject(i)
if (part.has("inlineData")) {
val base64Data = part.getJSONObject("inlineData").getString("data")
val imageBytes = Base64.getDecoder().decode(base64Data)
File("generated_image.png").writeBytes(imageBytes)
println("Image saved as generated_image.png")
}
}
}
}
Prompt Tips
Be Descriptive
Instead of: "a cat" Try: "A fluffy orange tabby cat sitting on a windowsill, warm afternoon sunlight, cozy home interior"
Specify Style
- "photorealistic" - for photo-like images
- "watercolor painting" - for artistic styles
- "minimalist flat design" - for clean graphics
- "3D rendered" - for dimensional look
- "vintage poster style" - for retro aesthetics
Include Context
- Lighting: "golden hour", "studio lighting", "neon glow"
- Composition: "close-up", "wide angle", "bird's eye view"
- Mood: "peaceful", "energetic", "dramatic"
- Colors: "blue and gold color scheme", "pastel colors", "high contrast"
Thai-Specific Prompts
- Reference Thai landmarks: Wat Arun, Grand Palace, Phi Phi Islands
- Include Thai elements: lotus flowers, elephants, Thai patterns
- Mention Thai festivals: Loy Krathong, Songkran, Thai New Year
- Use Thai food: Tom Yum, Pad Thai, Mango Sticky Rice
Pricing
| Model | Cost | Best For |
|---|---|---|
| Nanobanana | 3 IC per request | Quick prototypes, simple graphics, high volume |
| Nanobanana Pro | 8 IC per request | High-quality output, complex scenes, professional use, correct Thai text in images |
Limitations
- Maximum prompt length: 32,000 characters
- Response time: 5-30 seconds depending on complexity
- Output format: PNG or JPEG (base64 encoded)
- Content policy: No adult content, violence, or copyrighted material
Security & Compliance
- GDPR and PDPA compliant
- No data retention after processing
- SynthID watermarking on all generated images
- Content filtering for inappropriate requests
Related APIs
- Remove Background - Remove backgrounds from photos
- Face Detection - Detect faces in images
- Thai Document OCR - Extract text from images