Shop API: Get Shopify store product
Gets a public Shopify product by its product page link, or by the closest name match within a store. Stores that restrict public product access cannot be read.
Unofficial. Not affiliated with or endorsed by Shop.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Store, required
store Store website, such as allbirds.com, or a product page link, such as https://www.allbirds.com/products/mens-tree-runners.
https://www.allbirds.com/products/mens-tree-runners
- Product Name optional
product_name Product to find by name, such as Tree Runners. Leave blank when store is a product page link.
(default)
Input as JSON
{ "store": "https://www.allbirds.com/products/mens-tree-runners" }Output
{ "tags": [ "allbirds::carbon-score => 4.52", "allbirds::cfId => color-mens-tree-runners-jet-black-white", "allbirds::complete => true" ], "brand": "Allbirds", "price": 100, "handle": "mens-tree-runners", "options": [ { "name": "Size", "values": [ "8", "9", "10" ] } ], "currency": "USD", "variants": [ { "sku": "TR3MJBW080", "price": 100, "in_stock": true, "variant_id": 33179624669264, "option_values": [ "Size: 8" ] }, { "sku": "TR3MJBW090", "price": 100, "in_stock": false, "variant_id": 33179624702032, "option_values": [ "Size: 9" ] }, { "sku": "TR3MJBW100", "price": 100, "in_stock": false, "variant_id": 33179624734800, "option_values": [ "Size: 10" ] } ], "product_id": 4870548979792, "description": "The Allbirds Tree Runner is a breathable and lightweight sneaker made with responsibly sourced eucalyptus tree fiber that feels silky smooth and cool on your skin. These shoes are perfect for everyday casual wear, walking, and warmer weather.", "image_links": [ "https://cdn.shopify.com/s/files/1/1104/4168/files/TR3MJBW080_SHOE_LEFT_GLOBAL_MENS_TREE_RUNNER_JET_BLACK_WHITE.png?v=1751165486" , "https://cdn.shopify.com/s/files/1/1104/4168/files/TR3MJBW080_SHOE_BACK_GLOBAL_MENS_TREE_RUNNER_JET_BLACK_WHITE.png?v=1751165486" , "https://cdn.shopify.com/s/files/1/1104/4168/files/TR3MJBW080_SHOE_TOP_GLOBAL_MENS_TREE_RUNNER_JET_BLACK_WHITE.png?v=1751165486" ], "product_link": "https://www.allbirds.com/products/mens-tree-runners" , "product_name": "Men's Tree Runner - Jet Black (White Sole)", "product_type": "Shoes", "original_price": null, "published_date": "2026-09-25"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"shop.app/get_store_product","input":{"store":"https://www.allbirds.com/products/mens-tree-runners"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "shop.app/get_store_product" , "input": { "store": "https://www.allbirds.com/products/mens-tree-runners" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "shop.app/get_store_product" , "input": { "store": "https://www.allbirds.com/products/mens-tree-runners" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run shop.app/get_store_product# with {"store":"https://www.allbirds.com/products/mens-tree-runners"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "store" ], "properties": { "store": { "type": "string", "minLength": 1, "description": "Store website, such as allbirds.com, or a product page link, such as https://www.allbirds.com/products/mens-tree-runners." }, "product_name": { "type": "string", "default": "", "description": "Product to find by name, such as Tree Runners. Leave blank when store is a product page link." } }}Output schema
{ "type": "object", "required": [ "product_name", "brand", "product_type", "description", "price", "original_price", "currency", "options", "variants", "tags", "image_links", "product_link", "published_date", "product_id", "handle" ], "properties": { "tags": { "type": "array", "items": { "type": "string" }, "description": "Product tags." }, "brand": { "type": [ "string", "null" ], "description": "Vendor name." }, "price": { "type": [ "number", "null" ], "description": "Lowest variant price in the storefront currency." }, "handle": { "type": "string", "description": "Shopify product handle.", "x-fous-developer": true }, "options": { "type": "array", "items": { "type": "object", "required": [ "name", "values" ], "properties": { "name": { "type": "string", "description": "Option name." }, "values": { "type": "array", "items": { "type": "string" } } } }, "description": "Option names and offered values." }, "currency": { "type": "string", "description": "Three-letter storefront currency code." }, "variants": { "type": "array", "items": { "type": "object", "required": [ "option_values", "price", "in_stock", "sku", "variant_id" ], "properties": { "sku": { "type": [ "string", "null" ], "description": "Variant SKU." }, "price": { "type": [ "number", "null" ], "description": "Variant price in the storefront currency." }, "in_stock": { "type": "boolean", "description": "Whether the variant is available." }, "variant_id": { "type": [ "integer", "null" ], "description": "Shopify variant ID.", "x-fous-developer": true }, "option_values": { "type": "array", "items": { "type": "string" }, "description": "Option selections such as Size: 8." } } }, "description": "Individual purchasable variants." }, "product_id": { "type": [ "integer", "null" ], "description": "Shopify product ID.", "x-fous-developer": true }, "description": { "type": "string", "description": "Product description in plain text." }, "image_links": { "type": "array", "items": { "type": "string" }, "description": "Links to product images." }, "product_link": { "type": "string", "description": "Link to this product on the store." }, "product_name": { "type": "string", "description": "Product title." }, "product_type": { "type": [ "string", "null" ], "description": "Product category or type." }, "original_price": { "type": [ "number", "null" ], "description": "Compare-at price for the lowest-priced variant, when higher than its price." }, "published_date": { "type": [ "string", "null" ], "description": "Date the store published this product, YYYY-MM-DD." } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
shop.app/get_store_product- Returns
- product name, brand, type, description, price, original price, currency, options, variants, tags, images, link, published date, ids
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method shop.app/get_store_product with the inputs above.
Ask your agent
- Can you pull up the details for the Tree Runners sneakers from allbirds.com, including price and available sizes?
- I need the variants and current price for the men's Tree Runners at https://www.allbirds.com/products/mens-tree-runners
- Find the closest match for Glow Lamp in the Nordvik store and tell me its brand, tags, and images.
- What's the original price versus the sale price for the Everyday Hoodie from a store called Thornbury Outfitters?
- Look up the product at https://www.example-shop.com/products/canvas-tote-large and give me its description, published date, and product ids.
See more
All Shop methodsLists publicly published products from a Shopify store in catalogue or collection order, with variant prices and availability, optionally filtered by name words or an exact collection name.
shop.app/list_store_productsGets details for an Amazon product, found by name or by link, in a chosen country store. Offer prices, delivery and variants may be missing when Amazon does not show them publicly.
amazon.com/get_productGets a B&H Photo product's details by name, product link, or B&H number. A name uses the best matching search result; details and prices reflect the public page.
bhphotovideo.com/get_productGets current Apple Store prices and the configurations on sale for a product in one country. It includes only models sold on that country's public store.
apple.com/get_product_pricesGets details, price and availability for a Walmart product by name or product link, using Walmart's default location.
walmart.com/get_productFinds a Lowe's product by name, item number or product link and returns its details, price, specifications, images and availability at the nearest store for a ZIP code (or the site's default store).
lowes.com/get_productGets a Zara item's price, colours, sizes with availability, materials and images by item name or Zara item link in a chosen country. A name returns the closest match from Zara's search.
zara.com/get_productGets an H&M item's current country-specific price, sizes, colours and images by product name or product page link. Description, materials, composition, care and sustainability details are always returned as null.
hm.com/get_product