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. No authentication required.

Arguments

type string
Filter by automation protocol: "webdriver" (default) or "rc" (legacy Selenium RC).

Response fields

selenium_name string
Capability value to send as browserName in WebDriver.
name string
Human-readable browser identifier (e.g. "firefox", "iexplore").
version integer
Major version number.
long_version string
Full version string (e.g. "121.0.6167.184").
platform string
Operating system (e.g. "WINDOWS", "MAC", "LINUX").
browser_id integer
Unique TestingBot browser ID used to attach browsers to Codeless tests.
GET /v1/browsers
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 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