Automate Your Real Estate
Photo Editing Workflow
Link your proprietary CRM, database, or photography platform directly into Stager AI. Our API handles heavy lifting like multi-exposure HDR blending, lens fixes, perspective straightening, and smart AI staging enhancements.
Pricing & Credit System
Active subscription required. To use the Stager AI API, you must maintain an active subscription on your account.
You can purchase any subscription plan that fits your needs. We automatically adjust your API credit quota to match the standard rate of 0.25¢ per photo across all features. This ensures consistent pricing whether you're using the web app or API.
Bonus: Unused monthly credits roll over to the next month, so you can accumulate credits for larger projects or seasonal workloads.
All API operations consume credits from your account. Credits are deducted when processing completes successfully.
How it works: A bracket group of up to 7 exposure photos counts as 1 final photo for billing purposes. For example, if you upload 5 bracket photos and merge them into 1 final HDR image, you are charged 0.25¢ for that single output.
Applies to virtual staging, lawn replacement, sky replacement, and retouch operations.
Each scene in your video animation consumes 6 credits.
Section 1: Setup & Core Utility
Need an API Key?
https://api.stagerai.comAPI access is open to business accounts and high-volume platforms. To get your production key, shoot us a quick message via the live chat. Every request requires the stager-api-key header.
Section 2: HDR Multi-Bracket Merge Engine
Two Approaches to HDR Merging
Choose the workflow that best fits your use case:
Upload all listing photos at once. The server automatically detects and groups bracket sets based on timing and exposure metadata. Perfect for large-scale processing where you want the API to handle bracket detection.
Upload and process one bracket group at a time. You control which photos belong together as bracket sets. Better for workflows where you have pre-organized brackets or need explicit control.
Single & Multi-Bracket Processing
Process both single images and multi-bracket exposure series through our automated HDR rendering pipeline. Upload anywhere from 1 to 7 exposures per bracket group.
Automatic Structural Modifications
Our processing clusters natively handle the following fixes:
- HDR Multi-Bracket Blending: Combines up to 7 exposures into a single vibrant image.
- Lens & Fish-Eye Correction: Unwraps perspective distortions from wide-angle glass optics.
- Perspective Straightening: Enforces perfect vertical architectural structural balances.
- Window Pulls: Isolates clipping levels in window highlights to balance exterior illumination values.
Supported File Formats
Supports all common real estate photography raw formats including Canon (CR3, CR2), Nikon (NEF, NRW), Sony (ARW, SRF), Fujifilm (RAF), Panasonic (RW2), and standard formats (JPEG, PNG, TIFF).
HDR Processing Pipeline
The HDR pipeline automatically processes your bracket series through detection, alignment, blending, and structural corrections to produce a vibrant, perfectly balanced final image.
0. Create a Project (Shared)
Both workflows require an administrative project wrapper. Create one before proceeding with either approach.
{
"title": "123 Main Street Suite"
}{
"id": "project_uuid_here",
"title": "123 Main Street Suite"
}Server automatically detects and groups bracket sets. Ideal for large-scale processing of complete photo listings.
1. Create a Batch
Initialize a batch container for all photos in this property listing. The server will auto-detect bracket groups.
{
"projectId": "project_uuid_here",
"lensCorrection": true,
"perspectiveCorrection": true,
"photographerRemoval": true,
"fireplaceEnhancement": false,
"tvScreenReplacement": false,
"autoPrivacy": false,
"editingStyle": 11 // Stager Classic V2 Or leave empty to use latest model
}{
"batchId": "batch_uuid_here"
}2. Get Upload URLs (Per Photo)
Generate signed URLs for each photo you want to upload. Call this endpoint once per photo file.
{
"filename": "living_room_1.jpg"
}{
"id": "image_uuid_here",
"url": "https://storage.googleapis.com/...temporary_gcloud_put_url..."
}3. Trigger Batch Processing
Once all photos are uploaded, trigger the server to detect bracket groups and process them.
{}4. Get Batch Results
Poll this endpoint to check processing status of all bracket groups in the batch and retrieve the final merged HDR images.
{
"processing": true,
"results": [
{
"groupId": "group_uuid_1",
"imageUrl": "https://storage.googleapis.com/.../hdr_output_1.jpg",
"processing": false,
"status": undefined
},
{
"groupId": "group_uuid_2",
"imageUrl": undefined,
"processing": true,
"status": undefined
},
{
"groupId": "group_uuid_3",
"imageUrl": undefined,
"processing": false,
"status": "error",
"code": "noCredits",
"message": "No credits left"
}
]
}format is an optional query string parameter (jpg or png), not a request body field — this is a GET request.- processing: True if any group is still processing
- results: Array of result objects, one per detected bracket group
- groupId: Unique ID for this bracket group
- imageUrl: Final HDR image URL (available when processing complete)
- status: "error" if processing failed, undefined otherwise
processing is false and all groups have either imageUrl or an error status.Manually organize and upload one bracket group at a time. You control which photos belong together.
1. Create an HDR Group
Create a container for one complete bracket set (up to 7 exposure photos). Repeat this for each bracket group.
{
"projectId": "project_uuid_here",
"lensCorrection": true,
"perspectiveCorrection": true,
"photographerRemoval": true,
"fireplaceEnhancement": false,
"tvScreenReplacement": false,
"autoPrivacy": false,
"editingStyle": 11 Stager Classic V2 Or leave empty to use latest model
}{
"groupId": "group_uuid_here"
}2. Get Upload URLs (Per Photo in Group)
Generate signed URLs for each exposure photo in this bracket set. Maximum 7 photos per group.
{
"groupId": "group_uuid_here",
"filename": "living_room_exposure_1.jpg"
}{
"id": "image_uuid_here",
"uploadUrl": "https://storage.googleapis.com/...temporary_gcloud_put_url..."
}3. Process the Bracket Group
Trigger merging of the uploaded exposure photos into a single HDR result.
{
"groupId": "group_uuid_here"
}{}4. Check Status & Get Result
Poll this endpoint to check processing status and retrieve the final merged HDR image.
// If processing:
{
"status": "processing"
}
// On Complete:
{
"status": "completed",
"imageUrl": "https://storage.googleapis.com/stager-final-results/output.jpg",
"filename": "living_room_exposure_1.jpg"
}Section 3: AI Staging & Environment Replacement
1. Upload Target Image Asset
Prerequisite step: Upload your base scene photo file as multi-part form data. The returned id (e.g. imageId) is required to trigger all subsequent staging or replacement features.
// Multi-part Form Data Form\nFile: binary_image_payload.jpg / .png
{
"success": true,
"data": {
"id": "img_71283912739",
"imageUrl": "https://storage.googleapis.com/stager-resized/cache_file.jpg",
"width": 1920,
"height": 1280
}
}2. Auto Virtual Staging
Populates empty rooms with interior decor arrangements matched against specific architectural styles and functional footprints.
{
"roomType": "LIVING_ROOM",
"roomStyle": "modern",
"actionType": "subtleStaging",
"resolution": "high",
"colorTypes": ["classicWhite", "naturalWood"],
"removeFurniture": false,
"extraInstructions": "Add a luxury linen sofa assembly"
}{
"success": true,
"data": [
{
"id": "res_9823192",
"imageUrl": "https://storage.googleapis.com/.../staged_output.png",
"width": 1920,
"height": 1280
}
]
}subtleStaging, autoStaginglow, high, superHighLIVING_ROOM, DINING_ROOM, BEDROOM, KITCHEN, KITCHEN_LIVING_AREA, HOME_OFFICE, TERRACE, BALCONY, BATHROOM, EXTERIOR, GAME_ROOM, KIDS_ROOM, GARAGEmodern, minimalist, scandinavian, industrial, rustic, farmhouse, kidsRoom, coastalModern, luxury, midCentury, bohoChic, japandi3. Automated Lawn Replacement
Identifies patchy yard structures, weeds, and dirt paths, swapping them out with pristine, freshly cut grass turf extensions.
{
"lawnType": "medium",
"resolution": "high",
"extraInstructions": "Keep the stone pathway intact"
}{
"success": true,
"data": [
{
"id": "res_8812301",
"imageUrl": "https://storage.googleapis.com/.../lawn_output.png",
"width": 1920,
"height": 1280
}
]
}light | medium | stronglow, high, superHigh4. Automated Sky Replacement
Overlays gray or overexposed weather horizons with deep blue skies or stunning twilight backdrops while dynamically adjusting building facade shadows.
{
"skyType": "twilight",
"resolution": "high",
"skySubType": "dramatic"
}{
"success": true,
"data": [
{
"id": "res_1102931",
"imageUrl": "https://storage.googleapis.com/.../sky_output.png",
"width": 1920,
"height": 1280
}
]
}low, high, superHighblue, twilight (processed via lightning fast rendering systems)subtle | middle | dramaticSection 4: AI Video Generation
Automated Real Estate Video Creation
Transform property images into engaging marketing videos with multiple animation styles and effects. Perfect for creating virtual tours, before-and-after comparisons, and dynamic listings.
- Floor Plan Rotating Effect: Creates smooth 360° rotations with zoom effects.
- Listing Slow Motion: Elegant pan and zoom animations across property images.
- Before & After Staging: Side-by-side comparisons of original vs. virtually staged images.
- Before & After Renovation: Showcase property transformations and renovations.
- Multiple Audio Options: Royalty-free background music library or custom uploads.
1. Upload Video Images
Prerequisite step: Upload property images as multi-part form data. The returned id (image ID) is required when creating video clips and adding frames to your animations.
// Multi-part Form Data Form\nFile: binary_image_payload.jpg / .png
{
"success": true,
"data": {
"id": "img_71283912739",
"imageUrl": "https://storage.googleapis.com/stager-resized/cache_file.jpg",
"width": 1920,
"height": 1280
}
}id to use when creating video clips. You can upload multiple images and use them in different video projects or multiple times within the same project.2. Get Audio Library
Retrieves available background music tracks including built-in royalty-free options and user-uploaded custom audio.
{
"data": {
"items": [
{
"id": "audio_001",
"name": "Corporate Inspirational",
"url": "https://storage.googleapis.com/.../audio.mp3",
"isCustom": false
},
{
"id": "custom_audio_123",
"name": "My Custom Soundtrack",
"url": "https://storage.googleapis.com/.../custom.mp3",
"isCustom": true
}
]
}
}3. Create Video Project
Initializes a new video project with specified orientation, animation style, and optional background audio.
{
"title": "Luxury Home Tour - 123 Main St",
"orientation": "horizontal",
"videoType": "listingSlowMotion",
"audioId": "audio_001"
}{
"data": {
"id": "video_abc123xyz",
"title": "Luxury Home Tour - 123 Main St",
"orientation": "horizontal",
"videoType": "listingSlowMotion",
"clips": []
}
}horizontal, verticallistingSlowMotion, beforeAndAfterStaging, beforeAndAfterStagingRenovation, floorPlanRotatingEffect4. List Video Projects
Retrieves paginated list of all videos created by the authenticated user.
{
"data": {
"items": [
{
"id": "video_abc123xyz",
"title": "Luxury Home Tour - 123 Main St",
"orientation": "horizontal",
"videoType": "listingSlowMotion",
"videoUrl": "https://storage.googleapis.com/.../final_video.mp4",
"createdAt": "2024-01-15T10:30:00Z"
}
],
"total": 1
}
}5. Get Video Details
Retrieves complete video project details including all clips, images, and rendering status.
{
"data": {
"id": "video_abc123xyz",
"title": "Luxury Home Tour - 123 Main St",
"videoUrl": "https://storage.googleapis.com/.../final_video.mp4",
"clips": [
{
"id": "clip_001",
"order": 0,
"videoUrl": "https://storage.googleapis.com/.../clip_001.mp4",
"images": [
{
"id": "img_123",
"imageId": "img_uuid",
"url": "https://storage.googleapis.com/.../thumbnail.jpg",
"isGeneration": false
}
]
}
]
}
}6. Create Video Clip
Adds a new clip (sequence of images) to an existing video project. Each image is a frame in the animation.
{
"images": [
{ "id": "img_123", "order": 0 },
{ "id": "img_124", "order": 1 },
{ "id": "img_125", "order": 2 }
],
"customInstructions": "Add smooth transitions between rooms"
}{
"data": {
"id": "clip_001"
}
}7. Render Video
Initiates background processing to generate the final video file from all clips and images. Processing is async; use the progress endpoint to monitor status.
{}{
"data": {}
}8. Check Video Progress
Polls rendering status and retrieves progress metrics, video URL, and file size for completed renders.
// While processing:
{
"status": "progress",
"progress": 45
}
// When complete:
{
"status": "done",
"url": "https://storage.googleapis.com/.../final_video.mp4",
"size": 125000000
}
// On error:
{
"status": "error",
"message": "Render failed: insufficient memory"
}9. Edit Clip
Updates an existing clip's images, order, or custom instructions. Changes automatically reset render status requiring a new render call.
{
"images": [
{ "id": "img_123", "order": 0 },
{ "id": "img_126", "order": 1 }
],
"customInstructions": "Updated smooth transitions"
}{
"data": {
"success": true
}
}10. Delete Clip
Removes a clip from the video project. Video will need re-rendering after deletion.
{
"data": {
"success": true
}
}Video Generation Pipeline
The video pipeline transforms your image sequences into polished marketing videos. Each scene (1-5 images) generates a 10-15 second video segment with smooth animations, synchronized audio, and professional effects.