Pro API : piloter le rendu cloud depuis ton propre serveur

Tout ce que l'application fait en ligne (images, retouches, vidéos, personnages entraînés) est aussi accessible via HTTP, au même prix en crédits, sans que l'application soit ouverte. Tu le pilotes depuis ton propre serveur, tes scripts ou ton agent, en utilisant les crédits de ta licence.

Disponible avec la licence Pro. La clé est créée dans l'application, sous Paramètres > API.

Basehttps://api.tendre.ai/pro/v1
Authentificationen-tête Authorization: Bearer tk_pro_...
FormatJSON en entrée et en sortie, PNG pour les images, MP4 pour les vidéos
Description machineopenapi-pro.yaml (OpenAPI 3.0), pour générer un client

Obtenir une clé

Dans l'application, avec une licence Pro : Paramètres > API > Nouvelle clé. Donne-lui un nom ("serveur de production", par exemple), choisis ses permissions et, si tu le souhaites, un plafond journalier de crédits et une date d'expiration.

La clé est affichée une seule fois. Copie-la immédiatement. Une clé perdue est remplacée, jamais récupérée.

  • Trois clés actives par licence au maximum. De quoi en faire tourner une sans couper le service : crée la nouvelle, installe-la, révoque l'ancienne.
  • Une clé n'est pas un siège. Ton ordinateur et ton téléphone restent utilisables en parallèle.
  • Une clé vaut tes crédits. Ne la mets jamais dans une page web, une application distribuée ou un dépôt public. Donne-lui un plafond journalier de crédits dès qu'elle vit sur un serveur.

Ce qu'une clé est autorisée à faire

PermissionCe qu'elle permet
ReadToujours accordée : statut du rendu, téléchargement de fichier, solde, liste de personnages
ImagesSoumettre et annuler des images (génération, retouche, variation)
VideosSoumettre et annuler des vidéos

Un appel dépassant les permissions de la clé retourne 403 portee_manquante, avec la permission manquante dans portee.

Le cycle de vie du rendu

Toujours les mêmes trois étapes.

  1. Soumettre. POST /images ou POST /videos. Réponse immédiate avec un jobId et le coût.
  2. Interroger. GET /images/{jobId} ou GET /videos/{jobId}, toutes les 3 secondes, jusqu'à ce que status soit completed ou failed.
  3. Télécharger. GET /images/{jobId}/file ou GET /videos/{jobId}/file, dès que le statut est completed. Le fichier n'est pas conservé, alors télécharge-le sans attendre.

Durées approximatives : 10 à 40 secondes pour une image, 1 à 5 minutes pour une vidéo, plus longtemps quand le moteur démarre à froid.

Ton premier appel

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 }

Si ça répond, tout le reste fonctionnera.

Un rendu complet, de trois façons

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"))

Et ensuite

  • Images : génération, les trois modes de retouche, personnages.
  • Videos : formats, grille tarifaire, images de début et de fin.
  • Account : solde, plafonds, personnages entraînés, activité.
  • Limits and errors : plafonds, tous les codes d'erreur, bonnes pratiques.

Ce qui n'est pas encore là

Dans l'ordre prévu : l'entraînement de personnages à partir de tes propres photos, les voix, l'upscaling en 2K, une graine fixe pour reproduire un rendu, et les webhooks pour arrêter d'interroger.

L'API est versionnée. Tout ce qui est décrit ici reste valable sous /pro/v1 : les ajouts ne cassent jamais l'existant, et un changement incompatible serait livré sous /pro/v2.

Windows · Cloud ou NVIDIA

Génère en privé. Ce soir.

Télécharge tendre.AI, active une fois, et utilise-le pour toujours, 100% hors ligne, sur ton propre GPU.

Télécharger pour WindowsTélécharge pour Android (.apk)
Télécharger pour MacVersion Mac bientôt disponible !
OS Windows 10/11GPU NVIDIA 8 Go+VRAM 12 Go recommandésDisque 20 Go

Pas de carte NVIDIA ? Commence à 100% dans le cloud : 10 images gratuites chaque jour, puis 1 crédit par image. Une carte NVIDIA (8 Go et plus) débloque la génération locale illimitée.