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 thebrowser_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
-
typestring - Filter by automation protocol: "webdriver" (default) or "rc" (legacy Selenium RC).
-
platformNamestring - Only devices of this OS family: "iOS", "Android" or "tvOS". Case-insensitive.
-
platformstring -
Only environments on this platform, as returned in
platform(e.g. "WIN11", "SEQUOIA", "ANDROID"). Case-insensitive. -
namestring -
Only this browser, as returned in
name(e.g. "firefox", "safari"). "chrome" matches both desktop ("googlechrome") and Android ("chrome") rows. Case-insensitive. -
device_typestring - Only devices of this form factor: "phone", "tablet", "desktop" (ChromeOS) or "tv" (tvOS).
-
min_versionstring - 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_versionstring - Only versions at or below this one, compared numerically. Environments with a non-numeric version are excluded.
Response fields
-
selenium_namestring -
Capability value to send as
browserNamein WebDriver. -
namestring - Human-readable browser identifier (e.g. "firefox", "iexplore").
-
versionstring - 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_versionstring -
Full version string (e.g. "121.0.6167.184"), or null when unknown. Only present alongside
version. -
platformstring - Operating system (e.g. "WIN11", "SEQUOIA", "LINUX", "ANDROID").
-
browser_idinteger - Unique TestingBot browser ID used to attach browsers to Codeless tests.
-
deviceNamestring -
Device name to send as
deviceName(e.g. "iPhone 16", "Pixel 9", "Apple TV 4K"). Only present on mobile and tvOS environments. -
platformNamestring -
OS family to send as
platformName: "iOS", "Android" or "tvOS". Only present on mobile and tvOS environments. -
device_typestring - Form factor: "phone", "tablet", "desktop" (ChromeOS) or "tv" (tvOS). Only present on mobile and tvOS environments with a device name.
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
-
frameworkstring required - Test framework: selenium, appium, maestro, espresso, xcuitest, playwright, puppeteer, cypress. Case-insensitive.
-
platformNamestring - Only devices of this OS family: "iOS", "Android" or "tvOS". Case-insensitive.
-
platformstring -
Only environments on this platform, as returned in
platform(e.g. "WIN11", "SEQUOIA", "ANDROID"). Case-insensitive. -
namestring -
Only this browser, as returned in
name(e.g. "firefox", "safari"). "chrome" matches both desktop ("googlechrome") and Android ("chrome") rows. Case-insensitive. -
device_typestring - Only devices of this form factor: "phone", "tablet", "desktop" (ChromeOS) or "tv" (tvOS).
-
min_versionstring - 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_versionstring - Only versions at or below this one, compared numerically. Environments with a non-numeric version are excluded.
Response fields
-
selenium_namestring -
Capability value to send as
browserNamein WebDriver. -
namestring - Human-readable browser identifier (e.g. "firefox", "iexplore").
-
versionstring - 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_versionstring -
Full version string (e.g. "121.0.6167.184"), or null when unknown. Only present alongside
version. -
platformstring - Operating system (e.g. "WIN11", "SEQUOIA", "LINUX", "ANDROID").
-
browser_idinteger - Unique TestingBot browser ID used to attach browsers to Codeless tests.
-
deviceNamestring -
Device name to send as
deviceName(e.g. "iPhone 16", "Pixel 9", "Apple TV 4K"). Only present on mobile and tvOS environments. -
platformNamestring -
OS family to send as
platformName: "iOS", "Android" or "tvOS". Only present on mobile and tvOS environments. -
device_typestring - 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
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"
}
]
Request
curl "https://api.testingbot.com/v1/browsers/appium"
Response
255 rows today · sample
[
{
"selenium_name": "safari",
"name": "safari",
"platform": "VENTURA",
"browser_id": 5438,
"version": "27.2",
"long_version": null,
"deviceName": "iPhone 15",
"platformName": "iOS",
"device_type": "phone"
},
{
"selenium_name": "chrome",
"name": "chrome",
"platform": "ANDROID",
"browser_id": 32169,
"version": "17.0",
"long_version": null,
"deviceName": "Pixel 10 16KB",
"platformName": "Android",
"device_type": "phone"
},
{
"selenium_name": "tvos",
"name": "tvos",
"platform": "TVOS",
"browser_id": 6655,
"version": "17.4",
"long_version": null,
"deviceName": "Apple TV 4K",
"platformName": "tvOS",
"device_type": "tv"
}
]
Request
curl "https://api.testingbot.com/v1/browsers/maestro"
Response
245 rows today · sample
[
{
"selenium_name": "safari",
"name": "safari",
"platform": "VENTURA",
"browser_id": 5438,
"version": "27.2",
"long_version": null,
"deviceName": "iPhone 15",
"platformName": "iOS",
"device_type": "phone"
},
{
"selenium_name": "chrome",
"name": "chrome",
"platform": "ANDROID",
"browser_id": 32169,
"version": "17.0",
"long_version": null,
"deviceName": "Pixel 10 16KB",
"platformName": "Android",
"device_type": "phone"
},
{
"selenium_name": "safari",
"name": "safari",
"platform": "GOLDENGATE",
"browser_id": 31607,
"version": "27.0",
"long_version": null,
"deviceName": "iPad Pro 13-inch (M5)",
"platformName": "iOS",
"device_type": "tablet"
}
]
Request
curl "https://api.testingbot.com/v1/browsers/espresso"
Response
56 rows today · sample
[
{
"selenium_name": "chrome",
"name": "chrome",
"platform": "ANDROID",
"browser_id": 32169,
"version": "17.0",
"long_version": null,
"deviceName": "Pixel 10 16KB",
"platformName": "Android",
"device_type": "phone"
},
{
"selenium_name": "chrome",
"name": "chrome",
"platform": "ANDROID",
"browser_id": 32175,
"version": "17.0",
"long_version": null,
"deviceName": "Pixel Tablet 16KB",
"platformName": "Android",
"device_type": "tablet"
}
]
Request
curl "https://api.testingbot.com/v1/browsers/xcuitest"
Response
27 rows today · sample
[
{
"selenium_name": "safari",
"name": "safari",
"platform": "VENTURA",
"browser_id": 5438,
"version": "27.2",
"long_version": null,
"deviceName": "iPhone 15",
"platformName": "iOS",
"device_type": "phone"
},
{
"selenium_name": "safari",
"name": "safari",
"platform": "TAHOE",
"browser_id": 9301,
"version": "26.6",
"long_version": null,
"deviceName": "iPad (9th generation)",
"platformName": "iOS",
"device_type": "tablet"
}
]
Request
curl "https://api.testingbot.com/v1/browsers/playwright"
Response
1,829 rows today · sample
[
{
"selenium_name": "chrome150",
"name": "googlechrome",
"platform": "WIN11",
"browser_id": 32208,
"version": "156",
"long_version": null
},
{
"selenium_name": "microsoftedge150",
"name": "microsoftedge",
"platform": "WIN11",
"browser_id": 32232,
"version": "156",
"long_version": null
},
{
"selenium_name": "ff152",
"name": "firefox",
"platform": "WIN11",
"browser_id": 32265,
"version": "158",
"long_version": null
},
{
"selenium_name": "Safari26",
"name": "safari",
"platform": "TAHOE",
"browser_id": 7613,
"version": "26",
"long_version": null
},
{
"selenium_name": "chrome",
"name": "chrome",
"platform": "ANDROID",
"browser_id": 32175,
"version": "17.0",
"long_version": null,
"deviceName": "Pixel Tablet 16KB",
"platformName": "Android",
"device_type": "tablet"
}
]
Request
curl "https://api.testingbot.com/v1/browsers/puppeteer"
Response
1,669 rows today · sample
[
{
"selenium_name": "chrome150",
"name": "googlechrome",
"platform": "WIN11",
"browser_id": 32208,
"version": "156",
"long_version": null
},
{
"selenium_name": "microsoftedge150",
"name": "microsoftedge",
"platform": "WIN11",
"browser_id": 32232,
"version": "156",
"long_version": null
},
{
"selenium_name": "ff152",
"name": "firefox",
"platform": "WIN11",
"browser_id": 32265,
"version": "158",
"long_version": null
}
]
Request
curl "https://api.testingbot.com/v1/browsers/cypress"
Response
1,146 rows today · sample
[
{
"selenium_name": "chrome150",
"name": "googlechrome",
"platform": "WIN11",
"browser_id": 32208,
"version": "156",
"long_version": null
},
{
"selenium_name": "ff152",
"name": "firefox",
"platform": "WIN11",
"browser_id": 32265,
"version": "158",
"long_version": null
},
{
"selenium_name": "microsoftedge150",
"name": "microsoftedge",
"platform": "WIN10",
"browser_id": 32229,
"version": "156",
"long_version": null
}
]
GET
/v1/devices
List physical mobile devices
Returns every real Android and iOS device in the TestingBot grid, with anavailable flag indicating whether it can be acquired right now. Filter by platform for a single OS family.
Arguments
-
platformstring - Filter to a single mobile OS family. Case-insensitive.
-
webboolean - Internal flag used by the dashboard — returns extra UI-only fields.
Response fields
-
idinteger - Unique numeric device ID.
-
namestring - Marketing name (e.g. "iPhone 15 Pro").
-
model_numberstring - Manufacturer model number (e.g. "SM-G991B").
-
platform_namestring - Mobile OS family (e.g. "iOS", "Android").
-
versionstring - OS version (e.g. "17.4", "14").
-
resolutionstring -
Display resolution as
<width>x<height>(e.g. "1170x2532"). -
widthinteger -
Display width in pixels, parsed from
resolution. -
heightinteger -
Display height in pixels, parsed from
resolution. -
cpustring - CPU architecture.
-
availableboolean - Whether the device is free for this account to acquire right now.
-
multiple_browsersarray of object - Selectable browsers on this device. Only present on devices that offer more than one.
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
-
idinteger - Unique numeric device ID.
-
namestring - Marketing name (e.g. "iPhone 15 Pro").
-
model_numberstring - Manufacturer model number (e.g. "SM-G991B").
-
platform_namestring - Mobile OS family (e.g. "iOS", "Android").
-
versionstring - OS version (e.g. "17.4", "14").
-
resolutionstring -
Display resolution as
<width>x<height>(e.g. "1170x2532"). -
widthinteger -
Display width in pixels, parsed from
resolution. -
heightinteger -
Display height in pixels, parsed from
resolution. -
cpustring - CPU architecture.
-
availableboolean - Whether the device is free for this account to acquire right now.
-
multiple_browsersarray of object - Selectable browsers on this device. Only present on devices that offer more than one.
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
-
idinteger required - Numeric device ID.
Response fields
-
idinteger - Unique numeric device ID.
-
namestring - Marketing name (e.g. "iPhone 15 Pro").
-
model_numberstring - Manufacturer model number (e.g. "SM-G991B").
-
platform_namestring - Mobile OS family (e.g. "iOS", "Android").
-
versionstring - OS version (e.g. "17.4", "14").
-
resolutionstring -
Display resolution as
<width>x<height>(e.g. "1170x2532"). -
widthinteger -
Display width in pixels, parsed from
resolution. -
heightinteger -
Display height in pixels, parsed from
resolution. -
cpustring - CPU architecture.
-
availableboolean - Whether the device is free for this account to acquire right now.
-
multiple_browsersarray of object - Selectable browsers on this device. Only present on devices that offer more than one.
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; nokey/secret required.
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"
]