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
}
Endpoints
Fill page
Update the content of an existing page by filling sections with new text, images, and links.
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.
string
required
The unique ID of the page to fill. Get it from the list pages endpoint.
string
required
Bearer token. Example:
Bearer ew_live_your_key_hereobject
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:Flat content (recommended)
Flat content (recommended)
Send content fields directly under each section key:
{
"sections": {
"section_1": {
"hero01_heading": "New title",
"hero01_btn": "Shop Now"
}
}
}
GET response format
GET response format
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"
}
}
}
}
Unwrapped format
Unwrapped format
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 bytype:
{
"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:| Tag | Result |
|---|---|
<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
}
Was this page helpful?