Pro API: controla o rendering cloud a partir do teu próprio servidor
Tudo o que a app faz online (imagens, retoque, vídeos, personagens treinadas) está também acessível via HTTP, ao mesmo preço em créditos, sem a app estar aberta. Podes controlá-lo a partir do teu próprio servidor, dos teus scripts ou do teu agente, usando os créditos da tua licença.
Disponível com a licença Pro. A chave é criada na app, em Configurações > API.
Não és programador? A mesma funcionalidade está acessível a partir de um agente de IA sem escrever uma linha: consulta o MCP.
| Base | https://api.tendre.ai/pro/v1 |
| Autenticação | cabeçalho Authorization: Bearer tk_pro_... |
| Formato | JSON na entrada e saída, PNG para imagens, MP4 para vídeos |
| Descrição da máquina | openapi.json (OpenAPI 3.0), para gerar um cliente |
| Tabela de preços | GET /pro/v1/pricing |
Obter uma chave
Na app, com uma licença Pro: Configurações > API > New key. Dá-lhe um nome (por exemplo, "servidor de produção"), escolhe as permissões e, se quiseres, um limite diário de créditos e uma data de expiração.
A chave é mostrada uma única vez. Copia-a de imediato. Uma chave perdida é substituída, nunca recuperada.
- No máximo três chaves ativas por licença. É suficiente para rodar uma sem interromper o serviço: cria a nova, instala-a, revoga a antiga.
- Uma chave não é um lugar. O teu computador e o teu telemóvel continuam a ser utilizáveis a par dela.
- Uma chave vale os teus créditos. Nunca a coloques numa página web, numa app distribuída ou num repositório público. Define-lhe um limite diário de créditos assim que residir num servidor.
O que uma chave pode fazer
| Permissão | O que permite |
|---|---|
| Read | Sempre concedida: estado do render, download de ficheiros, saldo, lista de personagens |
| Images | Submeter e cancelar imagens (geração, retoque, variação), criar personagens |
| Videos | Submeter e cancelar vídeos, Multi-Ref Vídeo e Face swap incluídos |
Uma chamada que ultrapasse as permissões da chave responde com 403 missing_scope, com a
permissão em falta em scope.
O ciclo de vida do render
São sempre os mesmos três passos.
- Submeter.
POST /imagesouPOST /videos. Resposta imediata com umjobIde o custo. - Fazer polling.
GET /images/{jobId}ouGET /videos/{jobId}, a cada 3 segundos, atéstatussercompletedoufailed. - Descarregar.
GET /images/{jobId}/fileouGET /videos/{jobId}/file, assim que o estado forcompleted. O ficheiro não é guardado, por isso descarrega-o sem demora.
Tempos aproximados: 10 a 40 segundos para uma imagem, 1 a 5 minutos para um vídeo, mais tempo quando o motor arranca a frio.
A tua primeira chamada
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 }Se isto responder, tudo o resto vai funcionar.
Um render completo, de três formas
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"))O que fazer a seguir
- Imagens: geração, os três modos de retoque, personagens.
- Vídeos: formatos, tabela de preços, imagens de início e fim, Multi-Ref Vídeo, Face swap.
- Personagens: uma foto, sete vistas, para incluir em Multi-Ref Vídeo.
- Conta: saldo, limites, personagens treinadas, atividade.
- Limites e erros: limites, todos os códigos de erro, boas práticas.
- MCP (agentes): liga o Claude, o ChatGPT ou o Cursor diretamente, sem código.
O que ainda não existe
Por ordem planeada: treino de personagens a partir das tuas próprias fotos, vozes, upscaling para 2K, uma seed fixa para reproduzir um render, e webhooks para deixares de fazer polling.
O treino é o que merece uma nota: não podes treinar através da API, mas podes fazer upload de um
.safetensors que já tens e renderizá-lo de imediato. Consulta
Conta, créditos e personagens.
A API tem versionamento. Tudo o que está aqui descrito mantém-se válido em /pro/v1: as adições nunca
quebram o que existe, e uma alteração incompatível seria lançada como /pro/v2.