Pro API: genereer via de cloud vanuit je eigen server

Alles wat de app online doet (afbeeldingen, retoucheren, video's, getrainde personages) is ook bereikbaar via HTTP, tegen dezelfde prijs in credits, zonder dat de app open hoeft te zijn. 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 maak je aan in de app, via Instellingen > API.

Basishttps://api.tendre.ai/pro/v1
Authenticatieheader Authorization: Bearer tk_pro_...
FormaatJSON in en uit, PNG voor afbeeldingen, MP4 voor video's
Machinebeschrijvingopenapi-pro.yaml (OpenAPI 3.0), om een client te genereren

Een sleutel aanmaken

In de app, met een Pro-licentie: Instellingen > API > Nieuwe sleutel. Geef hem een naam (bijvoorbeeld "productieserver"), kies de machtigingen en, als je wilt, een dagelijks creditlimiet en een vervaldatum.

De sleutel wordt slechts één keer getoond. Kopieer hem meteen. Een verloren sleutel wordt vervangen, nooit hersteld.

  • Maximaal drie actieve sleutels per licentie. Genoeg om er één te roteren zonder onderbreking: 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

MachtigingWat het toestaat
LezenAltijd verleend: renderstatus, bestand downloaden, saldo, personagelijst
AfbeeldingenAfbeeldingen indienen en annuleren (generatie, retoucheren, variatie)
Video'sVideo's indienen en annuleren

Een aanroep die buiten de machtigingen van de sleutel valt, geeft 403 portee_manquante terug, met de ontbrekende machtiging in portee.

De render-levenscyclus

Altijd dezelfde drie stappen.

  1. Indienen. POST /images of POST /videos. Directe reactie met een jobId en de kosten.
  2. Pollen. GET /images/{jobId} of GET /videos/{jobId}, elke 3 seconden, totdat status completed of failed is.
  3. Downloaden. GET /images/{jobId}/file of GET /videos/{jobId}/file, zodra de status completed is. Het bestand wordt niet bewaard, dus download het zonder te wachten.

Globale tijdsindicaties: 10 tot 40 seconden voor een afbeelding, 1 tot 5 minuten voor een video, langer als de engine koud opstart.

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 een antwoord geeft, werkt de rest ook.

Een volledige render, 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.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"))

Waar je daarna naartoe gaat

  • Afbeeldingen: generatie, de drie retoucheermodi, personages.
  • Video's: formaten, het prijsoverzicht, begin- en eindframes.
  • Account: saldo, limieten, getrainde personages, activiteit.
  • Limieten en fouten: limieten, alle foutcodes, goede praktijken.

Wat er nog niet is

In de geplande volgorde: personagetraining op basis van je eigen foto's, stemmen, upscaling naar 2K, een vaste seed om een render te reproduceren, en webhooks zodat je kunt stoppen met pollen.

De API is geversioneerd. Alles wat hier beschreven staat, blijft geldig onder /pro/v1: toevoegingen breken nooit wat al bestaat, en een ingrijpende wijziging wordt uitgebracht als /pro/v2.

Windows · Cloud of NVIDIA

Genereer privé. Vanavond.

Download tendre.AI, activeer één keer en gebruik het voor altijd, volledig offline, op je eigen GPU.

Downloaden voor WindowsDownload voor Android (.apk)
Downloaden voor MacMac-versie komt binnenkort!
OS Windows 10/11GPU NVIDIA 8GB+VRAM 12GB aanbevolenSchijf 20GB

Geen NVIDIA GPU? Begin 100% in de cloud: elke dag 10 gratis afbeeldingen, daarna 1 credit per afbeelding. Een NVIDIA-kaart (8GB+) ontgrendelt onbeperkte lokale generatie.