Ideal House
İçeriğe atla

Magic Editor API Belgeleme#

Temel URL: https://api.ideal.house
Sürüm: v1
Güncellendi: 2026-03-06


📖 Genel Bakış#

Magic Editor API, yapay zeka kullanarak görüntüleri akıllıca düzenlemenizi ve dönüştürmenizi sağlar. Bir kaynak görüntü ve isteğe bağlı bir metin komutu sağlayarak, yapay zeka seçilen model moduna dayalı olarak görüntüye akıllı değişiklikler uygular. İş akışı asenkroniktir ve iki aşamadan oluşur:

  1. Görev oluşturma — Görüntünüzü ve parametrelerinizi gönderin, ardından bir taskId alın.
  2. Sonuçları sorgulama — Görev durumunu sorgulamak ve düzenlenmiş görüntüyü almak için taskId kullanın.

🔐 Kimlik Doğrulama#

Tüm API istekleri, bir API Anahtarı kullanılarak kimlik doğrulanmalıdır.

İstek başlığına API Anahtarınızı ekleyin:

BaşlıkDeğer
APIKEYyour_api_key_here

⚠️ API Anahtarınızı güvenli tutun. İstemci tarafı kodda veya herkese açık depolarda ifşa etmeyin.


💰 Kredi Kesintisi#

[!WARNING] 🪙 Krediler, başarılı görev oluşturulduğunda seçilen modelType'ye göre düşülür. Görev nihai olarak başarısız olursa, düşürülen krediler hesabınıza otomatik olarak iade edilir.
Yetersiz krediler 9051 hata kodunu döndürür. 📄 Kredi Kesintisi Referansı bölümüne bakın.

Model (modelType)Kesilen Kredi
Flash1 kredi
Base3 kredi
Pro10 kredi

📌 API Uç Noktaları#


1. Magic Editor Görevi Oluşturma#

Yeni bir yapay zeka sihirbazı editör görevi oluşturur ve sorgulama için benzersiz bir taskId döndürür.

Uç nokta

Düz metin
POST /api/v1/magicEditor/generate

İstek Başlıkları

BaşlıkZorunluAçıklama
APIKEY✅ EvetAPI kimlik doğrulama anahtarınız
Content-Type✅ Evetapplication/json

İstek Gövdesi

AlanTürZorunluAçıklama
imageUrlstring✅ EvetDüzenlenecek kaynak görüntünün URL
promptstring⚠️ Koşulluİstenen düzenlemeleri açıklayan metin komutu. modelType Base olduğunda zorunludur; Flash ve Pro modlarında isteğe bağlıdır
modelTypestring❌ İsteğe bağlıModel türü. Sayısal: Flash, Base, Pro. Varsayılan: Flash

🖼️ Görüntü gereksinimleri: JPG/JPEG, PNG veya WebP kullanın. Her görüntü en fazla 20 MB boyutunda olabilir, boyutları 128 × 128 px ile 6,000 × 6,000 px (dahil) arasında olmalıdır. Maksimum piksel boyutlarını aşan görüntüler, işlemden önce 6,000 × 6,000 px sınırlarına sığacak şekilde orantılı olarak otomatik olarak küçültülür. Görüntü URL, API sunucusu tarafından doğrudan erişilebilir olmalıdır.


Model Türleri

DeğerAçıklamaKomut Zorunluluğu
FlashVarsayılan. Otomatik yapay zeka destekli akıllı üretim ile hızlı düzenleme❌ İsteğe bağlı
BaseMetin yönlendirmeli düzenleme — komutunuzu kullanarak çıktıyı hassas bir şekilde kontrol eder✅ Zorunlu
ProDaha detaylı sonuçlarla daha yüksek kaliteli düzenleme❌ İsteğe bağlı

⚠️ Önemli: modelType Base olduğunda, prompt alanı zorunludur. modelType=Base ve prompt olmadan yapılan istekler bir parametre hatası döndürür.


📥 İstek Örnekleri#

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

📤 Yanıt#

Başarılı Yanıt

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
AlanTürAçıklama
codeinteger0 başarıyı gösterir
messagestringYanıt mesajı
datalongSonuçları sorgulamak için benzersiz görev kimliği

2. Görev Sonucunu Al#

Daha önce oluşturulmuş bir sihirbazı editör görevinin mevcut durumunu ve çıktısını alır.

Uç nokta

Düz metin
GET /api/v1/magicEditor/result

İstek Başlıkları

BaşlıkZorunluAçıklama
APIKEY✅ EvetAPI kimlik doğrulama anahtarınız

Sorgu Parametreleri

ParametreTürZorunluAçıklama
taskIdlong✅ EvetGörev oluşturma uç noktasından döndürülen görev kimliği

📥 İstek Örnekleri#

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

📤 Yanıt#

Başarılı Yanıt (Görev Tamamlandı)

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
    }
  }
}

Yanıt (Görev İşleniyor / Sırada)

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
  }
}

Yanıt (Görev Başarısız)

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
  }
}

Yanıt Alanları

AlanTürAçıklama
idlongGörev benzersiz tanımlayıcısı
statusstringMevcut görev durumu (Görev Durumu bölümüne bakın)
waitNumberintegerKuyrukta öndeki görev sayısı (0 şu anda işleniyor demektir)
percentageintegerGörev tamamlanma yüzdesi (0–100)
inputobjectGörevin orijinal girdi parametreleri
input.imageUrlstringKaynak görüntü URL
input.promptstringMetin komutu (sağlanırsa)
input.modelTypestringKullanılan model türü
outputobjectÜretim sonucu (yalnızca status Success olduğunda kullanılabilir)
output.resultUrlstringDüzenlenmiş çıktı görüntüsüne URL
output.widthintegerPiksel cinsinden çıktı genişliği
output.heightintegerPiksel cinsinden çıktı yüksekliği

📊 Görev Durumu#

DurumAçıklama
UnprocessedGörev oluşturuldu ancak henüz başlamadı
ProcessingGörev şu anda işleniyor
SuccessGörev başarıyla tamamlandı — çıktı kullanılabilir
FailedGörev bir hata nedeniyle başarısız oldu
TerminationGörev kesintiye uğradı veya sonlandırıldı

Her 3-5 saniyede sorgulayın. API Görev Sınırı bölümüne bakın.


❌ Hata Yanıtları#

Tüm hata yanıtları aynı JSON yapısını paylaşır:

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

Hata Kodu Referansı#

KodAdAçıklamaÖnerilen Eylem
1001FAILEDİstek başarısız oldu (genel hata)Ayrıntılı hata bilgileri için message alanını kontrol edin
1003INTERNAL_ERRORDahili sunucu hatasıKısa bir gecikme sonrası yeniden deneyin; devam ederse destek ekibiyle iletişime geçin
1011PARAM_ERRORİstek parametresi hatası — e.g., modelType=Base iken prompt eksikBase modunu kullanırken prompt sağlandığından emin olun
5002API_KEY_INVALIDGeçersiz veya eksik API AnahtarıAPIKEY başlığının mevcut olduğundan ve değerinin doğru olduğundan emin olun
9010SCAN_TEXT_ERRORMetin ifadesi içerik incelemesinden geçemediHassas veya yasaklı içeriği kaldırmak için ifadeyi değiştirin
9038PROHIBITED_CONTENTÜretilen çıktı görüntüsü yasaklı içerik barındırıyorİfadeyi/stili/girdileri ayarlayın ve yeniden deneyin
9051COINS_NOT_ENOUGHYetersiz coin / krediHesap kredilerinizi yükleyin ve yeniden deneyin

📄 Yaygın API hata kodlarının tam listesi için Hata Kodu Referansı bölümüne başvurun.