01Cómo empezar
Documentación de la API de imágenes con IA
Consigue una clave, envía una solicitud y descarga la imagen terminada. Te llevará cinco minutos.
Este modelo no genera todas las resoluciones ni todas las relaciones de aspecto: los ejemplos usan las que tiene disponibles.
Qué necesitas
- Una cuenta de Rendergrid y una clave de API: cómo conseguirla.
- Saldo en dólares estadounidenses. Una imagen de Nano Banana Pro en 1K cuesta $0,04, así que con $1 salen 25 imágenes. Los precios de todos los modelos están en la página de precios.
- Cualquier lenguaje capaz de enviar solicitudes HTTPS. En los ejemplos: curl, Python con el paquete
requestsy Node.js 22+.
Empieza con una recarga pequeña: el cargo se hace por cada imagen, y una solicitud fallida es gratis: el importe vuelve de inmediato al saldo.
Paso 1. Consigue la clave
En el portal abre la sección «Claves de API» y pulsa «Crear clave». La clave tiene el aspecto rg_live_ más 40 caracteres. Se muestra una sola vez: cópiala enseguida.
Guarda la clave en una variable de entorno del servidor. Así no acabará en el código ni en el repositorio.
$ export RENDERGRID_API_KEY="rg_live_tu_clave"
La clave es la contraseña de tu saldo. No la pegues en el código de un sitio web ni de una aplicación para teléfonos: envía las solicitudes a la API solo desde el servidor.
Paso 2. Envía la solicitud
Para la primera imagen hacen falta tres campos: model, prompt y, si importa la relación de aspecto, aspect_ratio. El encabezado X-Idempotency-Key protege de un doble cargo si hay que repetir la solicitud.
# Hacen falta bash, curl y uuidgen. La clave de idempotencia es una por solicitud. IDEMPOTENCY_KEY="$(uuidgen)" || exit 1 curl --fail-with-body --max-time 30 \ -X POST https://api.rendergrid.io/ api/ public/ v1/ images/ generate \ -H "Authorization: Bearer $RENDERGRID_API_KEY" \ -H "Content-Type: application/json" \ -H "X-Idempotency-Key: $IDEMPOTENCY_KEY" \ -d '{ "model": "nano-banana-pro", "prompt": "Taza de cerámica sobre mármol, luz suave de ventana", "resolution": "1K", "aspect_ratio": "4:5" }'
import os import uuid import requests key = os.environ["RENDERGRID_API_KEY"] payload = { "model": "nano-banana-pro", "prompt": "Taza de cerámica sobre mármol, luz suave de ventana", "resolution": "1K", "aspect_ratio": "4:5", } response = requests.post( "https://api.rendergrid.io/ api/ public/ v1/ images/ generate", headers={ "Authorization": f"Bearer {key}", # nueva en cada solicitud; al repetir, la misma "X-Idempotency-Key": str(uuid.uuid4()), }, json=payload, timeout=(10, 120), ) response.raise_for_status() creation = response.json() print(creation["id"], creation["status"], creation["cost"])
// Node.js 22+, archivo .mjs import { randomUUID } from "node:crypto"; const API = "https://api.rendergrid.io/ api/ public/ v1"; const response = await fetch(`${API}/images/generate`, { method: "POST", headers: { Authorization: `Bearer ${process.env.RENDERGRID_API_KEY}`, "Content-Type": "application/json", // nueva en cada solicitud; al repetir, la misma "X-Idempotency-Key": randomUUID(), }, body: JSON.stringify({ model: "nano-banana-pro", prompt: "Taza de cerámica sobre mármol, luz suave de ventana", resolution: "1K", aspect_ratio: "4:5", }), signal: AbortSignal.timeout(120_000), }); if (!response.ok) { const body = await response.text(); throw new Error(`HTTP ${response.status}: ${body}`); } const creation = await response.json(); console.log(creation.id, creation.status, creation.cost);
La respuesta será 202 Accepted. Significa «solicitud aceptada», no «imagen lista». Guarda el id: con él sabrás el resultado.
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "queued",
"task_id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"cost": 0.04
}cost es el importe en dólares que hemos cargado por la imagen. Va escrito como número, por ejemplo 0.04.
Paso 3. Espera el resultado
La imagen tarda entre unos segundos y un minuto en generarse. Comprueba el estado como máximo una vez cada 5 segundos. Mientras el estado sea queued o processing, espera; completed significa que la imagen está lista; failed, que no ha salido bien.
CREATION_ID="5b0214ae-9e39-460a-820a-f6ae3e24400b" # el id del paso 2 curl --fail-with-body --max-time 20 \ "https://api.rendergrid.io/ api/ public/ v1/ creations/ $CREATION_ID" \ -H "Authorization: Bearer $RENDERGRID_API_KEY"
import os import time import requests API = "https://api.rendergrid.io/ api/ public/ v1" KEY = os.environ["RENDERGRID_API_KEY"] HEADERS = {"Authorization": f"Bearer {KEY}"} creation_id = "5b0214ae-9e39-460a-820a-f6ae3e24400b" # el id del paso 2 while True: r = requests.get( f"{API}/creations/{creation_id}", headers=HEADERS, timeout=(5, 20), ) r.raise_for_status() creation = r.json() if creation["status"] in ("completed", "failed"): break time.sleep(5) # no se puede consultar más de una vez cada 5 segundos if creation["status"] == "completed": print(creation["result_urls"]) else: print(creation["error"], creation["failure"])
// Node.js 22+, archivo .mjs const API = "https://api.rendergrid.io/ api/ public/ v1"; const key = process.env.RENDERGRID_API_KEY; const headers = { Authorization: `Bearer ${key}` }; // el id del paso 2 const creationId = "5b0214ae-9e39-460a-820a-f6ae3e24400b"; let creation; do { // no se puede consultar más de una vez cada 5 segundos await new Promise((resolve) => setTimeout(resolve, 5000)); const url = `${API}/creations/${creationId}`; const res = await fetch(url, { headers }); if (!res.ok) { throw new Error(`HTTP ${res.status}: ${await res.text()}`); } creation = await res.json(); } while (["queued", "processing"].includes(creation.status)); console.log(creation.status); console.log(creation.result_urls ?? creation.error);
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "completed",
"result_urls": ["https:// cdn.rendergrid.io/ images/ example/ result.jpg"]
}Una solicitud fallida es gratis: el importe vuelve de inmediato al saldo.
Por eso un fallo se puede repetir sin más: sobre los reintentos sin doble cargo.
En lugar de consultar el estado, puedes recibir un evento cuando la imagen esté lista: webhooks. Todos los estados y los campos de la respuesta están en la página «Tareas y estados».
Paso 4. Descarga la imagen
Los enlaces de result_urls valen un día y después el archivo se elimina. Guarda la imagen por tu parte en cuanto el estado sea completed.
$ curl -L -o result.jpg \ "https://cdn.rendergrid.io/ images/ example/ result.jpg"
Listo: la clave, la solicitud y la primera imagen. Después puedes añadir imágenes de referencia, elegir otro modelo o conectar webhooks.