Skip to main content

fingerprintiq

PyPI Python Downloads License

Official Python SDK for FingerprintIQ — three products in one package:

  • Identify — server-side visitor lookup
  • Sentinel — classify API callers as browsers, AI agents, CLI tools, or bots
  • Pulse — CLI usage analytics and machine fingerprinting

Links: Docs · PyPI · Issues

Installation

pip install fingerprintiq              # core (Identify + Sentinel + Pulse)
pip install 'fingerprintiq[fastapi]'   # + FastAPI / Starlette middleware

Requires Python 3.9+.

Identify — server-side visitor lookup

from fingerprintiq import FingerprintIQ

with FingerprintIQ(api_key="fiq_live_...") as client:
    visitor = client.lookup(visitor_id="iq_abc123")
    print(visitor.visitor_id, visitor.bot_probability)

Async variant:

import asyncio
from fingerprintiq import FingerprintIQ

async def main() -> None:
    client = FingerprintIQ(api_key="fiq_live_...")
    try:
        visitor = await client.alookup(visitor_id="iq_abc123")
        print(visitor.bot_probability)
    finally:
        await client.aclose()

asyncio.run(main())

Sentinel — FastAPI middleware

from fastapi import FastAPI, Request
from fingerprintiq.sentinel.fastapi import SentinelMiddleware

app = FastAPI()
app.add_middleware(
    SentinelMiddleware,
    api_key="fiq_live_...",
    mode="blocking",
    timeout=1.0,
)

@app.get("/api/data")
def handler(request: Request):
    result = request.state.sentinel  # SentinelResult | None
    if result and result.caller_type == "bot":
        return {"blocked": True}
    return {"ok": True}

The default middleware mode is "background" so FingerprintIQ inspection does not add network latency to the request path. Use mode="blocking" only when the handler needs request.state.sentinel before responding.

Pulse — CLI analytics

from fingerprintiq.pulse import Pulse

pulse = Pulse(api_key="fiq_live_...", tool="my-cli", version="1.2.3")
pulse.track("deploy", metadata={"duration_ms": 1234, "success": True})
pulse.shutdown()  # or let atexit handle it

Honors DO_NOT_TRACK=1 and FINGERPRINTIQ_OPTOUT=1 out of the box. Set respect_opt_out=False to override.

Sibling Packages

Package Purpose
fingerprintiq (PyPI) Python SDK — Identify, Sentinel, Pulse (this package)
@fingerprintiq/js Browser fingerprinting
@fingerprintiq/server Server-side caller classification (Hono, Express)
@fingerprintiq/pulse Node CLI usage analytics

Contributing

This repo is a read-only public mirror. The master copy lives in the private FingerprintIQ monorepo and is synced here on every push to main. Please file issues rather than PRs.

License

MIT

Metadata

Release files for fingerprintiq 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fingerprintiq 0.2.0
File Size Uploaded Provenance
fingerprintiq-0.2.0.tar.gz 13.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for fingerprintiq 0.2.0
File Interpreter ABI Platform
fingerprintiq-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 33.3 kB

Release files / fingerprintiq-0.2.0.tar.gz

Download URL fingerprintiq-0.2.0.tar.gz
Size 13.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e9845abdc666a95ff82cf098c933d2c3df6915b0a5d55c649eab044a5f4fc2d0
BLAKE2b-256 checksum
How to use checksums
71ca693b24d45b327be20eaf1bd390f0f61835573440c5d8c7e9289eb6a0f1eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / fingerprintiq-0.2.0-py3-none-any.whl

Download URL fingerprintiq-0.2.0-py3-none-any.whl
Size 19.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
744ca401d4424d0d8fd1f67ac17bba419b5269ff42c5bff52fffa1def37ff4fe
BLAKE2b-256 checksum
How to use checksums
585b8400c9723a9d525b65cf2f93e387ae84bd8e40573dd529fceb8381b4bd83
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for fingerprintiq 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page