Integration guide
Fetch a fingerprint, then apply it to your automation browser. A few fields are native context options (UA, locale, timezone, viewport); the rest are patched with a pre-load script so they're in place before any page JavaScript runs.
Quickstart
# 1. Get a fingerprint (chromium format)
curl "https://api.capzy.ai/fingerprint/generate?key=YOUR_API_KEY\
&format=chromium&tags=Windows&country=us"
# Response (trimmed):
# {
# "userAgent": { "userAgent": "Mozilla/5.0 ...", "platform": "Win32" },
# "intl": { "languages": ["en-US","en"], "timeZone": "America/New_York" },
# "screen": { "deviceScaleFactor": 1, "screenRect": { "width": 1920, "height": 1080 } },
# "navigator": { "hardwareConcurrency": 8, "deviceMemory": 8 },
# "webgl": { "vendor": "Google Inc. (NVIDIA)", "renderer": "ANGLE (NVIDIA, ...)" }
# }Apply it to your browser
import requests
from playwright.sync_api import sync_playwright
KEY = "YOUR_API_KEY"
fp = requests.get("https://api.capzy.ai/fingerprint/generate", params={
"key": KEY, "format": "chromium", "tags": "Windows", "country": "us",
}).json()
ua, nav, scr = fp["userAgent"], fp["navigator"], fp["screen"]
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
# Native context options cover UA, locale, timezone, viewport, DPR.
context = browser.new_context(
user_agent=ua["userAgent"],
locale=fp["intl"]["languages"][0],
timezone_id=fp["intl"]["timeZone"],
viewport={"width": scr["screenRect"]["width"], "height": scr["screenRect"]["height"]},
device_scale_factor=scr["deviceScaleFactor"],
)
# Everything else is patched via an init script that runs before page JS.
context.add_init_script(f'''
Object.defineProperty(navigator, 'platform', {{ get: () => {ua["platform"]!r} }});
Object.defineProperty(navigator, 'hardwareConcurrency', {{ get: () => {nav["hardwareConcurrency"]} }});
Object.defineProperty(navigator, 'deviceMemory', {{ get: () => {nav["deviceMemory"]} }});
Object.defineProperty(navigator, 'languages', {{ get: () => {fp["intl"]["languages"]!r} }});
''')
page = context.new_page()
page.goto("https://example.com")Tip: for the best results pair the fingerprint with a matching proxy in the same country you requested, and reuse the same fingerprint for the lifetime of that browser profile (it's origin/identity-stable).
What each field maps to
| Fingerprint field | Applies to |
|---|---|
| userAgent.userAgent | Browser User-Agent string |
| userAgent.platform | navigator.platform (Win32 / MacIntel / Linux x86_64) |
| userAgent.secChUa* | Sec-CH-UA client-hint headers (set on the request) |
| intl.languages | navigator.languages + Accept-Language |
| intl.timeZone | Intl / Date timezone |
| screen.screenRect + deviceScaleFactor | Viewport size + devicePixelRatio |
| navigator.hardwareConcurrency / deviceMemory | CPU cores + RAM hints |
| webgl.vendor / renderer | WebGL UNMASKED vendor + renderer (GPU) |
| speechSynthesis.voices / fonts | TTS voices + installed fonts (locale-matched) |