Edit a landing page template
Overview
Change a template's content or options.
Use this to refine it.
You'll need the template id and the page's content. Every call replaces html_content, json_content, manager_email and other_manager_email: leave one out and it's cleared. title and template_editor_mode keep their current values when you leave them out.
Editing a shared (global) template doesn't change it. A copy is saved under your account with a new
id, and the copy is returned. If your account already has a template with that name, the call returns400: send a differenttitle.
Returns the updated template.
Prerequisites
- A bearer token. See Authentication.
- The template's id (
landing_page_id), from List landing page templates.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/campaign/template/landing-page/update
Authentication
Account token
landing_page_idmust be one of your account's templates or a shared (global) template; otherwise422.
Rate limit
This endpoint has no rate limit.
Request parameters
None.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
landing_page_id | integer | Yes | The template to edit (value in List landing page templates). Must be one of your account's templates or a shared template. |
title | string | No | A new name. Must be unique among your account's templates and the shared templates. Leave it out to keep the current name. |
manager_email | string | No | Manager email address. Must be a real address on a domain that receives mail (checked with an RFC + DNS lookup), so @example.com addresses are rejected. Replaced on every call; leave it out to clear it. |
other_manager_email | array of strings | No | More manager email addresses, each different and checked like manager_email. Replaced on every call; leave it out to clear the list. |
enable_direct_to_customer | boolean | No | Accepted but not yet saved. |
enable_direct_to_manager | boolean | No | Accepted but not yet saved. |
enable_direct_to_owner | boolean | No | Accepted but not yet saved. |
html_content | string | No | The page's HTML. Not needed when you send html_content_b64. Replaced on every call; leave it out to clear it. |
html_content_b64 | string | No | The HTML, base64-encoded. Send it instead of html_content when the HTML contains <script>, <iframe> or on*= attributes, which AWS WAF blocks in plain text. It is decoded into html_content before validation. |
json_content | string | No | The editor's design data, as a JSON string; must be valid JSON. Replaced on every call; leave it out to clear it. |
template_editor_mode | string | No | custom or html_editor. Leave it out to keep the current mode. |
Request payload
{
"landing_page_id": 4548,
"title": "Summer Campaign Landing Page",
"html_content": "<p>Example content</p>",
"json_content": "{}",
"template_editor_mode": "custom"
}Response body
The payload is inside data.
| Field | Type | Description |
|---|---|---|
status | string | success. |
message | string | Landing Page has been updated successfully! |
data | object | The saved template. For a shared template, this is your account's new copy. |
data.id | integer | The template's id. Use it as landing_page_id. |
data.company_id | integer or null | The account that owns the template. null for a shared (global) template. |
data.store_id | integer or null | The location the template is tied to, or null. |
data.title | string | The template's name. |
data.description | string or null | The template's description, or null. |
data.url_slug | string or null | URL slug, or null. |
data.html_content | string or null | The page's HTML. |
data.json_content | object or null | The editor's design data. |
data.template_editor_mode | string or null | The editor used to author the template: custom or html_editor. |
data.manager_email | string or null | Manager email address saved on the template. |
data.other_manager_email | array of strings or null | More manager email addresses saved on the template. |
data.enable_direct_to_manager | boolean or null | Direct-to-manager option. |
data.enable_direct_to_owner | boolean or null | Direct-to-owner option. |
data.enable_direct_to_customer | boolean or null | Direct-to-customer option. |
data.created_at | string or null | When the template was created (ISO 8601). |
data.updated_at | string or null | When the template was last changed (ISO 8601). |
data.unique_code | string | The template's encoded id. |
Response payload
{
"data": {
"status": "success",
"message": "Landing Page has been updated successfully!",
"data": {
"id": 4548,
"company_id": 5994,
"store_id": null,
"title": "Summer Campaign Landing Page",
"description": null,
"url_slug": null,
"html_content": "<p>Example content</p>",
"json_content": [],
"template_editor_mode": "custom",
"manager_email": null,
"other_manager_email": [],
"enable_direct_to_manager": false,
"enable_direct_to_owner": false,
"enable_direct_to_customer": false,
"created_at": "2026-09-23T10:43:44.000000Z",
"updated_at": "2026-10-01T10:30:00.000000Z",
"unique_code": "89kri1"
}
}
}Examples
Success payload
See Response payload.
Error payload
400 Name already used by your account
{
"message": "Bad Request",
"status": "error",
"errors": {
"title": "A landing page with this name already exists for your company. Please choose a different name for your landing page."
}
}422 Not your template
{
"message": "The selected landing page does not belong to your company.",
"errors": {
"landing_page_id": [
"The selected landing page does not belong to your company."
]
}
}422 Title taken
{
"message": "The template name has already been taken.",
"errors": {
"title": [
"The template name has already been taken."
]
}
}422 landing_page_id missing
{
"message": "The landing page id field is required.",
"errors": {
"landing_page_id": [
"The landing page id field is required."
]
}
}| Status | Meaning |
|---|---|
200 | The template was saved (for a shared template, as a new copy under your account). |
400 | You edited a shared template and your account already has a template with that name. |
401 | The token is missing, expired or invalid. |
422 | landing_page_id is missing or outside your account, title is taken, json_content isn't valid JSON, or an email fails the RFC + DNS check. |
500 | Unexpected server error. |
Example request
curl --request POST \
--url "https://production-api.shoutaboutus.com/api/v1/campaign/template/landing-page/update" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"landing_page_id": 4548, "title": "Summer Campaign Landing Page", "html_content": "<p>Example content</p>", "json_content": "{}", "template_editor_mode": "custom"}'Updated 17 days ago
Did this page help you?
