Apply recommendations
Run ready Recommendations from get_recommendations as enhancement jobs: one job per photo with all its suggested edits. Costs 100 credits per Recommendation. Only status ready can be applied.
Spends credits in two steps. Call without quote_id first: you get a quote 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 (valid 10 minutes).
Results are asynchronous: poll get_job_status with the returned job IDs, waiting poll_after_ms between calls. 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
recommendation_ids*array<>IDs of Recommendations with status ready, from get_recommendations.
1 <= items <= 100quote_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.
Apply recommendations
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/recommendations/apply" \ -H "Content-Type: application/json" \ -d '{ "recommendation_ids": [ "4a6c671e-2540-4649-a907-0e75cfc6afa9" ] }'{ "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}Get edit recommendations POST
Free. Ask PropertyPixel's AI which corrective edits each photo needs (e.g. improve_lighting, clean_and_tidy, straighten_and_reframe). Select photos with photo_ids, or project_id + all_photos: true. Returns the Recommendations that already exist and starts analysis for photos that have none. Analysis is asynchronous: photos in pending_photo_ids are still being analysed, so call again after poll_after_ms to see them. A daily analysis limit applies; photos over it are listed in skipped_photo_ids. To run the suggestions, pass the ready Recommendation IDs to apply_recommendations (paid). Requires a connection with edit access.
Check job status GET
Check progress of up to 100 jobs returned by enhance_photos, stage_photos, apply_recommendations or create_video. Returns status (pending, processing, completed, failed, cancelled), progress, result URLs (signed for 1 hour) and a poll_after_ms hint. Photo edits usually finish in under a minute and videos in a few minutes; wait poll_after_ms between checks instead of calling in a tight loop. Failed jobs are refunded automatically. Works with view-only access.