Render Options
Detailing all available render options for Urlbox's rendering API
Basic Options
Basic options for rendering such as setting the URL or HTML, and viewport width and height
url
The URL or domain of the website you want to screenshot. We will automatically prepend http:// if it is missing.
url Examples
Screenshot of urlbox.com
Full page screenshot of apple.com
Using a url which contains a query string
html
The HTML you want to render.
html Examples
Preview an HTML email template
Create an Invoice PDF from HTML
Screenshot Gallery in HTML
format
The output format of the resulting render.
The available values are:
png
jpeg
webp
avif
svg
pdf
html
mp4
webm
md
format Examples
PNG Image
JPEG Image
SVG
Markdown
HTML
MP4
width
default: 1280
The viewport width of the browser, in pixels.
width Examples
Emulate mobile viewport
Emulate tablet viewport
Emulate desktop viewport
Emulate wide monitor viewport
height
default: 1024
The viewport height of the browser, in pixels.
height Examples
Emulate Iphone 14 Pro Max Viewport Height
Emulate Ipad Pro 12.9 Inch Pro Viewport Height
Emulate Macbook Pro 16 Inch Viewport Height
Emulate Common Desktop Screen Viewport Height
full_page
default: false
Specify whether to capture the full scrollable area of the website.
For PDFs, full_page mode will attempt to capture the whole website onto one single page PDF document.
It's likely you'll want to also hide any cookie banners that crop up during a full page screenshot, so we recommend you use click_accept and hide_cookie_banners too.
full_page Examples
Full page screenshot of urlbox.com
Full page PDF of urlbox.com
full_page_slices
default: false
Split the full page screenshot into smaller vertical slices, each stored as its own image.
The JSON response includes a slices array containing the url, offset_y, width and height of every slice.
Very tall screenshots are often downscaled or rejected by AI vision models, so sending smaller slices one at a time usually produces better analysis results.
Requires full_page to be true. Control the size of each slice with full_page_slice_height and full_page_slice_overlap_height.
full_page_slices Example
Slice a full page screenshot into 4000px sections
full_page_slice_height
default: 4000
The maximum height in pixels of each slice when full_page_slices is enabled. Must be between 1 and 16000.
If the full page screenshot is shorter than this value, a single slice is returned.
full_page_slice_height Examples
full_page_slice_height=2000
full_page_slice_height=4000
full_page_slice_height=8000
full_page_slice_overlap_height
default: 0
The number of pixels of vertical overlap between adjacent slices when full_page_slices is enabled.
Overlap means content cut at a slice boundary appears in full in at least one slice, which helps when analysing slices independently.
The full_page_slice_height minus the overlap must be at least 100.
full_page_slice_overlap_height Examples
full_page_slice_overlap_height=200
full_page_slice_overlap_height=500
selector
Take a screenshot of the element that matches this selector. By default, if the selector is not found, Urlbox will take a normal viewport screenshot. If you prefer Urlbox to fail the request when the selector is not found, pass fail_if_selector_missing=true.
selector Examples
Select only the Github logo
Snapshotting terms and conditions
clip
Clip the screenshot to the bounding box specified by x,y,width,height.
clip Examples
clip=0,0,400,400
clip=100,100,200,200
clip=0,800,800,600
gpu
Only available on: ultra and above
default: false
Enable GPU acceleration to render 3D scenes and heavy WebGL content. This is a beta feature and requires pre-approval. Please contact [email protected] to enable this feature on your account.
gpu Examples
WebGL water
WebGL Earth
LLM 3D Visualisation
response_type
For render link requests, setting this option to json will change the response type of the Urlbox request to JSON. For the API, the default response type is JSON.
The available values are:
json
binary
response_type Examples
response_type=json
response_type=binary
secure_mode
Only available on: ultra and above
Enforces zero data retention through secure mode to ensure sensitive data remains protected throughout the rendering process. All request data is automatically purged within 90 seconds of the render completing. In addition to this option, you need to use one of the storage approaches described in our Secure Screenshots guide.
Blocking Options
Options for blocking or dismissing certain page elements, such as cookie banners.
block_ads
Blocks requests from popular advertising networks from loading.
block_ads Examples
With ads blocked
Without ads blocked
hide_cookie_banners
Automatically hides cookie banners from most websites, by setting their style to display: none !important;
hide_cookie_banners Examples
With cookie banners hidden
Without cookie banners hidden
click_accept
Similar to the hide_cookie_banners option, but instead of hiding the banners, this option attempts to click on the 'Accept' button, in order to accept cookies.
click_accept Examples
With click_accept
Without click_accept
press_escape
Attempts to press the Escape (ESC) key before capturing the page. Useful for dismissing pop-ups, overlays, or advertising banners that appear on load.
block_urls
Block requests from specific domains from loading. You can use wildcard characters such as * to match subdomains.
block_urls Examples
Blocking chat plugin from Urlbox
Without blocking chat plugin from Urlbox
block_images
Blocks image requests
block_images Example
Blocking all images from Unsplash
block_fonts
Blocks font requests
block_fonts Examples
Blocking all font downloads from Urlbox
Without blocking font downloads from Urlbox
block_medias
Block video and audio requests
block_medias Examples
Blocking video and audio requests from Vimeo
Without blocking video and audio requests from Vimeo
block_styles
Prevent stylesheet requests from loading
block_styles Examples
Blocking stylesheets
Without blocking stylesheets
block_scripts
Prevent requests for javascript scripts from loading
block_scripts Examples
Blocking scripts
Without blocking scripts
block_frames
Prevents iframe and frame content from loading by blocking non-navigation document requests. The main page will load normally, but any embedded frames/iframes will be blocked.
block_frames Example
Blocking frames
block_fetch
Block fetch requests from the target URL.
block_xhr
Block XHR requests from the target URL.
block_xhr Example
Blocking XHR
block_sockets
Prevents WebSocket connections from being established, blocking real-time communication features like live chat, notifications, or dynamic updates.
block_data_urls
Block data URLs such as data:image/png;base64,...
hide_selector
Hide specific HTML elements on the page before rendering. This option accepts a comma-delimited string of CSS element selectors that will be hidden by setting their style to visibility: hidden !important; pointer-events: none !important;. This preserves the page layout while making elements invisible.
This is particularly useful for:
- Hiding pop-ups, banners, or cookie notices
- Removing advertisements or promotional overlays
- Excluding navigation menus or sidebars
- Hiding specific content sections
Selector types supported:
- Element selectors (e.g.,
h1,div,img) - Hide all elements of that type - Class selectors (e.g.,
.popup,.banner) - Hide elements with specific CSS classes - ID selectors (e.g.,
#header,#sidebar) - Hide elements with specific IDs - Complex selectors (e.g.,
.nav ul li,div.content > p) - Use any valid CSS selector - Multiple selectors - Combine multiple selectors with commas
Tip: To find the selector for any element, open your browser's DevTools, right-click the element in the Elements tab, and select "Copy > Copy selector".
hide_selector Examples
Hiding an h1 element
Without hiding any elements
Customize Options
Customize the look of the page before rendering a screenshot
js
Only available on: ultra and above
Execute custom JavaScript in the context of the page. The JS gets executed after the page's dom has loaded, but before the screenshot is taken. No need to use load etc event handlers to run code, as these events will already have fired by the time this JS gets executed. You can use await to wait for promises to resolve.
js Examples
Inject a timestamp of the screenshot into the screenshot
Overriding a headline
css
Inject custom CSS into the page
css Examples
Highlight elements with a red border
Changing background colour
dark_mode
default: false
Emulate dark mode on websites by setting prefers-color-scheme: dark
dark_mode Examples
dark_mode=true
dark_mode=false
reduced_motion
Prefer less animations on websites by setting prefers-reduced-motion: reduced
reduced_motion Examples
With reduced motion
Without reduced motion
show_timestamp
Shows a timestamp in a header above the rendered screenshot. Can be paired with show URL. If you're rendering a PDF, you can achieve this with the show_header option.
show_timestamp Examples
With a timestamp
Without a timestamp
show_url
Shows a URL in a header above the rendered screenshot. Can be paired with show timestamp. If you're rendering a PDF, you can achieve this with the show_header option.
show_url Examples
With a URL
With a timestamp and URL
Without a URL
Screenshot Options
Options relating to the generated screenshot image
retina
default: false
Take a 'retina' or high-definition screenshot, equivalent to setting a device pixel ratio of 2.0 or @2x. Please note that retina screenshots will be double the normal dimensions and will normally take slightly longer to process due to the much bigger image size.
retina Examples
retina=true
retina=false
thumb_width
The width of the generated thumbnail, in pixels. Omit for a full-size screenshot. For generating one or more separate thumbnail files alongside the full-size render (rather than resizing the main image), use the thumbnails option instead.
thumb_width Examples
thumb_width=100
thumb_width=200
thumb_width=400
thumb_height
The height of the generated thumbnail, in pixels. Omit for a full-size screenshot. For generating one or more separate thumbnail files alongside the full-size render (rather than resizing the main image), use the thumbnails option instead.
thumb_height Examples
thumb_height=100
thumb_height=200
thumb_height=400
img_fit
default: cover
How the screenshot should be resized or cropped to fit the dimensions when using thumb_width and/or thumb_height options
The available values are:
-
cover - Preserving aspect ratio, attempt to ensure the image covers both
thumb_widthand/orthumb_heightby cropping/clipping to fit. -
contain - Preserving aspect ratio, contain within both
thumb_widthand/orthumb_heightusing letterboxing where necessary. -
fill - Ignore the aspect ratio and stretch to both
thumb_widthand/orthumb_height. -
inside - Preserving aspect ratio, resize the image to be as large as possible while ensuring its dimensions are less than or equal to
thumb_widthand/orthumb_height. -
outside - Preserving aspect ratio, resize the image to be as small as possible while ensuring its dimensions are greater than or equal to
thumb_widthand/orthumb_height.
img_fit Examples
img_fit=cover
img_fit=contain
img_fit=fill
img_fit=inside
img_fit=outside
img_position
default: center
How the image should be positioned when using an img_fit of cover or contain.
The available values are:
north
northeast
east
southeast
south
southwest
west
northwest
center
centre
img_position Examples
img_position=north
img_position=south
img_position=west
img_position=east
img_position=center
img_position=northwest
img_fit=contain, img_position=north
img_fit=contain, img_position=south
img_fit=contain, img_position=west
img_fit=contain, img_position=east
img_fit=contain, img_position=center
img_fit=contain, img_position=northwest
img_bg
Background colour to use when img_fit is contain, or img_pad is used, defaults to black without transparency
img_bg Examples
img_bg=red
img_bg=#ccc
img_bg=rgb(180, 255, 200)
img_bg=rgba(180, 255, 200, 0.4)
img_bg=hsl(60, 20%, 20%)
img_pad
Pad the screenshot, giving it a border. Can either be a single pixel value that gets added to each side, or a comma delimited string of top,right,bottom,left pixel values.
img_pad Examples
img_pad=10
img_pad=30
img_pad=1,10,20,40
quality
default: 80
The image quality of the resulting screenshot (JPEG/WebP only)
quality Examples
quality=40
quality=80
quality=100
transparent
default: false
If a website has no background color set, the image will have a transparent background (PNG/WebP only)
max_height
For extremely lengthy websites, it may be preferable to limit the screenshot to a maximum height to prevent Urlbox from spending time scrolling and generating an enormous screenshot.
max_height Example
Short Website
download
Pass in a filename which sets the content-disposition header on the response. E.g. download=myfilename.png This will make the Urlbox link downloadable, and will prompt the user to save the file as myfilename.png
download Example
With a filename
Thumbnail Options
Options relating to generating thumbnails of the main screenshot. Each spec's fit, bg and position fall back to the img_fit, img_bg and img_position options in Screenshot Options, which also serve the legacy thumb_width/thumb_height single-resize.
thumbnails
Generate up to 5 additional thumbnail images from the same render, each uploaded as its own file alongside the main screenshot. thumbnails is independent of the main screenshot's own dimensions, and unrelated to the legacy thumb_width/thumb_height options above, which resize the primary screenshot itself.
Each entry in the array is an object with the following keys, all optional:
- key - A short identifier (max 10 characters) for this thumbnail. Used as its filename suffix, and as its key in the JSON response (or in
thumbnails_object's object response). - preset - One of
xs,sm,md,lg,xl,2xl,3xl,4xl,5xl,1/2,1/4,3/4. Scales the thumbnail as a percentage of the original screenshot's dimensions (e.g.mdis 30%,1/2is 50%). Takes priority oversize/width/heightwhen set. - size - A single pixel value (
10-2000), used as both the width and the height. - width - The thumbnail width in pixels (
10-2000). - height - The thumbnail height in pixels (
10-2000). - fit - How the thumbnail should be resized or cropped to fit its dimensions:
cover,contain,fill,insideoroutside. Falls back to the top-levelimg_fitoption, thencover. - bg - Background color used for letterboxing. Falls back to the top-level
img_bgoption, thenbg_color, thenblack. - position - How the image should be positioned within its
fit. Anyimg_positionvalue, includingattentionandentropy, which crop around the most visually interesting or highest-entropy region of the image. Falls back to the top-levelimg_positionoption, thennorth. - suffix - A custom filename suffix, used when
keyisn't set. - presigned_url - A presigned URL to upload this specific thumbnail to, instead of Urlbox's own storage.
thumbnails can be supplied as a JSON array in a POST body:
"thumbnails": [{ "preset": "md" }, { "width": 320, "key": "w320" }]or, over a GET/query-string request, using qs-style bracket notation:
&thumbnails[0][preset]=md&thumbnails[1][width]=320&thumbnails[1][key]=w320
Each generated thumbnail appears in the JSON response (see response_type) as an entry in a thumbnails array, each with a key, location and size - or, when thumbnails_object is true, as an object keyed by that key/suffix instead of an array.
thumbnails Example
Generate two thumbnails alongside the render
thumbnails_object
default: false
Reshapes the thumbnails response from an array into an object keyed by each thumbnail's key/suffix, with key omitted from each value (since it's now the object's own key). Useful for looking up a specific thumbnail directly instead of scanning the array.
For example, with thumbnails: [{ preset: "md", key: "w320" }], the default array response is:
"thumbnails": [{ "key": "w320", "location": "...", "size": 12345 }]and with thumbnails_object: true, it becomes:
"thumbnails": { "w320": { "location": "...", "size": 12345 } }Has no effect unless thumbnails is also set.
thumbnails_object Examples
Thumbnails keyed by suffix
Thumbnails as an array (default)
PDF Options
Options relating to PDF document generation.
pdf_page_size
default: A4
Sets the PDF page size.
Setting this option will take precedence over pdf_page_width and pdf_page_height.
The available values are:
A0
A1
A2
A3
A4
A5
A6
Legal
Letter
Ledger
Tabloid
pdf_page_size Examples
pdf_page_size=A0
pdf_page_size=A4
pdf_page_size=Letter
pdf_page_range
Sets the PDF page range to return.
By default, the page is split into a multi page document and returns all page. Use this option to restrict which pages should be returned.
pdf_page_range Examples
Just the first page
The first 2 pages and the 4th page
Just the 4th page
pdf_page_width
Sets the PDF page width, in pixels.
pdf_page_width Examples
pdf_page_width=400
pdf_page_width=800
pdf_page_width=1400
pdf_page_height
Sets the PDF page height, in pixels.
pdf_page_height Examples
pdf_page_height=400
pdf_page_height=800
pdf_page_height=2000
pdf_margin
default: none
Sets the margin of the PDF document.
The available values are:
none
default
minimum
pdf_margin Examples
pdf_margin=none
pdf_margin=default
pdf_margin=minimum
pdf_margin_top
Sets a custom top margin on the PDF.
pdf_margin_top Example
pdf_margin_top=40
pdf_margin_right
Sets a custom right margin on the PDF.
pdf_margin_right Example
pdf_margin_right=100
pdf_margin_bottom
Sets a custom bottom margin on the PDF.
pdf_margin_bottom Example
pdf_margin_bottom=50
pdf_margin_left
Set a custom left margin on the PDF.
pdf_margin_left Example
pdf_margin_left=60
pdf_auto_crop
Automatically remove white space from PDF. Occasionally a PDF will have a lot of trailing white space at the bottom of the page. This option will attempt to automatically crop the PDF to remove this white space.
pdf_scale
default: 1
Sets the scale factor of the website content in the PDF. Valid values are numbers between 0.1 and 2.
pdf_scale Examples
pdf_scale=0.2
pdf_scale=1.2
pdf_scale=2
pdf_orientation
default: portrait
Sets the orientation of the PDF.
The available values are:
portrait
landscape
pdf_orientation Examples
pdf_orientation=portrait
pdf_orientation=landscape
pdf_background
default: true
Sets whether to print background images in the PDF
pdf_background Examples
pdf_background=true
pdf_background=false
disable_ligatures
Prevents ligatures from being used. Useful when rendering a PDF, and you want to extract text which contains ligatures.
media
By default, when generating a PDF, the print CSS media query is used. To generate a PDF using the screen CSS, set this option to screen.
When generating an image, the screen CSS media query is used by default. To generate an image using the print CSS, set this option to print.
media Examples
PDF using screen CSS
PDF using print CSS
PNG using screen CSS
PNG using print CSS
pdf_show_header
Whether to show the default pdf header on each page of the pdf. The template of the header can be changed by setting the pdf_header option.
pdf_show_header Example
pdf_show_header=true
pdf_header
Change the default pdf header that is shown on each page of the pdf when pdf_show_header option is set.
You have the option to show the following variables in the header (or footer) of the pdf:
- current
date titleof the pageurlof the page- current
pageNumber - the
totalPagesin the pdf document
You can display these variables by creating empty divs or spans, with special css class names relating to the variable you want to show.
For example, if you want to show the date followed by the url, you could use the following pdf header template:
<div class="date"></div><div class="url"></div>.
The pdf header template you set are inserted as the innerHTML of a parent div which is a flex container, and has align-items set to flex-start.
There are also some helper classes for aligning the divs or spans. The following classes are available:
left- adds some left padding to the element and setsflex: none.center- aligns the element and text to the center.right- adds some right padding to the element and setsflex: none.text- sets the text to 8pt.grow- setsflex: autoon the element, allowing it to grow to fill the available space.
The default pdf header is:
<div class='date text left'></div><div class='title text center'></div>.
You can see exactly how the pdf page is constructed by looking at the chromium pdf template in the chromium source repository.
pdf_header Examples
Showing the date and url in the pdf header
Showing the current page and total pages in the pdf header
pdf_show_footer
Whether to show the default pdf footer on each page of the pdf. The template of the footer can be changed by setting the pdf_footer option.
pdf_show_footer Example
pdf_show_footer=true
pdf_footer
Change the default pdf footer that is shown on each page of the pdf when pdf_show_footer option is set.
You have the option to show the following variables in the footer (or header) of the pdf:
- current
date titleof the pageurlof the page- current
pageNumber - the
totalPagesin the pdf document
You can display these variables by creating empty divs or spans, with special css class names relating to the variable you want to show.
For example, if you want to show the date followed by the url, you could use the following pdf footer template:
<div class="date"></div><div class="url"></div>.
The pdf footer template you set are inserted as the innerHTML of a parent div which is a flex container, and has align-items set to flex-end.
There are also some helper classes for aligning the divs or spans. The following classes are available:
left- adds some left padding to the element and setsflex: none.center- aligns the element and text to the center.right- adds some right padding to the element and setsflex: none.text- sets the text to 8pt.grow- setsflex: autoon the element, allowing it to grow to fill the available space.
The default pdf footer is:
<div class='url text left grow'></div><div class='text right'><span class='pageNumber'></span>/<span class='totalPages'></span></div>.
You can see exactly how the pdf page is constructed by looking at the chromium pdf template in the chromium source repository.
pdf_footer Examples
Showing the date and url in the pdf footer.
Showing the current page and total pages in the pdf footer.
readable
Make the pdf into a readable document by removing unnecessary elements such as navigation bars, ads, etc.
readable Example
readable=true
pdf_title
Sets the title metadata field of the PDF document. This is visible in PDF readers under document properties. If not set, the page's <title> tag will be used as the PDF title.
pdf_subject
Sets the subject metadata field of the PDF document. This is visible in PDF readers under document properties.
pdf_author
Sets the author metadata field of the PDF document. This is visible in PDF readers under document properties.
pdf_keywords
Sets the keywords metadata field of the PDF document. Pass a comma-separated list of keywords, e.g. "pdf_keywords": "screenshot,web,api". This is visible in PDF readers under document properties and can help with document organization and search.
pdf_creator
Sets the creator metadata field of the PDF document. This typically indicates the application that created the original content. Visible in PDF readers under document properties.
Video Options
Options for rendering MP4 or WebM videos of a website. Set format to mp4 or webm to record a video instead of taking a screenshot. Pair these with the Video Scrolling Options below to control what the video shows.
video_time
default: 3000
How long to record for, in milliseconds. When scrolling is enabled the scroll choreography runs within this time; without scrolling the recording simply lasts this long. video_duration is an alias that takes seconds instead of milliseconds. When using video_scroll_to, the video length is derived from your sections automatically and video_time caps the scroll choreography (the section scrolls and waits, with lead-in, scroll-back and tail riding on top).
video_time Example
Record a 10 second video
video_fps
default: 60
Frames per second to record at. Higher values give smoother scrolling at the cost of larger files and slightly longer render times.
video_fps Example
Smooth 60fps recording
video_width
default: 1280
Width of the output video in pixels. The page is rendered at the usual viewport size (width/height) and the recording is scaled to video_width x video_height.
video_height
default: 1024
Height of the output video in pixels.
video_height Example
Compact 640x360 video
video_quality
default: 23
Constant rate factor for the H.264 encoder. Lower is higher quality and larger files. Typical values are 18 (visually lossless) to 28.
video_preset
default: medium
Encoder speed/compression trade-off. Slower presets compress better (smaller files at the same quality) but take longer to encode.
The available values are:
ultrafast
superfast
veryfast
faster
fast
medium
slow
slower
veryslow
video_preset Example
High quality, better compression
video_bitrate
Target bitrate for the recording, in kbps. An alternative to video_quality when you need to hit a specific file-size budget.
video_codec
default: h264
Video codec for the output. h264 produces MP4s with the widest playback support; vp9/vp8 produce WebM. Setting format to webm selects a WebM codec automatically.
The available values are:
h264
vp9
vp8
video_codec Example
WebM with VP9
Video Scrolling Options
Options controlling how the page is scrolled while a video records. Enable a simple top-to-bottom scroll with video_scroll, or choreograph stops at specific sections with video_scroll_to.
video_scroll
default: false
Smoothly scroll down the page while recording, section by section, then scroll back to the top. Scroll speed, easing, pauses and distance are controlled by the options below.
video_scroll Example
Scrolling video of a long page
video_scroll_to
Scroll to specific sections of the page in turn, pausing at each for a set time, for example to walk through key features or synchronise a scroll with a voiceover. Each entry is a CSS selector (automatically piercing open shadow DOM, however deeply nested) or a text= locator matching visible text, plus optional per-section settings: wait (pause at the section), duration (how long the scroll to it takes), ease (easing name, lower-case, see video_ease), and offset (stop N pixels above the element, useful under sticky headers). In a render link, repeat the parameter once per section using ;key=value modifiers, e.g. video_scroll_to=%23reviews;wait=4s. In a JSON body, pass an array of the same strings or of objects. Durations accept milliseconds (2500) or unit strings ("2.5s", "500ms"). The video's length is derived from your sections (capped at 400s; an explicit video_time truncates). If a section isn't found, its full time slot still elapses at the current position so the rest of the timeline stays in sync. A literal ; inside a text= value needs the JSON object form. video_scroll_offset sets the default offset used for every section that doesn't specify its own.
video_scroll_to Examples
Visit two sections with different pauses
Target by text, with easing and a sticky-header offset
video_scroll_require_sections
default: false
Fail the render with a 400 error if any video_scroll_to section can't be found on the page, instead of holding position through its time slot. Use this when a wrong video is worse than no video.
video_scroll_offset
default: 0
Global default viewport offset for video_scroll_to stops, in pixels. Positive values stop the scroll with the viewport top N pixels above the target element, which keeps section headings visible and clears sticky navbars. Negative values scroll past the element. A per-section offset overrides this default for that section only.
video_scroll_duration
default: 1500
How long each scroll movement takes, in milliseconds. Also the default per-section scroll duration in video_scroll_to mode.
video_rest_duration
default: 0
How long to pause between scroll movements, in milliseconds. In video_scroll_to mode this becomes the default per-section wait (falling back to 2000ms if unset).
video_prescroll_duration
default: 1000
How long to hold at the top of the page before scrolling begins, in milliseconds.
video_postscroll_duration
default: 1000
How long to keep recording after scrolling finishes, in milliseconds.
video_scroll_back
default: true
Scroll back to the top of the page at the end of the recording. Set to false to end the video at the final scroll position.
video_scroll_back_duration
default: 2500
How long the final scroll back to the top takes, in milliseconds.
video_ease
default: quadratic.inout
Easing function for scroll movements. Controls how each scroll accelerates and decelerates. Values are lower-case. Also the default per-section ease in video_scroll_to mode.
The available values are:
linear.none
quadratic.in
quadratic.out
quadratic.inout
cubic.in
cubic.out
cubic.inout
quartic.in
quartic.out
quartic.inout
quintic.in
quintic.out
quintic.inout
sinusoidal.in
sinusoidal.out
sinusoidal.inout
exponential.in
exponential.out
exponential.inout
circular.in
circular.out
circular.inout
elastic.in
elastic.out
elastic.inout
back.in
back.out
back.inout
bounce.in
bounce.out
bounce.inout
video_ease Example
Playful bounce easing
video_ease_end
default: quadratic.inout
Easing function for the final scroll back to the top. Accepts the same values as video_ease.
video_scroll_distance
Override the distance of each scroll movement, in pixels. By default each movement covers roughly one viewport. Ignored in video_scroll_to mode.
video_sections
Stop the scroll after this many scroll movements, rather than scrolling the whole page. Ignored in video_scroll_to mode.
video_jitter
Randomise scroll timing by up to this fraction, for a more human, less mechanical feel. For example 0.2 varies each movement and pause by up to 20%.
video_warmup
default: false
Perform an unrecorded scroll down and back up before recording starts, so lazy-loaded images and animations have already loaded when the real scroll happens.
Cache Options
Options to control how Urlbox caches your screenshots or PDF's. Please note that caching only applies to requests from render links. POST requests to the API are not cached.
To remove a cached render before its ttl expires, send a DELETE request to the exact same render link URL (same path and query string as the original GET, excluding force and the token). The cache entry is keyed on the full set of render options, so a DELETE with a different query string targets a different entry. A successful purge responds 200 with {"purged": true}; if no cached render matched the supplied options, the API responds 404 with error code CacheEntryNotFound. Check that your query string exactly matches the original render's. Note that clients may still serve a previously fetched copy from their own HTTP cache until your ttl elapses.
force
default: false
Generate a fresh render on each request, instead of getting a cached version.
unique
Pass a unique string such as a UUID, hash or timestamp, to have more control over when to generate a fresh screenshot or PDF.
ttl
default: 2592000
The duration to keep a screenshot or PDF in the cache, in seconds. ttl stands for 'time to live'. The default value is also the maximum value: 2592000 seconds (30 days).
ttl Examples
Request Options
Options to configure the browser, before navigating to the URL
proxy
Only available on: ultra and above
Pass in a proxy server address to make screenshot requests via that server in the format [address]:[port].
If proxy authentication is required, you can use the following format: [user]:[password]@[address]:[port].
use_proxy
Only available on: ultra and above
This uses the proxy you have stored on your project in use to make screenshot requests via that server.
use_stealth
default: false
Renders the page with a full, real Chrome browser set up the way a normal user's machine is. Standard renders streamline or disable some browser behaviours for speed; stealth renders leave everything in place, so the page sees an ordinary, consistent browsing environment.
Use it when a page renders incompletely, or returns a challenge page or 403, under a plain render. It combines well with retry_on and retry_with (enable stealth only on retries, so you only pay its cost when a render needs it), and with a proxy for sites that respond differently depending on the requesting network.
Stealth renders are noticeably slower than standard renders, so avoid enabling it as a blanket default.
hide_headless
default: false
A lighter-weight alternative to use_stealth. It runs Chrome with a set of plugins that fill in the properties headless Chrome normally leaves unset or empty (for example navigator.webdriver, the chrome runtime objects, and WebGL vendor strings), so the page sees the environment an ordinary desktop browser reports.
use_stealth is the stronger option and takes precedence if both are set. Reach for hide_headless when a page renders differently under headless Chrome but doesn't need the full stealth browser.
header
Only available on: hifi and above
Set a header on the request when loading the URL
Example: To set the header with key X-My-Header to the value SomeValue, you would pass header=X-My-Header%3DSomeValue.
This can be set multiple times, to set more than one header - e.g. header=X-My-Header%3DSomeValue&header=X-My-Other-Header%3DSomeOtherValue.
As with all options passed via the query string, the header value must be URL encoded - so X-My-Header=SomeValue becomes X-My-Header%3DSomeValue in order to be interpreted correctly by Urlbox.
header Examples
header=X-My-Header=MyHeaderValue
Setting multiple headers
cookie
Sets a cookie on the request when loading the URL.
Example: To set the cookie with key Opt-In to the value yes, you would set the value of this option to Opt-In=yes.
Cookies can be passed as an array, to allow setting multiple cookies - e.g.["Opt-In=yes","Session-Id=DMTIzNDU"].
To achieve multiple cookies with render links, just set the cookie option multiple times, like cookie=Opt-In%3Dyes&cookie=Session-Id%3DDMTIzNDU.
To set a specific domain on a cookie, you can do the following: OptIn=yes;Domain=.mydomain.com.
You can set other attributes for the cookie such as Path, HttpOnly and SameSite
cookie Examples
cookie=OptIn=yes
Setting multiple cookies
Setting specific domain and other attributes for a cookie
user_agent
Sets the User-Agent string for the request. The user agent identifies what browser/device is making the request, which can affect how websites render content.
Presets:
random- Uses a random user-agent to help avoid bot detectionmobile- Uses a modern iPhone/Safari user-agent stringdesktop- Uses a modern Chrome/macOS user-agent string
Why use this?
- Some websites serve different content based on the user agent (e.g., mobile vs desktop layouts)
- Certain sites block requests from unknown or bot-like user agents
- You may want to emulate how a specific browser or crawler sees a page
Testing your user agent: Try rendering httpbin.org/user-agent to see exactly what user agent string is being sent.
For a comprehensive list of user agent strings, see useragents.me.
user_agent Examples
user_agent=random
user_agent=mobile
user_agent=desktop
Google bot
Facebook crawler
Custom
platform
default: MacIntel
Sets the navigator.platform that the browser will report for the request. Useful for getting around certain scripts that detect the platform.
platform Examples
platform=MacIntel
platform=Linux x86_64
platform=Linux armv81
platform=Win32
accept_lang
default: en-US
Sets an Accept-Language header on requests to the target URL
accept_lang Examples
accept_lang=de-CH
accept_lang=ko-KR
authorization
Sets an Authorization header on requests to the target URL.
Can be used to pass an auth token through to the site in order to 'login' before rendering.
authorization Examples
authorization=Basic my_base64_auth_token
authorization=Bearer my_bearer_token
tz
default: America/New_York
Emulate the timezone to use when rendering pages.
By default the rendering browser reports a US timezone (America/New_York or America/Los_Angeles, depending on which of our regions renders your screenshot) so that its clock agrees with where our renderers connect from. Set tz explicitly to pin it. Renders on the stable engine channel still report UTC until the next promotion of latest to stable (see engine_version).
This matters whenever the page derives anything from the browser's local clock: displayed dates and times, opening hours, "expires in" countdowns, and any cookie or token whose lifetime the page calculates client-side. If your renders need to be identical every time, or your page assumes UTC, set tz=UTC.
Example: tz=Europe/London. A list of timezone ID's can be found here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
tz Examples
tz=Asia/Kolkata
tz=Asia/Tokyo
tz=America/Sao_Paulo
tz=Europe/London
engine_version
default: latest
Sets the version of the urlbox rendering engine to use when rendering the page. Renders default to latest unless you choose a version here or on your project. Pin stable when you'd rather pick up engine changes in batches, at the scheduled promotions of latest to stable, than as they ship.
The available values are:
stable
latest
experimental
certify
Only available on: ultra and above
This creates a hash of the rendered file, timestamp and options providing proof that a render was taken at a given time. Returns a hash, timestamp and the options used to hash. Checkout our guide on certifying a render for more information.
Wait Options
Options to control how Urlbox waits for the page or elements to load before rendering.
delay
default: 0
The amount of time to wait before Urlbox captures a render in milliseconds.
timeout
default: 30000
The amount of time to wait for the requested URL to load, in milliseconds. The timeout value needs to be between 5,000 and 100,000 milliseconds. The default is 30000 or 30 seconds.
wait_until
default: loaded
Waits until the specified DOM event has fired before capturing a render.
The available options are:
domloaded(theDOMContentLoadedevent is fired)mostrequestsfinished(consider navigation to be finished when there are no more than 2 network connections for at least 500 ms)requestsfinished(there are no more than 0 network connections for at least 500 ms)loaded(theloadevent is fired)
The available values are:
domloaded
mostrequestsfinished
requestsfinished
loaded
wait_until Examples
wait_until=domloaded
wait_until=mostrequestsfinished
wait_until=requestsfinished
wait_until=loaded
wait_for
Waits for the element specified by this selector to be present in the DOM before taking a screenshot or PDF.
By default, Urlbox will take a screenshot or PDF if the wait_for element is not found after waiting for the time specified by the wait_timeout option.
If you prefer Urlbox to fail the request when the wait_for element is not found, pass fail_if_selector_missing=true
wait_for Examples
Without wait_for
wait_for=#loaded_element
wait_for_state
default: attached
Whether the element specified by wait_for should be visible or just present in the DOM. Visible means the element is attached to the DOM and has opacity > 0 and its width and height > 0 and doesn't have visibility:hidden set.
The available values are:
visible
attached
wait_to_leave
Waits for the element specified by this selector to be absent from the DOM before taking a screenshot or PDF.
A typical use-case would be waiting for loading spinners to be absent before taking a screenshot.
By default, Urlbox will take a screenshot or PDF if the wait_to_leave element is still present after the time specified by the wait_timeout option.
If you prefer Urlbox to fail the request when the wait_to_leave element is still present, pass fail_if_selector_present=true
wait_to_leave Examples
Without wait_to_leave
wait_to_leave=#loading_element
wait_timeout
default: 30000
The amount of time to wait for the wait_for element to appear, or the wait_to_leave element to leave before continuing, in milliseconds.
Fail Options
Options to dictate how Urlbox handles certain scenarios.
fail_if_selector_missing
default: false
Fails the request if the elements specified by selector or wait_for options are not found on the page after waiting for wait_timeout.
fail_if_selector_missing Example
fail_if_selector_missing=true
fail_if_selector_present
default: false
Fails the request if the element specified by wait_to_leave option is found on the page after waiting for wait_timeout.
fail_if_selector_present Example
fail_if_selector_present=true
fail_on
Pass in a specific HTTP status code (e.g., "400", "500") or an array of status codes (e.g., ["400", "404", "500"]) as strings. Urlbox will fail the request if the final response status code matches any of the specified codes.
fail_on Example
fail_on=404
fail_on_4xx
default: false
If fail_on_4xx=true and the requested URL returns a status code between 400 and 499, Urlbox fails the request with a 400 error, an error code of fail_on_4xx, and a message naming the status code (for example Page returned 404 and fail_on_4xx was true).
fail_on_4xx Examples
fail_on_4xx=false
fail_on_4xx=true
fail_on_5xx
default: false
If fail_on_5xx=true and the requested URL returns a status code between 500 and 599, Urlbox fails the request with a 400 error, an error code of fail_on_5xx, and a message naming the status code (for example Page returned 500 and fail_on_5xx was true).
fail_on_5xx Examples
fail_on_5xx=false
fail_on_5xx=true
fail_on_except
Specify status codes to exclude from fail_on, fail_on_4xx, or fail_on_5xx checks. For example, if you want to fail on all 5xx errors except 503, use fail_on_5xx=true with fail_on_except=503.
retry_on
Only available on: ultra and above
Automatically retry renders when specific conditions occur. Pass a single condition, a comma-separated string, or an array of conditions.
When a condition matches, Urlbox will retry with exponential backoff (the delay doubles each time, starting at 1 second by default and capped at 30 seconds per wait) up to 2 times by default (3 total attempts including the original render). Use max_retries or max_attempts to change this. Retrying stops early if the request approaches the overall 5 minute render budget.
HTTP status conditions (retry based on the page's response):
4xx- Retry when the page returns any 4xx status. This range deliberately skips retrying when the failure looks like a problem with the request itself rather than a block (for example a missing selector or an invalid option), since those would fail identically on every attempt. List codes like403/429explicitly to always retry them.5xx- Retry when the page returns any 5xx status404,429,503, etc. - Retry on specific status codes
Engine conditions (retry when Urlbox encounters an internal error):
timeout- Retry when the render times outcrash- Retry when the browser crashes
Quality conditions:
small_size- Retry when the screenshot is smaller thanmin_size_bytes
Special values:
all- Retry on any of the conditions above
Examples:
retry_on: "4xx"- Retry when the page returns any 4xx statusretry_on: ["429", "503"]- Retry on rate limiting or service unavailableretry_on: "timeout,crash"- Retry on engine failures onlyretry_on: "5xx,timeout"- Retry on page 5xx errors or timeouts
Note: If a condition matches both retry_on and fail_on, the request will be retried first. Use fail_on_except to mark specific status codes as acceptable (won't retry or fail).
retry_with
Only available on: ultra and above
Change render options on retry attempts triggered by retry_on. Instead of retrying with the exact same options, each retry re-runs the render with the retry_with options merged over the original request, so you can escalate progressively: try a cheap, plain render first, and only add stealth or a proxy if the render fails.
retry_with has no effect on its own; it only applies when retry_on triggers a retry. Because the value is a nested object, use it with JSON POST requests to the render endpoints.
Single object - applied to every retry attempt:
{
"url": "example.com",
"retry_on": ["403", "429", "timeout"],
"retry_with": { "use_stealth": true, "use_proxy": true }
}Array of objects - progressive escalation. The first retry uses the first element, the second retry uses the second element, and so on. If there are more retries than elements, the last element is reused for the remaining retries. For example, if a site rate-limits or bot-blocks you (429 or 403 responses), you can escalate through your own proxies from cheapest to most expensive, so the expensive bandwidth is only spent on renders that actually got blocked:
{
"url": "example.com",
"retry_on": ["403", "429"],
"max_retries": 3,
"retry_delay_ms": 2000,
"retry_with": [
{ "proxy": "user:[email protected]:8080" },
{ "proxy": "user:[email protected]:8080" },
{ "proxy": "user:[email protected]:9000" }
]
}The first attempt runs without a proxy. If the page responds 403 or 429, the first retry goes through the cheap datacenter proxy, the second through the mid-tier one, and the third through the residential proxy. Entries aren't limited to the proxy option: any retry-compatible option works, for example { "use_stealth": true, "use_proxy": true } to enable use_stealth mode and route through the proxy saved on your project (like use_proxy). See the proxies guide for a walkthrough of this pattern.
Merging rules:
- Each retry's options are the original request options with that attempt's
retry_withentry merged on top. - Setting an option to
nullremoves it from that retry attempt - e.g.{ "proxy": null }retries without the proxy from the original request. - Options you don't mention are left unchanged.
Retry-compatible options: only options that affect how the page is fetched and rendered can be changed on retry. These include proxy and network options (proxy, use_proxy, user_agent), stealth options (use_stealth, hide_headless), content blocking (block_ads, hide_cookie_banners, block_urls), interaction and waiting (click_accept, click, wait_until, wait_for, delay), viewport (width, height, retina), page modifications (js, css, hide_selector), request headers and cookies (header, cookie, authorization, accept_lang), and timeout. Options that change the output itself (like format or full_page) cannot be changed between attempts.
max_retries
Only available on: ultra and above
default: 2
Maximum number of retry attempts when using retry_on. Must be between 0 and 5. If max_attempts is also set, max_attempts takes precedence.
max_attempts
Only available on: ultra and above
default: 3
Maximum total number of render attempts (the original render plus retries) when using retry_on. Must be between 0 and 5. An alternative to max_retries: max_attempts is equivalent to max_retries + 1, and takes precedence over it when both are set.
retry_delay_ms
Only available on: ultra and above
default: 1000
Base delay in milliseconds between retry attempts. The delay doubles with each retry (exponential backoff), with each individual wait capped at 30 seconds. Must be between 100 and 60000.
min_size_bytes
Only available on: ultra and above
default: 1000
Minimum expected file size in bytes. Used with retry_on: "small_size" to retry when the screenshot is smaller than expected, which may indicate an error page was captured instead of the intended content. Must be at least 100.
Page Options
Options to modify the page state before taking a screenshot or PDF
scroll_to
Scroll, to either an element or to a pixel offset from the top, before taking a screenshot
scroll_to Examples
scroll_to=#playground
scroll_to=1024
scroll_to=5000
click
Specifies an element selector to click before generating a screenshot or PDF
Example: #clickme would click an element with id="clickme".
Can be used multiple times to simulate multiple sequential click events.
If the selector matches multiple elements, only the first element will be clicked.
click Examples
Minimizing the overlay
Without minimizing the overlay
click_all
Specifies an element selector to click before generating a screenshot or PDF
Example: .clickme would click all elements with class="clickme".
Can be used multiple times to simulate multiple sequential click events.
If the selector matches multiple elements, all elements will be clicked.
click_all Example
Navigate to a Sign-up page, and agree to policies.
hover
Specifies an element selector to hover over before generating a screenshot or PDF
Example: #hoverme would hover over the element with id="hoverme"
hover Examples
Hovering over the ruby-on-rails logo
Without hovering over the ruby-on-rails logo
bg_color
Specify a hex code or CSS color string to use as the background color
Some websites don't set a body background colour, and will show up as transparent backgrounds with PNG, or black when using JPG. Use this setting to set a background colour. If the website explicitly sets a transparent background on the html or body elements, this setting will be overridden.
disable_js
default: false
Turns off javascript on the target URL.
Enabling this option will prevent full_page=true and many other options, because having javascript disabled prevents Urlbox from evaluating code inside the page's context.
disable_js Examples
disable_js=true
disable_js=false
show_certificate_errors
default: false
Shows browser certificate errors for pages with invalid HTTPS certificates. By default, Urlbox ignores certificate errors so pages with expired, self-signed, or otherwise invalid certificates can still render.
Full Page Options
Advanced options to control how Urlbox takes full page screenshots, when full_page=true
full_page_mode
default: stitch
Whether to use scroll and stitch algorithm (the default) to render a full page screenshot, or to use the native full page screenshot algorithm, which is faster, but can be less accurate on some sites.
The available values are:
stitch
native
full_width
default: false
When full_page=true, specify whether to capture the full width of the website, for example if the site is horizontally scrolling.
allow_infinite
By default, when Urlbox detects an infinite scrolling page, it does not attempt to continue scrolling to the bottom, as this could result in infinite scrolling! If you want to override this behaviour, pass true for this option.
skip_scroll
default: false
Enabling skip_scroll will speed up renders by skipping an initial scroll through the page, which is used to trigger any lazy loading elements.
skip_scroll Examples
skip_scroll=true
skip_scroll=false
detect_full_height
Some pages have full-height backgrounds whose heights are set to 100% of the viewport. This can cause the backgrounds to get stretched when making a full page screenshot. If you are seeing this behaviour in your full page screenshots, pass true for this option.
max_section_height
default: 4096
When Urlbox takes a full_page screenshot, the maximum height of each image section is set to 4096 pixels. If a sites height is greater than this value, Urlbox will start splitting the screenshot into sections. Sometimes it is worthwhile experimenting with this number.
scroll_increment
Sets how many pixels to scroll when scrolling the page to trigger lazy loading elements. By default, the scroll increment is set to the browser viewport height. Some pages' lazy loading elements only trigger when the scroll increment is smaller than this, however, e.g. 400px.
scroll_delay
When Urlbox decides to split a screenshot into multiple sections, the scroll delay is the time to wait between taking the screenshots of each individual section, in milliseconds. While Urlbox does detect animations, and attempts to wait for them before taking a screenshot, this option could be used to force Urlbox to wait for a certain amount of time after scrolling to the next section, to wait for things like animations to finish.
Highlighting Options
Options for highlighting a given string on the page. These are useful for either highlighting or hiding (if you use the same foreground and background) words or a given set of characters.
highlight
Specify a string to highlight on the page before capturing a screenshot or PDF. To highlight multiple words, separate words with a pipe character e.g. Hello|World
highlight Example
highlight=urlbox|api
highlightfg
default: white
Specify the text color of the highlighted word.
highlightfg Examples
Using color name
Using rgb
Using rgba
highlightbg
default: red
Specify the background color of the highlighted word.
highlightbg Examples
Using color name
Using rgb
Using rgba
Geolocation Options
Options for the geolocation API.
latitude
Sets the latitude used to emulate the Geolocation API.
latitude Example
latitude=74.006
longitude
Sets the longitude used to emulate the Geolocation API.
longitude Example
longitude=40.7128
accuracy
Sets the accurate of the Geolocation API in metres.
accuracy Examples
accuracy=100
accuracy=5000
Side Render Options
Options for generating side renders: extra artifacts captured from the same page load as your main render, such as the page's HTML, an MHTML snapshot, a markdown conversion, page metadata, extracted content and thumbnails. Side renders don't trigger a second render: everything is produced while the page is already loaded, and each artifact is saved alongside the main render and returned as an extra URL field in the JSON response, so make sure you are using the API or response_type=json to see them. See the side renders guide for a walkthrough.
Side render and thumbnail file sizes count toward your render's output size, which is billed at one render credit per 5MB of file size over the included allowance.
save_markdown
default: false
Converts the rendered page to markdown and saves it alongside the main render, so you can capture a screenshot and an LLM-friendly text version of the page in one request. The JSON response gains a markdownUrl field linking to the saved .md file. To get markdown as the main render itself, use format=md instead.
save_markdown Example
Save a markdown conversion alongside a screenshot
save_html
default: false
Saves the page's rendered HTML alongside the main render. The HTML is captured from the live DOM after the page has finished loading, so it includes any changes made by javascript. The JSON response gains an htmlUrl field linking to the saved .html file.
save_html Example
Save the rendered HTML alongside a screenshot
save_metadata
default: false
Extracts the page's metadata (title, description, author, canonical URL, open graph tags, twitter card tags and other meta tags, along with the requested and resolved URLs) and saves it as a JSON file alongside the main render. The JSON response gains a metadataUrl field linking to the saved file, and the metadata is also returned inline in the metadata field.
save_metadata Example
Save page metadata alongside a screenshot
save_headings
default: false
Extracts every heading (h1-h6) from the page and saves them as a JSON side render. Each entry contains the heading level, its text, and its id when present - useful for building a table of contents or checking a page's structure. The JSON response gains a headingsUrl field linking to the saved file.
save_headings Example
Extract the page's headings
save_tables
default: false
Extracts every HTML <table> on the page and saves them as a JSON side render. Each table contains its cells organised as rows and columns, a flag per row indicating whether it is a header row, and a markdown rendering of the whole table. The JSON response gains a tablesUrl field linking to the saved file.
save_tables Example
Extract tables from a Wikipedia page
save_structured_data
default: false
Extracts structured data embedded in the page, such as JSON-LD / schema.org markup, and saves it as a JSON side render. Each entry contains the data type, the raw JSON and, when detected, the schema type (e.g. Product or Article). The JSON response gains a structuredDataUrl field linking to the saved file.
save_structured_data Example
Extract structured data from a product or article page
save_links
default: false
Extracts every link on the page - resolved to absolute URLs, along with the link text - and adds them to the page metadata under links. The metadata is returned in the metadata field of the JSON response and saved as a JSON side render linked from metadataUrl.
save_links Example
Extract all links from a page
save_clicks
default: false
Records the elements Urlbox clicked automatically during the render - for example the cookie-banner buttons clicked by click_accept - and adds them to the page metadata under clickedOn, including each clicked element's selector, tag name, classes and text. Useful for auditing exactly what was dismissed before your screenshot was taken. The metadata is returned in the metadata field of the JSON response and saved as a JSON side render linked from metadataUrl.
save_clicks Example
Record which cookie banner buttons were clicked
save_cookies
default: false
Saves the cookies set in the browser by the end of the render into the page metadata, as an array of cookie strings under cookies plus a cookiesSaved count. The metadata is returned in the metadata field of the JSON response and saved as a JSON side render linked from metadataUrl.
save_cookies Example
Save the cookies set during the render
save_headers
default: false
Includes the target page's HTTP response headers in the JSON response. By default the response object contains the status code and requested/resolved URLs only; setting save_headers=true adds a headers object containing the headers the target site responded with.
save_headers Example
Include the page's HTTP response headers
save_http_headers
default: false
Alias of save_headers - includes the target page's HTTP response headers in the response.headers field of the JSON response.
save_http_headers Example
Include the page's HTTP response headers
save_resource_info
default: false
Saves a JSON debug artifact listing every resource the page requested during the render - each entry records the URL, HTTP method, resource type, content type, status code, transferred and inflated byte sizes, and encoding. This is the data Urlbox uses to calculate the render's bandwidth. The file is saved to storage alongside the render; its location is not returned in the standard render response, but is visible in the render's details in your dashboard, making this primarily a debugging aid.
save_resource_info Example
Save resource info for debugging a page's requests
save_mhtml
default: false
Saves an MHTML snapshot of the page alongside the main render. MHTML bundles the page and its resources into a single file that can be opened in a browser for offline viewing. The JSON response gains an mhtmlUrl field linking to the saved .mhtml file.
save_mhtml Example
Save an MHTML snapshot alongside a screenshot
thumbnails
Generates up to 5 thumbnails of the main render, resized from the same captured image - no extra render is performed. Applies to image formats (png, jpeg, webp, avif); each thumbnail keeps the main render's format. Because the value is an array of objects, use it with JSON POST requests to the render endpoints.
Each thumbnail object accepts:
key- a name for the thumbnail, up to 10 characters. Used as the file suffix and as the thumbnail'skeyin the response. When omitted, a key is derived from the preset or dimensions (e.g.400,400x300orsm).preset- a named size relative to the main render's dimensions:xs(10%),sm(20%),md(30%),lg(40%),xl(50%),2xl(60%),3xl(70%),4xl(80%),5xl(90%), or the fractions1/4,1/2and3/4.size- sets both the width and height, in pixels. Must be between 10 and 2000.width/height- individual pixel dimensions, each between 10 and 2000. Ignored on an axis where apresetapplies.fit- how the image should be resized to fit the dimensions:cover,contain,fill,insideoroutside(seeimg_fitfor what each does). Defaults to the request'simg_fit, orcover.position- how the image is positioned whenfitiscoverorcontain(seeimg_position).bg- background colour used whenfitleaves empty space, e.g. withcontain. Defaults to the request'simg_bgorbg_color, then black.suffix- overrides the file name suffix used for the thumbnail in storage.presigned_url- an S3 presigned URL to upload this thumbnail to, if you want it delivered straight into your own bucket.
Each thumbnail must resolve to a unique key. The JSON response gains a thumbnails array with one { "key": ..., "location": ..., "size": ... } entry per thumbnail - set thumbnails_object to get them keyed by name instead. Thumbnail file sizes count toward the render's output size for billing, like other side renders.
thumbnails Examples
Generate small, medium and custom-size thumbnails
A square avatar thumbnail with letterboxing
thumbnails_object
default: false
Returns the thumbnails results as an object keyed by each thumbnail's key, instead of an array - so "thumbnails": [{ "key": "small", "location": ..., "size": ... }] becomes "thumbnails": { "small": { "location": ..., "size": ... } }. Useful when you want to look thumbnails up by name rather than position.
thumbnails_object Example
Return thumbnails keyed by name
Storage Options
Options related to storing renders in your own S3-compatible or Azure Blob Storage bucket.
use_s3
Only available on: hifi and above
default: false
Save the render directly to the S3 (or S3-Compatible) bucket configured on your account.
Mutually exclusive with use_azure - a request setting both fails.
s3_path
Only available on: hifi and above
Sets the S3 path, including subdirectories and the filename, to use when saving the render in your S3-compatible bucket.
The extension (e.g. .png, .jpg or .pdf) will be provided automatically, and should not be included in s3_path.
no_suffix
Only available on: hifi and above
By default, urlbox adds the file extension (e.g. .png, .jpg, .pdf etc) to the s3_path (or azure_path).
If no_suffix=true, the file extension will NOT be added to the path.
use_azure
Only available on: hifi and above
default: false
Save the render directly to the Azure Blob Storage container configured on your project. Azure is not S3-compatible, so it has its own credentials (storage account, container and SAS token) and options - see the Azure Blob Storage guide for setup.
Mutually exclusive with use_s3 - a request setting both fails.
azure_path
Only available on: hifi and above
Sets the blob path, including subdirectories and the filename, to use when saving the render in your Azure container - the Azure equivalent of s3_path. Defaults to renders/{year}/{month}/{day}/{renderId}.
The extension (e.g. .png, .jpg or .pdf) will be provided automatically, and should not be included in azure_path.
s3_bucket
Only available on: hifi and above
Overrides the configured bucket to use when saving the render.
s3_endpoint
Only available on: hifi and above
You can change the endpoint URL to use an S3 compatible storage provider e.g. DigitalOcean Spaces, Minio, Wasabi, Cloudflare R2 and more.
s3_region
Only available on: hifi and above
Override the configured S3 region when saving the render.
cdn_host
Only available on: hifi and above
If your custom bucket is fronted by a CDN, you can set the host name here.
s3_storageclass
Only available on: hifi and above
default: standard
Sets the s3 storage class.
The available values are:
standard
standard_ia
reduced_redundancy
onezone_ia
intelligent_tiering
glacier
deep_archive
outposts
LLM Options
Options related to LLM usage.
use_llm
Only available on: ultra and above
Use the LLM configuration setup in your project settings, or those passed into the request.
llm_prompt
Only available on: ultra and above
The prompt to give the LLM EG "Analyse this image and its associated HTML, giving me back a summary of what the website contents are and a list of all of the links it has "
llm_system_prompt
Only available on: ultra and above
This can be used to provide more overall context for the AI's response.
llm_key
Only available on: ultra and above
The API access key for the given LLM provider.
llm_provider
Only available on: ultra and above
The LLM provider to use.
The available values are:
anthropic
openai
google
azure
mistral
cohere
amazon-bedrock
google-vertex
groq
xai
deepseek
perplexity
togetherai
fireworks
cerebras
openrouter
llm_model
Only available on: ultra and above
The LLM model to use for the given provider. E.g. 'gpt-5.1' for OpenAI, 'claude-sonnet-4-5-20250929' for Anthropic.
llm_temperature
Only available on: ultra and above
The temperature (creativity) for the LLM prompt. Defaults to 0 for less creative responses.
llm_max_tokens
Only available on: ultra and above
The max number of output tokens the LLM can generate a response with. Defaults to 1000.
llm_height
Only available on: ultra and above
The height of the thumbnail image that is sent to the LLM. Defaults to 512.
llm_width
Only available on: ultra and above
The width of the thumbnail image that is sent to the LLM. Defaults to 512.
llm_base_url
Only available on: ultra and above
Override the default API endpoint for the LLM provider. Useful for proxies, self-hosted models, or custom endpoints.
llm_azure_resource_name
Azure OpenAI resource name. Used to construct the endpoint URL: https://{resourceName}.openai.azure.com/
llm_azure_api_version
Azure OpenAI API version. Required when using deployment URLs. E.g. '2024-02-15-preview'.
llm_azure_use_deployment_urls
Use legacy Azure deployment URL format. Useful for compatibility with certain Azure OpenAI models or deployments that require the legacy endpoint format.
llm_aws_region
AWS region for Amazon Bedrock. Defaults to 'us-east-1'.
llm_aws_access_key_id
AWS access key ID for Amazon Bedrock authentication.
llm_aws_secret_access_key
AWS secret access key for Amazon Bedrock authentication.
llm_aws_session_token
Optional AWS session token for temporary credentials with Amazon Bedrock.
llm_gcp_project
Google Cloud project ID for Google Vertex AI.
llm_gcp_location
Google Cloud region for Vertex AI. Defaults to 'us-central1'.
llm_gcp_service_account_json
Google Cloud service account JSON key for Vertex AI authentication. Pass the entire JSON key file contents as a string.
llm_full_response
Only available on: ultra and above
Return the full LLM response including usage statistics and metadata, rather than just the text content.
llm_output
Only available on: ultra and above
You can provide a structured output type and schema to Urlbox, and we will prompt your LLM to give back that response structure. By passing an llm_schema without this option, it will default to responding with an object specified by your JSON Schema. If you choose Array, the response will be an array of your provided JSON Schema. If you choose enum, you can provide an array of strings as your schema, and your LLM will respond only with a value from that enum.
The available values are:
object
array
enum
llm_schema
Only available on: ultra and above
This is the JSON schema or string[] provided which we will pass over to your LLM. Your LLM provider will respond with a structured output (if supported by your provider) according to that schema. Please take a look at the various resources on the JSON Schema website for more information on designing and validating a JSON schema.