Furnish empty rooms, empty furnished rooms, renovate spaces, and edit interiors with prompts or masks — all the room-content operations in one place.
The virtual staging endpoints cover everything that changes the contents of a room: adding furniture, removing it, renovating the space, surgical edits via prompt, and mask-based object removal. For photo cleanup (enhance, sky, blur), see Image enhancement.
Furnish an empty room
POST/api/furnish
Add realistic furniture to an empty room. Pedra preserves the room's architecture (walls, windows, doors, floors) and only adds furniture and decoration.
URL of the empty room photo, or a base64 data URI (data:image/png;base64,...).
roomTypestringrequired
Type of space to furnish. The eight values below are the pre-defined space types. You can also pass any other space as a custom string (e.g. "Kid's room", "Garden", "Home gym").
Values:Living roomDining + Living roomBedroomDining roomTerraceEntranceOfficeBathroom
stylestringrequired
Furniture style. Pass one of the named styles below, or a public URL to a reference image (e.g. a Pinterest photo or product shot) — Pedra will match the look from the reference.
Deprecated and ignored since September 2026. Furnishing now has a single level: it adds furniture and decor while keeping walls, doors, windows and the camera angle exactly as they are, at 1 credit per image (2 when style is a reference-image URL). Requests that still send this parameter keep working.
preserveAspectRatioboolean
By default, the output comes back at whatever size the AI model produces, which may not match the aspect ratio or resolution of your photo. Set to true to get the result at the exact width and height of the input image: it is center-cropped to the original aspect ratio (never stretched) and resized to the original resolution.
Default:false
propertyIdstring
Optional id of the property (from list_properties or create_property) this photo belongs to. When set, the result is saved into that property's gallery — visible and editable from the app — instead of only returned as a URL. The response then also includes <code>source</code> (<code>imageId</code> and <code>name</code>) of the original photo, when it is already in that property or you also send <code>name</code>.
namestring
Optional name for the original photo (e.g. its file name), up to 200 characters. Requires <code>propertyId</code>. If the photo isn't in that property yet, it's saved there under this name in the same call, so you don't need <code>add_images_to_property</code> first, and it comes back as <code>source.name</code>. A photo already in the property keeps its name. Never shown on the image.
Remove furniture and objects from a room, leaving the architecture intact. Useful when listing photos are taken with the previous owner's belongings still in place.
URL of the furnished room photo, or a base64 data URI.
preserveAspectRatioboolean
By default, the output comes back at whatever size the AI model produces, which may not match the aspect ratio or resolution of your photo. Set to true to get the result at the exact width and height of the input image: it is center-cropped to the original aspect ratio (never stretched) and resized to the original resolution.
Default:false
propertyIdstring
Optional id of the property (from list_properties or create_property) this photo belongs to. When set, the result is saved into that property's gallery — visible and editable from the app — instead of only returned as a URL. The response then also includes <code>source</code> (<code>imageId</code> and <code>name</code>) of the original photo, when it is already in that property or you also send <code>name</code>.
namestring
Optional name for the original photo (e.g. its file name), up to 200 characters. Requires <code>propertyId</code>. If the photo isn't in that property yet, it's saved there under this name in the same call, so you don't need <code>add_images_to_property</code> first, and it comes back as <code>source.name</code>. A photo already in the property keeps its name. Never shown on the image.
Show what a room could look like after renovation: new finishes, updated kitchens, refreshed bathrooms. Optionally keep windows in place and re-furnish in the same call.
Renovation style. Pass one of the named styles below, or a public URL to a reference image — Pedra matches finishes, palette, and overall look from the reference.
Keep windows in their original position. Recommended for accurate listings.
Default:false
furnishboolean
Add furniture to the renovated room in the same call. When true, roomType is required.
Default:false
roomTypestring
Used when furnish is true. Defaults to "Auto" (Pedra detects the space from the image). Accepts the same pre-defined space types as the furnish endpoint, plus any custom space you write as a string (e.g. "Kid's room", "Garden", "Home gym").
Values:Living roomDining + Living roomBedroomDining roomTerraceEntranceOfficeBathroomAuto
Default:Auto
creativitystring
Deprecated and ignored since September 2026. Renovation now has a single level: it renews finishes, materials and furniture while keeping walls, doors, windows and the camera angle exactly as they are, at 1 credit per image. Requests that still send this parameter keep working.
preserveAspectRatioboolean
By default, the output comes back at whatever size the AI model produces, which may not match the aspect ratio or resolution of your photo. Set to true to get the result at the exact width and height of the input image: it is center-cropped to the original aspect ratio (never stretched) and resized to the original resolution.
Default:false
propertyIdstring
Optional id of the property (from list_properties or create_property) this photo belongs to. When set, the result is saved into that property's gallery — visible and editable from the app — instead of only returned as a URL. The response then also includes <code>source</code> (<code>imageId</code> and <code>name</code>) of the original photo, when it is already in that property or you also send <code>name</code>.
namestring
Optional name for the original photo (e.g. its file name), up to 200 characters. Requires <code>propertyId</code>. If the photo isn't in that property yet, it's saved there under this name in the same call, so you don't need <code>add_images_to_property</code> first, and it comes back as <code>source.name</code>. A photo already in the property keeps its name. Never shown on the image.
Make targeted edits described in plain English: "Add a modern chandelier", "Repaint the walls white", "Remove the rug". Best for one-off fixes that don't map to the other endpoints.
Parameters
apiKeystringrequired
Your API key.
imageUrlstringrequired
URL of the photo to edit, or a base64 data URI.
promptstringrequired
Plain-English editing instruction. Be specific — "add a beige sofa against the back wall" works better than "add furniture".
preserveAspectRatioboolean
By default, the output comes back at whatever size the AI model produces, which may not match the aspect ratio or resolution of your photo. Set to true to get the result at the exact width and height of the input image: it is center-cropped to the original aspect ratio (never stretched) and resized to the original resolution.
Default:false
propertyIdstring
Optional id of the property (from list_properties or create_property) this photo belongs to. When set, the result is saved into that property's gallery — visible and editable from the app — instead of only returned as a URL. The response then also includes <code>source</code> (<code>imageId</code> and <code>name</code>) of the original photo, when it is already in that property or you also send <code>name</code>.
namestring
Optional name for the original photo (e.g. its file name), up to 200 characters. Requires <code>propertyId</code>. If the photo isn't in that property yet, it's saved there under this name in the same call, so you don't need <code>add_images_to_property</code> first, and it comes back as <code>source.name</code>. A photo already in the property keeps its name. Never shown on the image.
Example request
curl -X POST https://app.pedra.ai/api/edit_via_prompt \
-H "Content-Type: application/json" \
-d '{
"apiKey": "YOUR_API_KEY",
"imageUrl": "https://example.com/living-room.jpg",
"prompt": "Add a modern chandelier to the ceiling"
}'
Response time: ~15 seconds per image. Cost: 2 credits per call. output is a single object.
Remove object
POST/api/remove_object
Removes specific objects from an image using a mask. The mask is a separate image where white pixels mark what to remove and black pixels mark what to keep. Use this when you need surgical control vs. edit_via_prompt.
URL of the mask image. White areas are removed; black areas are preserved.
preserveAspectRatioboolean
By default, the output comes back at whatever size the AI model produces, which may not match the aspect ratio or resolution of your photo. Set to true to get the result at the exact width and height of the input image: it is center-cropped to the original aspect ratio (never stretched) and resized to the original resolution.
Default:false
propertyIdstring
Optional id of the property (from list_properties or create_property) this photo belongs to. When set, the result is saved into that property's gallery — visible and editable from the app — instead of only returned as a URL. The response then also includes <code>source</code> (<code>imageId</code> and <code>name</code>) of the original photo, when it is already in that property or you also send <code>name</code>.
namestring
Optional name for the original photo (e.g. its file name), up to 200 characters. Requires <code>propertyId</code>. If the photo isn't in that property yet, it's saved there under this name in the same call, so you don't need <code>add_images_to_property</code> first, and it comes back as <code>source.name</code>. A photo already in the property keeps its name. Never shown on the image.