---
title: "Template REST API"
slug: "template-rest-api"
abstract: "Describes the object attributes used in the Sitecore Personalize Template REST API."
---
# Template REST API

The Template REST API enables you to perform CRUD operations on web templates and decision templates. Offers and offer templates are not available in Sitecore Personalize REST APIs.

Use the following attributes for templates:

| Attribute | Type | Description | Example(s) |
| --- | --- | --- | --- |
| `name` | string | The name of the template. | `"Alert bar template"` |
| `friendlyId` | string | The unique ID of the template.<br><br>Only lowercase alphanumeric characters and underscores are allowed. | `"alert_bar_template_1"` |
| `type` | string enum (uppercase) | The type of the template. | Must be one of:<br><br><ul><li>`"WEB"`</li><li>`"DECISION"`</li><li>`"CONDITION"`</li><li>`"JS_MODULE"`</li></ul> |
| `status` | string enum (uppercase) | The current status of the template. | Must be one of:<br><br><ul><li>`"DRAFT"`</li><li>`"PUBLISHED"`</li></ul> |
| `description` | string | The description of the connection. | `"Alert bar web template"` |
| `render` | boolean | Determines whether to render a preview of the web template in the Sitecore Personalize app.<br><br>Only set this to `true` if you're confident that your web template can render.<br><br>Do not set this to `true` for more sophisticated web templates that use handlebars loops. | `true, false` |
| `defaultTemplate` | boolean | Determines whether this is a default template.<br><br>When you create a template, you must set this value to `false`. | `false` |
| `customTemplate` | boolean | Determines whether this is a custom template.<br><br>When you create a template, you must set this value to `true`. | `true` |
| `templateElements`<br><br>optional | JSON array of JSON objects | Custom HTML, CSS, JavaScript, and FreeMarker codes that define the template.<br><br>The codes can contain template parameters, for example, `[[ProductType \| string]]`. Template parameters are replaced with template variable values, for example, `sneakers`, when the template is rendered. | `"mys3cr3tstr1ingforauth1!x"` |
| `archived` | boolean | The archive status of the flow definition. | `true, false` |
| `revisions` | JSON array of JSON objects | An array of revisions of the flow definition. | `"mys3cr3tstr1ingforauth1!x"` |
| `revision` | integer | The sequential number of the template revision. | `2` |

The optional `templateElements` array of objects lets you include HTML, CSS, JavaScript, and FreeMarker codes in your templates. For the objects in `templateElements`, use the following attributes:

| Attribute | Type | Description | Example(s) |
| --- | --- | --- | --- |
| `id` | string enum (lowercase) | The type of code that you include in the `template` attribute.<br><br>For example, to include CSS code in the template, set this value to `"css"`, then specify the custom CSS code in the `template` attribute. | Must be one of:<br><br><ul><li>`"html"`</li><li>`"css"`</li><li>`"js"`</li><li>`"freemarker"`</li></ul> |
| `template` | string | Stringified HTML, CSS, JavaScript, or FreeMarker code.<br><br>For FreeMarker code, you must at a minimum include an opening and a closing curly bracket `{}`. | <ul><li>HTML: `"<div id=\"test\">My test div</div>"`</li><li>CSS: `"#test {text-transform: uppercase}"`</li><li>JavaScript: `"insertHTMLBefore(\"body\");"`</li><li>FreeMarker: `"{}"`</li></ul> |

Here's an example of the `templateElements` array of objects:

```json
"templateElements": [
  {
    "id": "html",
    "template": "<div id=\"test\">My test div</div>"
  },
  {
    "id": "css",
    "template": "#test {text-transform: uppercase}"
  },
  {
    "id": "js",
    "template": "insertHTMLBefore(\"body\");\n\nconst testDiv = document.querySelector(\"#test\");\ntestDiv.insertAdjacentHTML(\"afterbegin\", \"<p>Hello from JavaScript</p>\")"
  },
  {
    "id": "freemarker",
    "template": "{}"
  }
]

```