Skip to content

Connect a shop

POST
/shops
curl --request POST \
--url https://example.com/shops \
--header 'Content-Type: application/json' \
--cookie __Host-bottle.session_token=<__Host-bottle.session_token> \
--data '{ "source": "woocommerce", "consumerKey": "example", "consumerSecret": "example", "name": "example", "url": "https://example.com" }'

WooCommerce takes a consumer key and secret generated under Settings, Advanced, REST API. Read access is enough for the catalogue; Read/Write is needed to manage Bottle order webhooks. Shopify takes an Admin API token with suitable product and order permissions, plus the matching app client secret for order notifications. Connecting the same address again replaces the credentials rather than adding a second connection.

Media typeapplication/json
One of:
object
source
required
string
Allowed values: woocommerce
consumerKey
required
string
>= 1 characters
consumerSecret
required
string
>= 1 characters
name
required
string
>= 1 characters <= 80 characters
url
required
string format: uri

Connected

Media typeapplication/json
object
id
required

UUID v7

string format: uuid
source
required
string
Allowed values: woocommerce shopify
name
required
string
customerName
string | null
url
required
string
priceBasis
required

Shop: read the shop’s own setting (WooCommerce prices include tax, Shopify taxes included), and the business’s pricesIncludeVat when it will not say. inc: every price from this shop includes VAT. ex: none of them do.

string
Allowed values: shop inc ex
catalogueImportSettings
object
importImages
required
boolean
importDescriptions
required
boolean
importCylinderCharges
required
boolean
suggestGasTypes
required
boolean
reviewGasTypes
required
boolean
syncOrderCompletion
boolean
catalogueMain
boolean
importOrdersAutomatically
required
boolean
orderSyncStatus
required

Setup_required: order feed still needs authenticating; receiving: it has received or reconciled orders; error: the latest attempt failed; off: automatic order import is switched off.

string
Allowed values: setup_required receiving error off
orderSyncStartedAt
required
string | null format: date-time
lastOrderSyncAt
required
string | null format: date-time
lastOrderSyncError
required
string | null
lastPulledAt
required
string | null format: date-time
lastError
required
string | null
createdAt
required
string format: date-time
updatedAt
required
string format: date-time

Example

{
"id": "019205d1-6e7a-7c3b-9f6e-3a2b1c0d9e8f",
"source": "woocommerce",
"name": "Main shop",
"customerName": "Thameside Trade Gas",
"url": "https://acmegas.co.uk",
"priceBasis": "shop",
"orderSyncStatus": "setup_required"
}

Not signed in

Media typeapplication/json
object
error
required
string
message
required
string

Example

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

Not allowed to manage shops, or asking for a key to do it

Media typeapplication/json
object
error
required
string
message
required
string

Example

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

Another connected shop of this business already has that name

Media typeapplication/json
object
error
required
string
message
required
string

Example

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

Validation failed

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"
}
]
}