Desenvolvedores
Provador por foto em uma chamada
Mande a foto da pessoa e de 1 a 3 peças. Volta uma imagem com o look inteiro, roupa e sapato juntos.
Começar
- Crie a conta e uma chave secreta
sk_test_no painel. A de teste não gasta saldo e marca o resultado comtest: true. - Mande a foto e as peças para
POST /v1/tryon, do seu servidor. - Pegue o resultado em
GET /v1/jobs/{id}ou numwebhook_url. A URL da imagem é assinada e expira.
curl https://api.weseti.com/v1/tryon \
-H "Authorization: Bearer $WESETI_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"person_image": { "url": "https://exemplo.com/fotos/pessoa.jpg" },
"garments": [
{ "image_url": "https://exemplo.com/fotos/vestido.jpg", "name": "Vestido envelope", "slot": "dress" }
],
"consent": { "adult": true, "own_photo": true }
}'
# 202 { "job_id": "job_…", "status": "queued", "test": true }
curl https://api.weseti.com/v1/jobs/job_… \
-H "Authorization: Bearer $WESETI_SECRET_KEY"
# 200 { "status": "succeeded", "result": { "url": "https://…", "expires_at": "…" } }const headers = {
Authorization: `Bearer ${process.env.WESETI_SECRET_KEY}`,
'Content-Type': 'application/json',
};
const res = await fetch('https://api.weseti.com/v1/tryon', {
method: 'POST',
headers,
body: JSON.stringify({
person_image: { url: 'https://exemplo.com/fotos/pessoa.jpg' },
garments: [{ image_url: 'https://exemplo.com/fotos/vestido.jpg', name: 'Vestido envelope', slot: 'dress' }],
consent: { adult: true, own_photo: true },
}),
});
const { job_id } = await res.json();
// a geração leva alguns segundos; em produção, prefira webhook_url
let job;
do {
await new Promise((r) => setTimeout(r, 2000));
job = await fetch(`https://api.weseti.com/v1/jobs/${job_id}`, { headers }).then((r) => r.json());
} while (job.status === 'queued' || job.status === 'running');
console.log(job.status, job.result?.url);import os, time, requests
headers = {"Authorization": f"Bearer {os.environ['WESETI_SECRET_KEY']}"}
job = requests.post(
"https://api.weseti.com/v1/tryon",
headers=headers,
json={
"person_image": {"url": "https://exemplo.com/fotos/pessoa.jpg"},
"garments": [{"image_url": "https://exemplo.com/fotos/vestido.jpg", "name": "Vestido envelope", "slot": "dress"}],
"consent": {"adult": True, "own_photo": True},
},
).json()
# a geração leva alguns segundos; em produção, prefira webhook_url
while job["status"] in ("queued", "running"):
time.sleep(2)
job = requests.get(f"https://api.weseti.com/v1/jobs/{job['job_id']}", headers=headers).json()
print(job["status"], (job.get("result") or {}).get("url"))O pedido
person_image{ "url": "https://…" } ou { "base64": "…", "content_type": "image/jpeg" }. Corpo inteiro, uma pessoa.garmentsDe 1 a 3 peças, uma por slot: top, bottom, dress, outerwear, shoes. Sem slot, ele sai do name. dress não combina com top nem bottom.consentObrigatório: { "adult": true, "own_photo": true }. A pessoa da foto é maior de idade e mandou a própria foto.webhook_urlOpcional. Recebe job.completed. Sem ele, use GET /v1/jobs/{id}.Idempotency-KeyCabeçalho opcional. Repetir o pedido em 24 h devolve o mesmo job.Imagens por URL: só https, até 10 MB, JPEG, PNG ou WebP, 10 s para baixar. Endereço interno é recusado, inclusive depois de redirecionar.
Respostas
202Na fila: { "job_id", "status": "queued", "test" }.400 validation_failedCorpo inválido ou imagem fora do formato.400 slot_conflictDuas peças no mesmo slot, ou dress com top ou bottom.401 unauthorizedSem chave secreta, ou chave revogada.402 insufficient_creditsSem saldo. Adicione crédito por Pix no painel.402 plan_limit_reachedO plano chegou ao limite do mês. details.url leva aos planos.403 billing_managed_by_platformConta cobrada pela Shopify ou Nuvemshop: sem Pix aqui.422 consent_requiredFaltou o consent com adult e own_photo.422 photo_rejectedA foto não serve: corpo inteiro, uma pessoa, boa luz.429 rate_limitedEspere o Retry-After, em segundos.451 region_unavailableO provador não funciona na região de quem pediu.Na loja
O botão “Experimentar em mim” em duas linhas, com a chave pública presa ao domínio da loja. selector: 'auto' acha o “Comprar” pelo texto.
<script>window.weseti=window.weseti||[];weseti.push(['init',{publicKey:'pk_live_…',selector:'auto'}]);</script>
<script src="https://cdn.weseti.com/sdk/weseti.js" async></script>Shopify, Nuvemshop, VTEX, WooCommerce e Google Tag Manager: o passo a passo de cada um fica em Integrações, no painel.
Provador em página própria, para apps de plataforma: /t/<chave pública>/<id do produto>?return=<página do produto>.
Referência
SDKs e ferramentas
Dados
Foto apagada pela Weseti em até 15 min; a OpenAI pode guardar até 30 dias contra abuso. A OpenAI não usa a foto para treinar modelos.
Mais em Privacidade, Suboperadores, Termos e Suporte.