Email Templates
Email Template Endpoint Reference
Every new email in Marketo is initially based on an email template. Although you can later unlink an email from its template by replacing the HTML, you must select a template when creating the email.
Templates are HTML documents with metadata such as a name and description. The template HTML must be valid and contain at least one editable section that meets the editable section requirements.
Query
Email templates support the standard asset query patterns: by id, by name, and by browsing a folder.
By Id
GET /rest/asset/v1/emailTemplate/{id}.json
{
"success": true,
"warnings": [ ],
"errors": [ ],
"requestId": "14f9e#14a12955df1",
"result": [
{
"id": 19,
"name": "aFgSxuZrBI",
"description": "fUMhVfIyVkhHzRolYzjGyWouTMfjXCPIAZxHMAEmszAjguVKDtbznEeqbqiDuNBzQoHwBJFdXiMzYiMlGUwtuklUhjGfJlDbhaTL",
"createdAt": "2014-11-14T02:41:26Z+0000",
"updatedAt": "2014-11-14T02:41:26Z+0000",
"folder": {
"type": "Folder",
"value": 15
},
"status": "Draft",
"workspace": "Default"
}
]
}
By Name
GET /rest/asset/v1/emailTemplate/byName.json?name=Test Template
{
"success": true,
"warnings": [ ],
"errors": [ ],
"requestId": "14f9e#14a12955df1",
"result": [
{
"id": 19,
"name": "aFgSxuZrBI",
"description": "fUMhVfIyVkhHzRolYzjGyWouTMfjXCPIAZxHMAEmszAjguVKDtbznEeqbqiDuNBzQoHwBJFdXiMzYiMlGUwtuklUhjGfJlDbhaTL",
"createdAt": "2014-11-14T02:41:26Z+0000",
"updatedAt": "2014-11-14T02:41:26Z+0000",
"folder": {
"type": "Folder",
"value": 15
},
"status": "Draft",
"workspace": "Default"
}
]
}
Browse
GET /rest/asset/v1/emailTemplates.json
{
"success":true,
"warnings":[ ],
"errors":[ ],
"requestId":"33c4#14a1832b4a8",
"result":[
{
"id":18,
"name":"AAA0unit3CreateTestEmailTemplateName.2314673e-7bc2-47da-a1e8-66dfdd8a1f1d",
"description":"AssetAPI: getTemplates test",
"createdAt":"2014-11-03T19:52:58Z+0000",
"updatedAt":"2014-11-03T19:52:58Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
},
{
"id":177,
"name":"ABfRGutnwN",
"description":"HMmHkdTRrGaRpPakdgGKICxfMunCEWDUWiThgAbInfaBXxGxSFfjKQIwerngCHRlGTnAJhKPmwlXLcsjGPtWEiILGyeIJTNVHoHg",
"createdAt":"2014-11-20T19:31:06Z+0000",
"updatedAt":"2014-11-20T19:31:06Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
},
{
"id":148,
"name":"ADVHJBQLyw",
"description":null,
"createdAt":"2014-11-20T06:42:57Z+0000",
"updatedAt":"2014-11-20T06:42:57Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
},
{
"id":201,
"name":"AIpwuwiaqb",
"description":null,
"createdAt":"2014-11-25T20:49:06Z+0000",
"updatedAt":"2014-11-25T20:49:06Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
},
{
"id":240,
"name":"aqZGoAskEF",
"description":"uOMEhLpXOEWkwdZxkpcdDjTjKfokxuHEYHPVIVsADFIUEUobzIEaDiqFFxezwfovGfwjuPTJRxUmuHmGpyIklJdDdVosPJdyOVom",
"createdAt":"2014-11-26T21:11:56Z+0000",
"updatedAt":"2014-11-26T21:11:56Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
},
{
"id":199,
"name":"BAxnkVfLGi",
"description":"TzUMQKzKXdgukNCCcaiJHUWASceqlZswhCqDQFDFZULqzYkEiyKcwtQRzKERynReqtMHOhqjnhExCsZopyfzglmXAOjEJdxNURCX",
"createdAt":"2014-11-25T20:49:06Z+0000",
"updatedAt":"2014-11-25T20:49:06Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
},
{
"id":278,
"name":"bcBNCUIHrL",
"description":"UJEPYBRGTSYosZRnMnahMyVtdyxjRpzJMSXyncATKwcLlDAqDnSCFezGVsDZFpZwPzQvBlvaOZzOzBIsIAtqIerZhJFfpqMogoiB",
"createdAt":"2014-11-30T11:30:07Z+0000",
"updatedAt":"2014-11-30T11:30:07Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
}
]
}
Template queries return only record metadata. Use the content endpoint to retrieve template content.
Create and Update
To create or update a template, send the HTML document in a multipart/form-data POST request. The Content-Type header must include a boundary as described in the RFCs for multipart and multipart/form-data.
Creating a template requires these parameters:
name: The template name.folder: The parent folder.content: The HTML document. ItsContent-Dispositionheader must include the conventionalfilenameparameter.
You can also include an optional description parameter.
POST /rest/asset/v1/emailTemplates.json
Content-Type: multipart/form-data; boundary=mktoBoundary1480963323998
--mktoBoundary1480963323998
Content-Disposition: form-data; name="name"
Sample Email Template
--mktoBoundary1480963323998
Content-Disposition: form-data; name="folder"
{"id":15,"type":"Folder"}
--mktoBoundary1480963323998
Content-Disposition: form-data; name="content"; filename="testHTML.html"
Content-Type: text/html
<html>
<body>
<h1>TEST HTML</h1>
</body>
</html>
--mktoBoundary1480963323998
Content-Disposition: form-data; name="description"
Create email template using API
--mktoBoundary1480963323998--
{
"success": true,
"warnings": [ ],
"errors": [ ],
"requestId": "a99f#14e22b2b85e",
"result": [
{
"id": 1022,
"name": "Sample Email Template",
"description": "Create email template using API",
"createdAt": "2015-06-23T23:13:34Z+0000",
"updatedAt": "2015-06-23T23:13:34Z+0000",
"url": "https://app-abm.marketo.com/#ET1022B2ZN12",
"folder": {
"type": "Folder",
"value": 15,
"folderName": "Templates"
},
"status": "draft",
"workspace": "Default",
"version": 1
}
]
}
To update template content, call the content endpoint with the email template ID. The request body accepts only the content parameter.
The submitted content completely replaces the existing template content. Updating an approved version creates a new draft. Updating a draft-only asset replaces the current draft.
POST /rest/asset/v1/emailTemplate/{id}/content.json
Content-Type: multipart/form-data; boundary=mktoBoundaryEiJFFFPFKK2WovsT
--mktoBoundaryEiJFFFPFKK2WovsT
Content-Disposition: form-data; name="content"; filename="testHTML2.html"
Content-Type: text/html
<html>
<body>
<h1>TEST HTML WITH UPDATE</h1>
<div class="mktEditable"></div>
</body>
</html>
--mktoBoundaryEiJFFFPFKK2WovsT--
{
"success": true,
"warnings": [ ],
"errors": [ ],
"requestId": "f8e2#158d0ae24f8",
"result":[
{
"id":1022,
"status":"Draft",
"content":"<html>\n<body>\n<h1>TEST HTML WITH UPDATE</h1>\n<div class="mktEditable"></div>\n</body>\n</html>"
}
]
}
Update Metadata
To update a template’s metadata, send an application/x-www-form-urlencoded POST request with the name and description parameters.
POST /rest/asset/v1/emailTemplate/{id}.json
Content-Type: application/x-www-form-urlencoded
description=Updated description&name=New Name
{
"success": true,
"warnings": [ ],
"errors": [ ],
"requestId": "17ca5#14a12ab900a",
"result": [
{
"id": 19,
"name": "New Name",
"description": "Updated description",
"createdAt": "2014-11-14T02:41:26Z+0000",
"updatedAt": "2014-11-14T02:41:26Z+0000",
"folder": {
"type": "Folder",
"value": 15
},
"status": "Draft",
"workspace": "Default"
}
]
}
Approval
Email templates follow the standard asset approval lifecycle. Separate endpoints let you approve a draft, unapprove an approved version, or discard an existing draft.
Approve
The approval endpoint validates the template against the rules for Marketo emails. The from name, from email, reply-to email, and subject must be populated before approval.
POST /rest/asset/v1/emailTemplate/{id}/approveDraft.json
{
"success":true,
"warnings":[ ],
"errors":[ ],
"requestId":"abe2#14a1832a97d",
"result":[
{
"id":338,
"name":"lvAVYMZqPS",
"description":"fZLJQSJRvnYbjGTUpIHHqDOuQgQzXQcWIXoOUPwrVLdMHKcbRqwLoSLkWZTUmaMiCIJSfQiufnnrgITUIqjuAPBLpmliiKuIUFYG",
"createdAt":"2014-12-05T02:06:21Z+0000",
"updatedAt":"2014-12-05T02:06:21Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Approved",
"workspace":"Default"
}
]
}
Unapprove
Use the unapprove endpoint only on an approved template.
POST /rest/asset/v1/emailTemplate/{id}/unapprove.json
{
"success":true,
"warnings":[ ],
"errors":[ ],
"requestId":"17bfa#14a1832b3c4",
"result":[
{
"id":344,
"name":"LkilkvKrkp",
"description":"yAyUEXuWMtdhpODUmnCkGjpBcyEKnYucxaSoTyYeQzyNbYanxCXWPOzwiIWmeXPUwjfGAUmgnxlhgOPluVqwNittuvxJmNTaHxYM",
"createdAt":"2014-12-05T02:06:23Z+0000",
"updatedAt":"2014-12-05T02:06:23Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
}
]
}
Discard
Updating an approved template creates a draft version. Use the discard endpoint to discard that draft.
POST /rest/asset/v1/emailTemplate/{id}/discardDraft.json
{
"success":true,
"warnings":[ ],
"errors":[ ],
"requestId":"17bfa#14a1832b3c4",
"result":[
{
"id":344,
"name":"LkilkvKrkp",
"description":"yAyUEXuWMtdhpODUmnCkGjpBcyEKnYucxaSoTyYeQzyNbYanxCXWPOzwiIWmeXPUwjfGAUmgnxlhgOPluVqwNittuvxJmNTaHxYM",
"createdAt":"2014-12-05T02:06:23Z+0000",
"updatedAt":"2014-12-05T02:06:23Z+0000",
"folder":{
"type":"Folder",
"value":15
},
"status":"Draft",
"workspace":"Default"
}
]
}
Delete
POST /rest/asset/v1/emailTemplate/{id}/delete.json
{
"success":true,
"warnings":[ ],
"errors":[ ],
"requestId":"15cef#149d3de83db",
"result":[
{
"id":12
}
]
}
Clone
To clone an email template, send an application/x-www-form-urlencoded POST request with these parameters:
name: Required. The cloned template name.folder: Required. An embedded JSON object withidandtype.description: Optional. The cloned template description.
POST /rest/asset/v1/emailTemplate/{id}/clone.json
Content-Type: application/x-www-form-urlencoded
name=Sample Template 01 - deverly&folder={"id":12,"type":"Folder"}&description=This is a sample template
{
"success": true,
"warnings": [],
"errors": [],
"requestId": "905e#14e22c693f8",
"result": [
{
"id": 1024,
"name": "Sample Template 01 - deverly",
"description": "This is a sample template",
"createdAt": "2015-06-23T23:35:16Z+0000",
"updatedAt": "2015-06-23T23:35:16Z+0000",
"url": "https://app-abm.marketo.com/#ET1024B2ZN12",
"folder": {
"type": "Folder",
"value": 12,
"folderName": "Templates"
},
"status": "draft",
"workspace": "Default"
}
]
}
Query Email Dependencies
Use the Get Email Template Used By endpoint to retrieve emails that depend on a template. The id path parameter identifies the parent email template.
The endpoint supports two optional pagination parameters:
maxReturn: Limits the number of results. The default is 20, and the maximum is 200.offset: Works withmaxReturnto page through large result sets. The default is 0.
GET /rest/asset/v1/emailTemplates/{id}/usedBy.json
{
"success": true,
"errors": [],
"requestId": "18b0#16fa3344169",
"warnings": [],
"result": [
{
"id": 1022,
"name": "EmailPr.Email2",
"type": "Email",
"status": "approved",
"updatedAt": "2019-12-02T00:42:21Z+0000"
},
{
"id": 1023,
"name": "Default.Email1.email1",
"type": "Email",
"status": "approved",
"updatedAt": "2019-12-02T00:42:21Z+0000"
},
{
"id": 1025,
"name": "Defa.E1",
"type": "Email",
"status": "draft",
"updatedAt": "2019-12-02T00:42:21Z+0000"
},
{
"id": 1052,
"name": "Email v1 Program.Email v1 Email",
"type": "Email",
"status": "draft",
"updatedAt": "2019-06-07T20:07:16Z+0000"
}
]
}