Skip to content
capzy
ThreatMetrix Device-Fingerprinting
ThreatMetrixTaskProxyLess

ThreatMetrix Device-Fingerprinting Solver, solved in 5.0s.

Automate ThreatMetrix (LexisNexis Risk Solutions) session profiling. Pass org_id, session_id, and custom_domain — we fingerprint in a real browser so your risk query returns allow.

Avg Speed~5.0s
Success99%+
Cost / 1k$2.00
Throughput12/m

ThreatMetrix (LexisNexis Risk Solutions) is a fraud-prevention SDK used by banks and e-commerce sites. It fingerprints the device and browser during login or checkout, producing a risk score the merchant checks server-side. Our solver runs the profiling step in a real capium browser so your session appears as a genuine, profiled device.

Quick Integration

solve.py
import requests, time

API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"

# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
        "type": "ThreatMetrixTaskProxyLess",
        "task_type": "ThreatMetrixTaskProxyLess",
        "target_url": "https://www.kleinanzeigen.de/m-einloggen.html",
        "org_id": "181rzcrc",
        "page_id": "94",
        "session_id": "3029471b-4b25-41cd-8d78-46598448325e",
        "custom_domain": "dfme.kleinanzeigen.de",
        "title": "Login - Anmelden bei Kleinanzeigen"
    }
}).json()

task_id = task["taskId"]
print(f"Task created: {task_id}")

# Step 2: Poll for result
while True:
    result = requests.post(f"{API}/getTaskResult", json={
        "clientKey": KEY,
        "taskId": task_id
    }).json()

    if result["status"] == "ready":
        print("Solved!", result["solution"])
        break
    elif result["status"] == "failed":
        print("Failed:", result.get("errorDescription"))
        break

    time.sleep(1)

1. Send Payload

Dispatch your ThreatMetrixTaskProxyLess to our processing cluster via the secure API endpoint.

2. Solving Engine

We launch a self-owned capium browser with your proxy, navigate to the target page, set the document title, and inject the ThreatMetrix tags.js script with your session_id. We wait for the profiling beacon then return the session_id alongside any ThreatMetrix cookies the site expects.

3. Get Result

Poll getTaskResult for the validated token, then finalize your automated request.

Using your own proxy

Use ThreatMetrixTask instead of ThreatMetrixTaskProxyLess to route the solve through your own proxy — useful when the target site checks that the solving IP matches the submitting IP.

solve_proxy.py
import requests, time

API = "https://api.capzy.ai"
KEY = "capzy_your_key_here"

# Step 1: Create task
task = requests.post(f"{API}/createTask", json={
    "clientKey": KEY,
    "task": {
        "type": "ThreatMetrixTask",
        "task_type": "ThreatMetrixTask",
        "target_url": "https://www.kleinanzeigen.de/m-einloggen.html",
        "org_id": "181rzcrc",
        "page_id": "94",
        "session_id": "3029471b-4b25-41cd-8d78-46598448325e",
        "custom_domain": "dfme.kleinanzeigen.de",
        "title": "Login - Anmelden bei Kleinanzeigen",
        "proxyType": "http",
        "proxyAddress": "ip",
        "proxyPort": "port",
        "proxyLogin": "username",
        "proxyPassword": "password"
    }
}).json()

task_id = task["taskId"]
print(f"Task created: {task_id}")

# Step 2: Poll for result
while True:
    result = requests.post(f"{API}/getTaskResult", json={
        "clientKey": KEY,
        "taskId": task_id
    }).json()

    if result["status"] == "ready":
        print("Solved!", result["solution"])
        break
    elif result["status"] == "failed":
        print("Failed:", result.get("errorDescription"))
        break

    time.sleep(1)

Additional proxy parameters

proxyTypetypestringreqrequiredProxy protocol: http, https, socks4, or socks5
proxyAddresstypestringreqrequiredProxy IP address or hostname
proxyPorttypenumberreqrequiredProxy port number
proxyLogintypestringreqoptionalProxy username (if auth required)
proxyPasswordtypestringreqoptionalProxy password (if auth required)
userAgenttypestringreqoptionalUser-Agent string to use. Must match the UA you use when submitting the token

Task Parameters

API Spec
target_urltypestringreqrequiredFull URL of the page that loads ThreatMetrix (e.g. the login or checkout page).
org_idtypestringreqrequiredThreatMetrix organisation ID configured on the target site (e.g. '181rzcrc').
page_idtypestringreqrequiredThreatMetrix page identifier for this flow (e.g. '94'). Found in the tags.js URL query string.
session_idtypestringreqrequiredThe session UUID you generated for this transaction. ThreatMetrix binds the fingerprint to this ID; you query their API with it later.
custom_domaintypestringreqrequiredThreatMetrix custom domain for this site (e.g. dfme.kleinanzeigen.de). Found in the tags.js script src on the target page.
titletypestringreqoptionaldocument.title of the target page. ThreatMetrix includes the page title in its fingerprint — match the real page for the cleanest profile.

Response Shape

session_idtypestringEcho of the session_id you submitted, confirmed as profiled. Use this in your ThreatMetrix server-side API query.
cookiestypeobjectDict of ThreatMetrix cookies set during profiling (e.g. _tfpdef, _tfinf). Some sites require these cookies on the follow-up request — send them all.
userAgenttypestringThe User-Agent used during profiling. Set this on your subsequent request for fingerprint coherence.

Features

Real capium browser — profiling looks identical to a genuine device visit
geoip coherence: capium aligns WebRTC, timezone, and locale to the proxy exit IP
No shared pool — each solve gets its own isolated browser instance
Works on any ThreatMetrix-protected login, checkout, or account flow

Pricing & Stats

Per 1,000 solves$2.00
Avg solve time~5.0s
Success rate99%+
Throughput12/m

Start solving threatmetrix device-fingerprinting.

$0.10 in free credits — no card. ~250 free solves to test before you spend.

Frequently asked questions