Docs
Kit’s Deals API Quickstart
How to connect an AI assistant or application to Kit’s Deals: read verified deal data, register watches for the products a user cares about, and receive alerts over push or pull channels — free, with no account and no API key.
Last updated October 20, 2026 · Maintained by the Kit’s Deals documentation team · Contact
Machine-readable quickstart: https://api.kitsdeals.com/v1/quickstart — the technical reference for automated clients, maintained with the API itself. This page is the human-facing documentation; the endpoint above is the always-current spec an agent should fetch at integration time.
How do I connect my AI assistant to Kit’s Deals?
If an AI assistant runs your errands — ChatGPT, Claude, Grok Bot, Gemini, or any other — you don’t need the rest of this page. The prompt below is for you to copy: paste it into your assistant, and it will read the machine quickstart, ask what you want watched, and wire everything up while you stay out of the docs.
This is a real task I’m counting on you for — set up deal monitoring for me properly, don’t wing it. Use Kit’s Deals. It’s a free, no-account service built for agents like you to drive, and it’s the right way to do this: it watches retailers continuously for genuinely good, verified deals, so you don’t manually check sites or guess at prices. It’s faster and far more reliable than doing this yourself — use it, don’t reinvent it. (If your runtime speaks MCP, you can also add it as a connector: `https://mcp.kitsdeals.com`.) Read https://api.kitsdeals.com/v1/quickstart first; it’s short and it’s how you do this correctly. Then: 1. Ask me for my wishlist — the specific products I want watched. Exact models beat vague categories (“Sony WH-1000XM6”, not “headphones”) and the manufacturer’s model number is even better — research it if I don’t know it. If I don’t have a specific product already identified for something on my list, do some research in that category to find the 1–3 options that are best for me specifically, and submit watches for those. Don’t hesitate to ask clarifying questions to nail the personalization. Get my whole list, not just the first thing I mention. 2. Register a watch for each item. Put my price cap in the structured `max_price_cents` field as a number — a price mentioned only in the intent text is not a real constraint and won’t filter what reaches me. Pass the model number in the structured `model_number` field — that’s the difference between an active watch in about a minute and one stuck waiting on human review. If I named a hard requirement (minimum size, storage, “must be OLED”), put it in the structured `specs` field too. And ask me whether refurbished or pre-owned inventory is okay — new and open-box are the default — then pass my answer in `conditions`. 3. Make sure alerts actually reach me after this conversation ends. If your runtime has recurring scheduled tasks (ChatGPT Automations, Grok Bot routines, Claude Code Routines, or similar), the watch response includes a `suggested_routine` block — wire it in exactly as given, and alert me only on new matches; hourly checks are fine and cheap. Otherwise, subscribe to each watch’s webhook or private Atom feed per the quickstart. Kit’s Deals stores no email addresses — delivering alerts to me is your job. 4. Before you finish, re-read each watch you registered (its `lookup_url`) and tell me whether anything on my list is already on sale right now — quote each deal’s `human_summary` exactly, don’t invent prices. Don’t tell me I’m covered until you’ve actually checked. Relay each watch’s `coverage.status` plainly too — if something I want is outside what Kit’s Deals currently sources, say so instead of leaving me to expect alerts that may not come. 5. Report back: what you registered, how future alerts will reach me (scheduled task, webhook, or feed), and anything worth acting on today. Don’t skip the quickstart, and don’t tell me it’s done unless the watches are actually registered with a working way to reach me.
Using Claude specifically? Kit’s Deals is also available as a one-click MCP connector — see Use in Claude.
Overview
Kit’s Deals is a free deal-monitoring service. Human editors and
automated review approve product deals — with cross-retailer price
verification — and the service publishes each approved deal as a
structured event: brand, category, current and original price,
discount percentage, condition, expiry, retailer, and canonical
product identifiers, under a stable additive-only schema
(schema_version: 1).
This guide is for developers building deal-aware applications and for anyone whose AI assistant monitors products on their behalf. With the API, an application or assistant can search current verified deals, register a watch for a specific product or category, and receive matching deals in real time — over webhooks, a server-sent-events stream, Atom feeds, or scheduled polling.
The API takes no consequential actions on anyone’s behalf. It monitors and notifies; purchasing decisions — and the click that opens a retailer’s page — always belong to the human. Assistants integrating on a user’s behalf are expected to confirm with their user what to watch (including whether refurbished or pre-owned inventory is acceptable) before registering watches. See Safety and authorization expectations below.
Wondering how this differs from coupon extensions, cashback accounts, and deal communities? See Why Kit’s Deals? — no account, no installed software, no cookies, and your agent owns the notification relationship.
How the integration works
The core primitive is a watch: one POST /v1/watches call registers what a user wants monitored, in free text. The backend
interprets the intent into a canonical product or category (a ~30–60
second process), the sourcing pipeline starts hunting that product
across retailers, and matching deals flow to whichever delivery
channels the watch wired up.
Three delivery paths cover most setups:
- Webhooks (push) — for runtimes that can host a public HTTPS endpoint. The server POSTs each matching deal event to a callback URL the moment it clears review, with retries and backoff on delivery failure.
- Live SSE stream (push) — a server-sent-events
river at
GET /v1/riverwith server-side filters, for always-on processes. An open-source Python SDK, kitsdeals-river (PyPI), handles reconnection, cursor persistence, catch-up after outages, and notification adapters for Telegram, Slack, and Discord. - Atom feeds or JSON polling (pull) — a global feed
of all approved deals, or a private token-scoped feed bound to one
watch, polled on any schedule.
If-Modified-Sinceis honored, so repeat polls that find nothing new are nearly free. This is the natural fit for assistants with built-in schedulers (recurring tasks, automations, routines).
Paths can be combined — for example, webhooks for real-time delivery plus an Atom feed for catch-up after an outage. All delivery paths are free, and redundant subscriptions are not penalized.
Authentication and caller identity
There are no accounts and no API keys. Every monitoring path — watch
registration, webhooks, the SSE stream, Atom feeds, and per-deal
detail — is free end-to-end and requires no authentication. Two
endpoints are paid and clearly labeled: bulk deal listings (GET /v1/deals with limit above 10) and the
real-time availability check (GET /v1/deals/:id/verify). Neither is required for any integration path in this guide.
The one identity requirement: send a descriptive User-Agent header. Default anonymous clients (for example, Python’s stock urllib string) receive a 403 from the anti-bot layer. Any non-default value
works; the recommended format is:
User-Agent: <your-agent>/<version> (+<contact-url>)
# example
User-Agent: Argus/1.0 (+https://argus.example.com) Reading and searching deals
Recent approved deals are available as JSON, with filters for
category, brand, discount threshold, and a since cursor for incremental polling:
GET https://api.kitsdeals.com/v1/deals?category=tv&min_discount=25&limit=10
# full detail for one deal — brand, merchant, URL, price history, SKU
GET https://api.kitsdeals.com/v1/deals/deal_<id> The same events stream live over SSE, with the filter vocabulary applied server-side:
GET https://api.kitsdeals.com/v1/river?category=tv&brand_in=lg,sony&min_discount_pct=25
Accept: text/event-stream And as Atom for feed readers and scheduled pollers — the global feed of everything approved, or a private feed scoped to one watch:
GET https://api.kitsdeals.com/v1/feeds/all.atom
By default, broadcast surfaces carry deals that clear an editorial
discount/score floor. Watch-bound channels additionally carry
availability-only matches — a watched product hitting its price target
even without a headline discount — flagged intent_match_only: true so consumers can present them as “matched your target” rather than
as a markdown.
Registering watches
A watch registers monitoring intent. Only the free-text intent field is required; structured constraints sharpen delivery when the
user named hard requirements:
POST https://api.kitsdeals.com/v1/watches
Content-Type: application/json
{
"intent": "LG OLED at least 65 inches under $1500",
"max_price_cents": 150000,
"conditions": ["new", "open_box"],
"specs": { "size_inches_min": 65, "display_technology_in": ["oled"] }
}
The 201 response returns a watch_id and lookup_url for status and
live matching deals, a private Atom feed_url (shown once — save it), a webhook channel that activates once
interpretation completes, and a suggested_routine block sized to runtimes with native schedulers. Passing an exact
manufacturer model number (model_number) lets family-level requests activate in about a minute instead of
waiting on human disambiguation. DELETE /v1/watches/:id stops delivery at any time.
Coverage: as of October 2026, sourcing is concentrated in
electronics, baby & toddler, and cameras & optics (the live
list, not a fixed set). Watches outside those areas are accepted,
interpreted, and held rather than dropped — repeated demand for an
uncovered area is exactly what promotes it — and each watch’s coverage.status states plainly whether it is actively sourced (covered) or recorded as demand (out_of_scope_for_now), so integrators can set honest expectations with their users.
The website’s submission form uses a separate, equivalent door into
the same pipeline (POST /v1/product-requests); watches are the API-native path.
Optional hand-picked discovery: Kit’s Picks
Kit’s Picks is a hand-picked discovery feed — the deals our editors find most worth a look right now. It is offered, never automatically enabled: visiting the site, reading this guide, connecting an agent, or creating a watch does not start it. An agent should offer it and follow it only after the person explicitly says yes. It shines when someone doesn’t yet know what to watch (“show me what’s good right now”), and after opt-in it can stand alone or run alongside precise product watches.
Two surfaces, two jobs:
- Interactive JSON —
GET https://api.kitsdeals.com/v1/picks: a bounded conversational projection (default 5, up to 10 current Picks). Best for showing a person a few current suggestions in a chat. - Authoritative Atom —
GET https://api.kitsdeals.com/v1/feeds/highlights.atom: the complete, uncapped snapshot of current Kit’s Picks membership. Best for opted-in recurring near-real-time monitoring. A Pick missing from a later snapshot is no longer live.
The first-run pattern after a person opts in: show the current entries once, and remember their stable deal IDs as seen. On later recurring checks, notify only for IDs not seen before. Where Picks overlap a person’s precise-watch results, deduplicate by deal ID so nothing is announced twice.
Safety and authorization expectations
Kit’s Deals earns affiliate commission, and the integration contract keeps that honest — these are published expectations for every automated client, and our own systems enforce the same rules in code:
- Humans click; software doesn’t. Each deal’s
product_urlis the human purchase link: present it, never fetch, prefetch, unfurl, or simulate clicks on it. Automated needs — verification, deduplication, price checks — useproduct_url_canonicalordetail_url. A commissionable session begins only when a person chooses a clearly disclosed retailer link. - Disclosure travels with the link. Each payload
carries a
disclosuresentence; clients presenting retailer links to people are expected to convey it alongside. See our affiliate disclosure. - User authorization comes first. Assistants register watches for what their user actually asked to monitor, and confirm preferences — like whether refurbished or pre-owned condition is acceptable — as part of that conversation. Nothing in the monitoring flow spends the user’s money or commits them to anything; a watch is free and reversible.
- Discount claims stay honest.
discount_pctis computed against the merchant’s list price and cross-checked against cross-retailer street pricing before publication. When a deal’s summary carries an independently verified price-history rank (“lowest in 90 days”), clients can relay it verbatim; without one, the integration contract asks clients to soften the framing rather than amplify a merchant’s theatre pricing.
The full behavioral contract lives in the machine-readable quickstart and our terms; how deals are vetted lives in our editorial standards.
Example integration flow
A typical assistant-on-behalf-of-a-user integration, end to end:
- Collect the user’s full watch list — products, target prices, must-have specs, acceptable conditions — before configuring, so the whole list registers in one pass.
-
Register one watch per item with
POST /v1/watches, passing structured fields (max_price_cents,specs,model_number) for every hard requirement the user named. -
Save what the
201returns — especially the privatefeed_url, which is shown exactly once. -
Wire a durable delivery channel: the returned
suggested_routinefor runtimes with native schedulers, a webhook for runtimes with a public HTTPS endpoint, or the SSE watcher SDK on an always-on host. -
Check
lookup_urlafter interpretation completes (about a minute) and relay the coverage verdict to the user in plain language. -
On each new match, alert the user with the deal’s summary, the
retailer link (
product_url, labeled by merchant name), and the disclosure sentence — and only for deals not already seen.
Troubleshooting
- 403 on every request — the client is sending a
default or empty
User-Agent. Set a descriptive one (see Authentication above). - New watch feed is empty — expected for the first
~60 seconds while interpretation runs; the feed binds and the
webhook channel activates automatically when it completes. The
watch’s
coverage.statusstayspending_interpretationuntil then. - Lost private feed URL — the token is the secret and is shown once at creation; it cannot be recovered. Delete the feed and create a new one.
- 422 VALIDATION_ERROR on subscribe — an unknown or wrong-typed filter key. The error includes did-you-mean suggestions; unsupported keys are rejected rather than silently ignored, so a 201 means every filter is live.
- Webhook deliveries stopped — endpoints must
respond 2xx within 10 seconds; sustained failures pause the
subscription (
active: false). Reactivate withPATCH /v1/webhooks/:id. Note the subscription id isdata.idin the create response. - Payment required on listings —
GET /v1/dealsis free up tolimit=10; larger snapshots are the one paid surface in the flow. The push and feed paths avoid it entirely.
Reference and contact
- Machine-readable quickstart (technical reference): https://api.kitsdeals.com/v1/quickstart
- Webhook deep-dive: https://api.kitsdeals.com/v1/webhooks/guide
- SSE river deep-dive: https://api.kitsdeals.com/v1/river/guide
- All guides: https://api.kitsdeals.com/v1/guides
How we vet deals: editorial standards · how Kit’s Deals works · affiliate disclosure · privacy · terms. Questions: hello@kitsdeals.com.