Update landing page template

Overview

Update an existing landing-page template (title, manager emails, HTML/JSON content, editor mode). Copy-on-write for globals: a template with no company_id copies into the caller's account first (a name clash returns 400).

Known issue: enable_direct_to_customer / enable_direct_to_manager / enable_direct_to_owner pass validation but not persisted by this endpoint yet.

Prerequisites

  • A bearer token in the Authorization header.

Base URL

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

Endpoint

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

Authentication

  • Requires a bearer token in the Authorization: Bearer <bearer-token> header.

  • bearer token, account role — authentication. landing_page_id must resolve to a template owned by the caller's account (or a global one).

Rate limit

  • No rate limit.

Request body

FieldTypeRequiredDescription
landing_page_idintegerRequiredMust be an existing landing-page template inside your own account tree.
titlestringOptionalNew title. Must be unique within the caller's account and against global (shared) templates.
manager_emailstring(email)Optionalemail:rfc,dns.
other_manager_emailstring[]OptionalEach a distinct email:rfc,dns.
enable_direct_to_customerbooleanOptionalAccepted but not yet persisted.
enable_direct_to_managerbooleanOptionalAccepted but not yet persisted.
enable_direct_to_ownerbooleanOptionalAccepted but not yet persisted.
html_contentstringOptionalHTML body. Optional when you send html_content_b64.
html_content_b64string (base64)OptionalBase64 of html_content for WAF-blocked bytes; decoded before validation.
json_contentstring (JSON)OptionalEditor JSON, validated as json.
template_editor_modestringOptionalcustom or html_editor.
{
  "landing_page_id": "<landingPageId>",
  "title": "Summer Campaign Landing Page",
  "manager_email": "[email protected]",
  "other_manager_email": [
    "[email protected]"
  ],
  "enable_direct_to_customer": true,
  "enable_direct_to_manager": true,
  "enable_direct_to_owner": false,
  "html_content": "<p>Example content</p>",
  "json_content": "{}",
  "template_editor_mode": "custom"
}

How it works

  • Synchronous. 200 OK returns the saved model under data.data (includes the appended unique_code). 400 (envelope) when replicating a global and the name already exists for the company. 422 on validation failure or when the template is not in the caller's account.

Response

200 OK · 200

{
  "data": {
    "status": "success",
    "message": "Landing Page has been updated successfully!",
    "data": {
      "id": 1,
      "company_id": 30,
      "store_id": 123,
      "title": "Summer Campaign Landing Page",
      "description": null,
      "url_slug": null,
      "html_content": "<p>Example content</p>",
      "json_content": {},
      "template_editor_mode": "custom",
      "manager_email": "[email protected]",
      "other_manager_email": [
        "[email protected]"
      ],
      "enable_direct_to_manager": false,
      "enable_direct_to_owner": false,
      "enable_direct_to_customer": false,
      "created_at": "2026-07-09T10:30:00.000000Z",
      "updated_at": "2026-07-09T10:30:00.000000Z",
      "unique_code": "aBcDeFg"
    }
  }
}

422 Not your template · 422

{
  "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."
    ]
  }
}

Errors

StatusMeaning
400The request was rejected — the response explains why
401The bearer token is missing, expired or invalid
422Not your template
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": "<landingPageId>", "title": "Summer Campaign Landing Page", "manager_email": "[email protected]", "other_manager_email": ["[email protected]"], "enable_direct_to_customer": true, "enable_direct_to_manager": true, "enable_direct_to_owner": false, "html_content": "<p>Example content</p>", "json_content": "{}", "template_editor_mode": "custom"}'

Did this page help you?