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:
Perk Hash & JA3HTTP/3 SettingsRequest HeadersTLS 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_normalizedperk_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:pathsec-ch-uauser-agentacceptaccept-encodingaccept-languagepriority
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_namesupported_groupssignature_algorithmsalpncompress_certificatesupported_versionspsk_key_exchange_modeskey_sharequic_transport_parametersalps_newencrypted_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_timeoutmax_udp_payload_sizeinitial_max_datainitial_max_stream_data_bidi_localinitial_max_stream_data_bidi_remoteinitial_max_stream_data_uniinitial_max_streams_bidiinitial_max_streams_unimax_datagram_frame_sizeinitial_rttgoogle_connection_optionsversion_informationGREASE
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"
}
}
]
}
}