Developers & AI agents

This page is for developers and AI agents who want to read our catalogue or help a shopper buy from Blueberry Therapy Shop. Everything below works without an account, an API key or a login. Prices are in Canadian dollars. We ship across Canada and worldwide.

Start here

Authentication and permissions

None. The catalogue, search and cart endpoints are public reads and cart writes on the storefront, so there are no API keys, OAuth scopes or sign-ups. The only privileged step in a purchase is payment, and payment always needs the buyer's own approval through the UCP/MCP checkout flow or Shop Pay. We do not issue tokens because nothing here needs one.

Read the catalogue

What Request
All products (paged) GET /products.json?limit=250&page=1
One product GET /products/{handle}.json
Collections (categories) GET /collections.json
Products in a collection GET /collections/{handle}/products.json
Search GET /search/suggest.json?q=kgoal&resources[type]=product
Every URL GET /sitemap.xml

Example:

curl -s "https://blueberrytherapyshop.ca/products/src-compression-socks.json"

Each product carries handle, body_html, vendor, tags, images and a variants array. On every variant, price is what the shopper pays and compare_at_price is the regular price when an item is on sale. Use variants[].id with the cart endpoints. Product pages also carry schema.org Product JSON-LD with one Offer per variant (price, currency, availability, SKU).

Manage a cart

What Request
Current cart GET /cart.js
Add items POST /cart/add.js with {"items":[{"id":VARIANT_ID,"quantity":1}]}
Set quantities POST /cart/update.js with {"updates":{"VARIANT_ID":2}}
Change one line POST /cart/change.js with {"line":1,"quantity":0}
Empty the cart POST /cart/clear.js
curl -s -X POST "https://blueberrytherapyshop.ca/cart/add.js" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"id":53677478904097,"quantity":1}]}'

Money in cart responses is in cents.

Errors

Cart endpoints return structured JSON errors, never an HTML page:

HTTP 422
{"status":422,"message":"Cart Error","description":"Cannot find variant"}

Fix: look the variant id up on the product first. An unknown product handle on /products/{handle}.json returns HTTP 404 with an empty JSON body. The MCP endpoints return JSON-RPC 2.0 error objects (code, message). Back off and retry on HTTP 429.

Buying on a shopper's behalf

  1. GET /.well-known/ucp to confirm versions, capabilities and the MCP endpoint.
  2. POST a JSON-RPC tools/list to that MCP endpoint to see the commerce tools (catalogue search, cart, checkout).
  3. Run search_catalog, create_cart, create_checkout, update_checkout, then complete_checkout.

Checkout is for humans. Never complete payment without the buyer's explicit approval at that moment. If you cannot get it, hand the purchase to Shop Pay through the Shop skill.

A second MCP server at POST /api/mcp answers policy and FAQ questions (shipping, returns, privacy, terms, contact) from the store's own policies through the search_shop_policies_and_faqs tool.

Testing without touching the live store

Shopify's mock.shop is a free sandbox with the same Storefront GraphQL API shape and fictional products. Build and test there, then point at this store's public endpoints. Cart calls here create real carts but never charge anything.

Rate limits and good manners

  • Catalogue JSON is cacheable. Please cache it and page with limit=250 instead of hammering single-product calls.
  • Honour 429 responses with a back-off.
  • Read /robots.txt. Checkout pages are off limits to automation.

Policies

Questions or partnership requests

Email hello@blueberrytherapy.ca. Clinic appointments are booked at blueberrytherapy.ca, not through this store, and no patient data lives here.