Browser Signal Type Reference
TypeScript reference for the 41 browser signal collectors exposed by the FingerprintIQ SDK.
Signal Result Wrapper
Every browser collector returns a SignalResult<T>. When a collector cannot run because the API is unavailable, blocked, or restricted by the browser, the SDK returns null for that collector rather than throwing.
typescriptinterface SignalResult<T> { value: T; duration: number; // milliseconds}
The /v1/identify request body contains these browser collector results. The compact identify() response does not echo them back; fetch the full event server-side with GET /v1/events/:requestId when you need raw signal data.
Collector Map
The SDK currently collects 41 browser signals:
canvaswebglwebgpuaudiodomRectsvg
fontswebrtcnavigatormediascreenspeechintltimezonestoragecodecplatformFeaturesuaClientHintssensorCapabilities
wasmTimingmathcssStylecssFeatureserrorwindowFeatureshtmlElementcapabilityVectorgeometryVectorruntimeVector
integritywalletsheadlessworkerScoperesistancestatusbehavioralRiskincognitodevToolsvirtualizationrootedframeDepth
Selected Type Shapes
typescriptinterface CanvasSignal { hash: string; isFarbled: boolean;}
typescriptinterface WebGLSignal { renderer: string; vendor: string; extensions: string[]; params: Record<string, number>; gpuTimingMs: number | null; isSoftwareRenderer: boolean;}
typescriptinterface WalletSignal { detected: string[]; count: number; evmProviders: string[]; solanaProviders: string[]; multipleWallets: boolean; versions: Record<string, string>;}
typescriptinterface TimezoneSignal { reported: string; computed: string | null; offsetHistorical: number; isSpoofed: boolean; hash: string;}
typescriptinterface CssFeatureSignal { features: Record<string, boolean>; supportedCount: number; hash: string;}
typescriptinterface FrameDepthSignal { isFramed: boolean; depth: number; topAccessible: boolean; crossOriginBoundary: boolean; hash: string;}
typescriptinterface BehavioralRiskSignal { elapsedMs: number; totalEventCount: number; pointerMoveCount: number; pointerDistancePx: number; pointerDirectionChanges: number; pointerStraightness: number | null; clickCount: number; scrollEventCount: number; scrollBurstCount: number; keyEventCount: number; inputEventCount: number; focusTransitions: number; blurTransitions: number; visibilityTransitions: number; meanPointerIntervalMs: number | null; meanKeyIntervalMs: number | null; classification: "insufficient_data" | "low_interaction" | "human_like" | "synthetic_like"; riskScore: number; reasons: string[]; hash: string;}
typescriptinterface HeadlessSignal { isHeadless: boolean; markers: string[];}
Canonical Schema
The canonical source of truth for browser signal types is:
That file defines:
- every browser collector interface
- the
ClientSignalsmap used in the identify request payload - the compact
IdentifyResponsereturned byidentify()
If you are building custom server-side scoring, use this page to orient yourself and sdk/src/types.ts for the exact current schema.