Skip to main content
Akamai inspects your TLS handshake (the ClientHello) before it ever reads the request body. A default HTTP client — Python requests, Node fetch/axios, Go net/http — has a fingerprint (JA3/JA4) that no real browser or app produces, so the request is flagged even with a valid sensor. The sensor and the TLS fingerprint have to tell the same story.

Match the fingerprint to the product

Akamai Web

Impersonate a recent Chrome desktop. The web sensor models a browser, so your TLS and headers must look like that browser.

Akamai BMP (mobile)

Impersonate the Android OkHttp client. The mobile sensor models the SDK, so a Chrome fingerprint here is a mismatch.

Libraries

Use an HTTP client that lets you set the TLS fingerprint: Use the newest Chrome profile your library ships for Web, and an OkHttp Android profile for BMP.

Akamai Web — Chrome

Generate the sensor, then send your own request with a Chrome fingerprint, through your proxy:

Akamai BMP — OkHttp

The target here is a mobile API, so impersonate the app’s OkHttp client:
Python (tls-client)
The BMP sensor is not tied to an IP, so you can send it from any proxy. What has to match is the OkHttp/Android fingerprint plus the app’s own headers and User-Agent.

Pin the header order

Akamai reads the order of your headers, not just their values. Send them in the exact order the real browser (Web) or app (BMP) uses. tls-client exposes header_order; curl_cffi keeps the order of the dict you pass. Base the order on a real capture of Chrome or the app.

Proxy

  • Web: generate the sensor and send the request from the same clean session and IP. Use a sticky residential proxy and keep the region and Accept-Language consistent with that IP.
  • BMP: any proxy works (IP-independent), but a residential IP in the app’s expected region is still the safest choice.

One client per identity

Keep one cookie jar, User-Agent and proxy per logical session. Don’t share a cookie jar across IPs, and tear sessions down cleanly at shutdown.

Verify your fingerprint

Point your client at a JA3/JA4 echo service — for example https://tls.peet.ws/api/all — and confirm the fingerprint matches the Chrome or OkHttp profile you intended, before you spend time debugging anything on the target side.