Core API

Profiles

Create, read, update, and delete browser profiles, duplicate them, or generate a fresh randomized fingerprint over the API.

Endpoints

MethodPathPurpose
GET/api/profilesList all profiles
POST/api/profilesCreate a profile
POST/api/profiles/generateCreate a profile with a random fingerprint
GET/api/profiles/{id}Fetch one profile
PUT/api/profiles/{id}Update a profile
DELETE/api/profiles/{id}Delete a profile
POST/api/profiles/{id}/duplicateCopy a profile
POST/api/profiles/{id}/stopStop a running profile
GET/api/profiles/{id}/statusReport whether a profile is running

Common fields

A create body sets the identity the profile presents. Only name is required. Anything you omit is generated or inherited from the profile template, so a minimal create is just a name plus a proxy. These shorthand fields cover most profiles.

FieldTypeDescription
namestringDisplay name. The only required field.
platform"windows" | "macos" | "linux"Operating system the profile presents. Defaults to windows.
proxystringProxy URL in scheme://user:pass@host:port form. See Proxies.
timezonestringIANA timezone, for example Europe/Berlin.
localestringBCP 47 locale, for example de-DE.
user_agentstringOverride the User-Agent string. Omit to derive it from the platform and browser version.
screen_widthnumberScreen width in pixels. Defaults to 1920.
screen_heightnumberScreen height in pixels. Defaults to 1080.
gpu_vendorstringUnmasked WebGL vendor, for example Google Inc. (Intel).
gpu_rendererstringUnmasked WebGL renderer string.
hardware_concurrencynumberReported CPU core count (navigator.hardwareConcurrency).
headlessbooleanDefault headless mode for this profile.
geoipbooleanDerive timezone, locale, and geolocation from the proxy egress IP.
launch_argsstring[]Extra Chrome flags saved on the profile.
tagsstring[]Labels for organizing profiles.
notesstringFree text notes.
Prefer POST /api/profiles/generate when you want a coherent random fingerprint without choosing every field by hand.

Fingerprint configuration

Beyond the shorthand fields, a profile carries a full fingerprint configuration. Every field below is optional and accepted on both create (POST /api/profiles) and update (PUT /api/profiles/{id}). Leave a group untouched to keep the generated defaults.

Display and hardware. What the device reports about its screen and machine.

FieldTypeDescription
display_widthnumberInner display width in pixels.
display_heightnumberInner display height in pixels.
display_device_pixel_rationumberdevicePixelRatio, for example 1, 1.5, or 2.
display_color_depthnumberscreen.colorDepth, typically 24.
display_color_scheme"light" | "dark" | "no-preference"Value reported to prefers-color-scheme.
hardware_cpu_coresnumbernavigator.hardwareConcurrency.
hardware_device_memory_gbnumbernavigator.deviceMemory in GB, for example 8.
hardware_device_namestringDevice model name where the platform exposes one.

GPU and WebGL. How the WebGL and WebGPU surfaces present the graphics adapter.

FieldTypeDescription
gpu_metadata_mode"ua_based" | "real" | "custom"How the WebGL vendor and renderer are chosen.
gpu_vendorstringUnmasked WebGL vendor when the mode is custom.
gpu_rendererstringUnmasked WebGL renderer when the mode is custom.
gpu_webgpu_mode"from_webgl" | "real" | "disabled"WebGPU adapter strategy.
gpu_hardware_accelerationbooleanToggle hardware accelerated rendering.

Locale and timezone. Language and clock the page sees. Set these explicitly or derive them from the proxy IP.

FieldTypeDescription
locale_timezone_mode"ip" | "custom"Derive the timezone from the proxy IP or set it explicitly.
locale_timezonestringIANA timezone when the mode is custom.
locale_accept_language_mode"ip" | "custom"Derive Accept-Language from the IP or set it.
locale_accept_languagestringAccept-Language header value when custom.
locale_languagesstring[]navigator.languages list.
locale_display_languagestringBrowser UI language.

Geolocation. What the Geolocation API returns and how the permission prompt behaves.

FieldTypeDescription
geolocation_mode"ip" | "custom" | "block"Source of the reported position, or block the API entirely.
geolocation_latitudenumberLatitude when the mode is custom.
geolocation_longitudenumberLongitude when the mode is custom.
geolocation_accuracy_mnumberReported accuracy in meters.
geolocation_permission_prompt"ask" | "allow"Default response to a site permission request.

WebRTC. How WebRTC handles the local and public IP, which is the common leak that exposes a real address behind a proxy.

FieldTypeDescription
webrtc_mode"disabled" | "real" | "replace" | "forward" | "proxy_udp"IP handling strategy. proxy_udp routes media through the proxy so WebRTC matches the egress IP.
webrtc_public_ip_overridestringForce the public IP that WebRTC reports.

Fingerprint noise. Per surface noise toggles. off leaves the surface untouched. seeded applies deterministic per profile noise, so the same profile renders the same value on every launch while differing from other profiles.

FieldValuesSurface
noise_canvas"off" | "seeded"Canvas readback
noise_webgl_image"off" | "seeded"WebGL image data
noise_audio_context"off" | "seeded"AudioContext fingerprint
noise_client_rects"off" | "seeded"getClientRects geometry
noise_media_devices"off" | "seeded"enumerateDevices output
noise_speech_voices"off" | "seeded"speechSynthesis voice list

Fonts and privacy. The font set the page can detect and a few privacy headers.

FieldTypeDescription
fonts_mode"default" | "custom"Use the OS typical font set or a custom allow list.
fonts_allowed_familiesstring[]Allowed font families when the mode is custom.
fonts_inject_os_packbooleanInject the font pack typical for the chosen OS.
privacy_do_not_trackbooleanSend the DNT header.
privacy_port_scan_protectionbooleanBlock scripts from scanning localhost ports.
privacy_block_third_party_cookiesbooleanBlock third party cookies.
These fields are advanced. For most profiles, set platform, proxy, timezone, and locale and let generate fill in a coherent fingerprint for the rest.

Generate a fingerprint

POST /api/profiles/generate creates a profile with a coherent, randomized fingerprint, so you do not have to pick each field by hand. Pass a partial body to pin some values, for example the platform and proxy, and let the rest be generated around them. Set fingerprint_seed to make a generated profile reproducible.

POST /api/profiles/generate HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "de-store-02",
"platform": "windows",
"proxy": "http://user:pass@gateway.example.com:8000",
"geoip": true
}
With geoip on, the timezone, locale, and geolocation are derived from the proxy egress IP so the profile stays coherent with where it appears to connect from.

Examples

POST /api/profiles HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "de-store-01",
"platform": "windows",
"timezone": "Europe/Berlin",
"locale": "de-DE",
"screen_width": 1920,
"screen_height": 1080,
"proxy": "http://user:pass@gateway.example.com:8000",
"webrtc_mode": "proxy_udp"
}