Device

Score a device fingerprint

Reputation and bot probability for a browser fingerprint produced by https://www.layercall.com/fp.js.

This is the signal that survives an attacker rotating IPs and email addresses: a new VPN exit and a fresh disposable inbox are free, a new machine is not. The device_id is hashed in the browser and again before storage, so the stored value cannot be reversed to a device.

POST rather than GET because a device id in a query string ends up in access logs and Referer headers.

post/v1/score/device

Request

  • Base URL: https://www.layercall.com
  • URL: https://www.layercall.com/v1/score/device
  • Auth: one of:
    • API key in header x-api-key
    • HTTP bearer

Query parameters

strictness'lenient' | 'balanced' | 'strict'

Shifts the allow/review/block thresholds. Signals and risk_score are unchanged.

Request body

device_idstring required

Hex fingerprint from LayerCall.fingerprint().

ipstring

Visitor IP. Optional — enables the timezone-vs-geolocation check.

Example request

{
  "device_id": "ff48aa64a243c1b9e07d5c2f8a1b4e6d9c3f7a2b5e8d1c4f7a0b3e6d9c2f5a8b",
  "ip": "185.220.101.5",
  "signals": {
    "timezone": "Europe/Berlin",
    "screen": "1920x1080x24"
  }
}

Response

Device score

device_idstring required
risk_scoreinteger required

0 = clean, 100 = certain fraud.

verdict'allow' | 'review' | 'block' required

Recommended action. Thresholds move with strictness.

bot_probabilityinteger required

Reported separately from risk: plenty of automated traffic is legitimate.

first_seenstring date-time nullable
times_seeninteger
abuse_reportsinteger
request_idstring
processing_time_secnumber
billable_lookupsinteger

Example response

{
  "request_id": "req_9319c108-cc66-4cbf-af64-37729a17c855",
  "processing_time_sec": 0.031,
  "billable_lookups": 1
}

Changes

No recorded changes to this operation across all 1 revision of this API.