Ideal House
Pular para o conteúdo

Documentação da Magic Editor API#

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


📖 Visão Geral#

A Magic Editor API permite editar e transformar imagens de forma inteligente usando IA. Ao fornecer uma imagem de origem e um prompt de texto opcional, a IA aplicará modificações inteligentes na imagem com base no modo de modelo selecionado. O fluxo de trabalho é assíncrono e envolve duas etapas:

  1. Criar uma tarefa — Envie sua imagem e parâmetros, então receba um taskId.
  2. Consultar resultados — Use o taskId para consultar o status da tarefa e recuperar a imagem editada.

🔐 Autenticação#

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

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

CabeçalhoValor
APIKEYyour_api_key_here

⚠️ Mantenha sua Chave API segura. Não a exponha em código do lado do cliente ou 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 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.

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

📌 Endpoints da API#


1. Criar Tarefa Magic Editor#

Cria uma nova tarefa de editor mágico por IA e retorna um taskId único para consulta.

Endpoint

Texto simples
POST /api/v1/magicEditor/generate

Cabeçalhos da Solicitação

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

Corpo da Solicitação

CampoTipoObrigatórioDescrição
imageUrlstring✅ SimURL da imagem de origem a ser editada
promptstring⚠️ CondicionalPrompt de texto descrevendo as edições desejadas. Obrigatório quando modelType é Base; opcional para modos Flash e Pro
modelTypestring❌ OpcionalTipo de modelo. Enum: Flash, Base, Pro. Padrão é Flash

🖼️ Requisitos da imagem: Use JPG/JPEG, PNG ou WebP. Cada imagem não pode ter mais de 20 MB, com dimensões de 128 × 128 px até 6,000 × 6,000 px (incluso). Imagens que excedam as dimensões máximas de pixels são automaticamente dimensionadas proporcionalmente para caber dentro de 6,000 × 6,000 px antes do processamento. A URL da imagem deve ser diretamente acessível pelo servidor API.


Tipos de Modelo

ValorDescriçãoPrompt Obrigatório
FlashPadrão. Edição rápida com geração automática inteligente por IA❌ Opcional
BaseEdição guiada por texto — usa seu prompt para controlar precisamente a saída✅ Obrigatório
ProEdição de maior qualidade com resultados mais detalhados❌ Opcional

⚠️ Importante: Quando modelType é Base, o campo prompt deve ser fornecido. Requisições com modelType=Base e sem prompt retornarão um erro de parâmetro.


📥 Exemplos de Solicitação#

cURL
bash
# Flash mode (default) — prompt is optional
curl -X POST "https://api.ideal.house/api/v1/magicEditor/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "modelType": "Flash"
  }'

# Base mode — prompt is required
curl -X POST "https://api.ideal.house/api/v1/magicEditor/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "prompt": "Change the wall color to warm beige and add wooden flooring",
    "modelType": "Base"
  }'

# Pro mode — prompt is optional
curl -X POST "https://api.ideal.house/api/v1/magicEditor/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/room.jpg",
    "prompt": "Modern Scandinavian style interior",
    "modelType": "Pro"
  }'
Java (OkHttp)
java
import okhttp3.*;
import java.io.IOException;

public class MagicEditorApiExample {

    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 mode (default) — no prompt needed
        String requestBody = """
            {
                "imageUrl": "https://example.com/room.jpg",
                "modelType": "Flash"
            }
            """;

        // Base mode — prompt is required
        // String requestBody = """
        //     {
        //         "imageUrl": "https://example.com/room.jpg",
        //         "prompt": "Change the wall color to warm beige and add wooden flooring",
        //         "modelType": "Base"
        //     }
        //     """;

        // Pro mode — prompt is optional
        // String requestBody = """
        //     {
        //         "imageUrl": "https://example.com/room.jpg",
        //         "prompt": "Modern Scandinavian style interior",
        //         "modelType": "Pro"
        //     }
        //     """;

        Request request = new Request.Builder()
            .url(BASE_URL + "/api/v1/magicEditor/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 mode (default) — no prompt needed
payload = {
    "imageUrl": "https://example.com/room.jpg",
    "modelType": "Flash"
}

# Base mode — prompt is required
# payload = {
#     "imageUrl": "https://example.com/room.jpg",
#     "prompt": "Change the wall color to warm beige and add wooden flooring",
#     "modelType": "Base"
# }

# Pro mode — prompt is optional
# payload = {
#     "imageUrl": "https://example.com/room.jpg",
#     "prompt": "Modern Scandinavian style interior",
#     "modelType": "Pro"
# }

response = requests.post(
    f"{BASE_URL}/api/v1/magicEditor/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 createMagicEditorTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/magicEditor/generate`,
      {
        // Flash mode (default) — no prompt needed
        imageUrl: 'https://example.com/room.jpg',
        modelType: 'Flash'

        // Base mode — prompt is required:
        // imageUrl: 'https://example.com/room.jpg',
        // prompt: 'Change the wall color to warm beige and add wooden flooring',
        // modelType: 'Base'

        // Pro mode — prompt is optional:
        // imageUrl: 'https://example.com/room.jpg',
        // prompt: 'Modern Scandinavian style interior',
        // modelType: 'Pro'
      },
      {
        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);
  }
}

createMagicEditorTask();

📤 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 editor mágico criada anteriormente.

Endpoint

Texto simples
GET /api/v1/magicEditor/result

Cabeçalhos da Solicitação

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

Parâmetros de Consulta

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

📥 Exemplos de Solicitação#

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

public class MagicEditorResultExample {

    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/magicEditor/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/magicEditor/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", "Termination"):
        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/magicEditor/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', 'Termination'].includes(status)) {
      if (status === 'Success') {
        console.log('Result URL:', result.output.resultUrl);
        console.log('Size:', result.output.width, 'x', result.output.height);
      } 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",
      "prompt": "Change the wall color to warm beige and add wooden flooring",
      "modelType": "Base"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/magic_editor_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

Resposta (Tarefa em Processamento / Em Fila)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 40,
    "input": {
      "imageUrl": "https://example.com/room.jpg",
      "modelType": "Flash"
    },
    "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"
    },
    "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 atual)
percentageintegerPercentual de conclusão da tarefa (0–100)
inputobjectOs parâmetros de entrada originais da tarefa
input.imageUrlstringURL da imagem de origem
input.promptstringPrompt de texto (se fornecido)
input.modelTypestringTipo de modelo utilizado
outputobjectResultado da geração (disponível apenas quando status é Success)
output.resultUrlstringURL para a imagem de saída editada
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á atualmente em processamento
SuccessTarefa concluída com sucesso — a saída está disponível
FailedA tarefa falhou devido a um erro
TerminationA tarefa foi interrompida ou encerrada

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 de Códigos de Erro#

CódigoNomeDescriçãoAção Sugerida
1001FAILEDFalha na solicitação (erro genérico)Verifique o campo message para detalhes específicos do erro
1003INTERNAL_ERRORErro interno do servidorTente novamente após um curto atraso; entre em contato com o suporte se persistir
1011PARAM_ERRORErro de parâmetro da requisição — por exemplo, prompt ausente quando modelType=BaseCertifique-se de fornecer prompt ao usar o modo Base
5002API_KEY_INVALIDChave API inválida ou ausenteGaranta que o cabeçalho APIKEY esteja presente e que o valor esteja correto
9010SCAN_TEXT_ERRORO prompt de texto falhou na revisão de conteúdoModifique 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 insuficientesAdicione créditos à sua conta e tente novamente

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