One key, one gateway
Use a Dakidarts API key with read or write scopes and control which APIs that key can reach.
Privacy-conscious fraud signals from device fingerprints, bot scoring, user-agent parsing, header forensics, IP geolocation, entropy and fingerprint comparison.
0 of 19 endpoints have an upstream URL configured. Other routes return 503 before billing; only send live requests to configured routes. The gateway injects upstream credentials for you.
Live checkout opens after an API route has an upstream URL. Preview examples are available below.
https://api.dakidarts.com/device-fingerprint-bot-detectionX-API-Key: dk_live_...GET /bot-detectionUse a Dakidarts API key with read or write scopes and control which APIs that key can reach.
Wallet credits, plan quotas and organization invoices are settled per request with transparent response headers.
Latency, upstream status and execution mode are logged so integration issues are visible before they spread.
Keep the direct Dakidarts gateway as your primary route, or use the RapidAPI listing when marketplace billing and key management fit your stack better.
The best API is the one your team can integrate, observe and then stop thinking about.
Designed as a composable building block for product teams, internal tooling and automation.
Designed as a composable building block for product teams, internal tooling and automation.
Designed as a composable building block for product teams, internal tooling and automation.
Selected facts about coverage, delivery and production readiness.
Access, billing and integration details for Device Fingerprint & Bot Detection API.
Device fingerprint and bot-risk signals for a request or session.
High-risk sign-ups, checkout flows and abuse-sensitive actions.
No. Treat it as an additional risk layer alongside authentication and rate limiting.
Subscribe on the Dakidarts dashboard, then call the gateway with an API key.
Your application decides how to act on the signals and what thresholds fit its risk model.
Plans are shown for reference. Live checkout opens after an API route has an upstream URL.
$0.00 / month
Start with a Dakidarts key, call the gateway, then monitor usage from the dashboard.
Choose the API scope, then copy the key into your server environment.
Send requests to https://api.dakidarts.com/device-fingerprint-bot-detection with your key and JSON body.
Track calls, latency and spend from the API dashboard and wallet.
These routes include contracts imported from the product implementation. 0 of 19 endpoints have an upstream URL configured. Other routes return 503 before billing; saved examples are previews only. Configure an upstream URL in API Studio to enable those routes.
Operations endpoints sourced from the Device Fingerprint & Bot Detection API implementation.
/
Index
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Service banner: name, version, description.
Snapshot from
docs/endpoints.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
/Service banner: name, version, description.
{
"service": "Device Fingerprint Detection API",
"version": "v0.0.2",
"description": "...",
"docs": "see /meta for endpoints, docs/ for the full reference"
}
Source contract imported from device fingerprint detection/app.py. Handler: index. Reference: docs/endpoints.md.
curl -X GET https://api.dakidarts.com/device-fingerprint-bot-detection/ -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
/status
Status
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Health check and version.
Snapshot from
docs/endpoints.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
/statusHealth check and version.
{
"status": "ok",
"service": "Device Fingerprint Detection API",
"version": "v0.0.2",
"uptime_seconds": 12345,
"python_version": "3.14.5",
"server_time": "2026-08-28T11:56:05+00:00"
}
Source contract imported from device fingerprint detection/app.py. Handler: status. Reference: docs/endpoints.md.
curl -X GET https://api.dakidarts.com/device-fingerprint-bot-detection/status -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
/meta
Meta
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Self-describing metadata: version, full endpoint list and the BYOK headers the service understands. Useful for auto-generated API clients and RapidAPI docs.
Snapshot from
docs/endpoints.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
/metaSelf-describing metadata: version, full endpoint list and the BYOK headers the service understands. Useful for auto-generated API clients and RapidAPI docs.
{
"service": "Device Fingerprint Detection API",
"version": "v0.0.2",
"description": "...",
"endpoints": [ {"path": "/fingerprint", "methods": ["GET","POST"], "description": "..."}, ... ],
"byok_headers": {
"X-IP-Geo-Provider": "ipwhois (default), ipinfo, ipapi, abstractapi, ip2location",
"X-IP-Geo-Key": "provider API key - bring your own (optional)"
}
}
Source contract imported from device fingerprint detection/app.py. Handler: meta. Reference: docs/endpoints.md.
curl -X GET https://api.dakidarts.com/device-fingerprint-bot-detection/meta -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
Analysis endpoints sourced from the Device Fingerprint & Bot Detection API implementation.
/fingerprint
Fingerprint Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Generates a fingerprint from **custom JSON input**. Supports both **snake_case** and **camelCase** keys. Backward compatible with v0.0.1 — the legacy `fingerprint` hash and `risk` object are unchanged.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /fingerprintGenerates a fingerprint from custom JSON input. Supports both snake_case and camelCase keys. Backward compatible with v0.0.1 — the legacy fingerprint hash and risk object are unchanged.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
user_agent / userAgent | string | optional | Browser User-Agent (defaults to the request's UA). | Mozilla/5.0 (X11; Linux) |
ip | string | optional | Client IP address (defaults to the request's remote address). | 203.0.113.9 |
headers | object | optional | Custom headers dictionary. | {"X-Test-Header":"boom"} |
signals | object | optional | Client-side fingerprint signals (canvas/WebGL/audio hashes, screen, fonts, timezone, CPU/memory, webdriver, etc.). See table below. | {"screen":{"width":1920,"height":1080},"canvas_hash":"abc","webdriver":false} |
screen · canvas_hash · webgl_hash · webgl_vendor · webgl_renderer · audio_hash · fonts · timezone_offset · timezone_iana · languages · platform · hardware_concurrency · device_memory · touch_support · do_not_track · plugins · media_devices · storage · webdriver · chrome · math_fingerprint · media_queries · performance · keyboard_layout · cpu_class
curl -X POST http://127.0.0.1:5000/fingerprint \
-H "Content-Type: application/json" \
-d '{
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"ip": "203.0.113.9",
"headers": {"X-Test-Header":"boom"},
"signals": {
"screen": {"width": 1920, "height": 1080, "color_depth": 24, "pixel_ratio": 1.5},
"canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4",
"webgl_renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 Direct3D11)",
"fonts": ["Arial", "Times New Roman"],
"timezone_iana": "America/New_York",
"languages": ["en-US", "en"],
"platform": "Win32",
"hardware_concurrency": 8,
"device_memory": 8,
"touch_support": false,
"webdriver": false
}
}'
{
"fingerprint": "77601ceab1c12441f662d2d775ef3e5b510c6c82bee405cde1c757f60c3aa221",
"fingerprint_extended": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274",
"fingerprint_full": "4863c2cbe782e713fc5bd059d9adc2c36adfd5bd0956ec40ffc256db37fa24d2",
"ip": "203.0.113.9",
"ip_source": "provided",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"fingerprint_type": "extended",
"components": {
"ip": true,
"user_agent": true,
"request_headers": true,
"screen": true,
"canvas": true,
"webgl": true,
"audio": false,
"fonts": true,
"timezone": true,
"language": true,
"platform": true,
"cpu_memory": true,
"media_devices": false,
"hardware_acceleration": true
},
"completeness": {
"signals_present": 15,
"signals_max": 25,
"completeness_score": 60,
"completeness_level": "partial",
"signals": ["canvas_hash", "chrome", "device_memory", "fonts", "..."]
},
"risk": {
"risk_score": 5,
"risk_level": "low",
"verdict": "human",
"confidence": "medium",
"reasons": []
}
}
Three hashes, three uses:
fingerprint — legacy v0.0.1 hash (IP + UA + headers), identical output.fingerprint_extended — signals-only hash, stable per device. Use as your visitor ID.fingerprint_full — everything combined (IP + UA + headers + signals), most specific.Source contract imported from device fingerprint detection/app.py. Handler: fingerprint_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user_agent | query | string | No | Browser User-Agent (defaults to the request's UA). |
userAgent | query | string | No | Browser User-Agent (defaults to the request's UA). |
ip | query | string | No | Client IP address (defaults to the request's remote address). |
headers | query | object | No | Custom headers dictionary. |
signals | query | object | No | Client-side fingerprint signals (canvas/WebGL/audio hashes, screen, fonts, timezone, CPU/memory, webdriver, etc.). See table below. |
{
"type": "object",
"properties": {
"ip": {
"description": "Dynamic source value; no concrete response example is published."
},
"risk": {
"type": "object",
"additionalProperties": true
},
"ip_source": {
"description": "Dynamic source value; no concrete response example is published."
},
"components": {
"description": "Dynamic source value; no concrete response example is published."
},
"user_agent": {
"type": "integer"
},
"fingerprint": {
"description": "Dynamic source value; no concrete response example is published."
},
"completeness": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_full": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_type": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_extended": {
"description": "Dynamic source value; no concrete response example is published."
}
},
"additionalProperties": true
}curl -X GET 'https://api.dakidarts.com/device-fingerprint-bot-detection/fingerprint?user_agent=Mozilla%2F5.0+%28X11%3B+Linux%29&userAgent=Mozilla%2F5.0+%28X11%3B+Linux%29&ip=203.0.113.9&headers=X-Test-Header&signals=screen&signals=webdriver&signals=canvas_hash' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
/fingerprint
Fingerprint Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Generates a fingerprint from **custom JSON input**. Supports both **snake_case** and **camelCase** keys. Backward compatible with v0.0.1 — the legacy `fingerprint` hash and `risk` object are unchanged.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /fingerprintGenerates a fingerprint from custom JSON input. Supports both snake_case and camelCase keys. Backward compatible with v0.0.1 — the legacy fingerprint hash and risk object are unchanged.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
user_agent / userAgent | string | optional | Browser User-Agent (defaults to the request's UA). | Mozilla/5.0 (X11; Linux) |
ip | string | optional | Client IP address (defaults to the request's remote address). | 203.0.113.9 |
headers | object | optional | Custom headers dictionary. | {"X-Test-Header":"boom"} |
signals | object | optional | Client-side fingerprint signals (canvas/WebGL/audio hashes, screen, fonts, timezone, CPU/memory, webdriver, etc.). See table below. | {"screen":{"width":1920,"height":1080},"canvas_hash":"abc","webdriver":false} |
screen · canvas_hash · webgl_hash · webgl_vendor · webgl_renderer · audio_hash · fonts · timezone_offset · timezone_iana · languages · platform · hardware_concurrency · device_memory · touch_support · do_not_track · plugins · media_devices · storage · webdriver · chrome · math_fingerprint · media_queries · performance · keyboard_layout · cpu_class
curl -X POST http://127.0.0.1:5000/fingerprint \
-H "Content-Type: application/json" \
-d '{
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"ip": "203.0.113.9",
"headers": {"X-Test-Header":"boom"},
"signals": {
"screen": {"width": 1920, "height": 1080, "color_depth": 24, "pixel_ratio": 1.5},
"canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4",
"webgl_renderer": "ANGLE (NVIDIA, NVIDIA GeForce RTX 3070 Direct3D11)",
"fonts": ["Arial", "Times New Roman"],
"timezone_iana": "America/New_York",
"languages": ["en-US", "en"],
"platform": "Win32",
"hardware_concurrency": 8,
"device_memory": 8,
"touch_support": false,
"webdriver": false
}
}'
{
"fingerprint": "77601ceab1c12441f662d2d775ef3e5b510c6c82bee405cde1c757f60c3aa221",
"fingerprint_extended": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274",
"fingerprint_full": "4863c2cbe782e713fc5bd059d9adc2c36adfd5bd0956ec40ffc256db37fa24d2",
"ip": "203.0.113.9",
"ip_source": "provided",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"fingerprint_type": "extended",
"components": {
"ip": true,
"user_agent": true,
"request_headers": true,
"screen": true,
"canvas": true,
"webgl": true,
"audio": false,
"fonts": true,
"timezone": true,
"language": true,
"platform": true,
"cpu_memory": true,
"media_devices": false,
"hardware_acceleration": true
},
"completeness": {
"signals_present": 15,
"signals_max": 25,
"completeness_score": 60,
"completeness_level": "partial",
"signals": ["canvas_hash", "chrome", "device_memory", "fonts", "..."]
},
"risk": {
"risk_score": 5,
"risk_level": "low",
"verdict": "human",
"confidence": "medium",
"reasons": []
}
}
Three hashes, three uses:
fingerprint — legacy v0.0.1 hash (IP + UA + headers), identical output.fingerprint_extended — signals-only hash, stable per device. Use as your visitor ID.fingerprint_full — everything combined (IP + UA + headers + signals), most specific.Source contract imported from device fingerprint detection/app.py. Handler: fingerprint_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user_agent | body | string | No | Browser User-Agent (defaults to the request's UA). |
userAgent | body | string | No | Browser User-Agent (defaults to the request's UA). |
ip | body | string | No | Client IP address (defaults to the request's remote address). |
headers | body | object | No | Custom headers dictionary. |
signals | body | object | No | Client-side fingerprint signals (canvas/WebGL/audio hashes, screen, fonts, timezone, CPU/memory, webdriver, etc.). See table below. |
{
"type": "object",
"properties": {
"ip": {
"description": "Dynamic source value; no concrete response example is published."
},
"risk": {
"type": "object",
"additionalProperties": true
},
"ip_source": {
"description": "Dynamic source value; no concrete response example is published."
},
"components": {
"description": "Dynamic source value; no concrete response example is published."
},
"user_agent": {
"type": "integer"
},
"fingerprint": {
"description": "Dynamic source value; no concrete response example is published."
},
"completeness": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_full": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_type": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_extended": {
"description": "Dynamic source value; no concrete response example is published."
}
},
"additionalProperties": true
}curl -X POST https://api.dakidarts.com/device-fingerprint-bot-detection/fingerprint -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"user_agent": "Mozilla/5.0 (X11; Linux)", "userAgent": "Mozilla/5.0 (X11; Linux)", "ip": "203.0.113.9", "headers": {"X-Test-Header": "boom"}, "signals": {"screen": {"width": 1920, "height": 1080}, "webdriver": false, "canvas_hash": "abc"}}'
/bot-detection
Bot Detection Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Scores how likely a request is automated across three surfaces: User-Agent, request headers, and client-side signals. No signals required — but sending `webdriver`, `hardware_concurrency`, `device_memory`, `screen`, `languages` dramatically improves headless detection.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /bot-detectionScores how likely a request is automated across three surfaces: User-Agent, request headers, and client-side signals. No signals required — but sending webdriver, hardware_concurrency, device_memory, screen, languages dramatically improves headless detection.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
user_agent / userAgent | string | optional | User-Agent to analyze. | Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) |
headers | object | optional | Request headers. | {"X-Requested-With":"XMLHttpRequest"} |
signals | object | optional | Client-side signals. | {"webdriver":true,"hardware_concurrency":0} |
curl -X POST http://127.0.0.1:5000/bot-detection \
-H "Content-Type: application/json" \
-d '{
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/120.0.0.0 Safari/537.36",
"signals": {"webdriver": true, "hardware_concurrency": 0, "device_memory": 0}
}'
{
"risk_score": 100,
"risk_level": "high",
"verdict": "automated",
"confidence": "high",
"reasons": [
"Automation / headless tool string detected in UA",
"navigator.webdriver flag is true",
"hardwareConcurrency is 0 (headless browsers report 0)",
"deviceMemory is 0 (headless browsers report 0)",
"No navigator.languages reported"
],
"signals_checked": 7,
"signals_available": 3,
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/120.0.0.0 Safari/537.36"
}
Source contract imported from device fingerprint detection/app.py. Handler: bot_detection_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user_agent | query | string | No | User-Agent string to analyze. |
headers | query | object | No | Request headers. |
signals | query | object | No | Client-side signals. |
userAgent | query | string | No | Alias for `user_agent`; User-Agent string to analyze. |
curl -X GET 'https://api.dakidarts.com/device-fingerprint-bot-detection/bot-detection?user_agent=Mozilla%2F5.0+%28compatible%3B+Googlebot%2F2.1%3B+%2Bhttp%3A%2F%2Fwww.google.com%2Fbot.html%29&headers=X-Requested-With&signals=webdriver&signals=hardware_concurrency' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
/bot-detection
Bot Detection Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Scores how likely a request is automated across three surfaces: User-Agent, request headers, and client-side signals. No signals required — but sending `webdriver`, `hardware_concurrency`, `device_memory`, `screen`, `languages` dramatically improves headless detection.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /bot-detectionScores how likely a request is automated across three surfaces: User-Agent, request headers, and client-side signals. No signals required — but sending webdriver, hardware_concurrency, device_memory, screen, languages dramatically improves headless detection.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
user_agent / userAgent | string | optional | User-Agent to analyze. | Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) |
headers | object | optional | Request headers. | {"X-Requested-With":"XMLHttpRequest"} |
signals | object | optional | Client-side signals. | {"webdriver":true,"hardware_concurrency":0} |
curl -X POST http://127.0.0.1:5000/bot-detection \
-H "Content-Type: application/json" \
-d '{
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/120.0.0.0 Safari/537.36",
"signals": {"webdriver": true, "hardware_concurrency": 0, "device_memory": 0}
}'
{
"risk_score": 100,
"risk_level": "high",
"verdict": "automated",
"confidence": "high",
"reasons": [
"Automation / headless tool string detected in UA",
"navigator.webdriver flag is true",
"hardwareConcurrency is 0 (headless browsers report 0)",
"deviceMemory is 0 (headless browsers report 0)",
"No navigator.languages reported"
],
"signals_checked": 7,
"signals_available": 3,
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/120.0.0.0 Safari/537.36"
}
Source contract imported from device fingerprint detection/app.py. Handler: bot_detection_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user_agent | body | string | No | User-Agent string to analyze. |
headers | body | object | No | Request headers. |
signals | body | object | No | Client-side signals. |
userAgent | body | string | No | Alias for `user_agent`; User-Agent string to analyze. |
{
"reasons": [
"Automation / headless tool string detected in UA",
"navigator.webdriver flag is true",
"hardwareConcurrency is 0 (headless browsers report 0)",
"deviceMemory is 0 (headless browsers report 0)",
"No navigator.languages reported"
],
"verdict": "automated",
"confidence": "high",
"risk_level": "high",
"risk_score": 100,
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/120.0.0.0 Safari/537.36",
"signals_checked": 7,
"signals_available": 3
}curl -X POST https://api.dakidarts.com/device-fingerprint-bot-detection/bot-detection -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"user_agent": "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", "headers": {"X-Requested-With": "XMLHttpRequest"}, "signals": {"webdriver": true, "hardware_concurrency": 0}, "userAgent": "example"}'
/headers/analyze
Headers Analyze Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Forensic analysis of a request-header map: proxy/VPN hints, reconstructed `X-Forwarded-For` chain, spoofed/placeholder values, structural anomalies, and missing browser headers with recommendations.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /headers/analyzeForensic analysis of a request-header map: proxy/VPN hints, reconstructed X-Forwarded-For chain, spoofed/placeholder values, structural anomalies, and missing browser headers with recommendations.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
headers | object | optional | Headers to analyze (defaults to the request's own headers). | {"User-Agent":"Mozilla/5.0 ...","Accept":"text/html","X-Forwarded-For":"1.2.3.4, 5.6.7.8"} |
curl -X POST http://127.0.0.1:5000/headers/analyze \
-H "Content-Type: application/json" \
-d '{
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml",
"Accept-Language": "en-US,en;q=0.9",
"X-Forwarded-For": "1.2.3.4, 5.6.7.8",
"X-Requested-With": "XMLHttpRequest"
}
}'
{
"header_count": 5,
"headers_present": ["accept", "accept-language", "user-agent", "x-forwarded-for", "x-requested-with"],
"proxy_headers": ["x-forwarded-for"],
"forwarded_chain": ["1.2.3.4", "5.6.7.8"],
"spoofing_indicators": [],
"anomalies": [],
"missing_browser_headers": ["accept-encoding/connection"],
"recommendations": [
"Proxy/VPN headers seen; treat the client IP with suspicion or re-derive it from the left-most X-Forwarded-For hop."
]
}
Source contract imported from device fingerprint detection/app.py. Handler: headers_analyze_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
headers | query | object | No | Headers to analyze (defaults to the request's own headers). |
curl -X GET 'https://api.dakidarts.com/device-fingerprint-bot-detection/headers/analyze?headers=Accept&headers=User-Agent&headers=X-Forwarded-For' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
/headers/analyze
Headers Analyze Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Forensic analysis of a request-header map: proxy/VPN hints, reconstructed `X-Forwarded-For` chain, spoofed/placeholder values, structural anomalies, and missing browser headers with recommendations.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /headers/analyzeForensic analysis of a request-header map: proxy/VPN hints, reconstructed X-Forwarded-For chain, spoofed/placeholder values, structural anomalies, and missing browser headers with recommendations.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
headers | object | optional | Headers to analyze (defaults to the request's own headers). | {"User-Agent":"Mozilla/5.0 ...","Accept":"text/html","X-Forwarded-For":"1.2.3.4, 5.6.7.8"} |
curl -X POST http://127.0.0.1:5000/headers/analyze \
-H "Content-Type: application/json" \
-d '{
"headers": {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml",
"Accept-Language": "en-US,en;q=0.9",
"X-Forwarded-For": "1.2.3.4, 5.6.7.8",
"X-Requested-With": "XMLHttpRequest"
}
}'
{
"header_count": 5,
"headers_present": ["accept", "accept-language", "user-agent", "x-forwarded-for", "x-requested-with"],
"proxy_headers": ["x-forwarded-for"],
"forwarded_chain": ["1.2.3.4", "5.6.7.8"],
"spoofing_indicators": [],
"anomalies": [],
"missing_browser_headers": ["accept-encoding/connection"],
"recommendations": [
"Proxy/VPN headers seen; treat the client IP with suspicion or re-derive it from the left-most X-Forwarded-For hop."
]
}
Source contract imported from device fingerprint detection/app.py. Handler: headers_analyze_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
headers | body | object | No | Headers to analyze (defaults to the request's own headers). |
{
"anomalies": [],
"header_count": 5,
"proxy_headers": [
"x-forwarded-for"
],
"forwarded_chain": [
"1.2.3.4",
"5.6.7.8"
],
"headers_present": [
"accept",
"accept-language",
"user-agent",
"x-forwarded-for",
"x-requested-with"
],
"recommendations": [
"Proxy/VPN headers seen; treat the client IP with suspicion or re-derive it from the left-most X-Forwarded-For hop."
],
"spoofing_indicators": [],
"missing_browser_headers": [
"accept-encoding/connection"
]
}curl -X POST https://api.dakidarts.com/device-fingerprint-bot-detection/headers/analyze -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"headers": {"Accept": "text/html", "User-Agent": "Mozilla/5.0 ...", "X-Forwarded-For": "1.2.3.4, 5.6.7.8"}}'
/ip/geolocate
Geolocate Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Geolocates an IP and reports proxy/VPN/Tor/datacenter signals. **BYOK** — default provider `ipwhois` needs no key. For keyed providers (`ipinfo`, `abstractapi`, `ip2location`), pass your key via the `X-IP-Geo-Key` header or `api_key` param. All providers are normalized to one response schema.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /ip/geolocateGeolocates an IP and reports proxy/VPN/Tor/datacenter signals. BYOK — default provider ipwhois needs no key. For keyed providers (ipinfo, abstractapi, ip2location), pass your key via the X-IP-Geo-Key header or api_key param. All providers are normalized to one response schema.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
ip | string | optional | IP to geolocate (defaults to the caller's IP). | 8.8.8.8 |
provider | string | optional | Provider: ipwhois (default), ipinfo, ipapi, abstractapi, ip2location. Header equivalent: X-IP-Geo-Provider. | ipinfo |
api_key | string | optional | Your provider key (required only for ipinfo/abstractapi/ip2location). Header equivalent: X-IP-Geo-Key. | your_token |
curl -X POST http://127.0.0.1:5000/ip/geolocate \
-H "Content-Type: application/json" \
-d '{"ip": "8.8.8.8"}'
curl -X POST http://127.0.0.1:5000/ip/geolocate \
-H "Content-Type: application/json" \
-H "X-IP-Geo-Provider: ipinfo" \
-H "X-IP-Geo-Key: YOUR_IPINFO_TOKEN" \
-d '{"ip": "8.8.8.8"}'
{
"status": "ok",
"source": "ipwhois",
"ip": "8.8.8.8",
"continent": "North America",
"country": "United States",
"country_code": "US",
"region": "California",
"city": "San Jose",
"latitude": 37.3394,
"longitude": -121.895,
"postal": "95141",
"timezone": "America/Los_Angeles",
"isp": "Google LLC",
"org": "Google LLC",
"asn": "15169",
"security": {
"proxy": false,
"vpn": false,
"tor": false,
"hosting": false,
"crawler": false,
"fraud_score": null,
"threat_score": null
}
}
Errors: {"status":"error","code":...,"message":...} with codes INVALID_IP (400) · UNKNOWN_PROVIDER (400) · MISSING_KEY (400) · INVALID_KEY (401) · RATE_LIMITED (429) · PROVIDER_ERROR (502) · MALFORMED_RESPONSE (502).
Source contract imported from device fingerprint detection/app.py. Handler: geolocate_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
ip | query | string | No | IP to geolocate (defaults to the caller's IP). |
provider | query | string | No | Provider: `ipwhois` (default), `ipinfo`, `ipapi`, `abstractapi`, `ip2location`. Header equivalent: `X-IP-Geo-Provider`. |
api_key | query | string | No | Your provider key (required only for `ipinfo`/`abstractapi`/`ip2location`). Header equivalent: `X-IP-Geo-Key`. |
X-IP-Geo-Provider | header | string | No | Optional geolocation provider selector (BYOK configuration). |
X-IP-Geo-Key | header | string | No | Optional API key for the selected geolocation provider (BYOK). |
curl -X GET 'https://api.dakidarts.com/device-fingerprint-bot-detection/ip/geolocate?ip=8.8.8.8&provider=ipinfo&api_key=your_token' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'X-IP-Geo-Provider: YOUR_X_IP_GEO_PROVIDER' -H 'X-IP-Geo-Key: YOUR_X_IP_GEO_KEY'
/ip/geolocate
Geolocate Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Geolocates an IP and reports proxy/VPN/Tor/datacenter signals. **BYOK** — default provider `ipwhois` needs no key. For keyed providers (`ipinfo`, `abstractapi`, `ip2location`), pass your key via the `X-IP-Geo-Key` header or `api_key` param. All providers are normalized to one response schema.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /ip/geolocateGeolocates an IP and reports proxy/VPN/Tor/datacenter signals. BYOK — default provider ipwhois needs no key. For keyed providers (ipinfo, abstractapi, ip2location), pass your key via the X-IP-Geo-Key header or api_key param. All providers are normalized to one response schema.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
ip | string | optional | IP to geolocate (defaults to the caller's IP). | 8.8.8.8 |
provider | string | optional | Provider: ipwhois (default), ipinfo, ipapi, abstractapi, ip2location. Header equivalent: X-IP-Geo-Provider. | ipinfo |
api_key | string | optional | Your provider key (required only for ipinfo/abstractapi/ip2location). Header equivalent: X-IP-Geo-Key. | your_token |
curl -X POST http://127.0.0.1:5000/ip/geolocate \
-H "Content-Type: application/json" \
-d '{"ip": "8.8.8.8"}'
curl -X POST http://127.0.0.1:5000/ip/geolocate \
-H "Content-Type: application/json" \
-H "X-IP-Geo-Provider: ipinfo" \
-H "X-IP-Geo-Key: YOUR_IPINFO_TOKEN" \
-d '{"ip": "8.8.8.8"}'
{
"status": "ok",
"source": "ipwhois",
"ip": "8.8.8.8",
"continent": "North America",
"country": "United States",
"country_code": "US",
"region": "California",
"city": "San Jose",
"latitude": 37.3394,
"longitude": -121.895,
"postal": "95141",
"timezone": "America/Los_Angeles",
"isp": "Google LLC",
"org": "Google LLC",
"asn": "15169",
"security": {
"proxy": false,
"vpn": false,
"tor": false,
"hosting": false,
"crawler": false,
"fraud_score": null,
"threat_score": null
}
}
Errors: {"status":"error","code":...,"message":...} with codes INVALID_IP (400) · UNKNOWN_PROVIDER (400) · MISSING_KEY (400) · INVALID_KEY (401) · RATE_LIMITED (429) · PROVIDER_ERROR (502) · MALFORMED_RESPONSE (502).
Source contract imported from device fingerprint detection/app.py. Handler: geolocate_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
ip | body | string | No | IP to geolocate (defaults to the caller's IP). |
provider | body | string | No | Provider: `ipwhois` (default), `ipinfo`, `ipapi`, `abstractapi`, `ip2location`. Header equivalent: `X-IP-Geo-Provider`. |
api_key | body | string | No | Your provider key (required only for `ipinfo`/`abstractapi`/`ip2location`). Header equivalent: `X-IP-Geo-Key`. |
X-IP-Geo-Provider | header | string | No | Optional geolocation provider selector (BYOK configuration). |
X-IP-Geo-Key | header | string | No | Optional API key for the selected geolocation provider (BYOK). |
{
"ip": "8.8.8.8",
"asn": "15169",
"isp": "Google LLC",
"org": "Google LLC",
"city": "San Jose",
"postal": "95141",
"region": "California",
"source": "ipwhois",
"status": "ok",
"country": "United States",
"latitude": 37.3394,
"security": {
"tor": false,
"vpn": false,
"proxy": false,
"crawler": false,
"hosting": false,
"fraud_score": null,
"threat_score": null
},
"timezone": "America/Los_Angeles",
"continent": "North America",
"longitude": -121.895,
"country_code": "US"
}curl -X POST https://api.dakidarts.com/device-fingerprint-bot-detection/ip/geolocate -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'X-IP-Geo-Provider: YOUR_X_IP_GEO_PROVIDER' -H 'X-IP-Geo-Key: YOUR_X_IP_GEO_KEY' -H 'Content-Type: application/json' -d '{"ip": "8.8.8.8", "provider": "ipinfo", "api_key": "your_token"}'
/risk-analysis
Risk Analysis Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
The go/no-go fraud verdict. Blends four surfaces into a single 0–100 score:
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /risk-analysisThe go/no-go fraud verdict. Blends four surfaces into a single 0–100 score:
overall = 0.50 * bot + 0.15 * headers + 0.15 * fingerprint_completeness + 0.20 * geolocation
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
ip | string | optional | Device IP. | 8.8.8.8 |
user_agent / userAgent | string | optional | User-Agent. | Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... |
headers | object | optional | Request headers. | {"Accept":"text/html","Accept-Language":"en-US,en;q=0.9"} |
signals | object | optional | Client-side signals. | {"screen":{"width":1920,"height":1080},"webdriver":false,"hardware_concurrency":8} |
include_geo | boolean | optional | Run IP geolocation enrichment. Set false to skip the external call. | true (default), false |
provider | string | optional | Geolocation provider (same as /ip/geolocate). | ipwhois |
api_key | string | optional | Provider key (BYOK). | your_token |
curl -X POST http://127.0.0.1:5000/risk-analysis \
-H "Content-Type: application/json" \
-d '{
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"headers": {"Accept": "text/html", "Accept-Language": "en-US,en;q=0.9"},
"signals": {
"screen": {"width": 1920, "height": 1080},
"canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4",
"webdriver": false,
"hardware_concurrency": 8,
"languages": ["en-US"]
},
"include_geo": true
}'
{
"ip": "8.8.8.8",
"ip_source": "provided",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"risk_score": 14,
"risk_level": "low",
"verdict": "low_risk",
"flags": [],
"breakdown": {
"bot_detection": 10,
"header_analysis": 10,
"fingerprint_completeness": 0,
"ip_geolocation": 0,
"confidence": "medium"
},
"fingerprint": {
"fingerprint_extended": "c436873ca9a49169e5451da0fe60f91f...",
"fingerprint_full": "4863c2cbe782e713fc5bd059d9adc2c3...",
"components": {"canvas": true, "screen": true}
},
"bot_detection": {"risk_score": 10, "risk_level": "low", "verdict": "human", "confidence": "medium"},
"reasons": [],
"headers": {"proxy_headers": [], "anomalies": [], "spoofing_indicators": []},
"geolocation": {"status": "ok", "source": "ipwhois", "country": "United States", "security": {"proxy": false}},
"analyzed_at": "2026-08-28T11:57:08+00:00"
}
Source contract imported from device fingerprint detection/app.py. Handler: risk_analysis_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
ip | query | string | No | Device IP. |
user_agent | query | string | No | User-Agent string to analyze. |
userAgent | query | string | No | User-Agent string to analyze. |
headers | query | object | No | Request headers. |
signals | query | object | No | Client-side signals. |
include_geo | query | boolean | No | Run IP geolocation enrichment. Set `false` to skip the external call. |
provider | query | string | No | Geolocation provider (same as `/ip/geolocate`). |
api_key | query | string | No | Provider key (BYOK). |
X-IP-Geo-Provider | header | string | No | Optional geolocation provider selector (BYOK configuration). |
X-IP-Geo-Key | header | string | No | Optional API key for the selected geolocation provider (BYOK). |
{
"type": "object",
"properties": {
"ip": {
"description": "Dynamic source value; no concrete response example is published."
},
"flags": {
"type": "array",
"items": {}
},
"headers": {
"description": "Dynamic source value; no concrete response example is published."
},
"reasons": {
"description": "Dynamic source value; no concrete response example is published."
},
"verdict": {
"description": "Dynamic source value; no concrete response example is published."
},
"breakdown": {
"type": "object",
"properties": {
"confidence": {
"description": "Dynamic source value; no concrete response example is published."
},
"bot_detection": {
"description": "Dynamic source value; no concrete response example is published."
},
"ip_geolocation": {
"description": "Dynamic source value; no concrete response example is published."
},
"header_analysis": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_completeness": {
"type": "integer"
}
},
"additionalProperties": true
},
"ip_source": {
"description": "Dynamic source value; no concrete response example is published."
},
"risk_level": {
"description": "Dynamic source value; no concrete response example is published."
},
"risk_score": {
"type": "integer"
},
"user_agent": {
"type": "integer"
},
"analyzed_at": {
"type": "string",
"format": "date-time"
},
"fingerprint": {
"type": "object",
"properties": {
"components": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_full": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_extended": {
"description": "Dynamic source value; no concrete response example is published."
}
},
"additionalProperties": true
},
"geolocation": {},
"bot_detection": {
"description": "Dynamic source value; no concrete response example is published."
}
},
"additionalProperties": true
}curl -X GET 'https://api.dakidarts.com/device-fingerprint-bot-detection/risk-analysis?ip=8.8.8.8&user_agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+...&userAgent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+...&headers=Accept&headers=Accept-Language&signals=screen&signals=webdriver&signals=hardware_concurrency&provider=ipwhois&api_key=your_token' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'X-IP-Geo-Provider: YOUR_X_IP_GEO_PROVIDER' -H 'X-IP-Geo-Key: YOUR_X_IP_GEO_KEY'
/risk-analysis
Risk Analysis Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
The go/no-go fraud verdict. Blends four surfaces into a single 0–100 score:
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /risk-analysisThe go/no-go fraud verdict. Blends four surfaces into a single 0–100 score:
overall = 0.50 * bot + 0.15 * headers + 0.15 * fingerprint_completeness + 0.20 * geolocation
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
ip | string | optional | Device IP. | 8.8.8.8 |
user_agent / userAgent | string | optional | User-Agent. | Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... |
headers | object | optional | Request headers. | {"Accept":"text/html","Accept-Language":"en-US,en;q=0.9"} |
signals | object | optional | Client-side signals. | {"screen":{"width":1920,"height":1080},"webdriver":false,"hardware_concurrency":8} |
include_geo | boolean | optional | Run IP geolocation enrichment. Set false to skip the external call. | true (default), false |
provider | string | optional | Geolocation provider (same as /ip/geolocate). | ipwhois |
api_key | string | optional | Provider key (BYOK). | your_token |
curl -X POST http://127.0.0.1:5000/risk-analysis \
-H "Content-Type: application/json" \
-d '{
"ip": "8.8.8.8",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"headers": {"Accept": "text/html", "Accept-Language": "en-US,en;q=0.9"},
"signals": {
"screen": {"width": 1920, "height": 1080},
"canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4",
"webdriver": false,
"hardware_concurrency": 8,
"languages": ["en-US"]
},
"include_geo": true
}'
{
"ip": "8.8.8.8",
"ip_source": "provided",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"risk_score": 14,
"risk_level": "low",
"verdict": "low_risk",
"flags": [],
"breakdown": {
"bot_detection": 10,
"header_analysis": 10,
"fingerprint_completeness": 0,
"ip_geolocation": 0,
"confidence": "medium"
},
"fingerprint": {
"fingerprint_extended": "c436873ca9a49169e5451da0fe60f91f...",
"fingerprint_full": "4863c2cbe782e713fc5bd059d9adc2c3...",
"components": {"canvas": true, "screen": true}
},
"bot_detection": {"risk_score": 10, "risk_level": "low", "verdict": "human", "confidence": "medium"},
"reasons": [],
"headers": {"proxy_headers": [], "anomalies": [], "spoofing_indicators": []},
"geolocation": {"status": "ok", "source": "ipwhois", "country": "United States", "security": {"proxy": false}},
"analyzed_at": "2026-08-28T11:57:08+00:00"
}
Source contract imported from device fingerprint detection/app.py. Handler: risk_analysis_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
ip | body | string | No | Device IP. |
user_agent | body | string | No | User-Agent string to analyze. |
userAgent | body | string | No | User-Agent string to analyze. |
headers | body | object | No | Request headers. |
signals | body | object | No | Client-side signals. |
include_geo | body | boolean | No | Run IP geolocation enrichment. Set `false` to skip the external call. |
provider | body | string | No | Geolocation provider (same as `/ip/geolocate`). |
api_key | body | string | No | Provider key (BYOK). |
X-IP-Geo-Provider | header | string | No | Optional geolocation provider selector (BYOK configuration). |
X-IP-Geo-Key | header | string | No | Optional API key for the selected geolocation provider (BYOK). |
{
"ip": "8.8.8.8",
"flags": [],
"headers": {
"anomalies": [],
"proxy_headers": [],
"spoofing_indicators": []
},
"reasons": [],
"verdict": "low_risk",
"breakdown": {
"confidence": "medium",
"bot_detection": 10,
"ip_geolocation": 0,
"header_analysis": 10,
"fingerprint_completeness": 0
},
"ip_source": "provided",
"risk_level": "low",
"risk_score": 14,
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"analyzed_at": "2026-08-28T11:57:08+00:00",
"fingerprint": {
"components": {
"canvas": true,
"screen": true
},
"fingerprint_full": "4863c2cbe782e713fc5bd059d9adc2c3...",
"fingerprint_extended": "c436873ca9a49169e5451da0fe60f91f..."
},
"geolocation": {
"source": "ipwhois",
"status": "ok",
"country": "United States",
"security": {
"proxy": false
}
},
"bot_detection": {
"verdict": "human",
"confidence": "medium",
"risk_level": "low",
"risk_score": 10
}
}curl -X POST https://api.dakidarts.com/device-fingerprint-bot-detection/risk-analysis -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'X-IP-Geo-Provider: YOUR_X_IP_GEO_PROVIDER' -H 'X-IP-Geo-Key: YOUR_X_IP_GEO_KEY' -H 'Content-Type: application/json' -d '{"ip": "8.8.8.8", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...", "headers": {"Accept": "text/html", "Accept-Language": "en-US,en;q=0.9"}, "signals": {"screen": {"width": 1920, "height": 1080}, "webdriver": false, "hardware_concurrency": 8}, "include_geo": "example", "provider": "ipwhois", "api_key": "your_token"}'
Device Info endpoints sourced from the Device Fingerprint & Bot Detection API implementation.
/device-info
Device Info Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Parses any User-Agent string into a structured device/browser/OS breakdown. Heuristic, dependency-free; unknown strings fall back to `"unknown"`.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /device-infoParses any User-Agent string into a structured device/browser/OS breakdown. Heuristic, dependency-free; unknown strings fall back to "unknown".
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
user_agent / userAgent | string | optional | User-Agent to parse (defaults to the request's UA). | Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 ... Safari/604.1 |
curl -X POST http://127.0.0.1:5000/device-info \
-H "Content-Type: application/json" \
-d '{"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1"}'
{
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1",
"browser": "Safari",
"browser_version": "17.1",
"browser_engine": "WebKit",
"os": "iOS",
"os_version": "17.1",
"device_type": "phone",
"device_brand": "Apple",
"device_model": "iPhone",
"is_mobile": true,
"is_tablet": false,
"is_bot": false
}
Source contract imported from device fingerprint detection/app.py. Handler: device_info_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user_agent | query | string | No | User-Agent string to analyze. |
userAgent | query | string | No | User-Agent string to analyze. |
curl -X GET 'https://api.dakidarts.com/device-fingerprint-bot-detection/device-info?user_agent=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+17_1+like+Mac+OS+X%29+AppleWebKit%2F605.1.15+...+Safari%2F604.1&userAgent=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+17_1+like+Mac+OS+X%29+AppleWebKit%2F605.1.15+...+Safari%2F604.1' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
/device-info
Device Info Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Parses any User-Agent string into a structured device/browser/OS breakdown. Heuristic, dependency-free; unknown strings fall back to `"unknown"`.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /device-infoParses any User-Agent string into a structured device/browser/OS breakdown. Heuristic, dependency-free; unknown strings fall back to "unknown".
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
user_agent / userAgent | string | optional | User-Agent to parse (defaults to the request's UA). | Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 ... Safari/604.1 |
curl -X POST http://127.0.0.1:5000/device-info \
-H "Content-Type: application/json" \
-d '{"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1"}'
{
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1",
"browser": "Safari",
"browser_version": "17.1",
"browser_engine": "WebKit",
"os": "iOS",
"os_version": "17.1",
"device_type": "phone",
"device_brand": "Apple",
"device_model": "iPhone",
"is_mobile": true,
"is_tablet": false,
"is_bot": false
}
Source contract imported from device fingerprint detection/app.py. Handler: device_info_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
user_agent | body | string | No | User-Agent string to analyze. |
userAgent | body | string | No | User-Agent string to analyze. |
{
"os": "iOS",
"is_bot": false,
"browser": "Safari",
"is_mobile": true,
"is_tablet": false,
"os_version": "17.1",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1",
"device_type": "phone",
"device_brand": "Apple",
"device_model": "iPhone",
"browser_engine": "WebKit",
"browser_version": "17.1"
}curl -X POST https://api.dakidarts.com/device-fingerprint-bot-detection/device-info -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 ... Safari/604.1", "userAgent": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 ... Safari/604.1"}'
Entropy endpoints sourced from the Device Fingerprint & Bot Detection API implementation.
/entropy
Entropy Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Analyzes the entropy/stability of a fingerprint hash — or derives one from signals first. Low entropy means the hash is predictable/collidable.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /entropyAnalyzes the entropy/stability of a fingerprint hash — or derives one from signals first. Low entropy means the hash is predictable/collidable.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
fingerprint | string | either/or | A fingerprint hash to analyze. | c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274 |
signals | object | either/or | Signals to derive a fingerprint from (when fingerprint is omitted). | {"screen":{"width":1920,"height":1080},"canvas_hash":"abc"} |
ip | string | optional | Used when deriving from signals. | 8.8.8.8 |
user_agent | string | optional | Used when deriving from signals. | Mozilla/5.0 ... |
headers | object | optional | Used when deriving from signals. | {"Accept":"text/html"} |
curl -X POST http://127.0.0.1:5000/entropy \
-H "Content-Type: application/json" \
-d '{"signals": {"screen": {"width": 1920, "height": 1080}, "canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4", "platform": "Win32"}}'
{
"fingerprint": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274",
"hash_algorithm": "HMAC-SHA256",
"hex_length": 64,
"entropy_bits_per_char": 3.85,
"estimated_entropy_bits": 247,
"notes": ["high per-character entropy - collisions are unlikely"],
"completeness": {
"signals_present": 3,
"signals_max": 25,
"completeness_score": 12,
"completeness_level": "sparse",
"signals": ["canvas_hash", "platform", "screen"]
}
}
Source contract imported from device fingerprint detection/app.py. Handler: entropy_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
fingerprint | query | string | No | A fingerprint hash to analyze. |
signals | query | object | No | Signals to derive a fingerprint from (when `fingerprint` is omitted). |
ip | query | string | No | Used when deriving from signals. |
user_agent | query | string | No | Used when deriving from signals. |
headers | query | object | No | Used when deriving from signals. |
or `signals` (+ optional `ip`/`user_agent`/`headers`) | query | string | No | Computes a fingerprint from signals, then analyzes it. |
curl -X GET 'https://api.dakidarts.com/device-fingerprint-bot-detection/entropy?fingerprint=c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274&signals=screen&signals=canvas_hash&ip=8.8.8.8&user_agent=Mozilla%2F5.0+...&headers=Accept' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
/entropy
Entropy Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Analyzes the entropy/stability of a fingerprint hash — or derives one from signals first. Low entropy means the hash is predictable/collidable.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /entropyAnalyzes the entropy/stability of a fingerprint hash — or derives one from signals first. Low entropy means the hash is predictable/collidable.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
fingerprint | string | either/or | A fingerprint hash to analyze. | c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274 |
signals | object | either/or | Signals to derive a fingerprint from (when fingerprint is omitted). | {"screen":{"width":1920,"height":1080},"canvas_hash":"abc"} |
ip | string | optional | Used when deriving from signals. | 8.8.8.8 |
user_agent | string | optional | Used when deriving from signals. | Mozilla/5.0 ... |
headers | object | optional | Used when deriving from signals. | {"Accept":"text/html"} |
curl -X POST http://127.0.0.1:5000/entropy \
-H "Content-Type: application/json" \
-d '{"signals": {"screen": {"width": 1920, "height": 1080}, "canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4", "platform": "Win32"}}'
{
"fingerprint": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274",
"hash_algorithm": "HMAC-SHA256",
"hex_length": 64,
"entropy_bits_per_char": 3.85,
"estimated_entropy_bits": 247,
"notes": ["high per-character entropy - collisions are unlikely"],
"completeness": {
"signals_present": 3,
"signals_max": 25,
"completeness_score": 12,
"completeness_level": "sparse",
"signals": ["canvas_hash", "platform", "screen"]
}
}
Source contract imported from device fingerprint detection/app.py. Handler: entropy_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
fingerprint | body | string | No | A fingerprint hash to analyze. |
signals | body | object | No | Signals to derive a fingerprint from (when `fingerprint` is omitted). |
ip | body | string | No | Used when deriving from signals. |
user_agent | body | string | No | Used when deriving from signals. |
headers | body | object | No | Used when deriving from signals. |
or `signals` (+ optional `ip`/`user_agent`/`headers`) | body | string | No | Computes a fingerprint from signals, then analyzes it. |
{
"notes": [
"high per-character entropy - collisions are unlikely"
],
"hex_length": 64,
"fingerprint": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274",
"completeness": {
"signals": [
"canvas_hash",
"platform",
"screen"
],
"signals_max": 25,
"signals_present": 3,
"completeness_level": "sparse",
"completeness_score": 12
},
"hash_algorithm": "HMAC-SHA256",
"entropy_bits_per_char": 3.85,
"estimated_entropy_bits": 247
}curl -X POST https://api.dakidarts.com/device-fingerprint-bot-detection/entropy -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"fingerprint": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274", "signals": {"screen": {"width": 1920, "height": 1080}, "canvas_hash": "abc"}, "ip": "8.8.8.8", "user_agent": "Mozilla/5.0 ...", "headers": {"Accept": "text/html"}, "or `signals` (+ optional `ip`/`user_agent`/`headers`)": "example"}'
Compare endpoints sourced from the Device Fingerprint & Bot Detection API implementation.
/compare
Compare Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Compares two fingerprints — either two hashes (match verdict) or two signal sets (Jaccard similarity + same-device verdict). Useful for account-takeover & device-swap detection.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /compareCompares two fingerprints — either two hashes (match verdict) or two signal sets (Jaccard similarity + same-device verdict). Useful for account-takeover & device-swap detection.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
fingerprint_a | string | required | First fingerprint hash. | c436873ca9a49169e5451da0fe60f91f... |
fingerprint_b | string | required | Second fingerprint hash. | 4863c2cbe782e713fc5bd059d9adc2c3... |
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
signals | object | required | First signal set. | {"screen":{"width":1920,"height":1080},"canvas_hash":"abc"} |
other_signals | object | required | Second signal set (alias: signals_b). | {"screen":{"width":1920,"height":1080},"canvas_hash":"abc"} |
curl -X POST http://127.0.0.1:5000/compare \
-H "Content-Type: application/json" \
-d '{"fingerprint_a": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274", "fingerprint_b": "4863c2cbe782e713fc5bd059d9adc2c36adfd5bd0956ec40ffc256db37fa24d2"}'
curl -X POST http://127.0.0.1:5000/compare \
-H "Content-Type: application/json" \
-d '{
"signals": {
"screen": {"width": 1920, "height": 1080},
"canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4",
"platform": "Win32",
"fonts": ["Arial"]
},
"other_signals": {
"screen": {"width": 1920, "height": 1080},
"canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4",
"platform": "Win32"
}
}'
{
"method": "hashes",
"fingerprint_a": "c436873ca9a49169e5451da0fe60f91f...",
"fingerprint_b": "4863c2cbe782e713fc5bd059d9adc2c3...",
"identical": false,
"result": "no_match",
"entropy_a": {"hex_length": 64, "entropy_bits_per_char": 3.85, "notes": ["..."]},
"entropy_b": {"hex_length": 64, "entropy_bits_per_char": 3.91, "notes": ["..."]}
}
{
"method": "signals",
"shared_signals": ["canvas_hash", "platform", "screen"],
"matching_values": ["canvas_hash", "platform"],
"differing_values": ["screen"],
"only_in_a": ["fonts"],
"only_in_b": [],
"jaccard_similarity": 0.75,
"verdict": "likely_same_device"
}
Source contract imported from device fingerprint detection/app.py. Handler: compare_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
fingerprint_a | query | string | Yes | First fingerprint hash. |
fingerprint_b | query | string | Yes | Second fingerprint hash. |
{
"type": "object",
"properties": {
"method": {
"description": "Dynamic source value; no concrete response example is published."
},
"result": {
"description": "Dynamic source value; no concrete response example is published."
},
"entropy_a": {
"description": "Dynamic source value; no concrete response example is published."
},
"entropy_b": {
"description": "Dynamic source value; no concrete response example is published."
},
"identical": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_a": {
"description": "Dynamic source value; no concrete response example is published."
},
"fingerprint_b": {
"description": "Dynamic source value; no concrete response example is published."
}
},
"additionalProperties": true
}curl -X GET 'https://api.dakidarts.com/device-fingerprint-bot-detection/compare?fingerprint_a=c436873ca9a49169e5451da0fe60f91f...&fingerprint_b=4863c2cbe782e713fc5bd059d9adc2c3...' -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
/compare
Compare Route
SOURCE CONTRACT — UPSTREAM NEEDED
$0.0050 / call / 120 rpm
Upstream needed
Compares two fingerprints — either two hashes (match verdict) or two signal sets (Jaccard similarity + same-device verdict). Useful for account-takeover & device-swap detection.
Snapshot from
RAPID_README.mdfor source API versionv0.0.2. This is source documentation, not evidence that an upstream is deployed.
POST /compareCompares two fingerprints — either two hashes (match verdict) or two signal sets (Jaccard similarity + same-device verdict). Useful for account-takeover & device-swap detection.
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
fingerprint_a | string | required | First fingerprint hash. | c436873ca9a49169e5451da0fe60f91f... |
fingerprint_b | string | required | Second fingerprint hash. | 4863c2cbe782e713fc5bd059d9adc2c3... |
| Param | Type | Req | Description | Example |
|---|---|---|---|---|
signals | object | required | First signal set. | {"screen":{"width":1920,"height":1080},"canvas_hash":"abc"} |
other_signals | object | required | Second signal set (alias: signals_b). | {"screen":{"width":1920,"height":1080},"canvas_hash":"abc"} |
curl -X POST http://127.0.0.1:5000/compare \
-H "Content-Type: application/json" \
-d '{"fingerprint_a": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274", "fingerprint_b": "4863c2cbe782e713fc5bd059d9adc2c36adfd5bd0956ec40ffc256db37fa24d2"}'
curl -X POST http://127.0.0.1:5000/compare \
-H "Content-Type: application/json" \
-d '{
"signals": {
"screen": {"width": 1920, "height": 1080},
"canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4",
"platform": "Win32",
"fonts": ["Arial"]
},
"other_signals": {
"screen": {"width": 1920, "height": 1080},
"canvas_hash": "c9e8f1a2b3c4d5e6f7a8b9c0d1e2f3a4",
"platform": "Win32"
}
}'
{
"method": "hashes",
"fingerprint_a": "c436873ca9a49169e5451da0fe60f91f...",
"fingerprint_b": "4863c2cbe782e713fc5bd059d9adc2c3...",
"identical": false,
"result": "no_match",
"entropy_a": {"hex_length": 64, "entropy_bits_per_char": 3.85, "notes": ["..."]},
"entropy_b": {"hex_length": 64, "entropy_bits_per_char": 3.91, "notes": ["..."]}
}
{
"method": "signals",
"shared_signals": ["canvas_hash", "platform", "screen"],
"matching_values": ["canvas_hash", "platform"],
"differing_values": ["screen"],
"only_in_a": ["fonts"],
"only_in_b": [],
"jaccard_similarity": 0.75,
"verdict": "likely_same_device"
}
Source contract imported from device fingerprint detection/app.py. Handler: compare_route. Reference: RAPID_README.md.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
fingerprint_a | body | string | Yes | First fingerprint hash. |
fingerprint_b | body | string | Yes | Second fingerprint hash. |
{
"method": "signals",
"verdict": "likely_same_device",
"only_in_a": [
"fonts"
],
"only_in_b": [],
"shared_signals": [
"canvas_hash",
"platform",
"screen"
],
"matching_values": [
"canvas_hash",
"platform"
],
"differing_values": [
"screen"
],
"jaccard_similarity": 0.75
}curl -X POST https://api.dakidarts.com/device-fingerprint-bot-detection/compare -H 'X-API-Key: dk_live_...' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"fingerprint_a": "c436873ca9a49169e5451da0fe60f91f...", "fingerprint_b": "4863c2cbe782e713fc5bd059d9adc2c3..."}'
No endpoints match that search. Clear the search to see all routes.
Edit a JSON request to validate its syntax and preview the published sample response. This stays in your browser; it never calls the live API or uses credits.
The preview checks JSON syntax and shows the saved example response; it does not execute request values.
These are integration templates, not runnable sample calls. Configure an endpoint upstream in API Studio, then replace the placeholder path. Saved samples stay preview-only.
# Replace with a connected GET route and include any required parameters.
curl -X GET "https://api.dakidarts.com/device-fingerprint-bot-detection/v1/your-connected-endpoint" \
-H "X-API-Key: dk_live_..." \
-H "Accept: application/json"
# Replace with a connected GET route and include any required parameters.
import requests
headers = {"X-API-Key": "dk_live_..."}
response = requests.get("https://api.dakidarts.com/device-fingerprint-bot-detection/v1/your-connected-endpoint", headers=headers)
print(response.json())
// Replace with a connected GET route and include any required parameters.
const res = await fetch("https://api.dakidarts.com/device-fingerprint-bot-detection/v1/your-connected-endpoint", {
headers: { "X-API-Key": "dk_live_..." }
});
const data = await res.json();
console.log(data);
<?php
// Replace with a connected GET route and include any required parameters.
$ch = curl_init("https://api.dakidarts.com/device-fingerprint-bot-detection/v1/your-connected-endpoint");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: dk_live_..."]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);