PropertyPixel Docs

Virtually stage photos

POST
/stagings

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.

Authorization

headerAuthorizationBearer <token>

An API key from Settings → Developers (pp_live_…), or an OAuth access token.

Header Parameters

Idempotency-Key?string

A 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.

Lengthlength <= 255

Request Body

application/json
  1. body
photo_ids?array<>

The photos to use. Get IDs from get_project. Alternatively pass project_id with all_photos: true.

Items1 <= items <= 100
project_id?string

The project the photos belong to. Required with all_photos; with photo_ids it must match their project.

Match^([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)$
Formatuuid
all_photos?boolean

Use every photo in project_id instead of listing photo_ids.

design_style*DesignStyle

Furniture and decor style, e.g. modern or scandinavian. See list_edit_options.

Value in"modern""contemporary""scandinavian""industrial""farmhouse""coastal""mid_century_modern""hamptons""luxury""minimalist""traditional""japandi""glam""bohemian"
variations?integer

Different stagings to generate per photo (1–4). Default 1. Each one is charged.

Range1 <= value <= 4
Default1
ultra_hd?boolean

Upscale each result to at least 4K, for 100 extra credits per result. Default false.

Defaultfalse
versions?

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?string

The id of a quote the user confirmed. Omit it to get a quote first; nothing is spent without one.

Match^([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)$
Formatuuid
auto_confirm?boolean

REST 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.

Response Body

Virtually stage photos

application/json
  1. response
object*string
jobs*array<>
failed*array<>
credits_spent*integer
poll_after_ms*integer

Suggested 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.