> ## Documentation Index
> Fetch the complete documentation index at: https://developers.redo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# emailTemplate

> Fetch a single email template by its id. Ids from earlier versions of the Redo API are also accepted.

**Required scopes:** [`marketing_templates_read`](/docs/api-reference/v3/reference/scopes#scope-marketing_templates_read)

## Arguments

<ResponseField name="id" type="ID!" required>
  The template's `id`, or its `legacyId` from an earlier version of the Redo API.
</ResponseField>

## Returns

<ResponseField name="emailTemplate" type={<a href="/docs/api-reference/v3/reference/marketing/email-template">EmailTemplate</a>}>
  The content of an email, as the merchant authored it.

  <Expandable title="fields" lazyRender>
    <ResponseField name="contentBackgroundColor" type="String!" required>
      The content canvas background, as set under Email styles in the email builder.
    </ResponseField>

    <ResponseField name="createdAt" type={<a href="/docs/api-reference/v3/reference/common/date-time">DateTime!</a>} required>
      When the template was created.
    </ResponseField>

    <ResponseField name="emailBackgroundColor" type="String!" required>
      The email background, as set under Email styles in the email builder.
    </ResponseField>

    <ResponseField name="id" type="ID!" required>
      The id of this template.
    </ResponseField>

    <ResponseField name="legacyId" type="String!" required>
      The template's legacy Mongo ObjectId (24-char hex) from before the CockroachDB migration.
    </ResponseField>

    <ResponseField name="linkColor" type="String">
      The default link color, as set under Email styles in the email builder. Null when the merchant left it unset.
    </ResponseField>

    <ResponseField name="name" type="String!" required>
      The merchant-facing name of the template.
    </ResponseField>

    <ResponseField name="preview" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-preview">EmailTemplatePreview</a>}>
      Render this template, to see what recipients get. Use a width of about 375 for a phone.

      **Requires:** [`marketing_templates_read`](/docs/api-reference/v3/reference/scopes#scope-marketing_templates_read)

      <Expandable title="fields" lazyRender>
        **Arguments**

        <ResponseField name="eventId" type="ID">
          Render with this recent event's data instead of sample data: a 24-character hex event id. A well-formed id that can't be found falls back to sample data.
        </ResponseField>

        <ResponseField name="width" type="Int">
          Viewport width of the screenshot, 320-1200 pixels.
        </ResponseField>

        **Fields**

        <ResponseField name="height" type="Int">
          The screenshot's full height in pixels.
        </ResponseField>

        <ResponseField name="html" type="String!" required>
          The rendered email HTML, as a recipient's client would receive it.
        </ResponseField>

        <ResponseField name="imageUrl" type="String">
          A link to a full-length PNG screenshot at the requested width. It expires after an hour.
        </ResponseField>

        <ResponseField name="width" type="Int">
          The screenshot's width in pixels.
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="previewText" type="String">
      The preview text shown after the subject in an inbox. Null when the merchant left it unset.
    </ResponseField>

    <ResponseField name="sections" type={<a href="/docs/api-reference/v3/reference/marketing/email-template-section">[EmailTemplateSection!]!</a>} required>
      The blocks that make up the email body, in order. Nested column children keep their own ids. A type this API version does not model field-by-field is returned as EmailTemplateUnknownSection.
    </ResponseField>

    <ResponseField name="sectionsJson" type={<a href="/docs/api-reference/v3/reference/common/json">[JSON!]!</a>} required>
      `sections` with every field selected, as JSON: one element per root block, in order, with `__typename` and nested column children. Empty or unreadable stored sections are \[]. Edits go through operations.
    </ResponseField>

    <ResponseField name="subject" type="String!" required>
      The subject line **as authored**, before per-recipient substitution. A subject containing `{{ }}` placeholders is filled in per customer at send time, and some sends prepend a prefix, so this is not necessarily the subject any one customer saw. Empty when the template has no subject of its own.
    </ResponseField>

    <ResponseField name="trigger" type={<a href="/docs/api-reference/v3/reference/marketing/marketing-trigger">MarketingTrigger!</a>} required>
      The trigger context this template is valid for. Immutable after create. UNKNOWN when the stored trigger is not modeled in this API version.
    </ResponseField>

    <ResponseField name="updatedAt" type={<a href="/docs/api-reference/v3/reference/common/date-time">DateTime!</a>} required>
      When the template was last edited. Templates stay editable after the campaigns that used them have finished, so compare this against a campaign's `finishedAt` to tell whether the content here is still what that campaign actually sent.
    </ResponseField>
  </Expandable>
</ResponseField>

## Example

```graphql theme={null}
query {
  emailTemplate(id: "...") {
    contentBackgroundColor
    createdAt
    emailBackgroundColor
    id
    legacyId
    linkColor
    name
    previewText
    # ...
  }
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.