Skip to content

Upload a custom HTML, CSS and JavaScript shop template

POST
/storefront/themes/code/import
curl --request POST \
--url https://example.com/storefront/themes/code/import \
--header 'Content-Type: application/json' \
--cookie __Host-bottle.session_token=<__Host-bottle.session_token> \
--data '{ "archive": "example", "base": "example" }'

A bounded ZIP containing a strict bottle.template.json manifest, prebuilt HTML/CSS/JS, and raster pictures. No PHP, build hooks, server code, remote includes, fonts, SVG, symlinks, encrypted files or unsafe paths. The private source and compiled data are immutable; only the matching draft is changed. Uploaded code executes only in the shop browser sandbox. Commerce, identity, payments, legal, tracking, domain and brand marks stay unchanged. Preview and publish separately.

Media typeapplication/json
object
archive
required
string
>= 4 characters <= 5592408 characters /^[A-Za-z0-9+/]+={0,2}$/
base
required
string
/^[a-f0-9]{32}$/

Example generated

{
"archive": "example",
"base": "example"
}

Theme applied to the draft, not published

Media typeapplication/json
object
status
required
string
Allowed values: off draft live
draft
required
object
template

Yard and flame are built-in designs. custom uses an approved HTML/CSS/JavaScript bundle in a sandbox. ledger is a legacy placeholder rendered as yard.

string
default: yard
Allowed values: yard flame ledger custom
design
object
spacing
string
default: balanced
Allowed values: compact balanced relaxed
container
string
default: wide
Allowed values: narrow wide full
headingScale
string
default: balanced
Allowed values: compact balanced bold
productCards
string
default: outlined
Allowed values: plain outlined raised
codeTemplate
object
key
required
string
<= 300 characters /^[a-f0-9-]{36}\/theme-code\/[a-f0-9-]{36}\.json$/
pages
required
Array<string>
>= 1 items <= 4 items
Allowed values: home products category page
themeRevisionId

UUID v7

string format: uuid
theme
object
primary
string
default: #1F3A5F /^#[0-9a-fA-F]{6}$/
accent
string
default: #E4572E /^#[0-9a-fA-F]{6}$/
background
string
default: #FAF7F2 /^#[0-9a-fA-F]{6}$/
fontPair

Classic: Fraunces and Inter. modern: Bricolage Grotesque and Inter. friendly: Nunito throughout. editorial: Playfair Display and Source Sans 3.

string
default: classic
Allowed values: classic modern friendly editorial
radius
integer
default: 12 <= 28
logoKey
string | null
<= 300 characters
iconKey
string | null
<= 300 characters
content
object
headline
string
"" <= 160 characters
strapline
string
"" <= 160 characters
bannerVersion
number
default: 2
Allowed values: 2
banners
Array<object>
default: <= 8 items
object
id
required
string
<= 40 characters
design

Absent only on banners saved before each had its own design, which are read with one.

string
Allowed values: picture split band card
imageKey
required
string | null
<= 300 characters
imageAlt

Plain text, up to 160 characters. Empty when the picture only decorates.

string
""
heading
required

Plain text, up to 160 characters. Empty: the business’s name.

string
body
string
buttonLabel
string
buttonTarget
One of:
object
kind
required
string
Allowed values: page
page
required
string
Allowed values: products delivery about help contact
button2Label

Plain text, up to 160 characters. Absent or empty: no second button.

string
button2Target
One of:
object
kind
required
string
Allowed values: page
page
required
string
Allowed values: products delivery about help contact
colours
object
background
required

Behind the words. A colour like #1F3A5F.

string
/^#[0-9a-fA-F]{6}$/
text
required

The heading, the line under it and the business name.

string
/^#[0-9a-fA-F]{6}$/
button
required

The button. Its words are black or white, whichever reads.

string
/^#[0-9a-fA-F]{6}$/
from
string | null format: date
until
string | null format: date
hidden
boolean
showPhone

False hides the call button beside the main button. Absent or true: shown when the shop has a phone number.

boolean
words

All: heading and line. heading: the heading alone. none: just the picture, which must be the owner’s own and described. Absent: all.

string
Allowed values: all heading none
align

Where the words line up. Absent: the design’s own (centre for band, left for the rest).

string
Allowed values: left centre right
size

How big the heading is, the line under it following. Absent: medium.

string
Allowed values: small medium large
action

Buttons: its button and the call button. link: the whole banner is one link to buttonTarget, no buttons. none: no link, no buttons. Absent: buttons.

string
Allowed values: buttons link none
bannerDots

Where the dots sit when banners take turns. Absent: right.

string
Allowed values: bottom right top
bannerPause

False hides the pause button beside the dots. The banners still hold still while the pointer or keyboard is on them.

boolean
sections
Array<object>
default: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] <= 9 items
object
section
required
string
Allowed values: hero promises categories featured delivery reviews about faq contact
visible
required
boolean
homeSections

The home page: its sections in order. Absent: the shown parts of sections, in their order (see homeSectionsOf).

Array
<= 30 items
One of:
object
id
required

Stable within the page. Lower-case letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
width

How wide the section is on a wide screen, in parts of the page: full, threeQuarters, twoThirds, half, third or quarter. Absent: full. Each kind allows only some (see the help guide). Every section is full width on a phone.

string
Allowed values: full threeQuarters twoThirds half third quarter
type
required
string
Allowed values: banners
strip

The strip under the banner. Absent: the four lines every shop had.

object
items
required
Array<object>
<= 6 items
object
id
required
string
>= 1 characters <= 40 characters
kind
required
string
Allowed values: delivery swap collect phone own
visible
required
boolean
title
required

Plain text, up to 60 characters. Empty: the shop’s own words.

string
body
required

Plain text, up to 160 characters. Empty: the shop’s own line.

string
icon
required
string
Allowed values: truck swap pin phone clock mail check star flame tag
colours
object
background
required

Behind the strip. A colour like #1F3A5F.

string
/^#[0-9a-fA-F]{6}$/
text
required

The titles, lines and pictures.

string
/^#[0-9a-fA-F]{6}$/
homeProducts

The products part of the home page as it was before sections, and what a products section added again starts from. Absent: featured when any are picked, else all, four.

object
source
required
string
Allowed values: featured all category kind
category
string
<= 60 characters /^[\da-z]+(?:-[\da-z]+)*$/
kind
string
Allowed values: cylinder accessory appliance fuel consumable other
count
required
integer
>= 1 <= 12
sort
required

Featured: the home page’s featured products first, then the rest by price. price-low, price-high: by the price the shopper pays. name: A to Z. newest: added most recently first.

string
Allowed values: featured price-low price-high name newest
heading
required
string
seeAll
required
boolean
featuredProductIds
Array<string>
default: <= 12 items
about
string
"" <= 2000 characters
deliveryPromise
string
"" <= 160 characters
faq
Array<object>
default: <= 20 items
object
question
required
string
<= 160 characters
answer
required
string
<= 2000 characters
phone
string
"" <= 40 characters
email
Any of:
string format: email
address
string
"" <= 400 characters
openingHours
string
"" <= 400 characters
socials
object
facebook

An https address. Anything else is refused.

string format: uri
<= 500 characters
instagram

An https address. Anything else is refused.

string format: uri
<= 500 characters
x

An https address. Anything else is refused.

string format: uri
<= 500 characters
linkedin

An https address. Anything else is refused.

string format: uri
<= 500 characters
contactShown

Which details the home page contact part shows. A detail absent or true: shown when given.

object
phone
boolean
email
boolean
address
boolean
openingHours
boolean
socials
boolean
googlePlaceId
string
<= 200 characters
commerce
object
askForEmpties
boolean
default: true
collection
object
enabled
boolean
address
string
"" <= 400 characters
notes
string
"" <= 160 characters
tradeEnquiries
boolean
audience
string
default: everyone
Allowed values: everyone trade
offerPhoneOrders
boolean
default: true
ageCheck
boolean
whenLow
string
default: sell
Allowed values: sell sell_and_say
whenOut
string
default: stop
Allowed values: stop continue
termsUrl
string | null format: uri
<= 500 characters
seo
object
title
string
"" <= 160 characters
description
string
"" <= 300 characters
imageKey
string | null
<= 300 characters
listing
object
defaultSort

Featured: the home page’s featured products first, then the rest by price. price-low, price-high: by the price the shopper pays. name: A to Z. newest: added most recently first.

string
default: price-low
Allowed values: featured price-low price-high name newest
filters

Filters in the order shown, each on or off. A built-in one left out takes its default (price, in stock, gas type and size on; the rest off). A product detail left out is on.

Array<object>
default: <= 120 items
object
id
required

One of price, inStock, gasType, size, weight, brand, kind, category, charge, or detail: for a product detail.

string
on
required
boolean
menus

The shop’s named menus, and which one each place on the shop shows. Absent: the menus every shop has by default.

object
menus
required
Array<object>
<= 20 items
object
id
required

The menu’s own id, for the places. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
name
required
string
>= 1 characters <= 60 characters
items
required
Array<object>
<= 10 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
children
Array<object>
default: <= 20 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
places
required
object
header
required

The menu across the top of every page.

string | null
/^[a-z0-9-]{1,40}$/
footer
required

The menu at the foot: each link with links under it is a column, up to four.

string | null
/^[a-z0-9-]{1,40}$/
navigation

The menu across the top (and the phone menu, in the same order) and the columns of links at the foot. Absent: the menus every shop has by default.

object
header
required
Array<object>
<= 10 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
children
Array<object>
default: <= 20 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
footer
required
Array<object>
<= 4 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
heading
string
"" <= 40 characters
hidden
boolean
links
Array<object>
default: <= 15 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
tracking
object
googleAnalytics

Google Analytics 4 measurement ID, G- then letters and digits. Empty: off.

string
"" <= 253 characters /^(?:|G-[A-Z0-9]{6,12})$/
googleTagManager

Google Tag Manager container ID, GTM- then letters and digits. Empty: off.

string
"" <= 253 characters /^(?:|GTM-[A-Z0-9]{5,9})$/
googleAds

Google Ads conversion ID, AW- then digits. Empty: off.

string
"" <= 253 characters /^(?:|AW-[0-9]{6,12})$/
metaPixel

Meta (Facebook) Pixel ID, digits only. Empty: off.

string
"" <= 253 characters /^(?:|[0-9]{12,17})$/
clarity

Microsoft Clarity project ID, small letters and digits. Empty: off.

string
"" <= 253 characters /^(?:|[a-z0-9]{8,12})$/
tiktok

TikTok Pixel ID, capital letters and digits. Empty: off.

string
"" <= 253 characters /^(?:|[A-Z0-9]{18,22})$/
plausible

The domain the shop was added to Plausible as, such as northgategas.co.uk. Needs no consent. Empty: off.

string
"" <= 253 characters /^(?:|(?=.{4,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z0-9-]{0,61}[a-z0-9])$/
legal
object
terms
object
choice

Template: Bottle’s, filled in with the business’s details. written: html, the business’s own words. link: url, the business’s own page elsewhere. An empty html or url shows the template.

string
default: template
Allowed values: template written link
html
string
"" <= 200000 characters
url
string | null format: uri
<= 500 characters
privacy
object
choice

Template: Bottle’s, filled in with the business’s details. written: html, the business’s own words. link: url, the business’s own page elsewhere. An empty html or url shows the template.

string
default: template
Allowed values: template written link
html
string
"" <= 200000 characters
url
string | null format: uri
<= 500 characters
frame
object
topBar
object
shown

Whether the bar shows at all.

boolean
default: true
messages

Short lines such as “Order by noon for delivery the next working day”, up to three. A phone shows only the first.

Array<string>
default: <= 3 items
showPhone

Order by phone, with the shop’s phone number, at the right.

boolean
default: true
colours

From the theme. primary: the main colour. accent: the second colour. footer: the footer’s dark colour. plain: the page colour with a line under it.

string
default: primary
Allowed values: primary accent footer plain
header
object
showPhone

The phone number as a button, on wide screens and in the phone menu.

boolean
default: true
showAccount

Sign in, or the shopper’s name once signed in.

boolean
default: true
footer
object
about

A line or two under the business’s name. Empty: none.

string
"" <= 300 characters
showContact

Phone, email and address.

boolean
default: true
showSocials

Links to social media.

boolean
default: true
showPayments

A line saying shoppers pay securely by card.

boolean
default: true
showCompanyDetails

Company number and VAT number, after the business’s name.

boolean
default: true
legalLine

One more line at the very foot, such as “Registered in England and Wales.”

string
"" <= 200 characters
live
required
object
template

Yard and flame are built-in designs. custom uses an approved HTML/CSS/JavaScript bundle in a sandbox. ledger is a legacy placeholder rendered as yard.

string
default: yard
Allowed values: yard flame ledger custom
design
object
spacing
string
default: balanced
Allowed values: compact balanced relaxed
container
string
default: wide
Allowed values: narrow wide full
headingScale
string
default: balanced
Allowed values: compact balanced bold
productCards
string
default: outlined
Allowed values: plain outlined raised
codeTemplate
object
key
required
string
<= 300 characters /^[a-f0-9-]{36}\/theme-code\/[a-f0-9-]{36}\.json$/
pages
required
Array<string>
>= 1 items <= 4 items
Allowed values: home products category page
themeRevisionId

UUID v7

string format: uuid
theme
object
primary
string
default: #1F3A5F /^#[0-9a-fA-F]{6}$/
accent
string
default: #E4572E /^#[0-9a-fA-F]{6}$/
background
string
default: #FAF7F2 /^#[0-9a-fA-F]{6}$/
fontPair

Classic: Fraunces and Inter. modern: Bricolage Grotesque and Inter. friendly: Nunito throughout. editorial: Playfair Display and Source Sans 3.

string
default: classic
Allowed values: classic modern friendly editorial
radius
integer
default: 12 <= 28
logoKey
string | null
<= 300 characters
iconKey
string | null
<= 300 characters
content
object
headline
string
"" <= 160 characters
strapline
string
"" <= 160 characters
bannerVersion
number
default: 2
Allowed values: 2
banners
Array<object>
default: <= 8 items
object
id
required
string
<= 40 characters
design

Absent only on banners saved before each had its own design, which are read with one.

string
Allowed values: picture split band card
imageKey
required
string | null
<= 300 characters
imageAlt

Plain text, up to 160 characters. Empty when the picture only decorates.

string
""
heading
required

Plain text, up to 160 characters. Empty: the business’s name.

string
body
string
buttonLabel
string
buttonTarget
One of:
object
kind
required
string
Allowed values: page
page
required
string
Allowed values: products delivery about help contact
button2Label

Plain text, up to 160 characters. Absent or empty: no second button.

string
button2Target
One of:
object
kind
required
string
Allowed values: page
page
required
string
Allowed values: products delivery about help contact
colours
object
background
required

Behind the words. A colour like #1F3A5F.

string
/^#[0-9a-fA-F]{6}$/
text
required

The heading, the line under it and the business name.

string
/^#[0-9a-fA-F]{6}$/
button
required

The button. Its words are black or white, whichever reads.

string
/^#[0-9a-fA-F]{6}$/
from
string | null format: date
until
string | null format: date
hidden
boolean
showPhone

False hides the call button beside the main button. Absent or true: shown when the shop has a phone number.

boolean
words

All: heading and line. heading: the heading alone. none: just the picture, which must be the owner’s own and described. Absent: all.

string
Allowed values: all heading none
align

Where the words line up. Absent: the design’s own (centre for band, left for the rest).

string
Allowed values: left centre right
size

How big the heading is, the line under it following. Absent: medium.

string
Allowed values: small medium large
action

Buttons: its button and the call button. link: the whole banner is one link to buttonTarget, no buttons. none: no link, no buttons. Absent: buttons.

string
Allowed values: buttons link none
bannerDots

Where the dots sit when banners take turns. Absent: right.

string
Allowed values: bottom right top
bannerPause

False hides the pause button beside the dots. The banners still hold still while the pointer or keyboard is on them.

boolean
sections
Array<object>
default: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] <= 9 items
object
section
required
string
Allowed values: hero promises categories featured delivery reviews about faq contact
visible
required
boolean
homeSections

The home page: its sections in order. Absent: the shown parts of sections, in their order (see homeSectionsOf).

Array
<= 30 items
One of:
object
id
required

Stable within the page. Lower-case letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
width

How wide the section is on a wide screen, in parts of the page: full, threeQuarters, twoThirds, half, third or quarter. Absent: full. Each kind allows only some (see the help guide). Every section is full width on a phone.

string
Allowed values: full threeQuarters twoThirds half third quarter
type
required
string
Allowed values: banners
strip

The strip under the banner. Absent: the four lines every shop had.

object
items
required
Array<object>
<= 6 items
object
id
required
string
>= 1 characters <= 40 characters
kind
required
string
Allowed values: delivery swap collect phone own
visible
required
boolean
title
required

Plain text, up to 60 characters. Empty: the shop’s own words.

string
body
required

Plain text, up to 160 characters. Empty: the shop’s own line.

string
icon
required
string
Allowed values: truck swap pin phone clock mail check star flame tag
colours
object
background
required

Behind the strip. A colour like #1F3A5F.

string
/^#[0-9a-fA-F]{6}$/
text
required

The titles, lines and pictures.

string
/^#[0-9a-fA-F]{6}$/
homeProducts

The products part of the home page as it was before sections, and what a products section added again starts from. Absent: featured when any are picked, else all, four.

object
source
required
string
Allowed values: featured all category kind
category
string
<= 60 characters /^[\da-z]+(?:-[\da-z]+)*$/
kind
string
Allowed values: cylinder accessory appliance fuel consumable other
count
required
integer
>= 1 <= 12
sort
required

Featured: the home page’s featured products first, then the rest by price. price-low, price-high: by the price the shopper pays. name: A to Z. newest: added most recently first.

string
Allowed values: featured price-low price-high name newest
heading
required
string
seeAll
required
boolean
featuredProductIds
Array<string>
default: <= 12 items
about
string
"" <= 2000 characters
deliveryPromise
string
"" <= 160 characters
faq
Array<object>
default: <= 20 items
object
question
required
string
<= 160 characters
answer
required
string
<= 2000 characters
phone
string
"" <= 40 characters
email
Any of:
string format: email
address
string
"" <= 400 characters
openingHours
string
"" <= 400 characters
socials
object
facebook

An https address. Anything else is refused.

string format: uri
<= 500 characters
instagram

An https address. Anything else is refused.

string format: uri
<= 500 characters
x

An https address. Anything else is refused.

string format: uri
<= 500 characters
linkedin

An https address. Anything else is refused.

string format: uri
<= 500 characters
contactShown

Which details the home page contact part shows. A detail absent or true: shown when given.

object
phone
boolean
email
boolean
address
boolean
openingHours
boolean
socials
boolean
googlePlaceId
string
<= 200 characters
commerce
object
askForEmpties
boolean
default: true
collection
object
enabled
boolean
address
string
"" <= 400 characters
notes
string
"" <= 160 characters
tradeEnquiries
boolean
audience
string
default: everyone
Allowed values: everyone trade
offerPhoneOrders
boolean
default: true
ageCheck
boolean
whenLow
string
default: sell
Allowed values: sell sell_and_say
whenOut
string
default: stop
Allowed values: stop continue
termsUrl
string | null format: uri
<= 500 characters
seo
object
title
string
"" <= 160 characters
description
string
"" <= 300 characters
imageKey
string | null
<= 300 characters
listing
object
defaultSort

Featured: the home page’s featured products first, then the rest by price. price-low, price-high: by the price the shopper pays. name: A to Z. newest: added most recently first.

string
default: price-low
Allowed values: featured price-low price-high name newest
filters

Filters in the order shown, each on or off. A built-in one left out takes its default (price, in stock, gas type and size on; the rest off). A product detail left out is on.

Array<object>
default: <= 120 items
object
id
required

One of price, inStock, gasType, size, weight, brand, kind, category, charge, or detail: for a product detail.

string
on
required
boolean
menus

The shop’s named menus, and which one each place on the shop shows. Absent: the menus every shop has by default.

object
menus
required
Array<object>
<= 20 items
object
id
required

The menu’s own id, for the places. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
name
required
string
>= 1 characters <= 60 characters
items
required
Array<object>
<= 10 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
children
Array<object>
default: <= 20 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
places
required
object
header
required

The menu across the top of every page.

string | null
/^[a-z0-9-]{1,40}$/
footer
required

The menu at the foot: each link with links under it is a column, up to four.

string | null
/^[a-z0-9-]{1,40}$/
navigation

The menu across the top (and the phone menu, in the same order) and the columns of links at the foot. Absent: the menus every shop has by default.

object
header
required
Array<object>
<= 10 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
children
Array<object>
default: <= 20 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
footer
required
Array<object>
<= 4 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
heading
string
"" <= 40 characters
hidden
boolean
links
Array<object>
default: <= 15 items
object
id
required

Stable within the menu, for the editor. Letters, digits and dashes.

string
/^[a-z0-9-]{1,40}$/
label
string
"" <= 40 characters
target
required
One of:
object
kind
required
string
Allowed values: builtin
page
required
string
Allowed values: home products delivery about help contact terms privacy blog
hidden
boolean
tracking
object
googleAnalytics

Google Analytics 4 measurement ID, G- then letters and digits. Empty: off.

string
"" <= 253 characters /^(?:|G-[A-Z0-9]{6,12})$/
googleTagManager

Google Tag Manager container ID, GTM- then letters and digits. Empty: off.

string
"" <= 253 characters /^(?:|GTM-[A-Z0-9]{5,9})$/
googleAds

Google Ads conversion ID, AW- then digits. Empty: off.

string
"" <= 253 characters /^(?:|AW-[0-9]{6,12})$/
metaPixel

Meta (Facebook) Pixel ID, digits only. Empty: off.

string
"" <= 253 characters /^(?:|[0-9]{12,17})$/
clarity

Microsoft Clarity project ID, small letters and digits. Empty: off.

string
"" <= 253 characters /^(?:|[a-z0-9]{8,12})$/
tiktok

TikTok Pixel ID, capital letters and digits. Empty: off.

string
"" <= 253 characters /^(?:|[A-Z0-9]{18,22})$/
plausible

The domain the shop was added to Plausible as, such as northgategas.co.uk. Needs no consent. Empty: off.

string
"" <= 253 characters /^(?:|(?=.{4,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z0-9-]{0,61}[a-z0-9])$/
legal
object
terms
object
choice

Template: Bottle’s, filled in with the business’s details. written: html, the business’s own words. link: url, the business’s own page elsewhere. An empty html or url shows the template.

string
default: template
Allowed values: template written link
html
string
"" <= 200000 characters
url
string | null format: uri
<= 500 characters
privacy
object
choice

Template: Bottle’s, filled in with the business’s details. written: html, the business’s own words. link: url, the business’s own page elsewhere. An empty html or url shows the template.

string
default: template
Allowed values: template written link
html
string
"" <= 200000 characters
url
string | null format: uri
<= 500 characters
frame
object
topBar
object
shown

Whether the bar shows at all.

boolean
default: true
messages

Short lines such as “Order by noon for delivery the next working day”, up to three. A phone shows only the first.

Array<string>
default: <= 3 items
showPhone

Order by phone, with the shop’s phone number, at the right.

boolean
default: true
colours

From the theme. primary: the main colour. accent: the second colour. footer: the footer’s dark colour. plain: the page colour with a line under it.

string
default: primary
Allowed values: primary accent footer plain
header
object
showPhone

The phone number as a button, on wide screens and in the phone menu.

boolean
default: true
showAccount

Sign in, or the shopper’s name once signed in.

boolean
default: true
footer
object
about

A line or two under the business’s name. Empty: none.

string
"" <= 300 characters
showContact

Phone, email and address.

boolean
default: true
showSocials

Links to social media.

boolean
default: true
showPayments

A line saying shoppers pay securely by card.

boolean
default: true
showCompanyDetails

Company number and VAT number, after the business’s name.

boolean
default: true
legalLine

One more line at the very foot, such as “Registered in England and Wales.”

string
"" <= 200 characters
publishedAt
required
string | null format: date-time
unpublishedChanges
required
boolean
domains
required
Array<object>
object
id
required

UUID v7

string format: uuid
host
required
string
kind
required
string
Allowed values: bottle custom
isPrimary
required
boolean
verifyToken
required
string
verifiedAt
required
string | null format: date-time
lastCheckedAt
required
string | null format: date-time
lastError
required
string | null
failingSince
required
string | null format: date-time
createdAt
required
string format: date-time
records
required
Array<object>
object
type
required
string
Allowed values: CNAME A TXT
name
required
string
value
required
string
url
required
string | null
assets
required
object
key
additional properties
object
alt
required
string | null
width
required
integer
height
required
integer
thumb
required
string
card
required
string
large
required
string
businessLogoKey
string | null
<= 300 characters
draftVersion
string

Example

{
"status": "off",
"draft": {
"template": "yard",
"design": {
"spacing": "compact",
"container": "narrow",
"headingScale": "compact",
"productCards": "plain"
},
"codeTemplate": {
"pages": [
"home"
]
},
"themeRevisionId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"theme": {
"primary": "#1F3A5F",
"accent": "#E4572E",
"background": "#FAF7F2",
"fontPair": "classic",
"radius": 12,
"logoKey": null,
"iconKey": null
},
"content": {
"headline": "",
"strapline": "",
"bannerVersion": 2,
"banners": [],
"sections": [
{
"section": "hero",
"visible": true
},
{
"section": "promises",
"visible": true
},
{
"section": "categories",
"visible": true
},
{
"section": "featured",
"visible": true
},
{
"section": "delivery",
"visible": true
},
{
"section": "reviews",
"visible": true
},
{
"section": "about",
"visible": true
},
{
"section": "faq",
"visible": true
},
{
"section": "contact",
"visible": true
}
],
"featuredProductIds": [],
"about": "",
"deliveryPromise": "",
"faq": [],
"phone": "",
"email": "",
"address": "",
"openingHours": "",
"socials": {}
},
"commerce": {
"askForEmpties": true,
"collection": {
"enabled": false,
"address": "",
"notes": ""
},
"tradeEnquiries": false,
"audience": "everyone",
"offerPhoneOrders": true,
"ageCheck": false,
"whenLow": "sell",
"whenOut": "stop",
"termsUrl": null
},
"seo": {
"title": "",
"description": "",
"imageKey": null
},
"listing": {
"defaultSort": "featured",
"filters": []
},
"menus": {
"menus": [
{
"items": [
{
"label": "",
"target": {
"kind": "builtin",
"page": "home"
},
"hidden": false,
"children": []
}
]
}
]
},
"navigation": {
"header": [
{
"label": "",
"target": {
"kind": "builtin",
"page": "home"
},
"hidden": false,
"children": []
}
],
"footer": [
{
"heading": "",
"hidden": false,
"links": []
}
]
},
"tracking": {
"googleAnalytics": "",
"googleTagManager": "",
"googleAds": "",
"metaPixel": "",
"clarity": "",
"tiktok": "",
"plausible": ""
},
"legal": {
"terms": {
"choice": "template",
"html": "",
"url": null
},
"privacy": {
"choice": "template",
"html": "",
"url": null
}
},
"frame": {
"topBar": {
"shown": true,
"messages": [],
"showPhone": true,
"colours": "primary"
},
"header": {
"showPhone": true,
"showAccount": true
},
"footer": {
"about": "",
"showContact": true,
"showSocials": true,
"showPayments": true,
"showCompanyDetails": true,
"legalLine": ""
}
}
},
"live": {
"template": "yard",
"design": {
"spacing": "compact",
"container": "narrow",
"headingScale": "compact",
"productCards": "plain"
},
"codeTemplate": {
"pages": [
"home"
]
},
"themeRevisionId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"theme": {
"primary": "#1F3A5F",
"accent": "#E4572E",
"background": "#FAF7F2",
"fontPair": "classic",
"radius": 12,
"logoKey": null,
"iconKey": null
},
"content": {
"headline": "",
"strapline": "",
"bannerVersion": 2,
"banners": [],
"sections": [
{
"section": "hero",
"visible": true
},
{
"section": "promises",
"visible": true
},
{
"section": "categories",
"visible": true
},
{
"section": "featured",
"visible": true
},
{
"section": "delivery",
"visible": true
},
{
"section": "reviews",
"visible": true
},
{
"section": "about",
"visible": true
},
{
"section": "faq",
"visible": true
},
{
"section": "contact",
"visible": true
}
],
"featuredProductIds": [],
"about": "",
"deliveryPromise": "",
"faq": [],
"phone": "",
"email": "",
"address": "",
"openingHours": "",
"socials": {}
},
"commerce": {
"askForEmpties": true,
"collection": {
"enabled": false,
"address": "",
"notes": ""
},
"tradeEnquiries": false,
"audience": "everyone",
"offerPhoneOrders": true,
"ageCheck": false,
"whenLow": "sell",
"whenOut": "stop",
"termsUrl": null
},
"seo": {
"title": "",
"description": "",
"imageKey": null
},
"listing": {
"defaultSort": "featured",
"filters": []
},
"menus": {
"menus": [
{
"items": [
{
"label": "",
"target": {
"kind": "builtin",
"page": "home"
},
"hidden": false,
"children": []
}
]
}
]
},
"navigation": {
"header": [
{
"label": "",
"target": {
"kind": "builtin",
"page": "home"
},
"hidden": false,
"children": []
}
],
"footer": [
{
"heading": "",
"hidden": false,
"links": []
}
]
},
"tracking": {
"googleAnalytics": "",
"googleTagManager": "",
"googleAds": "",
"metaPixel": "",
"clarity": "",
"tiktok": "",
"plausible": ""
},
"legal": {
"terms": {
"choice": "template",
"html": "",
"url": null
},
"privacy": {
"choice": "template",
"html": "",
"url": null
}
},
"frame": {
"topBar": {
"shown": true,
"messages": [],
"showPhone": true,
"colours": "primary"
},
"header": {
"showPhone": true,
"showAccount": true
},
"footer": {
"about": "",
"showContact": true,
"showSocials": true,
"showPayments": true,
"showCompanyDetails": true,
"legalLine": ""
}
}
},
"domains": [
{
"id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"host": "shop.northgategas.co.uk",
"kind": "bottle",
"records": [
{
"type": "CNAME"
}
]
}
]
}

Not signed in

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}

The plan does not include a shop

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}

Without the permission this needs

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}

The shop is off, or the draft changed since base

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}

Invalid theme, or the saved-theme allowance is full

Media typeapplication/json
object
error
required
string
Allowed values: validation
message
required
string
issues
required
Array<object>
object
path
required
string
message
required
string

Example

{
"error": "validation",
"issues": [
{
"path": "email",
"message": "Invalid email"
}
]
}

Too many requests, or theme processing is busy

Media typeapplication/json
object
error
required
string
message
required
string

Example

{
"error": "not_found",
"message": "Customer not found"
}