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. No authentication required.
Arguments
-
typestring - Filter by automation protocol: "webdriver" (default) or "rc" (legacy Selenium RC).
Response fields
-
selenium_namestring -
Capability value to send as
browserNamein WebDriver. -
namestring - Human-readable browser identifier (e.g. "firefox", "iexplore").
-
versioninteger - Major version number.
-
long_versionstring - Full version string (e.g. "121.0.6167.184").
-
platformstring - Operating system (e.g. "WINDOWS", "MAC", "LINUX").
-
browser_idinteger - Unique TestingBot browser ID used to attach browsers to Codeless tests.
Request
curl "https://api.testingbot.com/v1/browsers"
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}
]
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"
]