fingerprintiq
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
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| fingerprintiq-0.2.0.tar.gz | 13.8 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.