Virtually stage photos
Virtually stage rooms: furnish empty rooms or restyle furnished ones in a design_style. Costs 100 credits per variation per photo, plus 100 per variation with ultra_hd.
Select photos with photo_ids, or project_id + all_photos: true. Defaults: variations 1, ultra_hd false; staging starts from the original photo unless versions names a prior result (e.g. a decluttered one).
Spends credits in two steps. Call without quote_id first: you get a quote (cost, balance after, warnings) and nothing is spent. Show the cost to the user and wait for a yes, then call again with the same arguments plus quote_id. The quote lasts 10 minutes and only matches identical arguments.
Results are asynchronous: this returns job IDs right away (status pending). Poll get_job_status with the job IDs, waiting poll_after_ms between calls, until each job is completed or failed. Failed jobs are refunded automatically.
Requires a connection with edit access. Spends credits. Without quote_id it returns 409 quote_required with a quote and spends nothing. Resend with quote_id to run, or send auto_confirm: true to skip the quote.
AuthorizationBearer <token>An API key from Settings → Developers (pp_live_…), or an OAuth access token.
Idempotency-Key?stringA unique key (for example a UUID) that makes retries safe. A retry with the same key and body returns the stored response; the same key with a different body returns 422. Keys last 24 hours.
length <= 255application/json- body
photo_ids?array<>The photos to use. Get IDs from get_project. Alternatively pass project_id with all_photos: true.
1 <= items <= 100project_id?stringThe project the photos belong to. Required with all_photos; with photo_ids it must match their project.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidall_photos?booleanUse every photo in project_id instead of listing photo_ids.
design_style*DesignStyleFurniture and decor style, e.g. modern or scandinavian. See list_edit_options.
"modern""contemporary""scandinavian""industrial""farmhouse""coastal""mid_century_modern""hamptons""luxury""minimalist""traditional""japandi""glam""bohemian"variations?integerDifferent stagings to generate per photo (1–4). Default 1. Each one is charged.
1 <= value <= 41ultra_hd?booleanUpscale each result to at least 4K, for 100 extra credits per result. Default false.
falseversions?Edit on top of a previous result instead of the original: map of photo_id → job_id of a completed job on that photo. Photos not listed use the original.
quote_id?stringThe id of a quote the user confirmed. Omit it to get a quote first; nothing is spent without one.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$uuidauto_confirm?booleanREST with a personal API key only. Skip the quote step and spend immediately. For trusted scripts; ignored for app (OAuth) connections, which always get a quote.
Virtually stage photos
application/json- response
object*stringjobs*array<>failed*array<>credits_spent*integerpoll_after_ms*integerSuggested wait before calling get_job_status.
curl -X POST "https://example.com/stagings" \ -H "Content-Type: application/json" \ -d '{ "design_style": "modern" }'{ "object": "job_batch", "jobs": [ { "object": "job", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "kind": "enhancement", "status": "pending", "progress": 0, "stage": "string", "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9", "photo_id": "50c42bd2-615e-4fec-a325-0e5c4d3d73d3", "photo_ids": [ "68e4fc1a-5272-4c7c-88ae-00ad654f19af" ], "source_job_id": "82ec7aa8-71eb-48cf-81de-c1b18e40e554", "enhancement_types": [ "string" ], "design_style": "string", "ultra_hd": true, "credits": 0, "picked": true, "watermarked": true, "result": { "url": "http://example.com", "expires_at": "2019-08-24T14:15:22Z" }, "thumbnail": { "url": "http://example.com", "expires_at": "2019-08-24T14:15:22Z" }, "error": { "code": "string", "message": "string" }, "created_at": "2019-08-24T14:15:22Z", "completed_at": "2019-08-24T14:15:22Z" } ], "failed": [ { "photo_id": "string", "error": "string" } ], "credits_spent": 0, "poll_after_ms": 0}Enhance photos POST
Apply AI edits (lighting, declutter, blue skies, day to dusk, furniture removal, and more) to listing photos. Costs 100 credits per photo, plus 100 per photo with ultra_hd. All enhancement_types are combined into one result per photo. Select photos with photo_ids, or project_id + all_photos: true. Defaults: ultra_hd false; edits start from the original photo unless versions names a prior result. Spends credits in two steps. Call without quote_id first: you get a quote (cost, balance after, warnings) and nothing is spent. Show the cost to the user and wait for a yes, then call again with the same arguments plus quote_id. The quote lasts 10 minutes and only matches identical arguments. Results are asynchronous: this returns job IDs right away (status pending). Poll get_job_status with the job IDs, waiting poll_after_ms between calls, until each job is completed or failed. Failed jobs are refunded automatically. Requires a connection with edit access. Spends credits. Without `quote_id` it returns 409 `quote_required` with a quote and spends nothing. Resend with `quote_id` to run, or send `auto_confirm: true` to skip the quote.
Create a video POST
Turn listing photos into a video. One photo makes a Photo to Video clip; 2–9 photos make a Listing Tour, in the order given. Costs 400 credits per photo. Defaults: clip_seconds 3, aspect_ratio "auto"; each photo uses its original unless versions names an enhanced result. Spends credits in two steps. Call without quote_id first: you get a quote (cost, balance after, warnings) and nothing is spent. Show the cost to the user and wait for a yes, then call again with the same arguments plus quote_id. The quote lasts 10 minutes and only matches identical arguments. Results are asynchronous: this returns job IDs right away (status pending). Poll get_job_status with the job IDs, waiting poll_after_ms between calls, until each job is completed or failed. Failed jobs are refunded automatically. Videos take a few minutes. Requires a connection with edit access. Spends credits. Without `quote_id` it returns 409 `quote_required` with a quote and spends nothing. Resend with `quote_id` to run, or send `auto_confirm: true` to skip the quote.