Pro API: cloud rendering aansturen vanuit je eigen server
Alles wat de app online doet (afbeeldingen, retouchering, video's, getrainde personages) is ook bereikbaar via HTTP, tegen dezelfde prijs in credits, zonder dat de app open hoeft. Je stuurt het aan vanuit je eigen server, je scripts of je agent, met de credits van je licentie.
Beschikbaar met de Pro-licentie. De sleutel wordt aangemaakt in de app, via Instellingen > API.
Geen ontwikkelaar? Hetzelfde is bereikbaar vanuit een AI-agent zonder één regel te schrijven: zie MCP.
| Basis | https://api.tendre.ai/pro/v1 |
| Authenticatie | header Authorization: Bearer tk_pro_... |
| Formaat | JSON in en uit, PNG voor afbeeldingen, MP4 voor video's |
| Machine-beschrijving | openapi.json (OpenAPI 3.0), om een client te genereren |
| Prijsoverzicht | GET /pro/v1/pricing |
Een sleutel aanmaken
In de app, met een Pro-licentie: Instellingen > API > Nieuwe sleutel. Geef hem een naam (bijvoorbeeld "productieserver"), kies de rechten en stel eventueel een dagelijks creditlimiet en een vervaldatum in.
De sleutel wordt slechts één keer getoond. Kopieer hem meteen. Een verloren sleutel wordt vervangen, nooit teruggehaald.
- Maximaal drie actieve sleutels per licentie. Genoeg om er één te roteren zonder de dienst te onderbreken: maak de nieuwe aan, installeer hem, trek de oude in.
- Een sleutel is geen seat. Je computer en je telefoon blijven gewoon bruikbaar naast de sleutel.
- Een sleutel staat gelijk aan je credits. Zet hem nooit in een webpagina, een gedistribueerde app of een openbare repository. Geef hem een dagelijks creditlimiet zodra hij op een server staat.
Wat een sleutel mag doen
| Recht | Wat het toestaat |
|---|---|
| Lezen | Altijd toegekend: renderstatus, bestandsdownload, saldo, personagelijst |
| Afbeeldingen | Afbeeldingen indienen en annuleren (generatie, retouchering, variatie), personages aanmaken |
| Video's | Video's indienen en annuleren, Multi-Ref Video en Face swap inbegrepen |
Een aanroep buiten de rechten van de sleutel geeft 403 missing_scope als antwoord, met het ontbrekende
recht in scope.
De render-levenscyclus
Altijd dezelfde drie stappen.
- Indienen.
POST /imagesofPOST /videos. Onmiddellijk antwoord met eenjobIden de kosten. - Pollen.
GET /images/{jobId}ofGET /videos/{jobId}, elke 3 seconden, totdatstatuscompletedoffailedis. - Downloaden.
GET /images/{jobId}/fileofGET /videos/{jobId}/file, zodra de statuscompletedis. Het bestand wordt niet bewaard, dus download het zonder te wachten.
Ruwe tijdsindicaties: 10 tot 40 seconden voor een afbeelding, 1 tot 5 minuten voor een video, langer wanneer de engine koud start.
Je eerste aanroep
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 }Als dit antwoord geeft, werkt al het andere ook.
Een volledige render, op drie manieren
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"))Wat nu?
- Afbeeldingen: generatie, de drie retoucheringsmodi, personages.
- Video's: formaten, het prijsoverzicht, begin- en eindframes, Multi-Ref Video, Face swap.
- Personages: één foto, zeven weergaven, te casten in Multi-Ref Video.
- Account: saldo, limieten, getrainde personages, activiteit.
- Limieten en fouten: limieten, alle foutcodes, goede praktijken.
- MCP (agents): sluit Claude, ChatGPT of Cursor direct aan, zonder code.
Wat er nog niet in zit
In de geplande volgorde: personagetraining vanuit je eigen foto's, stemmen, upscaling naar 2K, een vaste seed om een render te reproduceren, en webhooks zodat je kunt stoppen met pollen.
Training is het enige dat een toelichting verdient: je kunt niet trainen via de API, maar je kunt een
.safetensors die je al hebt uploaden en er meteen mee renderen. Zie
Account, credits en personages.
De API is voorzien van versiebeheer. Alles wat hier beschreven staat blijft geldig onder /pro/v1: toevoegingen breken
nooit wat al bestaat, en een breaking change zou verschijnen als /pro/v2.