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

# Supported browsers

> Which User-Agents Roolink can build a payload for, and how to keep your client describing the same browser everywhere.

Roolink does not invent a browser. Every Akamai Web payload is built from a real device profile collected from a real browser on real hardware, chosen to match the User-Agent you send. That is what makes the payload consistent with the rest of your request. It also means the User-Agent has to be one Roolink has a profile for, and that the rest of your request has to describe the same browser.

## What Roolink accepts

|          | Supported                                                                                                                                                                                   |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Browser  | Any desktop browser a real user runs: Google Chrome, Microsoft Edge and other Chromium browsers, Firefox, and Safari on macOS. Brave is the exception; its profiles are rejected.           |
| Platform | Desktop only: Windows, macOS and Linux. No phones or tablets.                                                                                                                               |
| Version  | Current and recent stable releases; for Chrome, major 140 and newer. Profiles are collected continuously, so the newest release is available shortly after it ships and older ones age out. |
| Hardware | Real machines. Profiles from virtual machines, headless or automated browsers are rejected at collection, so a User-Agent that only such setups produce has no profile.                     |

Akamai BMP is different: it emulates an app on a device Roolink controls, and you do not send a browser User-Agent at all.

## What to send

For the best odds, use the User-Agent that current stable **Google Chrome on Windows or macOS** reports. That is what Roolink tests against and what the largest share of profiles come from. Firefox, Safari and Edge User-Agents work the same way when a profile exists; send the exact string the browser reports. Chrome has reported a reduced User-Agent since version 101, so the string is the same for everyone on a platform and changes only with the major version:

```text Windows theme={null}
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36
```

```text macOS theme={null}
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36
```

Replace `152` with the current stable major. Chrome's own [release schedule](https://chromiumdash.appspot.com/schedule) shows it. If Roolink answers `422` for the newest release in the first days after it ships, use the previous major until the pool catches up.

## Keep everything describing the same browser

The User-Agent is one of several places your request describes the browser. Bot protection compares them, and a payload built for one browser sent by a client describing another is a clear signal.

| Where                                                 | What must agree                                                                                                                                                                                                                                                                                 |
| ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `User-Agent` header to the site                       | Identical to the `userAgent` you send Roolink.                                                                                                                                                                                                                                                  |
| `sec-ch-ua`, `sec-ch-ua-platform`, `sec-ch-ua-mobile` | Chromium browsers only. Same major version and platform as the User-Agent; `?0` for mobile. Copy them from your [powhttp recording](/capture-requests) of the same browser. Firefox and Safari send no client hints, so send none.                                                              |
| TLS client profile                                    | A profile for the same browser family as the User-Agent: the newest Chrome profile for a Chrome or Edge User-Agent, a Firefox profile for Firefox, a Safari profile for Safari. Handshakes change little between recent majors, so a small version gap is tolerated; a different family is not. |
| `Accept-Language` and `language` to Roolink           | The same language. Roolink accepts it as a tag or as a full `Accept-Language` value. Keep it consistent with your proxy's region.                                                                                                                                                               |
| Cookies                                               | One jar per session, sending back every cookie the site set. A browser never forgets a cookie mid-session.                                                                                                                                                                                      |

A quick habit that catches most mismatches: print the User-Agent, the client hint headers and the TLS profile name at startup and read them together. They should describe one browser.

## The error you get otherwise

Akamai Web answers `422` with `no device profile for user agent`. It means the string you sent is not one Roolink has a profile for. Check for a typo first, then check the major version, then try the other desktop platform.
