Skip to content

Trigger Deals for developers and AI agents

Everything on Trigger Deals is available to programs: a read-only JSON API, an MCP server for AI assistants, and a markdown version of every page. No key, no sign-up, no cost. While the site is in design preview, stores, prices and ratings are sample data: build against it, but don't quote the numbers as real offers.

Quickstart

Call the API from anywhere. Responses are JSON, cached for about a minute, and CORS is open.

Cheapest 9mm in stock, by price per round
curl "https://trigger.deals/api/v1/ammo/cheapest?caliber=9mm&limit=5"
Every caliber's cheapest price per round today
curl "https://trigger.deals/api/v1/calibers"
Search, in stock and below usual
curl "https://trigger.deals/api/v1/search?q=glock%2019&belowUsual=true"

Endpoints

The full description is OpenAPI 3.1 at https://trigger.deals/openapi.json.

EndpointWhat it returns
GET /api/v1/calibersEvery caliber's cheapest and median price per round today, and whether it is cheaper than usual
GET /api/v1/calibers/{caliber}One caliber: price index, cheapest boxes in stock, 90 days of history
GET /api/v1/ammo/cheapest?caliber=In-stock ammo for a caliber, cheapest per round first
GET /api/v1/search?q=Products matching words and filters, with lowest landed price and deal signal
GET /api/v1/dealsIn-stock products below their usual price (best deals, just dropped, 90-day lows)
GET /api/v1/products/{slug}One product: every store's price and stock, specs, daily price history

MCP server for AI assistants

https://trigger.deals/mcp speaks MCP over Streamable HTTP, needs no authentication, and only reads. Tools: find_cheapest_ammo, ammo_prices_by_caliber, search_products, get_product, get_deals. Its server card is at https://trigger.deals/.well-known/mcp/server-card.json.

Claude Desktop, Cursor and other clients that take a URL
{
  "mcpServers": {
    "trigger-deals": {
      "url": "https://trigger.deals/mcp"
    }
  }
}
Clients that only run local (stdio) servers
{
  "mcpServers": {
    "trigger-deals": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://trigger.deals/mcp"
      ]
    }
  }
}

Markdown and discovery

  • Every page has a markdown version: add .md to its URL (/index.md for the home page) or send Accept: text/markdown.
  • https://trigger.deals/llms.txt maps the site for language models; https://trigger.deals/llms-full.txt carries the definitions and today's prices in one file.
  • https://trigger.deals/AGENTS.md explains how to quote our prices. https://trigger.deals/.well-known/ai-catalog.json lists every agent-facing resource.
  • Pages carry schema.org structured data; https://trigger.deals/sitemap.xml lists every product.

Rate limits

The API and MCP server allow 120 requests a minute per client. Every response says where you stand with the IETF RateLimit and RateLimit-Policy headers. Past the limit you get a 429 with Retry-After; responses are cached for a minute, so repeating a call sooner returns the same data anyway.

Errors

Errors are RFC 9457 problem details (application/problem+json) that say what was wrong and how to fix it.

An unknown caliber
{
  "type": "https://trigger.deals/errors/400",
  "title": "Invalid request",
  "status": 400,
  "detail": "Unknown caliber \"banana\". Try one of: 9mm-luger, 5-56-nato, 22-lr, … (full list: https://trigger.deals/api/v1/calibers)."
}

Versioning and deprecation

  • The version is in the path: /api/v1. Within v1, changes are additive only: new endpoints, new optional parameters, new response fields.
  • A breaking change ships as /api/v2 alongside v1, never in place.
  • Before a v1 endpoint is retired, its responses carry Deprecation and Sunset headers (RFC 9745 and RFC 8594) for at least six months, and this page lists the date.
  • MCP tool names and their input fields follow the same rules. Nothing is deprecated today.

Using the data

  • Link products with their url field and send shoppers to stores with buyUrl.
  • Say that prices are landed (shipping included, sales tax and any FFL transfer fee excluded) and give the verifiedAt time.
  • Re-fetch rather than store prices: they are re-verified about every 10 minutes.