---
title: "List versions"
description: "Every revision, newest first, with the declared keys each one expects."
url: "https://openemail.uk/docs/api/templates/versions"
area: "API"
category: "Mailbox"
---

# List versions

Every revision, newest first, with the declared keys each one expects.

`GET /templates/{id}/versions`

## GET /templates/{id}/versions

Every revision, newest first, with the declared keys each one expects.

## Example

Needs `templates:read`. Bodies are left out here; read one version through the template itself.

**curl**

```
curl "$OE/templates/order-shipped/versions" -H "$AUTH"
```

**Response**

```
{
  "object": "list",
  "data": [
    {
      "object": "template_version",
      "id": "tplv_5d31c2a8…",
      "templateId": "tpl_9c1f0a4b7e05d3862c1f0a44",
      "version": 4,
      "state": "draft",
      "engine": "html",
      "subject": "Order {{orderId}} is on its way",
      "slots": [],
      "props": [{ "key": "orderId", "kind": "text", "required": true, "default": null }],
      "publishedAt": null,
      "createdAt": "2026-08-28T16:03:10.000Z"
    }
  ]
}
```

> This is the call that answers "what did we actually send in June". `props` is versioned with the body, so an old message can be read against the keys that were declared at the time rather than against today’s.
