{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"0c149315-a9e7-4eff-97ba-fed6aaa2a13c","name":"API v1.1","description":"#### Introduction to EditImage API\n\nThis API can be used by third-party image providers to upload images, rate them, request for revisions, and check the status of their orders.\n\n#### Image Extensions\n\nSupported image extensions:\n\ndng, jpg, jpeg, png, tiff, tif, nef, cr2, crw, orf, arw, psd, rw2, nrw, srf, sr2, raf, pef, raw, mrw, k25, kdc, dcr, x3f, mos, rwl, mef, erf, 3fr, gpr\n\n#### Exposure Grouping and Add-ons\n\n###### Grouping Types:\n\n- **HDR**\n    \n    - A bracket of images our team will blend in LR-Enfuse or LR-HDR. 1 credit per edited image.\n        \n- **Flambient**\n    \n    - One flash and at least one ambient image to be blended in Photoshop using an opacity blending method.\n        \n- **Blending**\n    \n    - Three or more images that need to be blended together by hand in Photoshop. 3 credits per final image.\n        \n- **Panoramic**\n    \n    - A series of images that need to be stitched together to create one long panoramic image.\n        \n\n###### Add-ons:\n\n- **HDR Window Masking**\n    \n    - Select when you want PhotoUp to enhance the window views after HDR blending is complete by masking one of the darker exposures into the window frames. (Applicable if the image is in HDR grouping type)\n        \n- **Flash Shadow Removal**\n    \n    - If you’re shooting a single flash shot that has created shadows of ceiling fans and light fixtures, PhotoUp can clone out those shadows for one additional credit.\n        \n- **Lawn Enhancement**\n    \n    - Used when the lawn is there but is incomplete and discolored and needs to be made to look full and lush again. PhotoUp will do minor patching for free but select lawn enhancement for major patching and greening.\n        \n- **Lawn Creation**\n    \n    - PhotoUp will create a new lawn for you where there isn’t one. Often used for new builds.\n        \n- **Advance Object Removal**\n    \n    - An object removal that requires 15 to 25 minutes to complete. Often cleaning up messes left in showers, cleaning off the fridge or generally tidying a room.\n        \n- **Premium Object Removal**\n    \n    - An object removal that requires more than 25 minutes to complete. Often removing cards from driveways, rugs from floors and any other removal that requires major reconstruction.\n        \n- **Day to Dusk**\n    \n    - PhotoUp will take an exterior image shot during the day and make it look like it was shot at dusk. Cloudy shots without direct sun shadows are appreciated.\n        \n\n---\n\n#### Authentication\n\n- Third party clients are provided with a Public Key and a Secret Key.\n    \n- The API client must provide the `PU-API-Public-Key` in the header.\n    \n- The API client must provide the `PU-API-Timestamp` in the header.\n    \n- The API client must provide the `PU-API-Signature` in the header.\n    \n- The signature is generated by hashing the components concatenated with a newline character using HMAC-SHA256.\n    \n    - The signature components consist of the: `PU-API-Public-Key` and `PU-API-Timestamp`.\n        \n- The validity of the `PU-API-Signature` is only 6-hours. You will need to regenerate a new Auth Signature once it expires. The next section will show an example error response for an expired `PU-API-Signature`\n    \n\n``` php\n    /**\n    * @param string $method  request method GET, POST, PUT, DELETE\n    * @param string $url     path to resource\n    * @param array $data     request param\n    */\n    protected function connectToPhotoUp(  \n        string $method, \n        string $url, \n        array $data = []\n    ) {\n        $path = parse_url($url, PHP_URL_PATH);\n        $method = strtoupper($method);\n        $timestamp = time();\n        $signatureComponents = [ PUBLIC_KEY, $timestamp ];\n        $signature = hash_hmac('sha256', implode('\\n', $signatureComponents), SECRET_KEY);\n        $headers = array(\n            'PU-API-Public-Key: ' . PUBLIC_KEY,\n            \"PU-API-Timestamp: $timestamp\",\n            \"PU-API-Signature: $signature\",\n            'Content-Type: application/json'\n        );\n        $ch = curl_init();\n        curl_setopt($ch, CURLOPT_URL, $url);\n        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);\n        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);\n        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);\n        curl_setopt($ch, CURLOPT_HEADER, FALSE);\n        if (!empty($data)) {\n            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));\n        }\n        $response = curl_exec($ch);\n        //do more stuff\n    }\n\n ```\n\n---\n\n#### Request\n\n- The `Content-Type: application/json` together with `PU-API-Public-Key`, `PU-API-Timestamp`, `PU-API-Signature`must all be present when sending a request to the API endpoints.\n    \n\n#### **Response**\n\n###### Success\n\nOn a successful response, a status code of either `200`, `201`, `202`, or `204` will be returned. Depending on the resource, a `data` property may or may not be present. Generally, the response body may look like the following:\n\n``` json\n{\n    \"message\": \"A sample success message\",  // may be present depending on the resource or operation\n    \"data\": [{...}, {...}, {...}] // may be present depending on the resource or operation\n}\n\n ```\n\n###### Error\n\nOn an error response, a status code of either 4xx or 5xx will be returned. The response body may look like the following:\n\n``` json\n{\n    \"message\": \"The name of the error message\",\n    \"description\": \"The description of the error message\",\n    \"error_code\": \"code_specific_to_the_error\"\n}\n\n ```\n\n###### Expired Auth Signature\n\nOn an expired auth signature, a status code of 401 will be returned. The response body will look like the following:\n\n``` json\n{\n    \"message\": \"Request Signature Expired\",\n    \"description\": \"The request signature has expired. Please regenerate it and use it for your subsequent request.\",\n    \"error_code\": \"signature_expired\"\n}\n\n ```\n\n---\n\n#### **Webhook URL**\n\nWhen a client applies for an API access, PhotoUp will ask for its Webhook URL. PhotoUp will send a **`POST`** request with `Content-Type: application/json`to your Webhook URL when an `event` like order status changes.  \nKeep in mind that the `data` will vary depending on the event `type`.\n\n##### Example\n\n###### When an Order is Ready\n\n_Below is an example payload that will be sent to the webhook url._\n\n``` json\n{\n    \"type\": \"order.editing.ready\",\n    \"data\": {\n        \"order_type\": \"editing\",\n        \"id\": \"R00R\",\n        \"status\": \"Ready\",\n        \"images\": [\n            {\n                \"id\": \"RP62SSA\",\n                \"url\": \"https://app.photoup.net/app/api/v1/editing/preview-edited/RP62SSA?x-expiration=1727101822&x-date=2024-09-23T08:30:22+00:00&x-signature=50ac2878819acff287dd0fa413203419f49d08821661e80624256ab24f60ff12\"\n            }\n        ]\n    }\n}\n\n ```\n\n---\n\n#### Events\n\n**Event Type**: `order.editing.ready`  \n**Description**: This event gets sent when an Editing Order becomes ready.\n\n**Sample Payload**:\n\n``` json\n{\n    \"type\": \"order.editing.ready\",\n    \"data\": {\n        \"order_type\": \"editing\",\n        \"id\": \"R00R\",\n        \"status\": \"Ready\",\n        \"images\": [\n            {\n                \"id\": \"RP62SSA\",\n                \"url\": \"https://app.photoup.net/app/api/v1/editing/preview-edited/RP62SSA?x-expiration=1727101822&x-date=2024-09-23T08:30:22+00:00&x-signature=50ac2878819acff287dd0fa413203419f49d08821661e80624256ab24f60ff12\"\n            }\n        ]\n    }\n}\n\n ```\n\n---\n\n**Event Type**: `order.editing.submit_failed`\n\n**Description**: This event gets sent when an editing order failed.\n\n**Sample Payload**:\n\n``` json\n{\n    \"type\": \"order.editing.submit_failed\",\n    \"data\": {\n        \"order_type\": \"editing\",\n        \"id\": \"R00R\",\n        \"message\": \"Order submission failed\"\n    }\n}\n\n ```\n\n---\n\n**Event Type**: `order.editing.submitted`\n\n**Description**: When your newly placed order has been submitted to the editing team for processing.\n\n**Sample Payload**:\n\n``` json\n{\n    \"type\": \"order.editing.submitted\",\n    \"data\": {\n        \"order_type\": \"editing\",\n        \"id\": \"R00R\",\n        \"message\": \"Order successfully submitted\"\n    }\n}\n\n ```","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"37509243","team":6381596,"collectionId":"0c149315-a9e7-4eff-97ba-fed6aaa2a13c","publishedId":"2sA3rzKYNP","public":true,"publicUrl":"https://api.docs.photoup.net","privateUrl":"https://go.postman.co/documentation/37509243-0c149315-a9e7-4eff-97ba-fed6aaa2a13c","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"007aff"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":"PhotoUp API V1"}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/821b59a5-91de-4833-9d93-8455743edb4c/Y0dodmRHOTFjQzV3Ym1jPS5wbmc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"007aff"}},{"name":"light","logo":"https://content.pstmn.io/e287c1cf-2449-4ce5-85fe-fc14618fff52/cGhvdG91cC5wbmc=","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"007aff"}}]}},"version":"8.10.1","publishDate":"2024-08-08T03:11:11.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"PhotoUp API V1","description":""},"logos":{"logoLight":"https://content.pstmn.io/e287c1cf-2449-4ce5-85fe-fc14618fff52/cGhvdG91cC5wbmc=","logoDark":"https://content.pstmn.io/821b59a5-91de-4833-9d93-8455743edb4c/Y0dodmRHOTFjQzV3Ym1jPS5wbmc="}},"statusCode":200},"environments":[{"name":"Sample","id":"fa1e6824-3f9a-4dc9-8209-529e62a82d17","owner":"37509243","values":[{"key":"url","value":"https://app.photoup.net/app/api/v1","enabled":true,"type":"default"},{"key":"public_key","value":"replace-with-your-public-key","enabled":true,"type":"default"},{"key":"timestamp","value":"replace-with-the-timestamp","enabled":true,"type":"default"},{"key":"signature","value":"replace-with-the-generated-signature","enabled":true,"type":"default"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/5a2ffb3b43780068f705d90091444c343ae09334ac02964d1f30c5bb7a4d414a","favicon":"https://res.cloudinary.com/postman/image/upload/v1723005895/team/74f0a772164a295efe4af3b5421b557e.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"Sample","value":"37509243-fa1e6824-3f9a-4dc9-8209-529e62a82d17"}],"canonicalUrl":"https://api.docs.photoup.net/view/metadata/2sA3rzKYNP"}