{"info":{"_postman_id":"8959ed9a-8f67-4635-a1ed-86c7306378e2","name":"Octo Browser API","description":"<html><head></head><body><h1 id=\"general-information\">General information</h1>\n<h3 id=\"get-api-token\">Get API Token</h3>\n<img src=\"https://releases.octobrowser.net/doc/05-client-token.png\" width=\"415\" height=\"312\">\n\n<h3 id=\"swagger-schemas-can-be-found-here\">Swagger schemas can be found <a href=\"https://swagger.octobrowser.net/\">here<br></a></h3>\n<h3 id=\"alternative-api-endpoints\">Alternative API endpoints</h3>\n<p>You can use alternative API endpoints if you're provider is blocking recommended one</p>\n<p><code>https://app.octobrowser-mirror1.com</code><br><code>https://app.octobrowser-mirror1.net</code><br><code>https://app.octobrowser-mirror1.org</code></p>\n<h3 id=\"rate-limits-and-429-errors\">Rate Limits and 429 errors.</h3>\n<p>Please check status codes for 429 code: different teams have different limits that depend on subscription level. All limits are shared within the <strong>team.</strong></p>\n<p>If you need higher limits, you can upgrade your subscription to a higher level.</p>\n<p>If you need higher limits than those available with the <strong>Advanced</strong> subscription, please contact our Technical Support.</p>\n<p>If you get code 429, <strong>stop all requests and pause</strong> for <code>retry-after</code> (from headers) seconds.</p>\n<p>Not respecting or ignoring 429 responses may result in us enforcing stricter API limits for your team.</p>\n<p>You can also check remaining requests and rate limit reset time by inspecting appropriate headers.</p>\n<p>Certain API requests may involve more complex processing and, as a result, may cost more than one request point from the RPM (Requests Per Minute) or RPH (Requests Per Hour) limits for their execution. This serves to ensure fair usage and optimal performance for all users.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">Retry-After: 0                       # if 0, you can send the next request\nX-Ratelimit-Limit: 200               # RPM (requests per minute) limit\nX-Ratelimit-Limit-Hour: 3000         # RPH (requests per hour) limit\nX-Ratelimit-Remaining: 4             # remaining RPM\nX-Ratelimit-Remaining-Hour: 2999     # remaining RPH\nX-Ratelimit-Reset: 1671789217        # unix timestamp\n\n</code></pre>\n<h4 id=\"current-limits-for-subscription-plans\">Current limits for subscription plans</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Plan</strong></th>\n<th><strong>RPM</strong></th>\n<th><strong>RPH</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Base</td>\n<td>50</td>\n<td>500</td>\n</tr>\n<tr>\n<td>Team</td>\n<td>100</td>\n<td>1500</td>\n</tr>\n<tr>\n<td>Advanced</td>\n<td>200, expandable up to 1,000</td>\n<td>3,000, expandable up to 50,000</td>\n</tr>\n</tbody>\n</table>\n</div><p>If you require limits exceeding 1,000 RPM and 50,000 RPH, please contact our Support.</p>\n<h4 id=\"one-time-profiles\">One-time profiles</h4>\n<p>Octo has support for <strong>one-time profiles</strong> that:</p>\n<ul>\n<li><p>have faster creation/start time</p>\n</li>\n<li><p>are removed and not synchronized; they are faster to stop and don't clutter the profile list</p>\n</li>\n<li><p>are suitable for certain workloads, such as scraping tasks.</p>\n</li>\n</ul>\n<p>One request POST One-time profile is counted as 4 requests when calculating RPM/RPH limits.</p>\n<h3 id=\"how-to-run-octo-browser-client-in-the-headless-mode\"><strong>How to run Octo Browser client in the \"headless\" mode:</strong></h3>\n<p><strong>Linux</strong></p>\n<ul>\n<li><p>open the Terminal in the folder where <em>OctoBrowser.AppImage</em> is located</p>\n</li>\n<li><p>run the command OCTO_HEADLESS=1 ./OctoBrowser.AppImage</p>\n</li>\n</ul>\n<p><strong>Windows</strong></p>\n<ul>\n<li><p>open powershell terminal</p>\n</li>\n<li><p>run the command $env:OCTO_HEADLESS = \"1\"; start 'C:\\Program Files\\Octo Browser\\Octo Browser.exe'</p>\n</li>\n</ul>\n<p><strong>macOS</strong></p>\n<ul>\n<li><p>open the Terminal</p>\n</li>\n<li><p>run the command - OCTO_HEADLESS=1 open -a \"Octo Browser\"</p>\n</li>\n</ul>\n<h3 id=\"silent-installation\">Silent installation</h3>\n<p><strong>Windows</strong></p>\n<p>To perform a \"silent\" Octo Browser installation using the terminal, run the .exe installer with the \"qn\" flag.<br>Example for Powershell:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-powershell\">&amp; '.\\Octo_Browser_latest_win.exe' /qn\n\n</code></pre>\n<p><strong>macOS</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">hdiutil attach ./Octo_Browser_latest_mac_arm64.dmg\ncp -R /Volumes/Octo\\ Browser/Octo\\ Browser.app /Applications\nhdiutil unmount /Volumes/Octo\\ BrowserEndFragment\n\n</code></pre>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"General information","slug":"general-information"}],"owner":"1801428","collectionId":"8959ed9a-8f67-4635-a1ed-86c7306378e2","publishedId":"UVC6i6eA","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"publishDate":"2022-11-01T15:21:36.000Z"},"item":[{"name":"Profiles","item":[{"name":"Get Profiles","id":"61692646-2ef0-4bbb-ae62-dda2433d6472","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/profiles?page_len=100&page=0&fields=title,description,proxy,start_pages,tags,status,last_active,version,storage_options,created_at,updated_at&ordering=active","description":"<p><strong>Note:</strong> if a request contains two tags in the search_tags field, its result will only show profiles containing <strong>both tags</strong>, not all profiles featuring one of the tags.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles"],"host":["/"],"query":[{"disabled":true,"description":{"content":"<p>(Optional), search only from the beginning of the title</p>\n","type":"text/plain"},"key":"search","value":"profile_title"},{"disabled":true,"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"search_tags","value":"tag1,tag2"},{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"page_len","value":"100"},{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"page","value":"0"},{"key":"fields","value":"title,description,proxy,start_pages,tags,status,last_active,version,storage_options,created_at,updated_at"},{"description":{"content":"<p>(Optional) created,-created,active,-active,title,-title</p>\n","type":"text/plain"},"key":"ordering","value":"active"},{"disabled":true,"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"status","value":"1"},{"disabled":true,"description":{"content":"<p>(Optional) bool, true - profiles with passwords, false - profiles without passwords, None - all profiles</p>\n","type":"text/plain"},"key":"password","value":"true"},{"disabled":true,"description":{"content":"<p>(Optional) list of proxies uuids, also @no-proxies-filter</p>\n","type":"text/plain"},"key":"proxies","value":"proxy1,proxy2"}],"variable":[]}},"response":[{"id":"55592c28-6f87-4164-b46a-d81ece936a34","name":"Get Profiles","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"url":{"raw":"//api/v2/automation/profiles?search=profile_name&search_tags=tag1,tag2&page_len=100&page=0&fields=title,description,proxy,start_pages,tags,status,last_active,version,storage_options,created_at,updated_at,extra_info&ordering=created,-created,active,-active,title,-title","host":["/"],"path":["api","v2","automation","profiles"],"query":[{"key":"search","value":"profile_name","description":"(Optional)"},{"key":"search_tags","value":"tag1,tag2","description":"(Optional)"},{"key":"page_len","value":"100","description":"(Optional)"},{"key":"page","value":"0","description":"(Optional)"},{"key":"fields","value":"title,description,proxy,start_pages,tags,status,last_active,version,storage_options,created_at,updated_at,extra_info","description":"(Optional)"},{"key":"ordering","value":"created,-created,active,-active,title,-title","description":"(Optional)"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Sat, 07 May 2022 15:28:19 GMT","enabled":true},{"key":"Content-Type","value":"application/json","enabled":true},{"key":"Transfer-Encoding","value":"chunked","enabled":true},{"key":"Connection","value":"keep-alive","enabled":true},{"key":"Vary","value":"Accept-Encoding","enabled":true},{"key":"Content-Encoding","value":"gzip","enabled":true},{"key":"CF-Cache-Status","value":"DYNAMIC","enabled":true},{"key":"Expect-CT","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"","enabled":true},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=VfBSqBkE%2FDqqfM4K9K3GEdJnNfvFsWnaGDqvVq%2FkBQZEGmbpJW6NmHQEYdGb7lzdKy9EOsIyj73MSih5vJ21LmXftJ%2Bo6QiKnTpr%2BNIpsSxG7VgQ9jwTjKmAvVT5lQeLY2o9VG8%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"Server","value":"cloudflare","enabled":true},{"key":"CF-RAY","value":"707afc195b081693-DME","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": [\n        {\n            \"uuid\": \"4bbdc824762342f485bed4968533b28a\"\n        },\n        {\n            \"uuid\": \"4565940d5b9b41f99341fae6f5f3d855\"\n        },\n        {\n            \"uuid\": \"ded609bdffaa4a6582b1b1d78454d28e\"\n        },\n        {\n            \"uuid\": \"abfe707260e74e9aaa1ab7ca0df80caa\"\n        },\n        {\n            \"uuid\": \"96516930574740538b0c733b74d68242\"\n        },\n        {\n            \"uuid\": \"0e9c63e48099406987c266e72e994bb0\"\n        },\n        {\n            \"uuid\": \"055ddebf0d414449be748b08f1ed2ddf\"\n        },\n        {\n            \"uuid\": \"f61f8cfabb4c4ce6babf1ac61843b890\"\n        },\n        {\n            \"uuid\": \"d9bdf0109e3e43febc28a0380ddf6c0b\"\n        },\n        {\n            \"uuid\": \"184b52f2086b4aeba33cabfb8ecee961\"\n        },\n        {\n            \"uuid\": \"a353e680e88646c688f9fcce92d00e5f\"\n        },\n        {\n            \"uuid\": \"e952ff70362041a2a4045d7054f0c639\"\n        },\n        {\n            \"uuid\": \"98e2d1dd14684205a710b9d25812b07e\"\n        },\n        {\n            \"uuid\": \"21d471786f4e4038811e1e78371831d9\"\n        },\n        {\n            \"uuid\": \"6663f622a8c1446c814d0bc3d0f6bb6e\"\n        },\n        {\n            \"uuid\": \"9949a40a62274c11a9d2e8313337f257\"\n        },\n        {\n            \"uuid\": \"9223ea89bdfc447aa71159e6d73fc99e\"\n        },\n        {\n            \"uuid\": \"1abe52bc7e734ea39e105646ba57f105\"\n        },\n        {\n            \"uuid\": \"7e4edc73405f4e4ca35b9640e293b1b3\"\n        },\n        {\n            \"uuid\": \"0c53271685954184a18c478852abfc5f\"\n        },\n        {\n            \"uuid\": \"eb4db359e99343dd8130a8cddd681e49\"\n        },\n        {\n            \"uuid\": \"f631b60aa1c84daf8cfe63fd5aa897d7\"\n        },\n        {\n            \"uuid\": \"28fe11f09e4746978db85f87529a1b40\"\n        },\n        {\n            \"uuid\": \"d0acc7abc815435f85fe518680341e58\"\n        },\n        {\n            \"uuid\": \"a76252cdf1bb4d3dbd9d8fbf706bd80a\"\n        }\n    ],\n    \"total_count\": 25,\n    \"page\": 0,\n    \"code\": null\n}"}],"_postman_id":"61692646-2ef0-4bbb-ae62-dda2433d6472"},{"name":"Create Profile","id":"32cfbcd5-351c-4d2d-9187-7637ec347bfc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"title\": \"Test profile from api\",\n    \"description\": \"test description\",\n    \"start_pages\": [\"https://fb.com\"],\n    \"password\": \"password\",\n    \"tags\": [\n        \"octo\"\n    ],\n    \"launch_args\": [\"--start-maximized\"],\n    \"pinned_tag\": \"octo\", // [optional]\n    \"proxy\": {\n        \"type\": \"socks5\",\n        \"host\": \"1.1.1.1\",\n        \"port\": 5555,\n        \"login\": \"\",\n        \"password\": \"\"\n    },\n    \"storage_options\": {\n        \"cookies\": true,\n        \"passwords\": true,\n        \"extensions\": true,\n        \"localstorage\": false,\n        \"history\": false,\n        \"bookmarks\": true\n    },\n    \"cookies\": [\n    {\n      \"domain\": \".google.com\",\n      \"expirationDate\": 1639134293.313654,\n      \"hostOnly\": false,\n      \"httpOnly\": false,\n      \"name\": \"1P_JAR\",\n      \"path\": \"/\",\n      \"sameSite\": \"no_restriction\",\n      \"secure\": true,\n      \"value\": \"2021-11-10-11\"\n    }\n    ],\n    \"image\": \"48a68cba76684e5c806132b8e461525f\",\n    \"extensions\": [],\n    \"images_load_limit\": 10240,\n    \"local_cache\": true,\n    \"fingerprint\": {\n        \"os\": \"mac\", \n        \"os_version\": \"11\", \n        \"os_arch\": \"x86\", \n        \"renderer\": \"AMD Radeon Pro 450\",\n        \"screen\": \"1920x1080\",\n        \"languages\": {\n            \"type\": \"ip\"\n        },\n        \"timezone\": {\n            \"type\": \"ip\"\n        },\n        \"geolocation\": {\n            \"type\": \"ip\"\n        },\n        \"cpu\": 4,\n        \"ram\": 8,\n        \"noise\": {\n            \"webgl\": true,\n            \"canvas\": false,\n            \"audio\": true,\n            \"client_rects\": false\n        },\n        \"webrtc\": {\n            \"type\": \"ip\"\n        },\n        \"dns\": \"1.1.1.1\",\n        \"media_devices\": {\n            \"video_in\": 1,\n            \"audio_in\": 1,\n            \"audio_out\": 1\n        }\n    },\n    \"extra_info\": {\n        \"any\": \"value\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles","description":"<p><strong>Note:</strong> if you don't specify a given parameter, we will generate the best values for it on our servers. Change only the parameters you need to customize.</p>\n<h3 id=\"cookie-formats\">Cookie formats</h3>\n<p>We accept the folowing cookie formats:</p>\n<h4 id=\"json\">JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"domain\":\".google.com\",\n    \"expirationDate\":1639134293.313654,\n    \"hostOnly\":false,\n    \"httpOnly\":false,\n    \"name\":\"1P_JAR\",\n    \"path\":\"/\",\n    \"sameSite\":\"no_restriction\",\n    \"secure\":true,\n    \"value\":\"2021-11-10-11\"\n  }\n]\n\n</code></pre>\n<h4 id=\"mozilla\">Mozilla</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"Path raw\":\"/\",\n    \"Samesite raw\":\"no_restriction\",\n    \"Name raw\":\"NID\",\n    \"Content raw\":\"2021-11-10-11\",\n    \"Expires raw\":\"1639134293\",\n    \"Host raw\":\"https://.google.com/\",\n    \"This domain only raw\":\"false\",\n    \"HTTP only raw\":\"false\",\n    \"Send for raw\":\"true\"\n  }\n]\n\n</code></pre>\n<h4 id=\"netscape\">Netscape</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>.google.com    TRUE    /    TRUE    1639134293    1P_JAR    2021-11-10-1    544\n\n</code></pre><blockquote>\n<p>Each value must be separated by a tab (\\t). </p>\n</blockquote>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>.google.com\\tTRUE\\t/\\tTRUE\\t1639134293\\t1P_JAR\\t2021-11-10-1\\t544\n\n</code></pre><h3 id=\"profile-data\">Profile data</h3>\n<p>Note: if you are unsure about how to update or create a profile, you can always modify an exiting profile in the browser and then check its data using the <em>get profile</em> API. In most cases, this will give you the information you need.</p>\n<h3 id=\"webrtc-options\">WebRTC options</h3>\n<p>This feature aims to hide users' actual IP addresses, especially when they are using a proxy. This option makes it possible to disable the transmission of real IP addresses through the non-proxied UDP protocol in WebRTC.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"webrtc\": {\n        \"type\": \"disable_non_proxied_udp\",\n        \"data\": null\n      },\n    ]\n  }\n}\n\n</code></pre>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{          \n   \"webrtc\": {\n        \"type\": \"real\",\n        \"data\": null\n      },\n    ]\n  }\n}\n\n</code></pre>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{          \n   \"webrtc\": {\n        \"type\": \"ip\",\n        \"data\": null\n      },\n    ]\n  }\n}\n\n</code></pre>\n<h3 id=\"customize-language-timezone-and-geolocation\">Customize language, timezone and geolocation:</h3>\n<p>Example for language:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"languages\": {\n    \"type\": \"manual\",\n    \"data\": [\n      \"[ru-RU] Russian (Russia)\",\n      \"[en-US] English (United States)\"\n    ]\n  }\n}\n\n</code></pre>\n<p>Example for timezone:</p>\n<p>Note: currently you need to set daylight time manually (this will be fixed later)</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"timezone\": {\n    \"type\": \"manual\",\n    \"data\": \"America/Detroit\"\n  }\n}\n\n</code></pre>\n<p>Example for geolocation:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n\"geolocation\":{\n    \"type\": \"manual\",\n    \"data\":{\n        \"latitude\": 41.40338,\n        \"longitude\": 2.17403,\n        \"accuracy\": 10\n        }\n}\n}\n\n</code></pre>\n<h3 id=\"storage-options\">Storage Options</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"storage_options\" : {\n    \"cookies\": true,\n    \"passwords\": true,\n    \"extensions\": true,\n    \"localstorage\": false,\n    \"history\": false,\n    \"bookmarks\": true,\n    \"serviceworkers\": false\n   }\n}\n\n</code></pre>\n<h3 id=\"cookies\">Cookies</h3>\n<p><strong>cookies</strong> field allows a string or JSON-array</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"cookies\": \"cookie of permitted format\"\n}\n\n</code></pre>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"cookies\": [...]\n}\n\n</code></pre>\n<h3 id=\"bookmarks\">Bookmarks</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n\"bookmarks\": [\n    {\n      \"name\": \"google\",\n      \"url\": \"https://google.com\"\n    },\n    {\n      \"name\": \"ebay\",\n      \"url\": \"https://ebay.com\"\n    }\n  ]\n}\n\n</code></pre>\n<h3 id=\"accessing-extra_info-from-extensions\">Accessing extra_info from extensions</h3>\n<p>Data passed to <code>extra_info</code> can be accessed from browser extensions:</p>\n<ol>\n<li><p>Add <code>\"permissions\": [\"cookies\"]</code> to <code>manifest.json</code></p>\n</li>\n<li><p>Use <code>chrome.cookies.getOctoProfileExtraInfo</code> (usually from extension's service-worker) to access <code>extra_info</code> as JSON-string:</p>\n</li>\n</ol>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>chrome.cookies.getOctoProfileExtraInfo((extraInfo) =&gt; {\n  console.log(extraInfo);\n});\n\n</code></pre>","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"4a691c4a-f628-4125-bdde-199db706f7cb","name":"Simple Profile","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"body":{"mode":"raw","raw":"{\n    \"title\": \"Test profile from api\",\n    \"fingerprint\": {\n        \"os\": \"win\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles"},"status":"CREATED","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 24 Dec 2021 16:05:49 GMT","enabled":true},{"key":"Content-Type","value":"application/json","enabled":true},{"key":"Content-Length","value":"82","enabled":true},{"key":"Connection","value":"keep-alive","enabled":true},{"key":"CF-Cache-Status","value":"DYNAMIC","enabled":true},{"key":"Expect-CT","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"","enabled":true},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=vrryX5FBhoTn37Z%2FqhTTVhciw6%2BFJDFTKUF3Pi%2FPKJS9TpIW%2F%2B5vDb9tRYxkT3RGIzih6y9uLxD%2BQV%2Bxf43B64rmXOKAkvPG6cxEoTOrX1rhQn0dELgEAHZtp3D8FtaaoWpQclk%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"Server","value":"cloudflare","enabled":true},{"key":"CF-RAY","value":"6c2b12c79e6078f3-MSQ","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"21d471786f4e4038811e1e78371831d9\"\n    },\n    \"code\":null\n}"},{"id":"c75e7d38-5799-4f2e-841d-616030707672","name":"Create Profile","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"title\": \"Test profile from api\",\n    \"description\": \"test description\",\n    \"start_pages\": [\n        \"https://fb.com\"\n    ],\n    \"password\": \"password\",\n    \"tags\": [\n        \"octo\"\n    ],\n    \"launch_args\": [\"--start-maximized\"],\n    \"bookmarks\": [\n        {\n            \"name\": \"example\",\n            \"url\": \"https://example.com\"\n        }\n    ],\n    \"proxy\": {\n        \"type\": \"socks5\",\n        \"host\": \"1.1.1.1\",\n        \"port\": 5555,\n        \"login\": \"\",\n        \"password\": \"\"\n    },\n    \"storage_options\": {\n        \"cookies\": true,\n        \"passwords\": true,\n        \"extensions\": true,\n        \"localstorage\": false,\n        \"history\": false,\n        \"bookmarks\": true,\n        \"serviceworkers\": false\n    },\n    \"cookies\": [\n        {\n            \"domain\": \".google.com\",\n            \"expirationDate\": 1639134293.313654,\n            \"hostOnly\": false,\n            \"httpOnly\": false,\n            \"name\": \"1P_JAR\",\n            \"path\": \"/\",\n            \"sameSite\": \"no_restriction\",\n            \"secure\": true,\n            \"value\": \"2021-11-10-11\"\n        }\n    ],\n    \"image\": \"36fb48f4e99d47d3b18383d0c27feac2\",\n    \"extensions\": [],\n    \"images_load_limit\": 10240,\n    \"local_cache\": true,\n    \"fingerprint\": {\n        \"os\": \"win\",\n        \"os_version\": \"11\",\n        \"os_arch\": \"x86\",\n        \"user_agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36\",\n        \"screen\": \"1920x1080\",\n        \"languages\": {\n            \"type\": \"ip\"\n        },\n        \"timezone\": {\n            \"type\": \"ip\"\n        },\n        \"geolocation\": {\n            \"type\": \"ip\"\n        },\n        \"cpu\": 4,\n        \"ram\": 8,\n        \"noise\": {\n            \"webgl\": true,\n            \"canvas\": false,\n            \"audio\": true,\n            \"client_rects\": false\n        },\n        \"webrtc\": {\n            \"type\": \"ip\"\n        },\n        \"dns\": \"1.1.1.1\",\n        \"media_devices\": {\n            \"video_in\": 1,\n            \"audio_in\": 1,\n            \"audio_out\": 1\n        }\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles"},"status":"CREATED","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"d9623a2be9a0431784aacc4500d7963a\"\n    },\n    \"code\":null\n}"},{"id":"59a1385c-0a5c-486e-af20-e0926d5e4269","name":"Create Profile with netscape cookies","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"title\": \"Test profile from api with netscape cookies\",\n    \"fingerprint\": {\n        \"os\": \"win\"\n    },\n    \"cookies\": \"some.host\\tTRUE\\t/\\tTRUE\\t123\\tname\\tvalue\\nsome2.host\\tTRUE\\t/\\tTRUE\\t111\\tname2\\tvalue2\"\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles"},"status":"CREATED","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"d9623a2be9a0431784aacc4500d7963a\"\n    },\n    \"code\":null\n}"},{"id":"be9e1d12-8553-4978-a5ee-63731a761f69","name":"Create Mobile Profile","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"title\": \"Test mobile profile from api\",\n    \"description\": \"Mobile profiles don't support extensions\",\n    \"fingerprint\": {\n        \"os\": \"android\", \n        \"os_version\": \"13\", \n        \"os_arch\": \"arm\",\n        \"device_model\": \"SM-T870\",\n        \"device_type\": \"tablet\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null}],"_postman_id":"32cfbcd5-351c-4d2d-9187-7637ec347bfc"},{"name":"Delete Profiles","id":"47754ded-22d0-4974-a4a5-7bfbf0edcb2f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json"},{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\"{PROFILE_UUID}\"],\n    \"skip_trash_bin\": true\n}"},"url":"//api/v2/automation/profiles","description":"<p><code>skip_trash_bin: true</code>is enabled by default. This speeds up your queries; moreover, you won't need these profiles later.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"bf846f18-80ca-42b6-9403-089eb8952e51","name":"Delete Profiles","originalRequest":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\"8e62ef680ac94859a66ac671298be35c\", \"d7226450b9fb4bac8526c24fc3669814\", \"a4708a63d55742a09b7f1a600c248484\"],\n    \"skip_trash_bin\": false\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 28 Dec 2022 17:24:46 GMT","enabled":true},{"key":"Content-Type","value":"application/json","enabled":true},{"key":"Transfer-Encoding","value":"chunked","enabled":true},{"key":"Connection","value":"keep-alive","enabled":true},{"key":"access-control-allow-origin","value":"*","enabled":true},{"key":"retry-after","value":"0","enabled":true},{"key":"x-ratelimit-limit","value":"200","enabled":true},{"key":"x-ratelimit-limit-hour","value":"3000","enabled":true},{"key":"x-ratelimit-remaining","value":"198","enabled":true},{"key":"x-ratelimit-remaining-hour","value":"2996","enabled":true},{"key":"x-ratelimit-reset","value":"1672248346","enabled":true},{"key":"CF-Cache-Status","value":"DYNAMIC","enabled":true},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=7MjOt8ErO9IV%2F8oedvbSp0%2BOj5mSonTmRGLiq%2FNdCSl7kH86NRQbbomCmkpqwkLINyTdVmk3Gvv5x4IUfV%2FRCUx%2FBK9GHvn9UZ%2F76aTUlXoxoyB7yEVEJIpeINo00qhZSuzArXI%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"Server","value":"cloudflare","enabled":true},{"key":"CF-RAY","value":"780bfdcc8cfdc321-VIE","enabled":true},{"key":"Content-Encoding","value":"gzip","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles deleted\",\n    \"data\": {\n        \"deleted_uuids\": [\n            \"a4708a63d55742a09b7f1a600c248484\"\n        ],\n        \"active_uuids\": [\n            \"d7226450b9fb4bac8526c24fc3669814\"\n        ]\n    }\n}"}],"_postman_id":"47754ded-22d0-4974-a4a5-7bfbf0edcb2f"},{"name":"Get Profile","id":"46b9c584-9be0-4b82-b123-969338825255","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/profiles/:uuid","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles",":uuid"],"host":["/"],"query":[],"variable":[{"description":{"content":"<p>Profile UUID</p>\n","type":"text/plain"},"type":"any","value":"","key":"uuid"}]}},"response":[{"id":"0c63d176-81f5-4175-9b06-a526c9992947","name":"Get Profile","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"url":{"raw":"//api/v2/automation/profiles/:uuid","host":["/"],"path":["api","v2","automation","profiles",":uuid"],"variable":[{"key":"uuid","value":"","description":"Profile UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 18 Jan 2022 13:46:59 GMT"},{"key":"Content-Type","value":"application/json","description":""},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"Content-Encoding","value":"gzip"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"Expect-CT","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=ks3q5%2Br8JUebDEsMxuXrxhlLHioFkPxgHm8aX61prlfeWUKp5IBOdKQ2wl8TPAoq6%2FfrUcQyrag9crj44IhgJTtsddI505JRlfYKTYA%2FjJzuIIKbQ4%2B4LZJzluuPIjvAxLcCoM4%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}"},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"6cf845c7b80378f3-MSQ"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"cfd673b04de3433caca327836ae69d19\",\n        \"title\": \"Quick befitting-sick\",\n        \"description\": \"\",\n        \"start_pages\": [],\n        \"bookmarks\": [],\n        \"tags\": [],\n        \"pinned_tag\": null,\n        \"proxy\": null,\n        \"status\": 0,\n        \"version\": \"0\",\n        \"storage_options\": {\n            \"cookies\": true,\n            \"passwords\": true,\n            \"extensions\": true,\n            \"localstorage\": false,\n            \"history\": false,\n            \"bookmarks\": true,\n            \"serviceworkers\": false\n        },\n        \"last_active\": null,\n        \"fingerprint\": {\n            \"os\": \"win\",\n            \"user_agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36\",\n            \"languages\": {\n                \"type\": \"ip\",\n                \"data\": null\n            },\n            \"timezone\": {\n                \"type\": \"ip\",\n                \"data\": null\n            },\n            \"geolocation\": {\n                \"type\": \"ip\",\n                \"data\": null\n            },\n            \"renderer\": \"NVIDIA GeForce GT 710\",\n            \"noise\": {\n                \"webgl\": false,\n                \"canvas\": false,\n                \"audio\": false,\n                \"client_rects\": false\n            },\n            \"webrtc\": {\n                \"type\": \"ip\",\n                \"data\": null\n            },\n            \"dns\": null,\n            \"cpu\": 12,\n            \"ram\": 16,\n            \"media_devices\": {\n                \"video_in\": 1,\n                \"audio_in\": 1,\n                \"audio_out\": 1\n            },\n            \"fonts\": [\n                \"Candara Light\",\n                \"Sitka Banner\",\n                \"Cascadia Code Regular\",\n                \"Yu Gothic UI Semibold\",\n                \"Symbol\",\n                \"Wingdings\",\n                \"Sitka\",\n                \"Cascadia Mono SemiBold\",\n                \"Microsoft Himalaya\",\n                \"Yu Gothic Regular\",\n                \"Myanmar Text\",\n                \"Sitka Display\",\n                \"Constantia\",\n                \"Cascadia Code\",\n                \"Yu Gothic UI Light\",\n                \"Microsoft YaHei Light\",\n                \"Calibri\",\n                \"Lucida Sans Unicode\",\n                \"Tahoma\",\n                \"Microsoft YaHei UI\",\n                \"Verdana\",\n                \"Webdings\",\n                \"Segoe UI Historic\",\n                \"Sans-Serif\",\n                \"Yu Gothic\",\n                \"Leelawadee UI\",\n                \"Corbel Light\",\n                \"Georgia\",\n                \"Serif\",\n                \"Segoe UI Variable Small Light\",\n                \"Sitka Small Semibold\",\n                \"Microsoft JhengHei Light\",\n                \"Calibri Light\",\n                \"MingLiU-ExtB\",\n                \"Segoe Print\",\n                \"Segoe UI Variable Display Light\",\n                \"Microsoft Yi Baiti\",\n                \"MS UI Gothic\",\n                \"Candara\",\n                \"Cascadia Mono SemiLight\",\n                \"SimSun-ExtB\",\n                \"Courier New\",\n                \"Microsoft New Tai Lue\",\n                \"Corbel\",\n                \"Microsoft JhengHei UI Light\",\n                \"Cascadia Mono\",\n                \"Cascadia Mono Italic\",\n                \"Cascadia Code Light\",\n                \"Segoe UI Variable Small\",\n                \"Palatino Linotype\",\n                \"Lucida Console\",\n                \"Javanese Text\",\n                \"Cascadia Mono SemiLight Italic\",\n                \"Arial Black\",\n                \"Cascadia Code Light Italic\",\n                \"Microsoft Tai Le\",\n                \"Segoe UI Variable\",\n                \"Cascadia Mono Light Italic\",\n                \"PMingLiU-ExtB\",\n                \"Segoe Script\",\n                \"Microsoft YaHei\",\n                \"Segoe Fluent Icons\",\n                \"MS PGothic\",\n                \"Impact\",\n                \"Comic Sans MS\",\n                \"Cascadia Code Bold Italic\",\n                \"Segoe UI Variable Text Light\",\n                \"Monospace\",\n                \"Sitka Text Semibold\",\n                \"Ebrima\",\n                \"Segoe MDL2 Assets\",\n                \"Math\",\n                \"MingLiU_HKSCS-ExtB\",\n                \"Segoe UI Symbol\",\n                \"Mongolian Baiti\",\n                \"Yu Gothic UI Regular\",\n                \"Segoe UI Black\",\n                \"SimSun\",\n                \"Sylfaen\",\n                \"Segoe UI Variable Small Regular\",\n                \"Cascadia Mono Regular\",\n                \"Cascadia Mono Bold Italic\",\n                \"Microsoft JhengHei Regular\",\n                \"Gadugi\",\n                \"Trebuchet MS\",\n                \"Cascadia Code SemiBold\",\n                \"Ink Free\",\n                \"Cascadia Mono SemiBold Italic\",\n                \"Sitka Subheading Semibold\",\n                \"Cambria Math\",\n                \"Microsoft PhagsPa\",\n                \"Yu Gothic Light\",\n                \"Helvetica\",\n                \"Cascadia Code SemiLight\",\n                \"Segoe UI Variable Display Semibold\",\n                \"Emoji\",\n                \"Yu Gothic Medium\",\n                \"Segoe UI Variable Small Semibold\",\n                \"Fantasy\",\n                \"Franklin Gothic Medium\",\n                \"Cascadia Mono Bold\",\n                \"Gabriola\",\n                \"Segoe UI\",\n                \"Sitka Heading\",\n                \"Cascadia Code Italic\",\n                \"Times New Roman\",\n                \"HoloLens MDL2 Assets\",\n                \"Microsoft JhengHei\",\n                \"System-UI\",\n                \"Cascadia Code SemiLight Italic\",\n                \"Cascadia Mono ExtraLight Italic\",\n                \"Segoe UI Semibold\",\n                \"Bahnschrift\",\n                \"Plantagenet Cherokee\",\n                \"Cascadia Code Bold\",\n                \"Segoe UI Variable Text Semibold\",\n                \"NSimSun\",\n                \"Marlett\",\n                \"MV Boli\",\n                \"Microsoft JhengHei UI\",\n                \"Microsoft Sans Serif\",\n                \"Nirmala UI\",\n                \"Segoe UI Variable Text\",\n                \"Microsoft JhengHei UI Regular\",\n                \"Sitka Small\",\n                \"Sitka Subheading\",\n                \"Cascadia Code ExtraLight\",\n                \"Sitka Banner Semibold\",\n                \"Sitka Display Semibold\",\n                \"Cascadia Code ExtraLight Italic\",\n                \"Courier\",\n                \"Sitka Text\",\n                \"Sitka Heading Semibold\",\n                \"Cursive\",\n                \"Segoe UI Variable Display\",\n                \"Fangsong\",\n                \"Cascadia Mono Light\",\n                \"Arial\",\n                \"Segoe UI Variable Display Regular\",\n                \"MS Gothic\",\n                \"Cascadia Code SemiBold Italic\",\n                \"Cascadia Mono ExtraLight\",\n                \"Segoe UI Variable Text Regular\",\n                \"Cambria\",\n                \"Malgun Gothic\",\n                \"Segoe UI Light\",\n                \"Microsoft YaHei UI Light\",\n                \"Segoe UI Emoji\",\n                \"Verdana Italic\",\n                \"KodchiangUPC Bold\",\n                \"Verdana Bold Italic\",\n                \"Microsoft JhengHei UI Bold\",\n                \"Gisha Bold\",\n                \"Rockwell Nova Cond Bold\",\n                \"FangSong\",\n                \"Sakkal Majalla Bold\",\n                \"EucrosiaUPC Bold\",\n                \"Comic Sans MS Bold Italic\",\n                \"MS Mincho\",\n                \"Cambria Bold Italic\",\n                \"IrisUPC Bold Italic\",\n                \"Georgia Bold\",\n                \"Tahoma Bold\",\n                \"Meiryo Italic\",\n                \"Sanskrit Text\"\n            ],\n            \"os_version\": \"11\",\n            \"os_arch\": \"x86\",\n            \"user_agent_changed_by_user\": null,\n            \"screen\": \"1440x900\"\n        },\n        \"image\": \"55e228c7227946b3889f370b54be26c1\",\n        \"extensions\": [],\n        \"local_cache\": false,\n        \"has_user_password\": true,\n        \"password_set_at\": \"2024-08-21T15:41:11\",\n        \"created_at\": \"2024-08-21T15:40:15\",\n        \"updated_at\": \"2024-08-21T15:41:11\"\n    },\n    \"code\": null\n}"}],"_postman_id":"46b9c584-9be0-4b82-b123-969338825255"},{"name":"Update Profile","id":"5f9a0daa-30ca-43ca-b2c9-1887eda00ea6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"title\": \"new title\", // [optional]\n    \"description\": \"new description\", // [optional]\n    \"start_pages\": [\"https://fb.com\"],\n        \"bookmarks\": [{\n        \"name\": \"example42\",\n        \"url\": \"http://example.com\"\n    }],\n    \"tags\": [ // [optional]\n        \"new_tag\"\n    ],\n    \"launch_args\": [\"--start-maximized\"],\n    \"pinned_tag\": \"octo\", // [optional],\n    \"proxy\": { // [optional]\n        \"type\": \"socks5\",\n        \"host\": \"1.1.1.1\",\n        \"port\": 5555,\n        \"login\": \"\",\n        \"password\": \"\"\n    },\n    \"storage_options\": { // [optional]\n        \"cookies\": true,\n        \"passwords\": true,\n        \"extensions\": true,\n        \"localstorage\": false,\n        \"history\": false,\n        \"bookmarks\": true\n    },\n    \"cookies\": [ // [optional]\n    {\n      \"domain\": \".google.com\",\n      \"expirationDate\": 1639134293.313654,\n      \"hostOnly\": false,\n      \"httpOnly\": false,\n      \"name\": \"1P_JAR\",\n      \"path\": \"/\",\n      \"sameSite\": \"no_restriction\",\n      \"secure\": true,\n      \"value\": \"2021-11-10-11\"\n    }\n    ],\n    \"image\": \"36fb48f4e99d47d3b18383d0c27feac2\", // [optional]\n    \"extensions\": [], // [optional]\n    \"local_cache\": true, // [optional]\n    \"fingerprint\": { // [optional]\n        \"os\": \"win\", // [required]\n        \"os_version\": \"11\", // [optional]\n        \"os_arch\": \"x86\", // [optional]\n        \"user_agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36\",\n        \"screen\": \"1920x1080\",\n        \"languages\": {\n            \"type\": \"ip\"\n        },\n        \"timezone\": {\n            \"type\": \"ip\"\n        },\n        \"geolocation\": {\n            \"type\": \"ip\"\n        },\n        \"cpu\": 4,\n        \"ram\": 8,\n        \"noise\": {\n            \"webgl\": true,\n            \"canvas\": false,\n            \"audio\": true,\n            \"client_rects\": false\n        },\n        \"webrtc\": {\n            \"type\": \"ip\"\n        },\n        \"dns\": \"1.1.1.1\",\n        \"media_devices\": {\n            \"video_in\": 1,\n            \"audio_in\": 1,\n            \"audio_out\": 1\n        }\n    },\n    \"extra_info\": {\n        \"any\": \"value\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/:uuid","description":"<p><strong>Note:</strong> It's possible to update running profiles; however, we recommend updating only stopped profiles for synchronization reasons.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles",":uuid"],"host":["/"],"query":[],"variable":[{"description":{"content":"<p>Profile UUID</p>\n","type":"text/plain"},"type":"any","value":"","key":"uuid"}]}},"response":[{"id":"84bd7b62-604f-4ab0-8bd0-11c26ee73491","name":"Update Profile","originalRequest":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"body":{"mode":"raw","raw":"{\n    \"tags\": [\n        \"facebook\"\n    ],\n    \"launch_args\": [\"--start-maximized\"],\n    \"bookmarks\": [{\n        \"name\": \"example\",\n        \"url\": \"https://example.com\"\n    }],\n    \"proxy\": null,\n    \"fingerprint\": {\n        \"user_agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36\",\n        \"screen\": \"2560x1440 (2K)\",\n        \"fonts\": [\n            \"Adobe Caslon Pro\",\n            \"Adobe Garamond\",\n            \"Al Bayan\",\n            \"Al Nile\",\n            \"Al Tarikh\",\n            \"American Typewriter\",\n            \"Andale Mono\",\n            \"Apple Braille\",\n            \"Apple Chancery\",\n            \"Apple Color Emoji\",\n            \"Apple Sd Gothic Neo\",\n            \"Apple Symbols\",\n            \"Applegothic\",\n            \"Applemyungjo\",\n            \"Arial\",\n            \"Arial Black\",\n            \"Arial Hebrew\",\n            \"Arial Hebrew Scholar\",\n            \"Arial Narrow\",\n            \"Arial Rounded Mt Bold\",\n            \"Arial Unicode Ms\",\n            \"Avenir\",\n            \"Avenir Next\",\n            \"Avenir Next Condensed\",\n            \"Ayuthaya\",\n            \"Baghdad\",\n            \"Bangla Mn\",\n            \"Bangla Sangam Mn\",\n            \"Baskerville\",\n            \"Baskerville Old Face\",\n            \"Beirut\",\n            \"Big Caslon\",\n            \"Bodoni 72\",\n            \"Bodoni 72 Oldstyle\",\n            \"Bodoni 72 Smallcaps\",\n            \"Bodoni Ornaments\",\n            \"Bradley Hand\",\n            \"Britannic Bold\",\n            \"Brush Script Mt\",\n            \"Candara\",\n            \"Century Gothic\",\n            \"Century Schoolbook\",\n            \"Chalkboard\",\n            \"Chalkboard Se\",\n            \"Chalkduster\",\n            \"Charter\",\n            \"Cochin\",\n            \"Comic Sans Ms\",\n            \"Constantia\",\n            \"Cooper Black\",\n            \"Copperplate\",\n            \"Copperplate Gothic Light\",\n            \"Corbel\",\n            \"Corsiva Hebrew\",\n            \"Courier\",\n            \"Courier New\",\n            \"Damascus\",\n            \"Decotype Naskh\",\n            \"Devanagari Mt\",\n            \"Devanagari Sangam Mn\",\n            \"Didot\",\n            \"Din Alternate\",\n            \"Din Condensed\",\n            \"Diwan Kufi\",\n            \"Diwan Thuluth\",\n            \"Engravers Mt\",\n            \"Euphemia Ucas\",\n            \"Fangsong\",\n            \"Farah\",\n            \"Farisi\",\n            \"Futura\",\n            \"Gb18030 Bitmap\",\n            \"Geeza Pro\",\n            \"Geneva\",\n            \"Georgia\",\n            \"Gill Sans\",\n            \"Gill Sans Mt\",\n            \"Gujarati Mt\",\n            \"Gujarati Sangam Mn\",\n            \"Gulim\",\n            \"Gurmukhi Mn\",\n            \"Gurmukhi Mt\",\n            \"Gurmukhi Sangam Mn\",\n            \"Heiti Sc\",\n            \"Heiti Tc\",\n            \"Helvetica\",\n            \"Helvetica Neue\",\n            \"Herculanum\",\n            \"Hiragino Kaku Gothic Pron\",\n            \"Hiragino Kaku Gothic Stdn\",\n            \"Hiragino Maru Gothic Pron\",\n            \"Hiragino Mincho Pron\",\n            \"Hiragino Sans\",\n            \"Hiragino Sans Gb\",\n            \"Hoefler Text\",\n            \"Impact\",\n            \"Imprint Mt Shadow\",\n            \"Inaimathi\",\n            \"Itf Devanagari\",\n            \"Itf Devanagari Marathi\",\n            \"Kailasa\",\n            \"Kaiti\",\n            \"Kannada Mn\",\n            \"Kannada Sangam Mn\",\n            \"Kefa\",\n            \"Khmer Mn\",\n            \"Khmer Sangam Mn\",\n            \"Kohinoor Bangla\",\n            \"Kohinoor Devanagari\",\n            \"Kohinoor Telugu\",\n            \"Kokonor\",\n            \"Krungthep\",\n            \"Kufistandardgk\",\n            \"Lao Mn\",\n            \"Lao Sangam Mn\",\n            \"Lucida Calligraphy\",\n            \"Lucida Grande\",\n            \"Lucida Sans Unicode\",\n            \"Luminari\",\n            \"Malayalam Mn\",\n            \"Malayalam Sangam Mn\",\n            \"Marker Felt\",\n            \"Marlett\",\n            \"Meiryo\",\n            \"Menlo\",\n            \"Microsoft Sans Serif\",\n            \"Microsoft Yahei\",\n            \"Mingliu_Hkscs\",\n            \"Mishafi\",\n            \"Mishafi Gold\",\n            \"Monaco\",\n            \"Ms Gothic\",\n            \"Mshtakan\",\n            \"Muna\",\n            \"Myanmar Mn\",\n            \"Myanmar Sangam Mn\",\n            \"Nadeem\",\n            \"New Peninim Mt\",\n            \"Noteworthy\",\n            \"Noto Nastaliq Urdu\",\n            \"Onyx\",\n            \"Optima\",\n            \"Oriya Mn\",\n            \"Oriya Sangam Mn\",\n            \"Palatino\",\n            \"Papyrus\",\n            \"Party Let\",\n            \"Phosphate\",\n            \"Pingfang Hk\",\n            \"Pingfang Sc\",\n            \"Pingfang Tc\",\n            \"Plantagenet Cherokee\",\n            \"Princetown Let\",\n            \"Pt Mono\",\n            \"Pt Sans\",\n            \"Pt Sans Caption\",\n            \"Pt Sans Narrow\",\n            \"Pt Serif\",\n            \"Pt Serif Caption\",\n            \"Raanana\",\n            \"Rockwell\",\n            \"Sana\",\n            \"Sathu\",\n            \"Savoye Let\",\n            \"Shree Devanagari 714\",\n            \"Signpainter\",\n            \"Silom\",\n            \"Sinhala Mn\",\n            \"Sinhala Sangam Mn\",\n            \"Skia\",\n            \"Snell Roundhand\",\n            \"Songti Sc\",\n            \"Songti Tc\",\n            \"Stencil\",\n            \"Stixgeneral\",\n            \"Stixintegralsd\",\n            \"Stixintegralssm\",\n            \"Stixintegralsup\",\n            \"Stixintegralsupd\",\n            \"Stixintegralsupsm\",\n            \"Stixnonunicode\",\n            \"Stixsizefivesym\",\n            \"Stixsizefoursym\",\n            \"Stixsizeonesym\",\n            \"Stixsizethreesym\",\n            \"Stixsizetwosym\",\n            \"Stixvariants\",\n            \"Stsong\",\n            \"Sukhumvit Set\",\n            \"Symbol\",\n            \"Tahoma\",\n            \"Tamil Mn\",\n            \"Tamil Sangam Mn\",\n            \"Telugu Mn\",\n            \"Telugu Sangam Mn\",\n            \"Thonburi\",\n            \"Times\",\n            \"Times New Roman\",\n            \"Trajan Pro\",\n            \"Trattatello\",\n            \"Trebuchet Ms\",\n            \"Verdana\",\n            \"Waseem\",\n            \"Webdings\",\n            \"Wingdings\",\n            \"Wingdings 2\",\n            \"Wingdings 3\",\n            \"Zapfino\"\n        ],\n        \"cpu\": 4,\n        \"ram\": 16,\n        \"renderer\": \"NVIDIA GeForce GT 750M\",\n        \"noise\": {\n            \"webgl\": true,\n            \"canvas\": false,\n            \"audio\": true,\n            \"client_rects\": false\n        },\n        \"media_devices\": {\n            \"video_in\": 1,\n            \"audio_in\": 1,\n            \"audio_out\": 1\n        },\n        \"webrtc\": {\n            \"type\": \"ip\"\n        },\n        \"languages\": {\n            \"type\": \"ip\"\n        },\n        \"timezone\": {\n            \"type\": \"ip\"\n        },\n        \"geolocation\": {\n            \"type\": \"ip\"\n        },\n        \"dns\": \"\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/profiles/:uuid","host":["/"],"path":["api","v2","automation","profiles",":uuid"],"variable":[{"key":"uuid","value":"","description":"Profile UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"d9623a2be9a0431784aacc4500d7963a\"\n    },\n    \"code\": null\n}\n"}],"_postman_id":"5f9a0daa-30ca-43ca-b2c9-1887eda00ea6"},{"name":"Import Cookies","id":"008904af-f5c7-4b3e-875d-3284ee597371","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"cookies\": [\n        {\n            \"domain\": \".google.com\",\n            \"expirationDate\": 1639134293.313654,\n            \"hostOnly\": false,\n            \"httpOnly\": false,\n            \"name\": \"1P_JAR\",\n            \"path\": \"/\",\n            \"sameSite\": \"no_restriction\",\n            \"secure\": true,\n            \"value\": \"2021-11-10-11\"\n        }\n    ]\n}"},"url":"//api/v2/automation/profiles/:uuid/import_cookies","description":"<h3 id=\"cookies-format\">Cookies format</h3>\n<p>We accept the following cookie formats:</p>\n<h4 id=\"json\">JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"domain\":\".google.com\",\n    \"expirationDate\":1639134293.313654,\n    \"hostOnly\":false,\n    \"httpOnly\":false,\n    \"name\":\"1P_JAR\",\n    \"path\":\"/\",\n    \"sameSite\":\"no_restriction\",\n    \"secure\":true,\n    \"value\":\"2021-11-10-11\"\n  }\n]\n\n</code></pre>\n<h4 id=\"mozilla\">Mozilla</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"Path raw\":\"/\",\n    \"Samesite raw\":\"no_restriction\",\n    \"Name raw\":\"NID\",\n    \"Content raw\":\"2021-11-10-11\",\n    \"Expires raw\":\"1639134293\",\n    \"Host raw\":\"https://.google.com/\",\n    \"This domain only raw\":\"false\",\n    \"HTTP only raw\":\"false\",\n    \"Send for raw\":\"true\"\n  }\n]\n\n</code></pre>\n<h4 id=\"netscape\">Netscape</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>.google.com    TRUE    /    TRUE    1639134293    1P_JAR    2021-11-10-1    544\n\n</code></pre><blockquote>\n<p>Each value must be tab (<strong>\\t</strong>) separated. </p>\n</blockquote>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>.google.com\\tTRUE\\t/\\tTRUE\\t1639134293\\t1P_JAR\\t2021-11-10-1\\t544\n\n</code></pre><h3 id=\"request-format\">Request format</h3>\n<h4 id=\"json-1\">JSON</h4>\n<p><strong>cookies</strong> field allows a string or JSON-array</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"cookies\": \"cookie of permitted format\"\n}\n\n</code></pre>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"cookies\": [...]\n}\n\n</code></pre>\n<h4 id=\"file\">File</h4>\n<p>you can send cookies in MultipartFormdata format in the <em><strong>cookies</strong></em> field</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles",":uuid","import_cookies"],"host":["/"],"query":[],"variable":[{"description":{"content":"<p>Profile UUID</p>\n","type":"text/plain"},"type":"any","value":"","key":"uuid"}]}},"response":[{"id":"b335a525-3856-41a3-b60c-9c7abed7ea39","name":"JSON Cookies","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"body":{"mode":"raw","raw":"{\n    \"cookies\": [\n        {\n            \"domain\": \".google.com\",\n            \"expirationDate\": 1639134293.313654,\n            \"hostOnly\": false,\n            \"httpOnly\": false,\n            \"name\": \"1P_JAR\",\n            \"path\": \"/\",\n            \"sameSite\": \"no_restriction\",\n            \"secure\": true,\n            \"value\": \"2021-11-10-11\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/profiles/:uuid/import_cookies","host":["/"],"path":["api","v2","automation","profiles",":uuid","import_cookies"],"variable":[{"key":"uuid","value":"","description":"Profile UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 17 Nov 2021 17:31:14 GMT"},{"key":"Content-Type","value":"application/json","description":""},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"Expect-CT","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=cfEswVXDBC5ghoRph3bVyNSt1daZr%2Fn1QYaQ8cLqfONXxR5IBeOzyeu%2B0b9n1fJUxhV0B3%2FuvmgDxx9nCfzqNzMq6cSrjqQORhCz8z825tx6PCHqKrZ0iKir9DdtMOQSevQQ0OM%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}"},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"6afab103d820c3ca-LED"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Cookies imported\",\n    \"data\": \"\"\n}"},{"id":"f1fa1817-d7fd-4e5f-bc52-e5506b680319","name":"Mozilla Cookies","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"body":{"mode":"raw","raw":"{\n    \"cookies\": [\n        {\n            \"Path raw\":\"/\",\n            \"Samesite raw\":\"no_restriction\",\n            \"Name raw\":\"NID\",\n            \"Content raw\":\"2021-11-10-11\",\n            \"Expires raw\":\"1639134293\",\n            \"Host raw\":\"https://.google.com/\",\n            \"This domain only raw\":\"false\",\n            \"HTTP only raw\":\"false\",\n            \"Send for raw\":\"true\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/profiles/:uuid/import_cookies","host":["/"],"path":["api","v2","automation","profiles",":uuid","import_cookies"],"variable":[{"key":"uuid","value":"","description":"Profile UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 17 Nov 2021 17:31:14 GMT"},{"key":"Content-Type","value":"application/json","description":""},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"Expect-CT","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=cfEswVXDBC5ghoRph3bVyNSt1daZr%2Fn1QYaQ8cLqfONXxR5IBeOzyeu%2B0b9n1fJUxhV0B3%2FuvmgDxx9nCfzqNzMq6cSrjqQORhCz8z825tx6PCHqKrZ0iKir9DdtMOQSevQQ0OM%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}"},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"6afab103d820c3ca-LED"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Cookies imported\",\n    \"data\": \"\"\n}"},{"id":"a0360ade-94ef-434d-94f3-531fba5932e2","name":"Netscape Cookies","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"body":{"mode":"raw","raw":"{\n    \"cookies\": \"some.host\\tTRUE\\t/\\tTRUE\\t123\\tname\\tvalue\\nsome2.host\\tTRUE\\t/\\tTRUE\\t111\\tname2\\tvalue2\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/profiles/:uuid/import_cookies","host":["/"],"path":["api","v2","automation","profiles",":uuid","import_cookies"],"variable":[{"key":"uuid","value":"","description":"Profile UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 28 Feb 2022 08:19:21 GMT"},{"key":"Content-Type","value":"application/json","description":""},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"Expect-CT","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=24HnIeC%2BLLiIkNPRPL%2FQsU6q44d45DRXbJ4WunVpyOmfU7jJMRSG%2B%2BVUHgLhDU7duoH2nXZ7iDIkn3SoLMv3k%2Fu%2BMZH9j43WVXai%2FXOBKvx5tqCNb5TaEKf6IXW0N%2FhbnlaRMTI%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}"},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"6e483a3afe440c42-DME"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Cookies imported\",\n    \"data\": \"\"\n}"},{"id":"19f8bf14-8045-470f-8514-9632c890f9d4","name":"Cookies file","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"body":{"mode":"formdata","formdata":[{"key":"cookies","type":"file"}]},"url":{"raw":"//api/v2/automation/profiles/:uuid/import_cookies","host":["/"],"path":["api","v2","automation","profiles",":uuid","import_cookies"],"variable":[{"key":"uuid","value":"{PROFILE_UUID}","description":"Profile UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"Date","value":"Wed, 17 Nov 2021 17:31:14 GMT"},{"key":"Content-Type","value":"text/html; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"Expect-CT","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=cfEswVXDBC5ghoRph3bVyNSt1daZr%2Fn1QYaQ8cLqfONXxR5IBeOzyeu%2B0b9n1fJUxhV0B3%2FuvmgDxx9nCfzqNzMq6cSrjqQORhCz8z825tx6PCHqKrZ0iKir9DdtMOQSevQQ0OM%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}"},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"6afab103d820c3ca-LED"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\r\n    \"success\": true,\r\n    \"msg\": \"Cookies imported\",\r\n    \"data\": \"\"\r\n}"}],"_postman_id":"008904af-f5c7-4b3e-875d-3284ee597371"},{"name":"Transfer profiles","id":"b2ac8c2e-648e-4b24-b244-6219acebdf41","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\n        \"\"\n    ],\n    \"receiver_email\": \"{{USER_ACCOUNT}}\",\n    \"transfer_proxy\": true\n}"},"url":"//api/v2/automation/profiles/transfer","description":"<p>This transfers profiles from one account to another.<br /><strong>Note:</strong> The maximum profiles count limit is 100 entries at once.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles","transfer"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"7238dff8-47aa-4a0b-8e22-ff6a797c2379","name":"Transfer with proxy","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\n        \"cb4de994eb5e4f2b9b56f7d0ac92d0ae\"\n    ],\n    \"receiver_email\": \"uywez34@mailto.plus\",\n    \"transfer_proxy\": true\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/transfer"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles transferred successfully\",\n    \"data\": \"\"\n}"},{"id":"5c8a34eb-1b44-4175-8884-02e8187077c0","name":"Transfer without proxy","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\n        \"cb4de994eb5e4f2b9b56f7d0ac92d0ae\"\n    ],\n    \"receiver_email\": \"uywez34@mailto.plus\",\n    \"transfer_proxy\": false\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/transfer"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles transferred successfully\",\n    \"data\": \"\"\n}"}],"_postman_id":"b2ac8c2e-648e-4b24-b244-6219acebdf41"},{"name":"Force Stop Profile","id":"26541a84-815e-4e11-aa9e-4b2d6dceda95","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"<p>Api token</p>\n"}],"body":{"mode":"raw","raw":"{\n    \"version\": 1 // [optional]\n}"},"url":"//api/v2/automation/profiles/:uuid/force_stop","description":"<p>This forcibly stops the currently active profile. If you store this profile's version on your side, you can additionally specify the optional \"version\" parameter to perform the version consistency check; otherwise the version parameter should be null, which will be enough for most cases.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles",":uuid","force_stop"],"host":["/"],"query":[],"variable":[{"description":{"content":"<p>Profile UUID </p>\n","type":"text/plain"},"type":"any","value":"","key":"uuid"}]}},"response":[{"id":"896e9e96-067f-492a-b390-ae3387deece9","name":"Force Stop Profile","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"Api token"}],"body":{"mode":"raw","raw":"{\n    \"version\": null\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/profiles/:uuid/force_stop","host":["/"],"path":["api","v2","automation","profiles",":uuid","force_stop"],"variable":[{"key":"uuid","value":"","description":"Profile UUID "}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profile stopped\",\n    \"data\": \"\"\n}"},{"id":"6ef7daf7-394d-4c74-9078-8ca0a22fa6a8","name":"Force Stop Profile (with consistency check)","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"Api token"}],"body":{"mode":"raw","raw":"{\n    \"version\": 1\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/profiles/:uuid/force_stop","host":["/"],"path":["api","v2","automation","profiles",":uuid","force_stop"],"variable":[{"key":"uuid","value":"","description":"Profile UUID "}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profile stopped\",\n    \"data\": \"\"\n}"}],"_postman_id":"26541a84-815e-4e11-aa9e-4b2d6dceda95"},{"name":"Mass Force Stop Profile","id":"7dbbad11-7f50-4247-9fa2-4c0e74a0b06f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"<p>Api token</p>\n"}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\"{PROFILE_UUID}\"]\n}"},"url":"//api/v2/automation/profiles/force_stop","description":"<p>This forcibly stops the currently active profile. If you store this profile's version on your side, you can additionally specify the optional \"version\" parameter to perform the version consistency check; otherwise the version parameter should be null, which will be enough for most cases.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles","force_stop"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"87c913dd-3405-4711-913b-7b457ae9db62","name":"Force Stop Profile Stop Error","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"Api token"}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\"{PROFILE_UUID}\"]\n}"},"url":"//api/v2/automation/profiles/force_stop"},"status":"BAD REQUEST","code":400,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"gunicorn"},{"key":"Date","value":"Tue, 17 Sep 2024 12:54:44 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"139"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Retry-After","value":"0"},{"key":"X-Ratelimit-Limit","value":"200"},{"key":"X-Ratelimit-Limit-Hour","value":"3000"},{"key":"X-Ratelimit-Remaining","value":"194"},{"key":"X-Ratelimit-Remaining-Hour","value":"2999"},{"key":"X-Ratelimit-Reset","value":"1726577744"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": false,\n    \"msg\": \"Bulk force stop error\",\n    \"code\": \"profiles.stop_error\",\n    \"data\": {\n        \"failed\": [\n            \"4b8afed25a524f5aa1dc2922279622f8\"\n        ]\n    }\n}"},{"id":"ddb03215-b85d-44f4-ad3e-7a0c60cb0242","name":"Force Stop Profile Success","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"","description":"Api token"}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\"{PROFILE_UUID}\"]\n}"},"url":"//api/v2/automation/profiles/force_stop"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"gunicorn"},{"key":"Date","value":"Tue, 17 Sep 2024 12:57:28 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"81"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Retry-After","value":"0"},{"key":"X-Ratelimit-Limit","value":"200"},{"key":"X-Ratelimit-Limit-Hour","value":"3000"},{"key":"X-Ratelimit-Remaining","value":"193"},{"key":"X-Ratelimit-Remaining-Hour","value":"2997"},{"key":"X-Ratelimit-Reset","value":"1726577908"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles stopped successfully\",\n    \"data\": {\n        \"failed\": []\n    }\n}"}],"_postman_id":"7dbbad11-7f50-4247-9fa2-4c0e74a0b06f"},{"name":"Get Export profiles","id":"dd02940a-759e-48e6-8381-eb0f085eb51c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"url":"//api/v2/automation/profiles/export?page=0&page_len=10","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles","export"],"host":["/"],"query":[{"key":"page","value":"0"},{"key":"page_len","value":"10"}],"variable":[]}},"response":[{"id":"215a7a7c-5046-45ed-9ecd-aecdf1c6755f","name":"Get Export profiles","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"//api/v2/automation/profiles/export?page=0&page_len=10","host":["/"],"path":["api","v2","automation","profiles","export"],"query":[{"key":"page","value":"0"},{"key":"page_len","value":"10"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 11 Dec 2023 11:13:58 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"access-control-allow-origin","value":"*"},{"key":"retry-after","value":"0"},{"key":"x-ratelimit-limit","value":"250"},{"key":"x-ratelimit-limit-hour","value":"200"},{"key":"x-ratelimit-remaining","value":"248"},{"key":"x-ratelimit-remaining-hour","value":"196"},{"key":"x-ratelimit-reset","value":"1702293239"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"833d4d209981390e-IAD"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"data\": [\n            {\n                \"uuid\": \"{UUID}\",\n                \"title\": \"{profile_title}\",\n                \"data\": \"JGFlc19nY20kJFpkbkZ6WWlOTVROejNCRnhwVDBuanZJcWp6a0lLemNvV2VpWXEvLkdETC40WFF1QmdwYnlNampRcTRzZ1JSUmJqWHhKMjNWbnVITUxuL1ZTMTBCT1BmaVZZS0E=\"\n            }\n        ],\n        \"total\": 1,\n        \"page\": 0\n    }\n}"}],"_postman_id":"dd02940a-759e-48e6-8381-eb0f085eb51c"},{"name":"Get Export profile","id":"30b9aeee-4ea4-408d-b623-b96aeaa05d97","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"url":"//api/v2/automation/profiles/export/:uuid","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles","export",":uuid"],"host":["/"],"query":[],"variable":[{"id":"8a785456-e32a-4813-be5d-1b3e209404fb","type":"any","value":"","key":"uuid"}]}},"response":[{"id":"3908150b-e80e-4d11-914d-c64e6b6cf8bb","name":"Get Export profile","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"url":{"raw":"//api/v2/automation/profiles/export/:uuid","host":["/"],"path":["api","v2","automation","profiles","export",":uuid"],"variable":[{"key":"uuid","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 11 Dec 2023 11:15:05 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"access-control-allow-origin","value":"*"},{"key":"retry-after","value":"0"},{"key":"x-ratelimit-limit","value":"250"},{"key":"x-ratelimit-limit-hour","value":"200"},{"key":"x-ratelimit-remaining","value":"249"},{"key":"x-ratelimit-remaining-hour","value":"195"},{"key":"x-ratelimit-reset","value":"1702293365"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"833d4ec67992207e-IAD"},{"key":"Content-Encoding","value":"gzip"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"{UUID}\",\n        \"title\": \"{profile_title}\",\n        \"data\": \"JGFlc19nY20kJDMvMzBKcW12d2tXYi91UlRNL1ZHNFNTZEROYUlKSC5wbDRwWTdkaFlac0pBRUE4dkpVOXVRclhnWnpPT3N5eUtUOUlKOGMveTZkekpmemRPMEFMd3Z0YnBsenM=\"\n    }\n}"}],"_postman_id":"30b9aeee-4ea4-408d-b623-b96aeaa05d97"},{"name":"Export profiles","id":"3103faac-33f7-40d3-945a-137b87d3fea1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"export_proxy\": false,\r\n    \"uuids\": [\r\n        \"\"\r\n    ]\r\n}"},"url":"//api/v2/automation/profiles/export","description":"<p>Up to 100 profiles per request allowed.</p>\n<p>In the event of duplicate UUIDs in a request, they will be disregarded without any notifications.</p>\n<p><strong>This is a paid-for action that costs 0,5 tokens per profile.</strong></p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles","export"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"7c2de146-3017-449c-91dc-d3b611a289a3","name":"Export profiles with proxy","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"export_proxy\": true,\r\n    \"uuids\": [\r\n        \"\"\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/export"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"gunicorn/20.0.4"},{"key":"Date","value":"Tue, 28 Nov 2023 13:09:48 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"325"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Retry-After","value":"0"},{"key":"X-Ratelimit-Limit","value":"600"},{"key":"X-Ratelimit-Limit-Hour","value":"10000"},{"key":"X-Ratelimit-Remaining","value":"596"},{"key":"X-Ratelimit-Remaining-Hour","value":"9998"},{"key":"X-Ratelimit-Reset","value":"1701177047"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles exported successfully\",\n    \"data\": {\n        \"exported\": [\n            {\n                \"uuid\": \"{UUID}\",\n                \"title\": \"{profile_title}\",\n                \"data\": \"MEYCIQDcEhji9E69bcOC1853v0zlXIP8kq6ecKwdcejBYkagrwIhAPUU/65bZqoT74AiqKT4IVuKK26zkBN2M9HTFJoZC4rS\"\n            }\n        ],\n        \"failed\": []\n    }\n}"},{"id":"90843d3c-8960-41be-a149-102535867819","name":"Export profiles without proxy","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"export_proxy\": false,\r\n    \"uuids\": [\r\n        \"\"\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/export"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"gunicorn/20.0.4"},{"key":"Date","value":"Tue, 28 Nov 2023 13:11:49 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"325"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Retry-After","value":"0"},{"key":"X-Ratelimit-Limit","value":"600"},{"key":"X-Ratelimit-Limit-Hour","value":"10000"},{"key":"X-Ratelimit-Remaining","value":"596"},{"key":"X-Ratelimit-Remaining-Hour","value":"9997"},{"key":"X-Ratelimit-Reset","value":"1701177168"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles exported successfully\",\n    \"data\": {\n        \"exported\": [\n            {\n                \"uuid\": \"{UUID}\",\n                \"title\": \"{profile_title}\",\n                \"data\": \"MEYCIQDcEhji9E69bcOC1853v0zlXIP8kq6ecKwdcejBYkagrwIhAPUU/65bZqoT74AiqKT4IVuKK26zkBN2M9HTFJoZC4rS\"\n            }\n        ],\n        \"failed\": []\n    }\n}"}],"_postman_id":"3103faac-33f7-40d3-945a-137b87d3fea1"},{"name":"Import profiles","id":"d888f029-5c6e-458b-b115-cb75f2c7cb71","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"data\": [\r\n        \"<export_data>\"\r\n    ]\r\n}"},"url":"//api/v2/automation/profiles/import","description":"<p>Up to 100 profiles per request allowed.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles","import"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"b5c38939-4f5c-46f1-a258-3542554a23d7","name":"Import profiles encoded string","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"data\": [\r\n        \"JGFlc19nY20kJE1mUk9tVS5KUGhrZmZyeGVCcGpzQ1VDa2xOUWRtcGdtVXc2WGdnMldqNWU5bFdHcGFnME5LSzZQa1BZLndsdnZEMWRZdHRudG5GdW5xakk5aUxyRWIycHhWdw==\"\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/import"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"gunicorn/20.0.4"},{"key":"Date","value":"Tue, 28 Nov 2023 13:16:44 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"70"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles imported successfully\",\n    \"data\": {\n        \"failed\": []\n    }\n}"},{"id":"67f64c25-b1f9-43b3-9984-9a706aa64bc7","name":"Import profiles new file","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"data\": [\r\n        {\r\n\t\t\t\"uuid\": \"761c6c15b2e44545851061555c665319\",\r\n\t\t\t\"title\": \"[Imported] Quick bouncy-reception\",\r\n\t\t\t\"data\": \"JGFlc19nY20kJE1mUk9tVS5KUGhrZmZyeGVCcGpzQ1VDa2xOUWRtcGdtVXc2WGdnMldqNWU5bFdHcGFnME5LSzZQa1BZLndsdnZEMWRZdHRudG5GdW5xakk5aUxyRWIycHhWdw==\"\r\n\t\t}\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/import"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"gunicorn/20.0.4"},{"key":"Date","value":"Tue, 28 Nov 2023 13:16:44 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"70"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles imported successfully\",\n    \"data\": {\n        \"failed\": []\n    }\n}"},{"id":"ddad1824-d8a2-4705-ba7d-7e25e3246384","name":"Import profiles old file","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"data\": [\r\n        {\r\n\t\t\t\"data\": \"{\\\"title\\\": \\\"[Imported] Quick rosy-chairlift\\\", \\\"exported_at\\\": \\\"2023-12-06 08:58:38\\\", \\\"profile\\\": \\\"gAAAAABlcDhTKzTeRIj2pGHBg-zJggNGMsekvt2DT47uM_iZYua9yoEmov0x3ZQKOu-XSWjgMGLL3CAC8rN92zyj-qOBVw3bnA==\\\"}\",\r\n\t\t\t\"signature\": \"MEUCIQD4ynaphY6R0TjQPz6hb5cmPaN5W+5pguRT65a6KB4r/gIgDOOcLfRvhrmeYHSpRIKSnjaziXM6lrS1OvVm86vxKVk=\"\r\n\t\t}\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/import"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"gunicorn/20.0.4"},{"key":"Date","value":"Tue, 28 Nov 2023 13:16:44 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"70"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Profiles imported successfully\",\n    \"data\": {\n        \"failed\": []\n    }\n}"}],"_postman_id":"d888f029-5c6e-458b-b115-cb75f2c7cb71"},{"name":"Set Profiles Password","id":"0a9bb446-d261-4282-a05c-55d2aa2e7e54","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":"<GET_TOKEN_IN_CLIENT>"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"profiles\": [\"uuid\",\"uuid\"],\r\n    \"password\": \"password\",\r\n    \"old_password\": \"old_password\" \r\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/set_password","description":"<p>Set password for profiles by given list of profiles uuids. In case of setting new password it is necessary to provide old password.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles","set_password"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"4a8db2a7-29ee-4efe-b0ea-eb52af335dc8","name":"Set Profiles Password","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":"<GET_TOKEN_IN_CLIENT>"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"profiles\": [\"uuid\",\"uuid\"],\r\n    \"password\": \"password\",\r\n    \"old_password\": \"old_password\" \r\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/profiles/set_password"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\r\n  \"success\": true,\r\n  \"msg\": \"Password has been set for selected profiles\",\r\n  \"data\": \"\"\r\n}"}],"_postman_id":"0a9bb446-d261-4282-a05c-55d2aa2e7e54"},{"name":"Clear Profile Password","id":"61e5ec73-3125-4c11-a582-2165f6d9f4a5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":"<GET_TOKEN_IN_CLIENT>"},{"key":"Content-Type","value":"application/json"}],"url":"//api/v2/automation/profiles/:uuid/clear_password","description":"<p>Unset password for profile by given profile uuid. Password required.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","name":"Profiles","type":"folder"}},"urlObject":{"path":["api","v2","automation","profiles",":uuid","clear_password"],"host":["/"],"query":[],"variable":[{"id":"362fd00c-23df-4ae5-8373-1442bceaf3d3","description":{"content":"<p>Profile UUID</p>\n","type":"text/plain"},"type":"any","value":"","key":"uuid"}]}},"response":[{"id":"28e59298-5f41-48d0-a8d9-381624f7c517","name":"Clear Profile Password","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":"<GET_TOKEN_IN_CLIENT>"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n    \"password\": \"current_profile_password\"\r\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/profiles/:uuid/clear_password","host":["/"],"path":["api","v2","automation","profiles",":uuid","clear_password"],"variable":[{"key":"uuid","value":"","description":"Profile UUID"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{ \r\n    \"success\": true,\r\n    \"msg\": \"Password has been cleared\",\r\n    \"data\": \"\"\r\n}"}],"_postman_id":"61e5ec73-3125-4c11-a582-2165f6d9f4a5"}],"id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","auth":{"type":"noauth","isInherited":false},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"f98d459f-167e-4dc3-9f7c-3bf15b43fdab"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"8248598e-3ade-47cc-ac7c-457f3cab1c70"}}],"_postman_id":"08c74e9e-43d6-46d9-a689-b78e19d29a0c","description":""},{"name":"Tags","item":[{"name":"Get Tags","id":"5f552375-0eeb-4dd8-a479-75c0ad44aa60","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/tags","urlObject":{"path":["api","v2","automation","tags"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"d467fad7-5c3c-46b8-83af-a57576be6c30","name":"Get Tags","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/tags"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": [\n        {\n            \"uuid\": \"3524ff6e3f0245ffbbcb5ea3d0446a8e\",\n            \"name\": \"aaaa\",\n            \"color\": \"grey\"\n        },\n        {\n            \"uuid\": \"07fd5038fc0743cd955d963a19edb3d9\",\n            \"name\": \"facebook\",\n            \"color\": \"blue\"\n        },\n        {\n            \"uuid\": \"ab1391ce01aa46fcbdd9d02a4569bec4\",\n            \"name\": \"google\",\n            \"color\": \"yellow\"\n        },\n        {\n            \"uuid\": \"7891009afee84952a926b03e7bc0af52\",\n            \"name\": \"octo\",\n            \"color\": \"orange\"\n        }\n    ]\n}"}],"_postman_id":"5f552375-0eeb-4dd8-a479-75c0ad44aa60"},{"name":"Create Tag","id":"9fe015c7-31b0-495c-b80b-9682544a718e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"name\": \"supertag\",\n    \"color\": \"blue\" //optional\n}"},"url":"//api/v2/automation/tags","description":"<p><strong>Available colors for tags:</strong><br />grey blue cyan orange green purple red yellow</p>\n","urlObject":{"path":["api","v2","automation","tags"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"9137b9d8-8eee-4cfe-9c95-ed60dc40aa4e","name":"Create Tag","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"name\": \"supertag\",\n    \"color\": \"blue\" //optional\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/tags"},"status":"CREATED","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"ab003313e690425cb1f01e67b9b3a5da\",\n        \"name\": \"supertag\",\n        \"color\": \"blue\"\n    }\n}"}],"_postman_id":"9fe015c7-31b0-495c-b80b-9682544a718e"},{"name":"Remove Tag","id":"77e37e26-8bf5-42d8-8847-18b662c4d329","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/tags/:uuid","urlObject":{"path":["api","v2","automation","tags",":uuid"],"host":["/"],"query":[],"variable":[{"description":{"content":"<p>Tag UUID</p>\n","type":"text/plain"},"type":"any","value":"8e7c08beb89f4366aa854bdbd7473702","key":"uuid"}]}},"response":[{"id":"17a853bd-c606-4742-9959-73f573d8ce45","name":"Remove Tag","originalRequest":{"method":"DELETE","header":[{"key":"X-Octo-Api-Token","value":""}],"url":{"raw":"//api/v2/automation/tags/:uuid","host":["/"],"path":["api","v2","automation","tags",":uuid"],"variable":[{"key":"uuid","value":"8e7c08beb89f4366aa854bdbd7473702","description":"Tag UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": \"\"\n}"}],"_postman_id":"77e37e26-8bf5-42d8-8847-18b662c4d329"},{"name":"Update Tag","id":"8a48ebbe-bad8-444c-b531-f021a66751fe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"name\": \"supertag1\",\n    \"color\": \"orange\" //optional\n}"},"url":"//api/v2/automation/tags/:uuid","urlObject":{"path":["api","v2","automation","tags",":uuid"],"host":["/"],"query":[],"variable":[{"description":{"content":"<p>Tag UUID</p>\n","type":"text/plain"},"type":"any","value":"8e7c08beb89f4366aa854bdbd7473702","key":"uuid"}]}},"response":[{"id":"f4f58cd1-0d33-4fd1-85c6-8b3b1a32fceb","name":"Update Tag","originalRequest":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"name\": \"supertag1\",\n    \"color\": \"orange\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/tags/:uuid","host":["/"],"path":["api","v2","automation","tags",":uuid"],"variable":[{"key":"uuid","value":"8e7c08beb89f4366aa854bdbd7473702","description":"Tag UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"ab003313e690425cb1f01e67b9b3a5da\",\n        \"name\": \"supertag1\",\n        \"color\": \"orange\"\n    }\n}"}],"_postman_id":"8a48ebbe-bad8-444c-b531-f021a66751fe"}],"id":"09c7c94f-0033-4b7c-b71f-3a064f00776a","_postman_id":"09c7c94f-0033-4b7c-b71f-3a064f00776a","description":""},{"name":"Proxies","item":[{"name":"Get Proxies","id":"07a33d6b-e154-45d2-83ed-dc86bdf3e144","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/proxies","urlObject":{"path":["api","v2","automation","proxies"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"89ab0403-cd64-49f2-9bdb-b45d52b930b3","name":"Get Proxies","originalRequest":{"method":"GET","header":[{"description":"API Token","key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/proxies"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 19 Sep 2022 11:13:49 GMT","enabled":true},{"key":"Content-Type","value":"application/json","enabled":true},{"key":"Transfer-Encoding","value":"chunked","enabled":true},{"key":"Connection","value":"keep-alive","enabled":true},{"key":"access-control-allow-origin","value":"*","enabled":true},{"key":"retry-after","value":"60","enabled":true},{"key":"x-ratelimit-limit","value":"250","enabled":true},{"key":"x-ratelimit-remaining","value":"249","enabled":true},{"key":"x-ratelimit-reset","value":"1663586090","enabled":true},{"key":"CF-Cache-Status","value":"DYNAMIC","enabled":true},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=0q27NDr%2BFV7CHzqNtnm97%2BmsquMdyvLExyYNnzcuFlO%2FpKCSsD5a11MUYsdiV6QKIDZ%2F6TbLWuEeetWiKHH3Z5Q7XWlOSO9%2Fs0nxThs60BJl6YsnoDm81NqjoyLa5BzBQv4O1CY%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"Server","value":"cloudflare","enabled":true},{"key":"CF-RAY","value":"74d1e4e98cee9d4f-DME","enabled":true},{"key":"Content-Encoding","value":"gzip","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": [\n        {\n            \"uuid\": \"963d30cb2d7247c89da222c8a9dcab29\",\n            \"type\": \"socks5\",\n            \"port\": 29801,\n            \"host\": \"localhost\",\n            \"login\": \"some_login\",\n            \"password\": \"some_password\",\n            \"change_ip_url\": \"https://localhost/api/v1/change-ip?uuid=c26dc4d6-0de7-4aeb-bbef-de3d98362f4e\",\n            \"external_id\": null,\n            \"profiles_count\": 0,\n            \"title\": \"example proxy\"\n        }\n    ]\n}"}],"_postman_id":"07a33d6b-e154-45d2-83ed-dc86bdf3e144"},{"name":"Create Proxy","id":"e9a733e7-11c7-43b7-95d0-85b6ad338588","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"type\": \"socks\",\n    \"host\": \"localhost\",\n    \"port\": 1081,\n    \"login\": \"user\", // [optional]\n    \"password\": \"secret111\", // [optional]\n    \"title\": \"super proxy\",\n    \"change_ip_url\": \"http://example.com\", // [optional]\n    \"external_id\": \"12345\" // [optional]\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/proxies","urlObject":{"path":["api","v2","automation","proxies"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"71331bc8-2355-464e-bb63-3b4dc94271f8","name":"Create Proxy","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"description":"API Token","key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"type\": \"socks\",\n    \"host\": \"localhost\",\n    \"port\": 1081,\n    \"login\": \"user\",\n    \"password\": \"secret111\",\n    \"title\": \"super proxy\",\n    \"change_ip_url\": \"http://localhost:1082/change_ip\",\n    \"external_id\": \"my_custom_id=1\"\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/proxies"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 19 Sep 2022 11:16:26 GMT","enabled":true},{"key":"Content-Type","value":"application/json","enabled":true},{"key":"Content-Length","value":"306","enabled":true},{"key":"Connection","value":"keep-alive","enabled":true},{"key":"access-control-allow-origin","value":"*","enabled":true},{"key":"retry-after","value":"60","enabled":true},{"key":"x-ratelimit-limit","value":"250","enabled":true},{"key":"x-ratelimit-remaining","value":"249","enabled":true},{"key":"x-ratelimit-reset","value":"1663586247","enabled":true},{"key":"CF-Cache-Status","value":"DYNAMIC","enabled":true},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=1HtU2ry2W72GLuJ0FNJf%2FB8jBx2OwFjEn5H5XxtC%2FxDqNe7uBpDdT8tsSfT2%2Bli50mX3WiHGI57YZbeu4ihTte67mON9N7U1Qu9KvMmJSdlMp5oYSs1FOgymZluB3UYrYgBFPy8%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"Server","value":"cloudflare","enabled":true},{"key":"CF-RAY","value":"74d1e8bf7b871646-DME","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": {\n        \"uuid\": \"789f4d3f898d4e10acf2bebd249fcf95\",\n        \"type\": \"socks\",\n        \"port\": 1081,\n        \"host\": \"localhost\",\n        \"login\": \"user\",\n        \"password\": \"secret111\",\n        \"change_ip_url\": \"http://localhost:1082/change_ip\",\n        \"external_id\": \"my_custom_id=1\",\n        \"profiles_count\": 0,\n        \"title\": \"super proxy\"\n    }\n}"}],"_postman_id":"e9a733e7-11c7-43b7-95d0-85b6ad338588"},{"name":"Remove Proxy","id":"c588e9db-fd57-4d88-9551-4307f1f398fc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/proxies/:uuid","urlObject":{"path":["api","v2","automation","proxies",":uuid"],"host":["/"],"query":[],"variable":[{"id":"575c4a8b-1085-4300-a3d3-8c8d0fb1b457","description":{"content":"<p>Proxy UUID</p>\n","type":"text/plain"},"type":"any","value":"6cbecae429ba48d48836f22baf0e99a0","key":"uuid"}]}},"response":[{"id":"7089144b-e2df-4553-977d-fc2cee41259e","name":"Remove Proxy","originalRequest":{"method":"DELETE","header":[{"description":"API Token","key":"X-Octo-Api-Token","value":""}],"url":{"raw":"//api/v2/automation/proxies/:uuid","host":["/"],"path":["api","v2","automation","proxies",":uuid"],"variable":[{"id":"575c4a8b-1085-4300-a3d3-8c8d0fb1b457","key":"uuid","value":"6cbecae429ba48d48836f22baf0e99a0","description":"Proxy UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 19 Sep 2022 11:16:58 GMT","enabled":true},{"key":"Content-Type","value":"application/json","enabled":true},{"key":"Content-Length","value":"40","enabled":true},{"key":"Connection","value":"keep-alive","enabled":true},{"key":"access-control-allow-origin","value":"*","enabled":true},{"key":"retry-after","value":"59","enabled":true},{"key":"x-ratelimit-limit","value":"250","enabled":true},{"key":"x-ratelimit-remaining","value":"248","enabled":true},{"key":"x-ratelimit-reset","value":"1663586278","enabled":true},{"key":"CF-Cache-Status","value":"DYNAMIC","enabled":true},{"key":"Report-To","value":"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=o5kar3sE3jLR503x8i2nxcByBreOqyw9n1y3DgV7hAHQTHLQgBb98t%2BsNHY99m6ptbpnHy1Q4BRkmN0DW84IXenkPqIA%2Bm8dgAque%2F5RsAerLHeyo6%2BfouVQhn1pd4ymSxWDMWs%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"NEL","value":"{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}","enabled":true},{"key":"Server","value":"cloudflare","enabled":true},{"key":"CF-RAY","value":"74d1e9862c2a1646-DME","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": \"\"\n}"}],"_postman_id":"c588e9db-fd57-4d88-9551-4307f1f398fc"},{"name":"Update Proxy","id":"0629a3f9-938d-4365-971f-c2b1c93438f4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"description":"<p>API Token</p>\n","key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"type\": \"socks\", // [optional]\n    \"host\": \"localhost\", // [optional]\n    \"port\": 1081, // [optional]\n    \"login\": \"user\", // [optional]\n    \"password\": \"secret111\", // [optional]\n    \"title\": \"new title\", // [optional]\n    \"change_ip_url\": \"http://example.com\", // [optional]\n    \"external_id\": \"12345\" // [optional]\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/proxies/:uuid","urlObject":{"path":["api","v2","automation","proxies",":uuid"],"host":["/"],"query":[],"variable":[{"description":{"content":"<p>Proxy UUID</p>\n","type":"text/plain"},"type":"any","value":"6cbecae429ba48d48836f22baf0e99a0","key":"uuid"}]}},"response":[{"id":"bd82fb52-1036-40aa-9aae-fb8d66c78aa3","name":"Update Proxy","originalRequest":{"method":"PATCH","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Octo-Api-Token","value":"{API_TOKEN}"}],"body":{"mode":"raw","raw":"{\n    \"title\": \"new title\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"//api/v2/automation/proxies/:uuid","host":["/"],"path":["api","v2","automation","proxies",":uuid"],"variable":[{"key":"uuid","value":"6cbecae429ba48d48836f22baf0e99a0","description":"Proxy UUID"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n   \"success\": true,\n   \"msg\": \"\",\n   \"data\": {\n     \"uuid\": \"5246b94778f549859e2e6577d98d90aa\",\n     \"type\": \"socks5\",\n     \"port\": 40000,\n     \"host\": \"127.0.0.1\",\n     \"login\": \"\",\n     \"password\": \"\",\n     \"change_ip_url\": null,\n     \"external_id\": null,\n     \"profiles_count\": 0,\n     \"title\": \"renew title\"\n  }\n}"}],"_postman_id":"0629a3f9-938d-4365-971f-c2b1c93438f4"}],"id":"5663545a-1a21-4e8d-9769-106269fea5dc","_postman_id":"5663545a-1a21-4e8d-9769-106269fea5dc","description":""},{"name":"Local client API","item":[{"name":"List Active Profiles","id":"4bb9ac4e-83d4-4695-ab5b-e0e346cec7f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/api/profiles/active","description":"<p>Shows the list of profiles launched on your device. <strong>webSocketDebuggerUrl</strong> will be shown only for profiles that are launched in the <strong>headless</strong> mode.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","profiles","active"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"923723f4-af87-41ec-82e0-5698dc9bf620","name":"List Active Profiles","originalRequest":{"method":"GET","header":[],"url":"/api/profiles/active"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Access-Control-Allow-Methods","value":"GET,HEAD,PUT,PATCH,POST,DELETE"},{"key":"Access-Control-Allow-Headers","value":"content-type"},{"key":"Vary","value":"Access-Control-Request-Headers"},{"key":"Content-Type","value":"application/json","description":""},{"key":"Date","value":"Fri, 26 Nov 2021 13:48:16 GMT"},{"key":"Content-Length","value":"205"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"uuid\": \"2bbfd1dbaf3349cf979787f15a9e413d\",\n        \"state\": \"STARTED\",\n        \"headless\": true,\n        \"start_time\": 1724173918,\n        \"ws_endpoint\": \"ws://127.0.0.1:55834/devtools/browser/a26c9612-6479-43f1-87ef-34590321a99a\",\n        \"debug_port\": \"55834\",\n        \"one_time\": false,\n        \"browser_pid\": 26616\n    }\n]"}],"_postman_id":"4bb9ac4e-83d4-4695-ab5b-e0e346cec7f8"},{"name":"Start Profile","id":"21d97c8f-ad7f-4a46-aa35-f5ea9236d7de","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\",\n    \"headless\": false,\n    \"debug_port\": true,\n    \"only_local\": true,\n    \"flags\": [],\n    \"timeout\": 120,\n    \"password\": \"password\" // [optional]\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/start","description":"<p><code>debug_port=true</code> enables the automation port. A random free port will be selected.</p>\n<p><code>debug_port=20000</code> launches the browser on a specific port. Allowed values: <code>1024-65534</code>.</p>\n<p><code>timeout</code> - <strong>seconds</strong> overrides the default start timeout value. This is usually required if you are using slow proxies.</p>\n<p><code>flags</code> - <strong>list[string]</strong> allows you to add additional <a href=\"https://kapeli.com/cheat_sheets/Chromium_Command_Line_Switches.docset/Contents/Resources/Documents/index\">Chromium flags</a>. Note: we <strong>recommend against adding any flags</strong> and we don't guarantee correct browser work if you decide to do so. Use this only if you are certain that you absolutely need this and you know precisely what you are doing.</p>\n<p><code>profile_data</code> - <strong>mapping</strong> allows to override some profile fields during start (<code>images_load_limit: null</code>, size in bytes)</p>\n<p><code>--disk-cache-dir</code> allows you to change the default cache folder. If you want to save your cached data (images, scripts, etc.), you can add this flag and add a path to the desired folder. The path should be outside the profile folder. By default the cache is cleared every time you close the profile.<br /><em>example: flags:[\"--disk-cache-dir=C:/Cache\"]</em></p>\n<p><code>--disable-backgrounding-occluded-windows</code> can be useful if you automate many profiles at the same time and your scripts do not work correctly in windows that are out of focus (running in the background).</p>\n<p>To listen to, e.g., 0.0.0.0 interface you can add <code>\"flags\": [\"--remote-debugging-address=0.0.0.0\"]</code></p>\n<p><a href=\"https://googlechromelabs.github.io/chrome-for-testing/\">chromedrivers</a> allows you to download official chromedrivers.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>START_ERROR_CODES = {\n    ComponentNotFoundException: 1,\n    ProfileAlreadyRunningException: 2,\n    ProfileStartFailedException: 3,\n    GetProxyDataFailedException: 4,\n    InvalidProxyDataException: 5,\n    ProfileNotFoundException: 6,\n    NoSubscriptionException: 7,\n    OutdatedVersionException: 8,\n    ProfileVersionConsistencyError: 9,\n}\n\n</code></pre>","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","profiles","start"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"85331ece-15e7-464b-88d1-e9371a51a361","name":"Start Profile Headless","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\",\n    \"headless\": true,\n    \"debug_port\": true,\n    \"timeout\": 120,\n    \"only_local\": true,\n    \"flags\": [],\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/start"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Access-Control-Allow-Origin","value":"*","enabled":true},{"key":"Access-Control-Allow-Methods","value":"GET,HEAD,PUT,PATCH,POST,DELETE","enabled":true},{"key":"Access-Control-Allow-Headers","value":"content-type","enabled":true},{"key":"Vary","value":"Access-Control-Request-Headers","enabled":true},{"key":"Content-Type","value":"application/json","enabled":true},{"key":"Date","value":"Fri, 26 Nov 2021 13:47:17 GMT","enabled":true},{"key":"Content-Length","value":"202","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"uuid\": \"2bbfd1dbaf3349cf979787f15a9e413d\",\n    \"state\": \"STARTED\",\n    \"headless\": true,\n    \"start_time\": 1724172886,\n    \"ws_endpoint\": \"ws://127.0.0.1:54739/devtools/browser/4d05ab38-20bf-45e6-b463-6bc643028107\",\n    \"debug_port\": \"54739\",\n    \"one_time\": false,\n    \"browser_pid\": 10108,\n    \"connection_data\": {\n        \"ip\": \"188.188.188.88\",\n        \"country\": \"Germany\"\n    }\n}"},{"id":"61db2296-5233-4b1c-b21a-21a00f231266","name":"Start Profile GUI","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\",\n    \"headless\": false,\n    \"debug_port\": true,\n    \"timeout\": 120,\n    \"only_local\": true,\n    \"flags\": [],\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/start"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Access-Control-Allow-Origin","value":"*","enabled":true},{"key":"Access-Control-Allow-Methods","value":"GET,HEAD,PUT,PATCH,POST,DELETE","enabled":true},{"key":"Access-Control-Allow-Headers","value":"content-type","enabled":true},{"key":"Vary","value":"Access-Control-Request-Headers","enabled":true},{"key":"Content-Type","value":"application/json","enabled":true},{"key":"Date","value":"Fri, 26 Nov 2021 13:47:58 GMT","enabled":true},{"key":"Content-Length","value":"203","enabled":true}],"cookie":[],"responseTime":null,"body":"{\r\n    \"uuid\": \"2bbfd1dbaf3349cf979787f15a9e413d\",\r\n    \"state\": \"STARTED\",\r\n    \"headless\": false,\r\n    \"start_time\": 1724172687,\r\n    \"ws_endpoint\": \"ws://127.0.0.1:54500/devtools/browser/35dc7ef1-04a9-4d9b-ad38-02dc629093e5\",\r\n    \"debug_port\": \"54500\",\r\n    \"one_time\": false,\r\n    \"browser_pid\": 8776,\r\n    \"connection_data\": {\r\n        \"ip\": \"188.188.188.88\",\r\n        \"country\": \"Germany\"\r\n    }\r\n}"},{"id":"5ff321d6-b569-4406-8151-493a6a5f220d","name":"Start Profile Proxy Error","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\",\n    \"headless\": false,\n    \"debug_port\": true,\n    \"only_local\": true,\n    \"flags\": [],\n    \"timeout\": 120,\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/start"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"code\": \"profiles.proxy_error\",\n    \"error\": \"Failed to get proxy data\",\n    \"error_code\": 4\n}"},{"id":"394c0e1a-440c-4ca0-a90d-44bd3825301d","name":"Start Profile Already Running On Different Machine","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\",\n    \"headless\": false,\n    \"debug_port\": true,\n    \"only_local\": true,\n    \"flags\": [],\n    \"timeout\": 120,\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/start"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"code\": \"profiles.already_started\",\n    \"error\": \"Profile is already started\",\n    \"error_code\": 2\n}"}],"_postman_id":"21d97c8f-ad7f-4a46-aa35-f5ea9236d7de"},{"name":"Stop Profile","id":"10ee192b-8911-4343-be79-08cb00fa67fd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/stop","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","profiles","stop"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"2abf34b7-027a-4f21-be25-2298fb7ddeec","name":"Stop Profile","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/stop"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"msg\": \"Profile stopped\"\n}"}],"_postman_id":"10ee192b-8911-4343-be79-08cb00fa67fd"},{"name":"Force Stop Profile","id":"f4df4877-2c92-4050-aaf9-d27fb617d43e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/force_stop","description":"<p><strong>Requires Octo Browser 1.7 or later</strong></p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","profiles","force_stop"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"0a181e9e-075f-4364-9a0b-03a4c3fe9194","name":"Force Stop Profile","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/profiles/force_stop"},"_postman_previewlanguage":"json","header":null,"cookie":[],"responseTime":null,"body":"{\n    \"msg\": \"Profile stopped successfully\"\n}"}],"_postman_id":"f4df4877-2c92-4050-aaf9-d27fb617d43e"},{"name":"Login","id":"f436653b-db3f-4c26-ab02-e670b9df5e62","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"useremail@domain.net\",\n    \"password\": \"userpassword\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/login","description":"<p><strong>Requires Octo Browser 1.8.0 or later</strong></p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","auth","login"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"e9a69fe3-a6b3-4af5-aa84-30dc0294a2b1","name":"Login","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"useremail@domain.net\",\n    \"password\": \"userpassword\"\n}","options":{"raw":{"language":"json"}}},"url":"/api/auth/login"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"msg\": \"Logged in successfully\"\n}"}],"_postman_id":"f436653b-db3f-4c26-ab02-e670b9df5e62"},{"name":"Logout","id":"a1b01c93-e5e4-4c3e-990b-c07f7cc2c3d6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"/api/auth/logout","description":"<p><strong>Requires Octo Browser 1.8.0 or later</strong></p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","auth","logout"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"fa7ca370-1a06-4d13-b3ba-4922705eff9e","name":"Logout","originalRequest":{"method":"POST","header":[],"url":"/api/auth/logout"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"msg\": \"Logged out successfully\"\n}"}],"_postman_id":"a1b01c93-e5e4-4c3e-990b-c07f7cc2c3d6"},{"name":"Get Client Version","id":"92a43f59-a608-4da9-8f2e-25a4ea763813","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/api/update","description":"<p>Shows the current and latest available browser versions. <em>Update_required</em> field indicates a critical update availability. A critical update means that the current browser version is no longer supported and an update is strongly recommended.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","update"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"b100e513-e948-4526-ab6c-129919abfa1c","name":"Update","originalRequest":{"method":"GET","header":[],"url":"/api/update"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"current\": \"1.8.2\",\n    \"latest\": \"1.8.3\",\n    \"update_required\": false\n}"},{"id":"f806600f-c272-4ca2-8e18-68cb2c30586b","name":"Critical update available","originalRequest":{"method":"GET","header":[],"url":"/api/update"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"current\": \"1.7.6\",\n    \"latest\": \"1.8.3\",\n    \"update_required\": true\n}"}],"_postman_id":"92a43f59-a608-4da9-8f2e-25a4ea763813"},{"name":"Update Client","id":"1c40e57f-6709-4b75-a000-e39c07f6e735","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"/api/update","description":"<p>Triggers an update to the latest available version. If the browser is up to date this will return an error.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","update"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"ec42b3c4-1d46-4ee5-a06f-474abf5401a2","name":"Update","originalRequest":{"method":"POST","header":[],"url":"/api/update"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"msg\": \"update to 1.8.3 triggerred successfully\"\n}"},{"id":"7ffbb8f8-ebfa-40ca-8850-83f96dbcd7c5","name":"Update No Available Version Error","originalRequest":{"method":"POST","header":[],"url":"/api/update"},"code":409,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"code\": \"client.update_failed\",\n    \"error\": \"Update is not triggered. No available version\"\n}"}],"_postman_id":"1c40e57f-6709-4b75-a000-e39c07f6e735"},{"name":"Username","id":"ed6afde5-9d95-476a-9204-ae9004b17761","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"/api/username","description":"<p>Returns the current user username.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"path":["api","username"],"host":[""],"query":[],"variable":[]}},"response":[{"id":"20a8834e-4213-42ac-832f-3cf35851b7d4","name":"Username","originalRequest":{"method":"GET","header":[],"url":"/api/username"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"username\": \"user@example.com\"\n}"}],"_postman_id":"ed6afde5-9d95-476a-9204-ae9004b17761"},{"name":"One-time profile","event":[{"listen":"test","script":{"id":"3fc50c44-f5b7-4099-b565-f129af6df8c6","exec":["pm.test(\"responce body have puuid\"), function(){\r","    pm.response.to.have.jsonBody('browser_pid')\r","}"],"type":"text/javascript"}}],"id":"35ae6b86-a02e-4fcd-a3c6-b1ba7fddcb07","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"profile_data\": {\n        \"fingerprint\": {\n            \"os\": \"win\",\n            \"os_version\": \"11\", // [optional]\n            \"os_arch\": \"x86\", // [optional]\n            \"user_agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36\", // [optional]\n            \"screen\": \"1920x1080\", // [optional]\n            \"languages\": { // [optional]\n                \"type\": \"ip\"\n            },\n            \"timezone\": { // [optional]\n                \"type\": \"ip\"\n            },\n            \"geolocation\": { // [optional]\n                \"type\": \"ip\"\n            },\n            \"cpu\": 4, // [optional]\n            \"ram\": 8, // [optional]\n            \"noise\": { // [optional]\n                \"webgl\": true,\n                \"canvas\": false,\n                \"audio\": true,\n                \"client_rects\": false\n            },\n            \"webrtc\": { // [optional]\n                \"type\": \"ip\"\n            },\n            \"dns\": \"1.1.1.1\", // [optional]\n            \"media_devices\": { // [optional]\n                \"video_in\": 1,\n                \"audio_in\": 1,\n                \"audio_out\": 1\n            }\n        },\n        \"extensions\": [ // [optional]\n            \"ewbjmajocgfcbeboaewbfgobmjsjcoja@1.0\"\n        ],\n        \"start_pages\": [ // [optional]\n            \"https://fb.com\"\n        ],\n        \"proxy\": { // [optional]\n            \"type\": \"socks5\",\n            \"host\": \"1.1.1.1\",\n            \"port\": 5555,\n            \"login\": \"\",\n            \"password\": \"\"\n        },\n        \"local_cache\": true, // [optional]\n        \"cookies\": [ // [optional]\n            {\n                \"domain\": \".google.com\",\n                \"expirationDate\": 1639134293.313654,\n                \"hostOnly\": false,\n                \"httpOnly\": false,\n                \"name\": \"1P_JAR\",\n                \"path\": \"/\",\n                \"sameSite\": \"no_restriction\",\n                \"secure\": true,\n                \"value\": \"2021-11-10-11\"\n            }\n        ]\n    },\n    \"headless\": false, // [optional]\n    \"debug_port\": true, // [optional]\n    \"flags\": [], // [optional]\n    \"timeout\": 60 // [optional]\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:58888/api/profiles/one_time/start","description":"<p><strong>Note:</strong> if you don't specify a given parameter, we will generate the best values for it on our servers. Change only the parameters you need to customize.</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"protocol":"http","port":"58888","path":["api","profiles","one_time","start"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"be017a79-e209-4072-b288-1a8797c8f470","name":"Start One-time Profile","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"profile_data\": {\n        \"fingerprint\": {\n            \"os\": \"win\",\n            \"os_version\": \"11\", // [optional]\n            \"os_arch\": \"x86\", // [optional]\n            \"user_agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36\", // [optional]\n            \"screen\": \"1920x1080\", // [optional]\n            \"languages\": { // [optional]\n                \"type\": \"ip\"\n            },\n            \"timezone\": { // [optional]\n                \"type\": \"ip\"\n            },\n            \"geolocation\": { // [optional]\n                \"type\": \"ip\"\n            },\n            \"cpu\": 4, // [optional]\n            \"ram\": 8, // [optional]\n            \"noise\": { // [optional]\n                \"webgl\": true,\n                \"canvas\": false,\n                \"audio\": true,\n                \"client_rects\": false\n            },\n            \"webrtc\": { // [optional]\n                \"type\": \"ip\"\n            },\n            \"dns\": \"1.1.1.1\", // [optional]\n            \"media_devices\": { // [optional]\n                \"video_in\": 1,\n                \"audio_in\": 1,\n                \"audio_out\": 1\n            }\n        },\n        \"extensions\": [ // [optional]\n            \"ewbjmajocgfcbeboaewbfgobmjsjcoja@1.0\"\n        ],\n        \"start_pages\": [ // [optional]\n            \"https://fb.com\"\n        ],\n        \"proxy\": { // [optional]\n            \"type\": \"socks5\",\n            \"host\": \"1.1.1.1\",\n            \"port\": 5555,\n            \"login\": \"\",\n            \"password\": \"\"\n        },\n        \"local_cache\": true, // [optional]\n        \"cookies\": [ // [optional]\n            {\n                \"domain\": \".google.com\",\n                \"expirationDate\": 1639134293.313654,\n                \"hostOnly\": false,\n                \"httpOnly\": false,\n                \"name\": \"1P_JAR\",\n                \"path\": \"/\",\n                \"sameSite\": \"no_restriction\",\n                \"secure\": true,\n                \"value\": \"2021-11-10-11\"\n            }\n        ]\n    },\n    \"headless\": false, // [optional]\n    \"debug_port\": true, // [optional]\n    \"flags\": [], // [optional]\n    \"timeout\": 60 // [optional]\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:58888/api/profiles/one_time/start"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"uuid\": \"9a906e7d45124e6fb37388633277c22f\",\n    \"state\": \"STARTED\",\n    \"headless\": false,\n    \"start_time\": 1702904780,\n    \"ws_endpoint\": \"ws://127.0.0.1:63269/devtools/browser/f7aa4e97-c300-404f-b9c7-2633db0c1515\",\n    \"debug_port\": \"63269\",\n    \"one_time\": true,\n    \"browser_pid\": 4684,\n    \"connection_data\": {\n        \"ip\": \"188.188.188.88\",\n        \"country\": \"Germany\"\n    }\n}"}],"_postman_id":"35ae6b86-a02e-4fcd-a3c6-b1ba7fddcb07"},{"name":"Set profile password","id":"b13db255-975f-47f1-bbe6-4ef4363c143a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"9585dc0cdc1e497896afe81ba1fbcdb6\",\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:58888/api/profiles/password","description":"<p>Sets password of profile<br />Minimal length - at least 4 characters</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"protocol":"http","port":"58888","path":["api","profiles","password"],"host":["localhost"],"query":[],"variable":[]}},"response":[{"id":"0fc1dfd5-5055-4243-a7e4-99ae0582f523","name":"Set profile password","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"9585dc0cdc1e497896afe81ba1fbcdb6\",\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:58888/api/profiles/password"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"msg\": \"Profile password has been set\"\n}"},{"id":"6b14f272-8d07-455e-bc08-582595282700","name":"Set profile password error","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"9585dc0cdc1e497896afe81ba1fbcdb6\",\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:58888/api/profiles/password"},"status":"Service Unavailable","code":503,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"code\": \"profiles.password_change_failed\",\n    \"error\": \"Failed to change profile password\",\n    \"error_code\": 1\n}"}],"_postman_id":"b13db255-975f-47f1-bbe6-4ef4363c143a"},{"name":"Delete profile password","id":"cf7ead7d-093b-4653-b4ea-ffcd1ca91071","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"9585dc0cdc1e497896afe81ba1fbcdb6\",\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:58888/api/profiles/password","description":"<p>Unsets password of profile</p>\n","auth":{"type":"noauth","isInherited":true,"source":{"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","name":"Local client API","type":"folder"}},"urlObject":{"protocol":"http","port":"58888","path":["api","profiles","password"],"host":["localhost"],"query":[{"disabled":true,"key":"","value":""}],"variable":[]}},"response":[{"id":"2d4ab535-7c28-4b34-96a3-0ea8f31cf60b","name":"Delete profile password","originalRequest":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"9585dc0cdc1e497896afe81ba1fbcdb6\",\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"http://localhost:58888/api/profiles/password","protocol":"http","host":["localhost"],"port":"58888","path":["api","profiles","password"],"query":[{"key":"","value":"","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"msg\": \"Profile password has been cleared\"\n}"},{"id":"99a364ee-4cc9-4de1-8298-69391a0e3609","name":"Incorrect password","originalRequest":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"9585dc0cdc1e497896afe81ba1fbcdb6\",\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"http://localhost:58888/api/profiles/password","protocol":"http","host":["localhost"],"port":"58888","path":["api","profiles","password"],"query":[{"key":"","value":"","disabled":true}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"code\": \"profiles.invalid_password\",\n    \"error\": \"Profile password incorrect\",\n    \"error_code\": 1\n}"},{"id":"96a162a2-90bc-472d-9710-98c960eb60ac","name":"Delete password error","originalRequest":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"9585dc0cdc1e497896afe81ba1fbcdb6\",\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"http://localhost:58888/api/profiles/password","protocol":"http","host":["localhost"],"port":"58888","path":["api","profiles","password"],"query":[{"key":"","value":"","disabled":true}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Failed to clear profile password\",\n    \"error_code\": 1\n}"},{"id":"e48f8fdb-49f2-4f43-86ff-f7e7a17d444f","name":"Another operation in progress","originalRequest":{"method":"DELETE","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuid\": \"9585dc0cdc1e497896afe81ba1fbcdb6\",\n    \"password\": \"password\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"http://localhost:58888/api/profiles/password","protocol":"http","host":["localhost"],"port":"58888","path":["api","profiles","password"],"query":[{"key":"","value":"","disabled":true}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"Another profile's operation in progress\",\n    \"error_code\": 3\n}"}],"_postman_id":"cf7ead7d-093b-4653-b4ea-ffcd1ca91071"}],"id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98","description":"<p>This is a local client API to run profiles.</p>\n<p>The default server port is <strong>58888.</strong></p>\n<p>The API URL is <a href=\"http://127.0.0.1:58888\">http://localhost:58888.</a></p>\n","auth":{"type":"noauth","isInherited":false},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"71ab954b-1367-492f-9173-83e946e6b5a0"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"a761f177-e899-431c-bc64-38c061988859"}}],"_postman_id":"60de5347-92d8-45a7-bb7f-ae4b31b31b98"},{"name":"Automation Libraries","item":[{"name":"Puppeteer/Pyppeteer","item":[],"id":"36440a21-6ec4-4a02-a908-9e13e9562e31","description":"<p><strong>Connecting Puppeteer</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const puppeteer = require('puppeteer');\nconst axios = require('axios');\nconst OCTO_REMOTE_API = axios.create({\n    baseURL: 'https://app.octobrowser.net/api/v2/automation/',\n    timeout: 2000,\n    headers: {\n        'X-Octo-Api-Token': 'Token' //Put your Token here\n    }\n});\nconst OCTO_LOCAL_API = axios.create({\n    baseURL: 'http://127.0.0.1:58888/api/profiles/',\n    timeout: 100000\n})\nasync function createProfile() {\n    return OCTO_REMOTE_API.post(`/profiles`, {\n        title: 'API Test profile',\n        fingerprint: {\n            os: \"win\"\n        }\n    }).then((response) =&gt; response.data).catch((error) =&gt; error.response ? error.response.data : null)\n}\nasync function startProfile(uuid) {\n    return OCTO_LOCAL_API.post('/start', {\n        uuid: uuid,\n        headless: true,\n        debug_port: true\n    }).then((response) =&gt; response.data).catch((error) =&gt; error.response ? error.response.data : null)\n}\n(async () =&gt; {\n    const response = await createProfile();\n    const profile_uuid = response.data.uuid;\n    const start_response = await startProfile(profile_uuid);\n    const ws_endpoint = start_response.ws_endpoint;\n    const browser = await puppeteer.connect({\n        browserWSEndpoint: ws_endpoint,\n        defaultViewport: null\n    });\n    const page = await browser.newPage();\n    await page.goto('https://google.com/');\n})();\n\n</code></pre>\n<p><strong>Pyppeteer</strong> (python version)</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import asyncio\nimport logging\nimport os\nimport httpx\nimport pyppeteer\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(name)s: %(message)s')\nlog = logging.getLogger('octo')\nOCTO_TOKEN = os.getenv('OCTO_TOKEN', 'PUT_TOKEN_HERE')\nOCTO_API = 'https://app.octobrowser.net/api/v2/automation/profiles'\nLOCAL_API = 'http://localhost:58888/api/profiles/start'\nHEADERS = {'X-Octo-Api-Token': OCTO_TOKEN}\nasync def get_profile(cli):\n    profiles = (await cli.get(OCTO_API, headers=HEADERS)).json()\n    log.info(f'Profiles: {profiles}')\n    return profiles['data'][0]['uuid']\nasync def get_cdp(cli):\n    uuid = await get_profile(cli)\n    resp = (await cli.post(LOCAL_API, json={'uuid': uuid, 'debug_port': True})).json()\n    log.info(f'Start profile resp: {resp}')\n    return resp['ws_endpoint']\nasync def main():\n    async with httpx.AsyncClient() as cli:\n        ws_url = await get_cdp(cli)\n    browser = await pyppeteer.launcher.connect(browserWSEndpoint=ws_url)\n    try:\n        page = await browser.newPage()\n        url = 'https://duckduckgo.com/'\n        await page.goto(url)\n        values = await page.querySelector('p.badge-link__social')\n        it = await values.getProperty('innerText')\n        text_value = await it.jsonValue()\n        log.info(f'Element text: {text_value}')\n    finally:\n        await browser.close()\nif __name__ == '__main__':\n    asyncio.run(main())\n\n</code></pre>\n","_postman_id":"36440a21-6ec4-4a02-a908-9e13e9562e31"},{"name":"Playwright","item":[],"id":"c9518593-6eb1-4137-b0fb-067181197a31","description":"<h4 id=\"connecting-playwright\"><strong>Connecting Playwright</strong></h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\nconst pw = require('playwright');\nconst OCTO_REMOTE_API = axios.create({\n  baseURL: 'https://app.octobrowser.net/api/v2/automation/',\n  timeout: 2000,\n  headers: {\n    'X-Octo-Api-Token': 'Token' //Put Your Token Here\n  }\n});\nconst OCTO_LOCAL_API = axios.create({\n  baseURL: 'http://127.0.0.1:58888/api/profiles/',\n  timeout: 100000\n})\nasync function createProfile() {\n  return OCTO_REMOTE_API.post(`/profiles`, {\n    title: 'API Test profile',\n    fingerprint: {\n      os: \"win\"\n    }\n  }).then((response) =&gt; response.data).catch((error) =&gt; error.response ? error.response.data : null)\n}\nasync function startProfile(uuid) {\n  return OCTO_LOCAL_API.post('/start', {\n    uuid: uuid,\n    headless: false, //should be false if you want to see actions\n    debug_port: true\n  }).then((response) =&gt; response.data).catch((error) =&gt; error.response ? error.response.data : null)\n}\n(async () =&gt; {\n  const response = await createProfile();\n  const profile_uuid = response.data.uuid;\n  const start_response = await startProfile(profile_uuid);\n  const ws_endpoint = start_response.ws_endpoint;\n  const browser = await pw.chromium.connectOverCDP(ws_endpoint);\n  const context = browser.contexts()[0];\n  const page = context.pages()[0];\n  await page.goto('https://google.com'); \n})();\n\n</code></pre>\n<p><strong>Playwright Sync Python</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import httpx\nfrom playwright.sync_api import sync_playwright\nPROFILE_UUID = \"UUID_OF_YOUR_PROFILE\"\ndef main():\n    with sync_playwright() as p:\n        start_response = httpx.post(\n            'http://127.0.0.1:58888/api/profiles/start',\n            json={\n                'uuid': PROFILE_UUID,\n                'headless': False,\n                'debug_port': True\n            }\n        )\n        if not start_response.is_success:\n            print(f'Start response is not success: {start_response.json()}')\n            return\n        ws_endpoint = start_response.json().get('ws_endpoint')\n        browser = p.chromium.connect_over_cdp(ws_endpoint)\n        page = browser.contexts[0].pages[0]\n        page.goto('https://google.com')\n        browser.close()\nif __name__ == '__main__':\n    main()\n\n</code></pre>\n<p><strong>Playwright</strong> <strong>Async Python</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import httpx\nimport asyncio\nfrom playwright.async_api import async_playwright\nPROFILE_UUID = \"UUID_OF_YOUR_PROFILE\"\nasync def main():\n    async with async_playwright() as p:\n        async with httpx.AsyncClient() as client:\n            response = await client.post(\n                'http://127.0.0.1:58888/api/profiles/start',\n                json={\n                    'uuid': PROFILE_UUID,\n                    'headless': False,\n                    'debug_port': True\n                }\n            )\n            if not response.is_success:\n                print(f'Start response is not successful: {response.json()}')\n                return\n            start_response = response.json()\n            ws_endpoint = start_response.get('ws_endpoint')\n        browser = await p.chromium.connect_over_cdp(ws_endpoint)\n        page = browser.contexts[0].pages[0]\n        await page.goto('https://google.com')\n        await browser.close()\nif __name__ == '__main__':\n    asyncio.run(main())\n\n</code></pre>\n","_postman_id":"c9518593-6eb1-4137-b0fb-067181197a31"},{"name":"Selenium","item":[],"id":"f32c145e-7327-4f88-89ad-e37e21f8eb40","description":"<h4 id=\"connecting-selenium\"><strong>Connecting Selenium</strong></h4>\n<p><strong>NB:</strong> By default Selenium is exposed in the browser and can be detected by some sites. It should work fine for most cases; however, if it doesn't, you need to use another automation library (<a href=\"https://github.com/puppeteer/puppeteer\">puppeteer</a>, <a href=\"https://chromedevtools.github.io/devtools-protocol/\">chrome dev protocol</a>).</p>\n<p>Alternatively, consider changing default Selenium to <a href=\"https://github.com/ultrafunkamsterdam/undetected-chromedriver\">undetected-chromedriver</a>.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nfrom selenium import webdriver\nfrom selenium.webdriver.chrome.options import Options\nfrom selenium.webdriver.chrome.service import Service\nPROFILE_ID = 'PROFILE_UUID'\nWEBDRIVERPATH = Service(\n    executable_path=r'./chromedriver/chromedriver-win64/chromedriver.exe')\nLOCAL_API = 'http://localhost:58888/api/profiles'\ndef get_webdriver(port):\n    chrome_options = Options()\n    chrome_options.add_experimental_option(\n        'debuggerAddress', f'127.0.0.1:{port}')\n    # Change chrome driver path accordingly\n    driver = webdriver.Chrome(service=WEBDRIVERPATH, options=chrome_options)\n    return driver\ndef get_debug_port(profile_id):\n    data = requests.post(\n        f'{LOCAL_API}/start', json={'uuid': profile_id, 'headless': False, 'debug_port': True}\n    ).json()\n    return data['debug_port']\ndef main():\n    port = get_debug_port(PROFILE_ID)\n    driver = get_webdriver(port)\n    driver.get('http://amazon.com')\nif __name__ == '__main__':\n    main()\n\n</code></pre>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-java\">import org.apache.http.client.methods.CloseableHttpResponse;\nimport org.apache.http.client.methods.HttpPost;\nimport org.apache.http.entity.StringEntity;\nimport org.apache.http.impl.client.CloseableHttpClient;\nimport org.apache.http.impl.client.HttpClients;\nimport org.apache.http.util.EntityUtils;\nimport org.json.JSONObject;\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\nimport org.openqa.selenium.chrome.ChromeOptions;\npublic class Main {\n    private static final String PROFILE_ID = \"PROFILE_UUID\"; //Profile UUID\n    private static final String CHROME_DRIVER = \"./path/to/chromedriver.exe\"; //Change this Path to your chromedriver.exe\n    private static final String LOCAL_API = \"http://127.0.0.1:58888/api/profiles\";\n    public static void main(String[] args) throws Exception {\n        int port = getDebugPort(PROFILE_ID);\n        WebDriver driver = getWebDriver(port);\n        driver.get(\"http://google.com\");\n    }\n    public static WebDriver getWebDriver(int port) {\n        ChromeOptions chromeOptions = new ChromeOptions();\n        chromeOptions.setExperimentalOption(\"debuggerAddress\", \"127.0.0.1:\" + port);\n        System.setProperty(\"webdriver.chrome.driver\", CHROME_DRIVER);\n        return new ChromeDriver(chromeOptions);\n    }\n    public static int getDebugPort(String profileId) throws Exception {\n        int debugPort;\n        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {\n            HttpPost httpPost = new HttpPost(LOCAL_API + \"/start\");\n            JSONObject json = new JSONObject();\n            json.put(\"uuid\", profileId);\n            json.put(\"headless\", false);\n            json.put(\"debug_port\", true);\n            StringEntity entity = new StringEntity(json.toString());\n            httpPost.setEntity(entity);\n            httpPost.setHeader(\"Accept\", \"application/json\");\n            httpPost.setHeader(\"Content-type\", \"application/json\");\n            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {\n                String responseString = EntityUtils.toString(response.getEntity());\n                JSONObject responseJson = new JSONObject(responseString);\n                debugPort = responseJson.getInt(\"debug_port\");\n            }\n        }\n        return debugPort;\n    }\n}\n\n</code></pre>\n<p><strong>Visual Basic .NET Example</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Imports System\nImports System.Net.Http\nImports System.Text\nImports Newtonsoft.Json.Linq\nImports OpenQA.Selenium\nImports OpenQA.Selenium.Chrome\nModule Program\nPublic Class Main\n    Private Shared ReadOnly PROFILE_ID As String = \"PROFILE_UUID_SHOULD_BE_HERE\" 'Profile UUID\n    Private Shared ReadOnly CHROME_DRIVER As String = \"./chromedriver-win64/chromedriver.exe\" 'Change this Path to your chromedriver.exe\n    Private Shared ReadOnly LOCAL_API As String = \"http://127.0.0.1:58888/api/profiles\"\n    Public Shared Sub Main(args As String())\n        Dim port As Integer = GetDebugPort(PROFILE_ID)\n        Dim driver As IWebDriver = GetWebDriver(port)\n        driver.Navigate().GoToUrl(\"http://google.com\")\n    End Sub\n    Public Shared Function GetWebDriver(port As Integer) As IWebDriver\n        Dim chromeOptions As New ChromeOptions()\n        chromeOptions.DebuggerAddress = \"127.0.0.1:\" &amp; port\n        Environment.SetEnvironmentVariable(\"webdriver.chrome.driver\", CHROME_DRIVER)\n        Return New ChromeDriver(chromeOptions)\n    End Function\n    Public Shared Function GetDebugPort(profileId As String) As Integer\n        Dim debugPort As Integer\n        Using httpClient As New HttpClient()\n            Dim httpPost As New HttpRequestMessage(HttpMethod.Post, LOCAL_API &amp; \"/start\")\n            Dim json As New JObject()\n            json(\"uuid\") = profileId\n            json(\"headless\") = False\n            json(\"debug_port\") = True\n            httpPost.Content = New StringContent(json.ToString(), Encoding.UTF8, \"application/json\")\n            httpPost.Headers.Accept.ParseAdd(\"application/json\")\n            Using response = httpClient.SendAsync(httpPost).Result\n                Dim responseString As String = response.Content.ReadAsStringAsync().Result\n                Dim responseJson As JObject = JObject.Parse(responseString)\n                debugPort = responseJson(\"debug_port\")\n            End Using\n        End Using\n        Return debugPort\n    End Function\nEnd Class\nEnd Module\n\n</code></pre>","_postman_id":"f32c145e-7327-4f88-89ad-e37e21f8eb40"}],"id":"09a98d3a-2cc8-4d21-a8a1-ddc2db7da097","description":"<p>Examples of connecting automation libraries to a running profile, in different programming languages.</p>\n","_postman_id":"09a98d3a-2cc8-4d21-a8a1-ddc2db7da097"},{"name":"Teams","item":[{"name":"Get Extensions","id":"185359ba-c28e-4406-afe1-c53498f72512","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"<p>API Token</p>\n"}],"url":"//api/v2/automation/teams/extensions?start=0&limit=25","description":"<p>Returns extensions used by a team installed in any profile.</p>\n","urlObject":{"path":["api","v2","automation","teams","extensions"],"host":["/"],"query":[{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"start","value":"0"},{"description":{"content":"<p>(Optional, max value 100)</p>\n","type":"text/plain"},"key":"limit","value":"25"}],"variable":[]}},"response":[{"id":"385afdfa-f996-4fbf-8ce0-5ae7d1bf8be9","name":"Get Extensions","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"url":{"raw":"//api/v2/automation/teams/extensions?start=0&limit=25","host":["/"],"path":["api","v2","automation","teams","extensions"],"query":[{"key":"start","value":"0","description":"(Optional)"},{"key":"limit","value":"25","description":"(Optional, max value 100)"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": [\n        {\n            \"uuid\": \"54d6ff5042c545b990349a7a7e653e81@2.0.12\",\n            \"name\": \"Google Translate\",\n            \"version\": \"2.0.12\"\n        }\n    ]\n}"}],"_postman_id":"185359ba-c28e-4406-afe1-c53498f72512"},{"name":"Delete Extensions","id":"72038513-2a89-4df6-9f75-a6e7e012e5f1","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"X-Octo-Api-Token","value":"","description":"<p>API Token</p>\n"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\n        \"ppdakpfeaodfo@9.0.19\"\n    ]\n}"},"url":"//api/v2/automation/teams/extensions","description":"<p>Deletes extensions of a team using UUIDs. The maximum UUID batch length is 100.</p>\n<p><strong>IMPORTANT:</strong> If any profile is running during this request, the deleted extensions will continue to be available and functioning for this profile. After such a profile stops, these extensions will return to the extensions list. Please make sure that extensions you would like to delete are not in use in any running profile at the time of deletion.</p>\n","urlObject":{"path":["api","v2","automation","teams","extensions"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"de13be93-b6dc-4daf-b60f-927c706cdd73","name":"Delete Extensions","originalRequest":{"method":"DELETE","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\n        \"ppdakpfeaodfo@9.0.19\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/extensions"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","enabled":true}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Extensions deleted successfully\",\n    \"data\": \"\"\n}"}],"_postman_id":"72038513-2a89-4df6-9f75-a6e7e012e5f1"},{"name":"Get subaccounts","id":"7575606d-235d-4581-957b-4c7121db3791","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/teams/subaccounts","urlObject":{"path":["api","v2","automation","teams","subaccounts"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"8bbb11db-3c78-48d9-88d2-f432736e337a","name":"Get subaccounts","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/teams/subaccounts"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n   \"success\":true,\n   \"msg\":\"\",\n   \"total_count\":1,\n   \"data\":[\n      {\n         \"uuid\":\"54d6ff5042c545b990349a7a7e653e81\",\n         \"email\":\"test@octo.com\",\n         \"master\":false,\n         \"created_at\":\"2023-11-27 13:07:28\",\n         \"permissions\":{\n            \"manage_team\":false,\n            \"edit_tags\":false,\n            \"view_all_tags\":false,\n            \"manage_action_log\":false,\n            \"proxies\":{\n               \"create\":false,\n               \"edit\":false,\n               \"delete\":false\n            },\n            \"paid_proxies\":{\n               \"create\":false\n            },\n            \"profiles\":{\n               \"transfer\":false,\n               \"clone\":false,\n               \"create\":false,\n               \"edit\":false,\n               \"delete\":false,\n               \"passwords\":false\n            },\n            \"templates\":{\n               \"create\":false,\n               \"edit\":false,\n               \"delete\":false\n            },\n            \"extensions\":{\n               \"delete\":false\n            },\n            \"tasks\":{\n               \"view\":false,\n               \"manage\":false\n            },\n            \"visible_tags\":[\n               \"tag_name\"\n            ]\n         }\n      }\n   ]\n}"}],"_postman_id":"7575606d-235d-4581-957b-4c7121db3791"},{"name":"Get invites","id":"10a71eca-f3b5-4b25-b787-dcdf45a201f2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/teams/invites","urlObject":{"path":["api","v2","automation","teams","invites"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"8cdf9a6c-335f-459a-b3af-f06c4d0c5894","name":"Get invites","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":""}],"url":"//api/v2/automation/teams/invites"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n   \"success\":true,\n   \"msg\":\"\",\n   \"total_count\":1,\n   \"data\":[\n      {\n         \"receiver\":\"test_receiver@octo.net\",\n         \"created_at\":\"2023-11-27 13:07:28\"\n      }\n   ]\n}"}],"_postman_id":"10a71eca-f3b5-4b25-b787-dcdf45a201f2"},{"name":"Delete invite","id":"a8b0db2b-258f-423b-bf75-63e7b50c92cc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"X-Octo-Api-Token","value":""}],"body":{"mode":"raw","raw":"{\n    \"receiver\": \"test@octo.net\"\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/invites","urlObject":{"path":["api","v2","automation","teams","invites"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"b083c64e-515b-4c00-87d0-96b59ef7276b","name":"Delete invite","originalRequest":{"method":"DELETE","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"receiver\": \"test@octo.net\"\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/invites"},"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Invite deleted\",\n    \"data\": \"\"\n}"}],"_postman_id":"a8b0db2b-258f-423b-bf75-63e7b50c92cc"},{"name":"Create subaccount","id":"6b38897b-a4f9-48ff-a159-5ec0f16ace09","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":"","description":"<p>API Token</p>\n"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"test@octo.net\",\n    \"permissions\": {\n        \"manage_team\": false, // [optional]\n        \"edit_tags\": false, // [optional]\n        \"view_all_tags\": false, // [optional]\n        \"manage_action_log\": false, // [optional]\n        \"proxies\": { // [optional]\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false\n        },\n        \"paid_proxies\": { // [optional]\n            \"create\": false\n        },\n        \"profiles\": { // [optional]\n            \"transfer\": false,\n            \"clone\": false,\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false,\n            \"passwords\": false\n        },\n        \"templates\": { // [optional]\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false\n        },\n        \"extensions\": { // [optional]\n            \"delete\": false\n        },\n        \"tasks\": { // [optional]\n            \"view\": false,\n            \"manage\": false\n        },\n        \"visible_tags\": [\"tag_name\"] // [optional]\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/subaccounts","description":"<p><strong>IMPORTANT:</strong> If a permission is not specified, it will be set as <strong><code>false</code></strong>.</p>\n","urlObject":{"path":["api","v2","automation","teams","subaccounts"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"7cbd6a01-cd7f-4f20-a99f-7f2a1ef3b0cd","name":"Create subaccount","originalRequest":{"method":"POST","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"test@octo.net\",\n    \"permissions\": {\n        \"manage_team\": false, // [optional]\n        \"edit_tags\": false, // [optional]\n        \"view_all_tags\": false, // [optional]\n        \"manage_action_log\": false, // [optional]\n        \"proxies\": { // [optional]\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false\n        },\n        \"paid_proxies\": { // [optional]\n            \"create\": false\n        },\n        \"profiles\": { // [optional]\n            \"transfer\": false,\n            \"clone\": false,\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false,\n            \"passwords\": false\n        },\n        \"templates\": { // [optional]\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false\n        },\n        \"extensions\": { // [optional]\n            \"delete\": false\n        },\n        \"tasks\": { // [optional]\n            \"view\": false,\n            \"manage\": false\n        },\n        \"visible_tags\": [\"tag_name\"] // [optional]\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/subaccounts"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Invite sent\",\n    \"data\": \"\"\n}"}],"_postman_id":"6b38897b-a4f9-48ff-a159-5ec0f16ace09"},{"name":"Update subaccount","id":"d0f1e635-4425-43ea-a3c4-829fed27f0df","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"test@octo.net\",\n    \"permissions\": {\n        \"manage_team\": false, // [optional]\n        \"edit_tags\": false, // [optional]\n        \"view_all_tags\": false, // [optional]\n        \"manage_action_log\": false, // [optional]\n        \"proxies\": { // [optional]\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false\n        },\n        \"paid_proxies\": { // [optional]\n            \"create\": false\n        },\n        \"profiles\": { // [optional]\n            \"transfer\": false,\n            \"clone\": false,\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false,\n            \"passwords\": false\n        },\n        \"templates\": { // [optional]\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false\n        },\n        \"extensions\": { // [optional]\n            \"delete\": false\n        },\n        \"tasks\": { // [optional]\n            \"view\": false,\n            \"manage\": false\n        },\n        \"visible_tags\": [\"tag_name\"] // [optional]\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/subaccounts","urlObject":{"path":["api","v2","automation","teams","subaccounts"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"ac37a934-66f5-434d-9fdd-fccaf1f9e880","name":"Update subaccount","originalRequest":{"method":"PATCH","header":[{"key":"X-Octo-Api-Token","value":"","description":"API token"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"test@octo.net\",\n    \"permissions\": {\n        \"manage_team\": false, // [optional]\n        \"edit_tags\": false, // [optional]\n        \"view_all_tags\": false, // [optional]\n        \"manage_action_log\": false, // [optional]\n        \"proxies\": { // [optional]\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false\n        },\n        \"paid_proxies\": { // [optional]\n            \"create\": false\n        },\n        \"profiles\": { // [optional]\n            \"transfer\": false,\n            \"clone\": false,\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false,\n            \"passwords\": false\n        },\n        \"templates\": { // [optional]\n            \"create\": false,\n            \"edit\": false,\n            \"delete\": false\n        },\n        \"extensions\": { // [optional]\n            \"delete\": false\n        },\n        \"tasks\": { // [optional]\n            \"view\": false,\n            \"manage\": false\n        },\n        \"visible_tags\": [\"tag_name\"] // [optional]\n    }\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/subaccounts"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Team member updated\",\n    \"data\": {\n        \"uuid\": \"d2874db6b3344506946c1bb91bd17bf8\"\n    }\n}"}],"_postman_id":"d0f1e635-4425-43ea-a3c4-829fed27f0df"},{"name":"Delete subaccount","id":"6c1c8e1b-3030-4db1-9758-db30d062616a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"test@octo.net\"\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/subaccounts","urlObject":{"path":["api","v2","automation","teams","subaccounts"],"host":["/"],"query":[],"variable":[]}},"response":[{"id":"fbe96eb6-a62b-4d23-a447-f96da72aa238","name":"Delete subaccount","originalRequest":{"method":"DELETE","header":[{"key":"X-Octo-Api-Token","value":""},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"test@octo.net\"\n}","options":{"raw":{"language":"json"}}},"url":"//api/v2/automation/teams/subaccounts"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":""}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"Team member deleted\",\n    \"data\": \"\"\n}"}],"_postman_id":"6c1c8e1b-3030-4db1-9758-db30d062616a"}],"id":"cf87e8d4-a1e1-4630-bb58-ccc024cdd184","_postman_id":"cf87e8d4-a1e1-4630-bb58-ccc024cdd184","description":""},{"name":"Fingerprint","item":[{"name":"Get Renderers","id":"6a78e070-37a5-4d6e-9269-82179eec79ef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"<p>API Token</p>\n","type":"text"}],"url":"//api/v2/automation/fingerprint/renderers?page_len=100&page=0&os=win&os_arch=x86","urlObject":{"path":["api","v2","automation","fingerprint","renderers"],"host":["/"],"query":[{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"page_len","value":"100"},{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"page","value":"0"},{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"os","value":"win"},{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"os_arch","value":"x86"}],"variable":[]}},"response":[{"id":"44608df3-f331-45b7-9b9e-62f47cd7a53b","name":"Get Renderers","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"url":{"raw":"//api/v2/automation/fingerprint/renderers?page_len=100&page=0","host":["/"],"path":["api","v2","automation","fingerprint","renderers"],"query":[{"key":"page_len","value":"100","description":"(Optional)"},{"key":"page","value":"0","description":"(Optional)"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":null,"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": [\n        {\n            \"value\": \"ATI Radeon HD 3200 Graphics (Microsoft Corporation WDDM 1.1)\", \n            \"platform\": \"win\",\n            \"archs\": [\"x86\"]\n        }, \n        {\n            \"value\": \"ATI Radeon 3100 Graphics (Microsoft Corporation WDDM 1.1)\", \n            \"platform\": \"win\",\n            \"archs\": [\"x86\"]\n        }, \n        {\n            \"value\": \"NVIDIA GeForce GTX 660\", \n            \"platform\": \"win\",\n            \"archs\": [\"x86\"]\n        }, \n        {\n            \"value\": \"ATI Radeon HD 3400 Series\", \n            \"platform\": \"win\",\n            \"archs\": [\"x86\"]\n        }, \n        {\n            \"value\": \"NVIDIA GeForce 210\", \n            \"platform\": \"win\",\n            \"archs\": [\"x86\"]\n        }, \n        {\n            \"value\": \"AMD Radeon HD 6800 Series\", \n            \"platform\": \"win\",\n            \"archs\": [\"x86\"]\n        }, \n        {\n            \"value\": \"NVIDIA Tegra K1 (nvgpu)/integrated\", \n            \"platform\": \"lin\",\n            \"archs\": [\"x86\"]\n        },\n        {\n            \"value\": \"Apple M2 Pro\", \n            \"platform\": \"mac\",\n            \"archs\": [\"arm\"]\n        }\n    ],\n    \"total_count\": 250,\n    \"page\": 0\n}"}],"_postman_id":"6a78e070-37a5-4d6e-9269-82179eec79ef"},{"name":"Get Screens","id":"055bcaee-f8f1-4596-8bbe-008b84369c83","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"<p>API Token</p>\n"}],"url":"//api/v2/automation/fingerprint/screens?os=win&os_arch=x86","urlObject":{"path":["api","v2","automation","fingerprint","screens"],"host":["/"],"query":[{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"os","value":"win"},{"description":{"content":"<p>(Optional)</p>\n","type":"text/plain"},"key":"os_arch","value":"x86"}],"variable":[]}},"response":[{"id":"b4eec999-6584-49f2-8193-0117331a8a19","name":"Get Screens","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"url":{"raw":"//api/v2/automation/fingerprint/screens?os=win&os_arch=x86","host":["/"],"path":["api","v2","automation","fingerprint","screens"],"query":[{"key":"os","value":"win"},{"key":"os_arch","value":"x86"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Server","value":"gunicorn/20.0.4"},{"key":"Date","value":"Tue, 25 Jun 2024 08:32:09 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Content-Type","value":"application/json"},{"key":"Content-Length","value":"527"},{"key":"Access-Control-Allow-Origin","value":"*"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"msg\": \"\",\n    \"data\": [\n        {\n            \"value\": \"1440x900\",\n            \"platform\": \"win\",\n            \"archs\": [\n                \"x86\"\n            ]\n        },\n        {\n            \"value\": \"1536x864\",\n            \"platform\": \"win\",\n            \"archs\": [\n                \"x86\"\n            ]\n        },\n        {\n            \"value\": \"1536x960\",\n            \"platform\": \"win\",\n            \"archs\": [\n                \"x86\"\n            ]\n        },\n        {\n            \"value\": \"1600x900\",\n            \"platform\": \"win\",\n            \"archs\": [\n                \"x86\"\n            ]\n        },\n        {\n            \"value\": \"1680x1050\",\n            \"platform\": \"win\",\n            \"archs\": [\n                \"x86\"\n            ]\n        },\n        {\n            \"value\": \"1920x1080\",\n            \"platform\": \"win\",\n            \"archs\": [\n                \"x86\"\n            ]\n        },\n        {\n            \"value\": \"1920x1200\",\n            \"platform\": \"win\",\n            \"archs\": [\n                \"x86\"\n            ]\n        },\n        {\n            \"value\": \"2560x1440 (2K)\",\n            \"platform\": \"win\",\n            \"archs\": [\n                \"x86\"\n            ]\n        }\n    ]\n}"}],"_postman_id":"055bcaee-f8f1-4596-8bbe-008b84369c83"},{"name":"Get Mobile Device Models","id":"2272f8e8-10bc-4f59-87fc-24894dcf80b6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"<p>API Token</p>\n"}],"url":"//api/v2/automation/fingerprint/device_models?device_type=phone","urlObject":{"path":["api","v2","automation","fingerprint","device_models"],"host":["/"],"query":[{"description":{"content":"<p>phone or tablet</p>\n","type":"text/plain"},"key":"device_type","value":"phone"}],"variable":[]}},"response":[{"id":"f67fa464-8b69-451a-af02-24e00831d3e0","name":"Get Mobile Device Models","originalRequest":{"method":"GET","header":[{"key":"X-Octo-Api-Token","value":"","description":"API Token"}],"url":"//api/v2/automation/fingerprint/device_models"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\r\n    \"success\": true,\r\n    \"msg\": \"\",\r\n    \"data\": [\r\n        {\r\n            \"value\": \"M2102J20SG\",\r\n            \"os\": \"android\",\r\n            \"os_versions\": [\r\n                \"12\"\r\n            ],\r\n            \"archs\": [\r\n                \"arm\"\r\n            ],\r\n            \"device_type\": \"phone\"\r\n        },\r\n        {\r\n            \"value\": \"21051182G\",\r\n            \"os\": \"android\",\r\n            \"os_versions\": [\r\n                \"13\"\r\n            ],\r\n            \"archs\": [\r\n                \"arm\"\r\n            ],\r\n            \"device_type\": \"tablet\"\r\n        },\r\n        {\r\n            \"value\": \"SM-T970\",\r\n            \"os\": \"android\",\r\n            \"os_versions\": [\r\n                \"13\"\r\n            ],\r\n            \"archs\": [\r\n                \"arm\"\r\n            ],\r\n            \"device_type\": \"tablet\"\r\n        },\r\n        {\r\n            \"value\": \"M2007J20CG\",\r\n            \"os\": \"android\",\r\n            \"os_versions\": [\r\n                \"12\"\r\n            ],\r\n            \"archs\": [\r\n                \"arm\"\r\n            ],\r\n            \"device_type\": \"phone\"\r\n        },\r\n        {\r\n            \"value\": \"SM-M526B\",\r\n            \"os\": \"android\",\r\n            \"os_versions\": [\r\n                \"13\"\r\n            ],\r\n            \"archs\": [\r\n                \"arm\"\r\n            ],\r\n            \"device_type\": \"phone\"\r\n        },\r\n        {\r\n            \"value\": \"moto g32\",\r\n            \"os\": \"android\",\r\n            \"os_versions\": [\r\n                \"13\"\r\n            ],\r\n            \"archs\": [\r\n                \"arm\"\r\n            ],\r\n            \"device_type\": \"phone\"\r\n        }\r\n    ]\r\n}"}],"_postman_id":"2272f8e8-10bc-4f59-87fc-24894dcf80b6"}],"id":"2680ff9b-74c5-4dd5-89fb-3f0ab850b640","event":[{"listen":"prerequest","script":{"id":"4ab2aafb-3d45-4574-9fe2-56474cb59501","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"ecbb1e49-0a4d-4ea6-a09d-17cf81ede979","type":"text/javascript","exec":[""]}}],"_postman_id":"2680ff9b-74c5-4dd5-89fb-3f0ab850b640","description":""},{"name":"Docker","item":[],"id":"2803d731-63fd-4af7-a87f-276d336e51d5","description":"<p><em>You can use examples below to run Octo Browser in docker containers.</em></p>\n<p>Dockerfile</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-go\">FROM ubuntu:22.04\nARG TZ=America/Los_Angeles\nARG DEBIAN_FRONTEND=noninteractive\nENV LANG=\"C.UTF-8\"\nRUN apt-get update &amp;&amp; apt-get install -y \\\n    apt-transport-https \\\n    ca-certificates \\\n    curl \\\n    gnupg \\\n    unzip \\\n    libgles2 libegl1 xvfb \\\n    --no-install-recommends \\\n    &amp;&amp; curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \\\n    &amp;&amp; echo \"deb https://dl.google.com/linux/chrome/deb/ stable main\" &gt; /etc/apt/sources.list.d/google-chrome.list \\\n    &amp;&amp; apt-get update &amp;&amp; apt-get install -y \\\n    fontconfig \\\n    fonts-ipafont-gothic \\\n    fonts-kacst \\\n    fonts-noto \\\n    fonts-symbola \\\n    fonts-thai-tlwg \\\n    fonts-wqy-zenhei \\\n    connect-proxy \\\n    dnsutils \\\n    fonts-freefont-ttf \\\n    iproute2 \\\n    iptables \\\n    iputils-ping \\\n    net-tools \\\n    openvpn \\\n    procps \\\n    socat \\\n    ssh \\\n    sshpass \\\n    sudo \\\n    tcpdump \\\n    telnet \\\n    traceroute \\\n    tzdata \\\n    vim-nox\nRUN curl https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb --output /tmp/chrome.deb\nRUN apt install -y /tmp/chrome.deb\n# Install Octo dependencies\nRUN apt update \\\n    &amp;&amp; apt install -y libgl1 libglib2.0-0 xvfb zip\n# Create\nRUN mkdir -p /home/octo/browser\n# Create new user\nRUN groupadd -r octo &amp;&amp; \\\n    useradd -r -g octo -s /bin/bash -m -G audio,video,sudo -p $(echo 1 | openssl passwd -1 -stdin) octo &amp;&amp; \\\n    mkdir -p /home/octo/ &amp;&amp; \\\n    chown -R octo:octo /home/octo\n# Create sudoers.d directory and add sudo permissions for the octo user\nRUN mkdir -p /etc/sudoers.d &amp;&amp; \\\n    echo 'octo ALL=(ALL) NOPASSWD:ALL' &gt; /etc/sudoers.d/octo &amp;&amp; \\\n    chmod 0440 /etc/sudoers.d/octo\n#sudo octo\nRUN usermod -a -G sudo octo\nUSER octo\n# Install Octo browser\nRUN curl -o /home/octo/browser/octo-browser.tar.gz https://binaries.octobrowser.net/releases/installer/OctoBrowser.linux.tar.gz\n# Unzip Octo browser\nRUN tar -xzf /home/octo/browser/octo-browser.tar.gz -C /home/octo/browser\n# Start virtual display and Octo Browser in headless mode\nCMD Xvfb :1 -ac -screen 0 \"1920x1080x24\" -nolisten tcp +extension GLX +render -noreset &amp; \\\n    sudo chown -R octo:octo /home/octo &amp;&amp; \\\n    sleep 5 &amp;&amp; DISPLAY=:1 OCTO_HEADLESS=1 /home/octo/browser/OctoBrowser.AppImage\n\n</code></pre>\n<h2 id=\"runsh\">run.sh</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">export EMAIL=your_email\nexport PASSWORD=your_password\nexport PROFILE_UUID=PUT_UUID_HERE\ndocker build -t octobrowser:latest .\ndocker run --name octo -it --rm \\\n       --security-opt seccomp:unconfined \\\n       -v '/srv/docker_octo/cache:/home/octo/.Octo Browser/' \\\n       -p 58895:58888 \\\n       octobrowser:latest\n# get xh: https://github.com/ducaale/xh/releases\nxh POST localhost:58895/api/auth/login email=${EMAIL} password=${PASSWORD}\nxh POST localhost:58895/api/profiles/start uuid=${PROFILE_UUID} headless:=true debug_port:=true\n\n</code></pre>\n","_postman_id":"2803d731-63fd-4af7-a87f-276d336e51d5"},{"name":"Kubernetes","item":[],"id":"0bb7d684-1d8a-43a0-9aca-f398b0ae2700","description":"<p>If you would like to run the browser inside a kubernetes pod, make sure to properly configure shared memory limits and capabilities</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-yaml\">apiVersion: apps/v1\nkind: Deployment\nspec:\n  template:\n    spec:\n      containers:\n        - name: cloud-instance\n          image: {{ .Values.octoImage }}:{{ .Values.tag }}\n          securityContext:\n            capabilities:\n              add:\n                - NET_ADMIN\n                - SYS_ADMIN\n          volumeMounts:\n            - name: dshm\n              mountPath: /dev/shm\n      volumes:\n        - name: default-data\n          emptyDir:\n            medium: Memory\n            sizeLimit: 1Gi\n        - name: dshm\n          emptyDir:\n            medium: Memory\n            sizeLimit: 4Gi\n\n</code></pre>\n","_postman_id":"0bb7d684-1d8a-43a0-9aca-f398b0ae2700"},{"name":"Snippets","item":[{"name":"Node.js","item":[{"name":"Creating Profiles in Bulk","item":[],"id":"b3aa7ec2-ef6a-4a55-af1b-34e78d84a599","description":"<h3 id=\"creating-profiles-in-bulk\">Creating Profiles in Bulk</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\n// This is the configuration. Insert your API token and specify the desired number of profiles\nconst config = {\n    octo_token: \"OCTO_API_TOKEN\", // Specify your API token here\n    quantity_of_profiles: 10,     // Specify the desired number of profiles\n    octo_api_base_url: \"https://app.octobrowser.net/api/v2/automation/\"\n};\nconst OCTO_REMOTE_API = axios.create({\n    baseURL: config.octo_api_base_url,\n    timeout: 10000,\n    headers: {\n        'X-Octo-Api-Token': config.octo_token,\n        'Content-Type': \"application/json\"\n    }\n});\nasync function sleep(ms) {\n    return new Promise(resolve =&gt; setTimeout(resolve, ms));\n}\nasync function check_limits(response) {\n    function parse_int_safe(value) {\n        const parsed = parseInt(value, 10);\n        return isNaN(parsed) ? 0 : parsed;\n    }\n    const ratelimit_header = response.headers.ratelimit;\n    if (!ratelimit_header) {\n        console.warn('No ratelimit header found!');\n        return;\n    }\n    const limit_entries = ratelimit_header.split(',').map(entry =&gt; entry.trim());\n    for (const entry of limit_entries) {\n        const name_match = entry.match(/^([^;]+)/);\n        const r_match = entry.match(/;r=(\\d+)/);\n        const t_match = entry.match(/;t=(\\d+)/);\n        if (!r_match || !t_match) {\n            console.warn(`Invalid ratelimit format: ${entry}`);\n            continue;\n        }\n        const limit_name = name_match ? name_match[1] : 'unknown_limit';\n        const remaining_quantity = parse_int_safe(r_match[1]);\n        const window_seconds = parse_int_safe(t_match[1]);\n        if (remaining_quantity &lt; 5) {\n            const wait_time = window_seconds + 1;\n            console.log(`Waiting ${wait_time} seconds due to ${limit_name} limit`);\n            await sleep(wait_time);\n        }\n    }\n}\nasync function create_profile(quantity) {\n    for (let i = 0; i &lt; quantity; i++) {\n        const data = {\n            \"title\": `Profile ${i}`,\n            \"fingerprint\": {\n                \"os\": \"win\"\n            }\n        };\n        try {\n            const response = await OCTO_REMOTE_API.post('profiles', data);\n            await check_limits(response);\n            console.log(`Profile ${data.title} created successfully:`, response.data);\n        } catch (error) {\n            console.error(`Error creating profile ${i}:`, error.response ? error.response.data : error.message);\n        }\n    }\n}\n(async () =&gt; {\n    await create_profile(config.quantity_of_profiles);\n})();\n\n</code></pre>\n","_postman_id":"b3aa7ec2-ef6a-4a55-af1b-34e78d84a599"},{"name":"Adding Extensions/Start Pages/Bookmarks to Profiles","item":[],"id":"e5426c98-b674-4810-bfd9-945eccd6b4c7","description":"<h3 id=\"how-to-get-the-extension-uuid-using-api\"><strong>How to get the extension UUID using API:</strong></h3>\n<ul>\n<li><p>Add the desired extension to any profile (read <a href=\"https://docs.octobrowser.net/en/profiles/extensions/\">How to connect extensions to profiles</a> to learn more).</p>\n</li>\n<li><p>Get the profile with the desired extension using a GET request.</p>\n</li>\n<li><p>The server response will contain all data about the profile, including UUIDs of connected extensions.</p>\n</li>\n<li><p>You can remove unnecessary server response fields to show only the extensions:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\nconst uuid = 'UUID'; // Specify the profile UUID here\nconst api_token = 'OCTO_API_TOKEN' // Specify your API token here\nconst config = {\n  method: 'get',\n  maxBodyLength: Infinity,\n  url: `https://app.octobrowser.net/api/v2/automation/profiles/${uuid}`,\n  headers: { \n    'X-Octo-Api-Token': api_token\n  }\n};\naxios(config)\n.then(function (response) {\n    console.dir(response.data.data.extensions);\n})\n.catch(function (error) {\n  console.log(error);\n});\n\n</code></pre>\n<h3 id=\"adding-extensionsstart-pagesbookmarks-to-multiple-profiles\">Adding Extensions/Start Pages/Bookmarks to Multiple Profiles</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\n// This is the configuration. Specify your Octo API Token here; you can modify this for your personal needs\nconst config = {\n    octo_token: \"OCTO_API_TOKEN\", // Specify your API token here\n    octo_api_base_url: \"https://app.octobrowser.net/api/v2/automation/\",\n    profiles_to_update: [\n        \"UUID_1\",\n        \"UUID_2\"\n        // Add UUIDs of profiles\n    ],\n    data: {\n        extensions: [\"nkbihfbeogaeaoehlefnkodbefgpgknn@12.17.2\"],\n        bookmarks: [\n            { name: \"google\", url: \"https://google.com\" },\n            { name: \"facebook\", url: \"https://facebook.com\" }\n        ],\n        start_pages: [\"https://google.com\", \"https://facebook.com\"]\n    }\n};\nconst OCTO_REMOTE_API = axios.create({\n    baseURL: config.octo_api_base_url,\n    timeout: 10000,\n    headers: {\n        'X-Octo-Api-Token': config.octo_token,\n        'Content-Type': \"application/json\"\n    }\n});\nasync function sleep(ms) {\n    return new Promise(resolve =&gt; setTimeout(resolve, ms));\n}\nasync function check_limits(response) {\n    function parse_int_safe(value) {\n        const parsed = parseInt(value, 10);\n        return isNaN(parsed) ? 0 : parsed;\n    }\n    const ratelimit_header = response.headers.ratelimit;\n    if (!ratelimit_header) {\n        console.warn('No ratelimit header found!');\n        return;\n    }\n    const limit_entries = ratelimit_header.split(',').map(entry =&gt; entry.trim());\n    for (const entry of limit_entries) {\n        const name_match = entry.match(/^([^;]+)/);\n        const r_match = entry.match(/;r=(\\d+)/);\n        const t_match = entry.match(/;t=(\\d+)/);\n        if (!r_match || !t_match) {\n            console.warn(`Invalid ratelimit format: ${entry}`);\n            continue;\n        }\n        const limit_name = name_match ? name_match[1] : 'unknown_limit';\n        const remaining_quantity = parse_int_safe(r_match[1]);\n        const window_seconds = parse_int_safe(t_match[1]);\n        if (remaining_quantity &lt; 5) {\n            const wait_time = window_seconds + 1;\n            console.log(`Waiting ${wait_time} seconds due to ${limit_name} limit`);\n            await sleep(wait_time);\n        }\n    }\n}\nasync function update_profile(uuid) {\n    try {\n        const response = await OCTO_REMOTE_API.patch(`/profiles/${uuid}`, config.data);\n        await check_limits(response);\n        console.log(`Profile ${uuid} updated successfully`);\n    } catch (error) {\n        console.error(`Error updating profile ${uuid}:`, error.response?.data || error.message);\n    }\n}\n(async () =&gt; {\n    for (const uuid of config.profiles_to_update) {\n        await update_profile(uuid);\n    }\n})();\n\n</code></pre>\n<h3 id=\"adding-extensionsstart-pagesbookmarks-to-all-profiles-on-your-account\">Adding Extensions/Start Pages/Bookmarks to all Profiles on your Account</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\n// This is the configuration. Specify your Octo API Token here; you can modify this for your personal needs\nconst config = {\n    octo_token: \"OCTO_API_TOKEN\", // Specify your API token here\n    octo_api_base_url: \"https://app.octobrowser.net/api/v2/automation/\",\n    data: {\n        \"extensions\": [\"aapfglkgnhmiaabhiijkjpfmhllaodgp@4.2.3\"],\n        \"bookmarks\": [\n            { \"name\": \"google\", \"url\": \"https://google.com\" },\n            { \"name\": \"facebook\", \"url\": \"https://facebook.com\" }\n        ],\n        \"start_pages\": [\"https://google.com\", \"https://facebook.com\"]\n    }\n}\nconst OCTO_REMOTE_API = axios.create({\n    baseURL: config.octo_api_base_url,\n    timeout: 10000,\n    headers: {\n        'X-Octo-Api-Token': config.octo_token,\n        'Content-Type': \"application/json\"\n    }\n});\n//functions\nasync function sleep(ms) {\n    return new Promise(resolve =&gt; setTimeout(resolve, ms * 1000));\n}\nasync function check_limits(response) {\n    function parse_int_safe(value) {\n        const parsed = parseInt(value, 10);\n        return isNaN(parsed) ? 0 : parsed;\n    }\n    const ratelimit_header = response.headers.ratelimit;\n    if (!ratelimit_header) {\n        console.warn('No ratelimit header found!');\n        return;\n    }\n    const limit_entries = ratelimit_header.split(',').map(entry =&gt; entry.trim());\n    for (const entry of limit_entries) {\n        const name_match = entry.match(/^([^;]+)/);\n        const r_match = entry.match(/;r=(\\d+)/);\n        const t_match = entry.match(/;t=(\\d+)/);\n        if (!r_match || !t_match) {\n            console.warn(`Invalid ratelimit format: ${entry}`);\n            continue;\n        }\n        const limit_name = name_match ? name_match[1] : 'unknown_limit';\n        const remaining_quantity = parse_int_safe(r_match[1]);\n        const window_seconds = parse_int_safe(t_match[1]);\n        if (remaining_quantity &lt; 5) {\n            const wait_time = window_seconds + 1;\n            console.log(`Waiting ${wait_time} seconds due to ${limit_name} limit`);\n            await sleep(wait_time);\n        }\n    }\n}\nasync function get_total_profiles() {\n    const response = await OCTO_REMOTE_API.get('/profiles?page=0&amp;page_len=10');\n    const total_profiles = response.data.total_count;\n    const total_pages = Math.ceil(response.data.total_count / 100);\n    console.log(`Total Profiles: ${total_profiles}\\nTotal Pages: ${total_pages}`);\n    await check_limits(response);\n    return total_pages;\n}\nasync function get_all_profiles_uuids(total_pages) {\n    let profiles = [];\n    for (let i = 0; i &lt; total_pages; i++) {\n        let response = await OCTO_REMOTE_API.get(`/profiles?page=${i}&amp;page_len=100`);\n        await check_limits(response);\n        profiles.push(...response.data.data);\n    }\n    return profiles;\n}\nasync function patch_all_profiles(profiles) {\n    let updated = [];\n    let not_updated = [];\n    for (let profile of profiles) {\n        try {\n            const response = await OCTO_REMOTE_API.patch(`/profiles/${profile.uuid}`, config.data);\n            await check_limits(response);\n            updated.push(profile);\n            console.log(`Successfully updated ${profile.uuid}`);\n        } catch (error) {\n            not_updated.push(profile);\n            console.error(`ERROR: Can't patch profile ${profile.uuid}`);\n        }\n    }\n    return [updated, not_updated];\n}\n(async () =&gt; {\n    const total = await get_total_profiles();\n    const profiles = await get_all_profiles_uuids(total);\n    const [updated, not_updated] = await patch_all_profiles(profiles);\n    console.log(`Finished process:\\nUpdated: ${updated.length}\\nNot updated: ${not_updated.length}`);\n})();\n\n</code></pre>\n<h3 id=\"adding-extensionsstart-pagesbookmarks-to-profiles-with-certain-tags\">Adding Extensions/Start Pages/Bookmarks to Profiles with Certain Tags</h3>\n<p><strong>Note:</strong> You will get all profiles with the specified tag. This means that if a profile has other tags, it will still be included, so keep that in mind. If you specify two tags, you will only get profiles containing both tags.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\n//This is the configuration. Specify your Octo API Token here; you can modify this for your personal needs\nconst config = {\n    octo_token: \"OCTO_API_TOKEN\", // Specify your API token here\n    octo_api_base_url: \"https://app.octobrowser.net/api/v2/automation/\",\n    tags: ['tag1', 'tag2'], // Specify the required tags\n    page_len: 100,\n    extensions: ['nkbihfbeogaeaoehlefnkodbefgpgknn@12.17.2'],\n    start_pages: [\"https://google.com\", \"https://facebook.com\", \"https://amazon.com\"],\n    bookmarks: [\n        { name: \"google\", url: \"https://google.com\" },\n        { name: \"facebook\", url: \"https://facebook.com\" }\n    ]\n};\nconst OCTO_REMOTE_API = axios.create({\n    baseURL: config.octo_api_base_url,\n    timeout: 10000,\n    headers: {\n        'X-Octo-Api-Token': config.octo_token,\n        'Content-Type': \"application/json\"\n    }\n});\nasync function sleep(ms) {\n    return new Promise(resolve =&gt; setTimeout(resolve, ms));\n}\nasync function check_limits(response) {\n    function parse_int_safe(value) {\n        const parsed = parseInt(value, 10);\n        return isNaN(parsed) ? 0 : parsed;\n    }\n    const ratelimit_header = response.headers.ratelimit;\n    if (!ratelimit_header) {\n        console.warn('No ratelimit header found!');\n        return;\n    }\n    const limit_entries = ratelimit_header.split(',').map(entry =&gt; entry.trim());\n    for (const entry of limit_entries) {\n        const name_match = entry.match(/^([^;]+)/);\n        const r_match = entry.match(/;r=(\\d+)/);\n        const t_match = entry.match(/;t=(\\d+)/);\n        if (!r_match || !t_match) {\n            console.warn(`Invalid ratelimit format: ${entry}`);\n            continue;\n        }\n        const limit_name = name_match ? name_match[1] : 'unknown_limit';\n        const remaining_quantity = parse_int_safe(r_match[1]);\n        const window_seconds = parse_int_safe(t_match[1]);\n        if (remaining_quantity &lt; 5) {\n            const wait_time = window_seconds + 1;\n            console.log(`Waiting ${wait_time} seconds due to ${limit_name} limit`);\n            await sleep(wait_time);\n        }\n    }\n}\nasync function get_total_pages() {\n    const search_tags = config.tags.join(',');\n    const response = await OCTO_REMOTE_API.get(`/profiles?page=0&amp;page_len=${config.page_len}&amp;search_tags=${search_tags}`);\n    await check_limits(response);\n    const total_count = response.data.total_count;\n    return Math.ceil(total_count / config.page_len);\n}\nasync function get_profiles_by_tags(page) {\n    const search_tags = config.tags.join(',');\n    const response = await OCTO_REMOTE_API.get(`/profiles?page=${page}&amp;page_len=${config.page_len}&amp;search_tags=${search_tags}`);\n    await check_limits(response);\n    return response.data.data;\n}\nasync function update_profile(uuid) {\n    const data = {\n        extensions: config.extensions,\n        bookmarks: config.bookmarks,\n        start_pages: config.start_pages\n    };\n    try {\n        const response = await OCTO_REMOTE_API.patch(`/profiles/${uuid}`, data);\n        await check_limits(response);\n        console.log(`Profile ${uuid} updated successfully`);\n    } catch (error) {\n        console.error(`Error updating profile ${uuid}:`, error.response?.data || error.message);\n    }\n}\n(async () =&gt; {\n    const total_pages = await get_total_pages();\n    console.log(`Total pages to process: ${total_pages}`);\n    for (let page = 0; page &lt; total_pages; page++) {\n        const profiles = await get_profiles_by_tags(page);\n        if (profiles.length === 0) {\n            console.log(`No profiles found on page ${page} with tags ${config.tags.join(', ')}`);\n            continue;\n        }\n        for (const profile of profiles) {\n            await update_profile(profile.uuid);\n        }\n    }\n})();\n\n</code></pre>\n","_postman_id":"e5426c98-b674-4810-bfd9-945eccd6b4c7"},{"name":"Creating Saved Proxies in Bulk from a .TXT file and Creating Profiles with Them","item":[],"id":"9ca4c443-603c-4468-8a8a-f02ca43c7f3f","description":"<h3 id=\"to-use-the-following-code-you-need-to-have-a-txt-file-with-the-proxy-data-in-the-following-format\"><strong>To use the following code, you need to have a .TXT file with the proxy data in the following format:</strong></h3>\n<p><strong>protocol;host;port;login;password;title;change_ip_url</strong></p>\n<p><strong>The \"change_ip_url\" parameter is optional.</strong></p>\n<p><em>The proxy data must be provided strictly in the specified order.</em></p>\n<p><em>Use only the following protocols:</em> <strong>socks5, http, ssh.</strong></p>\n<p>An example file:</p>\n<img src=\"https://content.pstmn.io/bc2a08dd-3188-447e-9541-c831429c9186/U25pcHBldC5wbmc=\" />\n\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\nconst fs = require('fs').promises;\nconst config = {\n  octo_token: \"OCTO_API_TOKEN\", // Specify your API token here\n  proxies_file: \"proxies.txt\", // Specify the proxy file name\n  octo_api_base_url: \"https://app.octobrowser.net/api/v2/automation/\"\n};\nconst octo_remote_api = axios.create({\n  baseURL: config.octo_api_base_url,\n  timeout: 10000,\n  headers: {\n    'X-Octo-Api-Token': config.octo_token,\n    'Content-Type': \"application/json\"\n  }\n});\nasync function sleep(ms) {\n  return new Promise(resolve =&gt; setTimeout(resolve, ms));\n}\nasync function check_limits(response) {\n    function parse_int_safe(value) {\n        const parsed = parseInt(value, 10);\n        return isNaN(parsed) ? 0 : parsed;\n    }\n    const ratelimit_header = response.headers.ratelimit;\n    if (!ratelimit_header) {\n        console.warn('No ratelimit header found!');\n        return;\n    }\n    const limit_entries = ratelimit_header.split(',').map(entry =&gt; entry.trim());\n    for (const entry of limit_entries) {\n        const name_match = entry.match(/^([^;]+)/);\n        const r_match = entry.match(/;r=(\\d+)/);\n        const t_match = entry.match(/;t=(\\d+)/);\n        if (!r_match || !t_match) {\n            console.warn(`Invalid ratelimit format: ${entry}`);\n            continue;\n        }\n        const limit_name = name_match ? name_match[1] : 'unknown_limit';\n        const remaining_quantity = parse_int_safe(r_match[1]);\n        const window_seconds = parse_int_safe(t_match[1]);\n        if (remaining_quantity &lt; 5) {\n            const wait_time = window_seconds + 1;\n            console.log(`Waiting ${wait_time} seconds due to ${limit_name} limit`);\n            await sleep(wait_time);\n        }\n    }\n}\nasync function create_proxy(proxy_data) {\n  try {\n    const response = await octo_remote_api.post('proxies', proxy_data);\n    await check_limits(response);\n    console.log(`Proxy ${proxy_data.title} created, UUID: ${response.data.data.uuid}`);\n    return response.data.data.uuid;\n  } catch (error) {\n    console.error(`Error creating proxy ${proxy_data.title}:`, error.response ? error.response.data : error.message);\n    return null;\n  }\n}\nasync function create_profile(profile_number, proxy_uuid, profile_title) {\n  const data = {\n    title: profile_title || `Profile ${profile_number}`,\n    proxy: { uuid: proxy_uuid },\n    fingerprint: { os: \"win\" }\n  };\n  try {\n    const response = await octo_remote_api.post('profiles', data);\n    await check_limits(response);\n    console.log(`Profile ${data.title} created successfully`);\n  } catch (error) {\n    console.error(`Error creating profile ${profile_number}:`, error.response ? error.response.data : error.message);\n  }\n}\nasync function main() {\n  try {\n    const data = await fs.readFile(config.proxies_file, 'utf-8');\n    const lines = data.split(/\\r?\\n/).filter(line =&gt; line.trim().length &gt; 0);\n    for (let i = 0; i &lt; lines.length; i++) {\n      const splitted = lines[i].split(';');\n      let proxy_data;\n      if (splitted.length === 7) {\n        let [type, host, port, login, password, title, change_ip_url] = splitted;\n        proxy_data = {\n          type,\n          host,\n          port: parseInt(port),\n          login,\n          password,\n          title,\n          change_ip_url\n        };\n      } else if (splitted.length === 6) {\n        let [type, host, port, login, password, title] = splitted;\n        proxy_data = {\n          type,\n          host,\n          port: parseInt(port),\n          login,\n          password,\n          title\n        };\n      } else {\n        console.log(`Skipping invalid proxy data on line ${i + 1}`);\n        continue;\n      }\n      const proxy_uuid = await create_proxy(proxy_data);\n      if (proxy_uuid) {\n        await create_profile(i + 1, proxy_uuid, proxy_data.title);\n      }\n    }\n  } catch (err) {\n    console.error(\"Error reading proxies file:\", err);\n  }\n}\nmain();\n\n</code></pre>\n","_postman_id":"9ca4c443-603c-4468-8a8a-f02ca43c7f3f"},{"name":"Adding a Saved Proxy to a Profile","item":[],"id":"aacb475c-4f38-4c8d-a3c0-203f998772f3","description":"<h3 id=\"how-to-get-the-uuid-of-a-saved-proxy-using-api\"><strong>How to get the UUID of a saved proxy using API:</strong></h3>\n<p><strong>Getting the favorite proxy's UUID from the profile data:</strong></p>\n<ul>\n<li><p>Connect the desired proxy to any profile.</p>\n</li>\n<li><p>Get the profile with the desired proxy using a GET request.</p>\n</li>\n<li><p>The server response will contain all data about the profile, including the UUID of the saved proxy.</p>\n</li>\n<li><p>You can remove unnecessary server response fields and display only the UUID of the saved proxy.</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">console.dir(response.data.data.proxy.uuid);\n// We don't have to output the whole response to the console, only the proxy's UUID.\n// Example of a server response:\n'f9092a2f33384823be70554442311cc6'\n\n</code></pre>\n<p><strong>Getting the saved proxy's UUID from the Proxy Manager list:</strong></p>\n<ul>\n<li><p>Use a Get Proxies request (you can find it in the documentation). You will get the data for all proxies saved in the Proxy Manager of your Octo Browser account; copy the UUID of the proxy that you need.</p>\n</li>\n<li><p>Example of a server response:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">{\n      uuid: 'cbc173cc120747c7b57d4f6ea2496141',\n      type: 'socks5',\n      port: 5003,\n      host: '127.0.0.1',\n      login: 'admin',\n      password: 'admin',\n      change_ip_url: null,\n      external_id: null,\n      profiles_count: 0,\n      title: 'USA #2'\n},\n\n</code></pre>\n<h3 id=\"adding-a-proxy-to-a-profile\">Adding a Proxy to a Profile</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\nconst config = {\n  octo_token: \"OCTO_API_TOKEN\", // Specify your API token here\n  octo_api_base_url: \"https://app.octobrowser.net/api/v2/automation/\",\n  profile_uuid: \"PROFILE_UUID\",      // UUID of the profile to be updated\n  proxy_uuid: \"PROXY_UUID\"      // UUID of the proxy to be assigned to the profile\n};\nconst OCTO_REMOTE_API = axios.create({\n  baseURL: config.octo_api_base_url,\n  timeout: 10000,\n  headers: {\n    'Content-Type': 'application/json',\n    'X-Octo-Api-Token': config.octo_token\n  }\n});\nconst patch_data = {\n  proxy: {\n    uuid: config.proxy_uuid\n  }\n};\nconst patch_config = {\n  method: 'patch',\n  url: `/profiles/${config.profile_uuid}`,\n  data: patch_data\n};\nOCTO_REMOTE_API(patch_config)\n  .then(response =&gt; {\n    console.log('Profile updated successfully:', response.data);\n  })\n  .catch(error =&gt; {\n    console.error('Error updating profile:', error.response ? error.response.data : error.message);\n  });\n\n</code></pre>\n","_postman_id":"aacb475c-4f38-4c8d-a3c0-203f998772f3"},{"name":"Exporting all Profiles on the Export List to Files","item":[],"id":"340fda51-3ef0-49a4-8777-27d561836380","description":"<p>This example collects profile data from the Export List and, based on that data, creates files with the .octo extension to be imported later.</p>\n<p>Use an already existing folder for the \"path_to_folder\" parameter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const axios = require('axios');\nconst fs = require('fs').promises;\nconst path = require('path');\nconst octo_api_token = \"OCTO_API_TOKEN\"; // Specify your API token here\nconst path_to_folder = \"C:\\\\PATH\\\\TO\\\\YOUR\\\\FOLDER\"; // Specify the path to an existing folder\nconst octo_remote_api = axios.create({\n  baseURL: 'https://app.octobrowser.net/api/v2/automation/',\n  headers: {\n    'X-Octo-Api-Token': octo_api_token,\n    'Content-Type': 'application/json'\n  }\n});\nlet export_profiles_data = [];\nasync function get_total_profiles() {\n  try {\n    const response = await octo_remote_api.get('profiles/export?page=0');\n    return response.data.data.total || 0;\n  } catch (error) {\n    console.error('Error fetching total profiles:', error.message);\n    return 0;\n  }\n}\nasync function get_profiles(total_profiles) {\n  const total_pages = Math.ceil(total_profiles / 100);\n  console.log(`Total pages: ${total_pages}`);\n  for (let page = 0; page &lt; total_pages; page++) {\n    try {\n      const response = await octo_remote_api.get(`profiles/export?page=${page}&amp;page_len=100`);\n      export_profiles_data.push(...response.data.data.data);\n    } catch (error) {\n      console.error(`Error fetching page ${page}:`, error.message);\n    }\n  }\n}\nasync function ensure_dir_exists(dir) {\n  try {\n    await fs.access(dir);\n  } catch {\n    await fs.mkdir(dir, { recursive: true });\n  }\n}\nasync function write_to_files() {\n  await ensure_dir_exists(path_to_folder);\n  const used_file_names = {};\n  for (const item of export_profiles_data) {\n    const inner_json_string = JSON.stringify(item);\n    const outer_object = { data: inner_json_string };\n    const json_to_write = JSON.stringify(outer_object);\n    let filename = item.title.replace(/[^a-z0-9]/gi, '_').toLowerCase();\n    if (used_file_names[filename] !== undefined) {\n      used_file_names[filename]++;\n      filename += `_${used_file_names[filename]}`;\n    } else {\n      used_file_names[filename] = 0;\n    }\n    const file_path = path.join(path_to_folder, `${filename}.octo`);\n    try {\n      await fs.writeFile(file_path, json_to_write);\n    } catch (error) {\n      console.error(`Error writing file ${filename}:`, error.message);\n    }\n  }\n}\n(async () =&gt; {\n  const total_profiles = await get_total_profiles();\n  console.log(`Total profiles in export list: ${total_profiles}`);\n  if (total_profiles === 0) {\n    console.log('No profiles found or error fetching total.');\n    return;\n  }\n  await get_profiles(total_profiles);\n  console.log(`Quantity of profiles fetched: ${export_profiles_data.length}`);\n  await write_to_files();\n  console.log('Profiles saved successfully.');\n})();\n\n</code></pre>\n","_postman_id":"340fda51-3ef0-49a4-8777-27d561836380"},{"name":"Geting All Profile Titles","item":[],"id":"9b503a3a-a38e-4e69-96d2-863d9f5127a6","description":"<p>This script retrieves all profile titles and saves them into a text file named profiles_titles.txt.<br />The output file is created in the current working directory.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const fs = require('fs').promises;\nconst axios = require('axios');\n//This is the configuration. Specify your Octo API Token here\nconst config = {\n    octo_token: \"OCTO_API_TOKEN\", // Specify your API token here\n    octo_api_base_url: \"https://app.octobrowser.net/api/v2/automation/\",\n}\nconst OCTO_REMOTE_API = axios.create({\n    baseURL: config.octo_api_base_url,\n    timeout: 10000,\n    headers: {\n        'X-Octo-Api-Token': config.octo_token,\n        'Content-Type': \"application/json\"\n    }\n});\nasync function sleep(ms) {\n    return new Promise(resolve =&gt; setTimeout(resolve, ms * 1000));\n}\nasync function check_limits(response) {\n    function parse_int_safe(value) {\n        const parsed = parseInt(value, 10);\n        return isNaN(parsed) ? 0 : parsed;\n    }\n    const ratelimit_header = response.headers.ratelimit;\n    if (!ratelimit_header) {\n        console.warn('No ratelimit header found!');\n        return;\n    }\n    const limit_entries = ratelimit_header.split(',').map(entry =&gt; entry.trim());\n    for (const entry of limit_entries) {\n        const name_match = entry.match(/^([^;]+)/);\n        const r_match = entry.match(/;r=(\\d+)/);\n        const t_match = entry.match(/;t=(\\d+)/);\n        if (!r_match || !t_match) {\n            console.warn(`Invalid ratelimit format: ${entry}`);\n            continue;\n        }\n        const limit_name = name_match ? name_match[1] : 'unknown_limit';\n        const remaining_quantity = parse_int_safe(r_match[1]);\n        const window_seconds = parse_int_safe(t_match[1]);\n        if (remaining_quantity &lt; 5) {\n            const wait_time = window_seconds + 1;\n            console.log(`Waiting ${wait_time} seconds due to ${limit_name} limit`);\n            await sleep(wait_time);\n        }\n    }\n}\nasync function get_total_pages() {\n    const response = await OCTO_REMOTE_API.get('/profiles?page=0&amp;page_len=10');\n    const total_profiles = response.data.total_count;\n    const total_pages = Math.ceil(response.data.total_count / 100);\n    console.log(`Total Profiles: ${total_profiles}\\nTotal Pages: ${total_pages}`);\n    await check_limits(response);\n    return total_pages;\n}\nasync function get_all_profiles_titles(total_pages) {\n    let profiles = [];\n    for (let i = 0; i &lt; total_pages; i++) {\n        let response = await OCTO_REMOTE_API.get(`/profiles?page=${i}&amp;page_len=100&amp;fields=title`);\n        await check_limits(response);\n        profiles.push(...response.data.data);\n    }\n    return profiles;\n}\nasync function write_file(profiles) {\n    const titles = profiles.map(item =&gt; item.title).filter(Boolean);\n    try {\n        await fs.writeFile('./profiles_titles.txt', titles.join('\\n'), 'utf-8');\n    } catch (error) {\n        console.error(`ERROR: While trying writing the file some error occured:\\n${error}`);\n    }\n}\n(async () =&gt; {\n    const total_pages = await get_total_pages();\n    const profiles = await get_all_profiles_titles(total_pages);\n    await write_file(profiles);\n    console.log('Finished. Check profiles_titles.txt file...');\n})()\n\n</code></pre>\n","_postman_id":"9b503a3a-a38e-4e69-96d2-863d9f5127a6"}],"id":"9a2295a2-2872-464b-a622-dc39ab54039c","description":"<p><strong>Examples of useful scripts for Node.js</strong></p>\n","_postman_id":"9a2295a2-2872-464b-a622-dc39ab54039c"},{"name":"Python","item":[{"name":"Create Profiles in Bulk","item":[],"id":"23e21132-f61b-4571-a06e-d8828f3ea94a","description":"<h3 id=\"creating-profiles-in-bulk\">Creating Profiles in Bulk</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nimport time\n# Configuration is here. Insert your API token and specify the desired number of profiles\nconfig = {\n    \"octo_token\": \"OCTO_API_TOKEN\",  # Place your API token here\n    \"quantity_of_profiles\": 10,      # Specify the desired number of profiles\n    \"octo_api_base_url\": \"https://app.octobrowser.net/api/v2/automation/\"\n}\nsession = requests.Session()\nsession.headers.update({\n    \"X-Octo-Api-Token\": config[\"octo_token\"],\n    \"Content-Type\": \"application/json\"\n})\nsession.timeout = 10\ndef sleep(ms):\n    time.sleep(ms)\ndef parse_int_safe(value):\n    try:\n        return int(value)\n    except (ValueError, TypeError):\n        return 0\ndef check_limits(response):\n    ratelimit_header = response.headers.get('ratelimit')\n    if not ratelimit_header:\n        print('No ratelimit header found!')\n        return\n    limit_entries = [entry.strip() for entry in ratelimit_header.split(',')]\n    for entry in limit_entries:\n        parts = entry.split(';')\n        limit_name = parts[0] if parts else 'unknown_limit'\n        remaining_quantity = 0\n        window_seconds = 0\n        for part in parts[1:]:\n            if part.startswith('r='):\n                remaining_quantity = parse_int_safe(part[2:])\n            elif part.startswith('t='):\n                window_seconds = parse_int_safe(part[2:])\n        print(f'{limit_name}: remaining={remaining_quantity}, window={window_seconds}s')\n        if remaining_quantity &lt; 5:\n            wait_time = window_seconds + 1\n            print(f'Waiting {wait_time} seconds due to {limit_name} limit')\n            sleep(wait_time)\ndef create_profiles(quantity):\n    for i in range(quantity):\n        data = {\n            \"title\": f\"Profile {i}\",\n            \"fingerprint\": {\n                \"os\": \"win\"\n            }\n        }\n        try:\n            response = session.post(f\"{config['octo_api_base_url']}profiles\", json=data)\n            response.raise_for_status()\n            check_limits(response)\n            print(f\"Profile {data['title']} created successfully:\", response.json())\n        except requests.RequestException as e:\n            error_msg = e.response.json() if e.response else str(e)\n            print(f\"Error creating profile {i}:\", error_msg)\nif __name__ == \"__main__\":\n    create_profiles(config[\"quantity_of_profiles\"])\n\n</code></pre>\n","_postman_id":"23e21132-f61b-4571-a06e-d8828f3ea94a"},{"name":"Adding Extensions/Start Pages/Bookmarks to Profiles","item":[],"id":"ee9a2607-1840-406b-b115-111304f2e68e","description":"<h3 id=\"how-to-get-the-extension-uuid-using-api\"><strong>How to get the extension UUID using API:</strong></h3>\n<ul>\n<li><p>Add the desired extension to any profile (read <a href=\"https://docs.octobrowser.net/en/profiles/extensions/\">How to connect extensions to profiles</a> to learn more).</p>\n</li>\n<li><p>Get the profile with the desired extension using a GET request.</p>\n</li>\n<li><p>The server response will contain all data about the profile, including UUIDs of connected extensions.</p>\n</li>\n<li><p>You can remove unnecessary server response fields to show only the extensions:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nuuid = 'UUID'  # Specify the profile UUID here\napi_token = 'OCTO_API_TOKEN'  # Specify your API token here\nurl = f\"https://app.octobrowser.net/api/v2/automation/profiles/{uuid}\"\npayload = {}\nheaders = {\n    'X-Octo-Api-Token': api_token\n}\nresponse = requests.request(\"GET\", url, headers=headers, data=payload)\ndata = response.json()\nextensions = data['data']['extensions']\nprint(extensions)\n\n</code></pre>\n<h3 id=\"adding-extensionsstart-pagesbookmarks-to-multiple-profiles\">Adding Extensions/Start Pages/Bookmarks to Multiple Profiles</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nimport time\n# This is the configuration. Specify your Octo API Token here; you can modify this for your personal needs\nconfig = {\n    \"octo_token\": \"OCTO_API_TOKEN\",  # Specify your API token here\n    \"octo_api_base_url\": \"https://app.octobrowser.net/api/v2/automation/\",\n    \"profiles_to_update\": [\n        \"UUID_1\",\n        \"UUID_2\" # Add UUIDs of profiles\n    ],\n    \"data\": {\n        \"extensions\": [\"nkbihfbeogaeaoehlefnkodbefgpgknn@12.17.2\"],\n        \"bookmarks\": [\n            {\"name\": \"google\", \"url\": \"https://google.com\"},\n            {\"name\": \"facebook\", \"url\": \"https://facebook.com\"}\n        ],\n        \"start_pages\": [\"https://google.com\", \"https://facebook.com\"]\n    }\n}\nsession = requests.Session()\nsession.headers.update({\n    \"X-Octo-Api-Token\": config[\"octo_token\"],\n    \"Content-Type\": \"application/json\"\n})\nsession.timeout = 10\ndef sleep(seconds):\n    time.sleep(seconds)\ndef parse_int_safe(value):\n    try:\n        return int(value)\n    except (ValueError, TypeError):\n        return 0\ndef check_limits(response):\n    ratelimit_header = response.headers.get('ratelimit')\n    if not ratelimit_header:\n        print('No ratelimit header found!')\n        return\n    limit_entries = [entry.strip() for entry in ratelimit_header.split(',')]\n    for entry in limit_entries:\n        parts = entry.split(';')\n        limit_name = parts[0] if parts else 'unknown_limit'\n        remaining_quantity = 0\n        window_seconds = 0\n        for part in parts[1:]:\n            if part.startswith('r='):\n                remaining_quantity = parse_int_safe(part[2:])\n            elif part.startswith('t='):\n                window_seconds = parse_int_safe(part[2:])\n        print(f'{limit_name}: remaining={remaining_quantity}, window={window_seconds}s')\n        if remaining_quantity &lt; 5:\n            wait_time = window_seconds + 1\n            print(f'Waiting {wait_time} seconds due to {limit_name} limit')\n            sleep(wait_time)\ndef update_profile(uuid):\n    try:\n        response = session.patch(\n            f\"{config['octo_api_base_url']}profiles/{uuid}\",\n            json=config[\"data\"]\n        )\n        response.raise_for_status()\n        check_limits(response)\n        print(f\"Profile {uuid} updated successfully\")\n    except Exception as e:\n        print(f\"Error updating profile {uuid}: {str(e)}\")\nif __name__ == \"__main__\":\n    for uuid in config[\"profiles_to_update\"]:\n        update_profile(uuid)\n\n</code></pre>\n<h3 id=\"adding-extensionsstart-pagesbookmarks-to-all-profiles-on-your-account\">Adding Extensions/Start Pages/Bookmarks to all Profiles on your Account</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nimport math\nimport time\n# This is the configuration. Specify your Octo API Token here; you can modify this for your personal needs\nconfig = {\n    \"octo_token\": \"OCTO_API_TOKEN\", # Specify your API token here\n    \"octo_api_base_url\": \"https://app.octobrowser.net/api/v2/automation/\",\n    \"data\": {\n        \"extensions\": [\"aapfglkgnhmiaabhiijkjpfmhllaodgp@4.2.3\"],\n        \"bookmarks\": [\n            {\"name\": \"google\", \"url\": \"https://google.com\"},\n            {\"name\": \"facebook\", \"url\": \"https://facebook.com\"}\n        ],\n        \"start_pages\": [\"https://google.com\", \"https://facebook.com\"]\n    }\n}\nsession = requests.Session()\nsession.headers.update({\n    \"X-Octo-Api-Token\": config[\"octo_token\"],\n    \"Content-Type\": \"application/json\"\n})\nsession.timeout = 10\ndef sleep(seconds):\n    time.sleep(seconds)\ndef parse_int_safe(value):\n    try:\n        return int(value)\n    except (ValueError, TypeError):\n        return 0\ndef check_limits(response):\n    ratelimit_header = response.headers.get('ratelimit')\n    if not ratelimit_header:\n        print('No ratelimit header found!')\n        return\n    limit_entries = [entry.strip() for entry in ratelimit_header.split(',')]\n    for entry in limit_entries:\n        parts = entry.split(';')\n        limit_name = parts[0] if parts else 'unknown_limit'\n        remaining_quantity = 0\n        window_seconds = 0\n        for part in parts[1:]:\n            if part.startswith('r='):\n                remaining_quantity = parse_int_safe(part[2:])\n            elif part.startswith('t='):\n                window_seconds = parse_int_safe(part[2:])\n        print(f'{limit_name}: remaining={remaining_quantity}, window={window_seconds}s')\n        if remaining_quantity &lt; 5:\n            wait_time = window_seconds + 1\n            print(f'Waiting {wait_time} seconds due to {limit_name} limit')\n            sleep(wait_time)\ndef get_total_profiles():\n    response = session.get(f\"{config['octo_api_base_url']}profiles?page=0&amp;page_len=10\")\n    response.raise_for_status()\n    total_profiles = response.json()[\"total_count\"]\n    total_pages = math.ceil(total_profiles / 100)\n    print(f\"Total Profiles: {total_profiles}\\nTotal Pages: {total_pages}\")\n    check_limits(response)\n    return total_pages\ndef get_all_profiles_uuids(total_pages):\n    profiles = []\n    for i in range(total_pages):\n        response = session.get(f\"{config['octo_api_base_url']}profiles?page={i}&amp;page_len=100\")\n        response.raise_for_status()\n        check_limits(response)\n        profiles.extend(response.json()[\"data\"])\n    return profiles\ndef patch_all_profiles(profiles):\n    updated = []\n    not_updated = []\n    for profile in profiles:\n        try:\n            response = session.patch(\n                f\"{config['octo_api_base_url']}profiles/{profile['uuid']}\",\n                json=config[\"data\"]\n            )\n            response.raise_for_status()\n            check_limits(response)\n            updated.append(profile)\n            print(f\"Successfully updated {profile['uuid']}\")\n        except Exception as e:\n            not_updated.append(profile)\n            print(f\"ERROR: Can't patch profile {profile['uuid']} - {str(e)}\")\n    return updated, not_updated\nif __name__ == \"__main__\":\n    try:\n        total = get_total_profiles()\n        profiles = get_all_profiles_uuids(total)\n        updated, not_updated = patch_all_profiles(profiles)\n        print(f\"Finished process:\\nUpdated: {len(updated)}\\nNot updated: {len(not_updated)}\")\n    except Exception as e:\n        print(f\"Fatal error: {str(e)}\")\n\n</code></pre>\n<h3 id=\"adding-extensionsstart-pagesbookmarks-to-profiles-with-certain-tags\">Adding Extensions/Start Pages/Bookmarks to Profiles with Certain Tags</h3>\n<p><strong>Note:</strong> You will get all profiles with the specified tag. This means that if a profile has other tags, it will still be included, so keep that in mind. If you specify two tags, you will only get profiles containing both tags.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nimport math\nimport time\n# here is config. Paste your Octo API Token here and you can modify this for your personal needs\nconfig = {\n    \"octo_token\": \"OCTO_API_TOKEN\",  # Place your API token here\n    \"octo_api_base_url\": \"https://app.octobrowser.net/api/v2/automation/\",\n    \"tags\": ['tag1', 'tag2'], # Specify the required tags\n    \"page_len\": 100,\n    \"extensions\": ['nkbihfbeogaeaoehlefnkodbefgpgknn@12.17.2'],\n    \"start_pages\": [\"https://google.com\", \"https://facebook.com\", \"https://amazon.com\"],\n    \"bookmarks\": [\n        {\"name\": \"google\", \"url\": \"https://google.com\"},\n        {\"name\": \"facebook\", \"url\": \"https://facebook.com\"}\n    ]\n}\nsession = requests.Session()\nsession.headers.update({\n    \"X-Octo-Api-Token\": config[\"octo_token\"],\n    \"Content-Type\": \"application/json\"\n})\nsession.timeout = 10\ndef sleep(seconds):\n    time.sleep(seconds)\ndef parse_int_safe(value):\n    try:\n        return int(value)\n    except (ValueError, TypeError):\n        return 0\ndef check_limits(response):\n    ratelimit_header = response.headers.get('ratelimit')\n    if not ratelimit_header:\n        print('No ratelimit header found!')\n        return\n    limit_entries = [entry.strip() for entry in ratelimit_header.split(',')]\n    for entry in limit_entries:\n        parts = entry.split(';')\n        limit_name = parts[0] if parts else 'unknown_limit'\n        remaining_quantity = 0\n        window_seconds = 0\n        for part in parts[1:]:\n            if part.startswith('r='):\n                remaining_quantity = parse_int_safe(part[2:])\n            elif part.startswith('t='):\n                window_seconds = parse_int_safe(part[2:])\n        print(f'{limit_name}: remaining={remaining_quantity}, window={window_seconds}s')\n        if remaining_quantity &lt; 5:\n            wait_time = window_seconds + 1\n            print(f'Waiting {wait_time} seconds due to {limit_name} limit')\n            sleep(wait_time)\ndef get_total_pages():\n    search_tags = \",\".join(config[\"tags\"])\n    url = f\"{config['octo_api_base_url']}profiles?page=0&amp;page_len={config['page_len']}&amp;search_tags={search_tags}\"\n    response = session.get(url)\n    response.raise_for_status()\n    check_limits(response)\n    total_count = response.json().get(\"total_count\", 0)\n    return math.ceil(total_count / config[\"page_len\"])\ndef get_profiles_by_tags(page):\n    search_tags = \",\".join(config[\"tags\"])\n    url = f\"{config['octo_api_base_url']}profiles?page={page}&amp;page_len={config['page_len']}&amp;search_tags={search_tags}\"\n    response = session.get(url)\n    response.raise_for_status()\n    check_limits(response)\n    return response.json().get(\"data\", [])\ndef update_profile(uuid):\n    data = {\n        \"extensions\": config[\"extensions\"],\n        \"bookmarks\": config[\"bookmarks\"],\n        \"start_pages\": config[\"start_pages\"]\n    }\n    try:\n        url = f\"{config['octo_api_base_url']}profiles/{uuid}\"\n        response = session.patch(url, json=data)\n        response.raise_for_status()\n        check_limits(response)\n        print(f\"Profile {uuid} updated successfully\")\n    except requests.RequestException as e:\n        error_info = e.response.json() if e.response else str(e)\n        print(f\"Error updating profile {uuid}: {error_info}\")\ndef main():\n    total_pages = get_total_pages()\n    print(f\"Total pages to process: {total_pages}\")\n    for page in range(total_pages):\n        profiles = get_profiles_by_tags(page)\n        if not profiles:\n            print(f\"No profiles found on page {page} with tags {', '.join(config['tags'])}\")\n            continue\n        for profile in profiles:\n            update_profile(profile.get(\"uuid\"))\nif __name__ == \"__main__\":\n    main()\n\n</code></pre>\n","_postman_id":"ee9a2607-1840-406b-b115-111304f2e68e"},{"name":"Creating Saved Proxies in Bulk from a .TXT file and Creating Profiles with Them","item":[],"id":"8cc6613b-462f-48cd-92bf-451dd5e04986","description":"<h3 id=\"to-work-with-this-example-of-code-you-should-have-a-txt-file-with-proxy-data-in-the-following-format\"><strong>To work with this example of code, you should have a .TXT file with proxy data in the following format:</strong></h3>\n<p><strong>protocol;host;port;login;password;title;change_ip_url</strong></p>\n<p><strong>change ip URL is optional.</strong></p>\n<p><em>The proxy data must be provided strictly in the specified order.</em></p>\n<p><em>Use only the following protocols:</em><br /><strong>socks5, http, ssh</strong></p>\n<p>An example file:</p>\n<img src=\"https://content.pstmn.io/bc2a08dd-3188-447e-9541-c831429c9186/U25pcHBldC5wbmc=\" />\n\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nimport time\nconfig = {\n    \"octo_token\": \"OCTO_API_TOKEN\", # Your API Token\n    \"proxies_file\": \"proxies.txt\", # File with proxies\n    \"octo_api_base_url\": \"https://app.octobrowser.net/api/v2/automation/\"\n}\nsession = requests.Session()\nsession.headers.update({\n    'X-Octo-Api-Token': config[\"octo_token\"],\n    'Content-Type': \"application/json\"\n})\ndef sleep(ms):\n    time.sleep(ms)\ndef parse_int_safe(value):\n    try:\n        return int(value)\n    except (ValueError, TypeError):\n        return 0\ndef check_limits(response):\n    ratelimit_header = response.headers.get('ratelimit')\n    if not ratelimit_header:\n        print('No ratelimit header found!')\n        return\n    limit_entries = [entry.strip() for entry in ratelimit_header.split(',')]\n    for entry in limit_entries:\n        parts = entry.split(';')\n        limit_name = parts[0] if parts else 'unknown_limit'\n        remaining_quantity = 0\n        window_seconds = 0\n        for part in parts[1:]:\n            if part.startswith('r='):\n                remaining_quantity = parse_int_safe(part[2:])\n            elif part.startswith('t='):\n                window_seconds = parse_int_safe(part[2:])\n        print(f'{limit_name}: remaining={remaining_quantity}, window={window_seconds}s')\n        if remaining_quantity &lt; 5:\n            wait_time = window_seconds + 1\n            print(f'Waiting {wait_time} seconds due to {limit_name} limit')\n            sleep(wait_time)\ndef create_proxy(proxy_data):\n    try:\n        response = session.post(f\"{config['octo_api_base_url']}proxies\", json=proxy_data, timeout=10)\n        response.raise_for_status()\n        check_limits(response)\n        uuid = response.json().get('data', {}).get('uuid')\n        print(f\"Proxy {proxy_data.get('title')} created, UUID: {uuid}\")\n        return uuid\n    except Exception as e:\n        print(f\"Error creating proxy {proxy_data.get('title')}: {e}\")\n        return None\ndef create_profile(profile_number, proxy_uuid, profile_title):\n    data = {\n        \"title\": profile_title or f\"Profile {profile_number}\",\n        \"proxy\": {\"uuid\": proxy_uuid},\n        \"fingerprint\": {\"os\": \"win\"}\n    }\n    try:\n        response = session.post(f\"{config['octo_api_base_url']}profiles\", json=data, timeout=10)\n        response.raise_for_status()\n        check_limits(response)\n        print(f\"Profile {data['title']} created successfully\")\n    except Exception as e:\n        print(f\"Error creating profile {profile_number}: {e}\")\ndef main():\n    try:\n        with open(config[\"proxies_file\"], \"r\", encoding=\"utf-8\") as f:\n            lines = [line.strip() for line in f if line.strip()]\n    except Exception as e:\n        print(f\"Error reading proxies file: {e}\")\n        return\n    for i, line in enumerate(lines):\n        splitted = line.split(';')\n        if len(splitted) == 7:\n            type_, host, port, login, password, title, change_ip_url = splitted\n            proxy_data = {\n                \"type\": type_,\n                \"host\": host,\n                \"port\": int(port),\n                \"login\": login,\n                \"password\": password,\n                \"title\": title,\n                \"change_ip_url\": change_ip_url\n            }\n        elif len(splitted) == 6:\n            type_, host, port, login, password, title = splitted\n            proxy_data = {\n                \"type\": type_,\n                \"host\": host,\n                \"port\": int(port),\n                \"login\": login,\n                \"password\": password,\n                \"title\": title\n            }\n        else:\n            print(f\"Skipping invalid proxy data on line {i + 1}\")\n            continue\n        proxy_uuid = create_proxy(proxy_data)\n        if proxy_uuid:\n            create_profile(i + 1, proxy_uuid, proxy_data.get(\"title\"))\nif __name__ == \"__main__\":\n    main()\n\n</code></pre>\n","_postman_id":"8cc6613b-462f-48cd-92bf-451dd5e04986"},{"name":"Adding a Saved Proxy to a Profile","item":[],"id":"bdb47c83-2edd-4db9-8548-7b30a82034dd","description":"<h3 id=\"how-to-get-the-uuid-of-a-saved-proxy-using-api\"><strong>How to get the UUID of a saved proxy using API:</strong></h3>\n<p><strong>Getting the favorite proxy's UUID from the profile data:</strong></p>\n<ul>\n<li><p>Connect the desired proxy to any profile.</p>\n</li>\n<li><p>Get the profile with the desired proxy using a GET request.</p>\n</li>\n<li><p>The server response will contain all data about the profile, including the UUID of the saved proxy.</p>\n</li>\n<li><p>You can remove unnecessary server response fields and display only the UUID of the saved proxy.</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nuuid = 'UUID'  # Place the profile UUID here\napi_token = 'OCTO_API_TOKEN'  # Place your API token here\nurl = f'https://app.octobrowser.net/api/v2/automation/profiles/{uuid}'\nheaders = {\n    'X-Octo-Api-Token': api_token\n}\ntry:\n    response = requests.get(url, headers=headers)\n    response.raise_for_status()\n    data = response.json()\n    proxy_uuid = data['data']['proxy']['uuid']\n    print(proxy_uuid)\nexcept requests.exceptions.RequestException as e:\n    print(f\"Error: {e}\")\n\n</code></pre>\n<p><strong>Getting the saved proxy's UUID from the Proxy Manager list:</strong></p>\n<ul>\n<li><p>Use a Get Proxies request (you can find it in the documentation). You will get the data for all proxies saved in the Proxy Manager of your Octo Browser account; copy the UUID of the proxy that you need.</p>\n</li>\n<li><p>Example of a server response:</p>\n</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">{\n      uuid: 'cbc173cc120747c7b57d4f6ea2496141',\n      type: 'socks5',\n      port: 5003,\n      host: '127.0.0.1',\n      login: 'admin',\n      password: 'admin',\n      change_ip_url: None,\n      external_id: None,\n      title: 'USA #2',\n      profiles_count: 0\n}\n\n</code></pre>\n<h3 id=\"adding-a-proxy-to-a-profile\">Adding a Proxy to a Profile</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import requests\nconfig = {\n    \"octo_token\": \"OCTO_API_TOKEN\",           # Your API token\n    \"octo_api_base_url\": \"https://app.octobrowser.net/api/v2/automation/\",\n    \"profile_uuid\": \"PROFILE_UUID\",            # UUID of the profile to update\n    \"proxy_uuid\": \"PROXY_UUID\"                 # UUID of the proxy to assign to the profile\n}\nheaders = {\n    \"Content-Type\": \"application/json\",\n    \"X-Octo-Api-Token\": config[\"octo_token\"]\n}\npatch_data = {\n    \"proxy\": {\n        \"uuid\": config[\"proxy_uuid\"]\n    }\n}\ntry:\n    url = f\"{config['octo_api_base_url']}profiles/{config['profile_uuid']}\"\n    response = requests.patch(url, json=patch_data, headers=headers, timeout=10)\n    response.raise_for_status()\n    print(\"Profile updated successfully:\", response.json())\nexcept requests.RequestException as e:\n    if e.response is not None:\n        print(\"Error updating profile:\", e.response.json())\n    else:\n        print(\"Error updating profile:\", str(e))\n\n</code></pre>\n","_postman_id":"bdb47c83-2edd-4db9-8548-7b30a82034dd"},{"name":"Exporting all Profiles on the Export List to Files","item":[],"id":"9ee9b1b7-177f-46da-8ee3-dfac0975869c","description":"<p>This example collects profile data from the Export List and, based on that data, creates files with the .octo extension to be imported later.</p>\n<p>Use an already existing folder for the \"PATH_TO_FOLDER\" parameter.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import asyncio\nimport httpx\nimport json\nfrom pathlib import Path\nfrom typing import List, Dict, Any\n# Configuration\nOCTO_API_TOKEN = \"OCTO_API_TOKEN\"  # Place your API token here\nPATH_TO_FOLDER = \"C:\\\\PATH\\\\TO\\\\YOUR\\\\FOLDER\"  # Specify the path to an existing folder\n# HTTP client setup\nheaders = {\n    'X-Octo-Api-Token': OCTO_API_TOKEN,\n    'Content-Type': 'application/json'\n}\nclient = httpx.AsyncClient(\n    base_url='https://app.octobrowser.net/api/v2/automation/',\n    headers=headers\n)\nexport_profiles_data: List[Dict[str, Any]] = []\nasync def get_total_profiles() -&gt; int:\n    \"\"\"Get total number of profiles\"\"\"\n    try:\n        response = await client.get('profiles/export?page=0')\n        data = response.json()\n        return data.get('data', {}).get('total', 0)\n    except Exception as e:\n        print(f'Error fetching total profiles: {e}')\n        return 0\nasync def get_profiles(total_profiles: int) -&gt; None:\n    total_pages = (total_profiles + 99) // 100\n    print(f'Total pages: {total_pages}')\n    for page in range(total_pages):\n        try:\n            response = await client.get(f'profiles/export?page={page}&amp;page_len=100')\n            data = response.json()\n            export_profiles_data.extend(data.get('data', {}).get('data', []))\n        except Exception as e:\n            print(f'Error fetching page {page}: {e}')\nasync def ensure_dir_exists(directory: str) -&gt; None:\n    path = Path(directory)\n    path.mkdir(parents=True, exist_ok=True)\nasync def write_to_files() -&gt; None:\n    await ensure_dir_exists(PATH_TO_FOLDER)\n    used_file_names: Dict[str, int] = {}\n    for item in export_profiles_data:\n        inner_json_string = json.dumps(item)\n        outer_object = {'data': inner_json_string}\n        json_to_write = json.dumps(outer_object)\n        filename = ''.join(c if c.isalnum() else '_' for c in item.get('title', '')).lower()\n        if filename in used_file_names:\n            used_file_names[filename] += 1\n            filename += f'_{used_file_names[filename]}'\n        else:\n            used_file_names[filename] = 0\n        file_path = Path(PATH_TO_FOLDER) / f'{filename}.octo'\n        try:\n            with open(file_path, 'w', encoding='utf-8') as f:\n                f.write(json_to_write)\n        except Exception as e:\n            print(f'Error writing file {filename}: {e}')\nasync def main():\n    total_profiles = await get_total_profiles()\n    print(f'Total profiles in export list: {total_profiles}')\n    if total_profiles == 0:\n        print('No profiles found or error fetching total.')\n        return\n    await get_profiles(total_profiles)\n    print(f'Quantity of profiles fetched: {len(export_profiles_data)}')\n    await write_to_files()\n    print('Profiles saved successfully.')\n    await client.aclose()\nif __name__ == \"__main__\":\n    asyncio.run(main())\n\n</code></pre>\n","_postman_id":"9ee9b1b7-177f-46da-8ee3-dfac0975869c"},{"name":"Geting All Profile Titles","item":[],"id":"ebeb670b-6283-442f-ad99-746c79d493a1","description":"<p>This script retrieves all profile titles and saves them into a text file named profiles_titles.txt.<br />The output file is created in the current working directory.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-python\">import httpx\nimport asyncio\nfrom pathlib import Path\n#config. Paste your API Token here\nconfig = {\n    \"octo_token\": \"OCTO_API_TOKEN\",\n    \"octo_api_base_url\": \"https://app.octobrowser.net/api/v2/automation/\",\n}\nheaders = {\n    \"X-Octo-Api-Token\": config[\"octo_token\"],\n    \"Content-Type\": \"application/json\",\n}\nasync def sleep(seconds):\n    await asyncio.sleep(seconds)\ndef parse_int_safe(value):\n    try:\n        return int(value)\n    except (ValueError, TypeError):\n        return 0\nasync def check_limits(response):\n    ratelimit_header = response.headers.get('ratelimit')\n    if not ratelimit_header:\n        print('No ratelimit header found!')\n        return\n    limit_entries = [entry.strip() for entry in ratelimit_header.split(',')]\n    for entry in limit_entries:\n        parts = entry.split(';')\n        limit_name = parts[0] if parts else 'unknown_limit'\n        remaining_quantity = 0\n        window_seconds = 0\n        for part in parts[1:]:\n            if part.startswith('r='):\n                remaining_quantity = parse_int_safe(part[2:])\n            elif part.startswith('t='):\n                window_seconds = parse_int_safe(part[2:])\n        print(f'{limit_name}: remaining={remaining_quantity}, window={window_seconds}s')\n        if remaining_quantity &lt; 5:\n            wait_time = window_seconds + 1\n            print(f'Waiting {wait_time} seconds due to {limit_name} limit')\n            await sleep(wait_time)\nasync def get_total_pages(client):\n    response = await client.get(\"profiles?page=0&amp;page_len=10\")\n    data = response.json()\n    total_profiles = data[\"total_count\"]\n    total_pages = (total_profiles + 99) // 100\n    print(f\"Total Profiles: {total_profiles}\\nTotal Pages: {total_pages}\")\n    await check_limits(response)\n    return total_pages\nasync def get_all_profiles_titles(client, total_pages):\n    profiles = []\n    for page in range(total_pages):\n        response = await client.get(\n            f\"profiles?page={page}&amp;page_len=100&amp;fields=title\"\n        )\n        data = response.json()\n        await check_limits(response)\n        profiles.extend(data[\"data\"])\n    return profiles\nasync def write_file(profiles):\n    titles = [item[\"title\"] for item in profiles if item.get(\"title\")]\n    try:\n        Path(\"profiles_titles.txt\").write_text(\"\\n\".join(titles), encoding=\"utf-8\")\n    except Exception as e:\n        print(f\"ERROR: While trying writing the file some error occurred:\\n{e}\")\nasync def main():\n    async with httpx.AsyncClient(\n        base_url=config[\"octo_api_base_url\"],\n        headers=headers\n    ) as client:\n        total_pages = await get_total_pages(client)\n        profiles = await get_all_profiles_titles(client, total_pages)\n        await write_file(profiles)\n        print(\"Finished. Check profiles_titles.txt file...\")\nif __name__ == \"__main__\":\n    asyncio.run(main())\n\n</code></pre>\n","_postman_id":"ebeb670b-6283-442f-ad99-746c79d493a1"}],"id":"7a99bc92-74b0-4742-93a2-f0fb6cbe5898","description":"<p><strong>Examples of useful scripts for Python</strong></p>\n","_postman_id":"7a99bc92-74b0-4742-93a2-f0fb6cbe5898"}],"id":"2e79b10a-07ed-4973-8c8e-eb053101cb91","_postman_id":"2e79b10a-07ed-4973-8c8e-eb053101cb91","description":""},{"name":"Action Log","item":[],"id":"a753117d-a8b0-4490-9b9a-04a5689ee239","description":"<h1 id=\"action-log-stream\">Action log stream</h1>\n<h2 id=\"endpoint\">Endpoint</h2>\n<ul>\n<li><p><strong>Type:</strong> WebSocket</p>\n</li>\n<li><p><strong>URL:</strong> <code>wss://app.octobrowser.net//api/v2/automation/ws/action_log</code></p>\n</li>\n<li><p><strong>Authentication:</strong> Auto API Token (header <code>X-Octo-Api-Token</code>)</p>\n</li>\n</ul>\n<h2 id=\"response-format\">Response Format</h2>\n<p>Each WebSocket message contains a <code>StreamPage</code>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n\"items\": [\n    {\n    \"uuid\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"action\": \"profiles.started\",\n    \"time\": 1707053400,\n    \"user_email\": \"user@example.com\",\n    \"object_type\": \"profile\",\n    \"object_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n    \"object_title\": \"Octo Browser Profile\"\n    }\n  ],\n  \"watermark\": {\n      \"uuid\": \"550e8400-e29b-41d4-a716-446655440000\",\n      \"time\": 1707053400\n  }\n}\n\n</code></pre>\n<h3 id=\"examples\">Examples</h3>\n<p><strong>Initial Connection</strong></p>\n<p><code>wss://app.octobrowser.net/api/v2/automation/ws/action_log</code></p>\n<p><strong>Reconnect After Disconnect</strong></p>\n<p>Use the watermark UUID to resume:</p>\n<p><code>wss://app.octobrowser.net/api/v2/automation/ws/action_log?after_uuid=abc-123</code></p>\n<p><strong>Start From Specific Time</strong></p>\n<p><code>wss://app.octobrowser.net/api/v2/automation/ws/action_log?from_timestamp=1707053400</code></p>\n<h3 id=\"event-types-actions\">Event Types (Actions)</h3>\n<ul>\n<li><p><code>profiles.started</code> - Profile browser was started</p>\n</li>\n<li><p><code>profiles.stopped</code> - Profile browser was stopped</p>\n</li>\n<li><p><code>profiles.force_stopped</code> - Profile browser was force stopped</p>\n</li>\n</ul>\n<h2 id=\"query-parameters\">Query Parameters</h2>\n<ul>\n<li><p><strong>after_uuid</strong> (string, UUID, optional) - UUID of the last received audit entry. Use this to resume streaming from a specific point.</p>\n</li>\n<li><p><strong>from_timestamp</strong> (integer, Unix timestamp, optional) - Start streaming from this timestamp. Events are only available for <strong>24 hours</strong>.</p>\n</li>\n</ul>\n<h2 id=\"how-it-works\">How It Works</h2>\n<ol>\n<li><p><strong>Connect</strong> to the WebSocket endpoint</p>\n</li>\n<li><p><strong>Receive</strong> pages of events as JSON messages</p>\n</li>\n<li><p><strong>Use the watermark</strong> from each response to track your position in the stream and use these values ​​in case of reconnection</p>\n</li>\n</ol>\n<h2 id=\"watermark-mechanics\">Watermark Mechanics</h2>\n<p>The <strong>watermark</strong> acts as a cursor for pagination:</p>\n<ul>\n<li><p>Contains <code>uuid</code> and <code>time</code> of the last record</p>\n</li>\n<li><p>Ensures stable pagination even when multiple records share the same timestamp</p>\n</li>\n<li><p>Use <code>after_uuid</code> parameter on reconnect to resume from where you left off</p>\n</li>\n<li><p>Use the <code>from_time</code> parameter when reconnecting to continue from a specific time</p>\n</li>\n</ul>\n<h2 id=\"constraints\">Constraints</h2>\n<ul>\n<li><p>Event retention: 24 hours</p>\n</li>\n<li><p>Batch size: Up to 100 records per page</p>\n</li>\n<li><p>Requirements: Team must have API option in subscription</p>\n</li>\n</ul>\n","auth":{"type":"apikey","apikey":{"value":"","key":"<key>"},"isInherited":false},"_postman_id":"a753117d-a8b0-4490-9b9a-04a5689ee239"}],"event":[{"listen":"prerequest","script":{"id":"770d77a3-5e02-40c0-96ce-a306f63bb044","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"fa5f81dd-95f1-4590-94a9-719d907f4da2","type":"text/javascript","exec":[""]}}],"variable":[{"id":"069cb3c2-5a8d-465d-8dcb-8657c0b2bf5c","key":"baseUrl","value":"/"},{"id":"c407b232-9de6-4dab-afe7-ca8beea095dd","key":"API_TOKEN","value":""},{"id":"89708265-0a42-4ee6-82e4-1bb2a2e12527","key":"PROFILE","value":"Profile"},{"id":"18be5c73-4b5d-4de1-abf2-def7919a2f16","key":"TAG","value":"Tag"},{"id":"145a10b3-e25c-45bf-a1ce-a360fad34e6d","key":"Proxy","value":"Proxy"},{"id":"ccf92226-c8a7-46ab-a998-e0759ae6f6a0","key":"UUID","value":"UUID"},{"id":"a92f8ad6-43df-4101-a8ef-a8f5f6794341","key":"PROFILE_UUID","value":""},{"id":"93a7cd5f-e60a-4258-8b82-5073a733221e","key":"localUrl","value":""},{"id":"e91f0792-3443-4f19-8283-e4517a5458a9","key":"TAG_UUID","value":"8e7c08beb89f4366aa854bdbd7473702"},{"id":"e6652f08-2a64-4812-a8a5-2ae9af0a97d2","key":"PROXY_UUID","value":"6cbecae429ba48d48836f22baf0e99a0"}]}