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:
- Een taak aanmaken — Dien je afbeelding en parameters in en ontvang een
taskId. - Resultaten regelmatig opvragen — Gebruik de
taskIdom 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:
| Verzoekheader | Waarde |
|---|---|
APIKEY | your_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
modelTypeafgeschreven zodra de taak succesvol is aangemaakt. Als de taak uiteindelijk mislukt, worden de afgeschreven credits automatisch terugbetaald op je account.
Onvoldoende credits leveren foutcode9051op. 📄 Zie de referentie voor creditafschrijving.
Modeltype (modelType) | Afgeschreven credits |
|---|---|
Flash | 1 tegoedeenheid |
Base | 3 tegoedeenheden |
Pro | 10 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
POST /api/v1/magicEditor/generate
Verzoekheaders
| Verzoekheader | Verplicht | Beschrijving |
|---|---|---|
APIKEY | ✅ Ja | Je API-authenticatiesleutel |
Content-Type | ✅ Ja | application/json |
Verzoekinhoud
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
imageUrl | string | ✅ Ja | URL van de te bewerken bronafbeelding |
prompt | string | ⚠️ Voorwaardelijk | Tekstinstructie die de gewenste bewerkingen beschrijft. Verplicht wanneer modelType gelijk is aan Base; optioneel voor de modi Flash en Pro |
modelType | string | ❌ Optioneel | Modeltype. 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
| Waarde | Beschrijving | Tekstinstructie verplicht |
|---|---|---|
Flash | Standaard. Snel bewerken met automatische intelligente AI-generatie | ❌ Optioneel |
Base | Tekstgestuurde bewerking: gebruikt je instructie om de uitvoer nauwkeurig te bepalen | ✅ Verplicht |
Pro | Bewerking van hogere kwaliteit met meer gedetailleerde resultaten | ❌ Optioneel |
⚠️ Belangrijk: Wanneer
modelTypegelijk is aanBase, moet het veldpromptworden opgegeven. Verzoeken metmodelType=Basezonderpromptleveren een parameterfout op.
📥 Verzoekvoorbeelden#
cURL
# 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)
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)
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)
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
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Veld | Type | Beschrijving |
|---|---|---|
code | integer | 0 geeft succes aan |
message | string | Antwoordbericht |
data | long | De 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
GET /api/v1/magicEditor/result
Verzoekheaders
| Verzoekheader | Verplicht | Beschrijving |
|---|---|---|
APIKEY | ✅ Ja | Je API-authenticatiesleutel |
Queryparameters
| Queryparameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
taskId | long | ✅ Ja | De taak-ID die het endpoint voor het aanmaken van taken retourneert |
📥 Verzoekvoorbeelden#
cURL
curl -X GET "https://api.ideal.house/api/v1/magicEditor/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
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)
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)
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
{
"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
{
"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
{
"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
| Veld | Type | Beschrijving |
|---|---|---|
id | long | Unieke taakidentificatie |
status | string | Huidige taakstatus; zie taakstatus |
waitNumber | integer | Aantal taken vóór deze taak in de wachtrij; 0 betekent dat de taak wordt verwerkt |
percentage | integer | Voltooiingspercentage van de taak (0–100) |
input | object | De oorspronkelijke invoerparameters van de taak |
input.imageUrl | string | URL van de bronafbeelding |
input.prompt | string | Tekstinstructie, indien opgegeven |
input.modelType | string | Gebruikt modeltype |
output | object | Generatieresultaat, alleen beschikbaar wanneer status gelijk is aan Success |
output.resultUrl | string | URL van de bewerkte uitvoerafbeelding |
output.width | integer | Uitvoerbreedte in pixels |
output.height | integer | Uitvoerhoogte in pixels |
📊 Taakstatus#
| Status | Beschrijving |
|---|---|
Unprocessed | De taak is aangemaakt, maar nog niet gestart |
Processing | De taak wordt momenteel verwerkt |
Success | De taak is succesvol voltooid; uitvoer is beschikbaar |
Failed | De taak is door een fout mislukt |
Termination | De 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:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
Foutcodereferentie#
| Code | Naam | Beschrijving | Aanbevolen actie |
|---|---|---|---|
1001 | FAILED | Verzoek mislukt: algemene fout | Controleer het veld message voor specifieke foutdetails |
1003 | INTERNAL_ERROR | Interne serverfout | Probeer het na een korte wachttijd opnieuw; neem contact op met ondersteuning als de fout blijft optreden |
1011 | PARAM_ERROR | Fout in verzoekparameters — e.g., prompt ontbreekt wanneer modelType=Base | Geef prompt op wanneer je de modus Base gebruikt |
5002 | API_KEY_INVALID | Ongeldige of ontbrekende API Key | Controleer dat de header APIKEY aanwezig is en de waarde klopt |
9010 | SCAN_TEXT_ERROR | Tekstinstructie afgekeurd bij inhoudscontrole | Pas de instructie aan om gevoelige of verboden inhoud te verwijderen |
9038 | PROHIBITED_CONTENT | De gegenereerde uitvoerafbeelding bevat verboden inhoud | Pas instructie, stijl of invoer aan en probeer opnieuw |
9051 | COINS_NOT_ENOUGH | Onvoldoende munten / credits | Vul je accountcredits aan en probeer opnieuw |
📄 Raadpleeg de foutcodereferentie voor de volledige lijst van algemene API-foutcodes.