---
title: "Trigger Deals for developers and AI agents"
description: "A free, read-only JSON API and MCP server for live gun, ammo and magazine prices: cheapest ammo by caliber, search, deals and every store's price."
type: "article"
url: "https://trigger.deals/developers"
site: "Trigger Deals"
data: "sample"
---

# 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:

```bash
curl "https://trigger.deals/api/v1/ammo/cheapest?caliber=9mm&limit=5"
```

Every caliber's cheapest price per round today:

```bash
curl "https://trigger.deals/api/v1/calibers"
```

Search, in stock and below usual:

```bash
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.

Claude Desktop, Cursor and other clients that take a URL:

```json
{
  "mcpServers": {
    "trigger-deals": {
      "url": "https://trigger.deals/mcp"
    }
  }
}
```

Clients that only run local (stdio) servers:

```json
{
  "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:

```json
{
  "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.

## Sitemap

- [Home](https://trigger.deals/): today's drops and deals
- [Ammo prices by caliber](https://trigger.deals/ammo/prices): cheapest price per round today
- [Today's best deals](https://trigger.deals/deals)
- [Ammo](https://trigger.deals/ammo), [Guns](https://trigger.deals/guns), [Magazines](https://trigger.deals/magazines)
- [How we judge a deal](https://trigger.deals/how-it-works), [About](https://trigger.deals/about), [Contact](https://trigger.deals/contact), [Privacy](https://trigger.deals/privacy)
- [API and MCP for developers](https://trigger.deals/developers)
- [Full sitemap](https://trigger.deals/sitemap.md), [llms.txt](https://trigger.deals/llms.txt), [API (OpenAPI)](https://trigger.deals/openapi.json)
