# El campo model puede ser "gemini-2.5-flash-image-preview" o el alias compatible "nano-banana-ext"
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
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: "gemini-2.5-flash-image-preview",
prompt: "A bamboo forest path under moonlight",
size: "1:1",
n: 1,
image_urls: [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
};
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));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/images/generations"
payload := map[string]interface{}{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": []string{
"https://openai-documentation.vercel.app/images/cat_and_otter.png",
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/images/generations";
String payload = """
{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/images/generations";
$payload = [
"model" => "gemini-2.5-flash-image-preview",
"prompt" => "A bamboo forest path under moonlight",
"size" => "1:1",
"n" => 1,
"image_urls" => [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/images/generations")
payload = {
model: "gemini-2.5-flash-image-preview",
prompt: "A bamboo forest path under moonlight",
size: "1:1",
n: 1,
image_urls: [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/images/generations")!
let payload: [String: Any] = [
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
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-2.5-flash-image-preview"",
""prompt"": ""A bamboo forest path under moonlight"",
""size"": ""1:1"",
""n"": 1,
""image_urls"": [
""https://openai-documentation.vercel.app/images/cat_and_otter.png""
]
}";
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);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/images/generations";
const char *payload = "{"
"\"model\":\"gemini-2.5-flash-image-preview\","
"\"prompt\":\"A bamboo forest path under moonlight\","
"\"size\":\"1:1\","
"\"n\":1,"
"\"image_urls\":[\"https://openai-documentation.vercel.app/images/cat_and_otter.png\"]"
"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/images/generations"];
NSDictionary *payload = @{
@"model": @"gemini-2.5-flash-image-preview",
@"prompt": @"A bamboo forest path under moonlight",
@"size": @"1:1",
@"n": @1,
@"image_urls": @[
@"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/images/generations"
let payload = {|{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}|}
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-2.5-flash-image-preview',
'prompt': 'A bamboo forest path under moonlight',
'size': '1:1',
'n': 1,
'image_urls': [
'https://openai-documentation.vercel.app/images/cat_and_otter.png'
]
};
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-2.5-flash-image-preview",
prompt = "A bamboo forest path under moonlight",
size = "1:1",
n = 1,
image_urls = list(
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
)
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Invalid authentication credentials",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance. Please top up your account",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden. You don't have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later",
"type": "rate_limit_error"
}
}
{
"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 banana
Nano banana Generación de imágenes
- Modo de procesamiento asíncrono, devuelve un ID de tarea para consultas posteriores
- Velocidad de generación rápida, optimizado para creación de imágenes ágil
- Los enlaces de las imágenes generadas son válidos durante 24 horas; guárdelos cuanto antes
POST
/
v1
/
images
/
generations
# El campo model puede ser "gemini-2.5-flash-image-preview" o el alias compatible "nano-banana-ext"
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
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: "gemini-2.5-flash-image-preview",
prompt: "A bamboo forest path under moonlight",
size: "1:1",
n: 1,
image_urls: [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
};
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));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/images/generations"
payload := map[string]interface{}{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": []string{
"https://openai-documentation.vercel.app/images/cat_and_otter.png",
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/images/generations";
String payload = """
{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/images/generations";
$payload = [
"model" => "gemini-2.5-flash-image-preview",
"prompt" => "A bamboo forest path under moonlight",
"size" => "1:1",
"n" => 1,
"image_urls" => [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/images/generations")
payload = {
model: "gemini-2.5-flash-image-preview",
prompt: "A bamboo forest path under moonlight",
size: "1:1",
n: 1,
image_urls: [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/images/generations")!
let payload: [String: Any] = [
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
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-2.5-flash-image-preview"",
""prompt"": ""A bamboo forest path under moonlight"",
""size"": ""1:1"",
""n"": 1,
""image_urls"": [
""https://openai-documentation.vercel.app/images/cat_and_otter.png""
]
}";
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);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/images/generations";
const char *payload = "{"
"\"model\":\"gemini-2.5-flash-image-preview\","
"\"prompt\":\"A bamboo forest path under moonlight\","
"\"size\":\"1:1\","
"\"n\":1,"
"\"image_urls\":[\"https://openai-documentation.vercel.app/images/cat_and_otter.png\"]"
"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/images/generations"];
NSDictionary *payload = @{
@"model": @"gemini-2.5-flash-image-preview",
@"prompt": @"A bamboo forest path under moonlight",
@"size": @"1:1",
@"n": @1,
@"image_urls": @[
@"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/images/generations"
let payload = {|{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}|}
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-2.5-flash-image-preview',
'prompt': 'A bamboo forest path under moonlight',
'size': '1:1',
'n': 1,
'image_urls': [
'https://openai-documentation.vercel.app/images/cat_and_otter.png'
]
};
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-2.5-flash-image-preview",
prompt = "A bamboo forest path under moonlight",
size = "1:1",
n = 1,
image_urls = list(
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
)
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Invalid authentication credentials",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance. Please top up your account",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden. You don't have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later",
"type": "rate_limit_error"
}
}
{
"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-ext, equivalente a gemini-2.5-flash-image-preview; ambos son intercambiables y producen los mismos resultados.# El campo model puede ser "gemini-2.5-flash-image-preview" o el alias compatible "nano-banana-ext"
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
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: "gemini-2.5-flash-image-preview",
prompt: "A bamboo forest path under moonlight",
size: "1:1",
n: 1,
image_urls: [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
};
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));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/images/generations"
payload := map[string]interface{}{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": []string{
"https://openai-documentation.vercel.app/images/cat_and_otter.png",
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/images/generations";
String payload = """
{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/images/generations";
$payload = [
"model" => "gemini-2.5-flash-image-preview",
"prompt" => "A bamboo forest path under moonlight",
"size" => "1:1",
"n" => 1,
"image_urls" => [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/images/generations")
payload = {
model: "gemini-2.5-flash-image-preview",
prompt: "A bamboo forest path under moonlight",
size: "1:1",
n: 1,
image_urls: [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/images/generations")!
let payload: [String: Any] = [
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
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-2.5-flash-image-preview"",
""prompt"": ""A bamboo forest path under moonlight"",
""size"": ""1:1"",
""n"": 1,
""image_urls"": [
""https://openai-documentation.vercel.app/images/cat_and_otter.png""
]
}";
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);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/images/generations";
const char *payload = "{"
"\"model\":\"gemini-2.5-flash-image-preview\","
"\"prompt\":\"A bamboo forest path under moonlight\","
"\"size\":\"1:1\","
"\"n\":1,"
"\"image_urls\":[\"https://openai-documentation.vercel.app/images/cat_and_otter.png\"]"
"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/images/generations"];
NSDictionary *payload = @{
@"model": @"gemini-2.5-flash-image-preview",
@"prompt": @"A bamboo forest path under moonlight",
@"size": @"1:1",
@"n": @1,
@"image_urls": @[
@"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/images/generations"
let payload = {|{
"model": "gemini-2.5-flash-image-preview",
"prompt": "A bamboo forest path under moonlight",
"size": "1:1",
"n": 1,
"image_urls": [
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
}|}
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-2.5-flash-image-preview',
'prompt': 'A bamboo forest path under moonlight',
'size': '1:1',
'n': 1,
'image_urls': [
'https://openai-documentation.vercel.app/images/cat_and_otter.png'
]
};
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-2.5-flash-image-preview",
prompt = "A bamboo forest path under moonlight",
size = "1:1",
n = 1,
image_urls = list(
"https://openai-documentation.vercel.app/images/cat_and_otter.png"
)
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Invalid authentication credentials",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance. Please top up your account",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden. You don't have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later",
"type": "rate_limit_error"
}
}
{
"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"
}
}
Autorizaciones
string
requerido
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:
Authorization: Bearer YOUR_API_KEY
Body
string
predeterminado:"gemini-2.5-flash-image-preview"
requerido
Nombre del modelo de generación de imágenesModelos compatibles:
gemini-2.5-flash-image-preview- Versión estándar (alias compatiblenano-banana-ext)gemini-2.5-flash-image-preview-official- Versión oficial (alias compatiblenano-banana)
"gemini-2.5-flash-image-preview" o "gemini-2.5-flash-image-preview-official"Para mantener la compatibilidad con llamadas anteriores, los alias
nano-banana-ext (corresponde a gemini-2.5-flash-image-preview) y nano-banana (corresponde a gemini-2.5-flash-image-preview-official) siguen estando disponibles.boolean
predeterminado:"false"
Indica si se debe moderar el contenido antes de enviar la tarea de imagen.
true: revisar los prompts y las imágenes de entrada conomni-moderation-latestfalseu omitido: no enviar una solicitud de moderación, sin coste ni latencia de moderación adicionales (predeterminado)
string
requerido
Descripción textual para la generación de la imagenMáximo 1000 caracteres
string
Tamaño de generación de la imagenFormatos compatibles:
- Proporción:
auto,1:1,2:3,3:2,3:4,4:3,4:5,5:4,9:16,16:9,21:9
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.string
predeterminado:"1K"
Resolución de la imagen de salidaValores compatibles:
1K- Resolución 1K (predeterminado)
integer
Número de imágenes a generarRango: 1Predeterminado: 1⚠️ Nota: Debe introducirse como número puro (p. ej.,
1), no use comillas o se producirá un errorboolean
predeterminado:"false"
Si se debe usar el canal oficial como fallback
false: No usar (predeterminado)true: Usar el canal oficial
Cuando se usa el canal oficial (
gemini-2.5-flash-image-preview-official), este parámetro no puede usarse.array
Lista de URLs de imágenes de referencia para imagen a imagen o edición de imagen💡 Relleno rápido (área Try it):
Límite: Máximo 14 imágenes
- Haga clic en ”+ Add an item” para añadir una URL de imagen
- Introduzca la URL completa de la imagen o los datos base64
Mostrar Descripción detallada del campo
Mostrar Descripción detallada del campo
Cada elemento del array es una cadena, admitiendo dos formatos:1. URL completa de la imagen
- URL de imagen accesible públicamente (http:// o https://)
- Ejemplo:
"https://example.com/image.jpg"
- Debe usar el formato completo Data URI
- Formato:
data:image/{format};base64,{base64data} - Formatos de imagen compatibles: jpeg, png, webp, etc.
- Ejemplo:
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABg..." - ⚠️ Nota: Debe incluir el prefijo
data:image/jpeg;base64,
- Cada imagen no debe superar 10MB
- Formatos compatibles: .jpeg, .jpg, .png, .webp
Response
integer
Código de estado de la respuesta
⌘I