Una solicitud fallida es gratis: así funciona el pago por imagen
El importe se cobra al enviar la solicitud y, si no se genera ninguna imagen, vuelve solo a tu saldo. Qué muestran la respuesta de la API y el portal, qué errores no llegan a cobrarse y qué no cubre esta regla.
Redacción de RendergridSobre la redacción
En resumen
Una solicitud se cobra al enviarla y, si no sale ninguna imagen, el importe vuelve al instante a tu saldo, sin que lo pidas. En la API, el cargo llega en cost y un fallo aparece como failed con error y failure; en el portal, el cargo y el reembolso quedan en el historial de operaciones. Un intento nuevo es otra solicitud y se cobra de nuevo.
¿Cuándo se cobra una imagen?
El cargo se hace al aceptar la solicitud. Una imagen de Nano Banana 2.1 en 2K, como las tres de este artículo, cuesta $0,03 (precio verificado el ). Los precios están en dólares estadounidenses; el detalle, en la página de precios.
Si la imagen no sale, hay un cargo que deshacer, y Rendergrid lo hace solo. Las tres imágenes de este artículo son resultados de solicitudes que terminaron bien. Una solicitud fallida no produce imagen y por eso no mostramos ninguna.
Prompt: botella de vidrio ámbar
Una sola botella de vidrio ámbar con tapa negra lisa sobre una base baja y redonda de piedra clara. Encuadre frontal, producto completo en el centro y fondo beige mate. La luz suave de la izquierda debe dibujar un reflejo fino en el vidrio. Deja espacio alrededor. Sin texto, logotipos, personas ni marcas de agua.
Nano Banana 2.1
nano-banana-2.1 · 2K · 1:1 · $0,03
Nano Banana 2.1, 2K, 1:1, un intento. Una botella de vidrio ámbar con tapa negra lisa, vista de frente y centrada en el encuadre, sobre una base baja de piedra clara con el borde rugoso y un fondo beige mate. El vidrio muestra reflejos suaves en el lado izquierdo, y alrededor queda espacio libre. No hay texto, logotipos, personas ni marcas de agua. No vemos diferencias con lo que pedía el prompt ni defectos a este tamaño.
¿Qué solicitudes no cuestan nada?
Hay tres caminos, y en ninguno pagas por una imagen que no recibes:
- La API no acepta la solicitud. Prompt vacío, resolución o relación de aspecto que el modelo no admite, imagen de referencia que no se descarga: llega un error (
400 ERR_INVALID_REQUESTo422 ERR_INPUT_FETCH_FAILED) y el saldo no cambia. - La tarea se acepta, pero no sale imagen. Pasa de
202afailed, por un rechazo de las reglas de contenido (declined) o por un fallo del servicio (error): el importe vuelve al saldo por sí solo. - El envío termina en
500o503. ConERR_GENERATION_FAILEDoERR_INTERNAL, el importe de una solicitud que no creó nada se devuelve solo. Tras un500, comprueba la tarea con la misma clave de idempotencia antes de reintentar.
¿Cómo se ve en la respuesta de la API?
La solicitud de generación responde 202 con id, status, task_id y cost. Significa «solicitud aceptada», no «imagen lista»: el resultado se consulta con GET /creations/{id}, como máximo una vez cada 5 segundos por tarea. Si la tarea falla, esa consulta responde 200 con status: "failed", el texto error y el objeto failure (type, code y retryable).
curl https://api.rendergrid.io/ api/ public/ v1/ images/ generate \ -H "Authorization: Bearer $RENDERGRID_API_KEY" \ -H "Content-Type: application/json" \ -H "X-Idempotency-Key: botella-ambar-1" \ -d '{ "model": "nano-banana-2.1", "prompt": "Una botella de vidrio ámbar sobre una base de piedra clara, fondo beige, luz suave", "resolution": "2K", "aspect_ratio": "1:1" }' # después, con el id de la respuesta: curl https:// api.rendergrid.io/ api/ public/ v1/ creations/ 5b0214ae-9e39-460a-820a-f6ae3e24400b \ -H "Authorization: Bearer $RENDERGRID_API_KEY"
import os, time, requests API = "https://api.rendergrid.io/ api/ public/ v1" HEADERS = {"Authorization": f"Bearer {os.environ['RENDERGRID_API_KEY']}"} response = requests.post( f"{API}/images/generate", headers={**HEADERS, "X-Idempotency-Key": "botella-ambar-1"}, json={ "model": "nano-banana-2.1", "prompt": "Una botella de vidrio ámbar sobre una base de piedra clara, fondo beige, luz suave", "resolution": "2K", "aspect_ratio": "1:1", }, ) response.raise_for_status() job = response.json() print("cost:", job["cost"]) while True: creation = requests.get(f"{API}/creations/{job['id']}", headers=HEADERS).json() if creation["status"] in ("completed", "failed"): break time.sleep(5) if creation["status"] == "failed": print(creation["failure"]["type"], creation["failure"]["code"], creation["failure"]["retryable"]) else: print(creation["result_urls"])
// Node.js 22+, archivo .mjs const API = "https://api.rendergrid.io/ api/ public/ v1"; const auth = { Authorization: `Bearer ${process.env.RENDERGRID_API_KEY}` }; const response = await fetch(`${API}/images/generate`, { method: "POST", headers: { ...auth, "Content-Type": "application/json", "X-Idempotency-Key": "botella-ambar-1" }, body: JSON.stringify({ model: "nano-banana-2.1", prompt: "Una botella de vidrio ámbar sobre una base de piedra clara, fondo beige, luz suave", resolution: "2K", aspect_ratio: "1:1", }), }); if (response.status !== 202) throw new Error(`HTTP ${response.status}: ${await response.text()}`); const job = await response.json(); console.log("cost:", job.cost); let creation; do { await new Promise((resolve) => setTimeout(resolve, 5000)); creation = await fetch(`${API}/creations/${job.id}`, { headers: auth }).then((r) => r.json()); } while (creation.status === "queued" || creation.status === "processing"); console.log(creation.status === "failed" ? creation.failure : creation.result_urls);
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "queued",
"task_id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"cost": 0.03
}
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "failed",
"error": "The image or prompt was rejected by the safety filter. Try a different image or rephrase the prompt.",
"failure": {
"type": "declined",
"code": "content_policy",
"retryable": false
}
}
declined indica que la causa está en la propia solicitud y error, que está en el servicio: los dos se reembolsan igual. Basa tu lógica en failure.type y failure.code, porque el texto de error está en inglés y puede cambiar.
Cuando la tarea termina bien, el estado es completed y result_urls trae los enlaces. Así salió la segunda solicitud de este artículo:
Prompt: dos dispensadores de cerámica
Fotografía dos dispensadores de cerámica, blanco y arena, sobre bloques bajos contiguos. Orienta las boquillas hacia el mismo lado. Usa una vista de tres cuartos con fondo claro, sombras suaves y un pequeño espacio entre los envases. Ninguna pieza debe salir del encuadre. Sin texto, logotipos, personas ni marcas de agua.
Nano Banana 2.1
nano-banana-2.1 · 2K · 1:1 · $0,03
Nano Banana 2.1, 2K, 1:1, un intento. Dos dispensadores de cerámica con bomba: el blanco a la izquierda y el color arena, con pequeñas motas visibles, a la derecha. Cada uno está sobre su bloque bajo de piedra rugosa, con una separación entre los dos envases, y las dos boquillas apuntan hacia el mismo lado, la izquierda, como pedía el prompt. Se aparta del prompt en la vista: pedía una vista de tres cuartos y el encuadre es de frente y casi simétrico. Ninguna pieza sale del encuadre. No hay texto ni logotipos.
¿Dónde ves el cargo y el reembolso en el portal?
En el portal, la sección de saldo y recargas muestra tu saldo y el historial de operaciones: ahí aparece el cargo de cada generación y, si la solicitud falla, su reembolso. La pantalla de analítica suma lo que volvió al saldo en el periodo que muestra. El reembolso es automático; un error de la API no lo confirma por sí solo, así que compruébalo en el saldo.
Prompt: escobilla, jabón y toalla
Vista cenital de una escobilla de madera, un jabón ovalado y una toalla blanca doblada sobre una superficie beige. Separa los objetos con distancias regulares, sin superponerlos. La luz de día difusa deja ver las cerdas y la textura de la toalla. Reserva un margen vacío. Sin texto, logotipos, personas ni marcas de agua.
Nano Banana 2.1
nano-banana-2.1 · 2K · 1:1 · $0,03
Nano Banana 2.1, 2K, 1:1, un intento. Vista desde un ángulo alto, casi vertical, de tres objetos en una fila sobre una superficie beige: a la izquierda una escobilla ovalada de madera con las cerdas bien marcadas, entre las otras dos piezas un jabón ovalado de tono beige, parecido al del fondo, y a la derecha una toalla blanca doblada con la trama de pequeñas protuberancias bien visible. Las separaciones entre los objetos son parecidas y ninguno se superpone. La luz es difusa, con sombras muy suaves, y queda margen vacío alrededor, más amplio arriba y abajo que a los lados. No hay texto ni logotipos. El prompt pedía una vista cenital: el ángulo es alto y casi vertical, pero del jabón se ve un poco su canto inferior.
¿Qué no cubre este artículo?
- Un intento nuevo es una operación nueva. Con la misma clave, repetir la solicitud devuelve la misma respuesta
202, que puede seguir diciendoqueued, y una tareafailedno se reinicia. El intento nuevo lleva una clave nueva y se cobra como cualquier otro; el cargo anterior ya volvió solo. Más en el artículo sobre lotes, webhooks e idempotencia. - No hay un plazo prometido para el resultado. El reembolso es inmediato cuando la tarea falla, pero cuánto tarda una tarea en terminar o en fallar depende del modelo y de la carga.
Una solicitud fallida es gratis
Haz tu primera solicitud
Abre la zona de pruebas de Nano Banana 2.1 y genera una imagen. Si la solicitud falla, el importe vuelve a tu saldo.
Probar Nano Banana 2.1Preguntas frecuentes
¿Se cobra una solicitud fallida?
¿Se reembolsa una solicitud rechazada por las reglas de contenido?
¿Puedo reintentar con la misma clave de idempotencia?
failed, no: la misma clave no la reinicia. Un intento nuevo es una solicitud nueva con una clave nueva.Fuentes
- Documentación de Rendergrid: crear una imagenEl cargo y el campo
cost. - Documentación de Rendergrid: tareas y estadosLos estados finales y
failure. - Documentación de Rendergrid: códigos de errorErrores antes del cargo y reembolsos.
- Documentación de Rendergrid: reintentos sin doble cargoLa clave de idempotencia.
- Documentación de Rendergrid: saldoEl saldo y el reembolso.
- Precios de RendergridPrecio por imagen. Verificado el .
- Las tres imágenes de este artículoNano Banana 2.1, 2K, 1:1, un intento.





