Skip to main content
POST
/
v1
/
pages
/
{page_id}
/
fill
curl --request POST \
  --url https://app.ecomwize.io/api/v1/pages/e22f3857-cf0c-49c0-9e44-d76ea0bb7221/fill \
  --header 'Authorization: Bearer ew_live_your_key_here' \
  --header 'Content-Type: application/json' \
  --data '{
    "sections": {
      "section_1": {
        "hero01_heading": "Summer sale is here",
        "hero01_btn": "Shop Now",
        "imageUrl": "https://cdn.shopify.com/my-image.jpg"
      },
      "section_3": {
        "testimonial11_heading": "What our customers say"
      }
    }
  }'
import requests

response = requests.post(
    "https://app.ecomwize.io/api/v1/pages/e22f3857-cf0c-49c0-9e44-d76ea0bb7221/fill",
    headers={
        "Authorization": "Bearer ew_live_your_key_here",
        "Content-Type": "application/json"
    },
    json={
        "sections": {
            "section_1": {
                "hero01_heading": "Summer sale is here",
                "hero01_btn": "Shop Now"
            }
        }
    }
)
print(response.json())
const response = await fetch(
  "https://app.ecomwize.io/api/v1/pages/e22f3857-cf0c-49c0-9e44-d76ea0bb7221/fill",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer ew_live_your_key_here",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      sections: {
        section_1: {
          hero01_heading: "Summer sale is here",
          hero01_btn: "Shop Now"
        }
      }
    })
  }
);
const data = await response.json();
{
  "success": true,
  "message": "Successfully updated 2 section(s)"
}
{
  "error": "Validation failed",
  "message": "Some sections could not be filled. This page has 12 sections (section_1 to section_12).",
  "details": [
    "section_15 is out of range (section_1 to section_12)"
  ],
  "status": 400
}
{
  "error": "Read-only API key",
  "message": "This API key has read-only access. Create a new key with Full Access.",
  "status": 403
}
Merges your content into existing page sections. Only the fields you send are updated — everything else stays the same. You can update one section or all of them in a single request.
This endpoint requires an API key with Full access permission.
page_id
string
required
The unique ID of the page to fill. Get it from the list pages endpoint.
Authorization
string
required
Bearer token. Example: Bearer ew_live_your_key_here
sections
object
required
Object keyed by section number (section_1, section_2, etc.) with content fields to update. Only include the fields you want to change.

Accepted formats

The fill endpoint is flexible and accepts multiple formats:
You can pass the output from the get page endpoint directly. The API auto-unwraps the type and content wrapper:
{
  "sections": {
    "section_1": {
      "type": "hero01",
      "content": {
        "hero01_heading": "New title"
      }
    }
  }
}
You can also send section keys at the root level without a sections wrapper:
{
  "section_1": {
    "hero01_heading": "New title"
  }
}

Filling nested content

Testimonial cards

Cards are matched by position (index):
{
  "sections": {
    "section_3": {
      "cards": [
        { "testimonial11_card_1_quote": "Amazing!", "testimonial11_card_1_author": "Jane D." },
        { "testimonial11_card_2_quote": "Life changing!", "testimonial11_card_2_author": "Mark S." }
      ]
    }
  }
}

Product snippets

Snippets are matched by type:
{
  "sections": {
    "section_4": {
      "snippets": [
        { "type": "bulletList", "product01_bulletList_1": "New bullet 1" },
        { "type": "noticeBox", "product01_noticeBox_title": "SELLING FAST" }
      ]
    }
  }
}

Advertorial sidebar

{
  "sections": {
    "section_1": {
      "sidebar": {
        "title": "My Product",
        "tag": "Best Seller",
        "buttonText": "Check Availability",
        "bullets": ["Benefit one", "Benefit two"]
      }
    }
  }
}

HTML formatting

You can include HTML tags in text content:
TagResult
<strong>Bold text
<em>Italic text
<u>Underlined text
<br>Line break
<span class='text-highlight'>Highlighted text
When using <span> tags with class attributes, use single quotes for the class value to avoid breaking JSON: <span class='text-highlight'> instead of <span class="text-highlight">.
curl --request POST \
  --url https://app.ecomwize.io/api/v1/pages/e22f3857-cf0c-49c0-9e44-d76ea0bb7221/fill \
  --header 'Authorization: Bearer ew_live_your_key_here' \
  --header 'Content-Type: application/json' \
  --data '{
    "sections": {
      "section_1": {
        "hero01_heading": "Summer sale is here",
        "hero01_btn": "Shop Now",
        "imageUrl": "https://cdn.shopify.com/my-image.jpg"
      },
      "section_3": {
        "testimonial11_heading": "What our customers say"
      }
    }
  }'
import requests

response = requests.post(
    "https://app.ecomwize.io/api/v1/pages/e22f3857-cf0c-49c0-9e44-d76ea0bb7221/fill",
    headers={
        "Authorization": "Bearer ew_live_your_key_here",
        "Content-Type": "application/json"
    },
    json={
        "sections": {
            "section_1": {
                "hero01_heading": "Summer sale is here",
                "hero01_btn": "Shop Now"
            }
        }
    }
)
print(response.json())
const response = await fetch(
  "https://app.ecomwize.io/api/v1/pages/e22f3857-cf0c-49c0-9e44-d76ea0bb7221/fill",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer ew_live_your_key_here",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      sections: {
        section_1: {
          hero01_heading: "Summer sale is here",
          hero01_btn: "Shop Now"
        }
      }
    })
  }
);
const data = await response.json();
{
  "success": true,
  "message": "Successfully updated 2 section(s)"
}
{
  "error": "Validation failed",
  "message": "Some sections could not be filled. This page has 12 sections (section_1 to section_12).",
  "details": [
    "section_15 is out of range (section_1 to section_12)"
  ],
  "status": 400
}
{
  "error": "Read-only API key",
  "message": "This API key has read-only access. Create a new key with Full Access.",
  "status": 403
}