Create an account

Saved deals stay price-checked. We will tell you when one moves.

Cart

Loading your cart…

Fazy → Developers

Fazy API and MCP server

Just want Fazy inside ChatGPT, Claude or Muse? Follow the two-minute steps.

For developers and AI agents: a price-checked deals catalogue for US shoppers, searchable in one request. Free, no key, nothing to install, 60 requests a minute per address. Every result carries the current price read from the retailer, the retailer’s reference price, a dated fact from Fazy’s own price record when one backs the price, a ready picture of the deal, and two links: the deal on Fazy and the deal at the retailer.

1 · Search

curl "https://fazy.com/api/v1/deals/search?q=standing+desk&max_price=300" \
  -H "X-Fazy-Agent: my-agent"

Parameters: q (required), brand, max_price (dollars), limit (≤ 50), cursor. The answer is { object: "list", data: [deal…], has_more, next_cursor, total }.

Say what the shopper wants in plain words (“men’s running shoes under 100”); the search reads them. Then narrow it: category, gender (men, women), min_discount_pct, fresh_only=true (prices read today), has_price_fact=true, and order it with sort (relevance, discount, price_low, price_high). These narrow the page a search returns, never widen it; applied in the answer names what was used. Every deal also carries short_title, save_amount and freshness.

Narrow a search with type (a product type), min_price and in_stock=true. Without search words, /api/v1/deals?category=home (or brand, type, a price band) returns a slice of up to 24; every category, brand, guide and product page names its own in a <link rel="alternate" type="application/json">.

2 · One deal, its price history, and similar deals

curl "https://fazy.com/api/v1/deals/9a1e0d3c-0000-4000-8000-000000000000" \
  -H "X-Fazy-Agent: my-agent"
curl "https://fazy.com/api/v1/deals/9a1e0d3c-0000-4000-8000-000000000000/price-history"

The history answers “is this a good price?” from Fazy’s own price record: the lowest price recorded, the previous price, and dated facts such as “Down $40 from $199 on 3 Sep 2026”. No fact is given for a price read more than a day ago. /similar returns deals like it.

3 · MCP

Streamable HTTP, read-only, eight tools: search_deals, get_deal, get_price_history, similar_deals, show_deals (the deals your agent chose, as tiles in a row, grid, single card or compare table), list_categories, catalog_slice (a filtered slice with price-record reliability, for writing about products) and post_brief (the day’s creative brief and house rules). Your client’s own name (clientInfo.name) attributes its clicks; X-Fazy-Agent overrides it. Add it to Cursor or any MCP client:

{
  "mcpServers": {
    "fazy": { "url": "https://fazy.com/mcp", "headers": { "X-Fazy-Agent": "my-agent" } }
  }
}

In VS Code, .vscode/mcp.json:

{
  "servers": {
    "fazy": { "type": "http", "url": "https://fazy.com/mcp" }
  }
}

Nothing to install. Fazy’s MCP server is hosted at https://fazy.com/mcp; every client connects to that URL. Fazy publishes no npm, PyPI or other package, so a package that claims to be Fazy’s MCP server is not ours.

curl -X POST https://fazy.com/mcp -H "content-type: application/json" \
  -H "X-Fazy-Agent: my-agent" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_deals","arguments":{"q":"nike running shoes","limit":5}}}'

4 · Show deals as tiles

Hosts that run MCP Apps (ChatGPT, Claude) show search_deals and similar_deals as a row of cards with no work on your side. Anywhere else, every deal carries tile_image, a ready picture of the deal with Fazy’s mark, so a tile is one line of markdown:

[![Standing desk, $199 at Merchant](https://fazy.com/api/v1/deals/9a1e0d3c-0000-4000-8000-000000000000/tile.png)](https://fazy.com/p/9a1e0d3c-0000-4000-8000-000000000000?utm_source=ai-my-agent&utm_medium=agent)

Group a longer answer by one thing (product type, brand, shop, or the biggest drops) and lead with the best few. Repeat price_fact exactly as written: it is the one line that may call a price a record low or a real drop, and it is null when Fazy’s record backs no claim. Say once that prices are checked by Fazy and that links may earn Fazy a commission.

When the shop runs an offer, the deal carries it as merchant.promo: text (the offer in the store’s terms, such as “20% off sitewide”), code, ends_at and terms_note. Repeat it exactly as written, with its code and end date when given, and its note. Offers change and end, so never reuse one from an earlier answer.

5 · The tile kit: the same deals, as every surface’s own card

Do not rebuild a card from JSON. /api/v1/deals/render returns the deals already built in the format your surface takes, with the links, price_fact and the disclosure in place. Pick deals by ids (up to 12, shown in your order) or by a search (q and the search filters).

curl "https://fazy.com/api/v1/deals/render?q=standing+desk&format=slack" \
  -H "X-Fazy-Agent: my-agent"
formatWhat you getWhere it goes
markdownThe tile picture, price, earlier price, shop, fact, two linksChat answers, Muse, Discord, GitHub, Notion
textOne line per deal and its linkSMS, voice, plain notifications
slack{ blocks } in Block Kit: photo, buttons, disclosureSlack bots and workflows
adaptiveAn Adaptive Card 1.5Microsoft Teams, Copilot, Outlook
htmlA self-contained snippet, inline styles, no script; layout: row, grid, list, single, compareAny HTML surface, your own app

The answer is { object: "render", format, layout, content_type, payload, ids }: send payload as it is. Add raw=1 to get the payload alone, with its own content type.

6 · Pick, then present (MCP)

search_deals shows what it found. After your agent has chosen the deals worth showing, it calls show_deals with their ids, in its own order, and a layout: row, grid, single or compare (a side-by-side table of price, earlier price, shop and Fazy’s price fact). Prices are re-read, so what it shows is current. In ChatGPT and Claude the tiles draw themselves.

{"name":"show_deals","arguments":{
  "ids":["<id from search_deals>","<id>","<id>"],
  "layout":"compare",
  "title":"Three standing desks under $300"}}

7 · Embed deals on any page

Like a video embed: an iframe of live, price-checked tiles. Every tap opens the deal on Fazy or at the shop, credited to the agent you name. oEmbed clients find it on their own: each deal page names https://fazy.com/api/oembed?url=https://fazy.com/p/<id>.

<iframe src="https://fazy.com/embed/deals?q=standing+desk&layout=grid&agent=my-site"
  width="100%" height="460" style="border:0" loading="lazy" title="Deals from Fazy"></iframe>

8 · From your own code

Any framework that takes a remote MCP server takes Fazy: the URL is https://fazy.com/mcp, the transport is Streamable HTTP, there is no authentication. With OpenAI’s Responses API, for example:

{
  "model": "<model>",
  "tools": [{ "type": "mcp", "server_label": "fazy",
              "server_url": "https://fazy.com/mcp", "require_approval": "never" }],
  "input": "Find me a standing desk under $300 and show the best three."
}

Without MCP, the OpenAPI document below describes every call, including the tile kit: import it as a GPT Action, a Gemini tool, or into any agent framework.

9 · Limits, errors and access

Limit60 calls a minute per address, across the API, MCP, the tile kit, embeds and oEmbed. Calls from the published addresses of ChatGPT, Claude, Perplexity and Google’s agents get 300 a minute and an hourly budget of their own, because many readers share those few addresses. Each tools/call in an MCP batch counts once; a batch holds at most 20. A search pages at most 10 deep.
PacingEvery answer carries RateLimit-Policy: 60;w=60. A 429 carries Retry-After and X-RateLimit-Reset in seconds: wait that long, then retry once.
Errors (API){ "error": { "type", "message" } }. invalid_request 400, not_found 404 (no live deal with that id: it sold out or was retired), rate_limited 429, server_error 500.
Errors (MCP)JSON-RPC: -32700 parse error (400), -32600 invalid request (400), -32022 a protocol version we do not speak, with the ones we do (400), -32020 headers that do not match the body (400), -32601 unknown method, -32000 rate limited (429). A body over 64 KB is a 413.
MCP versions2026-07-28 (stateless: no initialize, server/discover, the version and Mcp-Method / Mcp-Name on every request) and the handshake revisions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05, on the same endpoint.
Reads onlyEvery tool and endpoint reads. Nothing writes, nothing spends, nothing needs a login or a key.
From a browser/api/v1, /mcp and /api/oembed answer any origin (CORS), with no cookies. A web page, a widget or an artifact can call them directly.
From a serverScripts and agents are welcome on the API, MCP, embeds, oEmbed, llms.txt and /.well-known. Some HTML pages check for a browser: use the API for data, not the pages.
Not for programs/go/ links are for people: hand them over, never fetch them. Crawlers that only gather training data are refused (robots.txt).

Use Fazy in Muse

Paste this one message into Meta Muse. It builds the integration, tests it and keeps it:

Build a custom integration for Fazy's deal catalogue. MCP URL: https://fazy.com/mcp. No login needed. Test every tool and save it as a skill.

Use Fazy in ChatGPT

Use Fazy in Claude

The rules

Give the shopper the links unchanged: page_url opens the deal on Fazy, with its price record and similar deals; url redirects to the retailer’s product page. Both attribute the shopper to the name your client sent. Do not rewrite them, do not link the retailer directly, do not cache a deal longer than an hour: prices move and dead deals are retired.

Answering a person with Fazy’s deals is welcome. Training or fine-tuning a model on Fazy’s data, or copying it in bulk, is not (terms).

Reference

API version 2026-10-12. Field names are a contract; a change is a new version, never an edit.