Email Template
The subject and text of the emails a website sends — the contact form’s notification today — as plain text with {{placeholders}}, plus the per-view overlay that says it in another view’s language. The platform creates the default template of each kind; it can be edited, not deleted.
List email_templates
The text of one kind of email a website sends: a subject and a plain-text body with {{placeholders}}, written in the website's default language. The platform creates one template of each kind for every website, marked is_default, and a website may add its own. What another view says instead lives in the template's views overlays, and a field a view does not override is sent as written here.
path Parameters
website_idId of the parent website.
query Parameters
page_sizeRows per page. Over the maximum is clamped, not rejected.
page_tokenOpaque token from a previous next_page_token. A token minted under a different order_by/filter is rejected.
skipRows to skip before the page (AIP-158). skip + page_size is capped at 10000; beyond that is OUT_OF_RANGE.
order_byComma-separated field [asc|desc], at most 3 keys. Default: display_name asc. Sortable: create_time, display_name.
filterAIP-160 subset (§8). Filterable: create_time, display_name, is_default, kind. A field outside the list is INVALID_ARGUMENT.
List email_templates › Responses
One page of email_templates.
This page of email_templates, in the requested order.
next_page_tokenOpaque. Absent or empty means this was the last page.
total_sizeRows in the whole filtered collection, not in this page.
Create email_template
Adds a template of your own beside the one the platform created for its kind — a second wording to switch the website to, for instance. kind is required and must be a kind of email the platform sends; an unknown one is INVALID_ARGUMENT naming the kinds there are. A template created here is never the default of its kind: is_default is the platform's to set.
path Parameters
website_idId of the parent website.
Create email_template › Request Body
display_nameThe template's name in the admin. A label for the people who edit it — the email's recipient never sees it.
subjectThe email's subject line, with {{placeholders}} as in body. It stays one line: a line break a placeholder's value brings in is sent as a space.
bodyThe email's text: plain text, where an empty line starts a new paragraph and {{placeholder}} is replaced by its value when the email is sent. There is no HTML to write — the platform sets the text in its own layout. A placeholder the kind does not have is replaced by nothing. A feedback template may use {{name}}, {{email}} and {{phone}} — what the visitor entered, empty when the form does not ask for it — {{message}}, what they wrote, {{page_title}}, the title of the contact page in the language of its view, and {{website_name}}. Both customer kinds may use {{display_name}} — the customer's name, or their email address when they gave none — {{email}}, the address they sign in with, and {{website_name}}; a customer_welcome template also {{account_url}}, the address of their account page, and a customer_password_reset template {{reset_url}}, the one-time link to the page where they choose a new password. A reset text that leaves {{reset_url}} out is not sent: the platform's own English email goes instead. Every editorial kind may use {{website_name}}. An editorial_topics_proposed template also {{topic_count}}, {{topics}} — the titles of the new topics, one per line — {{duplicates_skipped}}, {{topic_status}} (PROPOSED or CANDIDATE) and {{topics_url}}; an editorial_article_drafted template {{title}}, {{scheduled_time}} (YYYY-MM-DD HH:MM in the plan's time zone), {{verdict}}, {{score}}, {{issues}} — one per line — and {{cost}}, these four empty for a draft the AI did not write, and {{edit_url}}, {{generation_url}} and {{calendar_url}}; an editorial_article_published template {{title}}, {{public_url}}, the article's address on the website, {{edit_url}} and {{calendar_url}}; an editorial_failure template {{title}} and {{scheduled_time}}, empty when no single article is concerned, {{stage}} — the step that went wrong — {{reason}}, its code, {{message}}, {{issues}} and {{url}}, the run's page or the calendar. The editorial links lead into the admin, and are empty when the platform has no address of it configured.
kindWhich email the template is for: feedback — the message a website's contact form sends to its notification addresses; customer_welcome — what a visitor receives after registering an account on the website; customer_password_reset — the link a customer follows to choose a new password; editorial_topics_proposed, editorial_article_drafted, editorial_article_published and editorial_failure — what the editorial desk sends the notification addresses of its plan when it has proposed topics, a draft is ready, an article has gone live, or something went wrong. The kind decides which placeholders the text may use. Required on Create and fixed afterwards.
Create email_template › Responses
The created resource.
nameThe resource name (§5) — the identity of this resource, and the path that addresses it: websites/{website}/cms_pages/{cms_page}. It is the handle to store, not a human label.
idThe last segment of name on its own, for a client that needs to build a child URL. Unique inside its parent, never across the platform.
create_timeWhen the resource was created (RFC 3339, UTC).
update_timeWhen the resource last changed (RFC 3339, UTC).
etagVersion of the persisted state. Send it back in If-Match on Update or Delete and the write is rejected with ABORTED if anyone else changed the resource meanwhile (§14).
kindWhich email the template is for: feedback — the message a website's contact form sends to its notification addresses; customer_welcome — what a visitor receives after registering an account on the website; customer_password_reset — the link a customer follows to choose a new password; editorial_topics_proposed, editorial_article_drafted, editorial_article_published and editorial_failure — what the editorial desk sends the notification addresses of its plan when it has proposed topics, a draft is ready, an article has gone live, or something went wrong. The kind decides which placeholders the text may use. Required on Create and fixed afterwards.
display_nameThe template's name in the admin. A label for the people who edit it — the email's recipient never sees it.
subjectThe email's subject line, with {{placeholders}} as in body. It stays one line: a line break a placeholder's value brings in is sent as a space.
bodyThe email's text: plain text, where an empty line starts a new paragraph and {{placeholder}} is replaced by its value when the email is sent. There is no HTML to write — the platform sets the text in its own layout. A placeholder the kind does not have is replaced by nothing. A feedback template may use {{name}}, {{email}} and {{phone}} — what the visitor entered, empty when the form does not ask for it — {{message}}, what they wrote, {{page_title}}, the title of the contact page in the language of its view, and {{website_name}}. Both customer kinds may use {{display_name}} — the customer's name, or their email address when they gave none — {{email}}, the address they sign in with, and {{website_name}}; a customer_welcome template also {{account_url}}, the address of their account page, and a customer_password_reset template {{reset_url}}, the one-time link to the page where they choose a new password. A reset text that leaves {{reset_url}} out is not sent: the platform's own English email goes instead. Every editorial kind may use {{website_name}}. An editorial_topics_proposed template also {{topic_count}}, {{topics}} — the titles of the new topics, one per line — {{duplicates_skipped}}, {{topic_status}} (PROPOSED or CANDIDATE) and {{topics_url}}; an editorial_article_drafted template {{title}}, {{scheduled_time}} (YYYY-MM-DD HH:MM in the plan's time zone), {{verdict}}, {{score}}, {{issues}} — one per line — and {{cost}}, these four empty for a draft the AI did not write, and {{edit_url}}, {{generation_url}} and {{calendar_url}}; an editorial_article_published template {{title}}, {{public_url}}, the article's address on the website, {{edit_url}} and {{calendar_url}}; an editorial_failure template {{title}} and {{scheduled_time}}, empty when no single article is concerned, {{stage}} — the step that went wrong — {{reason}}, its code, {{message}}, {{issues}} and {{url}}, the run's page or the calendar. The editorial links lead into the admin, and are empty when the platform has no address of it configured.
is_defaultWhether this is the template the platform created for its kind — the one an email of that kind is sent from when the website has chosen no other. There is one per kind, only the platform sets it, and it cannot be deleted.
Get email_template
The text of one kind of email a website sends: a subject and a plain-text body with {{placeholders}}, written in the website's default language. The platform creates one template of each kind for every website, marked is_default, and a website may add its own. What another view says instead lives in the template's views overlays, and a field a view does not override is sent as written here.
path Parameters
website_idId of the parent website.
email_template_idId of the parent email_template.
Headers
If-None-MatchA matching etag answers 304 with no body (§16).
Get email_template › Responses
The resource.
nameThe resource name (§5) — the identity of this resource, and the path that addresses it: websites/{website}/cms_pages/{cms_page}. It is the handle to store, not a human label.
idThe last segment of name on its own, for a client that needs to build a child URL. Unique inside its parent, never across the platform.
create_timeWhen the resource was created (RFC 3339, UTC).
update_timeWhen the resource last changed (RFC 3339, UTC).
etagVersion of the persisted state. Send it back in If-Match on Update or Delete and the write is rejected with ABORTED if anyone else changed the resource meanwhile (§14).
kindWhich email the template is for: feedback — the message a website's contact form sends to its notification addresses; customer_welcome — what a visitor receives after registering an account on the website; customer_password_reset — the link a customer follows to choose a new password; editorial_topics_proposed, editorial_article_drafted, editorial_article_published and editorial_failure — what the editorial desk sends the notification addresses of its plan when it has proposed topics, a draft is ready, an article has gone live, or something went wrong. The kind decides which placeholders the text may use. Required on Create and fixed afterwards.
display_nameThe template's name in the admin. A label for the people who edit it — the email's recipient never sees it.
subjectThe email's subject line, with {{placeholders}} as in body. It stays one line: a line break a placeholder's value brings in is sent as a space.
bodyThe email's text: plain text, where an empty line starts a new paragraph and {{placeholder}} is replaced by its value when the email is sent. There is no HTML to write — the platform sets the text in its own layout. A placeholder the kind does not have is replaced by nothing. A feedback template may use {{name}}, {{email}} and {{phone}} — what the visitor entered, empty when the form does not ask for it — {{message}}, what they wrote, {{page_title}}, the title of the contact page in the language of its view, and {{website_name}}. Both customer kinds may use {{display_name}} — the customer's name, or their email address when they gave none — {{email}}, the address they sign in with, and {{website_name}}; a customer_welcome template also {{account_url}}, the address of their account page, and a customer_password_reset template {{reset_url}}, the one-time link to the page where they choose a new password. A reset text that leaves {{reset_url}} out is not sent: the platform's own English email goes instead. Every editorial kind may use {{website_name}}. An editorial_topics_proposed template also {{topic_count}}, {{topics}} — the titles of the new topics, one per line — {{duplicates_skipped}}, {{topic_status}} (PROPOSED or CANDIDATE) and {{topics_url}}; an editorial_article_drafted template {{title}}, {{scheduled_time}} (YYYY-MM-DD HH:MM in the plan's time zone), {{verdict}}, {{score}}, {{issues}} — one per line — and {{cost}}, these four empty for a draft the AI did not write, and {{edit_url}}, {{generation_url}} and {{calendar_url}}; an editorial_article_published template {{title}}, {{public_url}}, the article's address on the website, {{edit_url}} and {{calendar_url}}; an editorial_failure template {{title}} and {{scheduled_time}}, empty when no single article is concerned, {{stage}} — the step that went wrong — {{reason}}, its code, {{message}}, {{issues}} and {{url}}, the run's page or the calendar. The editorial links lead into the admin, and are empty when the platform has no address of it configured.
is_defaultWhether this is the template the platform created for its kind — the one an email of that kind is sent from when the website has chosen no other. There is one per kind, only the platform sets it, and it cannot be deleted.
Delete email_template
Removes a template together with its per-view overlays. The default template of a kind cannot be deleted — every email of that kind falls back to it — and answers FAILED_PRECONDITION; edit its text instead. An email that was set to send from a deleted template is sent from the default of its kind.
path Parameters
website_idId of the parent website.
email_template_idId of the parent email_template.
Headers
If-MatchThe etag the client last read. A mismatch is ABORTED (409) with the current resource in the error details (§14).
Delete email_template › Responses
Deleted. No body (§7).
Update email_template
The text of one kind of email a website sends: a subject and a plain-text body with {{placeholders}}, written in the website's default language. The platform creates one template of each kind for every website, marked is_default, and a website may add its own. What another view says instead lives in the template's views overlays, and a field a view does not override is sent as written here.
path Parameters
website_idId of the parent website.
email_template_idId of the parent email_template.
query Parameters
update_maskComma-separated field paths to merge. A field named here and sent as null is cleared; without the mask a null is dropped (§7, §11).
Headers
If-MatchThe etag the client last read. A mismatch is ABORTED (409) with the current resource in the error details (§14).
Update email_template › Request Body
display_nameThe template's name in the admin. A label for the people who edit it — the email's recipient never sees it.
subjectThe email's subject line, with {{placeholders}} as in body. It stays one line: a line break a placeholder's value brings in is sent as a space.
bodyThe email's text: plain text, where an empty line starts a new paragraph and {{placeholder}} is replaced by its value when the email is sent. There is no HTML to write — the platform sets the text in its own layout. A placeholder the kind does not have is replaced by nothing. A feedback template may use {{name}}, {{email}} and {{phone}} — what the visitor entered, empty when the form does not ask for it — {{message}}, what they wrote, {{page_title}}, the title of the contact page in the language of its view, and {{website_name}}. Both customer kinds may use {{display_name}} — the customer's name, or their email address when they gave none — {{email}}, the address they sign in with, and {{website_name}}; a customer_welcome template also {{account_url}}, the address of their account page, and a customer_password_reset template {{reset_url}}, the one-time link to the page where they choose a new password. A reset text that leaves {{reset_url}} out is not sent: the platform's own English email goes instead. Every editorial kind may use {{website_name}}. An editorial_topics_proposed template also {{topic_count}}, {{topics}} — the titles of the new topics, one per line — {{duplicates_skipped}}, {{topic_status}} (PROPOSED or CANDIDATE) and {{topics_url}}; an editorial_article_drafted template {{title}}, {{scheduled_time}} (YYYY-MM-DD HH:MM in the plan's time zone), {{verdict}}, {{score}}, {{issues}} — one per line — and {{cost}}, these four empty for a draft the AI did not write, and {{edit_url}}, {{generation_url}} and {{calendar_url}}; an editorial_article_published template {{title}}, {{public_url}}, the article's address on the website, {{edit_url}} and {{calendar_url}}; an editorial_failure template {{title}} and {{scheduled_time}}, empty when no single article is concerned, {{stage}} — the step that went wrong — {{reason}}, its code, {{message}}, {{issues}} and {{url}}, the run's page or the calendar. The editorial links lead into the admin, and are empty when the platform has no address of it configured.
Update email_template › Responses
The updated resource.
nameThe resource name (§5) — the identity of this resource, and the path that addresses it: websites/{website}/cms_pages/{cms_page}. It is the handle to store, not a human label.
idThe last segment of name on its own, for a client that needs to build a child URL. Unique inside its parent, never across the platform.
create_timeWhen the resource was created (RFC 3339, UTC).
update_timeWhen the resource last changed (RFC 3339, UTC).
etagVersion of the persisted state. Send it back in If-Match on Update or Delete and the write is rejected with ABORTED if anyone else changed the resource meanwhile (§14).
kindWhich email the template is for: feedback — the message a website's contact form sends to its notification addresses; customer_welcome — what a visitor receives after registering an account on the website; customer_password_reset — the link a customer follows to choose a new password; editorial_topics_proposed, editorial_article_drafted, editorial_article_published and editorial_failure — what the editorial desk sends the notification addresses of its plan when it has proposed topics, a draft is ready, an article has gone live, or something went wrong. The kind decides which placeholders the text may use. Required on Create and fixed afterwards.
display_nameThe template's name in the admin. A label for the people who edit it — the email's recipient never sees it.
subjectThe email's subject line, with {{placeholders}} as in body. It stays one line: a line break a placeholder's value brings in is sent as a space.
bodyThe email's text: plain text, where an empty line starts a new paragraph and {{placeholder}} is replaced by its value when the email is sent. There is no HTML to write — the platform sets the text in its own layout. A placeholder the kind does not have is replaced by nothing. A feedback template may use {{name}}, {{email}} and {{phone}} — what the visitor entered, empty when the form does not ask for it — {{message}}, what they wrote, {{page_title}}, the title of the contact page in the language of its view, and {{website_name}}. Both customer kinds may use {{display_name}} — the customer's name, or their email address when they gave none — {{email}}, the address they sign in with, and {{website_name}}; a customer_welcome template also {{account_url}}, the address of their account page, and a customer_password_reset template {{reset_url}}, the one-time link to the page where they choose a new password. A reset text that leaves {{reset_url}} out is not sent: the platform's own English email goes instead. Every editorial kind may use {{website_name}}. An editorial_topics_proposed template also {{topic_count}}, {{topics}} — the titles of the new topics, one per line — {{duplicates_skipped}}, {{topic_status}} (PROPOSED or CANDIDATE) and {{topics_url}}; an editorial_article_drafted template {{title}}, {{scheduled_time}} (YYYY-MM-DD HH:MM in the plan's time zone), {{verdict}}, {{score}}, {{issues}} — one per line — and {{cost}}, these four empty for a draft the AI did not write, and {{edit_url}}, {{generation_url}} and {{calendar_url}}; an editorial_article_published template {{title}}, {{public_url}}, the article's address on the website, {{edit_url}} and {{calendar_url}}; an editorial_failure template {{title}} and {{scheduled_time}}, empty when no single article is concerned, {{stage}} — the step that went wrong — {{reason}}, its code, {{message}}, {{issues}} and {{url}}, the run's page or the calendar. The editorial links lead into the admin, and are empty when the platform has no address of it configured.
is_defaultWhether this is the template the platform created for its kind — the one an email of that kind is sent from when the website has chosen no other. There is one per kind, only the platform sets it, and it cannot be deleted.
List views
What one view's email says instead of the template: its subject and text in that view's language. It works like every other overlay — optional fields, a fallback to the template, and overridden deciding which of them this view claims — with one addition: an Update of an overlay that does not exist yet creates it, so saving a view's text is one call whether or not it had one.
path Parameters
website_idId of the parent website.
email_template_idThe template this overlay belongs to. Fixed by the URL.
query Parameters
page_sizeRows per page. Over the maximum is clamped, not rejected.
page_tokenOpaque token from a previous next_page_token. A token minted under a different order_by/filter is rejected.
skipRows to skip before the page (AIP-158). skip + page_size is capped at 10000; beyond that is OUT_OF_RANGE.
order_byComma-separated field [asc|desc], at most 3 keys. Default: create_time desc. Sortable: none — this collection serves its documented order only.
filterAIP-160 subset (§8). Filterable: none. A field outside the list is INVALID_ARGUMENT.
List views › Responses
One page of views.
This page of views, in the requested order.
next_page_tokenOpaque. Absent or empty means this was the last page.
total_sizeRows in the whole filtered collection, not in this page.
Create view
Gives a view its own subject and text for this template. The overlay is named after its view: pass the view's id as ?id=. A view that already has one answers ALREADY_EXISTS — update it instead, or skip this call altogether: an Update creates a missing overlay.
path Parameters
website_idId of the parent website.
email_template_idThe template this overlay belongs to. Fixed by the URL.
Create view › Request Body
overriddenThe fields this view actually overrides — subject, body, or both. A field not listed falls back along the view's fallback chain to the template itself, whatever value is stored for it here.
subjectThis view's subject line, with the template's placeholders.
bodyThis view's text, written like the template's body.
Create view › Responses
The created resource.
nameThe resource name (§5) — the identity of this resource, and the path that addresses it: websites/{website}/cms_pages/{cms_page}. It is the handle to store, not a human label.
idThe last segment of name on its own, for a client that needs to build a child URL. Unique inside its parent, never across the platform.
create_timeWhen the resource was created (RFC 3339, UTC).
update_timeWhen the resource last changed (RFC 3339, UTC).
etagVersion of the persisted state. Send it back in If-Match on Update or Delete and the write is rejected with ABORTED if anyone else changed the resource meanwhile (§14).
uidThe overlay's own storage id. The overlay is addressed by its view, not by this.
email_template_idThe template this overlay belongs to. Fixed by the URL.
view_idThe view this overlay speaks for. Fixed by the URL.
overriddenThe fields this view actually overrides — subject, body, or both. A field not listed falls back along the view's fallback chain to the template itself, whatever value is stored for it here.
subjectThis view's subject line, with the template's placeholders.
bodyThis view's text, written like the template's body.
Get view
What one view's email says instead of the template: its subject and text in that view's language. It works like every other overlay — optional fields, a fallback to the template, and overridden deciding which of them this view claims — with one addition: an Update of an overlay that does not exist yet creates it, so saving a view's text is one call whether or not it had one.
path Parameters
website_idId of the parent website.
email_template_idThe template this overlay belongs to. Fixed by the URL.
view_idThe view this overlay speaks for. Fixed by the URL.
Headers
If-None-MatchA matching etag answers 304 with no body (§16).
Get view › Responses
The resource.
nameThe resource name (§5) — the identity of this resource, and the path that addresses it: websites/{website}/cms_pages/{cms_page}. It is the handle to store, not a human label.
idThe last segment of name on its own, for a client that needs to build a child URL. Unique inside its parent, never across the platform.
create_timeWhen the resource was created (RFC 3339, UTC).
update_timeWhen the resource last changed (RFC 3339, UTC).
etagVersion of the persisted state. Send it back in If-Match on Update or Delete and the write is rejected with ABORTED if anyone else changed the resource meanwhile (§14).
uidThe overlay's own storage id. The overlay is addressed by its view, not by this.
email_template_idThe template this overlay belongs to. Fixed by the URL.
view_idThe view this overlay speaks for. Fixed by the URL.
overriddenThe fields this view actually overrides — subject, body, or both. A field not listed falls back along the view's fallback chain to the template itself, whatever value is stored for it here.
subjectThis view's subject line, with the template's placeholders.
bodyThis view's text, written like the template's body.
Delete view
Drops this view's own text: its emails go back to the template's, along the view's fallback chain.
path Parameters
website_idId of the parent website.
email_template_idThe template this overlay belongs to. Fixed by the URL.
view_idThe view this overlay speaks for. Fixed by the URL.
Headers
If-MatchThe etag the client last read. A mismatch is ABORTED (409) with the current resource in the error details (§14).
Delete view › Responses
Deleted. No body (§7).
Update view
Writes what this view's email says. If the view has no overlay for the template yet, this creates it, so saving a view's text is the same call either way. Only the fields named in overridden are sent in this view — the others fall back to the template. The view itself must exist on the website; If-Match on an overlay that does not exist yet is ABORTED.
path Parameters
website_idId of the parent website.
email_template_idThe template this overlay belongs to. Fixed by the URL.
view_idThe view this overlay speaks for. Fixed by the URL.
query Parameters
update_maskComma-separated field paths to merge. A field named here and sent as null is cleared; without the mask a null is dropped (§7, §11).
Headers
If-MatchThe etag the client last read. A mismatch is ABORTED (409) with the current resource in the error details (§14).
Update view › Request Body
overriddenThe fields this view actually overrides — subject, body, or both. A field not listed falls back along the view's fallback chain to the template itself, whatever value is stored for it here.
subjectThis view's subject line, with the template's placeholders.
bodyThis view's text, written like the template's body.
Update view › Responses
The updated resource.
nameThe resource name (§5) — the identity of this resource, and the path that addresses it: websites/{website}/cms_pages/{cms_page}. It is the handle to store, not a human label.
idThe last segment of name on its own, for a client that needs to build a child URL. Unique inside its parent, never across the platform.
create_timeWhen the resource was created (RFC 3339, UTC).
update_timeWhen the resource last changed (RFC 3339, UTC).
etagVersion of the persisted state. Send it back in If-Match on Update or Delete and the write is rejected with ABORTED if anyone else changed the resource meanwhile (§14).
uidThe overlay's own storage id. The overlay is addressed by its view, not by this.
email_template_idThe template this overlay belongs to. Fixed by the URL.
view_idThe view this overlay speaks for. Fixed by the URL.
overriddenThe fields this view actually overrides — subject, body, or both. A field not listed falls back along the view's fallback chain to the template itself, whatever value is stored for it here.
subjectThis view's subject line, with the template's placeholders.
bodyThis view's text, written like the template's body.