Real client captures, not simulations.
Every preview is your email opened in an actual copy of the client and device, then screenshotted. No CSS transforms, no browser emulation: the image you get is what a subscriber on that client sees.
Render your real email across 50+ real email clients and devices via REST: create a spam-check, send the message, request the previews for that test, then read back pixel-accurate renders as JSON, each captured from a live client in light and dark mode. The same renders are exposed as MCP tools, so AI agents can run an email rendering test in plain language.
Every preview is your email opened in an actual copy of the client and device, then screenshotted. No CSS transforms, no browser emulation: the image you get is what a subscriber on that client sees.
Each of the 50+ clients renders in both modes, so one call returns 100+ images and the inverted logo or unreadable dark-mode text shows up in your pipeline, not in production.
Pass devices with keys from the catalog to render only the clients you care about (just iOS Mail, just every Outlook), or omit it for the full set. Newly requested devices come back pending; poll until each is completed.
The preview endpoints ship as MCP tools (create_client_preview, list_client_preview_devices) on the Unspam MCP server, so Claude, Cursor, or any MCP client can pull real client renders mid-conversation.
Real client screenshots as JSON: one entry per device, each captured from a live client in light and dark mode.
POST /client-previews with email_source set to spam-check and the test id as source_id starts the renders. GET /client-previews/{id} then returns a top-level status and a previews[] array with one entry per device: device_key, device_name, per-device status, and URLs for the original and thumbnail renders.
original and thumbnail stay null until that device flips to completed, so a simple poll loop drains the whole set. Most devices land within about a minute.
GET /client-preview-devices lists every renderable client with its device_key, display name, and category (DESKTOP, MOBILE, WEB). Cache it, show it in your own UI, or use it to build the devices filter for the render call.
Filtering is about signal, not quota: one preview request spends one device preview whatever the number of devices, so a CI job that runs on every template change can render just the three Outlook versions it cares about and review only those.
Connect the Unspam MCP server over OAuth and your assistant gets the preview tools next to spam checks and inbox placement. Ask it to render the campaign and flag anything broken in Outlook dark mode, and it chains the calls itself.
MCP support means your agent workflows can check renders from real clients without a human opening a dashboard.
Previews ride on the spam-check flow: create a test, send your email to the inbox address we return, request the previews for that test, then read the renders per device.
POST /ext/v2/spam-check with your bearer token. The 201 response hands back a test id and a unique inbox_address.
From your transactional pipeline, marketing platform, or a CI step. The exact message your audience would receive is what gets rendered.
POST /ext/v2/client-previews with email_source set to spam-check and the test id as source_id, then poll GET /ext/v2/client-previews/{id} on a back-off while devices are pending; URLs appear as each one completes.
Pull the catalog from GET /ext/v2/client-preview-devices and pass devices in the POST body to render a subset. The same test also serves /screenshots and /heatmap if you want the visual extras.
Integration, device filtering, MCP access for AI agents, and how the preview endpoints behave.
POST /ext/v2/spam-check returns an inbox_address; you send the real email there; then POST /ext/v2/client-previews with email_source set to spam-check and the test id as source_id starts the renders, and GET /ext/v2/client-previews/{id} returns one entry per device with per-device status and image URLs. Devices complete independently, so poll until the set you need is completed. To preview HTML you have not sent, set email_source to raw-data and pass a subject and body instead.devices in the POST /ext/v2/client-previews body with keys from GET /ext/v2/client-preview-devices to render a subset, for example only iOS Mail or only the Outlook family. A preview request spends one device preview from your allowance whatever the number of devices, so scoping changes what comes back, not what it costs.create_client_preview, list_client_previews and list_client_preview_devices, next to the spam-check and inbox-placement tools. Connect Claude, Cursor, or ChatGPT over OAuth and ask for renders in plain language; no keys to paste./spam-check/{id}/screenshots returns three viewport renders (desktop, tablet, mobile) of the message. POST /client-previews renders the email inside 50+ real client applications, each in light and dark mode, so it catches client-specific breakage like the Outlook Word engine or a dark-mode logo inversion.API access is included with the Custom plan, bought online from a $5 monthly minimum. Build it into your own product and resell it under your own brand.
See pricing