Decore uma foto imobiliária a partir do seu próprio código. Uma chamada HTTP devolve uma imagem decorada. Créditos pré-pagos a 0,15 $ por imagem, sem assinatura, sem mínimo e sem fatura que fuja ao controle.
- URL base
- https://stagify.ai/api/v1
- Autenticação
- Bearer stg_live_…
- Tipo de conteúdo
- multipart/form-data
Introdução
A API expõe uma única coisa: o pipeline de decoração por trás do aplicativo web. Você envia a foto de um cômodo, informa um tipo de ambiente e um estilo de mobiliário, e recebe a imagem decorada na mesma resposta. Não há fila de tarefas nem nada a consultar no caminho normal.
Créditos são imagens inteiras. Você os compra antecipadamente e cada renderização bem-sucedida gasta um. Uma renderização que falha é reembolsada automaticamente, então você só paga por uma foto que recebeu. E como o saldo é pré-pago, uma chave roubada custa no máximo o que restar nela. Não há fatura no fim do mês.
As chaves são para uso servidor a servidor. A API não envia cabeçalhos CORS, portanto um navegador não pode chamá-la diretamente; isso é proposital, e uma chave acessível pelo JavaScript do navegador é uma chave vazada. Mostramos a chave uma única vez, guardamos apenas um hash e revogamos imediatamente.
Início rápido
Crie uma chave na sua página de chaves de API, compre um pacote de créditos e envie uma foto. A resposta traz a imagem decorada como data URL.
curl https://stagify.ai/api/v1/renders \
-H "Authorization: Bearer $STAGIFY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-F "image=@living-room.jpg" \
-F "roomType=Living room" \
-F "furnitureStyle=modern" \
-F "labelVirtuallyStaged=true"
Uma renderização pode levar alguns minutos. Defina o tempo limite de leitura do seu cliente para 300 segundos e tente novamente com a mesma Idempotency-Key. É isso que garante que você nunca será cobrado duas vezes pela mesma foto.
Pacotes de créditos
Carregando preços…
Parâmetros da requisição
POST /api/v1/renders, enviado como multipart/form-data. Todos os valores aceitos abaixo também são servidos em JSON por GET /api/v1/options, que não exige chave de API, para que um cliente possa preencher seus próprios menus em vez de fixar esta tabela no código.
| Campo | Tipo | Observações |
|---|---|---|
image | file | Obrigatório. A foto do cômodo. JPEG, PNG ou WebP, até 25 MB. O que é verificado é o tipo MIME, não a extensão do arquivo. |
roomType | enum | Bedroom, Living room, Dining room, Kitchen, Office, Bathroom, Outdoors, Dorm. Padrão Living room. Diferencia maiúsculas e espaços, e um valor não reconhecido não é rejeitado. Ele é escrito no prompt como texto livre, então Living Room não é Living room. |
furnitureStyle | enum | standard, modern, midcentury, scandinavian, luxury, coastal, farmhouse, custom. Padrão standard, que é também no que um valor não reconhecido se transforma silenciosamente. custom usa o seu additionalPrompt no lugar do texto de estilo interno. |
additionalPrompt | string | Orientações em texto livre para esta renderização. |
removeFurniture | boolean | Esvaziar o cômodo antes de decorá-lo. Envie true ou on; qualquer outra coisa, incluindo 1 e yes, vale falso. |
keepFurniture | string | Texto livre indicando o que manter, por ex. keep the dining table and the built-in shelves. Lido apenas quando removeFurniture está ativo. 500 caracteres. |
furnitureImage | file[] | Até 5 fotos de referência de mobiliário a imitar. Mesmos formatos e limite de tamanho de image. |
labelVirtuallyStaged | boolean | Grava o aviso “Virtually staged” na imagem final. |
stampStyle | enum | dark, light, minimal, banner. Padrão dark. Não diferencia maiúsculas; um valor não reconhecido volta ao padrão. |
stampScale | number | De 0.7 a 1.6, padrão 1. Valores fora do intervalo são limitados em vez de recusados. |
stampLang | enum | O idioma do selo: english, spanish, french, german, chinese, korean, portuguese, russian, italian, japanese, dutch. Padrão english. |
variations | integer | Apenas 1 é aceito. Envie requisições simultâneas para obter mais. |
Idempotência
Uma renderização mantém a conexão aberta por minutos, o que significa que a falha que realmente vai te atingir é um socket caído depois de o trabalho terminar: cobrado e sem nada em mãos. Envie um cabeçalho Idempotency-Key em cada requisição e tente novamente com o mesmo valor.
| O que temos registrado | O que uma nova tentativa faz |
|---|---|
| Uma requisição bem-sucedida, mesmos parâmetros | Devolve o resultado armazenado com X-Stagify-Replayed: true. Sem segunda cobrança. |
| Uma requisição ainda em andamento | 409 REQUEST_IN_FLIGHT. Aguarde e tente de novo. |
| Uma requisição abandonada no meio da renderização | É reexecutada sobre a cobrança existente, até três tentativas. |
| A mesma chave com parâmetros diferentes | 422 IDEMPOTENCY_KEY_REUSED. Use uma chave nova. |
Omitir o cabeçalho é permitido e significa nenhuma proteção contra repetição, que é o padrão honesto. Não derivamos uma chave a partir da sua foto: duas renderizações genuinamente distintas do mesmo cômodo colidiriam e quem chamasse em segundo receberia a imagem do primeiro.
Avisos de decoração virtual
Muitas regras da MLS e da NAR exigem que uma foto decorada virtualmente informe isso. labelVirtuallyStaged grava esse aviso nos pixels em vez de anexá-lo como metadado que uma ferramenta seguinte pode remover.
Se o aviso não puder ser aplicado, a imagem é retida em vez de entregue sem rótulo, a chamada responde 500 DISCLOSURE_STAMP_FAILED e seu crédito é reembolsado. Não há como desligar esse comportamento, nem um padrão por chave que o desative silenciosamente.
Erros
Toda falha responde { "error": "…", "code": "…" }. Ramifique pelo code, nunca pela mensagem. Mensagens mudam, códigos não.
| Status | Código | O que fazer |
|---|---|---|
| 401 | API_KEY_MISSING / API_KEY_INVALID / API_KEY_REVOKED | Verifique o cabeçalho Authorization ou crie uma nova chave. |
| 402 | INSUFFICIENT_CREDITS | Recarregue. O corpo traz credits_remaining. |
| 403 | ACCOUNT_SUSPENDED | Fale com o suporte. |
| 400 | VARIATIONS_UNSUPPORTED | Esta API renderiza uma imagem por requisição. Envie requisições simultâneas. |
| 409 | REQUEST_IN_FLIGHT | Essa chave de idempotência ainda está em execução. Aguarde e tente de novo. |
| 409 | CONCURRENCY_LIMIT | Renderizações demais ao mesmo tempo. Tente de novo em alguns segundos. |
| 422 | IDEMPOTENCY_KEY_REUSED | Você reutilizou uma chave com parâmetros diferentes. Use uma nova. |
| 422 | NO_IMAGE_GENERATED | O modelo não devolveu nada. Reembolsado; tente de novo ou use outra foto. |
| 429 | RATE_LIMITED | Reduza o ritmo e tente de novo. |
| 500 | DISCLOSURE_STAMP_FAILED | O aviso não pôde ser aplicado, então a imagem foi retida. Reembolsado. |
| 500 | RENDER_FAILED | Reembolsado. Informe o ref se entrar em contato com o suporte. |
Outros endpoints
GET /api/v1/options: os valores aceitos de cada enumeração acima. Não exige chave de API.GET /api/v1/me: minha chave está funcionando? Devolve a conta e o saldo.GET /api/v1/credits: saldo e totais acumulados.GET /api/v1/renders/{id}: o status de uma renderização.
Cada resposta traz X-Stagify-Credits-Remaining, para você ver o saldo cair sem precisar consultá-lo.
Dúvidas, limites maiores ou fatura em vez de cartão: team@stagify.ai.