---
title: "Render an email preview"
url: https://docs.gleap.ai/en/reference/rest-api/render-email-preview
method: POST
path: "/engagement/emails/render-preview"
api: "API Reference"
tag: "Engagement Email"
operationId: "RenderEmailPreview"
updatedAt: "2026-11-01T18:40:15.677Z"
language: en
---

# Render an email preview

`POST https://api.gleap.io/v3/engagement/emails/render-preview`

Render an email the way a recipient gets it, from unsaved editor values: `emailStyle` (plain, personal or company), `subject`, `preheader`, `message` (TipTap JSON, or `{ localized: { <lang>: doc } }`), optional `sender` (a teammate id, or `{ customSenderName }`), `lang` and `brand` (unsaved `emailBrand` values). The current user is the sample recipient and variables resolve with their values. Nothing is stored or sent.

## Authorization

- `Authorization` (header, required): `Bearer <token>`

## Headers

- `project` (string, required)

## Request body (`application/json`, required)

- `emailStyle` (string, required)
- `subject` (any)
- `preheader` (any)
- `message` (any): TipTap document, or `{ localized: { <lang>: document } }`.
- `sender` (string | object): A teammate id, or `{ id?, customSenderName? }`. Defaults to the current user.
- `lang` (string)
- `brand` (any): Unsaved `emailBrand` values from the brand settings page.
- `emailCategory` (enum<string>): Conversational emails show no unsubscribe line. Defaults to marketing (a newsletter). One of: `conversational`, `marketing`.

## Example request

```bash
curl --request POST \
  --url https://api.gleap.io/v3/engagement/emails/render-preview \
  --header 'Authorization: Bearer <token>' \
  --header 'project: <project>' \
  --header 'Content-Type: application/json' \
  --data '{
  "emailStyle": "<emailStyle>",
  "emailCategory": "conversational"
}'
```

## Responses

### 200 (`application/json`)

Ok

- `sizeBytes` (number<double>, required)
- `text` (string, required)
- `html` (string, required)

```json
{
  "sizeBytes": 0,
  "text": "string",
  "html": "string"
}
```
