Pro API: управляй облачным рендером со своего сервера
Всё, что приложение делает онлайн (изображения, ретушь, видео, обученные персонажи), доступно и через HTTP, по той же цене в кредитах, без необходимости открывать приложение. Ты управляешь этим со своего сервера, своих скриптов или агента, используя кредиты своей лицензии.
Доступно с Pro-лицензией. Ключ создаётся в приложении: Настройки > API.
| База | https://api.tendre.ai/pro/v1 |
| Аутентификация | заголовок Authorization: Bearer tk_pro_... |
| Формат | JSON на вход и выход, PNG для изображений, MP4 для видео |
| Описание машины | openapi-pro.yaml (OpenAPI 3.0), для генерации клиента |
Получить ключ
В приложении с Pro-лицензией: Настройки > API > Новый ключ. Дай ему имя (например, "production server"), выбери разрешения и, если нужно, суточный лимит кредитов и дату истечения.
Ключ показывается один раз. Скопируй его сразу. Потерянный ключ заменяется, но не восстанавливается.
- Не более трёх активных ключей на лицензию. Этого достаточно, чтобы ротировать один без прерывания сервиса: создай новый, установи его, отзови старый.
- Ключ — не дополнительное место. Твой компьютер и телефон остаются доступными наравне с ним.
- Ключ стоит твоих кредитов. Никогда не помещай его на веб-страницу, в распространяемое приложение или публичный репозиторий. Установи суточный лимит кредитов, как только он окажется на сервере.
Что разрешено делать ключу
| Разрешение | Что позволяет |
|---|---|
| Read | Всегда предоставляется: статус рендера, скачивание файлов, баланс, список персонажей |
| Images | Отправка и отмена изображений (генерация, ретушь, вариация) |
| Videos | Отправка и отмена видео |
Вызов за пределами разрешений ключа возвращает 403 portee_manquante, с отсутствующим
разрешением в portee.
Жизненный цикл рендера
Всегда одни и те же три шага.
- Отправка.
POST /imagesилиPOST /videos. Мгновенный ответ сjobIdи стоимостью. - Опрос.
GET /images/{jobId}илиGET /videos/{jobId}, каждые 3 секунды, покаstatusне станетcompletedилиfailed. - Скачивание.
GET /images/{jobId}/fileилиGET /videos/{jobId}/file, как только статус сталcompleted. Файл не хранится, поэтому скачай его без промедления.
Примерное время: от 10 до 40 секунд для изображения, от 1 до 5 минут для видео, дольше при холодном старте движка.
Первый запрос
KEY=tk_pro_...
B=https://api.tendre.ai/pro/v1
curl -s $B/credits -H "Authorization: Bearer $KEY"
{ "balance": 1830, "licenseId": "lic_...", "key": "k_1a2b3c4d",
"limits": { "concurrent": 2, "perMinute": 60, "perDay": 0 }, "running": 0 }
Если это ответило, всё остальное тоже будет работать.
Полный рендер тремя способами
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
$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
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"))
Что изучить дальше
- Изображения: генерация, три режима ретуши, персонажи.
- Видео: форматы, сетка цен, начальные и конечные кадры.
- Аккаунт: баланс, лимиты, обученные персонажи, активность.
- Лимиты и ошибки: ограничения, все коды ошибок, рекомендации.
Что пока не реализовано
В порядке планирования: обучение персонажей по твоим фотографиям, голоса, апскейлинг до 2K, фиксированный seed для воспроизведения рендера и вебхуки, чтобы не нужно было опрашивать статус.
API версионирован. Всё описанное здесь остаётся актуальным в /pro/v1: добавления никогда не ломают
существующее, а ломающее изменение выйдет как /pro/v2.