Search the Dakidarts network
InsightThe Numerology APIAPIHealthHeFit APIAPIContentQuoteverseAPIFinanceCalcX Investment APIAPIFinanceCalcX Loan Calculator APIAPISearchSearch Query Autocomplete APIAPIHealthPregnancy Calculator APIAPIIdentityChecky — Verify Phone Number APIAPIIdentityChecky Email Verification APIAPILanguageLinguify Language Detector APIAPIDataCountries Info APIAPISecurityIP Reputation Checker APIAPISecurityMalware & Phishing URL Scanner APIAPISecurityDark Web Exposure APIAPISecurityEncryption & Hashing Utility APIAPISecurityDevice Fingerprint & Bot Detection APIAPISecuritySSL/TLS Security Analyzer APIAPISecurityFile Hash Analyzer APIAPISecuritySQL Injection / XSS Payload Detector APIAPISecurityNetwork Packet Threat Analyzer APIAPITimeEthiopian Calendar APIAPIDataCreator Sponsorship Intelligence APIAPICommerceE-commerce Product & Price Intelligence APIAPICompanyFrom API Catalog to Product Platform: The Dakidarts DirectionJournalProductGetting Started with Dakidarts Numerology WordPress PluginJournalResearchMirror Numbers and Cycles: Extensions in Numerological AnalysisJournalResearchHidden Passion Position Number & Gap ResonanceJournalBotHow to Use Quoteverse369bot on TelegramJournalEngineeringPHP 8.4 JIT in Real Workloads: Where It Helps — and Where It Does NotJournalAstrologyDecode the Cosmos: Why Horoscopes Still Matter in the Age of AIJournalAstrologyHoroscope ≠ Hype: Understanding the Real Power of Celestial PatternsJournalAstrologyYou're Not Just Your Sun Sign: How to Read a Full HoroscopeJournalAstrologyHow Horoscopes Sync With Numerology for Deeper Life GuidanceJournalAPIDecoding Words with Numbers: Using the Gematria API in Python for Hidden InsightsJournalAPIYour Celestial Blueprint: How to Generate a Full Birth Chart Using the Numerology APIJournalAstrologyYearly Horoscope Trends: What Each Sign Can Expect Spiritually & PracticallyJournalAstrologyRetrogrades & Romance: When to Reconnect or Release in LoveJournalAPIHow to Integrate the Dakidarts Numerology API into Your Website or Mobile AppJournalAPIWhat Is a Numerology API? A Practical Tool for Apps and Spiritual ProductsJournalEngineeringHow to Build a Telegram Bot Using PythonJournalLegalTerms of ServiceLegalLegalPrivacy PolicyLegalLegalAPI Terms of ServiceLegalLegalBilling, Credits & Subscription PolicyLegalLegalSecurity, Compliance & Cookie PolicyLegalLegalDisclaimer, Medical & Spiritual DisclaimerLegalProductHeFit APIHFProductNumerology APINUProductNumora StudioNSProductOpAstroOAProductNumerologyBotNBProductNumerology Core for WordPressWPProductNoteMeAppPageHomeSitePageAboutSitePageDeveloper API documentationSitePageJournalSitePageChangelogSitePageContactSitePageLegal & Trust CenterSitePageEcosystemSitePageEnterpriseSitePageAPI CatalogSitePageNumerology Core for WordPressSitePageSearchSitePageServicesSitePageShopSitePageSystem StatusSitePageNumora StudioSitePageSupportSitePageTrustSiteServiceWeb DevelopmentServiceServiceGraphics DesignServiceServiceDigital MarketingServiceServiceCloud ServicesServiceServiceSoftware DevelopmentServiceServiceAPI Development & IntegrationServiceServiceAI & AutomationServiceServiceTechnical SEOService
← API network SECURITY / FINGERPRINT / BOT / RISK
Direct Platform v0.0.2 / General Availability api.dakidarts.comDirect gateway

Device Fingerprint & Bot Detection API

Privacy-conscious fraud signals from device fingerprints, bot scoring, user-agent parsing, header forensics, IP geolocation, entropy and fingerprint comparison.

Direct PlatformDE
api.dakidarts.comv0.0.2General Availability25ms p9519 documented endpoints
DIRECT NATIVE API

Call Device Fingerprint & Bot Detection API through the Dakidarts gateway.

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.

Base URLhttps://api.dakidarts.com/device-fingerprint-bot-detection
AuthenticationX-API-Key: dk_live_...
Default reference pathGET /bot-detection
Commercial modelPay-as-you-go / $0.0050 per call
01 / ACCESS

One key, one gateway

Use a Dakidarts API key with read or write scopes and control which APIs that key can reach.

02 / BILLING

Metered by the call

Wallet credits, plan quotas and organization invoices are settled per request with transparent response headers.

03 / RELIABILITY

Observable by default

Latency, upstream status and execution mode are logged so integration issues are visible before they spread.

RAPIDAPI SPOTLIGHTRapidAPI Marketplace

Also available through RapidAPI.

Keep the direct Dakidarts gateway as your primary route, or use the RapidAPI listing when marketplace billing and key management fit your stack better.

View on RapidAPI Plans, keys and usage stay inside RapidAPI.
CAPABILITIES

Built to disappear into the product.

The best API is the one your team can integrate, observe and then stop thinking about.

01

Accept browser/device signals in snake_case or camelCase

Designed as a composable building block for product teams, internal tooling and automation.

02

Normalize proxy/geolocation provider results where configured

Designed as a composable building block for product teams, internal tooling and automation.

03

Add risk signals alongside—not instead of—authentication controls

Designed as a composable building block for product teams, internal tooling and automation.

PLATFORM FACTS

The shape of the surface.

Selected facts about coverage, delivery and production readiness.

01Fingerprint generation and stability/entropy analysis
02Bot, device-info and request-header analysis
03Combined risk analysis and fingerprint comparison
FAQ

Answers before you integrate.

Access, billing and integration details for Device Fingerprint & Bot Detection API.

What signals does the API return? +

Device fingerprint and bot-risk signals for a request or session.

When should I use it? +

High-risk sign-ups, checkout flows and abuse-sensitive actions.

Does it replace authentication? +

No. Treat it as an additional risk layer alongside authentication and rate limiting.

How do I get access? +

Subscribe on the Dakidarts dashboard, then call the gateway with an API key.

Can I tune the thresholds? +

Your application decides how to act on the signals and what thresholds fit its risk model.

SUBSCRIPTION PLANS

Choose a quota that matches the workload.

Plans are shown for reference. Live checkout opens after an API route has an upstream URL.

WALLET-ACCESS

Pay-as-you-go access

$0.00 / month

  • Wallet credits per call
  • $0.0050 / call overage
  • 120 req/min
INTEGRATION PATH

From first request to production.

Start with a Dakidarts key, call the gateway, then monitor usage from the dashboard.

01

Create a Dakidarts key

Choose the API scope, then copy the key into your server environment.

02

Call the gateway

Send requests to https://api.dakidarts.com/device-fingerprint-bot-detection with your key and JSON body.

03

Watch usage

Track calls, latency and spend from the API dashboard and wallet.

ENDPOINT REFERENCE

Endpoint reference & metered costs.

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.

GROUP / 01

Operations

Operations endpoints sourced from the Device Fingerprint & Bot Detection API implementation.

3 endpoints
GET / Index SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Service banner: name, version, description.

Snapshot from docs/endpoints.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /

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.

QUICK CURL
curl -X GET https://api.dakidarts.com/device-fingerprint-bot-detection/ -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GET /status Status SOURCE CONTRACT — UPSTREAM NEEDED $0.0050 / call / 120 rpm Upstream needed

Health check and version.

Snapshot from docs/endpoints.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /status

Health 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.

QUICK CURL
curl -X GET https://api.dakidarts.com/device-fingerprint-bot-detection/status -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

GET /meta

Self-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.

QUICK CURL
curl -X GET https://api.dakidarts.com/device-fingerprint-bot-detection/meta -H 'X-API-Key: dk_live_...' -H 'Accept: application/json'
GROUP / 02

Analysis

Analysis endpoints sourced from the Device Fingerprint & Bot Detection API implementation.

10 endpoints
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /fingerprint

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.

Request Body (JSON)

ParamTypeReqDescriptionExample
user_agent / userAgentstringoptionalBrowser User-Agent (defaults to the request's UA).Mozilla/5.0 (X11; Linux)
ipstringoptionalClient IP address (defaults to the request's remote address).203.0.113.9
headersobjectoptionalCustom headers dictionary.{"X-Test-Header":"boom"}
signalsobjectoptionalClient-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}

Fingerprint signals (25 recognized keys)

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

Example

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
        }
      }'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
user_agentquerystringNoBrowser User-Agent (defaults to the request's UA).
userAgentquerystringNoBrowser User-Agent (defaults to the request's UA).
ipquerystringNoClient IP address (defaults to the request's remote address).
headersqueryobjectNoCustom headers dictionary.
signalsqueryobjectNoClient-side fingerprint signals (canvas/WebGL/audio hashes, screen, fonts, timezone, CPU/memory, webdriver, etc.). See table below.
RESPONSE SHAPE / NO VERIFIED SAMPLE
{
  "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
}
QUICK CURL
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'
POST /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /fingerprint

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.

Request Body (JSON)

ParamTypeReqDescriptionExample
user_agent / userAgentstringoptionalBrowser User-Agent (defaults to the request's UA).Mozilla/5.0 (X11; Linux)
ipstringoptionalClient IP address (defaults to the request's remote address).203.0.113.9
headersobjectoptionalCustom headers dictionary.{"X-Test-Header":"boom"}
signalsobjectoptionalClient-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}

Fingerprint signals (25 recognized keys)

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

Example

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
        }
      }'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
user_agentbodystringNoBrowser User-Agent (defaults to the request's UA).
userAgentbodystringNoBrowser User-Agent (defaults to the request's UA).
ipbodystringNoClient IP address (defaults to the request's remote address).
headersbodyobjectNoCustom headers dictionary.
signalsbodyobjectNoClient-side fingerprint signals (canvas/WebGL/audio hashes, screen, fonts, timezone, CPU/memory, webdriver, etc.). See table below.
RESPONSE SHAPE / NO VERIFIED SAMPLE
{
  "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
}
QUICK CURL
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"}}'
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /bot-detection

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.

Request Body (JSON)

ParamTypeReqDescriptionExample
user_agent / userAgentstringoptionalUser-Agent to analyze.Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
headersobjectoptionalRequest headers.{"X-Requested-With":"XMLHttpRequest"}
signalsobjectoptionalClient-side signals.{"webdriver":true,"hardware_concurrency":0}

Example

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}
      }'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
user_agentquerystringNoUser-Agent string to analyze.
headersqueryobjectNoRequest headers.
signalsqueryobjectNoClient-side signals.
userAgentquerystringNoAlias for `user_agent`; User-Agent string to analyze.
QUICK CURL
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'
POST /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /bot-detection

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.

Request Body (JSON)

ParamTypeReqDescriptionExample
user_agent / userAgentstringoptionalUser-Agent to analyze.Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
headersobjectoptionalRequest headers.{"X-Requested-With":"XMLHttpRequest"}
signalsobjectoptionalClient-side signals.{"webdriver":true,"hardware_concurrency":0}

Example

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}
      }'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
user_agentbodystringNoUser-Agent string to analyze.
headersbodyobjectNoRequest headers.
signalsbodyobjectNoClient-side signals.
userAgentbodystringNoAlias for `user_agent`; User-Agent string to analyze.
SAMPLE RESPONSE
{
  "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
}
QUICK CURL
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"}'
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /headers/analyze

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.

Request Body (JSON)

ParamTypeReqDescriptionExample
headersobjectoptionalHeaders 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"}

Example

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"
        }
      }'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
headersqueryobjectNoHeaders to analyze (defaults to the request's own headers).
QUICK CURL
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'
POST /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /headers/analyze

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.

Request Body (JSON)

ParamTypeReqDescriptionExample
headersobjectoptionalHeaders 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"}

Example

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"
        }
      }'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
headersbodyobjectNoHeaders to analyze (defaults to the request's own headers).
SAMPLE RESPONSE
{
  "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"
  ]
}
QUICK CURL
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"}}'
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /ip/geolocate

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.

Request Body (JSON)

ParamTypeReqDescriptionExample
ipstringoptionalIP to geolocate (defaults to the caller's IP).8.8.8.8
providerstringoptionalProvider: ipwhois (default), ipinfo, ipapi, abstractapi, ip2location. Header equivalent: X-IP-Geo-Provider.ipinfo
api_keystringoptionalYour provider key (required only for ipinfo/abstractapi/ip2location). Header equivalent: X-IP-Geo-Key.your_token

Example (default provider, no key)

curl -X POST http://127.0.0.1:5000/ip/geolocate \
  -H "Content-Type: application/json" \
  -d '{"ip": "8.8.8.8"}'

Example (BYOK with a keyed provider)

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"}'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
ipquerystringNoIP to geolocate (defaults to the caller's IP).
providerquerystringNoProvider: `ipwhois` (default), `ipinfo`, `ipapi`, `abstractapi`, `ip2location`. Header equivalent: `X-IP-Geo-Provider`.
api_keyquerystringNoYour provider key (required only for `ipinfo`/`abstractapi`/`ip2location`). Header equivalent: `X-IP-Geo-Key`.
X-IP-Geo-ProviderheaderstringNoOptional geolocation provider selector (BYOK configuration).
X-IP-Geo-KeyheaderstringNoOptional API key for the selected geolocation provider (BYOK).
QUICK CURL
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'
POST /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /ip/geolocate

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.

Request Body (JSON)

ParamTypeReqDescriptionExample
ipstringoptionalIP to geolocate (defaults to the caller's IP).8.8.8.8
providerstringoptionalProvider: ipwhois (default), ipinfo, ipapi, abstractapi, ip2location. Header equivalent: X-IP-Geo-Provider.ipinfo
api_keystringoptionalYour provider key (required only for ipinfo/abstractapi/ip2location). Header equivalent: X-IP-Geo-Key.your_token

Example (default provider, no key)

curl -X POST http://127.0.0.1:5000/ip/geolocate \
  -H "Content-Type: application/json" \
  -d '{"ip": "8.8.8.8"}'

Example (BYOK with a keyed provider)

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"}'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
ipbodystringNoIP to geolocate (defaults to the caller's IP).
providerbodystringNoProvider: `ipwhois` (default), `ipinfo`, `ipapi`, `abstractapi`, `ip2location`. Header equivalent: `X-IP-Geo-Provider`.
api_keybodystringNoYour provider key (required only for `ipinfo`/`abstractapi`/`ip2location`). Header equivalent: `X-IP-Geo-Key`.
X-IP-Geo-ProviderheaderstringNoOptional geolocation provider selector (BYOK configuration).
X-IP-Geo-KeyheaderstringNoOptional API key for the selected geolocation provider (BYOK).
SAMPLE RESPONSE
{
  "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"
}
QUICK CURL
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"}'
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /risk-analysis

The 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

Request Body (JSON)

ParamTypeReqDescriptionExample
ipstringoptionalDevice IP.8.8.8.8
user_agent / userAgentstringoptionalUser-Agent.Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...
headersobjectoptionalRequest headers.{"Accept":"text/html","Accept-Language":"en-US,en;q=0.9"}
signalsobjectoptionalClient-side signals.{"screen":{"width":1920,"height":1080},"webdriver":false,"hardware_concurrency":8}
include_geobooleanoptionalRun IP geolocation enrichment. Set false to skip the external call.true (default), false
providerstringoptionalGeolocation provider (same as /ip/geolocate).ipwhois
api_keystringoptionalProvider key (BYOK).your_token

Example

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
      }'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
ipquerystringNoDevice IP.
user_agentquerystringNoUser-Agent string to analyze.
userAgentquerystringNoUser-Agent string to analyze.
headersqueryobjectNoRequest headers.
signalsqueryobjectNoClient-side signals.
include_geoquerybooleanNoRun IP geolocation enrichment. Set `false` to skip the external call.
providerquerystringNoGeolocation provider (same as `/ip/geolocate`).
api_keyquerystringNoProvider key (BYOK).
X-IP-Geo-ProviderheaderstringNoOptional geolocation provider selector (BYOK configuration).
X-IP-Geo-KeyheaderstringNoOptional API key for the selected geolocation provider (BYOK).
RESPONSE SHAPE / NO VERIFIED SAMPLE
{
  "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
}
QUICK CURL
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'
POST /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /risk-analysis

The 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

Request Body (JSON)

ParamTypeReqDescriptionExample
ipstringoptionalDevice IP.8.8.8.8
user_agent / userAgentstringoptionalUser-Agent.Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...
headersobjectoptionalRequest headers.{"Accept":"text/html","Accept-Language":"en-US,en;q=0.9"}
signalsobjectoptionalClient-side signals.{"screen":{"width":1920,"height":1080},"webdriver":false,"hardware_concurrency":8}
include_geobooleanoptionalRun IP geolocation enrichment. Set false to skip the external call.true (default), false
providerstringoptionalGeolocation provider (same as /ip/geolocate).ipwhois
api_keystringoptionalProvider key (BYOK).your_token

Example

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
      }'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
ipbodystringNoDevice IP.
user_agentbodystringNoUser-Agent string to analyze.
userAgentbodystringNoUser-Agent string to analyze.
headersbodyobjectNoRequest headers.
signalsbodyobjectNoClient-side signals.
include_geobodybooleanNoRun IP geolocation enrichment. Set `false` to skip the external call.
providerbodystringNoGeolocation provider (same as `/ip/geolocate`).
api_keybodystringNoProvider key (BYOK).
X-IP-Geo-ProviderheaderstringNoOptional geolocation provider selector (BYOK configuration).
X-IP-Geo-KeyheaderstringNoOptional API key for the selected geolocation provider (BYOK).
SAMPLE RESPONSE
{
  "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
  }
}
QUICK CURL
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"}'
GROUP / 03

Device Info

Device Info endpoints sourced from the Device Fingerprint & Bot Detection API implementation.

2 endpoints
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /device-info

Parses any User-Agent string into a structured device/browser/OS breakdown. Heuristic, dependency-free; unknown strings fall back to "unknown".

Request Body (JSON)

ParamTypeReqDescriptionExample
user_agent / userAgentstringoptionalUser-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

Example

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"}'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
user_agentquerystringNoUser-Agent string to analyze.
userAgentquerystringNoUser-Agent string to analyze.
QUICK CURL
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'
POST /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /device-info

Parses any User-Agent string into a structured device/browser/OS breakdown. Heuristic, dependency-free; unknown strings fall back to "unknown".

Request Body (JSON)

ParamTypeReqDescriptionExample
user_agent / userAgentstringoptionalUser-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

Example

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"}'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
user_agentbodystringNoUser-Agent string to analyze.
userAgentbodystringNoUser-Agent string to analyze.
SAMPLE RESPONSE
{
  "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"
}
QUICK CURL
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"}'
GROUP / 04

Entropy

Entropy endpoints sourced from the Device Fingerprint & Bot Detection API implementation.

2 endpoints
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /entropy

Analyzes the entropy/stability of a fingerprint hash — or derives one from signals first. Low entropy means the hash is predictable/collidable.

Request Body (JSON)

ParamTypeReqDescriptionExample
fingerprintstringeither/orA fingerprint hash to analyze.c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274
signalsobjecteither/orSignals to derive a fingerprint from (when fingerprint is omitted).{"screen":{"width":1920,"height":1080},"canvas_hash":"abc"}
ipstringoptionalUsed when deriving from signals.8.8.8.8
user_agentstringoptionalUsed when deriving from signals.Mozilla/5.0 ...
headersobjectoptionalUsed when deriving from signals.{"Accept":"text/html"}

Example

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"}}'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
fingerprintquerystringNoA fingerprint hash to analyze.
signalsqueryobjectNoSignals to derive a fingerprint from (when `fingerprint` is omitted).
ipquerystringNoUsed when deriving from signals.
user_agentquerystringNoUsed when deriving from signals.
headersqueryobjectNoUsed when deriving from signals.
or `signals` (+ optional `ip`/`user_agent`/`headers`)querystringNoComputes a fingerprint from signals, then analyzes it.
QUICK CURL
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'
POST /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /entropy

Analyzes the entropy/stability of a fingerprint hash — or derives one from signals first. Low entropy means the hash is predictable/collidable.

Request Body (JSON)

ParamTypeReqDescriptionExample
fingerprintstringeither/orA fingerprint hash to analyze.c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274
signalsobjecteither/orSignals to derive a fingerprint from (when fingerprint is omitted).{"screen":{"width":1920,"height":1080},"canvas_hash":"abc"}
ipstringoptionalUsed when deriving from signals.8.8.8.8
user_agentstringoptionalUsed when deriving from signals.Mozilla/5.0 ...
headersobjectoptionalUsed when deriving from signals.{"Accept":"text/html"}

Example

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"}}'

Response

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
fingerprintbodystringNoA fingerprint hash to analyze.
signalsbodyobjectNoSignals to derive a fingerprint from (when `fingerprint` is omitted).
ipbodystringNoUsed when deriving from signals.
user_agentbodystringNoUsed when deriving from signals.
headersbodyobjectNoUsed when deriving from signals.
or `signals` (+ optional `ip`/`user_agent`/`headers`)bodystringNoComputes a fingerprint from signals, then analyzes it.
SAMPLE RESPONSE
{
  "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
}
QUICK CURL
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"}'
GROUP / 05

Compare

Compare endpoints sourced from the Device Fingerprint & Bot Detection API implementation.

2 endpoints
GET /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /compare

Compares two fingerprints — either two hashes (match verdict) or two signal sets (Jaccard similarity + same-device verdict). Useful for account-takeover & device-swap detection.

Request Body (JSON) — hash mode

ParamTypeReqDescriptionExample
fingerprint_astringrequiredFirst fingerprint hash.c436873ca9a49169e5451da0fe60f91f...
fingerprint_bstringrequiredSecond fingerprint hash.4863c2cbe782e713fc5bd059d9adc2c3...

Request Body (JSON) — signal mode

ParamTypeReqDescriptionExample
signalsobjectrequiredFirst signal set.{"screen":{"width":1920,"height":1080},"canvas_hash":"abc"}
other_signalsobjectrequiredSecond signal set (alias: signals_b).{"screen":{"width":1920,"height":1080},"canvas_hash":"abc"}

Example (hash mode)

curl -X POST http://127.0.0.1:5000/compare \
  -H "Content-Type: application/json" \
  -d '{"fingerprint_a": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274", "fingerprint_b": "4863c2cbe782e713fc5bd059d9adc2c36adfd5bd0956ec40ffc256db37fa24d2"}'

Example (signal mode)

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"
        }
      }'

Response (hash mode)

{
  "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": ["..."]}
}

Response (signal mode)

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
fingerprint_aquerystringYesFirst fingerprint hash.
fingerprint_bquerystringYesSecond fingerprint hash.
RESPONSE SHAPE / NO VERIFIED SAMPLE
{
  "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
}
QUICK CURL
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'
POST /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.md for source API version v0.0.2. This is source documentation, not evidence that an upstream is deployed.

🔹 POST /compare

Compares two fingerprints — either two hashes (match verdict) or two signal sets (Jaccard similarity + same-device verdict). Useful for account-takeover & device-swap detection.

Request Body (JSON) — hash mode

ParamTypeReqDescriptionExample
fingerprint_astringrequiredFirst fingerprint hash.c436873ca9a49169e5451da0fe60f91f...
fingerprint_bstringrequiredSecond fingerprint hash.4863c2cbe782e713fc5bd059d9adc2c3...

Request Body (JSON) — signal mode

ParamTypeReqDescriptionExample
signalsobjectrequiredFirst signal set.{"screen":{"width":1920,"height":1080},"canvas_hash":"abc"}
other_signalsobjectrequiredSecond signal set (alias: signals_b).{"screen":{"width":1920,"height":1080},"canvas_hash":"abc"}

Example (hash mode)

curl -X POST http://127.0.0.1:5000/compare \
  -H "Content-Type: application/json" \
  -d '{"fingerprint_a": "c436873ca9a49169e5451da0fe60f91f234454cf2e5b724b56813f979cb45274", "fingerprint_b": "4863c2cbe782e713fc5bd059d9adc2c36adfd5bd0956ec40ffc256db37fa24d2"}'

Example (signal mode)

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"
        }
      }'

Response (hash mode)

{
  "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": ["..."]}
}

Response (signal mode)

{
  "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.

PARAMETERS
NameInTypeRequiredDescription
fingerprint_abodystringYesFirst fingerprint hash.
fingerprint_bbodystringYesSecond fingerprint hash.
SAMPLE RESPONSE
{
  "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
}
QUICK CURL
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..."}'
INTERACTIVE SANDBOX

Explore a response before you integrate.

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.

MOCK RESPONSE
TYPESCRIPT CONTRACT
INTEGRATION SDK

Use the product where it lives.

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.

REST/JSON
# 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"
MORE IN THE NETWORK

Explore more Security and adjacent APIs.

Full catalog