01Начало работы
Быстрый старт
Получите ключ, отправьте один запрос и скачайте готовую картинку. Это займёт пять минут.
Эта модель рисует не все разрешения и форматы кадра: в примерах стоят те, что ей доступны.
Что понадобится
- Аккаунт Rendergrid и API-ключ — как его получить.
- Баланс в долларах. Картинка Nano Banana Pro в 1K стоит $0,04, на $1 их выйдет 25 картинок. Цены всех моделей — на странице цен.
- Любой язык, который умеет отправлять HTTPS-запросы. В примерах — curl, Python с пакетом
requestsи Node.js 22+.
Начните с небольшого пополнения: цена списывается за каждую картинку, а неудачный запрос бесплатен — сумма сразу возвращается на баланс.
Шаг 1. Получите ключ
В кабинете откройте раздел «Ключи API» и нажмите «Создать ключ». Ключ выглядит как rg_live_ и ещё 40 знаков. Он показывается один раз — скопируйте его сразу.
Положите ключ в переменную окружения на сервере. Так он не попадёт в код и в репозиторий.
$ export RENDERGRID_API_KEY="rg_live_ваш_ключ"
Ключ — это пароль от вашего баланса. Не вставляйте его в код сайта или мобильного приложения: запросы к API отправляйте только с сервера.
Шаг 2. Отправьте запрос
Для первой картинки нужны три поля: model, prompt и, если важна форма кадра, aspect_ratio. Заголовок X-Idempotency-Key защищает от двойного списания, если запрос придётся повторить.
# Нужны bash, curl и uuidgen. Ключ повтора — один на запрос. 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": "Керамическая кружка на мраморе, мягкий свет окна", "resolution": "1K", "aspect_ratio": "4:5" }'
import os import uuid import requests key = os.environ["RENDERGRID_API_KEY"] payload = { "model": "nano-banana-pro", "prompt": "Керамическая кружка на мраморе, мягкий свет окна", "resolution": "1K", "aspect_ratio": "4:5", } response = requests.post( "https://api.rendergrid.io/ api/ public/ v1/ images/ generate", headers={ "Authorization": f"Bearer {key}", # новый на каждый запрос; при повторе — тот же "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+, файл .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", // новый на каждый запрос; при повторе — тот же "X-Idempotency-Key": randomUUID(), }, body: JSON.stringify({ model: "nano-banana-pro", prompt: "Керамическая кружка на мраморе, мягкий свет окна", 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);
В ответ придёт 202 Accepted. Это значит «запрос принят», а не «картинка готова». Сохраните id: по нему вы узнаете результат.
{
"id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"status": "queued",
"task_id": "5b0214ae-9e39-460a-820a-f6ae3e24400b",
"cost": 0.04
}cost — сумма в долларах, которую мы списали за картинку. Она записана числом, например 0.04.
Шаг 3. Дождитесь результата
Картинка рисуется от нескольких секунд до минуты. Спрашивайте статус не чаще, чем раз в 5 секунд. Пока статус queued или processing — ждите; completed — картинка готова; failed — не получилось.
CREATION_ID="5b0214ae-9e39-460a-820a-f6ae3e24400b" # id из шага 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" # id из шага 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) # чаще раза в 5 секунд спрашивать нельзя if creation["status"] == "completed": print(creation["result_urls"]) else: print(creation["error"], creation["failure"])
// Node.js 22+, файл .mjs const API = "https://api.rendergrid.io/ api/ public/ v1"; const key = process.env.RENDERGRID_API_KEY; const headers = { Authorization: `Bearer ${key}` }; // id из шага 2 const creationId = "5b0214ae-9e39-460a-820a-f6ae3e24400b"; let creation; do { // чаще раза в 5 секунд спрашивать нельзя 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"
]
}Неудачный запрос бесплатен: сумма сразу возвращается на баланс.
Поэтому провал можно просто повторить — о повторах без двойного списания.
Вместо опроса можно получать событие, когда картинка готова: вебхуки. Все статусы и поля ответа — на странице «Задачи и статусы».
Шаг 4. Скачайте картинку
Ссылки в result_urls живут сутки, потом файл удаляется. Сохраните картинку у себя сразу после completed.
$ curl -L -o result.jpg \ "https://cdn.rendergrid.io/ images/ example/ result.jpg"
Готово: ключ, запрос и первая картинка. Дальше можно добавить картинки-образцы, выбрать другую модель или подключить вебхуки.