Ideal House
Przejdź do treści

Dokumentacja renderowania AI 3D API#

Podstawowy URL: https://api.ideal.house
Wersja: v1
Zaktualizowano: 2026-03-06


📖 Przegląd#

Interfejs AI 3D Rendering API umożliwia wysyłanie zadań renderowania 3D opartych na obrazie źródłowym, z precyzyjną kontrolą stopnia renderowania, trybu renderowania, opcjonalnego polecenia tekstowego oraz obrazów referencyjnych stylu. Praca jest asynchroniczna i obejmuje dwa kroki:

  1. Utwórz zadanie — Wyślij parametry wejściowe i otrzymaj identyfikator taskId.
  2. Sprawdzaj wyniki — Użyj identyfikatora taskId, aby cyklicznie sprawdzać status zadania i pobrać wygenerowany wynik.

🔐 Uwierzytelnianie#

Wszystkie żądania API muszą być uwierzytelniane za pomocą klucza API Key.

Włącz swój klucz API Key w nagłówku żądania:

NagłówekWartość
APIKEYyour_api_key_here

⚠️ Zachowaj swój klucz API Key w tajemnicy. Nie ujawniaj go w kodzie po stronie klienta ani w publicznych repozytoriach.


💰 Odejmowanie kredytów#

[!WARNING] 🪙 Kredyty są odbierane na podstawie wybranego modelType po pomyślnym utworzeniu zadania. Jeśli zadanie ostatecznie zawiedzie, odebrane kredyty zostaną automatycznie zwrócone na Twoje konto.
Niewystarczające kredyty spowodują zwrócenie kodu błędu 9051. 📄 Zobacz Referencja odejmowania kredytów.

Model (modelType)Odejęte kredyty
Flash1 kredyt
Base3 kredyty
Pro10 kredytów

📌 Punkty końcowe API#


1. Utwórz zadanie renderowania 3D#

Tworzy nowe zadanie renderowania AI 3D i zwraca unikalny identyfikator taskId do cyklicznego sprawdzania statusu.

Punkt końcowy

Zwykły tekst
POST /api/v1/ai3dRendering/generate

Nagłówki żądania

NagłówekWymaganyOpis
APIKEY✅ TakTwój klucz uwierzytelniający API
Content-Type✅ Takapplication/json

Ciało żądania

PoleTypWymaganeOpis
imageUrlstring✅ TakAdres URL obrazu źródłowego do renderowania
promptstring❌ OpcjonalnieDodatkowe polecenie tekstowe kierujące stylem lub treścią renderowania
modelTypestring❌ OpcjonalnieTyp jakości modelu. Wartości: Flash, Base, Pro. Domyślnie: Flash
renderDegreeinteger❌ OpcjonalniePoziom intensywności renderowania. Zakres: od 1 (najlżejszy) do 6 (najmocniejszy). Domyślnie: 3. Działa tylko, gdy modelType ma wartość Flash
renderModestring❌ OpcjonalnieTryb renderowania. Wartości: default, creativeMode. Domyślnie: default
refImageUrlstring❌ OpcjonalnieAdres URL obrazu referencyjnego stylu kierującego wynikiem renderowania

⚠️ Uwaga: Parametr renderDegree działa tylko, gdy modelType ma wartość Flash. Jeśli nie podano modelType, domyślnie używana jest wartość Flash.

🖼️ Wymagania dotyczące obrazu: Wszystkie obrazy wejściowe i referencyjne muszą być w formacie JPG/JPEG, PNG lub WebP. Każdy obraz nie może być większy niż 20 MB, a jego wymiary muszą mieścić się w zakresie od 128 × 128 px do 6,000 × 6,000 px (włącznie). Obrazy przekraczające maksymalne wymiary pikselowe są automatycznie skalowane proporcjonalnie, aby zmieściły się w zakresie 6,000 × 6,000 px przed przetwarzaniem. Adresy URL obrazów muszą być bezpośrednio dostępne dla serwera API.


Typy modeli

WartośćOpis
FlashDomyślnie. Najszybsza prędkość generowania, standardowa jakość. Obsługuje kontrolę parametru renderDegree
BaseZbalansowana prędkość i jakość. Parametr renderDegree jest ignorowany
ProNajwyższa jakość, wolniejsze generowanie. Parametr renderDegree jest ignorowany

Tryby renderowania

WartośćOpis
defaultDomyślny tryb. Zachowuje teksturę i strukturę oryginalnego obrazu podczas renderowania (Tryb zachowania tekstury)
creativeModeTryb kreatywny — stosuje bardziej artystyczne i stylizowane transformacje renderowania

Stopień renderowania

WartośćOpis
1Najlżejsze renderowanie — minimalna transformacja
25Stopniowa intensywność renderowania
6Najmocniejsze renderowanie — maksymalna transformacja

📥 Przykłady żądań#

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

📤 Odpowiedź#

Odpowiedź sukcesu

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
PoleTypOpis
codeinteger0 oznacza sukces
messagestringKomunikat odpowiedzi
datalongUnikalny identyfikator zadania do sprawdzania wyników

2. Pobranie wyniku zadania#

Pobiera bieżący status i wynik wcześniej utworzonego zadania renderowania.

Punkt końcowy

Zwykły tekst
GET /api/v1/ai3dRendering/result

Nagłówki żądania

NagłówekWymaganyOpis
APIKEY✅ TakTwój klucz uwierzytelniający API

Parametry zapytania

ParametrTypWymaganyOpis
taskIdlong✅ TakIdentyfikator zadania zwrócony z endpointu tworzenia zadania

📥 Przykłady żądań#

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

📤 Odpowiedź#

Odpowiedź sukcesu (Zadanie zakończone)

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

Odpowiedź (Zadanie w trakcie przetwarzania / W kolejce)

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

Odpowiedź (Zadanie nie powiodło się)

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

Pola odpowiedzi

PoleTypOpis
idlongUnikalny identyfikator zadania
statusstringBieżący status zadania (zobacz Status zadania)
waitNumberintegerLiczba zadań przed Tobą w kolejce (0 oznacza, że zadanie jest obecnie przetwarzane)
percentageintegerProcent ukończenia zadania (0–100)
inputobjectOryginalne parametry wejściowe zadania
input.imageUrlstringAdres URL obrazu źródłowego (jeśli podano)
input.promptstringPolecenie tekstowe źródłowe (jeśli podano)
input.modelTypestringużyty typ modelu
input.renderDegreeintegerUżyty poziom intensywności renderowania (1–6)
input.renderModestringUżyty tryb renderowania (default lub creativeMode)
input.refImageUrlstringAdres URL obrazu referencyjnego stylu (jeśli podano)
outputobjectWynik generacji (dostępny tylko, gdy status wynosi Success)
output.resultUrlstringAdres URL do wyrenderowanego obrazu wyjściowego
output.widthintegerSzerokość wyjścia w pikselach
output.heightintegerWysokość wyjścia w pikselach

📊 Status zadania#

StatusOpis
UnprocessedZadanie zostało utworzone, ale nie zostało jeszcze rozpoczęte
ProcessingZadanie jest obecnie przetwarzane
SuccessZadanie zakończyło się pomyślnie — wynik jest dostępny
FailedZadanie nie powiodło się z powodu błędu

Wykonuj cykliczne sprawdzanie co 3-5 sekund. Zobacz Limit zadań API.


❌ Odpowiedzi błędów#

Wszystkie odpowiedzi błędów mają tę samą strukturę JSON:

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

Referencja kodów błędów#

KodNazwaOpisSugerowane działanie
1001FAILEDŻądanie nie powiodło się (błąd ogólny)Sprawdź pole message, aby uzyskać szczegółowe informacje o błędzie
1003INTERNAL_ERRORWewnętrzny błąd serweraPonów próbę po krótkim opóźnieniu; skontaktuj się z pomocą techniczną, jeśli problem utrzymuje się
1011PARAM_ERRORbłąd parametru żądaniaZweryfikuj, czy wszystkie wymagane parametry są podane i poprawnie sformatowane
5002API_KEY_INVALIDNieprawidłowy lub brakujący klucz APIUpewnij się, że nagłówek APIKEY jest obecny i ma poprawną wartość
9010SCAN_TEXT_ERRORWskazówka tekstowa nie przeszła weryfikacji treściZmodyfikuj wskazówkę, aby usunąć wszelkie treści wrażliwe lub zakazane
9038PROHIBITED_CONTENTWygenerowany obraz wyjściowy zawiera treści zakazaneDostosuj wskazówkę/styl/wejścia i ponów próbę
9051COINS_NOT_ENOUGHniewystarczające monety / kredytyDoładuj kredyty na swoim koncie i ponów

📄 Pełną listę wspólnych kodów błędów API znajdziesz w Referencji kodów błędów.