Collov Enterprise API

    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.

    An empty room after AI declutter — bare walls, floors, and windows

    Room Declutter

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

    A photorealistic AI-staged bedroom with bed, nightstands, and decor

    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) or id (for empty room tasks) until the status is SUCCESS.

    This workflow ensures you can process high-quality AI-generated results without blocking client operations, while respecting rate limits and concurrency limits.

    Rate limit · 10 requests/secConcurrency · 2 active tasksAsync by design

    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_KEY in headers.
    • Content-Type: multipart/form-data for both send-task and get-result endpoints (per spec).
    • Async task process: send → get a task token (uuid or id) → poll until status: SUCCESS or FAILED.
    • 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

    POSThttps://api.collov.ai/flair/enterpriseApi/vst/generateImgOnCommon

    Form fields

    • uploadUrl (string, required) — public URL to the original image
    • roomType (enum, required) — one of the supported room types
    • style (enum, required) — one of the supported styles
    • emptyRoomUrl (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

    GEThttps://api.collov.ai/flair/enterpriseApi/vst/getRecord

    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 / FAILED
    • data.aiGenerateRecord.generateUrl → final rendered image URL
    • data.prompt, data.roomType, data.style, data.durationTime → metadata

    Room clearing: create an empty room

    1. Send task

    POSThttps://api.collov.ai/flair/enterpriseApi/vst/generateEmptyRoom

    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

    GEThttps://api.collov.ai/flair/enterpriseApi/vst/getEmptyRoomRecord

    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)

    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 numeric id.
    • Security: uploadUrl / emptyRoomUrl should 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.

    POSThttps://api.collov.ai/flair/enterpriseApi/vst/generateImgOnCommon

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredThe image provided for the process.
    roomTypestring enumRequiredOne of the values below, must be lowercase:
    game roomkitchenliving roomoutdoorbedroomstudioconference roomhome officehome gymdining roomlaundry roombathroomspa roomkids roomopen living and dining room
    stylestring enumRequiredOne of the values below, must be lowercase:
    scandinavianluxuryindustrialcoastaltransitionalfarmhousemid-centurymodern
    emptyRoomUrlstringOptionalProvide if you'd like the generation to happen in a cleared room.

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/vst/reGenerateImgOnCommon

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uuidstringRequiredThe uuid generated from the initial AI-generation API call for the source image.

    Sample response

    JSON
    {
        "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 generateRecordList field contains only a single GenerateRecord.
    • For each subsequent Async Regeneration call, an additional GenerateRecord is appended to this list, ordered by request time.
    GEThttps://api.collov.ai/flair/enterpriseApi/vst/getRecord

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.

    Query parameter

    FieldTypeRequiredDescription
    uuidstringRequiredThe UUID returned from the earlier task initiation API call.

    Sample response

    Async AI-powered room clearing (Send Task)

    POSThttps://api.collov.ai/flair/enterpriseApi/vst/generateEmptyRoom

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredThe image provided for the process.

    Sample response

    JSON
    {
        "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.

    GEThttps://api.collov.ai/flair/enterpriseApi/vst/getEmptyRoomRecord

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.

    Query parameter

    FieldTypeRequiredDescription
    idintegerRequiredThe id returned from the earlier task initiation API call.

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/vst/doEnhance

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    imgUrlstringRequiredPublic URL of the image to enhance.

    Sample response

    JSON
    {
        "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)

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/generate

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredThe image provided for the process.
    promptstringRequiredPhoto editing instructions.

    Sample response

    JSON
    {
      "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.

    GEThttps://api.collov.ai/flair/enterpriseApi/edit/getRecord

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.

    Query parameter

    FieldTypeRequiredDescription
    uuidstringRequiredThe uuid returned from the earlier task initiation API call.

    Sample response

    JSON
    {
      "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)

    POSThttps://api.collov.ai/flair/enterpriseApi/vgs/task

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typeapplication/jsonData exchange format.

    Request body

    FieldTypeRequiredDescription
    imagesarrayRequiredArray of image objects, e.g. {"imageUrl": "https://…/image.png", "width": 768, "height": 769}. No more than 20 photos.
    resolutionstringRequiredOne of:
    1080p720p
    orientationstringRequiredOne of the values below, with aspect ratios 4:3 / 16:9 / 9:16 / 1:1 respectively:
    StandardLandscapePortraitSquare
    fontstringOptionalOne of:
    OswaldAmaticGreatVibesOpenSansMontserratPlayfair
    musicstringOptionalOne of:
    EmbraceFuture_DesignWaterfallHappy_HolidaySummer_Ukulele
    introstringOptionalText overlay on video. Must not exceed 500 characters.
    profileUrlstringOptionalPersonal profile picture.
    logoUrlstringOptionalCompany logo image.
    agentNamestringOptionalAgent name.
    phoneNumberstringOptionalMobile phone number.
    emailstringOptionalEmail.

    Sample response

    AI virtual tool result retrieval (Get Result)

    Retrieve the result of the AI virtual tool task by repeatedly querying this API.

    GEThttps://api.collov.ai/flair/enterpriseApi/vgs/loadVideoInfo

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.

    Query parameter

    FieldTypeRequiredDescription
    taskIdstringRequiredThe taskId returned from the earlier task initiation API call.

    Sample response

    Multi-angle staging (Send Task)

    Stage 1–4 photos of the same room in one asynchronous task, keeping furniture and styling consistent across views. Submit the photos in the order you want to receive the results.

    POSThttps://api.collov.ai/flair/enterpriseApi/multiAngle/task

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYYour enterprise API key. The API account must have a client account with the same email, as required by the virtual tool API.
    Content-Typeapplication/jsonSend a JSON request body.

    Request body

    FieldTypeRequiredDescription
    imagesarrayRequired1–4 views of the same room.
    images[].imageUrlstringRequiredPublicly accessible HTTP(S) image URL, at most 2,000 characters. Do not submit internal-network URLs.
    roomTypestringRequiredRoom type, e.g. Living Room or Bedroom. At most 100 characters.
    stylestringRequiredDesign style, e.g. Modern or Scandinavian. At most 100 characters.
    promptstringOptionalAdditional design requirements, at most 2,000 characters.
    referenceImageUrlstringOptionalPublic HTTP(S) image URL used as a style reference. Same URL constraints as imageUrl.

    Each input view uses 24 credits from the linked client account under the existing Multi-angle credit rules. Failed views are refunded by the generation service. A new POST creates a new task and charge; poll the existing task instead of resubmitting it. Watermarks follow the linked account’s subscription rules.

    Example request

    BASH
    curl -X POST "https://api.collov.ai/flair/enterpriseApi/multiAngle/task" \
      -H "apiKey: $API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "images": [
        {
          "imageUrl": "https://example.com/living-room-view-1.jpg"
        },
        {
          "imageUrl": "https://example.com/living-room-view-2.jpg"
        }
      ],
      "roomType": "Living Room",
      "style": "Modern",
      "prompt": "Use a cream sofa and light oak furniture."
    }'

    Sample response · HTTP 202

    JSON
    {
      "code": 202,
      "msg": "ACCEPTED",
      "data": {
        "taskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
        "taskType": "GENERATE",
        "rootTaskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
        "parentTaskId": null,
        "taskStatus": "CREATED",
        "images": [
          {
            "index": 0,
            "imageUrl": "https://example.com/living-room-view-1.jpg",
            "generateUrl": null,
            "status": "CREATED"
          },
          {
            "index": 1,
            "imageUrl": "https://example.com/living-room-view-2.jpg",
            "generateUrl": null,
            "status": "CREATED"
          }
        ],
        "errorMsg": null,
        "createTime": 1792713600000,
        "updateTime": 1792713600000
      }
    }

    Multi-angle edit

    POSThttps://api.collov.ai/flair/enterpriseApi/multiAngle/edit

    Edit a completed enterprise Multi-angle task. Send the same apiKey header and Content-Type: application/json. Each request creates a new task and preserves the source results.

    FieldTypeRequiredDescription
    taskIdstringRequiredThe completed task whose results you want to edit, owned by your API account.
    promptstringRequiredRequested changes, at most 2,000 characters.
    editTypestringOptionalSINGLE (default) edits one result; ALL edits the full set with consistent changes across views.
    imageIndexintegerFor SINGLEZero-based index in the source task’s images array. Omit for ALL.

    SINGLE requires a successful result at imageIndex and returns one image at index 0. ALL requires a full-view task with every view completed; a SINGLE_EDIT task cannot be used for ALL. Batch edits use the source task’s designs and the original room photos. Separate single-image edits are not automatically merged into a batch.

    Editing costs 24 credits per image; failed views are refunded. Wait for any ongoing task in the same generation to finish before submitting another edit or regenerate request, otherwise the API returns HTTP 409.

    Single-image edit

    JSON
    {
      "taskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
      "editType": "SINGLE",
      "imageIndex": 0,
      "prompt": "Change the sofa to dark blue and keep everything else unchanged."
    }

    Edit all views

    JSON
    {
      "taskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
      "editType": "ALL",
      "prompt": "Change the sofa to dark blue in every view."
    }

    Sample response · HTTP 202

    JSON
    {
      "code": 202,
      "msg": "ACCEPTED",
      "data": {
        "taskId": "f69b8804-c231-40b2-805a-b064641fe318",
        "taskType": "SINGLE_EDIT",
        "rootTaskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
        "parentTaskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
        "sourceImageIndex": 0,
        "taskStatus": "CREATED",
        "images": [
          {
            "index": 0,
            "imageUrl": "https://example.com/staged-view-1.webp",
            "generateUrl": null,
            "status": "CREATED"
          }
        ],
        "errorMsg": null,
        "createTime": 1792713800000,
        "updateTime": 1792713800000
      }
    }

    Poll /loadMultiAngleInfo with the new taskId to get edited images.

    Multi-angle regenerate

    POSThttps://api.collov.ai/flair/enterpriseApi/multiAngle/regenerate

    Generate another full set from the original uploaded photos. Regenerate is free, following the web Multi-angle rules. It creates a new task, retains previous results, and uses the root task’s original settings unless overridden below. Passing an edit task still regenerates the original full set, rather than editing that result.

    Send the same apiKey header and Content-Type: application/json.

    FieldTypeRequiredDescription
    taskIdstringRequiredAn existing task owned by your API account. No task in the same generation may still be running (HTTP 409).
    roomTypestringOptionalOverride the original room type, at most 100 characters.
    stylestringOptionalOverride the original style, at most 100 characters.
    promptstringOptionalOverride the original design requirements, at most 2,000 characters. An empty string clears them.
    JSON
    {
      "taskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
      "style": "Scandinavian",
      "prompt": "Use warm wood and neutral upholstery."
    }

    Returns HTTP 202 with the same task response envelope, a new taskId, taskType REGENERATE, rootTaskId and parentTaskId. Poll the new taskId through /loadMultiAngleInfo.

    Multi-angle staging result (Get Result)

    GEThttps://api.collov.ai/flair/enterpriseApi/multiAngle/loadMultiAngleInfo

    Send the same apiKey header and the returned taskId as a query parameter. Tasks and image results belong to the enterprise API account that submitted them. Web Multi-angle project identifiers cannot be used here.

    BASH
    curl --get "https://api.collov.ai/flair/enterpriseApi/multiAngle/loadMultiAngleInfo" \
      -H "apiKey: $API_KEY" \
      --data-urlencode "taskId=bbf7ec66-0a4b-48bf-b2bf-e89444e78934"

    Poll every 3–5 seconds with a timeout appropriate for image generation. Stop polling when data.taskStatus is COMPLETED or FAILED. Successful queries return HTTP 202, including terminal results, matching the virtual tool API.

    FieldDescription
    taskIdThe task identifier returned by POST.
    taskTypeGENERATE, REGENERATE, SINGLE_EDIT or BATCH_EDIT.
    rootTaskId / parentTaskIdThe original generation task and the task passed to edit/regenerate. parentTaskId is null for the original task.
    sourceImageIndexFor SINGLE_EDIT, the selected index in the parent task. Its edited output is always images[0].
    taskStatusCREATED: queued; PROCESSING: generating; COMPLETED: results available; FAILED: generation failed.
    imagesOne entry per input view in the original order. index is zero-based. imageUrl is the input URL; generateUrl is the output URL.
    images[].statusCREATED, PROCESSING, COMPLETED or FAILED. A COMPLETED task may include failed views; inspect each entry. Failed or unfinished views have no generateUrl.
    errorMsgFailure message for a failed task.
    createTime / updateTimeRecord timestamps as Unix epoch milliseconds.

    Sample response · HTTP 202

    JSON
    {
      "code": 202,
      "msg": "ACCEPTED",
      "data": {
        "taskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
        "taskType": "GENERATE",
        "rootTaskId": "bbf7ec66-0a4b-48bf-b2bf-e89444e78934",
        "parentTaskId": null,
        "taskStatus": "COMPLETED",
        "images": [
          {
            "index": 0,
            "imageUrl": "https://example.com/living-room-view-1.jpg",
            "generateUrl": "https://example.com/staged-view-1.webp",
            "status": "COMPLETED"
          },
          {
            "index": 1,
            "imageUrl": "https://example.com/living-room-view-2.jpg",
            "generateUrl": "https://example.com/staged-view-2.webp",
            "status": "COMPLETED"
          }
        ],
        "errorMsg": null,
        "createTime": 1792713600000,
        "updateTime": 1792713720000
      }
    }

    Errors: HTTP 400 for invalid input or insufficient credits, HTTP 401 for an invalid API key or missing linked account, HTTP 404 for an unknown task or a task owned by another account, HTTP 409 when another task in the same generation is still in progress, and HTTP 500 for an unexpected server error. Controller errors use the same code / msg envelope. Authentication failures may have an empty response body.

    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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/addFurniture

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the room photo to edit.
    promptstringRequiredNatural-language description of the furniture to add, e.g. "a floor lamp".
    stylestringRequiredThe design style of the furniture, e.g. "modern".

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/materialOverlay

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the room photo to edit.
    surfaceTypestring enumRequiredThe surface to overlay, one of:
    floorwallcabinet doorscountertopbacksplash
    promptstringRequiredThe material to overlay, one of the presets matching the chosen surfaceType (see the table below).

    surfaceType & prompt presets

    surfaceTypeprompt 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

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/changingSeason

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the photo to edit.
    targetSeasonstring enumRequiredThe season to transform the photo into, one of:
    springsummerfallwinter

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/virtualTwilight

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the photo to edit.

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/poolWaterEnhancement

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the photo to edit.

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/lawnReplacement

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the photo to edit.

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/nightToDay

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the photo to edit.

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/rainToShine

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the photo to edit.

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/naturalTwilight

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the photo to edit.

    Sample response

    JSON
    {
        "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.

    POSThttps://api.collov.ai/flair/enterpriseApi/edit/addWaterToAnEmptyPool

    Request headers

    FieldValueDescription
    apiKeyYOUR_API_KEYThe API key you retrieved from the enterprise API center.
    Content-Typemultipart/form-dataData exchange format.

    Request body

    FieldTypeRequiredDescription
    uploadUrlstringRequiredPublic URL of the photo to edit.

    Sample response

    JSON
    {
        "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.