Admin API
Payment pages
Single product pages with their own checkout, and their A/B tests.
- GETPayment pages, newest first
- POSTCreate a payment page (a draft until published)
- GETOne payment page
- PATCHChange the draft (and the address); buyers see it after the next publish
- GETA page's A/B tests, newest first, with results
- POSTStart an A/B test on a published page
- POSTStop an A/B test; choosing B applies its changes to the page and publishes it
- POSTMake the draft live
- POSTTake the page offline
- GETVisitors, checkout starts, orders, revenue and conversion for every page over a period
- GETPrivacy, terms, refund and shipping policies
- PUTSave the store text of a policy (an empty body goes back to the template)
Payment pages, newest first
GET/admin/2026-11/pages
Query parameters
limitintegerItems per page, 1 to 250.
Default 50 · 1 to 250
afterstringCursor from a previous next_cursor.
Up to 512 characters
statusenumOne of
draftpublishedunpublishedqstringWords in the title or address.
Up to 100 characters
Response 200
dataarray of objectrequireddata[].idID (pag_...)requireddata[].slugstringrequireddata[].statusenumrequiredOne of
draftpublishedunpublisheddata[].draftobjectrequireddata[].draft.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationdata[].draft.titlestringrequiredAt least 1 characters · Up to 120 characters
data[].draft.descriptionstringrequiredUp to 5000 characters
data[].draft.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
data[].draft.product_idID (prd_...) or nullrequireddata[].draft.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
data[].draft.bump_textstringrequiredUp to 200 characters
data[].draft.button_labelstringrequiredAt least 1 characters · Up to 40 characters
data[].draft.faqarray of objectrequiredUp to 10 items
data[].draft.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
data[].draft.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
data[].draft.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
data[].draft.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
data[].draft.pay_what_you_want.enabledbooleanrequireddata[].draft.pay_what_you_want.min_amountintegerrequired100 to 10000000
data[].draft.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
data[].draft.questions[].idstringrequireddata[].draft.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
data[].draft.questions[].requiredbooleanrequireddata[].draft.sales_limitinteger or nullrequiredDefault null
data[].draft.ends_attimestamp or nullrequiredDefault null
data[].draft.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
data[].draft.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
data[].draft.allow_couponsbooleanrequiredDefault true
data[].draft.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
data[].draft.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
data[].draft.highlightsarray of stringrequiredUp to 12 items
data[].draft.reviewsarray of objectrequiredUp to 10 items
data[].draft.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
data[].draft.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
data[].draft.reviews[].ratingintegerrequired1 to 5
data[].draft.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
data[].draft.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
data[].draft.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
data[].draft.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
data[].draft.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
data[].draft.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
data[].draft.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
data[].draft.offer_timer.enabledbooleanrequiredDefault false
data[].draft.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
data[].draft.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
data[].draft.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
data[].draft.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
data[].draft.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
data[].draft.support_emailstring or nullrequiredDefault null
data[].draft.support_phonestring or nullrequiredDefault null
data[].draft.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
data[].draft.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
data[].draft.policies.termsstringrequiredUp to 20000 characters
data[].draft.policies.refundstringrequiredUp to 20000 characters
data[].draft.policies.privacystringrequiredUp to 20000 characters
data[].draft.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
data[].draft.seo_titlestringrequiredUp to 70 characters
data[].draft.seo_descriptionstringrequiredUp to 320 characters
data[].draft.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
data[].draft.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqdata[].draft.blocks[].enabledbooleanrequireddata[].publishedobject or nullrequireddata[].published.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationdata[].published.titlestringrequiredAt least 1 characters · Up to 120 characters
data[].published.descriptionstringrequiredUp to 5000 characters
data[].published.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
data[].published.product_idID (prd_...) or nullrequireddata[].published.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
data[].published.bump_textstringrequiredUp to 200 characters
data[].published.button_labelstringrequiredAt least 1 characters · Up to 40 characters
data[].published.faqarray of objectrequiredUp to 10 items
data[].published.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
data[].published.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
data[].published.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
data[].published.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
data[].published.pay_what_you_want.enabledbooleanrequireddata[].published.pay_what_you_want.min_amountintegerrequired100 to 10000000
data[].published.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
data[].published.questions[].idstringrequireddata[].published.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
data[].published.questions[].requiredbooleanrequireddata[].published.sales_limitinteger or nullrequiredDefault null
data[].published.ends_attimestamp or nullrequiredDefault null
data[].published.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
data[].published.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
data[].published.allow_couponsbooleanrequiredDefault true
data[].published.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
data[].published.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
data[].published.highlightsarray of stringrequiredUp to 12 items
data[].published.reviewsarray of objectrequiredUp to 10 items
data[].published.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
data[].published.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
data[].published.reviews[].ratingintegerrequired1 to 5
data[].published.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
data[].published.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
data[].published.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
data[].published.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
data[].published.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
data[].published.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
data[].published.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
data[].published.offer_timer.enabledbooleanrequiredDefault false
data[].published.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
data[].published.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
data[].published.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
data[].published.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
data[].published.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
data[].published.support_emailstring or nullrequiredDefault null
data[].published.support_phonestring or nullrequiredDefault null
data[].published.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
data[].published.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
data[].published.policies.termsstringrequiredUp to 20000 characters
data[].published.policies.refundstringrequiredUp to 20000 characters
data[].published.policies.privacystringrequiredUp to 20000 characters
data[].published.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
data[].published.seo_titlestringrequiredUp to 70 characters
data[].published.seo_descriptionstringrequiredUp to 320 characters
data[].published.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
data[].published.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqdata[].published.blocks[].enabledbooleanrequireddata[].has_unpublished_changesbooleanrequireddata[].published_attimestamp or nullrequireddata[].salesobjectrequireddata[].sales.ordersintegerrequireddata[].sales.totalintegerrequireddata[].created_attimestamprequireddata[].updated_attimestamprequiredhas_morebooleanrequirednext_cursorstring or nullrequired
Errors
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl https://api.storelyne.com/admin/2026-11/pages \
-H "Authorization: Bearer pat_live_..."const res = await fetch('https://api.storelyne.com/admin/2026-11/pages', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
},
});
const data = await res.json();{
"data": [
{
"id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"slug": "festive-saree",
"status": "draft",
"draft": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{}
]
},
"published": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{}
]
},
"has_unpublished_changes": false,
"published_at": "2026-11-04T10:00:00.000Z",
"sales": {
"orders": 1,
"total": 49900
},
"created_at": "2026-11-04T10:00:00.000Z",
"updated_at": "2026-11-04T10:00:00.000Z"
}
],
"has_more": false,
"next_cursor": "eyJpZCI6Ii4uLiJ9"
}Create a payment page (a draft until published)
POST/admin/2026-11/pages
scope write_pagesIdempotency-Key required
Headers
Idempotency-KeystringrequiredUnique key for this request. Retries with the same key return the first response.
At least 1 characters · Up to 255 characters
X-CSRF-TokenstringRequired with a seller session cookie: the value of the orb_csrf cookie.
Request body
titlestringrequiredAt least 1 characters · Up to 120 characters
templateenumOne of
single_productdigital_downloadcoursebookingcommunitydonationDefault "single_product"
product_idID (prd_...) or nullDefault null
slugstringAt least 2 characters · Up to 60 characters
Response 201
idID (pag_...)requiredslugstringrequiredstatusenumrequiredOne of
draftpublishedunpublisheddraftobjectrequireddraft.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationdraft.titlestringrequiredAt least 1 characters · Up to 120 characters
draft.descriptionstringrequiredUp to 5000 characters
draft.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
draft.product_idID (prd_...) or nullrequireddraft.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
draft.bump_textstringrequiredUp to 200 characters
draft.button_labelstringrequiredAt least 1 characters · Up to 40 characters
draft.faqarray of objectrequiredUp to 10 items
draft.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
draft.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
draft.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
draft.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
draft.pay_what_you_want.enabledbooleanrequireddraft.pay_what_you_want.min_amountintegerrequired100 to 10000000
draft.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
draft.questions[].idstringrequireddraft.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
draft.questions[].requiredbooleanrequireddraft.sales_limitinteger or nullrequiredDefault null
draft.ends_attimestamp or nullrequiredDefault null
draft.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
draft.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
draft.allow_couponsbooleanrequiredDefault true
draft.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
draft.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
draft.highlightsarray of stringrequiredUp to 12 items
draft.reviewsarray of objectrequiredUp to 10 items
draft.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
draft.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
draft.reviews[].ratingintegerrequired1 to 5
draft.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
draft.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
draft.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
draft.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
draft.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
draft.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
draft.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
draft.offer_timer.enabledbooleanrequiredDefault false
draft.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
draft.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
draft.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
draft.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
draft.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
draft.support_emailstring or nullrequiredDefault null
draft.support_phonestring or nullrequiredDefault null
draft.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
draft.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
draft.policies.termsstringrequiredUp to 20000 characters
draft.policies.refundstringrequiredUp to 20000 characters
draft.policies.privacystringrequiredUp to 20000 characters
draft.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
draft.seo_titlestringrequiredUp to 70 characters
draft.seo_descriptionstringrequiredUp to 320 characters
draft.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
draft.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqdraft.blocks[].enabledbooleanrequiredpublishedobject or nullrequiredpublished.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationpublished.titlestringrequiredAt least 1 characters · Up to 120 characters
published.descriptionstringrequiredUp to 5000 characters
published.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
published.product_idID (prd_...) or nullrequiredpublished.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
published.bump_textstringrequiredUp to 200 characters
published.button_labelstringrequiredAt least 1 characters · Up to 40 characters
published.faqarray of objectrequiredUp to 10 items
published.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
published.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
published.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
published.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
published.pay_what_you_want.enabledbooleanrequiredpublished.pay_what_you_want.min_amountintegerrequired100 to 10000000
published.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
published.questions[].idstringrequiredpublished.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
published.questions[].requiredbooleanrequiredpublished.sales_limitinteger or nullrequiredDefault null
published.ends_attimestamp or nullrequiredDefault null
published.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
published.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
published.allow_couponsbooleanrequiredDefault true
published.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
published.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
published.highlightsarray of stringrequiredUp to 12 items
published.reviewsarray of objectrequiredUp to 10 items
published.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
published.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
published.reviews[].ratingintegerrequired1 to 5
published.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
published.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
published.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
published.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
published.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
published.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
published.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
published.offer_timer.enabledbooleanrequiredDefault false
published.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
published.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
published.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
published.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
published.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
published.support_emailstring or nullrequiredDefault null
published.support_phonestring or nullrequiredDefault null
published.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
published.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
published.policies.termsstringrequiredUp to 20000 characters
published.policies.refundstringrequiredUp to 20000 characters
published.policies.privacystringrequiredUp to 20000 characters
published.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
published.seo_titlestringrequiredUp to 70 characters
published.seo_descriptionstringrequiredUp to 320 characters
published.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
published.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqpublished.blocks[].enabledbooleanrequiredhas_unpublished_changesbooleanrequiredpublished_attimestamp or nullrequiredsalesobjectrequiredsales.ordersintegerrequiredsales.totalintegerrequiredcreated_attimestamprequiredupdated_attimestamprequired
Errors
| 400 | idempotency_key_required | Every POST needs an Idempotency-Key header. |
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 409 | conflict | The request conflicts with the current state of the object. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. |
| 422 | idempotency_key_reused | This Idempotency-Key was used with a different request. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl -X POST https://api.storelyne.com/admin/2026-11/pages \
-H "Authorization: Bearer pat_live_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"title": "Festive saree"
}'const res = await fetch('https://api.storelyne.com/admin/2026-11/pages', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
'Idempotency-Key': crypto.randomUUID(),
'Content-Type': 'application/json',
},
body: JSON.stringify({
"title": "Festive saree"
}),
});
const data = await res.json();{
"id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"slug": "festive-saree",
"status": "draft",
"draft": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"published": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"has_unpublished_changes": false,
"published_at": "2026-11-04T10:00:00.000Z",
"sales": {
"orders": 1,
"total": 49900
},
"created_at": "2026-11-04T10:00:00.000Z",
"updated_at": "2026-11-04T10:00:00.000Z"
}One payment page
GET/admin/2026-11/pages/{id}
Path parameters
idID (pag_...)required
Response 200
idID (pag_...)requiredslugstringrequiredstatusenumrequiredOne of
draftpublishedunpublisheddraftobjectrequireddraft.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationdraft.titlestringrequiredAt least 1 characters · Up to 120 characters
draft.descriptionstringrequiredUp to 5000 characters
draft.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
draft.product_idID (prd_...) or nullrequireddraft.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
draft.bump_textstringrequiredUp to 200 characters
draft.button_labelstringrequiredAt least 1 characters · Up to 40 characters
draft.faqarray of objectrequiredUp to 10 items
draft.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
draft.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
draft.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
draft.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
draft.pay_what_you_want.enabledbooleanrequireddraft.pay_what_you_want.min_amountintegerrequired100 to 10000000
draft.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
draft.questions[].idstringrequireddraft.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
draft.questions[].requiredbooleanrequireddraft.sales_limitinteger or nullrequiredDefault null
draft.ends_attimestamp or nullrequiredDefault null
draft.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
draft.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
draft.allow_couponsbooleanrequiredDefault true
draft.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
draft.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
draft.highlightsarray of stringrequiredUp to 12 items
draft.reviewsarray of objectrequiredUp to 10 items
draft.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
draft.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
draft.reviews[].ratingintegerrequired1 to 5
draft.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
draft.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
draft.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
draft.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
draft.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
draft.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
draft.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
draft.offer_timer.enabledbooleanrequiredDefault false
draft.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
draft.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
draft.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
draft.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
draft.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
draft.support_emailstring or nullrequiredDefault null
draft.support_phonestring or nullrequiredDefault null
draft.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
draft.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
draft.policies.termsstringrequiredUp to 20000 characters
draft.policies.refundstringrequiredUp to 20000 characters
draft.policies.privacystringrequiredUp to 20000 characters
draft.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
draft.seo_titlestringrequiredUp to 70 characters
draft.seo_descriptionstringrequiredUp to 320 characters
draft.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
draft.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqdraft.blocks[].enabledbooleanrequiredpublishedobject or nullrequiredpublished.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationpublished.titlestringrequiredAt least 1 characters · Up to 120 characters
published.descriptionstringrequiredUp to 5000 characters
published.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
published.product_idID (prd_...) or nullrequiredpublished.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
published.bump_textstringrequiredUp to 200 characters
published.button_labelstringrequiredAt least 1 characters · Up to 40 characters
published.faqarray of objectrequiredUp to 10 items
published.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
published.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
published.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
published.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
published.pay_what_you_want.enabledbooleanrequiredpublished.pay_what_you_want.min_amountintegerrequired100 to 10000000
published.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
published.questions[].idstringrequiredpublished.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
published.questions[].requiredbooleanrequiredpublished.sales_limitinteger or nullrequiredDefault null
published.ends_attimestamp or nullrequiredDefault null
published.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
published.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
published.allow_couponsbooleanrequiredDefault true
published.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
published.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
published.highlightsarray of stringrequiredUp to 12 items
published.reviewsarray of objectrequiredUp to 10 items
published.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
published.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
published.reviews[].ratingintegerrequired1 to 5
published.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
published.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
published.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
published.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
published.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
published.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
published.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
published.offer_timer.enabledbooleanrequiredDefault false
published.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
published.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
published.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
published.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
published.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
published.support_emailstring or nullrequiredDefault null
published.support_phonestring or nullrequiredDefault null
published.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
published.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
published.policies.termsstringrequiredUp to 20000 characters
published.policies.refundstringrequiredUp to 20000 characters
published.policies.privacystringrequiredUp to 20000 characters
published.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
published.seo_titlestringrequiredUp to 70 characters
published.seo_descriptionstringrequiredUp to 320 characters
published.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
published.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqpublished.blocks[].enabledbooleanrequiredhas_unpublished_changesbooleanrequiredpublished_attimestamp or nullrequiredsalesobjectrequiredsales.ordersintegerrequiredsales.totalintegerrequiredcreated_attimestamprequiredupdated_attimestamprequired
Errors
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 404 | resource_not_found | The object does not exist or belongs to another store. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R \
-H "Authorization: Bearer pat_live_..."const res = await fetch('https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
},
});
const data = await res.json();{
"id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"slug": "festive-saree",
"status": "draft",
"draft": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"published": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"has_unpublished_changes": false,
"published_at": "2026-11-04T10:00:00.000Z",
"sales": {
"orders": 1,
"total": 49900
},
"created_at": "2026-11-04T10:00:00.000Z",
"updated_at": "2026-11-04T10:00:00.000Z"
}Change the draft (and the address); buyers see it after the next publish
PATCH/admin/2026-11/pages/{id}
Path parameters
idID (pag_...)required
Headers
X-CSRF-TokenstringRequired with a seller session cookie: the value of the orb_csrf cookie.
Request body
slugstringAt least 2 characters · Up to 60 characters
draftobjectdraft.templateenumOne of
single_productdigital_downloadcoursebookingcommunitydonationdraft.titlestringAt least 1 characters · Up to 120 characters
draft.descriptionstringUp to 5000 characters
draft.description_htmlstringThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
draft.product_idID (prd_...) or nulldraft.bump_product_idID (prd_...) or nullAn optional add-on offered with a checkbox (order bump).
draft.bump_textstringUp to 200 characters
draft.button_labelstringAt least 1 characters · Up to 40 characters
draft.faqarray of objectUp to 10 items
draft.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
draft.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
draft.cover_file_idID (fil_...) or nullAn uploaded image shown at the top of the page.
Default null
draft.pay_what_you_wantobject or nullBuyers choose the price, at least min_amount (paise).
Default null
draft.pay_what_you_want.enabledbooleanrequireddraft.pay_what_you_want.min_amountintegerrequired100 to 10000000
draft.questionsarray of objectAsked on the page; the answers go on the order.
Up to 5 items
draft.questions[].idstringrequireddraft.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
draft.questions[].requiredbooleanrequireddraft.sales_limitinteger or nullDefault null
draft.ends_attimestamp or nullDefault null
draft.delivery_urlstring or nullA link the buyer gets after paying (a course, a group, a meeting).
Default null
draft.thank_you_urlstring or nullWhere to send the buyer after the thank-you page.
Default null
draft.allow_couponsbooleanDefault true
draft.badgestringA short line above the title, such as Live on 16 November.
Up to 60 characters
draft.highlights_titlestringDefault "What you get" · Up to 80 characters
draft.highlightsarray of stringUp to 12 items
draft.reviewsarray of objectUp to 10 items
draft.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
draft.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
draft.reviews[].ratingintegerrequired1 to 5
draft.accentenumOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
draft.styleenumType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
draft.video_urlstring or nullA YouTube video shown under the cover.
Default null
draft.show_sales_countbooleanShow how many people bought, once there are 10 or more.
Default false
draft.show_countdownbooleanCount down to the end date when there is one.
Default true
draft.product_pagebooleanUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
draft.offer_timerobjectAn offer timer and where it shows (D-111).
Default {}
draft.offer_timer.enabledbooleanDefault false
draft.offer_timer.modeenumend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
draft.offer_timer.minutesintegerDefault 30 · 5 to 10080
draft.offer_timer.labelstringDefault "Offer ends in" · Up to 80 characters
draft.offer_timer.placesarray of enumOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
draft.offer_timer.styleenumOne of
boxesinlineDefault "boxes"
draft.support_emailstring or nullDefault null
draft.support_phonestring or nullDefault null
draft.thank_you_messagestringShown to the buyer after paying.
Up to 500 characters
draft.policiesobjectThis page's own policies; empty ones use the store policy.
Default {}
draft.policies.termsstringUp to 20000 characters
draft.policies.refundstringUp to 20000 characters
draft.policies.privacystringUp to 20000 characters
draft.sectionsarray of objectThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
draft.seo_titlestringUp to 70 characters
draft.seo_descriptionstringUp to 320 characters
draft.blocksarray of objectPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
draft.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqdraft.blocks[].enabledbooleanrequired
Response 200
idID (pag_...)requiredslugstringrequiredstatusenumrequiredOne of
draftpublishedunpublisheddraftobjectrequireddraft.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationdraft.titlestringrequiredAt least 1 characters · Up to 120 characters
draft.descriptionstringrequiredUp to 5000 characters
draft.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
draft.product_idID (prd_...) or nullrequireddraft.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
draft.bump_textstringrequiredUp to 200 characters
draft.button_labelstringrequiredAt least 1 characters · Up to 40 characters
draft.faqarray of objectrequiredUp to 10 items
draft.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
draft.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
draft.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
draft.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
draft.pay_what_you_want.enabledbooleanrequireddraft.pay_what_you_want.min_amountintegerrequired100 to 10000000
draft.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
draft.questions[].idstringrequireddraft.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
draft.questions[].requiredbooleanrequireddraft.sales_limitinteger or nullrequiredDefault null
draft.ends_attimestamp or nullrequiredDefault null
draft.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
draft.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
draft.allow_couponsbooleanrequiredDefault true
draft.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
draft.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
draft.highlightsarray of stringrequiredUp to 12 items
draft.reviewsarray of objectrequiredUp to 10 items
draft.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
draft.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
draft.reviews[].ratingintegerrequired1 to 5
draft.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
draft.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
draft.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
draft.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
draft.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
draft.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
draft.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
draft.offer_timer.enabledbooleanrequiredDefault false
draft.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
draft.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
draft.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
draft.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
draft.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
draft.support_emailstring or nullrequiredDefault null
draft.support_phonestring or nullrequiredDefault null
draft.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
draft.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
draft.policies.termsstringrequiredUp to 20000 characters
draft.policies.refundstringrequiredUp to 20000 characters
draft.policies.privacystringrequiredUp to 20000 characters
draft.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
draft.seo_titlestringrequiredUp to 70 characters
draft.seo_descriptionstringrequiredUp to 320 characters
draft.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
draft.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqdraft.blocks[].enabledbooleanrequiredpublishedobject or nullrequiredpublished.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationpublished.titlestringrequiredAt least 1 characters · Up to 120 characters
published.descriptionstringrequiredUp to 5000 characters
published.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
published.product_idID (prd_...) or nullrequiredpublished.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
published.bump_textstringrequiredUp to 200 characters
published.button_labelstringrequiredAt least 1 characters · Up to 40 characters
published.faqarray of objectrequiredUp to 10 items
published.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
published.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
published.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
published.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
published.pay_what_you_want.enabledbooleanrequiredpublished.pay_what_you_want.min_amountintegerrequired100 to 10000000
published.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
published.questions[].idstringrequiredpublished.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
published.questions[].requiredbooleanrequiredpublished.sales_limitinteger or nullrequiredDefault null
published.ends_attimestamp or nullrequiredDefault null
published.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
published.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
published.allow_couponsbooleanrequiredDefault true
published.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
published.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
published.highlightsarray of stringrequiredUp to 12 items
published.reviewsarray of objectrequiredUp to 10 items
published.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
published.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
published.reviews[].ratingintegerrequired1 to 5
published.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
published.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
published.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
published.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
published.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
published.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
published.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
published.offer_timer.enabledbooleanrequiredDefault false
published.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
published.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
published.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
published.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
published.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
published.support_emailstring or nullrequiredDefault null
published.support_phonestring or nullrequiredDefault null
published.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
published.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
published.policies.termsstringrequiredUp to 20000 characters
published.policies.refundstringrequiredUp to 20000 characters
published.policies.privacystringrequiredUp to 20000 characters
published.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
published.seo_titlestringrequiredUp to 70 characters
published.seo_descriptionstringrequiredUp to 320 characters
published.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
published.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqpublished.blocks[].enabledbooleanrequiredhas_unpublished_changesbooleanrequiredpublished_attimestamp or nullrequiredsalesobjectrequiredsales.ordersintegerrequiredsales.totalintegerrequiredcreated_attimestamprequiredupdated_attimestamprequired
Errors
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 404 | resource_not_found | The object does not exist or belongs to another store. |
| 409 | conflict | The request conflicts with the current state of the object. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl -X PATCH https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R \
-H "Authorization: Bearer pat_live_..." \
-H "Content-Type: application/json" \
-d '{
"slug": "festive-saree",
"draft": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton."
}
}'const res = await fetch('https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R', {
method: 'PATCH',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"slug": "festive-saree",
"draft": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton."
}
}),
});
const data = await res.json();{
"id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"slug": "festive-saree",
"status": "draft",
"draft": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"published": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"has_unpublished_changes": false,
"published_at": "2026-11-04T10:00:00.000Z",
"sales": {
"orders": 1,
"total": 49900
},
"created_at": "2026-11-04T10:00:00.000Z",
"updated_at": "2026-11-04T10:00:00.000Z"
}A page's A/B tests, newest first, with results
GET/admin/2026-11/pages/{id}/experiments
Path parameters
idID (pag_...)required
Response 200
dataarray of objectrequireddata[].idID (exp_...)requireddata[].page_idID (pag_...)requireddata[].namestringrequireddata[].statusenumrequiredOne of
runningendeddata[].changesobjectrequireddata[].changes.titlestringAt least 1 characters · Up to 120 characters
data[].changes.button_labelstringAt least 1 characters · Up to 40 characters
data[].changes.styleenumOne of
spotlightmodernelegantboldnoirsunriseminimalglassdata[].changes.accentenumOne of
indigobluetealgreenorangerosecharcoaldata[].changes.cover_file_idID (fil_...) or nulldata[].changes.descriptionstringThe short pitch under the title.
Up to 300 characters
data[].changes.description_htmlstringThe long, formatted description (rich text, sanitised like the page description).
Up to 100000 characters
data[].changes.badgestringThe small label above the title.
Up to 40 characters
data[].changes.hero_layoutenumOne of
splitbannerstackeddata[].changes.hidden_sectionsarray of stringSection ids hidden in B.
Up to 30 items
data[].changes.offer_timerbooleanTurn the offer timer on (true) or off (false) in B.
data[].splitintegerrequiredPercent of visitors who see variant B.
data[].goalenumrequiredOne of
purchasecheckout_startrevenuedata[].min_visitorsintegerrequireddata[].ends_atstring or nullrequireddata[].auto_stopbooleanrequireddata[].ended_reasonenum or nullrequiredOne of
sellerwinner_foundend_datedata[].winnerenum or nullrequiredOne of
abdata[].started_atstringrequireddata[].ended_atstring or nullrequireddata[].resultsobject or nullrequiredNull when analytics is not configured.
data[].results.aobjectrequireddata[].results.a.visitorsintegerrequireddata[].results.a.buy_clicksintegerrequiredVisitors who started buying (pressed the buy button).
data[].results.a.purchasesintegerrequiredVisitors who paid.
data[].results.a.revenueintegerrequireddata[].results.a.conversionnumberrequiredpurchases / visitors, 0 to 1.
data[].results.a.checkout_ratenumberrequiredbuy_clicks / visitors, 0 to 1.
data[].results.a.revenue_per_visitorintegerrequiredPaise per visitor.
data[].results.a.goal_ratenumberrequiredThe rate of the test goal, 0 to 1.
data[].results.bobjectrequireddata[].results.b.visitorsintegerrequireddata[].results.b.buy_clicksintegerrequiredVisitors who started buying (pressed the buy button).
data[].results.b.purchasesintegerrequiredVisitors who paid.
data[].results.b.revenueintegerrequireddata[].results.b.conversionnumberrequiredpurchases / visitors, 0 to 1.
data[].results.b.checkout_ratenumberrequiredbuy_clicks / visitors, 0 to 1.
data[].results.b.revenue_per_visitorintegerrequiredPaise per visitor.
data[].results.b.goal_ratenumberrequiredThe rate of the test goal, 0 to 1.
data[].results.liftnumber or nullrequiredRelative change of B over A in conversion; null without data.
data[].results.chance_b_betternumber or nullrequiredProbability (0 to 1) that B converts better than A.
data[].results.verdictenumrequiredOne of
collectinga_leadsb_leadsa_winsb_winsno_difference
Errors
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 404 | resource_not_found | The object does not exist or belongs to another store. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/experiments \
-H "Authorization: Bearer pat_live_..."const res = await fetch('https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/experiments', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
},
});
const data = await res.json();{
"data": [
{
"id": "exp_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"page_id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"name": "Festive saree",
"status": "running",
"changes": {
"title": "Festive saree",
"button_label": "string",
"style": "spotlight",
"accent": "indigo",
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"description": "Hand block printed cotton.",
"description_html": "<p>Hand block printed cotton.</p>",
"badge": "string",
"hero_layout": "split",
"hidden_sections": [
"string"
],
"offer_timer": false
},
"split": 1,
"goal": "purchase",
"min_visitors": 1,
"ends_at": "string",
"auto_stop": false,
"ended_reason": "seller",
"winner": "a",
"started_at": "string",
"ended_at": "string",
"results": {
"a": {
"visitors": 1,
"buy_clicks": 1,
"purchases": 1,
"revenue": 49900,
"conversion": 1,
"checkout_rate": 1,
"revenue_per_visitor": 49900,
"goal_rate": 1
},
"b": {
"visitors": 1,
"buy_clicks": 1,
"purchases": 1,
"revenue": 49900,
"conversion": 1,
"checkout_rate": 1,
"revenue_per_visitor": 49900,
"goal_rate": 1
},
"lift": 1,
"chance_b_better": 1,
"verdict": "collecting"
}
}
]
}Start an A/B test on a published page
POST/admin/2026-11/pages/{id}/experiments
scope write_pagesIdempotency-Key required
Path parameters
idID (pag_...)required
Headers
Idempotency-KeystringrequiredUnique key for this request. Retries with the same key return the first response.
At least 1 characters · Up to 255 characters
X-CSRF-TokenstringRequired with a seller session cookie: the value of the orb_csrf cookie.
Request body
namestringrequiredAt least 1 characters · Up to 80 characters
changesobjectrequiredchanges.titlestringAt least 1 characters · Up to 120 characters
changes.button_labelstringAt least 1 characters · Up to 40 characters
changes.styleenumOne of
spotlightmodernelegantboldnoirsunriseminimalglasschanges.accentenumOne of
indigobluetealgreenorangerosecharcoalchanges.cover_file_idID (fil_...) or nullchanges.descriptionstringThe short pitch under the title.
Up to 300 characters
changes.description_htmlstringThe long, formatted description (rich text, sanitised like the page description).
Up to 100000 characters
changes.badgestringThe small label above the title.
Up to 40 characters
changes.hero_layoutenumOne of
splitbannerstackedchanges.hidden_sectionsarray of stringSection ids hidden in B.
Up to 30 items
changes.offer_timerbooleanTurn the offer timer on (true) or off (false) in B.
splitintegerDefault 50 · 10 to 90
goalenumWhat decides the winner: purchases, starting checkout, or revenue per visitor.
One of
purchasecheckout_startrevenueDefault "purchase"
min_visitorsintegerPer variant, before a winner is called.
Default 100 · 50 to 100000
ends_attimestamp or nullStop the test at this time.
Default null
auto_stopbooleanEnd the test by itself when a winner is clear, applying B if it wins.
Default false
Response 201
idID (exp_...)requiredpage_idID (pag_...)requirednamestringrequiredstatusenumrequiredOne of
runningendedchangesobjectrequiredchanges.titlestringAt least 1 characters · Up to 120 characters
changes.button_labelstringAt least 1 characters · Up to 40 characters
changes.styleenumOne of
spotlightmodernelegantboldnoirsunriseminimalglasschanges.accentenumOne of
indigobluetealgreenorangerosecharcoalchanges.cover_file_idID (fil_...) or nullchanges.descriptionstringThe short pitch under the title.
Up to 300 characters
changes.description_htmlstringThe long, formatted description (rich text, sanitised like the page description).
Up to 100000 characters
changes.badgestringThe small label above the title.
Up to 40 characters
changes.hero_layoutenumOne of
splitbannerstackedchanges.hidden_sectionsarray of stringSection ids hidden in B.
Up to 30 items
changes.offer_timerbooleanTurn the offer timer on (true) or off (false) in B.
splitintegerrequiredPercent of visitors who see variant B.
goalenumrequiredOne of
purchasecheckout_startrevenuemin_visitorsintegerrequiredends_atstring or nullrequiredauto_stopbooleanrequiredended_reasonenum or nullrequiredOne of
sellerwinner_foundend_datewinnerenum or nullrequiredOne of
abstarted_atstringrequiredended_atstring or nullrequiredresultsobject or nullrequiredNull when analytics is not configured.
results.aobjectrequiredresults.a.visitorsintegerrequiredresults.a.buy_clicksintegerrequiredVisitors who started buying (pressed the buy button).
results.a.purchasesintegerrequiredVisitors who paid.
results.a.revenueintegerrequiredresults.a.conversionnumberrequiredpurchases / visitors, 0 to 1.
results.a.checkout_ratenumberrequiredbuy_clicks / visitors, 0 to 1.
results.a.revenue_per_visitorintegerrequiredPaise per visitor.
results.a.goal_ratenumberrequiredThe rate of the test goal, 0 to 1.
results.bobjectrequiredresults.b.visitorsintegerrequiredresults.b.buy_clicksintegerrequiredVisitors who started buying (pressed the buy button).
results.b.purchasesintegerrequiredVisitors who paid.
results.b.revenueintegerrequiredresults.b.conversionnumberrequiredpurchases / visitors, 0 to 1.
results.b.checkout_ratenumberrequiredbuy_clicks / visitors, 0 to 1.
results.b.revenue_per_visitorintegerrequiredPaise per visitor.
results.b.goal_ratenumberrequiredThe rate of the test goal, 0 to 1.
results.liftnumber or nullrequiredRelative change of B over A in conversion; null without data.
results.chance_b_betternumber or nullrequiredProbability (0 to 1) that B converts better than A.
results.verdictenumrequiredOne of
collectinga_leadsb_leadsa_winsb_winsno_difference
Errors
| 400 | idempotency_key_required | Every POST needs an Idempotency-Key header. |
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 404 | resource_not_found | The object does not exist or belongs to another store. |
| 409 | conflict | The request conflicts with the current state of the object. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. |
| 422 | idempotency_key_reused | This Idempotency-Key was used with a different request. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl -X POST https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/experiments \
-H "Authorization: Bearer pat_live_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "Festive saree",
"changes": {
"title": "Festive saree",
"button_label": "string",
"style": "spotlight"
}
}'const res = await fetch('https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/experiments', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
'Idempotency-Key': crypto.randomUUID(),
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Festive saree",
"changes": {
"title": "Festive saree",
"button_label": "string",
"style": "spotlight"
}
}),
});
const data = await res.json();{
"id": "exp_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"page_id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"name": "Festive saree",
"status": "running",
"changes": {
"title": "Festive saree",
"button_label": "string",
"style": "spotlight",
"accent": "indigo",
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"description": "Hand block printed cotton.",
"description_html": "<p>Hand block printed cotton.</p>",
"badge": "string",
"hero_layout": "split",
"hidden_sections": [
"string"
],
"offer_timer": false
},
"split": 1,
"goal": "purchase",
"min_visitors": 1,
"ends_at": "string",
"auto_stop": false,
"ended_reason": "seller",
"winner": "a",
"started_at": "string",
"ended_at": "string",
"results": {
"a": {
"visitors": 1,
"buy_clicks": 1,
"purchases": 1,
"revenue": 49900,
"conversion": 1,
"checkout_rate": 1,
"revenue_per_visitor": 49900,
"goal_rate": 1
},
"b": {
"visitors": 1,
"buy_clicks": 1,
"purchases": 1,
"revenue": 49900,
"conversion": 1,
"checkout_rate": 1,
"revenue_per_visitor": 49900,
"goal_rate": 1
},
"lift": 1,
"chance_b_better": 1,
"verdict": "collecting"
}
}Stop an A/B test; choosing B applies its changes to the page and publishes it
POST/admin/2026-11/pages/{id}/experiments/{experiment_id}/end
scope write_pagesIdempotency-Key required
Path parameters
idID (pag_...)requiredexperiment_idID (exp_...)required
Headers
Idempotency-KeystringrequiredUnique key for this request. Retries with the same key return the first response.
At least 1 characters · Up to 255 characters
X-CSRF-TokenstringRequired with a seller session cookie: the value of the orb_csrf cookie.
Request body
winnerenum or nullrequiredOne of
ab
Response 200
idID (exp_...)requiredpage_idID (pag_...)requirednamestringrequiredstatusenumrequiredOne of
runningendedchangesobjectrequiredchanges.titlestringAt least 1 characters · Up to 120 characters
changes.button_labelstringAt least 1 characters · Up to 40 characters
changes.styleenumOne of
spotlightmodernelegantboldnoirsunriseminimalglasschanges.accentenumOne of
indigobluetealgreenorangerosecharcoalchanges.cover_file_idID (fil_...) or nullchanges.descriptionstringThe short pitch under the title.
Up to 300 characters
changes.description_htmlstringThe long, formatted description (rich text, sanitised like the page description).
Up to 100000 characters
changes.badgestringThe small label above the title.
Up to 40 characters
changes.hero_layoutenumOne of
splitbannerstackedchanges.hidden_sectionsarray of stringSection ids hidden in B.
Up to 30 items
changes.offer_timerbooleanTurn the offer timer on (true) or off (false) in B.
splitintegerrequiredPercent of visitors who see variant B.
goalenumrequiredOne of
purchasecheckout_startrevenuemin_visitorsintegerrequiredends_atstring or nullrequiredauto_stopbooleanrequiredended_reasonenum or nullrequiredOne of
sellerwinner_foundend_datewinnerenum or nullrequiredOne of
abstarted_atstringrequiredended_atstring or nullrequiredresultsobject or nullrequiredNull when analytics is not configured.
results.aobjectrequiredresults.a.visitorsintegerrequiredresults.a.buy_clicksintegerrequiredVisitors who started buying (pressed the buy button).
results.a.purchasesintegerrequiredVisitors who paid.
results.a.revenueintegerrequiredresults.a.conversionnumberrequiredpurchases / visitors, 0 to 1.
results.a.checkout_ratenumberrequiredbuy_clicks / visitors, 0 to 1.
results.a.revenue_per_visitorintegerrequiredPaise per visitor.
results.a.goal_ratenumberrequiredThe rate of the test goal, 0 to 1.
results.bobjectrequiredresults.b.visitorsintegerrequiredresults.b.buy_clicksintegerrequiredVisitors who started buying (pressed the buy button).
results.b.purchasesintegerrequiredVisitors who paid.
results.b.revenueintegerrequiredresults.b.conversionnumberrequiredpurchases / visitors, 0 to 1.
results.b.checkout_ratenumberrequiredbuy_clicks / visitors, 0 to 1.
results.b.revenue_per_visitorintegerrequiredPaise per visitor.
results.b.goal_ratenumberrequiredThe rate of the test goal, 0 to 1.
results.liftnumber or nullrequiredRelative change of B over A in conversion; null without data.
results.chance_b_betternumber or nullrequiredProbability (0 to 1) that B converts better than A.
results.verdictenumrequiredOne of
collectinga_leadsb_leadsa_winsb_winsno_difference
Errors
| 400 | idempotency_key_required | Every POST needs an Idempotency-Key header. |
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 404 | resource_not_found | The object does not exist or belongs to another store. |
| 409 | conflict | The request conflicts with the current state of the object. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. |
| 422 | idempotency_key_reused | This Idempotency-Key was used with a different request. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl -X POST https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/experiments/exp_01JCG8ZQ5S7T0V4X8K2M3N6P9R/end \
-H "Authorization: Bearer pat_live_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"winner": "a"
}'const res = await fetch('https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/experiments/exp_01JCG8ZQ5S7T0V4X8K2M3N6P9R/end', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
'Idempotency-Key': crypto.randomUUID(),
'Content-Type': 'application/json',
},
body: JSON.stringify({
"winner": "a"
}),
});
const data = await res.json();{
"id": "exp_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"page_id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"name": "Festive saree",
"status": "running",
"changes": {
"title": "Festive saree",
"button_label": "string",
"style": "spotlight",
"accent": "indigo",
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"description": "Hand block printed cotton.",
"description_html": "<p>Hand block printed cotton.</p>",
"badge": "string",
"hero_layout": "split",
"hidden_sections": [
"string"
],
"offer_timer": false
},
"split": 1,
"goal": "purchase",
"min_visitors": 1,
"ends_at": "string",
"auto_stop": false,
"ended_reason": "seller",
"winner": "a",
"started_at": "string",
"ended_at": "string",
"results": {
"a": {
"visitors": 1,
"buy_clicks": 1,
"purchases": 1,
"revenue": 49900,
"conversion": 1,
"checkout_rate": 1,
"revenue_per_visitor": 49900,
"goal_rate": 1
},
"b": {
"visitors": 1,
"buy_clicks": 1,
"purchases": 1,
"revenue": 49900,
"conversion": 1,
"checkout_rate": 1,
"revenue_per_visitor": 49900,
"goal_rate": 1
},
"lift": 1,
"chance_b_better": 1,
"verdict": "collecting"
}
}Make the draft live
POST/admin/2026-11/pages/{id}/publish
scope write_pagesIdempotency-Key required
Path parameters
idID (pag_...)required
Headers
Idempotency-KeystringrequiredUnique key for this request. Retries with the same key return the first response.
At least 1 characters · Up to 255 characters
X-CSRF-TokenstringRequired with a seller session cookie: the value of the orb_csrf cookie.
Response 200
idID (pag_...)requiredslugstringrequiredstatusenumrequiredOne of
draftpublishedunpublisheddraftobjectrequireddraft.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationdraft.titlestringrequiredAt least 1 characters · Up to 120 characters
draft.descriptionstringrequiredUp to 5000 characters
draft.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
draft.product_idID (prd_...) or nullrequireddraft.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
draft.bump_textstringrequiredUp to 200 characters
draft.button_labelstringrequiredAt least 1 characters · Up to 40 characters
draft.faqarray of objectrequiredUp to 10 items
draft.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
draft.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
draft.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
draft.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
draft.pay_what_you_want.enabledbooleanrequireddraft.pay_what_you_want.min_amountintegerrequired100 to 10000000
draft.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
draft.questions[].idstringrequireddraft.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
draft.questions[].requiredbooleanrequireddraft.sales_limitinteger or nullrequiredDefault null
draft.ends_attimestamp or nullrequiredDefault null
draft.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
draft.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
draft.allow_couponsbooleanrequiredDefault true
draft.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
draft.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
draft.highlightsarray of stringrequiredUp to 12 items
draft.reviewsarray of objectrequiredUp to 10 items
draft.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
draft.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
draft.reviews[].ratingintegerrequired1 to 5
draft.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
draft.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
draft.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
draft.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
draft.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
draft.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
draft.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
draft.offer_timer.enabledbooleanrequiredDefault false
draft.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
draft.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
draft.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
draft.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
draft.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
draft.support_emailstring or nullrequiredDefault null
draft.support_phonestring or nullrequiredDefault null
draft.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
draft.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
draft.policies.termsstringrequiredUp to 20000 characters
draft.policies.refundstringrequiredUp to 20000 characters
draft.policies.privacystringrequiredUp to 20000 characters
draft.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
draft.seo_titlestringrequiredUp to 70 characters
draft.seo_descriptionstringrequiredUp to 320 characters
draft.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
draft.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqdraft.blocks[].enabledbooleanrequiredpublishedobject or nullrequiredpublished.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationpublished.titlestringrequiredAt least 1 characters · Up to 120 characters
published.descriptionstringrequiredUp to 5000 characters
published.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
published.product_idID (prd_...) or nullrequiredpublished.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
published.bump_textstringrequiredUp to 200 characters
published.button_labelstringrequiredAt least 1 characters · Up to 40 characters
published.faqarray of objectrequiredUp to 10 items
published.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
published.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
published.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
published.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
published.pay_what_you_want.enabledbooleanrequiredpublished.pay_what_you_want.min_amountintegerrequired100 to 10000000
published.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
published.questions[].idstringrequiredpublished.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
published.questions[].requiredbooleanrequiredpublished.sales_limitinteger or nullrequiredDefault null
published.ends_attimestamp or nullrequiredDefault null
published.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
published.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
published.allow_couponsbooleanrequiredDefault true
published.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
published.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
published.highlightsarray of stringrequiredUp to 12 items
published.reviewsarray of objectrequiredUp to 10 items
published.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
published.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
published.reviews[].ratingintegerrequired1 to 5
published.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
published.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
published.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
published.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
published.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
published.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
published.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
published.offer_timer.enabledbooleanrequiredDefault false
published.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
published.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
published.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
published.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
published.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
published.support_emailstring or nullrequiredDefault null
published.support_phonestring or nullrequiredDefault null
published.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
published.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
published.policies.termsstringrequiredUp to 20000 characters
published.policies.refundstringrequiredUp to 20000 characters
published.policies.privacystringrequiredUp to 20000 characters
published.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
published.seo_titlestringrequiredUp to 70 characters
published.seo_descriptionstringrequiredUp to 320 characters
published.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
published.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqpublished.blocks[].enabledbooleanrequiredhas_unpublished_changesbooleanrequiredpublished_attimestamp or nullrequiredsalesobjectrequiredsales.ordersintegerrequiredsales.totalintegerrequiredcreated_attimestamprequiredupdated_attimestamprequired
Errors
| 400 | idempotency_key_required | Every POST needs an Idempotency-Key header. |
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 404 | resource_not_found | The object does not exist or belongs to another store. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. |
| 422 | idempotency_key_reused | This Idempotency-Key was used with a different request. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl -X POST https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/publish \
-H "Authorization: Bearer pat_live_..." \
-H "Idempotency-Key: $(uuidgen)"const res = await fetch('https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/publish', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
'Idempotency-Key': crypto.randomUUID(),
},
});
const data = await res.json();{
"id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"slug": "festive-saree",
"status": "draft",
"draft": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"published": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"has_unpublished_changes": false,
"published_at": "2026-11-04T10:00:00.000Z",
"sales": {
"orders": 1,
"total": 49900
},
"created_at": "2026-11-04T10:00:00.000Z",
"updated_at": "2026-11-04T10:00:00.000Z"
}Take the page offline
POST/admin/2026-11/pages/{id}/unpublish
scope write_pagesIdempotency-Key required
Path parameters
idID (pag_...)required
Headers
Idempotency-KeystringrequiredUnique key for this request. Retries with the same key return the first response.
At least 1 characters · Up to 255 characters
X-CSRF-TokenstringRequired with a seller session cookie: the value of the orb_csrf cookie.
Response 200
idID (pag_...)requiredslugstringrequiredstatusenumrequiredOne of
draftpublishedunpublisheddraftobjectrequireddraft.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationdraft.titlestringrequiredAt least 1 characters · Up to 120 characters
draft.descriptionstringrequiredUp to 5000 characters
draft.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
draft.product_idID (prd_...) or nullrequireddraft.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
draft.bump_textstringrequiredUp to 200 characters
draft.button_labelstringrequiredAt least 1 characters · Up to 40 characters
draft.faqarray of objectrequiredUp to 10 items
draft.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
draft.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
draft.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
draft.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
draft.pay_what_you_want.enabledbooleanrequireddraft.pay_what_you_want.min_amountintegerrequired100 to 10000000
draft.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
draft.questions[].idstringrequireddraft.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
draft.questions[].requiredbooleanrequireddraft.sales_limitinteger or nullrequiredDefault null
draft.ends_attimestamp or nullrequiredDefault null
draft.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
draft.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
draft.allow_couponsbooleanrequiredDefault true
draft.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
draft.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
draft.highlightsarray of stringrequiredUp to 12 items
draft.reviewsarray of objectrequiredUp to 10 items
draft.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
draft.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
draft.reviews[].ratingintegerrequired1 to 5
draft.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
draft.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
draft.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
draft.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
draft.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
draft.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
draft.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
draft.offer_timer.enabledbooleanrequiredDefault false
draft.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
draft.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
draft.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
draft.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
draft.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
draft.support_emailstring or nullrequiredDefault null
draft.support_phonestring or nullrequiredDefault null
draft.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
draft.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
draft.policies.termsstringrequiredUp to 20000 characters
draft.policies.refundstringrequiredUp to 20000 characters
draft.policies.privacystringrequiredUp to 20000 characters
draft.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
draft.seo_titlestringrequiredUp to 70 characters
draft.seo_descriptionstringrequiredUp to 320 characters
draft.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
draft.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqdraft.blocks[].enabledbooleanrequiredpublishedobject or nullrequiredpublished.templateenumrequiredOne of
single_productdigital_downloadcoursebookingcommunitydonationpublished.titlestringrequiredAt least 1 characters · Up to 120 characters
published.descriptionstringrequiredUp to 5000 characters
published.description_htmlstringrequiredThe full description with formatting, shown under the cover (cleaned of scripts).
Up to 100000 characters
published.product_idID (prd_...) or nullrequiredpublished.bump_product_idID (prd_...) or nullrequiredAn optional add-on offered with a checkbox (order bump).
published.bump_textstringrequiredUp to 200 characters
published.button_labelstringrequiredAt least 1 characters · Up to 40 characters
published.faqarray of objectrequiredUp to 10 items
published.faq[].qstringrequiredAt least 1 characters · Up to 200 characters
published.faq[].astringrequiredAt least 1 characters · Up to 1000 characters
published.cover_file_idID (fil_...) or nullrequiredAn uploaded image shown at the top of the page.
Default null
published.pay_what_you_wantobject or nullrequiredBuyers choose the price, at least min_amount (paise).
Default null
published.pay_what_you_want.enabledbooleanrequiredpublished.pay_what_you_want.min_amountintegerrequired100 to 10000000
published.questionsarray of objectrequiredAsked on the page; the answers go on the order.
Up to 5 items
published.questions[].idstringrequiredpublished.questions[].labelstringrequiredAt least 1 characters · Up to 120 characters
published.questions[].requiredbooleanrequiredpublished.sales_limitinteger or nullrequiredDefault null
published.ends_attimestamp or nullrequiredDefault null
published.delivery_urlstring or nullrequiredA link the buyer gets after paying (a course, a group, a meeting).
Default null
published.thank_you_urlstring or nullrequiredWhere to send the buyer after the thank-you page.
Default null
published.allow_couponsbooleanrequiredDefault true
published.badgestringrequiredA short line above the title, such as Live on 16 November.
Up to 60 characters
published.highlights_titlestringrequiredDefault "What you get" · Up to 80 characters
published.highlightsarray of stringrequiredUp to 12 items
published.reviewsarray of objectrequiredUp to 10 items
published.reviews[].namestringrequiredAt least 1 characters · Up to 60 characters
published.reviews[].textstringrequiredAt least 1 characters · Up to 500 characters
published.reviews[].ratingintegerrequired1 to 5
published.accentenumrequiredOne of
indigobluetealgreenorangerosecharcoalDefault "indigo"
published.styleenumrequiredType and colour style of the page.
One of
spotlightmodernelegantboldnoirsunriseminimalglassDefault "modern"
published.video_urlstring or nullrequiredA YouTube video shown under the cover.
Default null
published.show_sales_countbooleanrequiredShow how many people bought, once there are 10 or more.
Default false
published.show_countdownbooleanrequiredCount down to the end date when there is one.
Default true
published.product_pagebooleanrequiredUse this page as the product's page in the online store: /products/<handle> shows this page, with its A/B test and analytics (D-119).
Default false
published.offer_timerobjectrequiredAn offer timer and where it shows (D-111).
published.offer_timer.enabledbooleanrequiredDefault false
published.offer_timer.modeenumrequiredend_date counts to ends_at; evergreen gives each visitor the same minutes from their first visit.
One of
end_dateevergreenDefault "end_date"
published.offer_timer.minutesintegerrequiredDefault 30 · 5 to 10080
published.offer_timer.labelstringrequiredDefault "Offer ends in" · Up to 80 characters
published.offer_timer.placesarray of enumrequiredOne of
top_barherobuy_boxsticky_barDefault ["top_bar","buy_box"] · Up to 4 items
published.offer_timer.styleenumrequiredOne of
boxesinlineDefault "boxes"
published.support_emailstring or nullrequiredDefault null
published.support_phonestring or nullrequiredDefault null
published.thank_you_messagestringrequiredShown to the buyer after paying.
Up to 500 characters
published.policiesobjectrequiredThis page's own policies; empty ones use the store policy.
published.policies.termsstringrequiredUp to 20000 characters
published.policies.refundstringrequiredUp to 20000 characters
published.policies.privacystringrequiredUp to 20000 characters
published.sectionsarray of objectrequiredThe page, section by section (D-94). Empty for pages made before sections; the API fills them.
Up to 40 items
published.seo_titlestringrequiredUp to 70 characters
published.seo_descriptionstringrequiredUp to 320 characters
published.blocksarray of objectrequiredPage sections in order; the order bump shows inside the price section.
Default [{"type":"hero","enabled":true},{"type":"highlights","enabled":true},{"type":"price","enabled":true},{"type":"bump","enabled":true},{"type":"reviews","enabled":true},{"type":"faq","enabled":true}] · Up to 6 items
published.blocks[].typeenumrequiredOne of
herohighlightspricebumpreviewsfaqpublished.blocks[].enabledbooleanrequiredhas_unpublished_changesbooleanrequiredpublished_attimestamp or nullrequiredsalesobjectrequiredsales.ordersintegerrequiredsales.totalintegerrequiredcreated_attimestamprequiredupdated_attimestamprequired
Errors
| 400 | idempotency_key_required | Every POST needs an Idempotency-Key header. |
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 404 | resource_not_found | The object does not exist or belongs to another store. |
| 409 | idempotency_in_progress | A request with this Idempotency-Key is still running. |
| 422 | idempotency_key_reused | This Idempotency-Key was used with a different request. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl -X POST https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/unpublish \
-H "Authorization: Bearer pat_live_..." \
-H "Idempotency-Key: $(uuidgen)"const res = await fetch('https://api.storelyne.com/admin/2026-11/pages/pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R/unpublish', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
'Idempotency-Key': crypto.randomUUID(),
},
});
const data = await res.json();{
"id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"slug": "festive-saree",
"status": "draft",
"draft": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"published": {
"template": "single_product",
"title": "Festive saree",
"description": "Hand block printed cotton.",
"description_html": "",
"product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_product_id": "prd_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"bump_text": "Hand block printed cotton.",
"button_label": "string",
"faq": [
{
"q": "string",
"a": "string"
}
],
"cover_file_id": "fil_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"pay_what_you_want": {
"enabled": false,
"min_amount": 49900
},
"questions": [
{
"id": "string",
"label": "string",
"required": false
}
],
"sales_limit": 1,
"ends_at": "2026-11-04T10:00:00.000Z",
"delivery_url": "https://example.com",
"thank_you_url": "https://example.com",
"allow_coupons": true,
"badge": "",
"highlights_title": "What you get",
"highlights": [
"string"
],
"reviews": [
{
"name": "Festive saree",
"text": "Hand block printed cotton.",
"rating": 1
}
],
"accent": "indigo",
"style": "spotlight",
"video_url": "https://example.com",
"show_sales_count": false,
"show_countdown": true,
"product_page": false,
"offer_timer": {
"enabled": false,
"mode": "end_date",
"minutes": 30,
"label": "Offer ends in",
"places": [
"top_bar"
],
"style": "boxes"
},
"support_email": "buyer@example.com",
"support_phone": "+919876543210",
"thank_you_message": "",
"policies": {
"terms": "",
"refund": "",
"privacy": ""
},
"sections": [
{
"id": "string",
"hidden": false,
"style": {
"padding": "none",
"width": "narrow",
"text": "small",
"align": "left"
},
"type": "hero",
"settings": {
"layout": "stacked",
"badge": "",
"show_cover": true,
"show_video": true
}
}
],
"seo_title": "",
"seo_description": "",
"blocks": [
{
"type": "hero",
"enabled": false
}
]
},
"has_unpublished_changes": false,
"published_at": "2026-11-04T10:00:00.000Z",
"sales": {
"orders": 1,
"total": 49900
},
"created_at": "2026-11-04T10:00:00.000Z",
"updated_at": "2026-11-04T10:00:00.000Z"
}Visitors, checkout starts, orders, revenue and conversion for every page over a period
GET/admin/2026-11/pages/stats
Query parameters
periodenumOne of
7d30d90dallDefault "30d"
Response 200
periodenumrequiredOne of
7d30d90dalldataarray of objectrequireddata[].page_idID (pag_...)requireddata[].visitorsinteger or nullrequiredNull when the analytics store is not connected.
data[].checkout_startsinteger or nullrequireddata[].ordersintegerrequireddata[].revenueintegerrequiredPaid orders from the page, in paise.
data[].conversionnumber or nullrequiredOrders divided by visitors.
data[].revenue_per_visitorinteger or nullrequired
Errors
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl https://api.storelyne.com/admin/2026-11/pages/stats \
-H "Authorization: Bearer pat_live_..."const res = await fetch('https://api.storelyne.com/admin/2026-11/pages/stats', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
},
});
const data = await res.json();{
"period": "7d",
"data": [
{
"page_id": "pag_01JCG8ZQ5S7T0V4X8K2M3N6P9R",
"visitors": 1,
"checkout_starts": 1,
"orders": 1,
"revenue": 49900,
"conversion": 1,
"revenue_per_visitor": 49900
}
]
}Privacy, terms, refund and shipping policies
GET/admin/2026-11/policies
Response 200
dataarray of objectrequireddata[].kindenumrequiredOne of
privacytermsrefundshippingdata[].titlestringrequireddata[].bodystringrequiredPlain text; blank lines separate paragraphs.
data[].is_templatebooleanrequiredTrue until the seller saves their own text.
data[].updated_attimestamp or nullrequired
Errors
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl https://api.storelyne.com/admin/2026-11/policies \
-H "Authorization: Bearer pat_live_..."const res = await fetch('https://api.storelyne.com/admin/2026-11/policies', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
},
});
const data = await res.json();{
"data": [
{
"kind": "privacy",
"title": "Festive saree",
"body": "string",
"is_template": false,
"updated_at": "2026-11-04T10:00:00.000Z"
}
]
}Save the store text of a policy (an empty body goes back to the template)
PUT/admin/2026-11/policies/{kind}
Path parameters
kindenumrequiredOne of
privacytermsrefundshipping
Headers
X-CSRF-TokenstringRequired with a seller session cookie: the value of the orb_csrf cookie.
Request body
bodystringrequiredUp to 20000 characters
Response 200
kindenumrequiredOne of
privacytermsrefundshippingtitlestringrequiredbodystringrequiredPlain text; blank lines separate paragraphs.
is_templatebooleanrequiredTrue until the seller saves their own text.
updated_attimestamp or nullrequired
Errors
| 400 | validation_failed | A field in the request is missing or invalid. See param. |
| 401 | authentication_required | Send a valid access token or session. |
| 403 | missing_scope | The app token does not have the scope this endpoint needs. |
| 429 | rate_limited | Too many requests. Wait for the time in RateLimit-Reset. |
| 500 | internal_error | Something went wrong on our side. Quote the trace_id to support. |
curl -X PUT https://api.storelyne.com/admin/2026-11/policies/privacy \
-H "Authorization: Bearer pat_live_..." \
-H "Content-Type: application/json" \
-d '{
"body": "string"
}'const res = await fetch('https://api.storelyne.com/admin/2026-11/policies/privacy', {
method: 'PUT',
headers: {
'Authorization': `Bearer ${process.env.STORELYNE_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"body": "string"
}),
});
const data = await res.json();{
"kind": "privacy",
"title": "Festive saree",
"body": "string",
"is_template": false,
"updated_at": "2026-11-04T10:00:00.000Z"
}