# Modify browser profile

Update an existing browser profile. Only the fields present in the request are changed.
- **Preconditions**: the profile must exist in the team. End-to-end encrypted profiles cannot be updated. The operating system and browser type cannot be changed. A running profile can be updated.
- **Effect**: writes the profile row, its expanded settings and cookies, and merges the advanced fingerprint settings (existing values are kept unless overwritten).
- **Completion**: synchronous.
- **Retry**: safe to repeat with the same body. Note there is no optimistic locking: concurrent updates to one profile are last-write-wins, and the fingerprint merge reads before it writes, so concurrent callers can lose changes.

Documented business errors: `19001`, `19039`, `19104`, `19105`, `19106`, `19107`, `19108`, `19142`, `19159`, `19160`, `19175`, `19193`. See [Error Codes](../Getting%20Started/error-codes.md) for what each code means. Any operation can additionally return the common codes.

Endpoint: POST /api/env/update
Version: 2026-09-05

## Request fields (application/json):

  - `browserTypeId` (integer)
    Browser type ID; 1=Chrome, 2=Firefox

  - `operatorSystemId` (integer)
    OS type ID; 1:Windows 2:macOS 3:Android 4:IOS 5:Linux

  - `isEncrypt` (integer)
    Whether to encrypt the profile; 0=No, 1=Yes

  - `startupParams` (array)
    Additional browser startup parameters

  - `accountInfo` (object)

  - `accountInfo.customerUrl` (string)
    Custom platform URL — required if platformId=9999, must be a valid URL

  - `accountInfo.password` (string)
    Password; max length:50 characters

  - `accountInfo.platformId` (string)
    Platform ID; use 9999 for custom URL. Refer to /api/system/platform/list.

  - `accountInfo.siteId` (string)
    Site ID; obtain via ""Get Configurable Platforms"" API (/api/system/platform/list)

  - `accountInfo.username` (string)
    Username; max length:64 characters

  - `advancedSetting` (object)
    Advanced browser fingerprint and behavior configuration.

  - `advancedSetting.ua` (string)
    Customize the profile User-Agent (UA). Must follow standard UA format.
Available via the “Get Browser UA” API.

  - `advancedSetting.time_zone` (object)

  - `advancedSetting.time_zone.switcher` (integer)
    Timezone option. Default:1. 1 = Match IP, 2 = Custom.

  - `advancedSetting.time_zone.value` (string)
    Required when switcher=2.
Timezone ID from “Get Timezone & Language List” API.

  - `advancedSetting.web_rtc` (object)

  - `advancedSetting.web_rtc.switcher` (integer)
    WebRTC policy. Default:2. 1 = Privacy, 2 = Replacement, 3 = Real, 4 = Disabled, 5 = Forwarding.

  - `advancedSetting.geo_location` (object)

  - `advancedSetting.geo_location.switcher` (integer)
    Geolocation policy. Default:1. 1 = Prompt, 2 = Disabled.

  - `advancedSetting.geo_location.base_on_ip` (boolean)
    Generate location based on IP? Default:true. true = prompt, false = manual.

  - `advancedSetting.geo_location.latitude` (number)
    Latitude. Required if base_on_ip=false.

  - `advancedSetting.geo_location.longitude` (number)
    Longitude. Required if base_on_ip=false.

  - `advancedSetting.geo_location.accuracy` (number)
    Accuracy in meters. Required if base_on_ip=false.

  - `advancedSetting.language` (object)

  - `advancedSetting.language.switcher` (integer)
    Language policy. Default:1. 1 = Match IP, 2 = Custom.

  - `advancedSetting.language.value` (string)
    Required when switcher=2.
Comma-separated language IDs from “Get Timezone & Language List” API.

  - `advancedSetting.resolution` (object)

  - `advancedSetting.resolution.switcher` (integer)
    Resolution policy. Default:1. 1 = Real, 2 = Custom.

  - `advancedSetting.resolution.id` (string)
    Required when switcher=2.
Resolution ID from “Get Resolution List” API.

  - `advancedSetting.font` (object)

  - `advancedSetting.font.switcher` (integer)
    Font policy. Default:1. 1 = Real, 2 = Custom.

  - `advancedSetting.font.value` (string)
    Comma-separated custom font names (required if switcher=2).

  - `advancedSetting.canvas` (object)

  - `advancedSetting.canvas.switcher` (integer)
    Canvas policy. Default:1. 1 = Noise, 2 = Real.

  - `advancedSetting.webgl_image` (object)

  - `advancedSetting.webgl_image.switcher` (integer)
    WebGL image policy. Default:1. 1 = Noise, 2 = Real.

  - `advancedSetting.webgl_metadata` (object)

  - `advancedSetting.webgl_metadata.switcher` (integer)
    WebGL metadata policy. Default:3. 1 = Real, 2 = Disable HW acceleration, 3 = Custom.

  - `advancedSetting.webgl_metadata.provider` (string)
    WebGL renderer brand string (e.g., "Google Inc.")

  - `advancedSetting.webgl_metadata.render` (string)
    WebGL renderer string (e.g., "ANGLE (...)")

  - `advancedSetting.audio_context` (object)

  - `advancedSetting.audio_context.switcher` (integer)
    AudioContext policy. Default:1. 1 = Noise, 2 = Realistic.

  - `advancedSetting.media_device` (object)

  - `advancedSetting.media_device.switcher` (integer)
    Media device policy. Default:1. 1 = Noise, 2 = Real.

  - `advancedSetting.client_rects` (object)

  - `advancedSetting.client_rects.switcher` (integer)
    ClientRects policy. Default:1. 1 = Noise, 2 = Real.

  - `advancedSetting.speech_voise` (object)

  - `advancedSetting.speech_voise.switcher` (integer)
    SpeechVoices policy. Default:1. 1 = Privacy, 2 = Real

  - `advancedSetting.hardware_concurrency` (integer)
    Simulated number of logical CPU cores.
default:4. Options: 0 (real), 2, 3, 4, 6, 8, 10, 12.

  - `advancedSetting.memery_device` (integer)
    Simulated device memory (GB).
default:8. Options: 0 (real), 2, 4, 6, 8.

  - `advancedSetting.do_not_track` (integer)
    Do Not Track setting. Default:2. 1 = on, 2 = off.

  - `advancedSetting.bluetooth` (object)

  - `advancedSetting.bluetooth.switcher` (integer)
    Bluetooth policy. Default:1. 1 = Privacy, 2 = Authenticity.

  - `advancedSetting.battery` (object)

  - `advancedSetting.battery.switcher` (integer)
    Battery policy. Default:1. 1 = Privacy, 2 = Authenticity.

  - `advancedSetting.port_scan_protection` (object)

  - `advancedSetting.port_scan_protection.switcher` (integer)
    Port scan protection. Default:1. 1 = On, 2 = Off.

  - `advancedSetting.port_scan_protection.value` (string)
    Allowed local network ports to connect (comma-separated).

  - `advancedSetting.os_version` (string)
    macOS system version (e.g., macOS 12, macOS 13, macOS 14).

  - `advancedSetting.web_gpu` (object)

  - `advancedSetting.web_gpu.switcher` (integer)
    WebGPU policy. Default:1. 1 = WebGL-based matching, 2 = true, 3 = disabled.

  - `advancedSetting.ciphers` (object)

  - `advancedSetting.ciphers.switcher` (integer)
    TLS cipher policy. Default:1. 1 = Default, 2 = Custom.

  - `advancedSetting.ciphers.value` (string)
    Required when switcher=2.
Comma-separated list of TLS protocols to disable (e.g., "TLSv1,TLSv1.1").

  - `advancedSetting.mobile_device` (string)
    Phone model ID (as string). Obtain via "Get Phone Model List" API.
Example: "1826502391344832512"

  - `afterStartupConfig` (object)

  - `afterStartupConfig.afterStartup` (integer)
    Action after startup. Default:1.
1 = Continue last page,
2 = Open specified URLs,
3 = Open URLs + platform,
4 = Continue last page + platform.

  - `afterStartupConfig.autoOpenUrls` (array)
    List of valid URLs to open automatically (required for options 2–3).

  - `browserCore` (integer)
    Kernel version; default:0 (auto-match). Fetch available versions via `/api/env/advanced/ua/versions`.

  - `cookies` (string)
    Cookie string to preload (optional)

  - `envName` (string)
    Environment name

  - `envRemark` (string)
    Environment remark; max length:1500 chars

  - `groupId` (string)
    Environment group ID; default:ungrouped (0)

  - `groupName` (string)
    Group name (max 50 characters). If provided, the system first checks groupId: if a valid group is found, it is used; otherwise, it searches by groupName. If a group with that name exists, it is referenced; if not, a new group is created. Each team is limited to 1,000 groups.

  - `proxyId` (string)
    Proxy ID; default:0

  - `tagIds` (array)
    Tag IDs; default:none

  - `uaVersion` (integer)
    UA preset version; default:0 (all)

  - `disableAudio` (integer)
    Disable audio:0 = off, 1 = on

  - `disableImg` (integer)
    Disable image loading:0 = off, 1 = on

  - `disableVideo` (integer)
    Disable video loading:0 = off, 1 = on

  - `imgLimitSize` (integer)
    Max image size (KB)

  - `envId` (string, required)
    Environment ID

## Response 200:

  - `200` (unknown)
    Success. `data` is always null for this operation; the outcome is carried by `code`.

## Response 200 fields (application/json):

  - `code` (integer, required)

  - `msg` (string | null, required)

  - `data` (null, required)

  - `requestId` (string, required)

