Skip to content

Free shipping ·  Nationwide

klatchit.

Klatchit Public API

Read the marketplace catalog without an account, a key, or a signup — over plain JSON or over MCP. Everything exposed is exactly what an anonymous visitor sees on the site: publicly listed products, public prices, and purchasable offers.

Quickstart

No authentication. Send a descriptive User-Agent so we can tell your agent apart from a scraper.

curl "https://klatchit.com/api/public/v1/search?q=headphones&condition=new" \
  -H "User-Agent: my-agent/1.0 (contact@example.com)"

Endpoints (v1)

Generated from the OpenAPI document, so this table is the API — not a copy of it.

MethodPathAuthDescription
GET/api/public/v1/searchNoneSearch the public catalog
GET/api/public/v1/products/{slug}NoneRetrieve a product and its purchasable offers
GET/api/public/v1/categoriesNoneRetrieve the active category tree
POST/api/public/v1/cart-linksNoneCreate a cart link for a human to open

Conventions

  • Success is { data, meta }; errors are { error: { type, code, message, param?, request_id } }.
  • All money is integer cents, USD (a field named *_cents is never a decimal).
  • Search pages with page / page_size; the effective page size is echoed in meta.page_size (oversized values are clamped, not rejected).
  • A product is addressed by its slug — the same slug as its canonical page /p/{slug}. An offer is addressed by its listing_id, which identifies one seller's offer, not the product.
  • Inventory depth is never exposed; an offer reports a boolean in_stock.
  • Reads are shared-cacheable (Cache-Control: public, s-maxage=60, 300s for the category tree). Please reuse rather than re-fetch.

Rate limits

Limits are per client IP (first X-Forwarded-For hop; no key, so there is nothing else to key on). Each is a token bucket — a burst up to the capacity, then a steady refill:

BucketBurstRefill
Each catalog endpoint30 requests5 / second
POST /cart-links10 requests1 / second
MCP (/api/mcp/mcp)30 requests5 / second

Buckets are counted per endpoint, so search and product lookups do not compete. Over the limit you get 429 with a Retry-After header in seconds — honour it and back off. These numbers are current operating values, not a contractual guarantee.

MCP server

The same catalog is available over the Model Context Protocol, so a model can call it directly instead of you writing HTTP glue.

  • Endpoint: https://klatchit.com/api/mcp/mcp (streamable HTTP, POST only).
  • Stateless — a fresh server instance per request, no session id to carry, no GET stream to hold open. A GET is answered 405 on purpose.
  • No authentication, no OAuth, no cookie is read.
  • Tools: search_products, get_product, get_categories (all read-only) plus create_cart_link.

Connect from Claude

Settings → Connectors → Add custom connector, and paste the URL below. There is no auth step to complete.

https://klatchit.com/api/mcp/mcp

Connect from the MCP inspector or a client config

npx @modelcontextprotocol/inspector
# transport: Streamable HTTP
# URL:       https://klatchit.com/api/mcp/mcp
{
  "mcpServers": {
    "klatchit": {
      "type": "http",
      "url": "https://klatchit.com/api/mcp/mcp"
    }
  }
}

What is not exposed

Seller-internal data has no public endpoint: inventory counts, seller contact details, orders, payouts, messages, and anything behind a login. Every response is projected through the same serializers the anonymous storefront uses, so an agent can see exactly what a logged-out browser can see and nothing more. To manage your own store programmatically, use the authenticated Seller API instead.