Ideal House
Pular para o conteúdo

Documentação da AI 3D Generation API#

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


📖 Visão Geral#

A AI 3D Generation API permite enviar tarefas de geração de 3D com base em imagens ou prompts e recuperar seus resultados de forma assíncrona. O fluxo envolve duas etapas:

  1. Criar uma tarefa — Envie seu insumo (imagem URL ou prompt de texto) e receba um taskId.
  2. Consultar os resultados — Use o taskId para consultar o status da tarefa e recuperar o resultado gerado.

🔐 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.


⚡ Limite de concorrência#

🚦 Importante: Esta API permite apenas 1 requisição concorrente por conta por vez.
Se várias requisições forem enviadas simultaneamente, as requisições subsequentes serão colocadas em uma fila e processadas em ordem.
Você pode monitorar sua posição na fila por meio do campo waitNumber na resposta de resultado da tarefa.


💰 Dedução de Créditos#

[!WARNING] 🪙 Cada tarefa deduz 20 créditos da sua conta após a criação bem-sucedida da tarefa.
Os créditos são deduzidos no momento da criação da tarefa. Se a tarefa eventualmente falhar, os créditos deduzidos serão automaticamente reembolsados para sua conta.
Créditos insuficientes retornarão o código de erro 9051. 📄 Consulte Referência de Dedução de Créditos.


📌 Endpoints da API#


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

Cria uma nova tarefa de geração de 3D com IA e retorna um taskId único para consulta.

Endpoint

Texto simples
POST /api/v1/ai3d/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⚠️ Um entre imageUrl ou prompt é obrigatórioURL da imagem fonte para gerar 3D a partir dela
promptstring⚠️ Um entre imageUrl ou prompt é obrigatórioPrompt de texto descrevendo o conteúdo de 3D a ser gerado

💡 Observação: imageUrl e prompt são mutuamente exclusivos — forneça um deles por requisição.

🖼️ Requisitos da imagem: Use JPG/JPEG, PNG ou WebP. Cada imagem deve ter no máximo 20 MB, com dimensões de 128 × 128 px até 5,000 × 5,000 px (inclusivo). O URL da imagem deve ser diretamente acessível pelo servidor da API.


📥 Exemplos de Requisição#

cURL
bash
# Using imageUrl
curl -X POST "https://api.ideal.house/api/v1/ai3d/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg"
  }'

# Using prompt
curl -X POST "https://api.ideal.house/api/v1/ai3d/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A modern minimalist living room with wooden floor"
  }'
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class Ai3dApiExample {

    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();

        String requestBody = """
            {
                "imageUrl": "https://example.com/room.jpg"
            }
            """;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/ai3d/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"
}

# Using imageUrl
payload = {
    "imageUrl": "https://example.com/room.jpg"
}

# Or using prompt
# payload = {
#     "prompt": "A modern minimalist living room with wooden floor"
# }

response = requests.post(
    f"{BASE_URL}/api/v1/ai3d/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 createTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/ai3d/generate`,
      {
        imageUrl: 'https://example.com/room.jpg'
        // Or use prompt instead:
        // prompt: 'A modern minimalist living room with wooden floor',
      },
      {
        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);
  }
}

createTask();

📤 Resposta#

Resposta de Sucesso

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
CampoTipoDescrição
codeinteger0 indica sucesso
messagestringMensagem da 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 criada anteriormente.

Endpoint

Texto simples
GET /api/v1/ai3d/result

Cabeçalhos da Requisição

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

Parâmetros de Query

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

📥 Exemplos de Requisição#

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

public class Ai3dResultExample {

    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/ai3d/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/ai3d/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 failed or terminated")
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/ai3d/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"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/result_3d_model.zip",
      "width": 1024,
      "height": 1024
    }
  }
}

Resposta (Tarefa em Processamento / Em Fila)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 2,
    "percentage": 35,
    "input": {
      "imageUrl": "https://example.com/room.jpg"
    },
    "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"
    },
    "output": null
  }
}

Campos da Resposta

CampoTipoDescrição
idlongIdentificador único da tarefa
statusstringStatus atual da tarefa (consulte Status da Tarefa)
waitNumberintegerNúmero de tarefas à frente na fila (0 significa em processamento)
percentageintegerPorcentagem de conclusão da tarefa (0–100)
inputobjectOs parâmetros de entrada originais da tarefa
input.imageUrlstringURL da imagem fonte (se fornecido)
input.promptstringPrompt de texto fonte (se fornecido)
input.modelTypestringTipo de modelo usado
outputobjectResultado da geração (disponível apenas quando status é Success)
output.resultUrlstringURL para o arquivo de modelo 3D gerado
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 começou
ProcessingA tarefa está sendo processada atualmente
SuccessA tarefa foi concluída com sucesso — a saída está disponível
FailedA tarefa falhou devido a um erro

Consulte a cada 3-5 segundos. Consulte Limite de Tarefas da API.


❌ Respostas de Erro#

Todas as respostas de erro compartilham a mesma estrutura 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 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 revisão de conteúdo do prompt de textoModifique o prompt para remover conteúdo sensível ou proibido
9038PROHIBITED_CONTENTA imagem de saída gerada contém conteúdo proibidoAjuste o prompt/estilo/insumos e tente novamente
9036COVERT_3D_FAILEDEsta imagem não suporta geração de 3DTente uma imagem diferente com estrutura e profundidade mais claras
9051COINS_NOT_ENOUGHMoedas/créditos insuficientesAdicione créditos à sua conta e tente novamente

Exemplos de Respostas de Erro#

5002 — Chave de API Inválida
json
{
  "code": 5002,
  "message": "Invalid API Key",
  "data": null
}
1011 — Erro de Parâmetro
json
{
  "code": 1011,
  "message": "Request parameter error: imageUrl is required",
  "data": null
}
9036 — Imagem Não Suportada para Geração de 3D
json
{
  "code": 9036,
  "message": "This image does not support 3D generation",
  "data": null
}
9010 — Revisão de Conteúdo de Texto Falhou
json
{
  "code": 9010,
  "message": "Text prompt failed content review, contains prohibited content",
  "data": null
}
9051 — Créditos Insuficientes
json
{
  "code": 9051,
  "message": "Insufficient coins",
  "data": null
}

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