Create an upload link
Create a private link (with a QR code) the user opens on their phone or computer to add photos to a project, with no login. Use it when the user needs to send photos you can't receive directly, such as photos on their phone. Share the url, or show the QR code, and tell the user the link works for 2 hours. Photos appear in the project as they upload. To follow progress, call get_project and read upload_link.status and upload_link.photos_received until status is done (the user tapped Done), or simply ask the user to tell you when they've finished.
Requires a connection with edit access.
AuthorizationBearer <token>An API key from Settings → Developers (pp_live_…), or an OAuth access token.
project_id*stringThe project the photos go into.
^([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)$uuidIdempotency-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 <= 255Create an upload link
application/json- response
object*stringid*string^([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)$uuidurl*stringShare this with the user. It opens a page that adds photos to the project, with no login. Treat it like a password.
uriqr_svg*stringThe same URL as a QR code (SVG markup), for scanning with a phone.
expires_at*string^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$date-timestatus*UploadLinkStatus"waiting""receiving""done""expired"photos_received*integermax_photos*integerHow many photos this link accepts (the project's free space).
project_id*string^([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)$uuidcurl -X POST "https://example.com/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/upload-links"{ "object": "upload_link", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "url": "http://example.com", "qr_svg": "string", "expires_at": "2019-08-24T14:15:22Z", "status": "waiting", "photos_received": 0, "max_photos": 0, "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9"}Complete a signed upload POST
Finish a signed upload: verifies each stored file (size, type and content) and adds it to the project as a photo. List every file that uploaded; files left out are discarded and their reserved room released. HEIC/HEIF files are converted to JPEG. Returns the new photos and a `failed` list with a reason per file. Requires a connection with edit access.
List edit options GET
List every edit PropertyPixel can make, with the exact keys to pass to other tools: enhancement types for enhance_photos (combinable, e.g. blue_skies + improve_lighting), design styles and variation limits for stage_photos, room types, Photo to Video settings for create_video (1–9 photos; one makes a clip, several make a Listing Tour), the Ultra HD add-on, and credit prices. Call this when the user asks what you can do, or before choosing keys you are unsure of. Works with view-only access.