Ideal House
Pular para o conteúdo

Documentação da AI 3D Rendering API#

URL base: https://api.ideal.house
Versão: v1
Atualizado: 2026-03-06


📖 Visão geral#

A AI 3D Rendering API permite enviar uma tarefa de renderização 3D com base em uma imagem de origem, com controle fino sobre o grau de renderização, o modo de renderização, o prompt de texto opcional e imagens de estilo de referência. O fluxo de trabalho é assíncrono e envolve duas etapas:

  1. Criar uma tarefa — Envie seus parâmetros de entrada e receba um taskId.
  2. Consultar resultados — Use o taskId para consultar o status da tarefa e recuperar a saída gerada.

🔐 Autenticação#

Todas as requisições de API devem ser autenticadas usando uma Chave de API.

Inclua sua Chave de API no cabeçalho da requisição:

CabeçalhoValor
APIKEYyour_api_key_here

⚠️ Mantenha sua Chave de API segura. Não a exponha em código do lado do cliente ou em repositórios públicos.


💰 Dedução de créditos#

[!WARNING] 🪙 Os créditos são deduzidos com base no modelType selecionado após a criação bem-sucedida da tarefa. Se a tarefa finalmente falhar, os créditos deduzidos serão devolvidos automaticamente à sua conta.
Créditos insuficientes retornarão o código de erro 9051. 📄 Consulte Referência de Dedução de Créditos.

Modelo (modelType)Créditos deduzidos
Flash1 crédito
Base3 créditos
Pro10 créditos

📌 Endpoints de API#


1. Criar Tarefa de Renderização 3D#

Cria uma nova tarefa de renderização 3D de IA e retorna um taskId exclusivo para consulta.

Endpoint

Texto simples
POST /api/v1/ai3dRendering/generate

Cabeçalhos da requisição

CabeçalhoObrigatórioDescrição
APIKEY✅ SimSua chave de autenticação de API
Content-Type✅ Simapplication/json

Corpo da requisição

CampoTipoObrigatórioDescrição
imageUrlstring✅ SimURL da imagem de origem a ser renderizada
promptstring❌ OpcionalPrompt de texto adicional para orientar o estilo ou conteúdo da renderização
modelTypestring❌ OpcionalTipo de qualidade do modelo. Enum: Flash, Base, Pro. Padrão: Flash
renderDegreeinteger❌ OpcionalNível de intensidade da renderização. Intervalo: 1 (mais leve) – 6 (mais intenso). Padrão: 3. Somente eficaz quando modelType é Flash
renderModestring❌ OpcionalModo de renderização. Enum: default, creativeMode. Padrão: default
refImageUrlstring❌ OpcionalURL de uma imagem de estilo de referência para orientar a saída da renderização

⚠️ Observação: renderDegree só terá efeito quando modelType estiver definido como Flash. Se modelType não for especificado, Flash será usado por padrão.

🖼️ Requisitos de imagem: Todas as imagens de entrada e referência devem usar JPG/JPEG, PNG ou WebP. Cada imagem deve ter no máximo 20 MB, com dimensões de 128 × 128 px até 6,000 × 6,000 px (inclusivo). Imagens que excedam as dimensões máximas em pixels serão automaticamente dimensionadas proporcionalmente para caber dentro de 6,000 × 6,000 px antes do processamento. As URLs das imagens devem ser diretamente acessíveis pelo servidor da API.


Tipos de modelo

ValorDescrição
FlashPadrão. Velocidade de geração mais rápida, qualidade padrão. Suporta controle de renderDegree
BaseVelocidade e qualidade equilibradas. renderDegree é ignorado
ProMaior qualidade, geração mais lenta. renderDegree é ignorado

Modos de renderização

ValorDescrição
defaultModo padrão. Preserva a textura e a estrutura original da imagem durante a renderização (modo Keep Texture)
creativeModeModo criativo — aplica transformações de renderização mais artísticas e estilizadas

Grau de renderização

ValorDescrição
1Renderização mais leve — transformação mínima
25Intensidade progressiva de renderização
6Renderização mais intensa — transformação máxima

📥 Exemplos de requisição#

cURL
bash
# Using Flash model with renderDegree (texture preservation mode)
curl -X POST "https://api.ideal.house/api/v1/ai3dRendering/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "modelType": "Flash",
    "renderDegree": 4,
    "renderMode": "default"
  }'

# Using Flash model with creative mode, prompt and a reference image
curl -X POST "https://api.ideal.house/api/v1/ai3dRendering/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "prompt": "A modern minimalist living room with wooden floor",
    "modelType": "Flash",
    "renderDegree": 5,
    "renderMode": "creativeMode",
    "refImageUrl": "https://example.com/style-reference.jpg"
  }'

# Using Pro model (renderDegree is ignored)
curl -X POST "https://api.ideal.house/api/v1/ai3dRendering/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "modelType": "Pro",
    "renderMode": "default"
  }'
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class Ai3dRenderingApiExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY  = "your_api_key_here";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();

        // Flash model with renderDegree (renderDegree only works with Flash)
        String requestBody = """
            {
                "imageUrl": "https://example.com/room.jpg",
                "modelType": "Flash",
                "renderDegree": 4,
                "renderMode": "default"
            }
            """;

        // Pro model example (renderDegree is ignored)
        // String requestBody = """
        //     {
        //         "imageUrl": "https://example.com/room.jpg",
        //         "modelType": "Pro",
        //         "renderMode": "default"
        //     }
        //     """;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/ai3dRendering/generate")
            .addHeader("APIKEY", API_KEY)
            .addHeader("Content-Type", "application/json")
            .post(RequestBody.create(requestBody, MediaType.parse("application/json")))
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Response: " + response.body().string());
        }
    }
}
Python (requests)
python
import requests

BASE_URL = "https://api.ideal.house"
API_KEY  = "your_api_key_here"

headers = {
    "APIKEY": API_KEY,
    "Content-Type": "application/json"
}

# Flash model — renderDegree takes effect (default texture preservation mode)
payload = {
    "imageUrl": "https://example.com/room.jpg",
    "modelType": "Flash",
    "renderDegree": 4,
    "renderMode": "default"
}

# Flash model with creative mode, prompt and reference image
# payload = {
#     "imageUrl": "https://example.com/room.jpg",
#     "prompt": "A modern minimalist living room with wooden floor",
#     "modelType": "Flash",
#     "renderDegree": 5,
#     "renderMode": "creativeMode",
#     "refImageUrl": "https://example.com/style-reference.jpg"
# }

# Pro model — renderDegree is ignored
# payload = {
#     "imageUrl": "https://example.com/room.jpg",
#     "modelType": "Pro",
#     "renderMode": "default"
# }

response = requests.post(
    f"{BASE_URL}/api/v1/ai3dRendering/generate",
    headers=headers,
    json=payload
)

data = response.json()
task_id = data.get("data")
print(f"Task ID: {task_id}")
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY  = 'your_api_key_here';

async function createRenderingTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/ai3dRendering/generate`,
      {
        // Flash model — renderDegree takes effect
        imageUrl: 'https://example.com/room.jpg',
        modelType: 'Flash',
        renderDegree: 4,
        renderMode: 'default'

        // Flash model with creative mode:
        // prompt: 'A modern minimalist living room with wooden floor',
        // modelType: 'Flash',
        // renderDegree: 5,
        // renderMode: 'creativeMode',
        // refImageUrl: 'https://example.com/style-reference.jpg'

        // Pro model — renderDegree is ignored:
        // imageUrl: 'https://example.com/room.jpg',
        // modelType: 'Pro',
        // renderMode: 'default'
      },
      {
        headers: {
          'APIKEY': API_KEY,
          'Content-Type': 'application/json'
        }
      }
    );

    const taskId = response.data.data;
    console.log('Task ID:', taskId);
    return taskId;
  } catch (error) {
    console.error('Error:', error.response?.data || error.message);
  }
}

createRenderingTask();

📤 Resposta#

Resposta de sucesso

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
CampoTipoDescrição
codeinteger0 indica sucesso
messagestringMensagem de resposta
datalongO ID único da tarefa para consulta dos resultados

2. Obter resultado da tarefa#

Recupera o status atual e a saída de uma tarefa de renderização criada anteriormente.

Endpoint

Texto simples
GET /api/v1/ai3dRendering/result

Cabeçalhos da requisição

CabeçalhoObrigatórioDescrição
APIKEY✅ SimSua chave de autenticação de API

Parâmetros de consulta

ParâmetroTipoObrigatórioDescrição
taskIdlong✅ SimO ID da tarefa retornado pelo endpoint de criação

📥 Exemplos de requisição#

cURL
bash
curl -X GET "https://api.ideal.house/api/v1/ai3dRendering/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class Ai3dRenderingResultExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY  = "your_api_key_here";

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();
        long taskId = 1234567890123456789L;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/ai3dRendering/result?taskId=" + taskId)
            .addHeader("APIKEY", API_KEY)
            .get()
            .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println("Response: " + response.body().string());
        }
    }
}
Python (requests)
python
import requests
import time

BASE_URL = "https://api.ideal.house"
API_KEY  = "your_api_key_here"

headers = {
    "APIKEY": API_KEY
}

task_id = 1234567890123456789

# Poll until task is complete
while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/ai3dRendering/result",
        headers=headers,
        params={"taskId": task_id}
    )

    data = response.json()
    result = data.get("data", {})
    status = result.get("status")

    print(f"Status: {status}, Progress: {result.get('percentage')}%, Queue: {result.get('waitNumber')}")

    if status in ("Success", "Failed"):
        break

    time.sleep(3)  # Poll every 3 seconds

if status == "Success":
    print("Result URL:", result["output"]["resultUrl"])
else:
    print("Task ended with status:", status)
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY  = 'your_api_key_here';

async function pollResult(taskId) {
  const headers = { 'APIKEY': API_KEY };

  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/ai3dRendering/result`,
      {
        headers,
        params: { taskId }
      }
    );

    const result = response.data.data;
    const { status, percentage, waitNumber } = result;

    console.log(`Status: ${status} | Progress: ${percentage}% | Queue: ${waitNumber}`);

    if (['Success', 'Failed'].includes(status)) {
      if (status === 'Success') {
        console.log('Result URL:', result.output.resultUrl);
      } else {
        console.log('Task ended with status:', status);
      }
      break;
    }

    // Wait 3 seconds before next poll
    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

pollResult(1234567890123456789n);

📤 Resposta#

Resposta de sucesso (tarefa concluída)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "modelType": "Flash",
      "renderDegree": 4,
      "renderMode": "default"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/rendered_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

Resposta (tarefa em processamento / na fila)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 50,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "modelType": "Flash",
      "renderDegree": 4,
      "renderMode": "default"
    },
    "output": null
  }
}

Resposta (tarefa falhou)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "modelType": "Flash",
      "renderDegree": 4,
      "renderMode": "default"
    },
    "output": null
  }
}

Campos da resposta

CampoTipoDescrição
idlongIdentificador único da tarefa
statusstringStatus atual da tarefa (veja Status da tarefa)
waitNumberintegerNúmero de tarefas à frente na fila (0 significa que está sendo processada no momento)
percentageintegerPorcentagem de conclusão da tarefa (0–100)
inputobjectOs parâmetros de entrada originais da tarefa
input.imageUrlstringURL da imagem de origem (se fornecida)
input.promptstringPrompt de texto de origem (se fornecido)
input.modelTypestringTipo de modelo utilizado
input.renderDegreeintegerNível de intensidade de renderização utilizado (1–6)
input.renderModestringModo de renderização utilizado (default ou creativeMode)
input.refImageUrlstringURL da imagem de estilo de referência (se fornecida)
outputobjectResultado da geração (disponível apenas quando status é Success)
output.resultUrlstringURL para a imagem de saída renderizada
output.widthintegerLargura de saída em pixels
output.heightintegerAltura de saída em pixels

📊 Status da tarefa#

StatusDescrição
UnprocessedA tarefa foi criada, mas ainda não iniciou
ProcessingA tarefa está sendo processada no momento
SuccessTarefa concluída com sucesso — a saída está disponível
FailedTarefa falhou devido a um erro

Consulte a cada 3-5 segundos. Consulte Limite de tarefas de API.


❌ Respostas de erro#

Todas as respostas de erro compartilham a mesma estrutura em JSON:

json
{
  "code": 5002,
  "message": "Invalid API Key",
  "data": null
}

Referência dos códigos de erro#

CódigoNomeDescriçãoAção sugerida
1001FAILEDFalha na requisição (erro genérico)Verifique o campo message para obter detalhes específicos do erro
1003INTERNAL_ERRORErro interno do servidorTente novamente após um curto intervalo; entre em contato com o suporte se persistir
1011PARAM_ERRORErro nos parâmetros da requisiçãoVerifique se todos os parâmetros obrigatórios foram fornecidos e estão formatados corretamente
5002API_KEY_INVALIDChave de API inválida ou ausenteGaranta que o cabeçalho APIKEY esteja presente e que o valor esteja correto
9010SCAN_TEXT_ERRORFalha na análise de conteúdo do prompt de textoModifique o prompt para remover qualquer conteúdo sensível ou proibido
9038PROHIBITED_CONTENTA imagem de saída gerada contém conteúdo proibidoAjuste o prompt/estilo/entradas e tente novamente
9051COINS_NOT_ENOUGHMoedas / créditos insuficientesRecarregue os créditos da sua conta e tente novamente

📄 Para a lista completa de códigos de erro comuns de API, consulte a Referência de Códigos de Erro.