HTTP/3 Fingerprints API

https://fp.impersonate.pro/ is the human-readable diagnostics page.

https://fp.impersonate.pro/api/http3 is the machine-readable API endpoint behind it.

The root page renders the same live capture returned by /api/http3. Use the page when you want a quick visual inspection, and use the JSON endpoint when you need to record or compare fingerprints programmatically.

Endpoint

GET https://fp.impersonate.pro/api/http3

The endpoint is intended to be called over HTTP/3 so the server can capture:

  • HTTP/3 settings
  • request pseudo-headers and request headers
  • QUIC transport parameters
  • TLS JA3 / JA3N
  • TLS cipher suites
  • TLS extensions used by the client

What the landing page shows

The landing page at https://fp.impersonate.pro/ renders four groups of data from the same API response:

  1. Perk Hash & JA3
  2. HTTP/3 Settings
  3. Request Headers
  4. TLS Info

The page describes perk_text as the combined HTTP/3 fingerprint string built from:

  • HTTP/3 settings
  • pseudo-header initials
  • QUIC transport parameters

perk_hash is the MD5 of that string.

The page also exposes normalized variants:

  • perk_text_normalized
  • perk_hash_normalized

The normalized form sorts QUIC transport parameters by numeric ID before hashing.

Response shape

The response has three top-level keys:

Field Type Meaning
info string Short description of the service
http3 object HTTP/3-specific fingerprint data
tls object TLS fingerprint data collected during the same session

http3 object

Field Type Meaning
perk_text string Raw HTTP/3 fingerprint string
perk_hash string MD5 hash of perk_text
perk_text_normalized string Normalized fingerprint string
perk_hash_normalized string MD5 hash of the normalized form
settings array HTTP/3 SETTINGS frame values
headers object Request pseudo-headers and request headers captured for this request

The current sample response includes these HTTP/3 settings:

ID Name Value
1 SETTINGS_QPACK_MAX_TABLE_CAPACITY 65536
6 SETTINGS_MAX_FIELD_SECTION_SIZE 262144
7 SETTINGS_QPACK_BLOCKED_STREAMS 100
51 SETTINGS_H3_DATAGRAM 1
1064713998990579600 GREASE 4112814399667889602

The captured headers include both pseudo-headers and browser request headers, for example:

  • :method
  • :authority
  • :scheme
  • :path
  • sec-ch-ua
  • user-agent
  • accept
  • accept-encoding
  • accept-language
  • priority

tls object

Field Type Meaning
ja3 object JA3 text and MD5 hash
ja3n object Normalized JA3 text and MD5 hash
cipher_suites array Advertised TLS cipher suites
extensions array TLS extensions sent by the client

The current sample reports these cipher suites:

Name Value
TLS_AES_128_GCM_SHA256 4865
TLS_AES_256_GCM_SHA384 4866
TLS_CHACHA20_POLY1305_SHA256 4867

The sampled TLS extensions include:

  • server_name
  • supported_groups
  • signature_algorithms
  • alpn
  • compress_certificate
  • supported_versions
  • psk_key_exchange_modes
  • key_share
  • quic_transport_parameters
  • alps_new
  • encrypted_client_hello

Two parts are especially useful when comparing HTTP/3 clients:

QUIC transport parameters

The quic_transport_parameters extension appears as TLS extension 57. In the sample response it includes values such as:

  • max_idle_timeout
  • max_udp_payload_size
  • initial_max_data
  • initial_max_stream_data_bidi_local
  • initial_max_stream_data_bidi_remote
  • initial_max_stream_data_uni
  • initial_max_streams_bidi
  • initial_max_streams_uni
  • max_datagram_frame_size
  • initial_rtt
  • google_connection_options
  • version_information
  • GREASE

These values are also folded into perk_text.

TLS client fingerprint

The sample JA3 and JA3N values are:

771,4865-4866-4867,0-10-13-16-27-43-45-51-57-17613-65037,4588-29-23-24,

With hash:

36b3da67265214a919829c5e959f7425

Sample response

{
  "info": "Fingerprints API by impersonate.pro, commercial solution available",
  "http3": {
    "perk_text": "1:65536;6:262144;7:100;51:1;GREASE|m,a,s,p|12584:4f524947;3:1472;6:6291456;12583:AUTO;32:65536;15:;4:15728640;9:103;5:6291456;GREASE;7:6291456;17:1@1,GREASE;8:100;1:30000",
    "perk_hash": "1f49997bcd1d1ad4540e50056999527c",
    "perk_text_normalized": "1:65536;6:262144;7:100;51:1;GREASE|m,a,s,p|1:30000;3:1472;4:15728640;5:6291456;6:6291456;7:6291456;8:100;9:103;15:;17:1@1,GREASE;32:65536;12583:AUTO;12584:4f524947;GREASE",
    "perk_hash_normalized": "94776d419fc3a7164f0ca93712bb9bd5",
    "settings": [
      {
        "id": 1,
        "name": "SETTINGS_QPACK_MAX_TABLE_CAPACITY",
        "value": 65536
      },
      {
        "id": 6,
        "name": "SETTINGS_MAX_FIELD_SECTION_SIZE",
        "value": 262144
      },
      {
        "id": 7,
        "name": "SETTINGS_QPACK_BLOCKED_STREAMS",
        "value": 100
      },
      {
        "id": 51,
        "name": "SETTINGS_H3_DATAGRAM",
        "value": 1
      },
      {
        "id": 1064713998990579600,
        "name": "GREASE",
        "value": 4112814399667889602
      }
    ],
    "headers": {
      ":method": "GET",
      ":authority": "fp.impersonate.pro",
      ":scheme": "https",
      ":path": "/api/http3",
      "sec-ch-ua": "\"Chromium\";v=\"146\", \"Not-A.Brand\";v=\"24\", \"Google Chrome\";v=\"146\"",
      "sec-ch-ua-mobile": "?0",
      "sec-ch-ua-platform": "\"macOS\"",
      "upgrade-insecure-requests": "1",
      "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
      "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
      "sec-fetch-site": "none",
      "sec-fetch-mode": "navigate",
      "sec-fetch-user": "?1",
      "sec-fetch-dest": "document",
      "accept-encoding": "gzip, deflate, br, zstd",
      "accept-language": "en-US,en;q=0.9",
      "priority": "u=0, i"
    }
  },
  "tls": {
    "ja3": {
      "text": "771,4865-4866-4867,0-10-13-16-27-43-45-51-57-17613-65037,4588-29-23-24,",
      "hash": "36b3da67265214a919829c5e959f7425"
    },
    "ja3n": {
      "text": "771,4865-4866-4867,0-10-13-16-27-43-45-51-57-17613-65037,4588-29-23-24,",
      "hash": "36b3da67265214a919829c5e959f7425"
    },
    "cipher_suites": [
      {
        "name": "TLS_AES_128_GCM_SHA256",
        "value": 4865
      },
      {
        "name": "TLS_AES_256_GCM_SHA384",
        "value": 4866
      },
      {
        "name": "TLS_CHACHA20_POLY1305_SHA256",
        "value": 4867
      }
    ],
    "extensions": [
      {
        "id": 0,
        "name": "server_name",
        "data": "fp.impersonate.pro"
      },
      {
        "id": 10,
        "name": "supported_groups",
        "data": {
          "groups": [
            4588,
            29,
            23,
            24
          ]
        }
      },
      {
        "id": 13,
        "name": "signature_algorithms",
        "data": {
          "algorithms": [
            1027,
            2052,
            1025,
            1283,
            2053,
            1281,
            2054,
            1537,
            513
          ]
        }
      },
      {
        "id": 16,
        "name": "alpn",
        "data": [
          "h3"
        ]
      },
      {
        "id": 27,
        "name": "compress_certificate",
        "data": {
          "length": 3,
          "raw": "020002",
          "algorithms": [
            2
          ]
        }
      },
      {
        "id": 43,
        "name": "supported_versions",
        "data": [
          772
        ]
      },
      {
        "id": 45,
        "name": "psk_key_exchange_modes",
        "data": [
          1
        ]
      },
      {
        "id": 51,
        "name": "key_share",
        "data": {
          "shares": [
            {
              "group": 4588,
              "key_length": 1216
            },
            {
              "group": 29,
              "key_length": 32
            }
          ]
        }
      },
      {
        "id": 57,
        "name": "quic_transport_parameters",
        "data": [
          {
            "id": 12584,
            "name": "google_connection_options",
            "value": "4f524947"
          },
          {
            "id": 3,
            "name": "max_udp_payload_size",
            "value": 1472
          },
          {
            "id": 6,
            "name": "initial_max_stream_data_bidi_remote",
            "value": 6291456
          },
          {
            "id": 12583,
            "name": "initial_rtt",
            "value": 310080
          },
          {
            "id": 32,
            "name": "max_datagram_frame_size",
            "value": 65536
          },
          {
            "id": 15,
            "name": "initial_source_connection_id",
            "value": ""
          },
          {
            "id": 4,
            "name": "initial_max_data",
            "value": 15728640
          },
          {
            "id": 9,
            "name": "initial_max_streams_uni",
            "value": 103
          },
          {
            "id": 5,
            "name": "initial_max_stream_data_bidi_local",
            "value": 6291456
          },
          {
            "id": 2171253095237476187,
            "name": "GREASE",
            "value": "e549"
          },
          {
            "id": 7,
            "name": "initial_max_stream_data_uni",
            "value": 6291456
          },
          {
            "id": 17,
            "name": "version_information",
            "value": {
              "chosen_version": 1,
              "available_versions": [
                1,
                "GREASE"
              ]
            }
          },
          {
            "id": 8,
            "name": "initial_max_streams_bidi",
            "value": 100
          },
          {
            "id": 1,
            "name": "max_idle_timeout",
            "value": 30000
          }
        ]
      },
      {
        "id": 17613,
        "name": "alps_new",
        "data": {
          "length": 5,
          "raw": "0003026833"
        }
      },
      {
        "id": 65037,
        "name": "encrypted_client_hello",
        "data": {
          "length": 218,
          "raw": "0000010001a4002049154855270ed28d9e79d6982c2721d4ae7bc1745b40e65fde9d042b89f8f25400b0b9aaa2ccf9d7854cf439a4c399fa28a9432777800a04709c90427b7ec47cfa771da80850e79f9faee61455f1d654815e568025f97bbd1bcb648df285216fd52ac1f2dba9da3dc60d61e8251bf11d058bcc0f86cdcebc202e27bfc7be6dee64619f10e4e3537d96bd1e57c11bd95458292c7b00b3f54e14a0cb5f3ecd937eb94aa932cdba5624692a95c2d3df640c57de7e4ccdd70e62af962bf9d93e8ae4a69fc8e2131a9b1e7313c24d6b3aaace8a67"
        }
      }
    ]
  }
}