Ir al contenido principal

Nano Banana API: precio y ejemplo en Python

Se llama con una sola API key de LaoZhang y el mismo endpoint que usa el estudio de YingTu. Abajo tienes el endpoint, los parámetros, el precio por imagen y código para copiar. Tu clave real nunca aparece en los ejemplos. A 9 de octubre de 2026, todos los IDs de modelo de esta página se cobran por imagen, sin suscripción, y funcionan con la misma clave.

Precio $0.055/ imagenGemini native512 / 1K / 2K / 4K$0.1 para nuevos usuarios

Datos clave (a 10 de octubre de 2026)

  • IDs de modelo en este endpoint: gemini-3.1-flash-lite-image, gemini-3.1-flash-image, gemini-nano-banana-2.1 y gemini-3-pro-image. Una sola clave de LaoZhang sirve para todos.
  • Precio por imagen: Nano Banana 2 Lite $0.025, Nano Banana 2 $0.055, Nano Banana 2.1 $0.045 y Nano Banana Pro $0.09. Sin suscripción; cada imagen se cobra por separado.
  • Base URL https://api2.laozhang.ai, formato de petición de Gemini: POST /v1beta/models/{model}:generateContent.
  • Las cuentas nuevas de LaoZhang reciben $0.1 para probar: unas 4 imágenes de Nano Banana 2 Lite o 1 de Nano Banana Pro.
  • La recarga en laozhang.ai se paga con tarjeta a través de Stripe o en USDT.

En marcha en 3 pasos

  1. 1

    Crea una API key en laozhang.ai (las cuentas nuevas reciben $0.1).

  2. 2

    Copia el ID del modelo y el código de abajo, y guarda la clave en una variable de entorno.

  3. 3

    Genera una imagen para comprobar la respuesta y luego escala.

Endpoint y autenticación

Endpoint de generación
POST/v1beta/models/gemini-3.1-flash-image:generateContent
Endpoint de edición
POST/v1beta/models/gemini-3.1-flash-image:generateContent
URL base
https://api2.laozhang.ai
Autenticación
API key Bearer
Formato de la petición
Gemini native
Imágenes de referencia
Sí
Límite de referencias
Hasta 5 imágenes en YingTu (no es el máximo del proveedor)
Estado de verificación
Aún no verificado: no hay una fecha de comprobación disponible.

Ejemplo de código

Cambia el prompt por el tuyo. Para imágenes de referencia, usa el ejemplo de edición de abajo.

Ejemplo de texto a imagen

export LAOZHANG_API_KEY="replace-with-your-key"

curl --fail-with-body --max-time 500 \
  -X POST 'https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent' \
  -H "Authorization: Bearer ${LAOZHANG_API_KEY}" \
  -H "Content-Type: application/json" \
  --data '{"contents":[{"parts":[{"text":"A clean product photo of a matte ceramic coffee mug on a light stone table, soft window light, natural shadows, minimal styling."}]}],"generationConfig":{"responseModalities":["IMAGE"],"imageConfig":{"imageSize":"2K"}}}'

# The JSON response can contain base64 image data or an image URL.
# If this request times out, check request and billing logs before retrying.

Ejemplo de edición con referencia

Pythongemini-3.1-flash-image · edit
import base64
import mimetypes
import os
import sys

import requests

API_KEY = os.environ.get("LAOZHANG_API_KEY")
if not API_KEY:
    raise RuntimeError("Set the LAOZHANG_API_KEY environment variable before running this example.")

API_URL = "https://api2.laozhang.ai/v1beta/models/gemini-3.1-flash-image:generateContent"
REQUEST_TIMEOUT_SECONDS = 500

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}

def encode_image(image_path):
    mime_type = mimetypes.guess_type(image_path)[0] or "image/jpeg"
    with open(image_path, "rb") as image_file:
        data = base64.b64encode(image_file.read()).decode("ascii")
    return {"mime_type": mime_type, "data": data}

reference_1 = encode_image("image_1.jpg")  # Replace with your image path

payload = {
    "contents": [{
        "parts": [
            {"text": "A clean product photo of a matte ceramic coffee mug on a light stone table, soft window light, natural shadows, minimal styling."},
            {"inline_data": reference_1}
        ]
    }],
    "generationConfig": {
        "responseModalities": ["IMAGE"],
        "imageConfig": {
            "imageSize": "2K"
        }
    }
}

try:
    response = requests.post(
        API_URL,
        headers=headers,
        json=payload,
        timeout=REQUEST_TIMEOUT_SECONDS,
    )
except requests.Timeout as error:
    print(
        "Request timed out after 500 seconds. The result status may be unknown; "
        "check call and billing logs before retrying.",
        file=sys.stderr,
    )
    raise SystemExit(1) from error

if response.status_code != 200:
    print(f"API error {response.status_code}: {response.text}", file=sys.stderr)
    raise SystemExit(1)

try:
    result = response.json()
except ValueError as error:
    print("API returned a non-JSON response.", file=sys.stderr)
    raise SystemExit(1) from error

if not isinstance(result, dict):
    print("API returned an unexpected JSON shape.", file=sys.stderr)
    raise SystemExit(1)

image_part = None
for candidate in result.get("candidates", []):
    for part in candidate.get("content", {}).get("parts", []):
        inline_data = part.get("inlineData") or part.get("inline_data")
        if inline_data and inline_data.get("data"):
            image_part = inline_data
            break
    if image_part:
        break

if not image_part:
    response_id = result.get("responseId", "not provided")
    print(f"No image data in response. responseId={response_id}", file=sys.stderr)
    raise SystemExit(1)

mime_type = image_part.get("mimeType") or image_part.get("mime_type") or "image/png"
encoded_image = image_part["data"]
if encoded_image.startswith("data:"):
    header, encoded_image = encoded_image.split(",", 1)
    mime_type = header[5:].split(";", 1)[0] or mime_type

extension_by_mime = {
    "image/jpeg": "jpg",
    "image/png": "png",
    "image/webp": "webp",
    "image/gif": "gif",
}
extension = extension_by_mime.get(mime_type, "bin")
output_path = f"output.{extension}"

with open(output_path, "wb") as output_file:
    output_file.write(base64.b64decode(encoded_image, validate=True))

print(f"Image saved: {output_path} ({mime_type})")
Los precios dependen de tu cuenta de LaoZhang. Revisa el saldo y el acceso a los modelos antes de generar en lote.

Parámetros de la petición

Los campos coinciden con el cliente actual de YingTu y los ejemplos de código.

ParámetroCómo se envía
modelObligatorio. Usa el ID exacto de esta página.
promptObligatorio. Envía la instrucción visual, nunca la API Key.
controles de salidagenerationConfig.imageConfig.aspectRatio e imageSize; la proporción automática se omite.
imágenes de referenciaOpcional. Hasta 5 imágenes en el navegador de YingTu se envían como contents[].parts[].inline_data.

Respuesta y timeout

Respuesta de imagen
El cliente lee base64 de candidates[].content.parts[].inlineData o inline_data y conserva el tipo MIME.
Respuesta sin imagen
No se considera éxito sin datos de imagen. Se muestra motivo de bloqueo, fin o response ID cuando existe.

Timeout del cliente: 500 segundos

Tras 500 segundos YingTu deja de esperar; el resultado y el cargo pueden seguir siendo desconocidos.

Sin reintento automático

YingTu no reintenta automáticamente. Revisa los registros de petición y facturación antes de otra llamada de pago.

Errores habituales

Autenticación
Comprueba la Key en la variable de entorno y la cabecera Bearer.
Acceso o saldo
Revisa en LaoZhang el acceso al modelo, saldo, facturación y restricciones.
Límite de peticiones
Reduce la concurrencia y revisa el mensaje devuelto por el proveedor o la cuenta.
Sin imagen
Revisa motivos de bloqueo y finalización, mensaje de API y response ID.
Timeout
El estado final puede ser desconocido; revisa llamadas y cargos antes de reintentar.

Limitaciones conocidas

Estos puntos describen lo que conviene comprobar antes de usar el resultado.

  • Comprueba las dimensiones reales del archivo descargado.
  • Revisa identidad, logotipos, envase, colores y detalles.
  • La disponibilidad y latencia pueden variar.
  • Confirma precio, saldo, acceso y cargos en LaoZhang.

IDs de modelo de Nano Banana en este endpoint

Mismo endpoint y mismo formato de petición; solo cambia el ID del modelo.

ModeloID del modeloPrecioTamaños
Nano Banana 2 Litegemini-3.1-flash-lite-image$0.025/ imagen1K
Nano Banana 2gemini-3.1-flash-image$0.055/ imagen512 / 1K / 2K / 4K
Nano Banana 2.1gemini-nano-banana-2.1$0.045/ imagen1K / 2K / 4K
Nano Banana Progemini-3-pro-image$0.09/ imagen1K / 2K / 4K

Preguntas sobre la API

¿Cuánto cuesta la API de Nano Banana?

Por imagen y sin suscripción: Nano Banana 2 Lite $0.025, Nano Banana 2 $0.055, Nano Banana 2.1 $0.045 y Nano Banana Pro $0.09. Cada cargo aparece en tu cuenta de LaoZhang.

¿Cómo consigo una clave de la API de Nano Banana?

Crea un token en laozhang.ai (el botón de token arriba de esta página). Una clave sirve para todos los modelos de la tabla y las cuentas nuevas reciben $0.1 para probar.

¿Cuál es la URL base?

https://api2.laozhang.ai, en formato Gemini: POST /v1beta/models/{model}:generateContent.

¿Hay una API de Nano Banana gratis?

Puedes probarla gratis: las cuentas nuevas de LaoZhang reciben $0.1, unas 4 imágenes de Nano Banana 2 Lite o 1 de Nano Banana Pro. Después cada llamada se cobra por imagen de tu saldo, sin plan mensual ni paquetes que comprar.

¿Dónde guardo la API Key?

Usa la variable de entorno del ejemplo. No guardes la Key completa en código, logs ni prompts.

¿Un timeout significa que falló?

No siempre. Tras 500 segundos el resultado o cargo puede ser desconocido; revisa los registros.

¿El límite de referencias es del proveedor?

No. Es un límite de YingTu en el navegador, no el máximo del modelo.

¿Dónde confirmo precio y acceso?

El precio, saldo, acceso y cargos actuales se confirman en la cuenta LaoZhang.

Precio y facturación

Se cobra por imagen. El precio mostrado es la tarifa actual de LaoZhang; los cargos reales, el saldo y el acceso a modelos están en tu cuenta de LaoZhang.

Datos del modelo
ID del modelo
gemini-3.1-flash-image
Precio
$0.055/ imagen
Tamaños
512 / 1K / 2K / 4K
Formato de API
Gemini native

Probar una primero en el estudio

Todos estos ajustes están en el estudio de imágenes de YingTu, y los usuarios nuevos tienen $0.1 gratis.

YingTuLaoZhang