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.
curl "https://trigger.deals/api/v1/ammo/cheapest?caliber=9mm&limit=5"curl "https://trigger.deals/api/v1/calibers"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.
| Endpoint | What it returns |
|---|---|
| GET /api/v1/calibers | Every 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/deals | In-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.
{
"mcpServers": {
"trigger-deals": {
"url": "https://trigger.deals/mcp"
}
}
}{
"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.
{
"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.