Virtual Staging API
The Collov Virtual Staging API enables developers to integrate AI-powered room transformations into their applications, allowing you to virtually redesign spaces or clear rooms entirely from uploaded images.

Room Declutter
Automatically remove all furniture and decorations while preserving walls, floors, and architectural features.

Virtual Staging
Render photorealistic, professionally staged interiors in any room type and design style from a single photo.
These APIs are designed to support asynchronous task processing:
- You initiate a task with a Send Task API.
- You periodically poll the Get Result API using the returned
uuid(for staging) orid(for empty room tasks) until the status isSUCCESS.
This workflow ensures you can process high-quality AI-generated results without blocking client operations, while respecting rate limits and concurrency limits.
Whether you're building a real estate platform, an interior design tool, or a property management solution, the Collov Virtual Staging API provides a scalable, programmatic way to create photorealistic room transformations at scale.
Tutorial
Before you start
- Auth: send
apiKey: YOUR_API_KEYin headers. - Content-Type:
multipart/form-datafor both send-task and get-result endpoints (per spec). - Async task process: send → get a task token (
uuidorid) → poll untilstatus: SUCCESSorFAILED. - Rate limit: 10 requests per second; concurrency limit: 2. If you receive HTTP 429, implement exponential back-off and retry.
You can retrieve your API key from the Enterprise API center in your Collov console. Keep it secret — never ship it in client-side code.
Virtual staging: render a designed room
1. Send task
Form fields
uploadUrl(string, required) — public URL to the original imageroomType(enum, required) — one of the supported room typesstyle(enum, required) — one of the supported stylesemptyRoomUrl(string, optional) — if you already cleared the room, pass its URL to stage on top of it
# Set API_KEY in the environment first
export API_KEY="XXXXXXXXXXX"
curl -X POST "https://api.collov.ai/flair/enterpriseApi/vst/generateImgOnCommon" \
-H "apiKey: $API_KEY" \
-H "Content-Type: multipart/form-data" \
-F "uploadUrl=https://example.com/your/original.jpg" \
-F "roomType=living room" \
-F "style=modern"import time, requests
API_KEY = "YOUR_API_KEY"
BASE = "https://api.collov.ai"
headers = {"apiKey": API_KEY}
# 1) Send task
data = {
"uploadUrl": "https://example.com/your/original.jpg",
"roomType": "living room",
"style": "modern",
# "emptyRoomUrl": "https://example.com/cleared.webp" # optional
}
r = requests.post(f"{BASE}/flair/enterpriseApi/vst/generateImgOnCommon",
headers=headers, files=data) # multipart/form-data
r.raise_for_status()
task = r.json()["data"]
uuid = task["uuid"]
print("Task UUID:", uuid)import FormData from "form-data";
import fetch from "node-fetch";
const API_KEY = process.env.API_KEY;
const form = new FormData();
form.append("uploadUrl", "https://example.com/your/original.jpg");
form.append("roomType", "living room");
form.append("style", "modern");
const res = await fetch(
"https://api.collov.ai/flair/enterpriseApi/vst/generateImgOnCommon",
{
method: "POST",
headers: {
apiKey: API_KEY,
...form.getHeaders(),
},
body: form,
}
);
const json = await res.json();
const uuid = json.data.uuid;
console.log("Task UUID:", uuid);2. Poll for result
Query parameter
uuid(string, required) — from the send-task response
export API_KEY="XXXXXXXXXXX"
curl -X GET 'https://api.collov.ai/flair/enterpriseApi/vst/getRecord' \
-H "apiKey: $API_KEY" \
-F 'uuid="YYYYYYYY"'def poll_vst(uuid, timeout=180, interval=3):
start = time.time()
while True:
res = requests.get(f"{BASE}/flair/enterpriseApi/vst/getRecord",
headers=headers, params={"uuid": uuid})
res.raise_for_status()
j = res.json()
data = j.get("data", {})
status = data.get("status")
if status == "SUCCESS":
out = data["aiGenerateRecord"]["generateUrl"]
print("Result URL:", out)
return out, data
if status == "FAILED":
raise RuntimeError(f"Task failed: {data}")
if time.time() - start > timeout:
raise TimeoutError("VST polling timed out")
time.sleep(interval)
result_url, data = poll_vst(uuid)async function pollVst(uuid, { timeoutMs = 180000, intervalMs = 3000 } = {}) {
const start = Date.now();
while (true) {
const r = await fetch(
`https://api.collov.ai/flair/enterpriseApi/vst/getRecord?uuid=${encodeURIComponent(uuid)}`,
{
method: "GET",
headers: {
"apiKey": process.env.API_KEY,
},
}
);
const j = await r.json();
const data = j.data || {};
const status = data.status;
if (status === "SUCCESS") {
return data.aiGenerateRecord.generateUrl;
}
if (status === "FAILED") {
throw new Error(`Task failed: ${JSON.stringify(data)}`);
}
if (Date.now() - start > timeoutMs) {
throw new Error("VST polling timed out");
}
await new Promise(s => setTimeout(s, intervalMs));
}
}What you'll use from the result
data.status→SUCCESS/PENDING/FAILEDdata.aiGenerateRecord.generateUrl→ final rendered image URLdata.prompt,data.roomType,data.style,data.durationTime→ metadata
Room clearing: create an empty room
1. Send task
Form fields
uploadUrl(string, required) — public URL to the original image
export API_KEY="XXXXXXXXXXX"
curl -X POST "https://api.collov.ai/flair/enterpriseApi/vst/generateEmptyRoom" \
-H "apiKey: $API_KEY" \
-H "Content-Type: multipart/form-data" \
-F "uploadUrl=https://example.com/your/original.jpg"The response gives you a numeric id — store this; you'll poll with it.
2. Poll for result
Query parameter
id(integer, required) — from the send-task response
export API_KEY="XXXXXXXXXXX"
curl -X GET 'https://api.collov.ai/flair/enterpriseApi/vst/getEmptyRoomRecord' \
-H "apiKey: $API_KEY" \
-F 'id=101382'def poll_empty_room(task_id, timeout=180, interval=3):
start = time.time()
while True:
res = requests.get(f"{BASE}/flair/enterpriseApi/vst/getEmptyRoomRecord",
headers=headers, params={"id": str(task_id)})
res.raise_for_status()
j = res.json()
data = j.get("data", {})
status = data.get("status")
if status == "SUCCESS":
print("Empty room URL:", data["emptyRoomUrl"])
return data["emptyRoomUrl"], data
if status == "FAILED":
raise RuntimeError(f"Empty room task failed: {data}")
if time.time() - start > timeout:
raise TimeoutError("Empty room polling timed out")
time.sleep(interval)Recommended workflow
Clear the room first (optional)
Send generateEmptyRoom → poll getEmptyRoomRecord → get emptyRoomUrl.
Stage the room
Send generateImgOnCommon with your original uploadUrl, the cleared emptyRoomUrl from step 1 (improves control and consistency), plus roomType and style.
Poll and collect the render
Poll getRecord using uuid. Use aiGenerateRecord.generateUrl as your final render.
Robustness & production tips
- Backoff on 429: exponential backoff (e.g., 1s, 2s, 4s, … up to 30s).
- Timeouts: client-side timeout per poll (e.g., 3–5 minutes) and a total job timeout.
- Validate enums: force lowercase & whitelist room types/styles; reject early if invalid.
- Id/UUID storage: the room design API polls with
uuid; the empty room API polls with a numericid. - Security:
uploadUrl/emptyRoomUrlshould be on a public CDN/S3 with read access. Don't pass private URLs that require signed headers (unless they're presigned). - Watermark & mode: responses may include
watermark,proMode, etc. — log them if you need auditing. - Concurrency: keep at most 2 active tasks per account to avoid throttling; queue client-side if needed.
API reference
Async AI-rendered room design (Send Task)
Initiate a task to take a picture and render a given type of room with the instructed design style. The process will modify the furniture and decorations in the room, but will keep the room structure unchanged.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | The image provided for the process. |
| roomType | string enum | Required | One of the values below, must be lowercase: game roomkitchenliving roomoutdoorbedroomstudioconference roomhome officehome gymdining roomlaundry roombathroomspa roomkids roomopen living and dining room |
| style | string enum | Required | One of the values below, must be lowercase: scandinavianluxuryindustrialcoastaltransitionalfarmhousemid-centurymodern |
| emptyRoomUrl | string | Optional | Provide if you'd like the generation to happen in a cleared room. |
Sample response
{
"success": true,
"data": {
"roomType": "living room",
"style": "modern",
"recordId": 76474,
"enterpriseId": 8,
"id": 5321,
"uuid": "41021e83-52c3-433b-8fc0-9961eefa90be",
"watermark": false,
"proMode": "soft",
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250811/404ea691-6757-4ec1-b8a9-86926c9f777a.webp",
"emptyRoomUrl": "https://d1hmb1rfgjccys.cloudfront.net/3ac80051-7886-49b8-8586-dcecd51eeae5.webp",
"apiRoomType": "living room",
"apiStyle": "modern",
"createBy": 189641,
"updateBy": 189641,
"createTime": "Aug 11, 2025 8:45:39 AM",
"updateTime": "Aug 11, 2025 8:45:39 AM"
},
"message": "",
"statusCode": 0
}Async regenerate AI-rendered room design (Send Task)
Re-render a previously processed room image with the same parameters (e.g., style, seed) while preserving the original room structure.
Each source image initially submitted to the Async AI-Rendered Room Design API receives up to 20 free calls to this regeneration API. After that, further requests fail and you must restart a series of generations with a call to the Async AI-Rendered Room Design API.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uuid | string | Required | The uuid generated from the initial AI-generation API call for the source image. |
Sample response
{
"success": true,
"data": {
"roomType": "living room",
"style": "modern",
"recordId": 76474,
"enterpriseId": 8,
"id": 5321,
"uuid": "41021e83-52c3-433b-8fc0-9961eefa90be",
"watermark": false,
"proMode": "soft",
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250811/404ea691-6757-4ec1-b8a9-86926c9f777a.webp",
"emptyRoomUrl": "https://d1hmb1rfgjccys.cloudfront.net/3ac80051-7886-49b8-8586-dcecd51eeae5.webp",
"apiRoomType": "living room",
"apiStyle": "modern",
"createBy": 189641,
"updateBy": 189641,
"createTime": "Aug 11, 2025 8:45:39 AM",
"updateTime": "Aug 11, 2025 8:45:39 AM"
},
"message": "",
"statusCode": 0
}Design result retrieval (Get Result)
This endpoint allows repeated queries to retrieve results from both generation APIs:
- The Async AI-Rendered Room Design endpoint;
- The Async Regeneration AI-Rendered Room Design endpoint.
The response bodies from the getRecord call are nearly identical for both generation scenarios, with one key difference:
- For the initial Async AI-Rendered Room Design, the
generateRecordListfield contains only a single GenerateRecord. - For each subsequent Async Regeneration call, an additional GenerateRecord is appended to this list, ordered by request time.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
Query parameter
| Field | Type | Required | Description |
|---|---|---|---|
| uuid | string | Required | The UUID returned from the earlier task initiation API call. |
Sample response
{
"success": true,
"data": {
"recordId": 76474,
"roomType": "living room",
"style": "modern",
"uploadUrl": "https://d1hk2acgirb1eq.cloudfront.net/68173538-f557-41bf-bffc-c69f95a717c8-empty-room-interior-for-gallery-exhibition-vector.jpg",
"enterpriseId": 10,
"uuid": "41021e83-52c3-433b-8fc0-9961eefa90be",
"proMode": "soft",
"generateRecordList": [
{
"enterpriseUser": {
"id": 10
},
"status": "SUCCESS",
"roomType": "living room",
"style": "modern",
"startTime": "Aug 15, 2025 8:58:04 AM",
"endTime": "Aug 15, 2025 8:58:15 AM",
"durationTime": 11,
"uploadUrl": "https://d1hk2acgirb1eq.cloudfront.net/68173538-f557-41bf-bffc-c69f95a717c8-empty-room-interior-for-gallery-exhibition-vector.jpg",
"generateUrl": "https://d1hmb1rfgjccys.cloudfront.net/3aed25a3-0ac6-43f3-a169-43d0599855fc.webp",
"images": "[\"https://d1hmb1rfgjccys.cloudfront.net/3aed25a3-0ac6-43f3-a169-43d0599855fc.webp\"]",
"id": 77238
},
{
"enterpriseUser": {
"id": 10
},
"status": "SUCCESS",
"roomType": "bedroom",
"style": "modern",
"startTime": "Aug 15, 2025 8:58:57 AM",
"endTime": "Aug 15, 2025 8:59:09 AM",
"durationTime": 11,
"uploadUrl": "https://d1hk2acgirb1eq.cloudfront.net/68173538-f557-41bf-bffc-c69f95a717c8-empty-room-interior-for-gallery-exhibition-vector.jpg",
"generateUrl": "https://d1hmb1rfgjccys.cloudfront.net/18f6abc5-8cf9-4d4a-8988-9c22d744d3a4.webp",
"referId": "2287",
"id": 77239
}
],
"id": 2287,
"createBy": 10,
"updateBy": 10,
"createTime": "Aug 15, 2025 8:58:04 AM",
"updateTime": "Aug 15, 2025 8:58:04 AM"
},
"message": "",
"statusCode": 0
}Async AI-powered room clearing (Send Task)
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | The image provided for the process. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 10,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20240806/099bbd0e-4c05-4dbe-a009-eb99b944ff27.webp",
"requestId": "0df88b79-143f-43ed-880d-6cdb6bf2c864",
"status": "PENDING",
"id": 101382,
"createBy": 8,
"updateBy": 8,
"createTime": "Apr 27, 2025 8:14:57 AM",
"updateTime": "Apr 27, 2025 8:14:58 AM"
},
"message": "",
"statusCode": 0
}Room clearing result retrieval (Get Result)
Retrieve the result of the room clearing task by repeatedly querying this API.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
Query parameter
| Field | Type | Required | Description |
|---|---|---|---|
| id | integer | Required | The id returned from the earlier task initiation API call. |
Sample response
{
"success": true,
"data": {
"id": 101382,
"enterpriseId": 8,
"requestId": "0df88b79-143f-43ed-880d-6cdb6bf2c864",
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20240806/099bbd0e-4c05-4dbe-a009-eb99b944ff27.webp",
"emptyRoomUrl": "https://d1hmb1rfgjccys.cloudfront.net/95746b84-4977-4ddd-905c-0f0a36df9766.webp",
"status": "SUCCESS",
"createBy": 8,
"updateBy": 0,
"createTime": "Apr 27, 2025 8:14:58 AM",
"updateTime": "Apr 27, 2025 8:15:08 AM"
},
"message": "",
"statusCode": 0
}AI-powered photo enhancement
Enhance the quality and resolution of an existing image. The enhanced image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| imgUrl | string | Required | Public URL of the image to enhance. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260722/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"mode": "ENHANCE",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/HIGH_RES/20260722/dcc5f720-3208-4006-91c4-fd26486461b7.png",
"startTime": "Jul 22, 2026 1:52:59 AM",
"id": 182218,
"createBy": 8,
"updateBy": 8,
"createTime": "Jul 22, 2026 1:53:07 AM",
"updateTime": "Jul 22, 2026 1:53:07 AM"
},
"message": "",
"statusCode": 200
}Async AI-powered photo chat editing (Send Task)
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | The image provided for the process. |
| prompt | string | Required | Photo editing instructions. |
Sample response
{
"success": true,
"data": {
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20251220/6a2b2ef8-27fc-4f16-b73b-022ecf49ac22.jpg",
"prompt": "remove all trees",
"enterpriseId": 10,
"uuid": "f3e43ff9-2064-4717-a7c2-e60999920407",
"startTime": "Feb 6, 2026 9:11:28 AM",
"status": "PENDING"
},
"message": "",
"statusCode": 200
}Photo chat edit result retrieval (Get Result)
Retrieve the result of the photo chat edit task by repeatedly querying this API.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
Query parameter
| Field | Type | Required | Description |
|---|---|---|---|
| uuid | string | Required | The uuid returned from the earlier task initiation API call. |
Sample response
{
"success": true,
"data": {
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20251220/6a2b2ef8-27fc-4f16-b73b-022ecf49ac22.jpg",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260206/chatEditImages/984df5ba-ef03-4114-8e65-e9ab98784903.jpeg",
"prompt": "remove all trees",
"enterpriseId": 10,
"uuid": "f3e43ff9-2064-4717-a7c2-e60999920407",
"startTime": "Feb 6, 2026 9:11:29 AM",
"endTime": "Feb 6, 2026 9:11:56 AM",
"status": "SUCCESS"
},
"message": "",
"statusCode": 200
}Async AI virtual tool (Send Task)
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | application/json | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| images | array | Required | Array of image objects, e.g. {"imageUrl": "https://…/image.png", "width": 768, "height": 769}. No more than 20 photos. |
| resolution | string | Required | One of: 1080p720p |
| orientation | string | Required | One of the values below, with aspect ratios 4:3 / 16:9 / 9:16 / 1:1 respectively: StandardLandscapePortraitSquare |
| font | string | Optional | One of: OswaldAmaticGreatVibesOpenSansMontserratPlayfair |
| music | string | Optional | One of: EmbraceFuture_DesignWaterfallHappy_HolidaySummer_Ukulele |
| intro | string | Optional | Text overlay on video. Must not exceed 500 characters. |
| profileUrl | string | Optional | Personal profile picture. |
| logoUrl | string | Optional | Company logo image. |
| agentName | string | Optional | Agent name. |
| phoneNumber | string | Optional | Mobile phone number. |
| string | Optional | Email. |
Sample response
{
"code": 202,
"msg": "ACCEPTED",
"data": {
"userId": 29815,
"conversationId": "",
"taskId": "16881c11-d3fb-48ec-b3a8-4655f73b97a6",
"step": {
"stepId": "9e71f4c5-95ec-4c1a-92dd-ed9b17263c36",
"stepType": "IMAGE_RESIZE",
"stepStatus": "CREATED"
},
"videoId": "8ba7eb87-fc02-4003-b54f-43cac9e57a7f",
"previewUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250901/5d194226-2897-4da3-a910-71621fb2dc37.jpg",
"videoMeta": {
"taskPayload": {
"resolution": "1080p",
"orientation": "Landscape",
"intro": "kitchen text",
"font": "Amatic",
"music": "Future_Design",
"profileUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250901/ffa227e7-9ff0-4df4-9160-ab67e948eee4.png",
"logoUrl": "",
"agentName": "kitchen agent name",
"phoneNumber": "15256537768",
"email": "chenyi340123@gmail.com",
"images": [
{
"imageUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250901/5d194226-2897-4da3-a910-71621fb2dc37.jpg",
"height": 512,
"width": 768
},
{
"imageUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250901/396ca40b-0870-40c6-879e-589ebe00b778.jpg",
"height": 1024,
"width": 768
},
{
"imageUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250901/e0dec89b-f095-4df6-b017-3c663eac0896.jpeg",
"height": 513,
"width": 768
},
{
"imageUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250901/1fb60407-4e40-4461-9d70-b1ae5fcadbf1.jpg",
"height": 1024,
"width": 768
},
{
"imageUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250901/d535b795-54ff-4d3d-89bb-4bf810326ae1.png",
"height": 769,
"width": 768
},
{
"imageUrl": "https://d37vt2dds2nfmk.cloudfront.net/20250901/19a7491c-650a-487d-b5e4-960569cdfad0.png",
"height": 576,
"width": 1024
}
]
},
"mimeType": "video/mp4"
},
"createTime": "2025-09-02 12:03:07"
}
}AI virtual tool result retrieval (Get Result)
Retrieve the result of the AI virtual tool task by repeatedly querying this API.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
Query parameter
| Field | Type | Required | Description |
|---|---|---|---|
| taskId | string | Required | The taskId returned from the earlier task initiation API call. |
Sample response
{
"code": 202,
"msg": "ACCEPTED",
"data": {
"taskId": "16881c11-d3fb-48ec-b3a8-4655f73b97a6",
"taskStatus": "COMPLETED",
"videoUrl": "https://collov-vst.s3.us-west-1.amazonaws.com/20250902/29815_ef6fb5bcdac538651b1de3bcaa98217b.mp4",
"agentVideoUrl": "https://collov-vst.s3.us-west-1.amazonaws.com/20250902/29815_a1e8ccb2108daff6bb7fd2879d76d8f5.mp4",
"createTime": {
"date": {
"year": 2025,
"month": 9,
"day": 2
},
"time": {
"hour": 12,
"minute": 3,
"second": 7,
"nano": 0
}
},
"updateTime": {
"date": {
"year": 2025,
"month": 9,
"day": 2
},
"time": {
"hour": 12,
"minute": 6,
"second": 7,
"nano": 0
}
}
}
}AI-powered furniture addition
Add furniture or decor to an existing room photo using a natural-language prompt. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the room photo to edit. |
| prompt | string | Required | Natural-language description of the furniture to add, e.g. "a floor lamp". |
| style | string | Required | The design style of the furniture, e.g. "modern". |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260815/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"prompt": "a floor lamp",
"style": "modern",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260815/chatEditImages/9a1c2b3d-4e5f-6789-abcd-ef0123456789.jpeg",
"startTime": "Aug 15, 2026 2:12:07 PM",
"id": 184567,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 15, 2026 2:12:12 PM",
"updateTime": "Aug 15, 2026 2:12:12 PM"
},
"message": "",
"statusCode": 200
}AI-powered material overlay
Overlay a new material finish onto a surface in the photo — floors, walls, cabinet doors, countertops, and backsplashes. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the room photo to edit. |
| surfaceType | string enum | Required | The surface to overlay, one of: floorwallcabinet doorscountertopbacksplash |
| prompt | string | Required | The material to overlay, one of the presets matching the chosen surfaceType (see the table below). |
surfaceType & prompt presets
| surfaceType | prompt presets |
|---|---|
| floor | Warm Oak HardwoodPolished White MarbleSoft Beige Carpet |
| wall | Soft Dove Gray PaintWhite Brick WallTextured Linen Wallpaper |
| cabinet doors | Matte Black Flat-PanelClassic White ShakerNatural Walnut Veneer |
| countertop | White Quartz with Gray VeinsBlack Granite PolishedButcher Block Wood |
| backsplash | White Subway TileMoroccan Blue MosaicMarble Backsplash |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260820/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"surfaceType": "floor",
"prompt": "Warm Oak Hardwood",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260820/chatEditImages/3c4d5e6f-7a8b-9c0d-ef12-3456789abcde.jpeg",
"startTime": "Aug 20, 2026 10:45:11 AM",
"id": 185432,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 20, 2026 10:45:16 AM",
"updateTime": "Aug 20, 2026 10:45:16 AM"
},
"message": "",
"statusCode": 200
}AI-powered season change
Transform an outdoor photo to a different season. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the photo to edit. |
| targetSeason | string enum | Required | The season to transform the photo into, one of: springsummerfallwinter |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260822/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"targetSeason": "spring",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260822/chatEditImages/7f8a9b0c-1d2e-3f4a-5b6c-7d8e9f0a1b2c.jpeg",
"startTime": "Aug 22, 2026 3:18:42 PM",
"id": 186001,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 22, 2026 3:18:47 PM",
"updateTime": "Aug 22, 2026 3:18:47 PM"
},
"message": "",
"statusCode": 200
}AI-powered virtual twilight
Transform a daytime exterior photo into a dramatic virtual twilight scene. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the photo to edit. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260825/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260825/chatEditImages/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d.jpeg",
"startTime": "Aug 25, 2026 9:05:11 AM",
"id": 186101,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 25, 2026 9:05:16 AM",
"updateTime": "Aug 25, 2026 9:05:16 AM"
},
"message": "",
"statusCode": 200
}AI-powered pool water enhancement
Enhance the water in a pool photo to look crystal clear and inviting. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the photo to edit. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260825/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260825/chatEditImages/2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e.jpeg",
"startTime": "Aug 25, 2026 9:12:33 AM",
"id": 186102,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 25, 2026 9:12:38 AM",
"updateTime": "Aug 25, 2026 9:12:38 AM"
},
"message": "",
"statusCode": 200
}AI-powered lawn replacement
Replace the lawn in an exterior photo with fresh, healthy grass. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the photo to edit. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260826/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260826/chatEditImages/3c4d5e6f-7a8b-9c0d-1e2f-3a4b5c6d7e8f.jpeg",
"startTime": "Aug 26, 2026 10:04:22 AM",
"id": 186103,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 26, 2026 10:04:27 AM",
"updateTime": "Aug 26, 2026 10:04:27 AM"
},
"message": "",
"statusCode": 200
}AI-powered night to day
Convert a night-time exterior photo into a bright daytime scene. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the photo to edit. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260826/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260826/chatEditImages/4d5e6f7a-8b9c-0d1e-2f3a-4b5c6d7e8f9a.jpeg",
"startTime": "Aug 26, 2026 10:21:45 AM",
"id": 186104,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 26, 2026 10:21:51 AM",
"updateTime": "Aug 26, 2026 10:21:51 AM"
},
"message": "",
"statusCode": 200
}AI-powered rain to shine
Transform a rainy photo into a sunny, clear-sky scene. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the photo to edit. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260826/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260826/chatEditImages/5e6f7a8b-9c0d-1e2f-3a4b-5c6d7e8f9a0b.jpeg",
"startTime": "Aug 26, 2026 11:02:19 AM",
"id": 186105,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 26, 2026 11:02:24 AM",
"updateTime": "Aug 26, 2026 11:02:24 AM"
},
"message": "",
"statusCode": 200
}AI-powered natural twilight
Apply a soft, natural twilight effect to an exterior photo. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the photo to edit. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260827/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260827/chatEditImages/6f7a8b9c-0d1e-2f3a-4b5c-6d7e8f9a0b1c.jpeg",
"startTime": "Aug 27, 2026 8:48:56 AM",
"id": 186106,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 27, 2026 8:49:01 AM",
"updateTime": "Aug 27, 2026 8:49:01 AM"
},
"message": "",
"statusCode": 200
}AI-powered add water to empty pool
Add crystal-clear water to an empty pool photo. The generated image URL is returned in data.generateUrl.
Request headers
| Field | Value | Description |
|---|---|---|
| apiKey | YOUR_API_KEY | The API key you retrieved from the enterprise API center. |
| Content-Type | multipart/form-data | Data exchange format. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| uploadUrl | string | Required | Public URL of the photo to edit. |
Sample response
{
"success": true,
"data": {
"enterpriseId": 8,
"uploadUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260827/chatEditImages/a746ae09-6fce-4873-8dae-4613c325a362.jpeg",
"generateUrl": "https://d37vt2dds2nfmk.cloudfront.net/20260827/chatEditImages/7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d.jpeg",
"startTime": "Aug 27, 2026 9:30:08 AM",
"id": 186107,
"createBy": 8,
"updateBy": 8,
"createTime": "Aug 27, 2026 9:30:13 AM",
"updateTime": "Aug 27, 2026 9:30:13 AM"
},
"message": "",
"statusCode": 200
}Resources
Limits
Rate limit
All enterprise APIs are rate limited to 10 requests per second. Exceeding this rate limit will result in an HTTP error 429.
Concurrency limit
All enterprise APIs have a concurrency limit of 2 active tasks per account.