Pro API: управляй облачным рендерингом со своего сервера

Всё, что приложение делает онлайн (изображения, ретушь, видео, обученные персонажи), также доступно через HTTP по той же цене в кредитах, без необходимости держать приложение открытым. Ты управляешь этим со своего сервера, своих скриптов или агента, используя кредиты на своей лицензии.

Доступно с Pro-лицензией. Ключ создаётся в приложении в разделе Настройки > API.

Не разработчик? То же самое доступно из ИИ-агента без единой строки кода: см. MCP.

Базаhttps://api.tendre.ai/pro/v1
Аутентификациязаголовок Authorization: Bearer tk_pro_...
ФорматJSON на входе и выходе, PNG для изображений, MP4 для видео
Описание машиныopenapi.json (OpenAPI 3.0), для генерации клиента
Прайс-листGET /pro/v1/pricing

Получить ключ

В приложении с Pro-лицензией: Настройки > API > Новый ключ. Дай ему имя (например, «production server»), выбери права доступа и, при желании, дневной лимит кредитов и дату истечения срока.

Ключ показывается один раз. Скопируй его сразу. Потерянный ключ заменяется, но не восстанавливается.

  • Не более трёх активных ключей на лицензию. Этого достаточно, чтобы ротировать один без прерывания сервиса: создай новый, установи его, отзови старый.
  • Ключ не является местом использования. Твой компьютер и телефон остаются доступными параллельно с ним.
  • Ключ стоит твоих кредитов. Никогда не размещай его на веб-странице, в распространяемом приложении или публичном репозитории. Установи дневной лимит кредитов, как только ключ окажется на сервере.

Что ключу разрешено делать

РазрешениеЧто позволяет
ЧтениеВсегда разрешено: статус рендера, загрузка файлов, баланс, список персонажей
ИзображенияОтправлять и отменять изображения (генерация, ретушь, вариации), создавать персонажей
ВидеоОтправлять и отменять видео, включая Multi-Ref Видео и Face swap

Вызов, выходящий за рамки прав ключа, возвращает 403 missing_scope с отсутствующим разрешением в scope.

Жизненный цикл рендера

Всегда одни и те же три шага.

  1. Отправить. POST /images или POST /videos. Немедленный ответ с jobId и стоимостью.
  2. Опрашивать. GET /images/{jobId} или GET /videos/{jobId} каждые 3 секунды, пока status не станет completed или failed.
  3. Загрузить. GET /images/{jobId}/file или GET /videos/{jobId}/file, как только статус стал completed. Файл не хранится, поэтому загружай его без промедления.

Примерное время: 10-40 секунд для изображения, 1-5 минут для видео, дольше при холодном старте движка.

Первый вызов

bash
KEY=tk_pro_...
B=https://api.tendre.ai/pro/v1
curl -s $B/credits -H "Authorization: Bearer $KEY"
json
{ "balance": 1830, "licenseId": "lic_...", "key": "k_1a2b3c4d",
  "limits": { "concurrent": 2, "perMinute": 60, "perDay": 0 }, "running": 0 }

Если это работает, всё остальное тоже будет работать.

Полный рендер тремя способами

bash

bash
KEY=tk_pro_...
B=https://api.tendre.ai/pro/v1
JOB=$(curl -s $B/images -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"prompt":"a lighthouse at dawn, photorealistic","width":1216,"height":832}' | jq -r .jobId)
until curl -s $B/images/$JOB -H "Authorization: Bearer $KEY" | grep -q '"completed"'; do sleep 3; done
curl -s $B/images/$JOB/file -H "Authorization: Bearer $KEY" -o lighthouse.png

PowerShell

powershell
$H = @{ Authorization = "Bearer tk_pro_..." }
$B = "https://api.tendre.ai/pro/v1"
$job = Invoke-RestMethod -Uri "$B/videos" -Method Post -Headers $H -ContentType "application/json" `
  -Body '{"prompt":"waves on a beach at sunset, gentle wind","width":1080,"height":1920,"audio":true}'
do { Start-Sleep 5; $s = Invoke-RestMethod -Uri "$B/videos/$($job.jobId)" -Headers $H } while ($s.status -eq "pending")
Invoke-WebRequest -Uri "https://api.tendre.ai$($s.file_url)" -Headers $H -OutFile beach.mp4

Python

python
import time, requests
KEY, B = "tk_pro_...", "https://api.tendre.ai/pro/v1"
H = {"Authorization": f"Bearer {KEY}"}
job = requests.post(f"{B}/videos", headers=H, json={"prompt": "waves on a beach at sunset, gentle wind", "audio": True}).json()
while (s := requests.get(f"{B}/videos/{job['jobId']}", headers=H).json())["status"] == "pending":
    time.sleep(3)
if s["status"] == "completed":
    open("beach.mp4", "wb").write(requests.get("https://api.tendre.ai" + s["file_url"], headers=H).content)
else:
    print("failed:", s.get("detail"))

Что дальше

  • Изображения: генерация, три режима ретуши, персонажи.
  • Видео: форматы, прайс-лист, начальный и конечный кадры, Multi-Ref Видео, Face swap.
  • Персонажи: одно фото, семь ракурсов, для использования в Multi-Ref Видео.
  • Аккаунт: баланс, лимиты, обученные персонажи, активность.
  • Лимиты и ошибки: ограничения, все коды ошибок, рекомендации.
  • MCP (агенты): подключи Claude, ChatGPT или Cursor напрямую, без написания кода.

Что пока не реализовано

В порядке очерёдности: обучение персонажей по собственным фотографиям, голоса, апскейлинг до 2K, фиксированный seed для воспроизведения рендера и вебхуки, чтобы прекратить опрос.

Обучение заслуживает отдельного слова: обучать через API нельзя, но можно загрузить уже имеющийся .safetensors и сразу рендерить с ним. См. Аккаунт, кредиты и персонажи.

API версионирован. Всё описанное здесь остаётся действительным в рамках /pro/v1: дополнения никогда не ломают существующее, а критическое изменение выйдет как /pro/v2.

Windows · Mac · облако или локально

Генерируй приватно. Уже сегодня вечером.

Скачай tendre.AI бесплатно и генерируй без ограничений, приватно, на своём собственном GPU.

OS Windows 10/11GPU NVIDIA 8ГБ+VRAM 12ГБ рекомендуетсяДиск 20ГБ

Mac: Apple silicon (M1 или новее), macOS 13 или новее. Intel Mac не поддерживаются.

Для локальной генерации изображений на Mac нужен M4 с 24 ГБ памяти, либо M2 или M3 Pro, Max или Ultra с 24 ГБ. Если у тебя устройство послабее, всё работает онлайн через кредиты. Ретушь и видео на Mac пока тоже работают только онлайн.

Всё о tendre.AI для Mac

Нет видеокарты NVIDIA? Начни на 100% в облаке: 5 бесплатных изображений и 1 бесплатное видео каждый день. Карта NVIDIA (от 8 ГБ) открывает безлимитную локальную генерацию.