# El campo model puede ser "gemini-3.1-flash-image-preview" o el alias compatible "nano-banana-2-ext"curl --request POST \ --url https://api.apimart.ai/v1/images/generations \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1 }'
import Foundationlet url = URL(string: "https://api.apimart.ai/v1/images/generations")!let payload: [String: Any] = [ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1]var request = URLRequest(url: url)request.httpMethod = "POST"request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")request.setValue("application/json", forHTTPHeaderField: "Content-Type")request.httpBody = try? JSONSerialization.data(withJSONObject: payload)let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error: \(error)") return } if let data = data, let responseString = String(data: data, encoding: .utf8) { print(responseString) }}task.resume()
using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;class Program{ static async Task Main(string[] args) { var url = "https://api.apimart.ai/v1/images/generations"; var payload = @"{ ""model"": ""gemini-3.1-flash-image-preview"", ""prompt"": ""Cyberpunk cityscape at night with neon lights"", ""size"": ""16:9"", ""resolution"": ""2K"", ""n"": 1 }"; using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>"); var content = new StringContent(payload, Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result); }}
(* Requires cohttp and yojson libraries *)open Lwtopen Cohttpopen Cohttp_lwt_unixlet url = "https://api.apimart.ai/v1/images/generations"let payload = {|{ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1}|}let () = let headers = Header.init () |> fun h -> Header.add h "Authorization" "Bearer <token>" |> fun h -> Header.add h "Content-Type" "application/json" in let body = Cohttp_lwt.Body.of_string payload in let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) -> body |> Cohttp_lwt.Body.to_string >|= fun body_str -> print_endline body_str in Lwt_main.run response
import 'dart:convert';import 'package:http/http.dart' as http;void main() async { final url = Uri.parse('https://api.apimart.ai/v1/images/generations'); final payload = { 'model': 'gemini-3.1-flash-image-preview', 'prompt': 'Cyberpunk cityscape at night with neon lights', 'size': '16:9', 'resolution': '2K', 'n': 1 }; final response = await http.post( url, headers: { 'Authorization': 'Bearer <token>', 'Content-Type': 'application/json', }, body: jsonEncode(payload), ); print(response.body);}
library(httr)library(jsonlite)url <- "https://api.apimart.ai/v1/images/generations"payload <- list( model = "gemini-3.1-flash-image-preview", prompt = "Cyberpunk cityscape at night with neon lights", size = "16:9", resolution = "2K", n = 1)response <- POST( url, add_headers( Authorization = "Bearer <token>", `Content-Type` = "application/json" ), body = toJSON(payload, auto_unbox = TRUE), encode = "raw")cat(content(response, "text"))
{ "error": { "code": 500, "message": "Internal server error. Please try again later", "type": "server_error" }}
{ "error": { "code": 502, "message": "Bad gateway. The server is temporarily unavailable", "type": "bad_gateway" }}
Nano banana2
Nano banana2 Generación de imágenes
Compatible con texto a imagen e imagen a imagen, con salida hasta 4K de resolución
Hasta 14 imágenes de referencia para consistencia de estilo/personaje
Compatible con proporciones extremas (1:4, 4:1, 1:8, 8:1)
Mejora integrada con Google Search para una generación de imágenes más realista
POST
/
v1
/
images
/
generations
# El campo model puede ser "gemini-3.1-flash-image-preview" o el alias compatible "nano-banana-2-ext"curl --request POST \ --url https://api.apimart.ai/v1/images/generations \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1 }'
import Foundationlet url = URL(string: "https://api.apimart.ai/v1/images/generations")!let payload: [String: Any] = [ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1]var request = URLRequest(url: url)request.httpMethod = "POST"request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")request.setValue("application/json", forHTTPHeaderField: "Content-Type")request.httpBody = try? JSONSerialization.data(withJSONObject: payload)let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error: \(error)") return } if let data = data, let responseString = String(data: data, encoding: .utf8) { print(responseString) }}task.resume()
using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;class Program{ static async Task Main(string[] args) { var url = "https://api.apimart.ai/v1/images/generations"; var payload = @"{ ""model"": ""gemini-3.1-flash-image-preview"", ""prompt"": ""Cyberpunk cityscape at night with neon lights"", ""size"": ""16:9"", ""resolution"": ""2K"", ""n"": 1 }"; using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>"); var content = new StringContent(payload, Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result); }}
(* Requires cohttp and yojson libraries *)open Lwtopen Cohttpopen Cohttp_lwt_unixlet url = "https://api.apimart.ai/v1/images/generations"let payload = {|{ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1}|}let () = let headers = Header.init () |> fun h -> Header.add h "Authorization" "Bearer <token>" |> fun h -> Header.add h "Content-Type" "application/json" in let body = Cohttp_lwt.Body.of_string payload in let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) -> body |> Cohttp_lwt.Body.to_string >|= fun body_str -> print_endline body_str in Lwt_main.run response
import 'dart:convert';import 'package:http/http.dart' as http;void main() async { final url = Uri.parse('https://api.apimart.ai/v1/images/generations'); final payload = { 'model': 'gemini-3.1-flash-image-preview', 'prompt': 'Cyberpunk cityscape at night with neon lights', 'size': '16:9', 'resolution': '2K', 'n': 1 }; final response = await http.post( url, headers: { 'Authorization': 'Bearer <token>', 'Content-Type': 'application/json', }, body: jsonEncode(payload), ); print(response.body);}
library(httr)library(jsonlite)url <- "https://api.apimart.ai/v1/images/generations"payload <- list( model = "gemini-3.1-flash-image-preview", prompt = "Cyberpunk cityscape at night with neon lights", size = "16:9", resolution = "2K", n = 1)response <- POST( url, add_headers( Authorization = "Bearer <token>", `Content-Type` = "application/json" ), body = toJSON(payload, auto_unbox = TRUE), encode = "raw")cat(content(response, "text"))
{ "error": { "code": 500, "message": "Internal server error. Please try again later", "type": "server_error" }}
{ "error": { "code": 502, "message": "Bad gateway. The server is temporarily unavailable", "type": "bad_gateway" }}
Aviso de compatibilidad de nombres de modelo: Esta interfaz también admite el alias nano-banana-2-ext, equivalente a gemini-3.1-flash-image-preview; ambos son intercambiables y producen los mismos resultados.
# El campo model puede ser "gemini-3.1-flash-image-preview" o el alias compatible "nano-banana-2-ext"curl --request POST \ --url https://api.apimart.ai/v1/images/generations \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1 }'
import Foundationlet url = URL(string: "https://api.apimart.ai/v1/images/generations")!let payload: [String: Any] = [ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1]var request = URLRequest(url: url)request.httpMethod = "POST"request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")request.setValue("application/json", forHTTPHeaderField: "Content-Type")request.httpBody = try? JSONSerialization.data(withJSONObject: payload)let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error: \(error)") return } if let data = data, let responseString = String(data: data, encoding: .utf8) { print(responseString) }}task.resume()
using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;class Program{ static async Task Main(string[] args) { var url = "https://api.apimart.ai/v1/images/generations"; var payload = @"{ ""model"": ""gemini-3.1-flash-image-preview"", ""prompt"": ""Cyberpunk cityscape at night with neon lights"", ""size"": ""16:9"", ""resolution"": ""2K"", ""n"": 1 }"; using var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>"); var content = new StringContent(payload, Encoding.UTF8, "application/json"); var response = await client.PostAsync(url, content); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result); }}
(* Requires cohttp and yojson libraries *)open Lwtopen Cohttpopen Cohttp_lwt_unixlet url = "https://api.apimart.ai/v1/images/generations"let payload = {|{ "model": "gemini-3.1-flash-image-preview", "prompt": "Cyberpunk cityscape at night with neon lights", "size": "16:9", "resolution": "2K", "n": 1}|}let () = let headers = Header.init () |> fun h -> Header.add h "Authorization" "Bearer <token>" |> fun h -> Header.add h "Content-Type" "application/json" in let body = Cohttp_lwt.Body.of_string payload in let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) -> body |> Cohttp_lwt.Body.to_string >|= fun body_str -> print_endline body_str in Lwt_main.run response
import 'dart:convert';import 'package:http/http.dart' as http;void main() async { final url = Uri.parse('https://api.apimart.ai/v1/images/generations'); final payload = { 'model': 'gemini-3.1-flash-image-preview', 'prompt': 'Cyberpunk cityscape at night with neon lights', 'size': '16:9', 'resolution': '2K', 'n': 1 }; final response = await http.post( url, headers: { 'Authorization': 'Bearer <token>', 'Content-Type': 'application/json', }, body: jsonEncode(payload), ); print(response.body);}
library(httr)library(jsonlite)url <- "https://api.apimart.ai/v1/images/generations"payload <- list( model = "gemini-3.1-flash-image-preview", prompt = "Cyberpunk cityscape at night with neon lights", size = "16:9", resolution = "2K", n = 1)response <- POST( url, add_headers( Authorization = "Bearer <token>", `Content-Type` = "application/json" ), body = toJSON(payload, auto_unbox = TRUE), encode = "raw")cat(content(response, "text"))
Todos los endpoints de la API requieren autenticación con Bearer TokenObtenga su API Key:Visite la página de gestión de API Keys para obtener su API KeyAñádala al encabezado de la solicitud:
Nombre del modelo de generación de imágenesModelos compatibles:
gemini-3.1-flash-image-preview - Versión estándar (alias compatible nano-banana-2-ext)
gemini-3.1-flash-image-preview-official - Versión oficial (alias compatible nano-banana-2)
Ejemplo: "gemini-3.1-flash-image-preview" o "gemini-3.1-flash-image-preview-official"
Para mantener la compatibilidad con llamadas anteriores, los alias nano-banana-2-ext (corresponde a gemini-3.1-flash-image-preview) y nano-banana-2 (corresponde a gemini-3.1-flash-image-preview-official) siguen estando disponibles.
En texto a imagen, cuando size es auto, el valor predeterminado es 1:1 o 16:9; en imagen a imagen, la proporción sigue la respuesta del upstream. Se recomienda especificar una proporción.
true: El modelo buscará información textual en la web para asistir la generación de la imagen, útil en escenarios que requieran información del mundo real
Activar la mejora con búsqueda de imágenes de Google
true: Además de la búsqueda de texto, también buscará imágenes de referencia para asistir la generación, útil en escenarios que requieran referencias visuales