Skip to main content

Browsers & Devices

Discover which browsers, operating systems and real devices you can run on, and look up the IP ranges to allowlist.

Endpoint
api.testingbot.com
Version
v1
Format
JSON
Auth
HTTP Basic
GET /v1/browsers

List supported browsers

Returns every browser environment available on the TestingBot grid: name, version, platform, and the browser_id used when attaching browsers to Codeless tests. Mobile simulators, emulators and Apple TV also carry deviceName, platformName and device_type. Every filter is optional and they combine with AND; with none, the full catalog is returned. An invalid filter value is a 400 rather than an unfiltered list. No authentication required.

Arguments

type string
Filter by automation protocol: "webdriver" (default) or "rc" (legacy Selenium RC).
platformName string
Only devices of this OS family: "iOS", "Android" or "tvOS". Case-insensitive.
platform string
Only environments on this platform, as returned in platform (e.g. "WIN11", "SEQUOIA", "ANDROID"). Case-insensitive.
name string
Only this browser, as returned in name (e.g. "firefox", "safari"). "chrome" matches both desktop ("googlechrome") and Android ("chrome") rows. Case-insensitive.
device_type string
Only devices of this form factor: "phone", "tablet", "desktop" (ChromeOS) or "tv" (tvOS).
min_version string
Only versions at or above this one, compared numerically (e.g. "18.0" or "18"). Environments with a non-numeric version ("beta", "dev") are excluded.
max_version string
Only versions at or below this one, compared numerically. Environments with a non-numeric version are excluded.

Response fields

selenium_name string
Capability value to send as browserName in WebDriver.
name string
Human-readable browser identifier (e.g. "firefox", "iexplore").
version string
Version as a string, not a number: it may carry minor/patch components (e.g. "11.4"). For mobile environments this is the OS version. Only present when the environment has a version set.
long_version string
Full version string (e.g. "121.0.6167.184"), or null when unknown. Only present alongside version.
platform string
Operating system (e.g. "WIN11", "SEQUOIA", "LINUX", "ANDROID").
browser_id integer
Unique TestingBot browser ID used to attach browsers to Codeless tests.
deviceName string
Device name to send as deviceName (e.g. "iPhone 16", "Pixel 9", "Apple TV 4K"). Only present on mobile and tvOS environments.
platformName string
OS family to send as platformName: "iOS", "Android" or "tvOS". Only present on mobile and tvOS environments.
device_type string
Form factor: "phone", "tablet", "desktop" (ChromeOS) or "tv" (tvOS). Only present on mobile and tvOS environments with a device name.
GET /v1/browsers
Request
# Everything
curl "https://api.testingbot.com/v1/browsers"

# iOS tablet simulators, iOS 18 and up
curl "https://api.testingbot.com/v1/browsers?platformName=iOS&device_type=tablet&min_version=18"
var client = new TestingBotClient(key, secret);
var browsers = await client.Browsers.ListAsync();
require 'testingbot'
api = TestingBot::Api.new(key, secret)
api.get_browsers
import testingbotclient
tb = testingbotclient.TestingBotClient(key, secret)
tb.information.get_browsers()
$api = new TestingBot\TestingBotAPI($key, $secret);
$api->getBrowsers();
TestingbotREST restApi = new TestingbotREST(key, secret);
ArrayList<TestingbotBrowser> browsers = restApi.getBrowsers();
const TestingBot = require('testingbot-api');

const api = new TestingBot({
  api_key: "your-tb-key",
  api_secret: "your-tb-secret"
});

const browsers = await api.getBrowsers();
Response
[
  {"selenium_name": "IE8", "name": "iexplore", "version": "8", "platform": "WINDOWS", "browser_id": 1, "long_version": "8"},
  {"selenium_name": "FF7", "name": "firefox", "version": "7", "platform": "WINDOWS", "browser_id": 22, "long_version": "7"},
  {"selenium_name": "safari", "name": "safari", "version": "18.6", "platform": "SEQUOIA", "browser_id": 7712, "long_version": null, "deviceName": "iPad Air 11-inch (M3)", "platformName": "iOS", "device_type": "tablet"}
]
GET /v1/browsers/{framework}

List browsers and devices supported by a test framework

The subset of GET /v1/browsers that a framework can run on: desktop browsers and versions for Playwright, Puppeteer and Cypress, and the devices for Appium (iOS, Android, tvOS), Maestro, Espresso and XCUITest. selenium is the whole catalog. Accepts the same filters as GET /v1/browsers, and returns the same fields. For the full list of physical devices with live availability, see GET /v1/devices. No authentication required.

Arguments

framework string required
Test framework: selenium, appium, maestro, espresso, xcuitest, playwright, puppeteer, cypress. Case-insensitive.
platformName string
Only devices of this OS family: "iOS", "Android" or "tvOS". Case-insensitive.
platform string
Only environments on this platform, as returned in platform (e.g. "WIN11", "SEQUOIA", "ANDROID"). Case-insensitive.
name string
Only this browser, as returned in name (e.g. "firefox", "safari"). "chrome" matches both desktop ("googlechrome") and Android ("chrome") rows. Case-insensitive.
device_type string
Only devices of this form factor: "phone", "tablet", "desktop" (ChromeOS) or "tv" (tvOS).
min_version string
Only versions at or above this one, compared numerically (e.g. "18.0" or "18"). Environments with a non-numeric version ("beta", "dev") are excluded.
max_version string
Only versions at or below this one, compared numerically. Environments with a non-numeric version are excluded.

Response fields

selenium_name string
Capability value to send as browserName in WebDriver.
name string
Human-readable browser identifier (e.g. "firefox", "iexplore").
version string
Version as a string, not a number: it may carry minor/patch components (e.g. "11.4"). For mobile environments this is the OS version. Only present when the environment has a version set.
long_version string
Full version string (e.g. "121.0.6167.184"), or null when unknown. Only present alongside version.
platform string
Operating system (e.g. "WIN11", "SEQUOIA", "LINUX", "ANDROID").
browser_id integer
Unique TestingBot browser ID used to attach browsers to Codeless tests.
deviceName string
Device name to send as deviceName (e.g. "iPhone 16", "Pixel 9", "Apple TV 4K"). Only present on mobile and tvOS environments.
platformName string
OS family to send as platformName: "iOS", "Android" or "tvOS". Only present on mobile and tvOS environments.
device_type string
Form factor: "phone", "tablet", "desktop" (ChromeOS) or "tv" (tvOS). Only present on mobile and tvOS environments with a device name.

Per framework

  • Selenium docs
    Lists
    Every desktop browser and device on the grid: the same rows as GET /v1/browsers.
  • Appium docs
    Devices
    iOS, Android, and tvOS (Apple TV)
    Rows
    Per device and browser, for mobile web testing.
  • Maestro docs
    Devices
    iOS and Android
    Rows
    One per device: a native-app run picks a device, not a browser.
  • Espresso docs
    Devices
    Android
    Rows
    One per device: a native-app run picks a device, not a browser.
  • XCUITest docs
    Devices
    iOS, real devices only (no simulators)
    Rows
    One per device: a native-app run picks a device, not a browser.
  • Playwright docs
    Browsers
    Chrome 72+, Edge 80+, Firefox 110+, Safari (WebKit)
    Platforms
    WIN10, WIN11, CATALINA, BIGSUR, VENTURA, SONOMA, SEQUOIA, TAHOE, LINUX
    Mobile
    Chrome on Android emulators and real devices
  • Puppeteer docs
    Browsers
    Chrome 72+, Edge 80+, Firefox 110+
    Platforms
    WIN10, WIN11, BIGSUR, MONTEREY, VENTURA, SONOMA, SEQUOIA, TAHOE
  • Cypress docs
    Browsers
    Chrome 70+, Firefox 70+, Edge 80+ (WIN10 only)
    Platforms
    WIN10, WIN11, MONTEREY, VENTURA, SEQUOIA, TAHOE
GET /v1/browsers/{framework}
Request
curl "https://api.testingbot.com/v1/browsers/selenium"
Response 5,178 rows today · sample
[
  {
    "selenium_name": "chrome150",
    "name": "googlechrome",
    "platform": "WIN11",
    "browser_id": 32208,
    "version": "156",
    "long_version": null
  },
  {
    "selenium_name": "safari",
    "name": "safari",
    "platform": "VENTURA",
    "browser_id": 5438,
    "version": "27.2",
    "long_version": null,
    "deviceName": "iPhone 15",
    "platformName": "iOS",
    "device_type": "phone"
  }
]
GET /v1/devices

List physical mobile devices

Returns every real Android and iOS device in the TestingBot grid, with an available flag indicating whether it can be acquired right now. Filter by platform for a single OS family.

Arguments

platform string
Filter to a single mobile OS family. Case-insensitive.
web boolean
Internal flag used by the dashboard — returns extra UI-only fields.

Response fields

id integer
Unique numeric device ID.
name string
Marketing name (e.g. "iPhone 15 Pro").
model_number string
Manufacturer model number (e.g. "SM-G991B").
platform_name string
Mobile OS family (e.g. "iOS", "Android").
version string
OS version (e.g. "17.4", "14").
resolution string
Display resolution as <width>x<height> (e.g. "1170x2532").
width integer
Display width in pixels, parsed from resolution.
height integer
Display height in pixels, parsed from resolution.
cpu string
CPU architecture.
available boolean
Whether the device is free for this account to acquire right now.
multiple_browsers array of object
Selectable browsers on this device. Only present on devices that offer more than one.
GET /v1/devices
Request
$ curl -u key:secret "https://api.testingbot.com/v1/devices"
var client = new TestingBotClient(key, secret);
var devices = await client.Devices.ListAsync();
require 'testingbot'
api = TestingBot::Api.new(key, secret)
api.get_devices
import testingbotclient
tb = testingbotclient.TestingBotClient(key, secret)
tb.information.get_devices()
$api = new TestingBot\TestingBotAPI($key, $secret);
$api->getDevices();
TestingbotREST restApi = new TestingbotREST(key, secret);
List<TestingbotDevice> devices = restApi.getDevices(0, 100);
const TestingBot = require('testingbot-api');

const api = new TestingBot({
  api_key: "your-tb-key",
  api_secret: "your-tb-secret"
});

const devices = await api.getDevices();
Response
[
  {
    "id": 1,
    "available": true,
    "name": "Galaxy S8",
    "model_number": "SM-G950U1",
    "platform_name": "Android",
    "version": "9.0",
    "resolution": "1080x2220",
    "multiple_browsers": [
      { "id": 1727, "name": "chrome",   "version": "103" },
      { "id": 2133, "name": "firefox",  "version": "98.2" },
      { "id": 2953, "name": "samsung",  "version": "13.2.1.70" },
      { "id": 2954, "name": "opera",    "version": "67.1" }
    ]
  },
  {
    "id": 5,
    "available": false,
    "name": "iPhone XR",
    "platform_name": "iOS",
    "version": "16.3",
    "resolution": "828x1792"
  }
]
GET /v1/devices/available

List currently available devices

Subset of /v1/devices filtered to devices the authenticated account can acquire right now (not in use by another customer, not under maintenance).

Response fields

id integer
Unique numeric device ID.
name string
Marketing name (e.g. "iPhone 15 Pro").
model_number string
Manufacturer model number (e.g. "SM-G991B").
platform_name string
Mobile OS family (e.g. "iOS", "Android").
version string
OS version (e.g. "17.4", "14").
resolution string
Display resolution as <width>x<height> (e.g. "1170x2532").
width integer
Display width in pixels, parsed from resolution.
height integer
Display height in pixels, parsed from resolution.
cpu string
CPU architecture.
available boolean
Whether the device is free for this account to acquire right now.
multiple_browsers array of object
Selectable browsers on this device. Only present on devices that offer more than one.
GET /v1/devices/available
Request
$ curl -u key:secret "https://api.testingbot.com/v1/devices/available"
var client = new TestingBotClient(key, secret);
var devices = await client.Devices.ListAvailableAsync();
require 'testingbot'
api = TestingBot::Api.new(key, secret)
api.get_available_devices
import testingbotclient
tb = testingbotclient.TestingBotClient(key, secret)
tb.information.get_available_devices()
$api = new TestingBot\TestingBotAPI($key, $secret);
$api->getAvailableDevices();
TestingbotREST restApi = new TestingbotREST(key, secret);
List<TestingbotDevice> devices = restApi.getAvailableDevices();
const TestingBot = require('testingbot-api');

const api = new TestingBot({
  api_key: "your-tb-key",
  api_secret: "your-tb-secret"
});

const devices = await api.getAvailableDevices();
Response
[
  {
    "id": 1,
    "available": true,
    "name": "Galaxy S8",
    "platform_name": "Android",
    "version": "9.0",
    "resolution": "1080x2220"
  }
]
GET /v1/devices/:id

Get a specific device

Returns the spec and current availability for a single device by numeric ID.

Arguments

id integer required
Numeric device ID.

Response fields

id integer
Unique numeric device ID.
name string
Marketing name (e.g. "iPhone 15 Pro").
model_number string
Manufacturer model number (e.g. "SM-G991B").
platform_name string
Mobile OS family (e.g. "iOS", "Android").
version string
OS version (e.g. "17.4", "14").
resolution string
Display resolution as <width>x<height> (e.g. "1170x2532").
width integer
Display width in pixels, parsed from resolution.
height integer
Display height in pixels, parsed from resolution.
cpu string
CPU architecture.
available boolean
Whether the device is free for this account to acquire right now.
multiple_browsers array of object
Selectable browsers on this device. Only present on devices that offer more than one.
GET /v1/devices/:id
Request
$ curl "https://api.testingbot.com/v1/devices/:id" \
-u key:secret
var client = new TestingBotClient(key, secret);
var device = await client.Devices.GetAsync(deviceId);
require 'testingbot'
api = TestingBot::Api.new(key, secret)
api.get_device(device_id)
import testingbotclient
tb = testingbotclient.TestingBotClient(key, secret)
tb.information.get_device(device_id)
$api = new TestingBot\TestingBotAPI($key, $secret);
$api->getDevice($deviceId);
TestingbotREST restApi = new TestingbotREST(key, secret);
TestingbotDevice device = restApi.getDevice(deviceId);
const TestingBot = require('testingbot-api');

const api = new TestingBot({
  api_key: "your-tb-key",
  api_secret: "your-tb-secret"
});

const device = await api.getDevice(deviceId);
Response
{
  "id": 12,
  "available": true,
  "name": "Galaxy S20",
  "platform_name": "Android",
  "version": "10.0",
  "resolution": "1440x3200",
  "multiple_browsers": [
    { "id": 2598, "name": "chrome",  "version": "101" },
    { "id": 2919, "name": "firefox", "version": "98.2" },
    { "id": 2957, "name": "samsung", "version": "13.2.1.70" }
  ]
}
GET /v1/configuration/ip-ranges

TestingBot IP ranges for firewall whitelisting

Returns the up-to-date list of public IPv4 addresses used by TestingBot test machines. Allow these in your firewall when running tests against staging or production behind corporate VPN/network rules. The response is a flat JSON array of IPv4 strings (no CIDR ranges, no metadata) — re-fetch periodically since the pool changes as we scale capacity. Unauthenticated; no key/secret required.
GET /v1/configuration/ip-ranges
Request
$ curl "https://api.testingbot.com/v1/configuration/ip-ranges"
var client = new TestingBotClient(key, secret);
var ranges = await client.Configuration.GetIpRangesAsync();
require 'testingbot'
api = TestingBot::Api.new(key, secret)
api.get_ip_ranges
import testingbotclient
tb = testingbotclient.TestingBotClient(key, secret)
tb.configuration.get_ip_ranges()
$client = new TestingBot\Client($key, $secret);
$ranges = $client->configuration()->ipRanges(); // no authentication required
TestingbotREST restApi = new TestingbotREST(key, secret);
JsonElement ipRanges = restApi.getIpRanges();
const TestingBot = require('testingbot-api');

const api = new TestingBot({
  api_key: "your-tb-key",
  api_secret: "your-tb-secret"
});

const ipRanges = await api.getIpRanges();
Response
[
  "109.68.162.161",
  "109.68.162.165",
  "78.20.187.211",
  "162.55.135.22",
  "95.217.83.184",
  "95.216.39.110",
  "95.216.229.109",
  "142.132.137.7",
  "195.201.167.43",
  "162.55.24.100",
  "185.223.133.13"
]
Was this page helpful?
Last updated