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

# FAQ

> Frequently asked questions from the Hyperbeam community

## API

<AccordionGroup>
  <Accordion title="How do I make the browser behave as a mobile browser?">
    When creating the browser, set the `user_agent` field to a mobile preset,
    such as `{"user_agent": "chrome_android"}`.
  </Accordion>
</AccordionGroup>

## Streaming

<AccordionGroup>
  <Accordion title="Bandwidth requirements">
    To ensure optimal performance of Hyperbeam virtual computers, it is
    recommended that your users meet the following bandwidth requirements. Even
    though users who have less bandwidth available can still stream virtual
    computers, the image quality or framerate may be suboptimal.

    ```html theme={null}
    | Resolution | Framerate | Bandwidth Required |
    | ---------- | --------- | ------------------ |
    | 720p       | 24fps     | 5mbps              |
    | 720p       | 30fps     | 6.3mbps            |
    | 900p       | 24fps     | 7.8mbps            |
    | 900p       | 30fps     | 9.8mbps            |
    | 1080p      | 24fps     | 11.3mbps           |
    | 1080p      | 30fps     | 14.1mbps           |
    ```

    <Warning>
      Enabling **sharp mode** triples these bandwidth requirements.
    </Warning>
  </Accordion>

  <Accordion title="Why do I need to click a 'play' button to start the stream?">
    When playing back audio on the web, the user must interact with the website
    (e.g., by clicking, pressing keys, etc.) before playing audio content.
    Otherwise, the content will be blocked.

    For more information, see the
    [Autoplay Guide for media and Web Audio APIs](https://developer.mozilla.org/en-US/docs/Web/Media/Autoplay_guide).
    If there has been no page interaction before the `Hyperbeam` function has been called,
    a play button will be displayed on the Hyperbeam browser.
  </Accordion>
</AccordionGroup>

## Monitoring

<AccordionGroup>
  <Accordion title="Can I detect when a user changes the URL in the virtual browser?">
    Yes, you can detect when a user changes the virtual browser URL by using
    [Hyperbeam’s tab event listener
    API](/client-sdk/javascript/examples#listen-to-tab-events) available in our
    Web SDK. We do not currently provide a way to directly detect this action
    server-side.
  </Accordion>
</AccordionGroup>

## Proxies

<AccordionGroup>
  <Accordion title="Is there an IP range I can use to whitelist Hyperbeam servers?">
    Not at the moment. Hyperbeam uses a variety of server providers which makes it difficult to whitelist Hyperbeam servers based on IP. You can use username/password authentication to ensure traffic originates from Hyperbeam.
  </Accordion>

  <Accordion title="Where do I put the credentials in FindProxyForURL?">
    ```json theme={null}
    {
      "http_proxy": {
        "pac": "function FindProxyForURL(url, host) {return 'PROXY <pac_ip>'}",
        "username": "<username>",
        "password": "<password>"
      }
    }
    ```

    Relevant MDN docs: [Proxy Auto-Configuration (PAC) file](https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file)

    <Warning>
      Caveats:

      * Only HTTP traffic is sent through the proxy server. WebRTC traffic is excluded. Hence, there is no functional difference between the use of SOCKS, HTTP or HTTPS protocol on the proxy server.
      * Authentication is not supported for SOCKS protocol. This is due to it not being implemented by Chrome.
      * Due to these reasons, we recommend the usage of HTTPS to authenticate and secure communication between Hyperbeam and the proxy server: [HTTPS Proxy Scheme.](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md#HTTPS-proxy-scheme)
    </Warning>
  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="My API request fails due to CORS">
    Requests to the Hyperbeam API should not be made from the client as doing so
    exposes your API key to users which can easily be abused. Instead, API
    requests should only be made from a backend such as Vercel, Netlify or
    Cloudflare.
  </Accordion>
</AccordionGroup>
