Connect a shop
const url = 'https://example.com/shops';const options = { method: 'POST', headers: { cookie: '__Host-bottle.session_token=<__Host-bottle.session_token>', 'Content-Type': 'application/json' }, body: '{"source":"woocommerce","consumerKey":"example","consumerSecret":"example","name":"example","url":"https://example.com"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”Responses
Section titled “Responses”Connected
object
UUID v7
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.
object
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.
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
object
Example
{ "error": "not_found", "message": "Customer not found"}Not allowed to manage shops, or asking for a key to do it
object
Example
{ "error": "not_found", "message": "Customer not found"}Another connected shop of this business already has that name
object
Example
{ "error": "not_found", "message": "Customer not found"}Validation failed
object
object
Example
{ "error": "validation", "issues": [ { "path": "email", "message": "Invalid email" } ]}