주택 설계도 생성 API 문서#
기본 URL:
https://api.ideal.house
버전: v1
갱신일: 2026-06-12
📖 개요#
주택 설계도 생성 API는 건축 스타일, 면적, 구조 구성 및 실내 배치 선호 사항을 바탕으로 AI가 생성한 주택 설계 프레젠테이션 보드를 만듭니다. 생성에 성공하면 API는 작업당 정확히 합성 결과 이미지 1개를 출력합니다. 하나의 프레젠테이션 보드에 서로 조화를 이루는 2D 평면도, 외관 입면도 및 사실적인 외관 렌더링이 포함됩니다. 결과는 output.resultUrl에 저장되고 output.resultList의 유일한 항목으로도 포함됩니다. 작업 흐름은 다음 두 단계의 비동기 방식입니다.
- 작업 생성 — 주택 설계도 매개변수를 제출하고
taskId를 받습니다. - 결과 폴링 —
taskId로 작업 상태를 조회하고 생성된 이미지를 가져옵니다.
🔐 인증#
모든 API 요청은 API 키로 인증해야 합니다.
요청 헤더에 API 키를 포함하세요.
| 헤더 | 값 |
|---|---|
APIKEY | your_api_key_here |
⚠️ API 키를 안전하게 보관하세요. 클라이언트 측 코드 또는 공개 저장소에 노출하지 마세요.
💰 크레딧 차감#
[!WARNING] 🪙 작업이 성공적으로 생성되면 선택한 **
modelType**에 따라 크레딧이 차감됩니다. 작업이 최종적으로 실패하면 차감된 크레딧은 계정으로 자동 환불됩니다.
크레딧이 부족하면 오류 코드9051을 반환합니다. 📄 크레딧 차감 참조를 참고하세요.
모델 (modelType) | 차감 크레딧 |
|---|---|
Base | 10크레딧 |
Pro | 20크레딧 |
📌 API 엔드포인트#
1. 주택 설계도 작업 생성#
새 AI 주택 설계도 생성 작업을 만들고 폴링용 고유 taskId를 반환합니다.
엔드포인트
POST /api/v1/housePlan/generate
요청 헤더
| 헤더 | 필수 여부 | 설명 |
|---|---|---|
APIKEY | ✅ 예 | API 인증 키 |
Content-Type | ✅ 예 | application/json |
요청 본문
| 필드 | 유형 | 필수 여부 | 설명 | 기본값 |
|---|---|---|---|---|
style | string / null | ✅ 예 | 건축 스타일의 영어 이름입니다. 스타일 옵션을 참고하세요. | Barndominium |
stories | string | ✅ 예 | 층수입니다. 열거형: 1, 2, 3+ | 2 |
bedrooms | string | ✅ 예 | 침실 수입니다. 열거형: 1, 2, 3, 4, 5+ | 2 |
bathrooms | string | ✅ 예 | 욕실 수입니다. 열거형: 1, 1.5, 2, 2.5, 3, 3.5, 4+ | 1 |
totalArea | string | ✅ 예 | min-max unit 형식의 총면적 범위입니다. 총면적 옵션을 참고하세요. | 150-200 m² |
garageEnabled | boolean | ✅ 예 | 차고 포함 여부 | false |
garageType | string / null | ⚠️ 조건부 | garageEnabled=true이면 필수입니다. 차고 유형 옵션을 참고하세요. | null |
garageCapacity | string / null | ⚠️ 조건부 | garageEnabled=true이면 필수입니다. 차고 수용 대수를 참고하세요. | null |
basement | string | ✅ 예 | 지하실 유형입니다. 지하실 옵션을 참고하세요. | None |
roofType | string / null | ❌ 아니요 | 지붕 구조 유형입니다. 지붕 유형 옵션을 참고하세요. | null |
outdoorSpaces | array<string> | ❌ 아니요 | 야외 공간입니다. 야외 공간 옵션을 참고하세요. | [] |
layoutConcept | string / null | ❌ 아니요 | 전체 실내 배치 개념입니다. 배치 개념 옵션을 참고하세요. | null |
bedroomAreaRanges | array<object> | ✅ 예 | 침실 면적 범위입니다. 길이는 침실 수와 같아야 합니다. 침실 면적 범위를 참고하세요. | 예제 참조 |
bathroomLayouts | array<object> | ✅ 예 | 욕실 배치 선택입니다. 길이는 Math.floor(bathrooms)여야 합니다. 욕실 배치를 참고하세요. | 예제 참조 |
kitchenLayout | string / null | ❌ 아니요 | 주방 배치입니다. 주방 옵션을 참고하세요. | null |
kitchenFeatureOptions | array<string> | ❌ 아니요 | 선택적 주방 기능입니다. 주방 옵션을 참고하세요. | [] |
keyRooms | string / null | ❌ 아니요 | 쉼표와 공백으로 구분한 특수 공간입니다. 주요 공간 옵션을 참고하세요. | null |
prompt | string | ❌ 아니요 | 생성을 추가로 유도하는 사용자 정의 텍스트 프롬프트 | "" |
refImageUrl | string | ❌ 아니요 | 스타일을 유도하는 참조 주택 이미지 URL | "" |
modelType | string | ✅ 예 | 모델 품질 유형입니다. 열거형: Base, Pro. ⚠️ Flash 모드는 지원하지 않습니다. | Base |
🖼️ 이미지 요건: 선택적 참조 이미지는 JPG/JPEG, PNG 또는 WebP여야 하며 20 MB 이하여야 합니다. 크기는 128 × 128 px부터 6,000 × 6,000 px까지 허용됩니다(경계값 포함). 최대 픽셀 크기를 초과하는 이미지는 처리 전에 6,000 × 6,000 px 안에 들어오도록 비율을 유지하여 자동 축소됩니다. URL은 API 서버에서 직접 접근할 수 있어야 합니다.
🎨 스타일 옵션#
| 값 | 설명 |
|---|---|
Barndominium | 기본값. 금속 헛간 스타일의 복합 주택 |
Cabin | 소박한 목조 오두막 스타일 |
Cape Cod | 전통적인 뉴잉글랜드 대칭 스타일 |
Coastal | 해변에서 영감을 받은 밝고 탁 트인 스타일 |
Colonial | 전통적인 대칭형 콜로니얼 건축 |
Contemporary | 깔끔한 선과 현대적인 재료 |
Craftsman | 천연 재료와 수공예 디테일 |
Farmhouse | 소박한 전원 농가 스타일 |
French Country | 우아한 프랑스 전원 스타일 |
Mediterranean | 따뜻한 느낌의 회벽과 테라코타 요소 |
Mid-Century Modern | 1950년대–70년대의 깔끔한 기하학적 모더니즘 |
Modern | 미니멀한 평면적/각진 현대 디자인 |
Ranch | 넓게 펼쳐진 단층 배치 |
Shingle Style | 목재 슁글이 연속적으로 덮인 외관 |
Southwestern | 어도비 흙벽돌에서 영감을 받은 사막 스타일 |
Transitional | 전통과 현대의 조화 |
Tudor | 목골 구조가 드러나는 중세 영국 스타일 |
Victorian | 화려한 19세기 장식 스타일 |
📐 총면적 옵션#
totalArea 필드는 min-max unit 형식을 사용합니다. 미터법 값에는 m², 영미 단위 값에는 ft²를 사용합니다. 최소값은 최대값보다 최소 한 단계 이상 작아야 합니다.
| 단위 | 최소값 | 최대값 | 단계 | 예 |
|---|---|---|---|---|
m² | 50 | 500 | 10 | 150-200 m² |
ft² | 500 | 5000 | 100 | 1500-2000 ft² |
🏠 지붕 유형 옵션#
| 값 | 설명 |
|---|---|
Gable roof | 전통적인 삼각형 박공지붕 |
Hip roof | 네 면 모두 경사진 모임지붕 |
Flat roof | 경사가 매우 작은 평지붕 |
Pitched roof | 일반적인 급경사 지붕 |
🏗️ 지하실 옵션#
| 값 | 설명 |
|---|---|
None | 지하실 없음 |
Partial | 건물 일부 면적 아래에만 있는 지하실 |
Full | 건물 전체 면적 아래의 지하실 |
🚗 차고 유형 옵션#
garageType은 garageEnabled=true일 때만 필수이며 그 외에는 null을 보내세요.
| 값 | 설명 |
|---|---|
Detached | 독립형 차고 |
Front Entry | 출입구가 전면을 향하는 차고 |
Side Entry | 출입구가 측면을 향하는 차고 |
Rear Entry | 출입구가 후면을 향하는 차고 |
🚗 차고 수용 대수#
garageCapacity는 garageEnabled=true일 때만 필수이며 그 외에는 null을 보내세요.
| 값 | 설명 |
|---|---|
1 | 차량 한 대용 차고 |
2 | 차량 두 대용 차고 |
3+ | 차량 세 대 이상의 주차 공간 |
🌿 야외 공간 옵션#
outdoorSpaces 필드는 다음 값의 배열을 허용합니다.
| 값 | 설명 |
|---|---|
Front porch | 전면의 지붕 있는 현관 포치 |
Covered patio | 지붕 있는 야외 파티오 공간 |
Deck | 목재 또는 합성재 데크 |
Balcony | 지면보다 높은 야외 플랫폼 |
Courtyard | 둘러싸였거나 일부가 둘러싸인 야외 마당 |
Breezeway | 건물을 연결하는 지붕 있는 통로 |
Outdoor Kitchen | 야외 조리 및 식사 공간 |
예제
"outdoorSpaces": ["Front porch", "Deck", "Balcony"]
🏛️ 배치 개념 옵션#
| 값 | 설명 |
|---|---|
Open Concept | 생활 공간들이 연결된 개방형 배치 |
Traditional | 명확한 경계로 구분된 방 |
Split-Level | 구역 사이의 바닥 높이가 엇갈리는 구조 |
🛏️ 침실 면적 범위#
bedroomAreaRanges 필드는 길이가 bedrooms 수와 같은 배열이어야 합니다. 각 항목의 형식은 다음과 같습니다.
| 필드 | 유형 | 설명 |
|---|---|---|
name | string | 침실 표시 이름입니다. 예: Room 1 (Master) |
minArea | string | 최소 침실 면적. 음수가 아닌 숫자 문자열이어야 함 |
maxArea | string | 최대 침실 면적. minArea 이상이어야 함 |
unit | string | 면적 단위. 열거형: m², ft² |
bedrooms="2"의 기본 예제
[
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
]
🛁 욕실 배치#
bathroomLayouts 필드는 길이가 Math.floor(bathrooms)인 배열이어야 합니다. 예를 들어 bathrooms="2.5"에는 욕실 배치 객체 2개가 필요합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
name | string | 욕실 표시 이름입니다. 예: Bathroom 1 |
layout | string / null | 열거형: With Wet & Dry Separation, Without Separation 또는 null |
bathrooms="1"의 기본 예제
[
{ "name": "Bathroom 1", "layout": null }
]
🍳 주방 옵션#
주방 배치
| 값 | 설명 |
|---|---|
Open Kitchen | 거실/식당과 연결된 개방형 주방 |
Closed Kitchen | 분리되어 둘러싸인 주방 공간 |
주방 기능 옵션
| 값 | 설명 |
|---|---|
Eating Bar | 식사용 바 / 카운터 좌석 |
Kitchen Island | 주방 아일랜드 |
Breakfast Nook | 아침 식사용 작은 공간 |
🚪 주요 공간 옵션#
keyRooms 필드는 다음 값 중 하나 이상을 허용합니다. 여러 옵션을 선택하면 **쉼표 (,)**로 구분하세요.
| 값 | 설명 |
|---|---|
Home Office | 전용 홈 오피스 또는 서재 |
Bonus Room | 유연하게 활용할 수 있는 다목적 여유 공간 |
Media Room | 홈시어터 또는 미디어실 |
Mudroom | 야외 용품을 보관하는 현관 공간 |
Laundry Room | 전용 세탁 공간 |
Guest Suite | 독립된 손님용 침실 스위트 |
예제
"keyRooms": "Home Office, Media Room, Guest Suite"
모델 유형
| 값 | 설명 |
|---|---|
Base | 기본값. 속도와 품질의 균형. 고해상도 합성 프레젠테이션 보드 생성 |
Pro | 더 높은 품질 및 해상도 출력. 속도는 더 느림 |
⚠️ 참고: 이 API에서는
Flash모드를 사용할 수 없습니다.Base와Pro만 지원합니다.
📥 요청 예제#
cURL
# Basic request with default values
curl -X POST "https://api.ideal.house/api/v1/housePlan/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"garageType": null,
"garageCapacity": null,
"basement": "None",
"roofType": null,
"outdoorSpaces": [],
"layoutConcept": null,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": null }
],
"kitchenLayout": null,
"kitchenFeatureOptions": [],
"keyRooms": null,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
}'
# Pro model with reference image and custom prompt
curl -X POST "https://api.ideal.house/api/v1/housePlan/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"style": "Victorian",
"stories": "3+",
"bedrooms": "5+",
"bathrooms": "4+",
"totalArea": "300-380 m²",
"garageEnabled": true,
"garageType": "Front Entry",
"garageCapacity": "3+",
"basement": "Full",
"roofType": "Gable roof",
"outdoorSpaces": ["Front porch", "Balcony", "Courtyard", "Outdoor Kitchen"],
"layoutConcept": "Traditional",
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "18", "maxArea": "28", "unit": "m²" },
{ "name": "Room 2", "minArea": "12", "maxArea": "16", "unit": "m²" },
{ "name": "Room 3", "minArea": "12", "maxArea": "16", "unit": "m²" },
{ "name": "Room 4", "minArea": "10", "maxArea": "14", "unit": "m²" },
{ "name": "Room 5", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": "With Wet & Dry Separation" },
{ "name": "Bathroom 2", "layout": "With Wet & Dry Separation" },
{ "name": "Bathroom 3", "layout": "Without Separation" },
{ "name": "Bathroom 4", "layout": null }
],
"kitchenLayout": "Closed Kitchen",
"kitchenFeatureOptions": ["Kitchen Island", "Breakfast Nook"],
"keyRooms": "Home Office, Bonus Room, Media Room, Guest Suite",
"prompt": "Grand Victorian mansion with ornate details and wraparound porch",
"refImageUrl": "https://example.com/reference-house.jpg",
"modelType": "Pro"
}'
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class HousePlanApiExample {
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();
String requestBody = """
{
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"garageType": null,
"garageCapacity": null,
"basement": "None",
"roofType": null,
"outdoorSpaces": [],
"layoutConcept": null,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": null }
],
"kitchenLayout": null,
"kitchenFeatureOptions": [],
"keyRooms": null,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
}
""";
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/housePlan/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"
}
payload = {
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": False,
"garageType": None,
"garageCapacity": None,
"basement": "None",
"roofType": None,
"outdoorSpaces": [],
"layoutConcept": None,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": None }
],
"kitchenLayout": None,
"kitchenFeatureOptions": [],
"keyRooms": None,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
}
response = requests.post(
f"{BASE_URL}/api/v1/housePlan/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 createHousePlanTask() {
try {
const response = await axios.post(
`${BASE_URL}/api/v1/housePlan/generate`,
{
style: 'Barndominium',
stories: '2',
bedrooms: '2',
bathrooms: '1',
totalArea: '150-200 m²',
garageEnabled: false,
garageType: null,
garageCapacity: null,
basement: 'None',
roofType: null,
outdoorSpaces: [],
layoutConcept: null,
bedroomAreaRanges: [
{ name: 'Room 1 (Master)', minArea: '12', maxArea: '18', unit: 'm²' },
{ name: 'Room 2', minArea: '10', maxArea: '14', unit: 'm²' }
],
bathroomLayouts: [
{ name: 'Bathroom 1', layout: null }
],
kitchenLayout: null,
kitchenFeatureOptions: [],
keyRooms: null,
prompt: '',
refImageUrl: '',
modelType: 'Base'
},
{
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);
}
}
createHousePlanTask();
📤 응답#
성공 응답
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| 필드 | 유형 | 설명 |
|---|---|---|
code | integer | 0은 성공을 의미함 |
message | string | 응답 메시지 |
data | long | 결과 폴링용 고유 작업 ID |
2. 작업 결과 조회#
이전에 생성한 주택 설계도 작업의 현재 상태와 출력을 조회합니다.
엔드포인트
GET /api/v1/housePlan/result
요청 헤더
| 헤더 | 필수 여부 | 설명 |
|---|---|---|
APIKEY | ✅ 예 | API 인증 키 |
쿼리 매개변수
| 매개변수 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
taskId | long | ✅ 예 | 작업 생성 엔드포인트가 반환한 작업 ID |
📥 요청 예제#
cURL
curl -X GET "https://api.ideal.house/api/v1/housePlan/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class HousePlanResultExample {
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/housePlan/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/housePlan/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":
output = result["output"]
print("Composite Result URL:", output["resultUrl"])
print("Result List:", output.get("resultList", []))
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/housePlan/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('Composite Result URL:', result.output.resultUrl);
console.log('Result List:', result.output.resultList);
} else {
console.log('Task ended with status:', status);
}
break;
}
// Wait 3 seconds before next poll
await new Promise(resolve => setTimeout(resolve, 3000));
}
}
pollResult(1234567890123456789n);
📤 응답#
📸 참고: 이 API는 성공한 작업당 정확히 합성 결과 이미지 1개를 생성합니다. 하나의 프레젠테이션 보드에 2D 평면도, 외관 입면도 및 사실적인 외관 렌더링을 결합합니다.
output.resultUrl에는 합성 이미지 URL이 포함되고,output.resultList에는 호환성을 위해 동일한 URL이 단일 항목 배열로 포함됩니다.
성공 응답 (작업 완료)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Success",
"waitNumber": 0,
"percentage": 100,
"input": {
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"garageType": null,
"garageCapacity": null,
"basement": "None",
"roofType": null,
"outdoorSpaces": [],
"layoutConcept": null,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": null }
],
"kitchenLayout": null,
"kitchenFeatureOptions": [],
"keyRooms": null,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
},
"output": {
"resultUrl": "https://cdn.ideal.house/output/house_plan_composite.jpg",
"resultList": [
"https://cdn.ideal.house/output/house_plan_composite.jpg"
],
"width": 2560,
"height": 1440
}
}
}
응답 (작업 처리 중 / 대기열에 있음)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 1,
"percentage": 45,
"input": {
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"garageType": null,
"garageCapacity": null,
"basement": "None",
"roofType": null,
"outdoorSpaces": [],
"layoutConcept": null,
"bedroomAreaRanges": [
{ "name": "Room 1 (Master)", "minArea": "12", "maxArea": "18", "unit": "m²" },
{ "name": "Room 2", "minArea": "10", "maxArea": "14", "unit": "m²" }
],
"bathroomLayouts": [
{ "name": "Bathroom 1", "layout": null }
],
"kitchenLayout": null,
"kitchenFeatureOptions": [],
"keyRooms": null,
"prompt": "",
"refImageUrl": "",
"modelType": "Base"
},
"output": null
}
}
응답 (작업 실패)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"style": "Barndominium",
"stories": "2",
"bedrooms": "2",
"bathrooms": "1",
"totalArea": "150-200 m²",
"garageEnabled": false,
"basement": "None",
"modelType": "Base"
},
"output": null
}
}
응답 필드
| 필드 | 유형 | 설명 |
|---|---|---|
id | long | 작업 고유 식별자 |
status | string | 현재 작업 상태 (작업 상태 참조) |
waitNumber | integer | 대기열에서 앞에 있는 작업 수 (0은 현재 처리 중임을 의미함) |
percentage | integer | 작업 완료 비율 (0–100) |
input | object | 작업의 원래 입력 매개변수 |
input.style | string | 건축 스타일 |
input.totalArea | string | 총면적 범위 |
input.stories | string | 층수 |
input.bedrooms | string | 침실 수 |
input.bathrooms | string | 욕실 수 |
input.garageEnabled | boolean | 차고 요청 여부 |
input.garageType | string / null | 차고 유형 |
input.garageCapacity | string / null | 차고 주차 대수 |
input.basement | string | 지하실 유형 |
input.roofType | string | 지붕 유형 |
input.outdoorSpaces | array<string> | 야외 공간 |
input.layoutConcept | string | 전체 배치 개념 |
input.bedroomAreaRanges | array<object> | 침실 면적 범위 |
input.bathroomLayouts | array<object> | 욕실 배치 선택 |
input.kitchenLayout | string | 주방 배치 스타일 |
input.kitchenFeatureOptions | array<string> | 선택적 주방 기능 |
input.keyRooms | string | 주요 특수 공간 (쉼표로 구분) |
input.prompt | string | 사용자 정의 텍스트 프롬프트 (제공된 경우) |
input.refImageUrl | string | 참조 이미지 URL (제공된 경우) |
input.modelType | string | 사용된 모델 유형 |
output | object | 생성 결과 (status가 Success일 때만 제공됨) |
output.resultUrl | string | 생성된 합성 주택 설계 프레젠테이션 보드 URL |
output.resultList | array<string> | 생성된 결과 이미지 URL 목록입니다. 주택 설계도에서는 보통 output.resultUrl과 같은 URL을 포함하는 단일 항목 배열입니다. |
output.width | integer | 출력 너비(픽셀) |
output.height | integer | 출력 높이(픽셀) |
📊 작업 상태#
| 상태 | 설명 |
|---|---|
Unprocessed | 작업이 생성되었지만 아직 시작되지 않음 |
Processing | 작업이 현재 처리 중 |
Success | 작업이 성공적으로 완료되어 출력 사용 가능 |
Failed | 오류로 작업이 실패함 |
Termination | 작업이 중단되거나 종료됨 |
3-5초마다 폴링하세요. API 작업 제한을 참고하세요.
❌ 오류 응답#
모든 오류 응답은 동일한 JSON 구조를 사용합니다.
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
오류 코드 참조#
| 코드 | 이름 | 설명 | 권장 조치 |
|---|---|---|---|
1001 | FAILED | 요청 실패 (일반 오류) | 구체적인 오류 내용은 message 필드 확인 |
1003 | INTERNAL_ERROR | 내부 서버 오류 | 잠시 후 재시도하고 계속 발생하면 지원팀에 문의 |
1011 | PARAM_ERROR | 요청 매개변수 오류 | 모든 필수 매개변수가 제공되었으며 형식이 올바른지 검증 |
5002 | API_KEY_INVALID | 유효하지 않거나 누락된 API 키 | APIKEY 헤더가 있고 값이 올바른지 확인 |
9010 | SCAN_TEXT_ERROR | 텍스트 프롬프트가 콘텐츠 검토를 통과하지 못함 | 민감하거나 금지된 콘텐츠를 제거하도록 프롬프트 수정 |
9038 | PROHIBITED_CONTENT | 생성된 출력 이미지에 금지된 콘텐츠가 포함됨 | 프롬프트/스타일/입력을 조정하고 재시도 |
9051 | COINS_NOT_ENOUGH | 코인 / 크레딧 부족 | 계정 크레딧을 충전하고 재시도 |
📄 전체 공통 API 오류 코드 목록은 오류 코드 참조를 참고하세요.