Pro API: steruj renderowaniem w chmurze z własnego serwera
Wszystko, co aplikacja robi online (obrazy, retusz, filmy, wytrenowane postacie), jest dostępne również przez HTTP, w tej samej cenie w kredytach, bez konieczności otwierania aplikacji. Steruj tym z własnego serwera, skryptów lub agenta, używając kredytów na swojej licencji.
Dostępne z licencją Pro. Klucz tworzy się w aplikacji, w Ustawienia > API.
Nie jesteś deweloperem? To samo można osiągnąć za pomocą agenta AI bez pisania ani jednej linii kodu: zobacz MCP.
| Baza | https://api.tendre.ai/pro/v1 |
| Uwierzytelnianie | nagłówek Authorization: Bearer tk_pro_... |
| Format | JSON na wejściu i wyjściu, PNG dla obrazów, MP4 dla filmów |
| Opis maszyny | openapi.json (OpenAPI 3.0), do generowania klienta |
| Cennik | GET /pro/v1/pricing |
Uzyskaj klucz
W aplikacji, z licencją Pro: Ustawienia > API > Nowy klucz. Nadaj mu nazwę (na przykład "serwer produkcyjny"), wybierz uprawnienia i opcjonalnie dzienny limit kredytów oraz datę wygaśnięcia.
Klucz jest pokazywany tylko raz. Skopiuj go od razu. Utracony klucz jest zastępowany, nigdy odzyskiwany.
- Maksymalnie trzy aktywne klucze na licencję. Wystarczy, by rotować jeden bez przerywania usługi: utwórz nowy, wdroż go, unieważnij stary.
- Klucz to nie miejsce. Twój komputer i telefon pozostają użyteczne niezależnie od niego.
- Klucz jest wart tyle, co Twoje kredyty. Nigdy nie umieszczaj go na stronie internetowej, w rozpowszechnianej aplikacji ani w publicznym repozytorium. Ustaw mu dzienny limit kredytów, gdy tylko trafi na serwer.
Co klucz może robić
| Uprawnienie | Co umożliwia |
|---|---|
| Odczyt | Zawsze przyznane: status renderowania, pobieranie plików, saldo, lista postaci |
| Obrazy | Przesyłanie i anulowanie obrazów (generowanie, retusz, wariacja), tworzenie postaci |
| Wideo | Przesyłanie i anulowanie filmów, w tym Multi-Ref Wideo i Face swap |
Wywołanie wykraczające poza uprawnienia klucza zwraca 403 missing_scope, z brakującym
uprawnieniem w scope.
Cykl życia renderowania
Zawsze te same trzy kroki.
- Prześlij.
POST /imageslubPOST /videos. Natychmiastowa odpowiedź zjobIdi kosztem. - Odpytuj.
GET /images/{jobId}lubGET /videos/{jobId}, co 3 sekundy, ażstatuswyniesiecompletedlubfailed. - Pobierz.
GET /images/{jobId}/filelubGET /videos/{jobId}/file, gdy tylko status wynosicompleted. Plik nie jest przechowywany, więc pobierz go bez zwłoki.
Przybliżony czas: 10 do 40 sekund dla obrazu, 1 do 5 minut dla filmu, dłużej gdy silnik startuje od zera.
Pierwsze wywołanie
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 }Jeśli to zadziała, reszta też będzie działać.
Kompletne renderowanie na trzy sposoby
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.pngPowerShell
$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.mp4Python
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"))Co dalej
- Obrazy: generowanie, trzy tryby retuszu, postacie.
- Wideo: formaty, cennik, klatki startowe i końcowe, Multi-Ref Wideo, Face swap.
- Postacie: jedno zdjęcie, siedem ujęć, do obsadzenia w Multi-Ref Wideo.
- Konto: saldo, limity, wytrenowane postacie, aktywność.
- Limity i błędy: limity, wszystkie kody błędów, dobre praktyki.
- MCP (agenty): podłącz Claude, ChatGPT lub Cursor bezpośrednio, bez żadnego kodu.
Czego jeszcze nie ma
W planowanej kolejności: trenowanie postaci z własnych zdjęć, głosy, skalowanie w górę do 2K, stały seed do odtworzenia renderowania oraz webhooki, by móc przestać odpytywać.
Trenowanie to jedyna rzecz warta komentarza: nie możesz trenować przez API, ale możesz przesłać
.safetensors, który już posiadasz i od razu renderować z jego użyciem. Zobacz
Konto, kredyty i postacie.
API jest wersjonowane. Wszystko opisane tutaj pozostaje ważne pod /pro/v1: dodawane funkcje nigdy
nie psują istniejących, a przełomowa zmiana zostałaby wydana jako /pro/v2.