Skip to content

Get a shop, by its address

GET
/storefront/sites/{host}
curl --request GET \
--url https://example.com/storefront/sites/northgate.shop.getbottle.app

Deliberately unauthenticated: what a business’s shop shows, for the address a shopper typed. The live settings, the business’s name and VAT details, its categories and the products it published, with prices as the shopper pays them (VAT in when the business charges it) and deposits on cylinders. Nothing a shopper should not see. A shop taken down for now, or no longer paid for, answers with closed true and no products. With preview, a token from POST /storefront/preview, the draft instead, for that business’s own addresses only, never cached. Anything that is not a shop is 404 with an empty body. Cached for a minute, with an ETag.

host
required
string
Example
northgate.shop.getbottle.app
preview
string

The shop

Media typeapplication/json
object
business
required
object
name
required
string
vatRegistered
required
boolean
vatNumber
required
string | null
companyNumber
required
string | null
registeredAddress
required
string | null
origin
required
string
settings
required
object
template

Yard: classic, photography first. flame: bold type and colour blocks. ledger: quiet, product grid first. Only yard is built today.

string
default: yard
Allowed values: yard flame ledger
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
banners
Array<object>
default: <= 6 items
object
id
required
string
<= 40 characters
imageKey
required
string | null
<= 300 characters
heading
required
string
<= 160 characters
body
string
<= 2000 characters
buttonLabel
string
<= 160 characters
buttonTarget
One of:
object
kind
required
string
Allowed values: category
slug
required
string
<= 80 characters
from
string | null format: date
until
string | null format: date
sections
Array<object>
default: [object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] <= 8 items
object
section
required
string
Allowed values: hero categories featured delivery reviews about faq contact
visible
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
string format: uri
<= 500 characters
instagram
string format: uri
<= 500 characters
x
string format: uri
<= 500 characters
linkedin
string format: uri
<= 500 characters
googlePlaceId
string
<= 200 characters
commerce
object
askForEmpties
boolean
default: true
collection
object
enabled
boolean
address
string
"" <= 400 characters
notes
string
"" <= 160 characters
tradeEnquiries
boolean
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
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
categories
required
Array<object>
object
slug
required
string
name
required
string
description
required
string | null
image
required
object
alt
required
string | null
width
required
integer
height
required
integer
thumb
required
string
card
required
string
large
required
string
products
required
Array<object>
object
id
required

UUID v7

string format: uuid
slug
required
string
name
required
string
brand
required
string | null
description
required
string | null
kind
required
string
Allowed values: cylinder deposit hire accessory appliance fuel consumable delivery other
pricePence
required
integer
depositPence
required
integer | null
gasType
required
object
id
required

UUID v7

string format: uuid
name
required
string
colour
required
string
categorySlugs
required
Array<string>
images
required
Array<object>
object
alt
required
string | null
width
required
integer
height
required
integer
thumb
required
string
card
required
string
large
required
string
availability
required
string
Allowed values: in_stock low out backorder
pricePenceExVat
integer
volume
object
counting
required
string
Allowed values: stepped bulk
bands
required
Array<object>
>= 2 items
object
fromQuantity
required
integer
toQuantity
required
integer | null
unitPence
required
integer
unitPenceExVat
required
integer
rent
object
pricePence
required
integer
pricePenceExVat
required
integer
period
required
string
Allowed values: daily weekly monthly
summary
required
string
depositRefund
object
rule
required
string
Allowed values: full percent scale none
summary
required
string
percent
integer | null
deductionPence
integer | null
scale
Array<object> | null
object
upToMonths
required
integer | null
percent
integer
fixedPence
integer
countsFrom
string
Allowed values: latest first
preview
required
boolean
deliveryChoices
required
Array<object>
object
deliveryOptionId
required

UUID v7

string format: uuid
name
required
string
chargePence
required
integer
chargePenceExVat
integer
earliest
required
string format: date
latest
required
string format: date
orderBy
required
string | null format: date-time
daysOfWeek
Array<integer> | null
deliveryCoverage
Array<object>
object
postcodes
required
Array<string>
places
required
Array<string>
choices
required
Array<string>
freeOverPence
required
integer | null
minimumOrderPence
required
integer | null
serverTime
required
string format: date-time
closed
required
boolean
logoFromBusiness
boolean
charges
object
deposits
required
boolean
rent
required
boolean
priceDisplay
string
Allowed values: inc ex
defaultCylinderCharge
string
Allowed values: deposit rent
Example
{
"settings": {
"template": "yard",
"theme": {
"primary": "#1F3A5F",
"accent": "#E4572E",
"background": "#FAF7F2",
"fontPair": "classic",
"radius": 12,
"logoKey": null,
"iconKey": null
},
"content": {
"headline": "",
"strapline": "",
"banners": [],
"sections": [
{
"section": "hero",
"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,
"offerPhoneOrders": true,
"ageCheck": false,
"whenLow": "sell",
"whenOut": "stop",
"termsUrl": null
},
"seo": {
"title": "",
"description": "",
"imageKey": null
}
},
"products": [
{
"id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"kind": "cylinder",
"gasType": {
"id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f"
},
"availability": "in_stock",
"volume": {
"counting": "stepped"
},
"rent": {
"period": "daily"
},
"depositRefund": {
"rule": "full",
"countsFrom": "latest"
}
}
],
"deliveryChoices": [
{
"deliveryOptionId": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"name": "Next day"
}
],
"deliveryCoverage": [
{
"choices": [
"019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f"
]
}
],
"priceDisplay": "inc",
"defaultCylinderCharge": "deposit"
}

Not changed since the ETag sent

Not a shop. No body.

Too many requests from one address