Ideal House
Naar inhoud gaan

Documentatie voor de API voor intelligente beeldbewerking#

Basis-URL: https://api.ideal.house
Versie: v1
Bijgewerkt: 2026-03-06


📖 Overzicht#

Met de API voor intelligente beeldbewerking kun je afbeeldingen met AI bewerken en transformeren. Je levert een bronafbeelding en eventueel een tekstinstructie; de AI past slimme wijzigingen toe volgens de geselecteerde modelmodus. De werkstroom is asynchroon en bestaat uit twee stappen:

  1. Een taak aanmaken — Dien je afbeelding en parameters in en ontvang een taskId.
  2. Resultaten regelmatig opvragen — Gebruik de taskId om de taakstatus op te vragen en de bewerkte afbeelding op te halen.

🔐 Authenticatie#

Alle API-verzoeken moeten worden geauthenticeerd met een API Key.

Neem je API Key op in de verzoekheader:

VerzoekheaderWaarde
APIKEYyour_api_key_here

⚠️ Houd je API Key geheim. Maak deze niet zichtbaar in clientcode of openbare opslagplaatsen.


💰 Creditafschrijving#

[!WARNING] 🪙 Credits worden op basis van de geselecteerde modelType afgeschreven zodra de taak succesvol is aangemaakt. Als de taak uiteindelijk mislukt, worden de afgeschreven credits automatisch terugbetaald op je account.
Onvoldoende credits leveren foutcode 9051 op. 📄 Zie de referentie voor creditafschrijving.

Modeltype (modelType)Afgeschreven credits
Flash1 tegoedeenheid
Base3 tegoedeenheden
Pro10 tegoedeenheden

📌 API-endpoints#


1. Een taak voor intelligente beeldbewerking aanmaken#

Maakt een nieuwe AI-taak voor intelligente beeldbewerking aan en retourneert een unieke taskId om de status regelmatig op te vragen.

Eindpunt

Platte tekst
POST /api/v1/magicEditor/generate

Verzoekheaders

VerzoekheaderVerplichtBeschrijving
APIKEY✅ JaJe API-authenticatiesleutel
Content-Type✅ Jaapplication/json

Verzoekinhoud

VeldTypeVerplichtBeschrijving
imageUrlstring✅ JaURL van de te bewerken bronafbeelding
promptstring⚠️ VoorwaardelijkTekstinstructie die de gewenste bewerkingen beschrijft. Verplicht wanneer modelType gelijk is aan Base; optioneel voor de modi Flash en Pro
modelTypestring❌ OptioneelModeltype. Mogelijke waarden: Flash, Base, Pro. Standaard Flash

🖼️ Afbeeldingsvereisten: Gebruik JPG/JPEG, PNG of WebP. Elke afbeelding mag maximaal 20 MB groot zijn, met afmetingen van 128 × 128 px tot en met 6,000 × 6,000 px. Afbeeldingen boven de maximale pixelafmetingen worden vóór verwerking automatisch evenredig verkleind tot binnen 6,000 × 6,000 px. De afbeeldings-URL moet rechtstreeks bereikbaar zijn voor de API-server.


Modeltypen

WaardeBeschrijvingTekstinstructie verplicht
FlashStandaard. Snel bewerken met automatische intelligente AI-generatie❌ Optioneel
BaseTekstgestuurde bewerking: gebruikt je instructie om de uitvoer nauwkeurig te bepalen✅ Verplicht
ProBewerking van hogere kwaliteit met meer gedetailleerde resultaten❌ Optioneel

⚠️ Belangrijk: Wanneer modelType gelijk is aan Base, moet het veld prompt worden opgegeven. Verzoeken met modelType=Base zonder prompt leveren een parameterfout op.


📥 Verzoekvoorbeelden#

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

📤 Antwoord#

Succesantwoord

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
VeldTypeBeschrijving
codeinteger0 geeft succes aan
messagestringAntwoordbericht
datalongDe unieke taak-ID voor het regelmatig opvragen van resultaten

2. Taakresultaat ophalen#

Haalt de huidige status en uitvoer van een eerder aangemaakte taak voor intelligente beeldbewerking op.

Eindpunt

Platte tekst
GET /api/v1/magicEditor/result

Verzoekheaders

VerzoekheaderVerplichtBeschrijving
APIKEY✅ JaJe API-authenticatiesleutel

Queryparameters

QueryparameterTypeVerplichtBeschrijving
taskIdlong✅ JaDe taak-ID die het endpoint voor het aanmaken van taken retourneert

📥 Verzoekvoorbeelden#

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

📤 Antwoord#

Succesantwoord: taak voltooid

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

Antwoord: taak in verwerking of in de wachtrij

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

Antwoord: taak mislukt

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

Antwoordvelden

VeldTypeBeschrijving
idlongUnieke taakidentificatie
statusstringHuidige taakstatus; zie taakstatus
waitNumberintegerAantal taken vóór deze taak in de wachtrij; 0 betekent dat de taak wordt verwerkt
percentageintegerVoltooiingspercentage van de taak (0–100)
inputobjectDe oorspronkelijke invoerparameters van de taak
input.imageUrlstringURL van de bronafbeelding
input.promptstringTekstinstructie, indien opgegeven
input.modelTypestringGebruikt modeltype
outputobjectGeneratieresultaat, alleen beschikbaar wanneer status gelijk is aan Success
output.resultUrlstringURL van de bewerkte uitvoerafbeelding
output.widthintegerUitvoerbreedte in pixels
output.heightintegerUitvoerhoogte in pixels

📊 Taakstatus#

StatusBeschrijving
UnprocessedDe taak is aangemaakt, maar nog niet gestart
ProcessingDe taak wordt momenteel verwerkt
SuccessDe taak is succesvol voltooid; uitvoer is beschikbaar
FailedDe taak is door een fout mislukt
TerminationDe taak is onderbroken of beëindigd

Vraag de status elke 3-5 seconden op. Zie de taaklimiet voor de API.


❌ Foutantwoorden#

Alle foutantwoorden hebben dezelfde JSON-structuur:

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

Foutcodereferentie#

CodeNaamBeschrijvingAanbevolen actie
1001FAILEDVerzoek mislukt: algemene foutControleer het veld message voor specifieke foutdetails
1003INTERNAL_ERRORInterne serverfoutProbeer het na een korte wachttijd opnieuw; neem contact op met ondersteuning als de fout blijft optreden
1011PARAM_ERRORFout in verzoekparameters — e.g., prompt ontbreekt wanneer modelType=BaseGeef prompt op wanneer je de modus Base gebruikt
5002API_KEY_INVALIDOngeldige of ontbrekende API KeyControleer dat de header APIKEY aanwezig is en de waarde klopt
9010SCAN_TEXT_ERRORTekstinstructie afgekeurd bij inhoudscontrolePas de instructie aan om gevoelige of verboden inhoud te verwijderen
9038PROHIBITED_CONTENTDe gegenereerde uitvoerafbeelding bevat verboden inhoudPas instructie, stijl of invoer aan en probeer opnieuw
9051COINS_NOT_ENOUGHOnvoldoende munten / creditsVul je accountcredits aan en probeer opnieuw

📄 Raadpleeg de foutcodereferentie voor de volledige lijst van algemene API-foutcodes.