Skip to content

API reference

Emails

API endpoints for sending and fetching emails on Waypoint.

Send an email with a template

Send an email message through a Waypoint template. Data variables are used to populate the template.

Request

POST /v1/email_messages
ParameterDescription
templateIdRequired The id of the template you want to send (created on the Waypoint dashboard). You can find the template ID from on each template from your templates page or grab it from the template URL. eg. wptemplate_ABc123XYZ
toRequired Email address of the receiver(s). It can be an email address or use the “Display Name <email address>” format (this will also set the ‘name’ field on your contacts). Separate multiple email addresses in comma separated string for multiple emails (eg. “joe@example.com, jane@example.com”). Max 50 recipients per message.
variablesTemplate variables JSON.
fromEmail address of the sender. This will override a sender that has been set from the template builder and the email domain must be a verified domain within your workspace. Email address can be a string or with a name with email using the “Display Name <email address>” format.
replyToEmail address where replies will be sent. By default, replies are sent to the original sender’s email address.
ccEmail address of the receiver(s) that should be CC’d. Use the same format as ‘to’ attribute.
bccEmail address of the receiver(s) that should be BCC’d. Use the same format as ‘to’ attribute.
metaIdID used for idempotent requests or internal reference. Eg. ‘order_1234’.
attachmentsArray of attachment objects with ‘name’ (filename), ‘contentBlob’ (Base64-encoded string), and ‘contentType’ (MIME content type).
groupIdUnsubscribe group ID
groupKeyUnsubscribe group custom key
const axios = require('axios');
axios({
method: "post",
url: "https://live.waypointapi.com/v1/email_messages",
headers: {
"Content-Type": "application/json"
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
data: {
"templateId": "wptemplate_ABc123XYZ",
"to": "jordan@usewaypoint.com",
"variables": {
"user": {
"displayName": "Jordan",
}
"product": {
"title": "Beechers Mac & Cheese",
"id": "02934203942"
}
}
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})

Send an email without a template

Send an email message without a template by passing in the raw HTML body content.

Request

POST /v1/email_messages
ParameterDescription
bodyHtmlRequired HTML body content.
bodyTextPlain text body content.
subjectSubject line of the email.
toRequired Email address of the receiver(s). It can be an email address or use the “Display Name <email address>” format (this will also set the ‘name’ field on your contacts). Separate multiple email addresses in comma separated string for multiple emails (eg. “joe@example.com, jane@example.com”). Max 50 recipients per message.
fromRequired Email address of the sender. The email domain must be a verified domain within your workspace. It can be an email address string or with a name with email using the “Display Name <email address>” format.
replyToEmail address where replies will be sent. By default, replies are sent to the original sender’s email address.
ccEmail address of the receiver(s) that should be CC’d. Use the same format as ‘to’ attribute.
bccEmail address of the receiver(s) that should be BCC’d. Use the same format as ‘to’ attribute.
metaIdID used for idempotent requests or internal reference. Eg. ‘order_1234’.
attachmentsArray of attachment objects with ‘name’ (filename), ‘contentBlob’ (Base64-encoded string), and ‘contentType’ (MIME content type). Learn more.

Send a test email

Test emails can be sent from your application’s dev/test environments by including sandbox in the path of the API call.

Emails sent with this sandbox flag will prevent the actual delivery of the email to the address in the ‘to’ field and the resulting email inputs and outputs will simply be stored on the your workspace’s activity logs for debugging and review.

Request

POST /v1/sandbox/email_messages

This sandbox endpoint the same properties as v1/email_messages

const axios = require('axios');
axios({
method: "post",
url: "https://live.waypointapi.com/v1/sandbox/email_messages",
headers: {
"Content-Type": "application/json"
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
data: {
"templateId": "wptemplate_ABc123XYZ",
"to": "jordan@usewaypoint.com",
"variables": {
"user": {
"displayName": "Jordan",
}
"product": {
"title": "Beechers Mac & Cheese",
"id": "02934203942"
}
}
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})

Retrieve an email

Get the details of an email message with it’s delivery statuses and other metadata.

Request

GET /v1/email_messages/:id
ParameterDescription
idWaypoint email message ID
axios({
method: 'get',
url: 'https://live.waypointapi.com/v1/email_messages/em_2HxzWrrkPo4V4cXR',
headers: {
'Content-Type': 'application/json'
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
})
.then(function(response) {
console.log(response);
})
.catch(function(error) {
console.log(error);
})

Response

PropertyDescription
IDThe Waypoint message ID.
typeThe type of the message.
createdAtTimestamp of when the message was created.
updatedAtTimestamp of when the message was last updated.
sourceHow the message was created: PREVIEW, API, SANDBOX_API, WORKFLOW, SANDBOX_WORKFLOW, BATCH, SANDBOX_BATCH.
statusMessage status: PENDING, SUCCEEDED, PAUSED, FAILED, DELETED.
processedAtTimestamp of when the message was processed.
waypointTemplateIdThe associated template ID if sent with a template.
variablesObject with any template variables that were passed in while triggering the email.
referenceIdID used by AWS for processing this email.
toArray of email addresses the message was sent to.
ccArray of email addresses that were CC’d on this message.
bccArray of email addresses that were BCC’d on this message.
from’From’ email address set for this message.
replyTo’Reply-To’ email address set for this message.
sentAtTimestamp for when the message was sent by Waypoint.
deliveredAtTimestamp for when the message was first received by the recipient’s email server.
firstOpenedAtTimestamp for when the message was first opened.
lastOpenedAtTimestamp for when the message was last opened.
firstClickedAtTimestamp for when a link in the message was first clicked.
lastClickedAtTimestamp for when a link in the message was last clicked.
firstComplainedAtTimestamp for when the message first received a complaint.
lastComplainedAtTimestamp for when the message last received a complaint.
firstBouncedAtTimestamp for when the message first received a bounce.
lastBouncedAtTimestamp for when the message last received a bounce.
erroredAtTimestamp for when the message encountered an error and didn’t send.
lastSuppressedAtTimestamp for when the message was suppressed by an unsubscribe group.
lastUnsubscribedAtTimestamp for when a contact unsubscribed from a message unsubscribe group link.
{
"data": {
"id": "em_2HxzWrrkPo4V4cXR",
"type": "EmailMessage",
"createdAt": "2024-12-31T14:58:36.962Z",
"updatedAt": "2024-12-31T15:19:51.765Z",
"source": "API",
"status": "SUCCEEDED",
"processedAt": null,
"waypointTemplateId": "wptemplate_WVWNrT7e2yFhnnMv",
"referenceId": "01000194f6256585-c87d8117-1bb5-4f96-88f9-d5e2baba55e0-000000",
"variables": {
"message": "hello world"
},
"to": [
"\"Carlos Rodriguez\" <carlos@usewaypoint.com>"
],
"cc": [],
"bcc": [],
"from": "Waypoint <support@usewaypoint.com>",
"replyTo": "",
"sentAt": "2024-12-31T14:58:43.781Z",
"deliveredAt": "2024-12-31T14:58:45.076Z",
"firstOpenedAt": "2024-12-31T14:58:45.727Z",
"lastOpenedAt": "2024-12-31T15:19:51.609Z",
"firstClickedAt": null,
"lastClickedAt": null,
"firstComplainedAt": null,
"lastComplainedAt": null,
"firstBouncedAt": null,
"lastBouncedAt": null,
"erroredAt": null,
"lastSuppressedAt": null,
"lastUnsubscribedAt": null
}
}

List email events

Get the delivery timeline events from an email message.

Request

GET /v1/email_messages/:id/events
ParameterDescription
idWaypoint email message ID.
const axios = require('axios');
axios({
method: 'get',
url: 'https://live.waypointapi.com/v1/email_messages/em_2HxzWrrkPo4V4cXR/events',
headers: {
'Content-Type': 'application/json'
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
}
})
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})

Response

A data object with an array of email message event objects containing:

PropertyDescription
IDThe Waypoint message event ID.
typeThe type of the message event.
createdAtTimestamp of when the message event was created.
updatedAtTimestamp of when the message event was last updated.
codeStatus code of the message event (see below).
messageDescription and additional details the event.

Status codes:

  • EMAIL_MESSAGE_BOUNCE_SES_EVENT
  • EMAIL_MESSAGE_CLICKED_SES_EVENT
  • EMAIL_MESSAGE_COMPLAINT_SES_EVENT
  • EMAIL_MESSAGE_CONTACT_UNSUBSCRIBED
  • EMAIL_MESSAGE_CREATED
  • EMAIL_MESSAGE_DELIVERED_SES_EVENT
  • EMAIL_MESSAGE_EMPTY_RECIPIENTS_ERROR
  • EMAIL_MESSAGE_INVALID_PARAMETER_ERROR
  • EMAIL_MESSAGE_INVALID_RECIPIENTS_ERROR
  • EMAIL_MESSAGE_INVALID_SENDER_ERROR
  • EMAIL_MESSAGE_INVALID_TEST_MODE_RECIPIENT_ERROR
  • EMAIL_MESSAGE_OPEN_SES_EVENT
{
"meta": {
"count": 5,
"page": 1,
"limit": 50
},
"data": [
{
"id": "log_Davifvij7cBN96r9",
"type": "EmailMessageLog",
"createdAt": "2024-08-23T18:10:21.868Z",
"updatedAt": "2024-08-23T18:10:21.868Z",
"code": "EMAIL_MESSAGE_OPEN_SES_EVENT",
"message": "Email was opened by a recipient at IP address 66.249.91.165. User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246 Mozilla/5.0"
},
{
"id": "log_8MXy5akcYqwXL7YJ",
"type": "EmailMessageLog",
"createdAt": "2024-08-23T18:10:20.215Z",
"updatedAt": "2024-08-23T18:10:20.215Z",
"code": "EMAIL_MESSAGE_DELIVERED_SES_EVENT",
"message": "Email successfully delivered to jordan@usewaypoint.com. Delivery time: 10 seconds."
},
{
"id": "log_YcTNPR5MYjRpaEh8",
"type": "EmailMessageLog",
"createdAt": "2024-08-23T18:10:19.184Z",
"updatedAt": "2024-08-23T18:10:19.184Z",
"code": "EMAIL_MESSAGE_SENT_SES_EVENT",
"message": "Email was sent."
},
{
"id": "log_nUHH2sZVhZhkKb5N",
"type": "EmailMessageLog",
"createdAt": "2024-08-23T18:10:19.147Z",
"updatedAt": "2024-08-23T18:10:19.147Z",
"code": "EMAIL_MESSAGE_RENDERED",
"message": "Email was processed by Waypoint."
},
{
"id": "log_DkonKJ4aLgJS6Kgr",
"type": "EmailMessageLog",
"createdAt": "2024-08-23T18:10:19.032Z",
"updatedAt": "2024-08-23T18:10:19.032Z",
"code": "EMAIL_MESSAGE_CREATED",
"message": "Email message was created."
}
]
}

List emails

Get a list of email messages. 50 messages returned per API call. Use the cursor parameters to fetch additional pages.

Request

GET /v1/email_messages/
ParameterDescription
cursor.beforeA cursor to use in pagination. Use an object ID to define your place in the list. This will get objects before this cusor object. Example: cursor.before=object_2HxzWrrkPo4V4cXR
cursor.afterA cursor to use in pagination. Use an object ID to define your place in the list. This will get objects after this cusor object. Example: cursor.after=object_2HxzWrrkPo4V4cXR
createdAt.gtFilter where createdAt is greater than the given date (ISO 8601). Example: createdAt.gt=2024-12-17T11:23:01
createdAt.gteFilter where createdAt is greater than or equal to the given date (ISO 8601). Example: createdAt.gte=2024-12-17T11:23:01
createdAt.ltFilter where createdAt is less than the given date (ISO 8601). Example: createdAt.lt=2024-12-17T11:23:01
createdAt.lteFilter where createdAt is less than or equal to the given date (ISO 8601). Example: createdAt.lte=2024-12-17T11:23:01
const axios = require('axios');
axios({
method: 'get',
url: 'https://live.waypointapi.com/v1/email_messages?createdAt.lt=2024-12-17T00:00:00Z',
headers: {
'Content-Type': 'application/json'
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
}
})
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})

Response

A successful response returns a dictionary with metadata and a data object that contains an array of email messages.

PropertyDescription
metaObject containing pagination properties including limit, cursor.after (object ID), and cursor.before (object ID)
dataArray of email message objects. See ‘Retrieve an email message’ response for the properties on each email message.
{
"meta": {
"limit": 50,
"cursor.after": "em_954rJcThJGTA7z2c",
"cursor.before": "em_P9L3SsjCA9XPJXB9",
"count": 2
},
"data": [
{
"id": "em_P9L3SsjCA9XPJXB9",
"type": "EmailMessage",
"createdAt": "2025-02-11T17:53:52.082Z",
"updatedAt": "2025-02-11T17:54:37.469Z",
"source": "WORKFLOW",
"status": "SUCCEEDED",
"processedAt": "2025-02-11T17:53:53.680Z",
"waypointTemplateId": "wptemplate_WVWNrT7e2yFhnnMv",
"variables": {},
"referenceId": "01000194f625655a-be25d8f9-ae16-4b70-b7ed-8dd6864ac4b4-000000",
"to": ["jordan@usewaypoint.com"],
"cc": [],
"bcc": [],
"from": "Waypoint Support <support@usewaypoint.com>",
"replyTo": null,
"sentAt": "2025-02-11T17:53:53.498Z",
"deliveredAt": null,
"firstOpenedAt": null,
"lastOpenedAt": null,
"firstClickedAt": null,
"lastClickedAt": null,
"firstComplainedAt": null,
"lastComplainedAt": null,
"firstBouncedAt": null,
"lastBouncedAt": null,
"erroredAt": null,
"lastSuppressedAt": null,
"lastUnsubscribedAt": null
},
{
"id": "em_954rJcThJGTA7z2c",
"type": "EmailMessage",
"createdAt": "2025-02-11T17:53:51.474Z",
"updatedAt": "2025-02-11T17:54:37.632Z",
"source": "WORKFLOW",
"status": "SUCCEEDED",
"processedAt": "2025-02-11T17:53:53.738Z",
"waypointTemplateId": "wptemplate_WVWNrT7e2yFhnnMv",
"variables": {},
"referenceId": "01000194f6256585-c87d8117-1bb5-4f96-88f9-d5e2baba55e0-000000",
"to": ["carlos@usewaypoint.com"],
"cc": [],
"bcc": [],
"from": "Waypoint Support <support@usewaypoint.com>",
"replyTo": null,
"sentAt": "2025-02-11T17:53:53.541Z",
"deliveredAt": null,
"firstOpenedAt": null,
"lastOpenedAt": null,
"firstClickedAt": null,
"lastClickedAt": null,
"firstComplainedAt": null,
"lastComplainedAt": null,
"firstBouncedAt": null,
"lastBouncedAt": null,
"erroredAt": null,
"lastSuppressedAt": null,
"lastUnsubscribedAt": null
},
]
}


Email batches

API endpoints for sending and fetching email batches on Waypoint.

Send an email batch

Sending a weekly report, product update, or recommendations email? Create a batch email to send multiple emails with highly personalized content with a single API call.

Want to add an unsubscribe link to each email? Learn more in unsubscribe groups.

Request

POST /v1/email_messages_batch
ParameterDescription
emailMessagesRequired An array of email messages (either with a template or without).
const axios = require('axios');
axios({
method: "post",
url: "https://live.waypointapi.com/v1/email_messages_batch",
headers: {
"Content-Type": "application/json"
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
data: {
"emailMessages": [{
"templateId": "wptemplate_RXL7zGTGsvkXzAP3",
"to": "Jordan Isip <jordan@usewaypoint.com>",
"variables": {
"username": "fixie"
}
}, {
"templateId": "wptemplate_RXL7zGTGsvkXzAP3",
"to": "Carlos Rodriguez <jordan@usewaypoint.com>",
"variables": {
"username": "cohitre"
}
}]
}
})
.then(function(response) {
// handle success
console.log('success');
})
.catch(function(error) {
// handle error
console.log(error.response.data);
})

Send a test email batch

Matching sandbox endpoint for batch email sending.

Request

POST /v1/sandbox/email_messages_batch

This sandbox endpoint the same properties as v1/email_messages_batch

const axios = require('axios');
axios({
method: "post",
url: "https://live.waypointapi.com/v1/sandbox/email_messages_batch",
headers: {
"Content-Type": "application/json"
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
data: {
"emailMessages": [{
"templateId": "wptemplate_RXL7zGTGsvkXzAP3",
"to": "Jordan Isip <jordan@usewaypoint.com>",
"variables": {
"username": "fixie"
}
}, {
"templateId": "wptemplate_RXL7zGTGsvkXzAP3",
"to": "Carlos Rodriguez <carlos@usewaypoint.com>",
"variables": {
"username": "cohitre"
}
}]
}
})
.then(function(response) {
// handle success
console.log('success');
})
.catch(function(error) {
// handle error
console.log(error.response.data);
})

Retrieve an email batch

Get a report of all email messages sent that were created from an email batch. 100 messages returned per API call. Use the offset parameter to fetch additional pages.

Request

GET v1/batches/:id/email_messages
ParameterDescription
idWaypoint email batch ID (either Live or Sandbox batch).
offsetStarting point of email messages within the batch.
const axios = require('axios');
axios({
method: 'get',
url: 'https://live.waypointapi.com/v1/batches/BATCH_ID/email_messages',
headers: {
'Content-Type': 'application/json'
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
}
})
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})

Response

A successful response is a data object with an array of associated message logs. See a email message log for response details on each message.

{
"data": [
{
"id": "em_45TWBJqcvwHLoDq5",
"type": "EmailMessage",
"createdAt": "2024-12-31T14:58:36.896Z",
"updatedAt": "2024-12-31T15:58:15.008Z",
"source": "BATCH",
"status": "SUCCEEDED",
"processedAt": null,
"waypointTemplateId": "wptemplate_WVWNrT7e2yFhnnMv",
"variables": {
"message": "hello from a batch"
},
"to": ["\"Jordan Isip\" <jordan@usewaypoint.com>"],
"cc": [],
"bcc": [],
"from": "Waypoint <support@usewaypoint.com>",
"replyTo": "",
"sentAt": "2024-12-31T14:58:43.775Z",
"deliveredAt": "2024-12-31T14:58:44.805Z",
"firstOpenedAt": "2024-12-31T14:58:45.927Z",
"lastOpenedAt": "2024-12-31T15:58:14.801Z",
"firstClickedAt": null,
"lastClickedAt": null,
"firstComplainedAt": null,
"lastComplainedAt": null,
"firstBouncedAt": null,
"lastBouncedAt": null,
"erroredAt": null,
"lastSuppressedAt": null,
"lastUnsubscribedAt": null
},
{
"id": "em_HKbSarUFc391Cng3",
"type": "EmailMessage",
"createdAt": "2024-12-31T14:58:36.962Z",
"updatedAt": "2024-12-31T15:19:51.765Z",
"source": "BATCH",
"status": "SUCCEEDED",
"processedAt": null,
"waypointTemplateId": "wptemplate_WVWNrT7e2yFhnnMv",
"variables": {
"message": "hello from a batch"
},
"to": ["\"Carlos Rodriguez\" <carlos@usewaypoint.com>"],
"cc": [],
"bcc": [],
"from": "Waypoint <support@usewaypoint.com>",
"replyTo": "",
"sentAt": "2024-12-31T14:58:43.781Z",
"deliveredAt": "2024-12-31T14:58:45.076Z",
"firstOpenedAt": "2024-12-31T14:58:45.727Z",
"lastOpenedAt": "2024-12-31T15:19:51.609Z",
"firstClickedAt": null,
"lastClickedAt": null,
"firstComplainedAt": null,
"lastComplainedAt": null,
"firstBouncedAt": null,
"lastBouncedAt": null,
"erroredAt": null,
"lastSuppressedAt": null,
"lastUnsubscribedAt": null
}
]
}


Workflows

API endpoints for workflows on Waypoint.

Trigger workflow

Start a workflow to start a workflow run.

POST /v1/workflow_runs
ParameterDescription
workflowIdWaypoint workflow ID.
workflowKeyYour custom workflow key. Eg. abandoned_cart. Use in replace of a workflowId.
variablesTemplate variables JSON.
metaIdID used for idempotent requests or internal reference. Eg. ‘order_1234’.
const axios = require('axios');
axios({
method: "post",
url: "https://live.waypointapi.com/v1/workflow_runs",
headers: {
"Content-Type": "application/json"
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
data: {
"workflowId": "wf_eXYHR685DrjeGEXz",
"variables": {
"user": {
"displayName": "Jordan",
"email": "jordan@usewaypoint.com"
},
"product": {
"title": "Beechers Mac & Cheese",
"id": "02934203942"
}
}
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})

Trigger test workflow

Similar to sandbox test emails above, workflows can be triggered as a test workflow. This will start a workflow but not actually send the resulting email.

POST /v1/sandbox/workflow_runs

This sandbox endpoint the same properties as v1/workflow_runs

const axios = require('axios');
axios({
method: "post",
url: "https://live.waypointapi.com/v1/sandbox/workflow_runs",
headers: {
"Content-Type": "application/json"
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
data: {
"workflowId": "wf_eXYHR685DrjeGEXz",
"variables": {
"user": {
"displayName": "Jordan",
"email": "jordan@usewaypoint.com"
},
"product": {
"title": "Beechers Mac & Cheese",
"id": "02934203942"
}
}
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})


Templates

API endpoints for email templates on Waypoint.

Retrieve template (with data)

Fetch a template with passed in template data. The response will have the processed HTML body, text body, and subject line.

Request

POST /v1/templates/:id/render
ParameterDescription
idWaypoint template ID. Example: wptemplate_qzJuYidNgPYNoba6
variablesObject matching your template variables.
axios({
method: "post",
url: "https://live.waypointapi.com/v1/templates/wptemplate_qzJuYidNgPYNoba6/render",
headers: {
"Content-Type": "application/json"
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
data: {
"variables": {
"passcode": "ABC123",
"expiresIn": "30 minutes"
}
}
})

Response

PropertyDescription
typeThe type of the template.
createdAtTimestamp of when the template was created.
bodyHtmlThe processed HTML body of the template.
bodyTextThe processed text body of the template.
subjectThe processed subject of the template.
{
data: {
type: 'RenderedTemplate',
createdAt: '2025-02-12T02:08:24.552Z',
bodyHtml: '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n' +
'<html lang="en" dir="ltr" style="-webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; box-sizing: border-box; -webkit-text-size-adjust: 100%;">\n' +
'\n' +
' <head>\n' +
' <meta http-equiv="Content-Type" content="text/html charset=UTF-8">\n' +
' <style data-emotion="css-global o6gwfi">\n' +
'@media print {\n' +
' body {\n' +
' background-color: #fff;\n' +
' }\n' +
'}\n' +
'</style>\n' +
' <style>\n' +
'@media screen and (max-width: 599.95px) {\n' +
' .block-mobile {\n' +
' display: block !important;\n' +
' }\n' +
'\n' +
' .block-desktop {\n' +
' display: none !important;\n' +
' }\n' +
'}\n' +
'</style>\n' +
' </head>\n' +
'\n' +
` <body style="box-sizing: inherit; margin: 0; color: rgba(0, 0, 0, 0.87); font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.5; letter-spacing: 0.00938em; background-color: #EEEEEE;">\n` +
' \n' +
` <div class="css-fpvms3" style="box-sizing: inherit; font-weight: 400; font-size: 16px; padding: 32px 0; margin: 0; letter-spacing: 0.15008px; line-height: 1.5; background-color: #EEEEEE; font-family: 'Nimbus Mono PS', 'Courier New', 'Cutive Mono', monospace; color: #242424;">\n` +
' <div style="box-sizing: inherit; display: none; overflow: hidden; line-height: 1px; opacity: 0; max-height: 0; max-width: 0;">This code will expire in 30 minutes.<div style="box-sizing: inherit;"> ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏ ‌​‍‎‏</div>\n' +
' </div>\n' +
' <table align="center" width="100%" style="box-sizing: inherit; background-color: #FFFFFF; max-width: 600px; min-height: 48px;" role="presentation" cellspacing="0" cellpadding="0" border="0" bgcolor="#FFFFFF">\n' +
' <tbody style="box-sizing: inherit;">\n' +
' <tr style="box-sizing: inherit; width: 100%;">\n' +
' <td style="box-sizing: inherit;">\n' +
' <div style="font-family: inherit; font-size: 16px; font-weight: normal; padding: 32px 24px 24px 24px; text-align: left; max-width: 100%; box-sizing: border-box;">\n' +
' <div class style="box-sizing: inherit;">\n' +
' <table align="center" width="100%" cellpadding="0" border="0" style="box-sizing: inherit; table-layout: fixed; border-collapse: collapse;">\n' +
' <tbody style="box-sizing: inherit; width: 100%;">\n' +
' <tr style="box-sizing: inherit; width: 100%;">\n' +
' <td style="box-sizing: content-box; vertical-align: middle; text-align: left; width: 50%; padding-left: 0; padding-right: 8px;" width="50%" valign="middle" align="left">\n' +
' <div style="font-family: inherit; font-size: 16px; font-weight: normal; padding: 0px 0px 0px 0px; text-align: left; max-width: 100%; box-sizing: border-box;">\n' +
' <div style="padding: 0px 0px 0px 0px; text-align: left; max-width: 100%; box-sizing: border-box;"><img src="https://d1iiu589g39o6c.cloudfront.net/live/platforms/platform_pqVAk6zw4NNzFhNm/images/wptemplateimage_FQWgtu4Gg5sjwHFu/GENIE.png" style="box-sizing: inherit; display: inline-block; outline: none; border: none; text-decoration: none; vertical-align: middle; max-width: 100%; height: 20px;" height="20"></div>\n' +
' </div>\n' +
' </td>\n' +
' <td style="box-sizing: content-box; vertical-align: middle; text-align: left; width: 50%; padding-left: 8px; padding-right: 0;" width="50%" valign="middle" align="left">\n' +
' <div style="font-family: inherit; font-size: 16px; font-weight: normal; padding: 0px 0px 0px 0px; text-align: left; max-width: 100%; box-sizing: border-box;">\n' +
' <div style="font-family: inherit; font-size: 14px; font-weight: bold; padding: 0px 0px 0px 0px; text-align: right; max-width: 100%; box-sizing: border-box;"><a href="https://www.usewaypoint.com" target="_blank" style="box-sizing: inherit; background-color: #16A34A; color: #FFFFFF; padding: 0px 0px; border-radius: 0; width: auto; display: inline-block; line-height: 100%; text-decoration: none; max-width: 100%;"><span style="box-sizing: inherit;"><!--[if mso]><i style="letter-spacing: undefinedpx;mso-font-width:-100%;mso-text-raise:0" hidden>&nbsp;</i><![endif]--></span><span style="box-sizing: inherit; background-color: #16A34A; color: #FFFFFF; padding: 12px 20px; border-radius: 0; width: auto; display: inline-block; max-width: 100%; line-height: 120%; text-decoration: none; text-transform: none; mso-padding-alt: 0px; mso-text-raise: 0;">Login</span><span style="box-sizing: inherit;"><!--[if mso]><i style="letter-spacing: undefinedpx;mso-font-width:-100%" hidden>&nbsp;</i><![endif]--></span></a></div>\n' +
' </div>\n' +
' </td>\n' +
' </tr>\n' +
' </tbody>\n' +
' </table>\n' +
' </div>\n' +
' </div>\n' +
' <div style="color: #000000; font-family: inherit; font-size: 16px; font-weight: normal; padding: 16px 24px 16px 24px; text-align: left; max-width: 100%; box-sizing: border-box;">\n' +
' \n' +
' <div class="css-vii0ua" style="box-sizing: inherit;">\n' +
' <div style="box-sizing: inherit;">\n' +
' <p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 0px;">Hi, here is your one-time passcode:</p>\n' +
' </div>\n' +
' </div>\n' +
' </div>\n' +
' <div style="font-family: inherit; font-weight: bold; padding: 24px 24px 0px 24px; text-align: left; max-width: 100%; box-sizing: border-box;">\n' +
' <h1 style="box-sizing: inherit; margin-top: 40px; margin-bottom: 16px; font-weight: inherit; margin: 0; font-size: 32px;">ABC123</h1>\n' +
' </div>\n' +
' <div style="color: #191A1A; font-family: inherit; font-size: 12px; font-weight: normal; padding: 0px 24px 40px 24px; text-align: left; max-width: 100%; box-sizing: border-box;">\n' +
' <div class="css-vii0ua" style="box-sizing: inherit;">\n' +
' <div style="box-sizing: inherit;">\n' +
' <p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 0px;">This code will expire in 30 minutes.</p>\n' +
' </div>\n' +
' </div>\n' +
' </div>\n' +
' <div style="font-family: inherit; font-size: 12px; font-weight: normal; padding: 24px 24px 32px 24px; text-align: left; max-width: 100%; box-sizing: border-box;">\n' +
' <div class="css-vii0ua" style="box-sizing: inherit;">\n' +
' <div style="box-sizing: inherit;">\n' +
' <p style="box-sizing: inherit; margin-top: 0px; margin-bottom: 0px;">Need help? Just reply to this email or email us at <a href="mailto:support@example.com" target="_blank" style="box-sizing: inherit; color: #16A34A;">support@example.com</a>.</p>\n' +
' </div>\n' +
' </div>\n' +
' </div>\n' +
' </td>\n' +
' </tr>\n' +
' </tbody>\n' +
' </table>\n' +
' </div>\n' +
' </body>\n' +
'\n' +
'</html>',
bodyText: 'Login [https://www.usewaypoint.com]\n' +
'\n' +
'Hi, here is your one-time passcode:\n' +
'\n' +
'\n' +
'ABC123\n' +
'\n' +
'This code will expire in 30 minutes.\n' +
'\n' +
'Need help? Just reply to this email or email us at support@example.com\n' +
'[support@example.com].',
subject: 'Your one-time passcode is ABC123'
}
}

Retrieve raw template

Get the HTML of your template with raw LiquidJS templating. This is useful for teams that need to keep a copy of the raw template within your codebase or send through a separate service for compliance reasons.

Request

GET /v1/templates/:id/raw
ParameterDescription
idWaypoint template ID. Example: wptemplate_qzJuYidNgPYNoba6
const axios = require('axios');
axios({
method: "get",
url: "https://live.waypointapi.com/v1/templates/wptemplate_qzJuYidNgPYNoba6/raw",
headers: {
"Content-Type": "application/json"
},
auth: {
username: API_KEY_USERNAME,
password: API_KEY_PASSWORD
},
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})

Response

PropertyDescription
IDThe template ID.
typeThe type of the template.
createdAtTimestamp of when the template was created.
updatedAtTimestamp of when the template was last updated.
rawSubjectThe subject line of the email with LiquidJS templating.
rawBodyHtmlThe HTML body of the email with LiquidJS templating.
{
"data": {
"id": "wptemplate_qzJuYidNgPYNoba6",
"type": "Template",
"createdAt": "2023-11-28T14:42:09.867Z",
"updatedAt": "2023-12-04T18:32:48.547Z",
"rawSubject": "{{user.displayName}}, you got {{report.metric.value | downcase}} {{report.metric.title | downcase}} {{report.duration | downcase}}",
"rawBodyHtml": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html lang=\"en\" dir=\"ltr\" style=\"-webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; box-sizing: border-box; -webkit-text-size-adjust: 100%;\">\n\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html charset=UTF-8\">\n <style data-emotion=\"css-global o6gwfi\">\n@media print {\n body {\n background-color: #fff;\n }\n}\n</style>\n <style>\n@media screen and (max-width: 599.95px) {\n .block-mobile {\n display: block !important;\n }\n\n .block-desktop {\n display: none !important;\n }\n}\n</style>\n </head>\n\n <body style=\"box-sizing: inherit; margin: 0; color: rgba(0, 0, 0, 0.87); font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif; font-weight: 400; font-size: 1rem; line-height: 1.5; letter-spacing: 0.00938em; background-color: #EEEEEE;\">\n \n <div class=\"css-b5fgh5\" style=\"box-sizing: inherit; font-weight: 400; font-size: 16px; padding: 32px 0; margin: 0; letter-spacing: 0.15008px; line-height: 1.5; background-color: #EEEEEE; font-family: 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif; color: #242424;\">\n <div style=\"box-sizing: inherit; display: none; overflow: hidden; line-height: 1px; opacity: 0; max-height: 0; max-width: 0;\">Plus your top performing post {{report.duration | downcase}}.<div style=\"box-sizing: inherit;\"> ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍ ‌​‍</div>\n </div>\n <table align=\"center\" width=\"100%\" style=\"box-sizing: inherit; background-color: #FFFFFF; max-width: 600px; min-height: 48px;\" role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" bgcolor=\"#FFFFFF\">\n <tbody style=\"box-sizing: inherit;\">\n <tr style=\"box-sizing: inherit; width: 100%;\">\n <td style=\"box-sizing: inherit;\">\n <div style=\"font-family: inherit; font-size: 16px; font-weight: normal; padding: 24px 24px 24px 24px; text-align: left; max-width: 100%; box-sizing: border-box;\">\n <div class style=\"box-sizing: inherit;\">\n <table align=\"center\" width=\"100%\" cellpadding=\"0\" border=\"0\" style=\"box-sizing: inherit; table-layout: fixed; border-collapse: collapse;\">\n <tbody style=\"box-sizing: inherit; width: 100%;\">\n <tr style=\"box-sizing: inherit; width: 100%;\">\n <td style=\"box-sizing: content-box; vertical-align: middle; text-align: left; width: 50%; padding-left: 0; padding-right: 8px;\" width=\"50%\" valign=\"middle\" align=\"left\">\n <div style=\"font-family: inherit; font-size: 16px; font-weight: normal; padding: 0px 0px 0px 0px; text-align: left; max-width: 100%; box-sizing: border-box;\">\n <div style=\"padding: 0px 0px 0px 0px; text-align: left; max-width: 100%; box-sizing: border-box;\"><img alt src=\"https://d1iiu589g39o6c.cloudfront.net/live/platforms/platform_A9wwKSL6EV6orh6f/images/wptemplateimage_n3eLjsf37dcjFaj5/Narrative.png\" style=\"box-sizing: inherit; display: block; outline: none; border: none; text-decoration: none;\"></div>\n </div>\n </td>\n <td style=\"box-sizing: content-box; vertical-align: middle; text-align: left; width: 50%; padding-left: 8px; padding-right: 0;\" width=\"50%\" valign=\"middle\" align=\"left\">\n <div style=\"font-family: inherit; font-size: 16px; font-weight: normal; padding: 0px 0px 0px 0px; text-align: left; max-width: 100%; box-sizing: border-box;\">\n <div style=\"font-family: inherit; font-weight: normal; padding: 0px 0px 0px 0px; text-align: right; max-width: 100%; box-sizing: border-box;\"><img src=\"{{user.avatarUrl}}\" alt=\"{{user.displayName}}\" style=\"box-sizing: inherit; display: inline-block; object-fit: cover; height: 32px; width: 32px; max-width: 100%; vertical-align: middle; text-align: center; border-radius: 32px;\" width=\"32\" height=\"32\"></div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div style=\"font-family: inherit; font-weight: bold; padding: 24px 24px 0px 24px; text-align: center; max-width: 100%; box-sizing: border-box;\">\n <h3 style=\"box-sizing: inherit; margin-top: 40px; margin-bottom: 16px; font-weight: inherit; font-size: 20px; margin: inherit;\">{{report.duration}}, your posts received</h3>\n </div>\n <div style=\"font-family: inherit; font-size: 48px; font-weight: bold; padding: 16px 24px 0px 24px; text-align: center; max-width: 100%; box-sizing: border-box;\">\n \n <div class=\"css-vii0ua\" style=\"box-sizing: inherit;\">\n <div style=\"box-sizing: inherit;\">\n <p style=\"box-sizing: inherit; margin-top: 0px; margin-bottom: 0px;\">{{report.metric.value}}</p>\n </div>\n </div>\n </div>\n <div style=\"font-family: inherit; font-size: 14px; font-weight: bold; padding: 0px 24px 16px 24px; text-align: center; max-width: 100%; box-sizing: border-box;\">\n <div class=\"css-vii0ua\" style=\"box-sizing: inherit;\">\n <div style=\"box-sizing: inherit;\">\n <p style=\"box-sizing: inherit; margin-top: 0px; margin-bottom: 0px;\">{{report.metric.title}}</p>\n </div>\n </div>\n </div>\n <div style=\"font-family: inherit; font-size: 16px; font-weight: bold; padding: 16px 24px 40px 24px; text-align: center; max-width: 100%; box-sizing: border-box;\"><a href=\"https://narrative.example.com/{{user.username}}/analytics\" style=\"box-sizing: inherit; color: #24AF7F; background-color: #24AF7F; padding: 0; border-radius: 4px; width: auto; display: inline-block; text-decoration: none; max-width: 100%; line-height: 100%;\"><span style=\"box-sizing: inherit; color: #FFFFFF; padding: 12px 20px; width: 100%; display: inline-block; max-width: 100%; line-height: 120%; text-decoration: none; text-transform: none;\">View your analytics →</span></a></div>\n <div style=\"font-family: inherit; font-weight: bold; padding: 24px 24px 8px 24px; text-align: center; max-width: 100%; box-sizing: border-box;\">\n <h3 style=\"box-sizing: inherit; margin-top: 40px; margin-bottom: 16px; font-weight: inherit; font-size: 20px; margin: inherit;\">Top performing post {{report.duration | downcase}}</h3>\n </div>\n <div style=\"font-family: inherit; font-size: 16px; font-weight: normal; padding: 16px 24px 16px 24px; text-align: left; max-width: 100%; box-sizing: border-box;\">\n <div style=\"border: 1px solid #d0d0d0; border-radius: 8px; font-family: inherit; font-size: 16px; font-weight: normal; padding: 24px 24px 24px 24px; text-align: left; max-width: 100%; box-sizing: border-box;\">\n <div style=\"font-family: inherit; font-size: 16px; font-weight: normal; padding: 0px 0px 0px 0px; text-align: left; max-width: 100%; box-sizing: border-box;\">\n <div class=\"css-vii0ua\" style=\"box-sizing: inherit;\">\n <div style=\"box-sizing: inherit;\">\n <p style=\"box-sizing: inherit; margin-top: 0px; margin-bottom: 0px;\">{{report.topPerformingPost}}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div style=\"font-family: inherit; font-size: 16px; font-weight: bold; padding: 16px 24px 16px 24px; text-align: center; max-width: 100%; box-sizing: border-box;\"><a href=\"https://narrative.example.com/{{user.username}}/posts\" style=\"box-sizing: inherit; color: #24AF7F; background-color: #EEEEEE; padding: 0; border-radius: 4px; width: auto; display: inline-block; text-decoration: none; max-width: 100%; line-height: 100%;\"><span style=\"box-sizing: inherit; color: #000000; padding: 12px 20px; width: 100%; display: inline-block; max-width: 100%; line-height: 120%; text-decoration: none; text-transform: none;\">Show more</span></a></div>\n <div style=\"padding: 40px 0px 0px 0px; max-width: 100%; box-sizing: border-box;\">\n <hr style=\"box-sizing: inherit; margin: 0px; width: 100%; border: none; border-top: 1px solid #eaeaea; border-color: rgb(233, 233, 233); border-top-width: 1px;\">\n </div>\n <div style=\"color: #474849; font-family: inherit; font-size: 12px; font-weight: normal; padding: 24px 24px 24px 24px; text-align: center; max-width: 100%; box-sizing: border-box;\">\n <div class=\"css-vii0ua\" style=\"box-sizing: inherit;\">\n <div style=\"box-sizing: inherit;\">\n <p style=\"box-sizing: inherit; margin-top: 0px; margin-bottom: 0px;\">Questions? Just reply to this email.</p>\n </div>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </body>\n\n</html>"
}
}