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 returns 400: send a different title.

Returns the updated template.

Prerequisites

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/campaign/template/landing-page/update

Authentication

Account token

  • landing_page_id must be one of your account's templates or a shared (global) template; otherwise 422.

Rate limit

This endpoint has no rate limit.

Request parameters

None.

Request body

FieldTypeRequiredDescription
landing_page_idintegerYesThe template to edit (value in List landing page templates). Must be one of your account's templates or a shared template.
titlestringNoA new name. Must be unique among your account's templates and the shared templates. Leave it out to keep the current name.
manager_emailstringNoManager 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_emailarray of stringsNoMore manager email addresses, each different and checked like manager_email. Replaced on every call; leave it out to clear the list.
enable_direct_to_customerbooleanNoAccepted but not yet saved.
enable_direct_to_managerbooleanNoAccepted but not yet saved.
enable_direct_to_ownerbooleanNoAccepted but not yet saved.
html_contentstringNoThe page's HTML. Not needed when you send html_content_b64. Replaced on every call; leave it out to clear it.
html_content_b64stringNoThe 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_contentstringNoThe editor's design data, as a JSON string; must be valid JSON. Replaced on every call; leave it out to clear it.
template_editor_modestringNocustom 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.

FieldTypeDescription
statusstringsuccess.
messagestringLanding Page has been updated successfully!
dataobjectThe saved template. For a shared template, this is your account's new copy.
data.idintegerThe template's id. Use it as landing_page_id.
data.company_idinteger or nullThe account that owns the template. null for a shared (global) template.
data.store_idinteger or nullThe location the template is tied to, or null.
data.titlestringThe template's name.
data.descriptionstring or nullThe template's description, or null.
data.url_slugstring or nullURL slug, or null.
data.html_contentstring or nullThe page's HTML.
data.json_contentobject or nullThe editor's design data.
data.template_editor_modestring or nullThe editor used to author the template: custom or html_editor.
data.manager_emailstring or nullManager email address saved on the template.
data.other_manager_emailarray of strings or nullMore manager email addresses saved on the template.
data.enable_direct_to_managerboolean or nullDirect-to-manager option.
data.enable_direct_to_ownerboolean or nullDirect-to-owner option.
data.enable_direct_to_customerboolean or nullDirect-to-customer option.
data.created_atstring or nullWhen the template was created (ISO 8601).
data.updated_atstring or nullWhen the template was last changed (ISO 8601).
data.unique_codestringThe 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."
    ]
  }
}
StatusMeaning
200The template was saved (for a shared template, as a new copy under your account).
400You edited a shared template and your account already has a template with that name.
401The token is missing, expired or invalid.
422landing_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.
500Unexpected 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"}'

Did this page help you?