Pro API: sterowanie renderowaniem w chmurze z własnego serwera
Wszystko, co aplikacja robi online (obrazy, retusz, filmy, wytrenowane postacie), jest też dostępne przez HTTP, w tej samej cenie w kredytach, bez konieczności otwierania aplikacji. Sterujesz tym ze swojego serwera, skryptów lub agenta, używając kredytów na swojej licencji.
Dostępne z licencją Pro. Klucz tworzysz w aplikacji, w Ustawienia > API.
| 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-pro.yaml (OpenAPI 3.0), do wygenerowania klienta |
Utwórz klucz
W aplikacji, z licencją Pro: Ustawienia > API > Nowy klucz. Nadaj mu nazwę (np. "serwer produkcyjny"), wybierz uprawnienia i, jeśli chcesz, dzienny limit kredytów oraz datę wygaśnięcia.
Klucz jest pokazywany tylko raz. Skopiuj go od razu. Utracony klucz można zastąpić, ale nie odzyskać.
- Maksymalnie trzy aktywne klucze na licencję. Wystarczy, by wymienić jeden bez przerywania usługi: utwórz nowy, zainstaluj go, unieważnij stary.
- Klucz to nie stanowisko. Twój komputer i telefon pozostają użyteczne równolegle z nim.
- Klucz ma wartość twoich kredytów. Nigdy nie umieszczaj go na stronie internetowej, w aplikacji dystrybuowanej ani w publicznym repozytorium. Nadaj mu dzienny limit kredytów, gdy tylko trafi na serwer.
Co klucz może robić
| Uprawnienie | Co pozwala |
|---|---|
| Odczyt | Zawsze przyznawane: status renderowania, pobieranie plików, saldo, lista postaci |
| Obrazy | Przesyłanie i anulowanie obrazów (generowanie, retusz, wariacja) |
| Filmy | Przesyłanie i anulowanie filmów |
Wywołanie wykraczające poza uprawnienia klucza zwraca 403 portee_manquante, z brakującym
uprawnieniem w portee.
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.
Orientacyjne czasy: 10 do 40 sekund dla obrazu, 1 do 5 minut dla filmu, dłużej gdy silnik startuje na zimno.
Twoje 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 odpowie, wszystko inne też zadziała.
Kompletne renderowanie, 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.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"))
Co dalej
- Obrazy: generowanie, trzy tryby retuszu, postacie.
- Filmy: formaty, siatka cenowa, klatki startowe i końcowe.
- Konto: saldo, limity, wytrenowane postacie, aktywność.
- Limity i błędy: limity, wszystkie kody błędów, dobre praktyki.
Czego jeszcze nie ma
W planowanej kolejności: trenowanie postaci z własnych zdjęć, głosy, powiększanie do 2K, stały seed do odtworzenia renderowania oraz webhooki, dzięki którym możesz przestać odpytywać.
API jest wersjonowane. Wszystko opisane tutaj pozostaje ważne pod /pro/v1: dodatki nigdy
nie psują tego, co istnieje, a przełomowa zmiana trafiłaby jako /pro/v2.