tote
Documentation Getting started
Getting started

Make any store agent-buyable.

Tote is a commerce layer for AI agents. Point your agent at Tote and it can search real stores, build a real cart, and hand back a checkout link. No integration from the store, no plugin from the merchant, no payment handling. Everything below works today.

claude mcp add --transport http tote https://yrs-heart-listen-oils.trycloudflare.com/mcp \
  --header "Authorization: Bearer YOUR_KEY"

What your agent can do

  • Search a verified index of stores, ranked by real usage.
  • Read live products, prices, and stock from any store's catalog.
  • Add items to a real, per-session cart and read the running total.
  • Get a checkout link a human clicks to pay, on the store's own site.
  • Reach any Shopify or WooCommerce store with no merchant setup.

Quickstart

Get a key, add the connector, and ask. The whole flow, start to checkout link, is four calls.

  1. 1. Create a key on the keys page.
  2. 2. Add the connector with the snippet above.
  3. 3. Ask your agent: "find a coffee store on Tote and build a cart."
  4. 4. Open the checkout link it returns.

Authentication

Pass your key as a bearer token in the Authorization header. Keys travel in the header only, never in the URL. Create and inspect keys on the keys page.

Authorization: Bearer cg_live_...

Choose your path

MCP

Connect Claude, Cursor, or any MCP client to the five tools.

REST

Call /v1 endpoints directly from any language over HTTPS.

No-install prompt

Paste one prompt into a browsing-enabled chat, zero setup.

search_stores

Find verified stores by name or domain, ranked by real usage (checkouts, adds, and calls).

paramtypedescription
querystringMatch store name or domain. Omit for top-ranked.
limitintMax results, default 10.
Request
GET https://yrs-heart-listen-oils.trycloudflare.com/v1/stores?query=coffee&limit=3
Response
{
  "stores": [
    {
      "domain": "deathwishcoffee.com",
      "name": "Death Wish Coffee",
      "product_count": 146,
      "currency": "USD",
      "avg_latency_ms": 434
    }
  ]
}

list_products

Products, prices, and availability from a store's live catalog. Optional query filters within the store.

paramtypedescription
store_domain*stringA verified store domain.
querystringFilter within the store's catalog.
limitintMax products, default 10.
Request
GET https://yrs-heart-listen-oils.trycloudflare.com/v1/stores/deathwishcoffee.com/products?limit=2
Response
{
  "store": "deathwishcoffee.com",
  "products": [
    {
      "handle": "pumpkin-chai-coffee",
      "title": "Pumpkin Chai Coffee",
      "variants": [
        { "id": 41181425598519, "price": "13.99", "available": true }
      ]
    }
  ]
}

get_product

Full detail for one product by its handle, including images and description.

paramtypedescription
store_domain*stringA verified store domain.
product_handle*stringThe product's handle or id.
Request
GET https://yrs-heart-listen-oils.trycloudflare.com/v1/stores/deathwishcoffee.com/products/pumpkin-chai-coffee
Response
{
  "handle": "pumpkin-chai-coffee",
  "title": "Pumpkin Chai Coffee",
  "vendor": "Death Wish Coffee",
  "images": ["https://..."],
  "variants": [
    { "id": 41181425598519, "price": "13.99", "available": true }
  ]
}

add_to_cart

Add a variant to the session's cart for a store and return the running total. Carts persist per (session, store).

paramtypedescription
session_id*stringYour caller-chosen session id.
store_domain*stringA verified store domain.
variant_id*intVariant id from list_products.
quantityintDefault 1.
Request
POST https://yrs-heart-listen-oils.trycloudflare.com/v1/cart/add
{
  "session_id": "me",
  "store_domain": "deathwishcoffee.com",
  "variant_id": 41181425598519,
  "quantity": 1
}
Response
{
  "store": "deathwishcoffee.com",
  "items": [
    { "variant_id": 41181425598519, "title": "Pumpkin Chai Coffee",
      "quantity": 1, "price": 1399 }
  ],
  "total_price": 1399,
  "currency": "USD",
  "item_count": 1
}

checkout_url

The real checkout link for everything in the session's cart. Tote stops here; a human completes payment on the store's site.

paramtypedescription
session_id*stringThe session whose cart to check out.
store_domain*stringA verified store domain.
Request
GET https://yrs-heart-listen-oils.trycloudflare.com/v1/checkout_url?session_id=me&store_domain=deathwishcoffee.com
Response
{
  "store": "deathwishcoffee.com",
  "checkout_url": "https://deathwishcoffee.com/cart/41181425598519:1",
  "items": 1,
  "total_price": 1399,
  "currency": "USD"
}

Supported platforms

The same five tools work across every platform. Store carts differ under the hood, but the interface your agent sees does not.

Shopify

~4.6M stores. Public AJAX endpoints, no key needed.

WooCommerce

~3M stores. Public Store API, no key needed.

Best Buy

Official developer API. Marketplace adapter template.

The checkout model

Tote never touches payment. Every flow ends at a checkout URL that a human opens and completes on the store's own site. That is a property of the code, not a policy: there is no payment path to misuse, and merchants have nothing to object to.

For Shopify, the link is a cart permalink that rebuilds the cart in the human's browser. For WooCommerce and Best Buy, it is the store's own add-to-cart URL. Either way, the price at that page is the price that counts.

Telemetry & privacy

Every call logs volume only: tool name, store, outcome, latency, and your key id. Search queries, product handles, and cart contents are never logged as analytics. Check your own usage at /v1/keys/usage, and read the full privacy policy.

Was this page helpful?Get started