> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fingerprint.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Collect Intelligence

> The Automation Intelligence API (in public preview) gives you the tools to determine whether traffic is legitimate and should be accepted by your application.

The API detects automation tools like AI Agents, AI Assistants and AI Browsers. Additionally it provides IP intelligence like geolocation and data center detection.




## OpenAPI

````yaml post /edge
openapi: 3.1.1
info:
  title: Server API
  description: >
    Fingerprint Server API allows you to get, search, and update Events in a
    server environment. It can be used for data exports, decision-making, and
    data analysis scenarios.

    Server API is intended for server-side usage, it's not intended to be used
    from the client side, whether it's a browser or a mobile device.

    The API also supports collection of Automation Intelligence for requests to
    your server in edge, pre-origin, or middleware contexts.
  version: '4'
  contact:
    name: Fingerprint Support
    email: support@fingerprint.com
  license:
    name: MIT
    url: >-
      https://github.com/fingerprintjs/fingerprint-pro-server-api-openapi/blob/main/LICENSE
servers:
  - url: https://api.fpjs.io/v4
    description: Global
  - url: https://eu.api.fpjs.io/v4
    description: EU
  - url: https://ap.api.fpjs.io/v4
    description: Asia (Mumbai)
security:
  - bearerAuth: []
tags:
  - name: Event
    description: |
      Get, update, or search for information about events.
paths:
  /edge:
    post:
      summary: Collect Automation Intelligence.
      description: >
        The Automation Intelligence API (in public preview) gives you the tools
        to determine whether traffic is legitimate and should be accepted by
        your application.


        The API detects automation tools like AI Agents, AI Assistants and AI
        Browsers. Additionally it provides IP intelligence like geolocation and
        data center detection.
      operationId: analyzeRequestForAutomationIntelligence
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EdgeRequest'
            examples:
              valid:
                summary: Example request
                value:
                  headers:
                    - name: user-agent
                      value: Mozilla/5.0 (Local Test Bot)
                    - name: host
                      value: example.com
                    - name: user-agent
                      value: one.example.com
                    - name: Signature-Agent
                      value: '"https://fingerprint.com"'
                    - name: Signature-Input
                      value: >-
                        binding0=("@authority"
                        "signature-agent");created=1769022347;keyid="KYG4GtgVVPWw3r1AXgM6fYFw5kAvRZiJVxZY1Rsgc3Q";alg="ed25519";expires=1769022407;tag="web-bot-auth"
                    - name: Signature
                      value: >-
                        binding0=:DLRNY0BDeHGMovOo6flKtY70U+cHa3cKDiEdLm92NGpzR0uj4m7yTHtIZnXLlHFiKjUAUBJIgbcv0HuSt8KaBg==:
                  method: POST
                  url: https://example.com/login?foo=bar
                  ipv4_address: 34.162.244.71
      responses:
        '200':
          description: OK.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EdgeResponse'
              examples:
                200-ok-bot-detected:
                  summary: Example response when a bot was detected.
                  value:
                    event_id: 1758130560902.8tRtrH
                    timestamp: 1758130560902
                    url: https://example.com/login?foo=bar
                    bot_info:
                      category: ai_agent
                      provider: Fingerprint
                      provider_url: https://fingerprint.com
                      name: Fingerprint Agent
                      identity: signed
                      confidence: high
                    ip_info:
                      v4:
                        address: 34.162.244.71
                        geolocation:
                          accuracy_radius: 20
                          latitude: 39.96118
                          longitude: -82.99879
                          postal_code: '43215'
                          timezone: America/New_York
                          city_name: Columbus
                          country_code: US
                          country_name: United States
                          continent_code: NA
                          continent_name: North America
                          subdivisions:
                            - iso_code: OH
                              name: Ohio
                        asn: '396982'
                        asn_name: Google LLC
                        asn_network: 34.160.0.0/12
                        asn_type: hosting
                        datacenter_result: true
                        datacenter_name: Google Cloud
                    proxy: false
                    proxy_confidence: high
                    vpn: true
                    vpn_confidence: high
                    vpn_methods:
                      public_vpn: false
                      relay: true
                200-ok-bot-not-detected:
                  summary: Example response when a bot was not detected.
                  value:
                    event_id: 1758130561034.Kp2Wqz
                    timestamp: 1758130561034
                    url: https://example.com/login?foo=bar
                    ip_info:
                      v4:
                        address: 173.56.25.103
                        geolocation:
                          accuracy_radius: 20
                          latitude: 40.71427
                          longitude: -74.00597
                          postal_code: '10001'
                          timezone: America/New_York
                          city_name: New York City
                          country_code: US
                          country_name: United States
                          continent_code: NA
                          continent_name: North America
                          subdivisions:
                            - iso_code: NY
                              name: New York
                        asn: '701'
                        asn_name: Verizon Business
                        asn_network: 173.56.0.0/16
                        asn_type: isp
                        datacenter_result: false
                    proxy: false
                    proxy_confidence: high
                    vpn: false
                    vpn_confidence: medium
                    vpn_methods:
                      public_vpn: false
                      relay: false
                200-ok-proxy-detected:
                  summary: Example response when a proxy was detected.
                  value:
                    event_id: 1758130561187.Rm9Vxd
                    timestamp: 1758130561187
                    url: https://example.com/login?foo=bar
                    ip_info:
                      v4:
                        address: 173.56.25.103
                        geolocation:
                          accuracy_radius: 20
                          latitude: 40.71427
                          longitude: -74.00597
                          postal_code: '10001'
                          timezone: America/New_York
                          city_name: New York City
                          country_code: US
                          country_name: United States
                          continent_code: NA
                          continent_name: North America
                          subdivisions:
                            - iso_code: NY
                              name: New York
                        asn: '701'
                        asn_name: Verizon Business
                        asn_network: 173.56.0.0/16
                        asn_type: isp
                        datacenter_result: false
                    proxy: true
                    proxy_confidence: high
                    proxy_details:
                      proxy_type: data_center
                      last_seen_at: 1716057600000
                      provider: DataImpulse
                    vpn: false
                    vpn_confidence: medium
                    vpn_methods:
                      public_vpn: false
                      relay: false
        '400':
          description: Bad request. The request payload is not valid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                400-unknown-field:
                  summary: Error response when an unknown field is provided.
                  value:
                    error:
                      code: request_cannot_be_parsed
                      message: request body contains an unknown field "unknown"
                400-ip-required:
                  summary: Error response when an IP address was not provided.
                  value:
                    error:
                      code: request_cannot_be_parsed
                      message: at least one of ipv4_address or ipv6_address is required
                400-read-timeout:
                  summary: Error response if the request is not sent within 5 seconds.
                  value:
                    error:
                      code: request_read_timeout
                      message: request read timeout
        '403':
          description: Forbidden. Access to this API is denied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                403-secret-api-key-required:
                  summary: Error response when the secret API key was not provided.
                  value:
                    error:
                      code: secret_api_key_required
                      message: secret API key in header is missing or empty
                403-secret-api-key-not-found:
                  summary: >-
                    Error response when the provided secret API key does not
                    exist.
                  value:
                    error:
                      code: secret_api_key_not_found
                      message: >-
                        no fingerprint workspace found for specified secret API
                        key
                403-wrong-region:
                  summary: >-
                    Error response when the API region is different from the
                    region, the calling workspace is configured with.
                  value:
                    error:
                      code: wrong_region
                      message: wrong region
        '413':
          description: Bad request. The request payload is too large.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                '413':
                  summary: Payload too large error
                  value:
                    error:
                      code: request_cannot_be_parsed
                      message: payload too large
        '429':
          description: Too Many Requests. The request is throttled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                429-too-many-requests-error:
                  summary: Too many requests error
                  value:
                    error:
                      code: too_many_requests
                      message: too many requests
        '500':
          description: Workspace error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    EdgeRequest:
      type: object
      description: >-
        HTTP request metadata (including the HTTP method, headers and IP
        address) sent by you (your server) to the Fingerprint API for IP and bot
        analysis. To improve accuracy, retain as much of the original semantics
        of the HTTP request as possible. For example, preserve the order of the
        request headers and their capitalization.
      additionalProperties: false
      required:
        - headers
        - method
        - url
      properties:
        headers:
          type: array
          description: >
            Ordered header entries from the request made to your server. Each
            entry represents one header line. If one header name appears as
            multiple lines, send each as a separate item in the array.


            Headers that contain authentication details like `Cookie` or
            `Authorization` should be included with their value set to an empty
            string.
          minItems: 1
          items:
            type: object
            additionalProperties: false
            required:
              - name
              - value
            properties:
              name:
                type: string
                examples:
                  - User-Agent
                description: >-
                  Header name as forwarded by your server. Headers must be valid
                  according to RFC 7230 and will be canonicalized according to
                  RFC 9112.
              value:
                type: string
                examples:
                  - Mozilla/5.0
                description: >-
                  Value of a single forwarded header entry. Be careful to
                  preserve the original encoding and escaping. For example, do
                  not double escape quotes.
          examples:
            - - name: host
                value: example.com
              - name: user-agent
                value: Mozilla/5.0
              - name: accept-language
                value: en-US,en;q=0.9
            - - name: host
                value: example.com
              - name: user-agent
                value: Mozilla/5.0
              - name: accept-encoding
                value: gzip
              - name: accept-encoding
                value: deflate
        method:
          type: string
          description: >-
            HTTP method of the request. Preserve the original HTTP method of the
            request, including casing.
          examples:
            - GET
            - POST
            - PUT
            - PATCH
            - DELETE
        url:
          type: string
          description: >-
            Absolute URL of the request, without a \#fragment suffix. Only HTTP
            and HTTPS schemes are supported.
          format: uri
          examples:
            - http://example.com
            - https://example.com/checkout?method=card
        ipv4_address:
          type: string
          description: Client IPv4 address observed by your server.
          format: ipv4
          examples:
            - 34.162.244.71
            - 3.208.0.3
            - 173.56.0.4
        ipv6_address:
          type: string
          description: Client IPv6 address observed by your server.
          format: ipv6
          examples:
            - 2001:4860:4801:10::1
            - 2600:1f42:abcd:5678:9876:fedc:1357:2468
            - 2001:4868:85f:1a2b:3c4d:5e6f:7890:abcd
        linked_id:
          $ref: '#/components/schemas/LinkedId'
        tags:
          $ref: '#/components/schemas/Tags'
    EdgeResponse:
      type: object
      description: >-
        IP and bot analysis for a request submitted through the Automation
        Intelligence API.
      additionalProperties: false
      required:
        - event_id
        - timestamp
        - ip_info
      properties:
        event_id:
          $ref: '#/components/schemas/EventId'
        timestamp:
          $ref: '#/components/schemas/Timestamp'
        linked_id:
          $ref: '#/components/schemas/LinkedId'
        tags:
          $ref: '#/components/schemas/Tags'
        url:
          $ref: '#/components/schemas/Url'
        bot_info:
          $ref: '#/components/schemas/BotInfo'
        ip_info:
          $ref: '#/components/schemas/IPInfo'
        proxy:
          $ref: '#/components/schemas/Proxy'
        proxy_confidence:
          $ref: '#/components/schemas/ProxyConfidence'
        proxy_details:
          $ref: '#/components/schemas/ProxyDetails'
        vpn:
          $ref: '#/components/schemas/Vpn'
        vpn_confidence:
          $ref: '#/components/schemas/VpnConfidence'
        vpn_methods:
          $ref: '#/components/schemas/VpnMethods'
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/Error'
    LinkedId:
      type: string
      examples:
        - somelinkedId
      description: A customer-provided id that was sent with the request.
    Tags:
      type: object
      description: >-
        A customer-provided value or an object that was sent with the
        identification request or updated later.
      additionalProperties: true
      required: []
    EventId:
      type: string
      examples:
        - 1708102555327.NLOjmg
      description: >
        Unique identifier of the user's request. The first portion of the
        event_id is a unix epoch milliseconds timestamp.
    Timestamp:
      description: Timestamp of the event with millisecond precision in Unix time.
      type: integer
      format: int64
      examples:
        - 1708102555327
    Url:
      type: string
      examples:
        - https://www.example.com/login
      description: Page URL from which the request was sent.
    BotInfo:
      type: object
      description: Extended bot information.
      additionalProperties: false
      required:
        - category
        - provider
        - name
        - identity
        - confidence
      properties:
        category:
          $ref: '#/components/schemas/BotInfoCategory'
        provider:
          type: string
          description: The organization or company operating the bot.
          examples:
            - Anthropic
            - Browserbase
            - Google
            - OpenAI
        provider_url:
          type: string
          examples:
            - https://fingerprint.com
          description: The URL of the bot provider's website.
        name:
          type: string
          description: The specific name or identifier of the bot.
          examples:
            - ClaudeBot
            - Browserbase Agent
            - Googlebot
            - GPTBot
            - ChatGPT-User
        identity:
          $ref: '#/components/schemas/BotInfoIdentity'
        confidence:
          $ref: '#/components/schemas/BotInfoConfidence'
    IPInfo:
      type: object
      description: >-
        Details about the request IP address. Has separate fields for v4 and v6
        IP address versions.
      additionalProperties: false
      required: []
      properties:
        v4:
          $ref: '#/components/schemas/IPInfoV4'
        v6:
          $ref: '#/components/schemas/IPInfoV6'
    Proxy:
      type: boolean
      description: >
        IP address was used by a public proxy provider or belonged to a known
        recent residential proxy
    ProxyConfidence:
      type: string
      enum:
        - low
        - medium
        - high
      description: >
        Confidence level of the proxy detection. If a proxy is not detected,
        confidence is "high". If it's detected, can be "low", "medium", or
        "high".
    ProxyDetails:
      type: object
      additionalProperties: false
      description: Proxy detection details (present if `proxy` is `true`)
      required:
        - proxy_type
      properties:
        proxy_type:
          type: string
          enum:
            - residential
            - data_center
            - unknown
          description: |
            Proxy type:
             * `residential` - proxies that route through residential and telecom IP addresses to appear as legitimate traffic
             * `data_center` - proxies which route through data centers
             * `unknown` - reported when a proxy is detected solely by the ML model and the IP sources did not determine a specific type
        last_seen_at:
          type: integer
          format: int64
          examples:
            - 1708102555327
          description: >
            Unix millisecond timestamp with hourly resolution of when this IP
            was last seen as a proxy
        provider:
          type: string
          examples:
            - Massive
          description: >
            String representing the last proxy service provider detected when
            this

            IP was synced. An IP can be shared by multiple service providers.
    Vpn:
      type: boolean
      description: |
        VPN or other anonymizing service has been used when sending the request.
    VpnConfidence:
      type: string
      enum:
        - low
        - medium
        - high
      description: >-
        A confidence rating for the VPN detection result — "low", "medium", or
        "high". Depends on the combination of results returned from all VPN
        detection methods.
    VpnMethods:
      type: object
      additionalProperties: false
      required: []
      properties:
        timezone_mismatch:
          type: boolean
          x-platforms:
            - android
            - ios
            - browser
          description: >-
            The browser timezone doesn't match the timezone inferred from the
            request IP address.
        public_vpn:
          type: boolean
          x-platforms:
            - android
            - ios
            - browser
          description: >-
            Request IP address is owned and used by a public VPN service
            provider.
        auxiliary_mobile:
          type: boolean
          x-platforms:
            - android
            - ios
            - browser
          description: >-
            This method applies to mobile devices only. Indicates the result of
            additional methods used to detect a VPN in mobile devices.
        os_mismatch:
          type: boolean
          x-platforms:
            - browser
          description: >-
            The browser runs on a different operating system than the operating
            system inferred from the request network signature.
        relay:
          type: boolean
          x-platforms:
            - android
            - ios
            - browser
          description: >
            Request IP address belongs to a relay service provider, indicating
            the use of relay services like [Apple Private
            relay](https://support.apple.com/en-us/102602) or [Cloudflare
            Warp](https://developers.cloudflare.com/warp-client/).


            * Like VPNs, relay services anonymize the visitor's true IP address.

            * Unlike traditional VPNs, relay services don't let visitors spoof
            their location by choosing an exit node in a different country.


            This field allows you to differentiate VPN users and relay service
            users in your fraud prevention logic.
        ml_prediction:
          type: boolean
          x-platforms:
            - browser
          description: >
            `true` if the request came from a device running a VPN, `false`
            otherwise.  
    Error:
      type: object
      additionalProperties: false
      required:
        - code
        - message
      properties:
        code:
          $ref: '#/components/schemas/ErrorCode'
        message:
          type: string
          examples:
            - Forbidden
    BotInfoCategory:
      type: string
      enum:
        - advertising_and_marketing
        - aggregator
        - ai_agent
        - ai_assistant
        - ai_browser
        - ai_crawler
        - ai_search
        - browser_automation
        - ecommerce
        - monitoring_and_analytics
        - other
        - scraping
        - security
        - search_engine_crawler
        - search_engine_optimization
        - unknown
      description: |
        The type and purpose of the bot.
    BotInfoIdentity:
      type: string
      enum:
        - verified
        - signed
        - spoofed
        - unknown
      description: |
        The verification status of the bot's identity:
         * `verified` - well-known bot with publicly verifiable identity, directed by the bot provider.
         * `signed` - bot that signs its platform via Web Bot Auth, directed by the bot provider's customers.
         * `spoofed` - bot that claims a public identity but fails verification.
         * `unknown` - bot that does not publish a verifiable identity.
    BotInfoConfidence:
      type: string
      enum:
        - low
        - medium
        - high
      description: Confidence level of the bot identification.
    IPInfoV4:
      type: object
      additionalProperties: false
      required:
        - address
      properties:
        address:
          type: string
          format: ipv4
          examples:
            - 94.142.239.124
        geolocation:
          $ref: '#/components/schemas/Geolocation'
        asn:
          type: string
          examples:
            - '396982'
            - '16509'
            - '701'
        asn_name:
          type: string
          examples:
            - Google LLC
            - Amazon.com, Inc.
            - Verizon Business
        asn_network:
          type: string
          examples:
            - 34.160.0.0/12
            - 3.208.0.0/12
            - 173.56.0.0/16
        asn_type:
          type: string
          examples:
            - hosting
            - isp
            - business
            - education
        datacenter_result:
          type: boolean
          description: When true, the request originated from a datacenter.
        datacenter_name:
          type: string
          examples:
            - Google Cloud
            - Amazon AWS
    IPInfoV6:
      type: object
      additionalProperties: false
      required:
        - address
      properties:
        address:
          type: string
          format: ipv6
          examples:
            - 2001:db8:3333:4444:5555:6666:7777:8888
        geolocation:
          $ref: '#/components/schemas/Geolocation'
        asn:
          type: string
          examples:
            - '396982'
            - '16509'
            - '701'
        asn_name:
          type: string
          examples:
            - Google LLC
            - Amazon.com, Inc.
            - Verizon Business
        asn_network:
          type: string
          examples:
            - 2001:4860:4801:10::/64
            - 2600:1f00::/24
            - 2001:4868:800::/40
        asn_type:
          type: string
          examples:
            - hosting
            - isp
            - business
            - education
        datacenter_result:
          type: boolean
          description: When true, the request originated from a datacenter.
        datacenter_name:
          type: string
          examples:
            - Google Cloud
            - Amazon AWS
    ErrorCode:
      type: string
      enum:
        - request_cannot_be_parsed
        - request_read_timeout
        - secret_api_key_required
        - secret_api_key_not_found
        - public_api_key_required
        - public_api_key_not_found
        - subscription_not_active
        - wrong_region
        - feature_not_enabled
        - visitor_not_found
        - too_many_requests
        - state_not_ready
        - failed
        - event_not_found
        - missing_module
        - payload_too_large
        - service_unavailable
        - ruleset_not_found
      description: >
        Error code:

        * `request_cannot_be_parsed` - The query parameters or JSON payload
        contains some errors
          that prevented us from parsing it (wrong type/surpassed limits).
        * `request_read_timeout` - The request body could not be read before the
        connection timed out.

        * `secret_api_key_required` - secret API key in header is missing or
        empty.

        * `secret_api_key_not_found` - No Fingerprint workspace found for
        specified secret API key.

        * `public_api_key_required` - public API key in header is missing or
        empty.

        * `public_api_key_not_found` - No Fingerprint workspace found for
        specified public API key.

        * `subscription_not_active` - Fingerprint workspace is not active.

        * `wrong_region` - Server and workspace region differ.

        * `feature_not_enabled` - This feature (for example, Delete API) is not
        enabled for your workspace.

        * `visitor_not_found` - The specified visitor ID was not found. It never
        existed or it may have already been deleted.

        * `too_many_requests` - The limit on secret API key requests per second
        has been exceeded.

        * `state_not_ready` - The event specified with event ID is
          not ready for updates yet. Try again.
          This error happens in rare cases when update API is called immediately
          after receiving the event ID on the client. In case you need to send
          information right away, we recommend using the JS agent API instead.
        * `failed` - Internal server error.

        * `event_not_found` - The specified event ID was not found. It never
        existed, expired, or it has been deleted.

        * `missing_module` - The request is invalid because it is missing a
        required module.

        * `payload_too_large` - The request payload is too large and cannot be
        processed.

        * `service_unavailable` - The service was unable to process the request.

        * `ruleset_not_found` - The specified ruleset was not found. It never
        existed or it has been deleted.
    Geolocation:
      type: object
      additionalProperties: false
      required: []
      properties:
        accuracy_radius:
          type: integer
          examples:
            - 20
          minimum: 0
          description: >-
            The IP address is likely to be within this radius (in km) of the
            specified location.
        latitude:
          type: number
          format: double
          examples:
            - 50.05
          minimum: -90
          maximum: 90
        longitude:
          type: number
          format: double
          examples:
            - 14.4
          minimum: -180
          maximum: 180
        postal_code:
          type: string
          examples:
            - 150 00
        timezone:
          type: string
          format: timezone
          examples:
            - Europe/Prague
        city_name:
          type: string
          examples:
            - Prague
        country_code:
          type: string
          examples:
            - CZ
          minLength: 2
          maxLength: 2
        country_name:
          type: string
          examples:
            - Czechia
        continent_code:
          type: string
          examples:
            - EU
          minLength: 2
          maxLength: 2
        continent_name:
          type: string
          examples:
            - Europe
        subdivisions:
          type: array
          items:
            type: object
            additionalProperties: false
            required:
              - iso_code
              - name
            properties:
              iso_code:
                type: string
                examples:
                  - '10'
              name:
                type: string
                examples:
                  - Hlavni mesto Praha
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: string
      description: >-
        Add your Secret API Key to the Authorization header using the standard
        Bearer format: `Authorization: Bearer <secret_api_key>`

````