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
- Agent instructions: /agents.md (also served at /llms.txt). It says when this store is the right tool and how an agent should behave here.
-
Machine-readable API spec: /openapi.json (OpenAPI 3.1, direct file: https://cdn.shopify.com/s/files/1/0762/6997/7889/files/openapi.json). Every operation has an
operationId, a description, typed parameters and response schemas, so it drops straight into function-calling tool definitions. - Agent commerce: /.well-known/ucp (Universal Commerce Protocol discovery) and the MCP endpoint it points to. Personal shopping agents can also use the Shop skill at shop.app/SKILL.md.
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
-
GET /.well-known/ucpto confirm versions, capabilities and the MCP endpoint. -
POSTa JSON-RPCtools/listto that MCP endpoint to see the commerce tools (catalogue search, cart, checkout). - Run
search_catalog,create_cart,create_checkout,update_checkout, thencomplete_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=250instead of hammering single-product calls. - Honour
429responses 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.