openapi: 3.2.0
info:
version: 1.0.0
title: Customer.io Journeys API Reference Emails API
description: Customer.io provides REST APIs to send real-time customer data, retrieve data from your account, and trigger messages.
servers:
- url: https://track.customer.io
description: The base URL for the Track API. Track endpoints use basic authentication with your Site ID as the user name and your secret key as the password.
- url: https://track-eu.customer.io
description: The base URL for the Track API (EU region). Track endpoints use basic authentication with your Site ID as the user name and your secret key as the password.
- url: https://api.customer.io
description: The base URL for broadcasts, transactional messages, and data-retrieval APIs. These endpoints use bearer authorization, and require a [token that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
description: The base URL for broadcasts, transactional messages, and data-retrieval APIs (EU region). These endpoints use bearer authorization, and require a [token that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
tags:
- name: Emails
description: Create and manage the emails you build in Design Studio, along with their translations and versions.
paths:
/v1/design_studio/emails:
servers:
- url: https://api.customer.io
description: The base URL for the Design Studio API. These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
description: The base URL for the Design Studio API (EU region). These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
get:
tags:
- Emails
summary: List emails
description: Returns a paginated list of emails and a separate array of folders that the emails belong to.
operationId: listEmails
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/Limit'
- $ref: '#/components/parameters/ParentFolderID'
- $ref: '#/components/parameters/DirectDescendantsOnly'
- $ref: '#/components/parameters/SortBy'
- $ref: '#/components/parameters/SortOrder'
- $ref: '#/components/parameters/CreatedBefore'
- $ref: '#/components/parameters/CreatedAfter'
- $ref: '#/components/parameters/UpdatedBefore'
- $ref: '#/components/parameters/UpdatedAfter'
- name: is_template
description: Filter by whether the email is a template
in: query
schema:
type: string
enum:
- 'true'
- 'false'
- any
default: any
- name: has_translations
description: Filter by whether the email has translations
in: query
schema:
type: string
enum:
- 'true'
- 'false'
- any
default: any
- name: is_linked
description: Filter by whether the email is linked to a workflow (automation, broadcast, etc).
in: query
schema:
type: string
enum:
- 'true'
- 'false'
- any
default: any
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
emails:
type: array
items:
$ref: '#/components/schemas/EmailSummary'
folders:
type: array
items:
$ref: '#/components/schemas/Folder'
meta:
$ref: '#/components/schemas/ListMeta'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
errors:
- detail: invalid query parameter
status: '400'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Emails
summary: Create an email
description: Create an email. Note, you can create an email without filling out all required fields for sending. You can fill in the envelope, like a to and from address, with this method, but that's not required until you link it to a workflow like an automation.
operationId: createEmail
security:
- Bearer-Auth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EmailCreate'
responses:
'200':
description: Email created
content:
application/json:
schema:
type: object
properties:
email:
$ref: '#/components/schemas/Email'
'400':
description: "Bad request. Possible reasons:\n - Missing or invalid name\n - Missing content or any required content sub-field\n - Unknown JSON field in content, envelope, or transformers\n - from_id or reply_to_id does not reference an existing identity\n - parent_folder_id is an empty string\n"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/v1/design_studio/emails/{id}:
servers:
- url: https://api.customer.io
description: The base URL for the Design Studio API. These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
description: The base URL for the Design Studio API (EU region). These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
get:
tags:
- Emails
summary: Get an email
description: Returns a single email including content, envelope details, and transformers. This endpoint returns only default emails; see Email translations to access language variants.
operationId: getEmail
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_id'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
email:
$ref: '#/components/schemas/Email'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Emails
summary: Update an email
description: 'Update part of an email: an email''s name, template status, folder, content, envelope, or transformers. Note, this does not publish your email; if the email is linked to a workflow like an automation, you still need to click publish to make the changes live.'
operationId: updateEmail
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_id'
requestBody:
required: true
description: You must provide a body with at least one of the following properties. Omitting a field leaves it unchanged.
content:
application/json:
schema:
$ref: '#/components/schemas/EmailUpdate'
responses:
'204':
description: Email updated, no content returned
'400':
description: "Bad request. Possible reasons:\n - No fields provided\n - Invalid name\n - Unknown JSON field in content, envelope, or transformers\n - from_id or reply_to_id does not reference an existing identity\n - parent_folder_id is an empty string\n"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- Emails
summary: Delete an email
description: Delete an email. You cannot delete an email that is linked to a workflow (automation, broadcast, etc). This deletes the email and all translations.
operationId: deleteEmail
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_id'
responses:
'204':
description: Email deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'409':
description: Email is linked to a journey and cannot be deleted
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
errors:
- detail: cannot delete email because it is linked
status: '409'
/v1/design_studio/emails/{id}/languages:
servers:
- url: https://api.customer.io
description: The base URL for the Design Studio API. These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
description: The base URL for the Design Studio API (EU region). These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
get:
tags:
- Emails
summary: List email translations
description: Returns all translations for an email. Each translation contains the email's content, envelope, and transformers for a specific language.
operationId: listEmailTranslations
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_id'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
email_translations:
type: array
items:
$ref: '#/components/schemas/EmailTranslation'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Emails
summary: Create an email translation
description: Creates a new translation for an email. If content, envelope, and/or transformers are omitted, the values are copied from the default (parent) email.
operationId: createEmailTranslation
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_id'
requestBody:
required: true
description: "How content is inherited from the default, parent email:\n - If both `content` and `envelope` are omitted: envelope (including subject and preheader) is copied verbatim from the parent email\n - If `content` is provided but `envelope` is omitted: the envelope is reconstructed from the parent’s envelope settings, using the new subject and preheader\n - If `envelope` is provided but `content` is omitted: the provided envelope is used with the parent’s subject and preheader\n - HTML, AMP, and text body fields are always copied from parent if `content` is omitted\n"
content:
application/json:
schema:
type: object
required:
- language
properties:
language:
type: string
description: A [language code](/journeys/channels/localization/attribute/#supported-languages) that corresponds to the language of the translation
example: es
content:
$ref: '#/components/schemas/EmailContent'
envelope:
$ref: '#/components/schemas/EmailEnvelopeInput'
transformers:
$ref: '#/components/schemas/Transformers'
responses:
'200':
description: Translation created
content:
application/json:
schema:
type: object
properties:
email_translation:
$ref: '#/components/schemas/EmailTranslation'
'400':
description: "Bad request. Possible reasons:\n - Missing language\n - Invalid language code\n - Missing required content sub-field when content is provided\n - Unknown JSON field in content, envelope, or transformers\n - from_id or reply_to_id does not reference an existing identity\n"
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
/v1/design_studio/emails/{id}/languages/{language}:
servers:
- url: https://api.customer.io
description: The base URL for the Design Studio API. These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
description: The base URL for the Design Studio API (EU region). These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
get:
tags:
- Emails
summary: Get an email translation
description: Returns a single email translation by language code, including content, envelope, and transformers.
operationId: getEmailTranslation
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_id'
- $ref: '#/components/parameters/Language'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
email_translation:
$ref: '#/components/schemas/EmailTranslation'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
put:
tags:
- Emails
summary: Update an email translation
description: 'Update part of an email translation: the content, envelope, or transformers for a specific email translation. Note, this does not publish your email; if the email is linked to a workflow like an automation, you still need to click publish to make the changes live.'
operationId: updateEmailTranslation
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_id'
- $ref: '#/components/parameters/Language'
requestBody:
required: true
description: You must provide a body with at least one of the following properties. Omitting a field leaves it unchanged.
content:
application/json:
schema:
type: object
properties:
content:
$ref: '#/components/schemas/EmailContent'
envelope:
$ref: '#/components/schemas/EmailEnvelopeInput'
transformers:
$ref: '#/components/schemas/Transformers'
responses:
'204':
description: Translation updated
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
delete:
tags:
- Emails
summary: Delete an email translation
description: Delete a specific language translation from an email. This fails if the email is linked to a workflow (automation, broadcast, etc).
operationId: deleteEmailTranslation
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_id'
- $ref: '#/components/parameters/Language'
responses:
'204':
description: Translation deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
/v1/design_studio/emails/{id}/versions:
servers:
- url: https://api.customer.io
description: The base URL for the Design Studio API. These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
description: The base URL for the Design Studio API (EU region). These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
get:
tags:
- Emails
summary: List email versions
description: 'Returns an email''s saved versions, newest first. A version is a named checkpoint of the email''s content and envelope.
- Design Studio creates a version automatically every time you publish the email.
- You can save a version manually with Save an email version.
Pass `start_date` to filter for versions created after a certain time. Or pass `start_date` and `end_date` together to filter for versions created in a certain time range.
You can retrieve your email''s UUID through List emails. If your email has language variants, *List emails* only returns the UUID for the default language. Use this default ID to retrieve variant IDs through List email translations.'
operationId: listVersions
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_variant_id'
- name: start_date
in: query
description: Return versions created at or after this time. Must be a unix timestamp.
schema:
type: integer
format: Unix timestamp
example: 1773856017
- name: end_date
in: query
description: Return versions created at or before this time. Must be a unix timestamp. Requires `start_date`.
schema:
type: integer
format: Unix timestamp
example: 1773856017
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
versions:
type: array
items:
$ref: '#/components/schemas/VersionSummary'
'400':
description: 'Bad request. Possible reasons include `:id` is not a valid UUID, the node is not an `EMAIL` type, or you passed `end_date` without `start_date`.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: Possible reasons include the email node doesn't exist.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
post:
tags:
- Emails
summary: Save an email version
description: 'Saves a version of the email''s current content, envelope, and any component dependencies it references.
If you need to revert to a previous version, use Restore an email version.
If the email is identical to the most recent version, this returns that version with `"created": false` instead of saving a duplicate. If the code of a referenced custom component changes, you can save a new version of the email with the latest component changes; however, the code diff in Design Studio will show no change because the component code isn''t compiled in that view.'
operationId: saveVersion
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_variant_id'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- name
properties:
name:
type: string
description: Name for the version, shown in the [version history list](/integrations/api/design-studio/tag/emails/listVersions/).
minLength: 1
maxLength: 100
example: Before holiday redesign
description:
type: string
description: Note about the version.
responses:
'200':
description: Returns the new version saved, or the latest version if nothing changed.
content:
application/json:
schema:
type: object
properties:
version:
$ref: '#/components/schemas/VersionSummary'
created:
type: boolean
description: '`false` when the email and its dependencies matched the most recent version exactly, so no new version was saved. `true` when this call created a new version.
'
'400':
description: 'Bad request. Possible reasons include `:id` is not a valid UUID or `name` is missing.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: 'Possible reasons include the email node doesn''t exist.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/v1/design_studio/emails/{id}/versions/{version_id}:
servers:
- url: https://api.customer.io
description: The base URL for the Design Studio API. These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
description: The base URL for the Design Studio API (EU region). These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
get:
tags:
- Emails
summary: Get an email version
description: Returns a snapshot of the version's content including the code for any custom components referenced in the email (see `dependencies` for more).
operationId: getVersion
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_variant_id'
- $ref: '#/components/parameters/version_id'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
version:
$ref: '#/components/schemas/VersionSummary'
node:
$ref: '#/components/schemas/VersionNode'
dependencies:
type: array
items:
$ref: '#/components/schemas/VersionDependencyNode'
'400':
description: 'Bad request. Possible reasons include `:id` is not a valid UUID, the node is not an email, or `version_id` is not a valid UUID.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: 'Possible reasons include the email node or version doesn''t exist.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
delete:
tags:
- Emails
summary: Delete an email version
description: Deletes a version. You can't delete a version that Design Studio created automatically during a publish.
operationId: deleteVersion
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_variant_id'
- $ref: '#/components/parameters/version_id'
responses:
'204':
description: Version deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: 'Possible reasons include the email node or version doesn''t exist or the version belongs to a different node.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'409':
description: The version was created automatically during a publish and can't be deleted.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
errors:
- detail: cannot delete a version created on publish
status: 409
/v1/design_studio/emails/{id}/versions/{version_id}/restore:
servers:
- url: https://api.customer.io
description: The base URL for the Design Studio API. These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
description: The base URL for the Design Studio API (EU region). These endpoints use bearer authorization, and require an [App API Key that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
post:
tags:
- Emails
summary: Restore an email version
description: 'Returns the email to a saved version. This restores only the email itself; if the code for a referenced custom component changed since this version was saved, the latest component code renders in Design Studio, not the original.
This only edits the draft in Design Studio. If you already linked the email to a workflow, you need to publish it to push the restored content live.'
operationId: restoreVersion
security:
- Bearer-Auth: []
parameters:
- $ref: '#/components/parameters/email_variant_id'
- $ref: '#/components/parameters/version_id'
responses:
'200':
description: Version restored
content:
application/json:
schema:
type: object
properties:
node_id:
type: string
format: uuid
description: The UUID of the restored email node.
version_id:
type: string
format: uuid
description: The UUID of the version that was restored.
restored_node_ids:
type: array
items:
type: string
format: uuid
description: The nodes whose content was rolled back. Always just the email node itself—component dependencies aren't restored.
example:
node_id: 123e4567-e89b-12d3-a456-426614174000
version_id: fc70fa5f-5fed-49c1-be48-6508aa9875c1
restored_node_ids:
- 123e4567-e89b-12d3-a456-426614174000
'400':
description: 'Bad request. Possible reasons include `:id` or `version_id` is not a valid UUID.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
description: 'Possible reasons include the email node or version doesn''t exist or the version belongs to a different node.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
parameters:
version_id:
name: version_id
in: path
required: true
description: The UUID of the version.
schema:
type: string
format: uuid
CreatedAfter:
name: created_after
in: query
schema:
type: integer
format: Unix timestamp
description: Return records created after this time. Must be a unix timestamp.
example: 1773856017
UpdatedBefore:
name: updated_before
in: query
schema:
type: integer
format: Unix timestamp
description: Return records updated before this time. Must be a unix timestamp.
example: 1773856017
Page:
name: page
in: query
description: The page number of results you want to display. Use with `limit`.
schema:
type: integer
minimum: 1
default: 1
email_variant_id:
name: id
in: path
required: true
description: 'The UUID of the email. If your email has translations, this is the ID of a specific language variant.
'
schema:
type: string
format: uuid
DirectDescendantsOnly:
name: direct_descendants_only
in: query
description: When `true`, the response includes only the immediate children of the parent folder. When `false`, it includes the parent folder's entire subtree.
schema:
type: boolean
default: false
SortBy:
name: sort_by
in: query
schema:
type: string
enum:
- created
- updated
- name
default: created
Limit:
name: limit
in: query
description: The maximum number of results per page.
schema:
type: integer
minimum: 1
maximum: 10000
default: 1000
ParentFolderID:
name: parent_folder_id
in: query
schema:
type: string
format: uuid
description: 'Filter by parent folder. Must reference an existing folder. If not set, the response filters by the root level directory.
To list only items in the root folder, leave `parent_folder_id` unset and only set `direct_descendants_only` to `true`.
'
CreatedBefore:
name: created_before
in: query
schema:
type: integer
format: Unix timestamp
description: Return records created before this time. Must be a unix timestamp.
example: 1773856017
email_id:
name: id
in: path
required: true
description: The id of the email. If your email has multiple languages, you must provide the ID of the **default** language template. This links the workflow to all of the language variants for the template.
schema:
type: string
format: uuid
Language:
name: language
in: path
required: true
schema:
type: string
description: A [language code](/journeys/channels/localization/attribute/#supported-languages) that indicates the language of your translated email
UpdatedAfter:
name: updated_after
in: query
schema:
type: integer
format: Unix timestamp
description: Return records updated after this time. Must be a unix timestamp.
example: 1773856017
SortOrder:
name: sort_order
in: query
schema:
type: string
enum:
- asc
- desc
default: asc
schemas:
Email:
type: object
properties:
id:
type: string
format: uuid
description: Unique identifier for the email.
example: sdflkj345
name:
type: string
description: Display name of the email.
is_template:
type: boolean
description: Whether the email is a reusable template.
is_linked:
type: boolean
description: 'Whether the email is currently linked to a workflow (automation, broadcast, etc).
'
parent_folder_id:
type:
- string
- 'null'
format: uuid
description: 'UUID of the parent folder, or `null` if the email is in your root directory.
'
available_languages:
type: array
items:
type: string
description: List of [language codes](/journeys/channels/localization/attribute/#supported-languages) that reflect the languages this default email has been translated to.
example:
- en
- es
created:
type: integer
format: int64
description: Unix timestamp of when the email was created.
example: 1773856017
updated:
type: integer
format: int64
description: Unix timestamp of the last update to the email.
example: 1773856017
content:
$ref: '#/components/schemas/EmailContent'
envelope:
$ref: '#/components/schemas/EmailEnvelope'
transformers:
$ref: '#/components/schemas/Transformers'
EmailHeader:
type: object
properties:
name:
type: string
value:
type: string
EmailEnvelopeInput:
type: object
description: The envelope of your email, like from and to addresses.
properties:
from_id:
type:
- integer
- 'null'
description: 'Sender identity ID. Must reference an existing identity. You can find this in *Workspace Settings > Email* under your From Addresses.
'
reply_to_id:
type:
- integer
- 'null'
format: int64
description: 'Reply-to identity ID. Must reference an existing identity from *Workspace Settings > Email* under your From Addresses.
'
recipient:
type: string
description: 'Recipient email address. Defaults to `{{customer.email}}`` if not set.
'
bcc:
type: string
description: BCC email address.
fake_bcc:
type: boolean
description: Whether to use fake BCC. Defaults to true if not provided.
headers:
type: array
items:
$ref: '#/components/schemas/EmailHeader'
description: 'Custom headers. Each item: { "name": "string", "value": "string" }.
'
Folder:
type: object
properties:
id:
type: string
format: uuid
description: ID of folder
name:
type: string
description: The name of the folder.
parent_folder_id:
type:
- string
- 'null'
format: uuid
description: The ID of the parent folder. Returns `null` if there is no parent, which means the folder is in the root directory.
created:
type: integer
format: Unix timestamp
description: Timestamp of when the folder was created.
updated:
type: integer
format: Unix timestamp
description: Timestamp of last update to the folder.
example:
id: 123e4567-e89b-12d3-a456-426614174000
name: Product Announcements
parent_folder_id: null
created: 1714732800
updated: 1714732800
VersionDependencyNode:
type: object
description: The code of the referenced custom component(s) in the node version.
properties:
node_id:
type: string
format: uuid
description: UUID of the component node.
node_type:
type: string
enum:
- COMPONENT
description: Always `COMPONENT`.
name:
type: string
description: Display name of the component in Design Studio.
component_name:
type:
- string
- 'null'
description: The component tag name when you saved this version.
content:
type: string
description: HTML content as of the snapshot.
example:
node_id: 1abcbb4e-402e-949e-f6732f333
node_type: COMPONENT
name: Footer
component_name: footer
content: ...
EmailUpdate:
type: object
properties:
name:
type: string
minLength: 1
maxLength: 255
description: Display name of the email.
is_template:
type: boolean
description: Whether the email is a reusable template.
parent_folder_id:
$ref: '#/components/schemas/parent_folder_id'
content:
$ref: '#/components/schemas/EmailContent'
envelope:
$ref: '#/components/schemas/EmailEnvelopeInput'
transformers:
$ref: '#/components/schemas/Transformers'
EmailTranslation:
type: object
properties:
language_group_id:
type: string
format: uuid
description: ID of the parent email that groups all translations. Same as the id in the path parameter.
language:
type: string
description: The [language code](/journeys/channels/localization/attribute/#supported-languages) of the translation
example: fr
is_template:
type: boolean
description: Whether the translation is a template
is_linked:
type: boolean
description: Whether the translation is linked to a workflow (automation, broadcast, etc)
parent_folder_id:
type:
- string
- 'null'
format: uuid
description: UUID of the parent folder, or `null` if the email is in your root directory.
available_languages:
type: array
items:
type: string
description: List of [language codes](/journeys/channels/localization/attribute/#supported-languages) that reflect the languages this default email has been translated to.
example:
- en
- es
created:
type: integer
description: Unix timestamp of when the translation was created.
example: 1773856017
updated:
type: integer
description: Unix timestamp of the last update to the translation.
example: 1773856017
content:
$ref: '#/components/schemas/EmailContent'
envelope:
$ref: '#/components/schemas/EmailEnvelope'
transformers:
$ref: '#/components/schemas/Transformers'
VersionSummary:
type: object
properties:
id:
type: string
format: uuid
description: UUID of the version.
node_id:
type: string
format: uuid
description: UUID of the email node this version belongs to.
node_type:
type: string
enum:
- EMAIL
description: Always `"EMAIL"`.
name:
type: string
description: Name given to the version when it was saved.
description:
type: string
description: Explanatory text you provided when creating a version. Omitted if no description.
created:
type: integer
format: Unix timestamp
description: The date-time the version was created.
created_on_publish:
type: boolean
description: '`false` if you [saved the email](/integrations/api/design-studio/tag/emails/saveVersion/). `true` if Design Studio created this version automatically when you [published the email](/integrations/api/design-studio/tag/email-email-link-and-publish/publishEmail/). You can''t delete versions generated by Design Studio.
'
feedback:
type: boolean
description: '`true` is you saved this version by creating a [round of feedback in Design Studio](/messaging/design-studio/collaboration/feedback/).
'
example:
id: 8f14e45f-ceea-4c67-9814-b8f0e0e1a6f0
node_id: 1a0cbb4e-09d3-402e-949e-f6732f021650
node_type: EMAIL
name: Before holiday redesign
created: 1773856017
created_on_publish: false
feedback: false
VersionNode:
type: object
description: The content and settings stored in the version.
properties:
node_id:
type: string
format: uuid
description: UUID of the node.
node_type:
type: string
enum:
- EMAIL
description: Always `EMAIL` for the node.
name:
type: string
description: Display name of the email in Design Studio. If the version is a language variant, the title ends in the language code like "Onboarding email (fr)".
content:
type: string
description: HTML content as of the snapshot. For the content of any referenced custom component, see `dependencies`.
text:
type: string
description: Plain text body as of the snapshot. Omitted if the email had none.
amp:
type: string
description: AMP HTML body as of the snapshot. Omitted if the email had none.
subject:
type: string
description: Email subject line.
preheader_text:
type: string
description: Preview text as of the snapshot. Omitted if the email had none.
envelope:
$ref: '#/components/schemas/EmailEnvelope'
transformers:
$ref: '#/components/schemas/Transformers'
example:
node_id: 1a0cbb4e-09d3-402e-949e-f6732f021650
node_type: EMAIL
name: Onboarding phase 1
content: ...
subject: Welcome to Design Studio!
preheader_text: Get started in minutes
envelope:
from_id: 1
from: Customer.io
reply_to_id: null
reply_to: ''
bcc: ''
fake_bcc: true
headers: []
recipient: '{{customer.email}}'
transformers:
prevent_widows:
enabled: false
Error:
type: object
description: An error response containing one or more error details.
properties:
errors:
type: array
description: A list of errors that occurred while processing the request.
items:
type: object
properties:
detail:
type: string
description: A human-readable description of the error.
status:
type: string
description: The HTTP status code for this error, as a string.
source:
type: object
description: The request field that caused the error. Validation errors (`422`) include it.
properties:
pointer:
type: string
description: The path to the field that failed, like `/data/attributes/content`.
meta:
type: object
description: Additional detail about the error, when there is any. A failed publish uses this to list Liquid errors per language.
parent_folder_id:
type:
- string
- 'null'
format: uuid
description: 'The UUID of the parent folder.
Omit if you want no change to where the folder or file is located. Include `null` to move it to your root directory. Or add the UUID of another folder to move it there.
'
EmailContent:
type: object
description: The content of your email.
properties:
subject:
type: string
description: Email subject line.
preheader_text:
type: string
description: Preview text.
html:
type: string
description: HTML body.
amp:
type: string
description: AMP HTML body.
text:
type: string
description: Plain text body.
EmailCreate:
type: object
required:
- name
properties:
name:
type: string
minLength: 1
maxLength: 255
description: Display name of the email.
is_template:
type: boolean
default: false
description: Whether the email is a reusable template.
parent_folder_id:
type:
- string
- 'null'
format: uuid
description: UUID of the parent folder. Omit or pass `null` to create at root.
content:
$ref: '#/components/schemas/EmailContent'
envelope:
$ref: '#/components/schemas/EmailEnvelopeInput'
transformers:
$ref: '#/components/schemas/Transformers'
EmailEnvelope:
type: object
properties:
from_id:
type:
- integer
- 'null'
description: 'Sender identity ID.
'
from:
type: string
description: The sender address associated with the from_id.
reply_to_id:
type:
- integer
- 'null'
description: 'Reply-to identity ID. This matches one of the ids in *Workspace Settings > Email*.
'
reply_to:
type: string
description: The reply-to address associated with the reply_to_id.
bcc:
type: string
description: BCC email address.
fake_bcc:
type: boolean
description: Whether to use fake BCC. Defaults to true if not provided.
headers:
type: array
items:
$ref: '#/components/schemas/EmailHeader'
description: 'Custom headers. Each item: { "name": "string", "value": "string" }.
'
recipient:
type: string
description: Recipient expression. Defaults to {{customer.email}} if not set.
EmailSummary:
type: object
properties:
id:
type: string
format: uuid
description: ID of email
example: sdflkj345
name:
type: string
description: The name of the email
is_template:
type: boolean
description: Whether the email is a template
is_linked:
type: boolean
description: Whether the email is linked to a workflow (automation, broadcast, etc)
has_translations:
type: boolean
description: Whether the email has translations
parent_folder_id:
type:
- string
- 'null'
format: uuid
description: The ID of the parent folder. Returns `null` if there is no parent, which means the folder is in the root directory.
example: 123e4567-e89b-12d3-a456-426614174000
created:
type: integer
format: Unix timestamp
description: Timestamp of when the email was created.
example: 1714732800
updated:
type: integer
format: Unix timestamp
description: Timestamp of last update to the email.
example: 1714732800
Transformers:
type: object
description: Automate repetitive actions like removing white space and inlining CSS with [transformers](/journeys/design-studio/emails/code-editor/overview/#transformers).
properties:
url_parameters:
type: object
description: 'Appends query string parameters to all absolute URLs in `` and VML elements. Useful for adding UTM tracking or other analytics parameters. Skips `mailto:`, `tel:`, and `sms:` links. Elements marked with `data-ignore-params` are excluded.
'
properties:
enabled:
type: boolean
description: 'Enable URL parameter injection.
'
default: false
parameters:
type: array
description: 'List of parameters to append to URLs.
'
default: []
items:
type: object
properties:
key:
type: string
description: 'Parameter name.
'
value:
type: string
description: 'Parameter value. May contain template variables.
'
url_encode:
type: boolean
description: 'URL-encode the value before appending it to the URL.
'
css_variables:
type: object
description: 'Resolves CSS custom properties (`var(--name)`) into their computed values. Required for email clients that do not support CSS custom properties (most email clients). Variables declared in one `