Devices reference

A device preset sets several viewport properties with one id. It is the fastest way to get a realistic phone, tablet or laptop capture. This page lists all 15 devices, the size of the image each one produces, and what a device changes in the browser. It is part of the API documentation. For when to use a device and when a custom viewport is better, read the mobile screenshots guide.

Use a device

GET, with a flat query parameter:

curl -G https://api.renderscreenshot.com/v1/screenshot \
  -H "Authorization: Bearer $RS_API_KEY" \
  -d url=https://example.com \
  -d device=iphone_14 \
  -o phone.png

POST, with device at the top level of the body, next to url:

{
  "url": "https://example.com",
  "device": "iphone_14"
}

Keep device at the top level. In the current API version, a request that nests it as viewport.device passes validation but renders at the default 1280 x 800 desktop viewport.

With the Node.js and Python SDKs (client and TakeOptions as set up in the SDK docs):

// Node.js
const image = await client.take(TakeOptions.url('https://example.com').device('iphone_14'));
# Python
image = client.take(TakeOptions.url('https://example.com').device('iphone_14'))

All devices

The output size is the image you get from a viewport capture: CSS viewport times scale, rounded to whole pixels. We measured it by repeating the renderer's viewport step for each device in Chrome (see the method note below).

id Name CSS viewport Scale Output (px) Mobile
Phones
iphone_14_pro iPhone 14 Pro 393 x 852 3 1179 x 2556 yes
iphone_14 iPhone 14 390 x 844 3 1170 x 2532 yes
iphone_13 iPhone 13 390 x 844 3 1170 x 2532 yes
iphone_se iPhone SE 375 x 667 2 750 x 1334 yes
pixel_7 Google Pixel 7 412 x 915 2.625 1082 x 2402 yes
pixel_7_pro Google Pixel 7 Pro 412 x 892 3.5 1442 x 3122 yes
samsung_galaxy_s23 Samsung Galaxy S23 360 x 780 3 1080 x 2340 yes
Tablets
ipad_pro_12 iPad Pro 12.9" 1024 x 1366 2 2048 x 2732 yes
ipad_pro_11 iPad Pro 11" 834 x 1194 2 1668 x 2388 yes
ipad_air iPad Air 820 x 1180 2 1640 x 2360 yes
Laptops and desktops
macbook_pro_14 MacBook Pro 14" 1512 x 982 2 3024 x 1964 no
macbook_pro_16 MacBook Pro 16" 1728 x 1117 2 3456 x 2234 no
macbook_air MacBook Air 1470 x 956 2 2940 x 1912 no
imac_24 iMac 24" 2240 x 1260 2 4480 x 2520 no
surface_pro_8 Surface Pro 8 1440 x 960 2 2880 x 1920 no

iphone_14 and iphone_13 share a viewport. They differ only in the iOS version in the user agent. GET /v1/devices returns this list from the API, and it is the list the API validates against. See list devices.

What a device sets, and what it does not

Property Set by the device? Notes
Viewport width and height Yes CSS pixels, as in the table
Device scale factor Yes Multiplies the output size. The large scale of pixel_7_pro makes the biggest phone images
Mobile emulation Yes, for phones and tablets Applies the page's <meta name="viewport"> tag, the way a real phone does
User agent Yes The device's own browser string, so sites that choose a template on the server send the mobile HTML
Touch Yes The device's has_touch is applied as viewport.touch
Orientation Partly viewport.landscape: true sets the browser's landscape flag but does not swap width and height. Swap them yourself, as below

Override part of a device

Explicit viewport values win over the device. Everything you do not set still comes from the device. This request keeps the iPhone 14 scale, mobile mode and user agent, and turns the viewport to landscape:

{
  "url": "https://example.com",
  "device": "iphone_14",
  "viewport": { "width": 844, "height": 390 }
}

The same rule gives you a smaller file: add "scale": 1 to viewport to keep the phone layout at one third of the pixel width of a scale 3 device. The retina screenshots guide covers the cost of a high scale.

Unknown device ids

A device id that is not in the list fails before any rendering, so a typo never uses a credit:

{
  "error": {
    "type": "validation_error",
    "code": "invalid_device",
    "message": "Unknown device 'iphone_15'. Use GET /v1/devices to see available devices.",
    "param": "device",
    "retryable": false,
    "docs": "https://renderscreenshot.com/docs/errors/error-codes"
  },
  "request_id": "3f1c9a52-7d4e-4b8a-9e21-6c0d5b7a8f13"
}

The device record

Each entry from GET /v1/devices has this shape:

{
  "id": "pixel_7",
  "name": "Google Pixel 7",
  "viewport": {
    "width": 412,
    "height": 915,
    "device_scale_factor": 2.625,
    "is_mobile": true,
    "has_touch": true
  },
  "user_agent": "Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36"
}

For a device that is not in the list, set viewport.width, viewport.height, viewport.scale and viewport.mobile, and send the device's user agent in browser.user_agent. The viewport parameters list the limits.

Method, 2026-10-15: we read the 15 device records from the API source and repeated the renderer's viewport step for each one (page.setViewport with width, height, scale and mobile, plus the device user agent) in Puppeteer 24.43.1 with Chrome Headless Shell, then captured https://example.com. The output column is the PNG size from that run. The touch result comes from matchMedia('(pointer: coarse)') in the same run. The override and viewport.device behaviour come from the API's parameter code with the same inputs. These are not API renders.

See also

Related in this topic

Was this page helpful?