curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gemini-3-pro-image-preview",
"prompt": "Un gato jugando en la hierba"
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "gemini-3-pro-image-preview",
"prompt": "Un gato jugando en la hierba"
}
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: 'gemini-3-pro-image-preview', prompt: 'Un gato jugando en la hierba'})
};
fetch('https://api.evolink.ai/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.evolink.ai/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' => 'gemini-3-pro-image-preview',
'prompt' => 'Un gato jugando en la hierba'
]),
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.evolink.ai/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"gemini-3-pro-image-preview\",\n \"prompt\": \"Un gato jugando en la hierba\"\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.evolink.ai/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gemini-3-pro-image-preview\",\n \"prompt\": \"Un gato jugando en la hierba\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/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\": \"gemini-3-pro-image-preview\",\n \"prompt\": \"Un gato jugando en la hierba\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-uyujaw3d",
"model": "gemini-3-pro-image-preview",
"object": "image.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 45
},
"type": "image",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 1.6,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: gemini-3-pro-image-preview",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Generación de imágenes Nanobanana Pro
- El modelo Nano Banana Pro (gemini-3-pro-image-preview) soporta modos de generación de texto a imagen, imagen a imagen, edición de imagen y otros
- Modo de procesamiento asíncrono, usa el ID de tarea devuelto para consultar
- Los enlaces de imágenes generadas son válidos por 24 horas, guárdalos oportunamente
curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gemini-3-pro-image-preview",
"prompt": "Un gato jugando en la hierba"
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "gemini-3-pro-image-preview",
"prompt": "Un gato jugando en la hierba"
}
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: 'gemini-3-pro-image-preview', prompt: 'Un gato jugando en la hierba'})
};
fetch('https://api.evolink.ai/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.evolink.ai/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' => 'gemini-3-pro-image-preview',
'prompt' => 'Un gato jugando en la hierba'
]),
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.evolink.ai/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"gemini-3-pro-image-preview\",\n \"prompt\": \"Un gato jugando en la hierba\"\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.evolink.ai/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gemini-3-pro-image-preview\",\n \"prompt\": \"Un gato jugando en la hierba\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/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\": \"gemini-3-pro-image-preview\",\n \"prompt\": \"Un gato jugando en la hierba\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1757165031,
"id": "task-unified-1757165031-uyujaw3d",
"model": "gemini-3-pro-image-preview",
"object": "image.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": true,
"estimated_time": 45
},
"type": "image",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 1.6,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: gemini-3-pro-image-preview",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Autorizaciones
##Todas las APIs requieren autenticación Bearer Token##
Obtener API Key:
Visita la Página de gestión de API Key para obtener tu API Key
Agregar al encabezado de la solicitud:
Authorization: Bearer YOUR_API_KEY
Cuerpo
Nombre del modelo de generación de imágenes, canal oficial, mejor estabilidad y controlabilidad, adecuado para escenarios comerciales
gemini-3-pro-image-preview "gemini-3-pro-image-preview"
Prompt que describe la imagen a generar, o que describe cómo editar la imagen de entrada, limitado a 2000 tokens
2000"Un gato jugando en la hierba"
Relación de aspecto de la imagen generada, por defecto es auto
auto, 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 Calidad de la imagen generada, predeterminado es 2K
Nota:
- La calidad
4Kgenerará cargos adicionales
1K, 2K, 4K Lista de URL de imágenes de referencia para la generación a partir de imágenes y la edición de imágenes
Nota:
- Hasta
14imágenes de entrada por solicitud - Tamaño de la imagen: no más de
20MB - Formatos admitidos:
.jpeg,.jpg,.png,.webp - El servidor debe poder acceder directamente a las URL o estas deben iniciar una descarga directa de la imagen (estas URL suelen terminar con una extensión de imagen como
.pngo.jpg) - Se pueden proporcionar hasta
5imágenes de personas reales
[
"https://example.com/image1.png",
"https://example.com/image2.png"
]
Parámetros de extensión del modelo
Show child attributes
Show child attributes
Dirección de callback HTTPS después de completar la tarea
Momento del callback:
- Se activa cuando la tarea se completa, falla o se cancela
- Se envía después de completar la confirmación de facturación
Restricciones de seguridad:
- Solo se admite el protocolo HTTPS
- El callback a direcciones IP internas está prohibido (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- La longitud de la URL no debe exceder
2048caracteres
Mecanismo de callback:
- Tiempo de espera:
10segundos - Máximo
3reintentos en caso de fallo (reintentos después de1segundo/2segundos/4segundos) - El formato del cuerpo de respuesta del callback es consistente con el formato de respuesta de la API de consulta de tareas
- La dirección de callback que devuelve un código de estado 2xx se considera exitosa, otros códigos de estado activarán reintentos
"https://your-domain.com/webhooks/image-task-completed"
Respuesta
Tarea de generación de imagen creada exitosamente
Marca de tiempo de creación de la tarea
1757165031
ID de tarea
"task-unified-1757165031-uyujaw3d"
Nombre del modelo real utilizado
"gemini-3-pro-image-preview"
Tipo de tarea específico
image.generation.task Porcentaje de progreso de la tarea (0-100)
0 <= x <= 1000
Estado de la tarea
pending, processing, completed, failed "pending"
Información de tarea asíncrona
Show child attributes
Show child attributes
Tipo de salida de la tarea
text, image, audio, video "image"
Información de uso y facturación
Show child attributes
Show child attributes