Skip to main content
Device Preview renders your template on real email clients and returns a screenshot from each one. Every screenshot comes from the real app, such as Outlook on Windows, not a simulation. You can run a preview two ways:
  • In the editor: check a template while you design it. Pick a set of clients in Design Studio, run the preview, and fix what breaks before you publish.
  • With the API: run the same previews from code. An AI agent can preview a template, review the screenshots, and fix what it finds. You can also show the screenshots in your own product, such as next to an email editor your customers use.
Both share the same target sets and history, so a run started from either one shows up in the editor.
A Device Preview run showing one email rendered on Apple Mail, Gmail, and Outlook, in light and dark mode

A Device Preview run across desktop, mobile, and webmail clients


Run a preview in the editor

Open a template in and click the device icon in the toolbar. Previews render whatever is in the editor right now, including unpublished changes. Choose a target set, the group of clients you want to render on. Every workspace starts with Courier Recommended, an 8-client set spanning desktop, mobile, and webmail in both light and dark mode. Build your own from the full catalog. If your template is , choose which translation to render. Set test values for any variables, such as profile.name.
A variable without a test value renders as nothing, so a greeting reads “Hi , your order has shipped.” That’s the most common reason a preview looks broken when the template is fine.
Click Run preview. Screenshots load as they return, and a full run takes 10 to 120 seconds. Outlook clients are often the last to come back.

Review the results

Click a screenshot to open it full size, then use the arrows to move through the run. Download any screenshot from the results page.

Find past runs

Click Preview history for past runs, including runs started from the API. Each shows when it ran, how many clients it covered, and which template version it rendered. Use it to see whether a rendering problem is new or shipped several versions ago.

Build a target set

Create your own target sets to focus on the variations you care about. You might keep one for Outlook versions, another for dark mode across mobile, and a third for the clients most of your users are on. Open the Targets dropdown and click Create new set. Name it, filter the catalog by Mobile, Web, or Application, then add the clients you want. Use the pencil icon to edit a set later. Sets are shared with your workspace and scoped to the you’re in. The API calls them device sets, and calls each client a device.

Run a preview with the API

The API runs the same previews as the editor: start a run on a template, check it until every device has reported, then download the screenshots. The template must be a Design Studio template with an email channel. Runs use the API key’s environment, the same way target sets do.

Start a run

List your device sets with and take the id of the set named Courier Recommended. Every workspace has one, with its own ID in each environment, so look it up by name:
Start the run with . Send an Idempotency-Key so a retried request returns the same run instead of starting a second one. Use a new key for each run: a repeated key within 25 hours returns the earlier run. Pass test values in data:
  • data.profile fills {{profile.*}} variables, such as {{profile.name}}.
  • data.tenant fills {{tenant.*}} variables, such as {{tenant.name}}.
  • Every other key fills your template’s own data variables, such as order_id.
The run comes back right away with status PENDING and the devices it will render on:
It renders the latest draft unless you pass template_version: published for the live version, or a published version such as v002. A locale renders that translation.

Get the results

A run takes 10 to 120 seconds, and screenshots come back one device at a time. Read the run with every 10 seconds, for up to 5 minutes.
Each device has its own entry in results, in no fixed order, so match entries by device_id. A finished device carries a screenshot_url and a thumbnail_url, and one still rendering has both set to null. This run was read partway through, with 2 of its 8 results shown:
The run is done when its status is COMPLETED or FAILED. Each device settles on its own, and one device failing doesn’t fail the run: This loop checks every 10 seconds for up to 5 minutes, then prints each device’s screenshot:
Download screenshots when you read the run. screenshot_url and thumbnail_url are temporary signed links, so read the run again for fresh ones later. Most screenshots are PNG files, but check each file’s Content-Type rather than its extension.

Check email previews with an AI agent

An agent can run a preview, read the screenshots, and fix what it finds. Connect it through the when it works in a chat or code editor, or have it call the API above when it runs in your own code or CI. With MCP, ask for the preview and the review in one prompt:
Ask it to check for blank gaps from missing variables, copy that doesn’t match its section, broken images, Outlook layout breaks, mobile stacking, dark mode contrast, and the subject line.

Customize the devices

Courier Recommended covers the common clients. To focus on others, list the full catalog with . Each device has a pvd_ ID and fields to filter on: category, app, platform, os, os_version, and theme. For a one-off run, pass device_ids instead of device_set_id. Send exactly one of the two. To reuse a list, save it with . It shows up in the editor’s Targets dropdown too:
replaces a set’s name and devices in full. archives it, and runs that used it keep their own copy of its devices. Courier Recommended can’t be changed, so copy its devices into your own set to adjust them.

Errors

Courier checks a run request before the run exists, so a rejected request isn’t billed.

Preview HTML you already have

You don’t need to send through Courier to use Device Preview. Bring the HTML email you send from any platform, turn it into a template, and preview it like any other. In the editor, create an email template, open the , paste your markup, and run a preview. With the API, create the template with . Put a meta element for the subject and an html element for the markup inside the email channel. Reference test values by name, such as {{profile.name}} and {{order_id}}:
Then start a run on the new template’s id.

Pricing

Device Preview is a paid monthly add-on. Enable it in the console under Settings → Billing. Each device in a run is one preview. The add-on comes in three tiers. Each includes a set number of previews per month, and anything beyond that is billed per preview. Included previews reset each month and don’t roll over.

Supported clients

A client is one combination of app, device, OS, browser, and color mode. The tables below list the current catalog, and always returns the latest one as new devices and OS versions are added.

Desktop applications

Mobile applications

Webmail

Limits & behavior

  • Each run records the version it rendered. That’s the published version if your draft matches it, or draft if the draft has unpublished changes.
  • Preview history is kept for one year. Runs can’t be cancelled or deleted.
  • Screenshots vary by client. Some show the full inbox, others only the email body.