Skip to main content
Droplinked publishes every merchant’s public catalog as a Stripe Agentic Commerce Protocol (ACP) product feed. This is the surface that agentic shopping experiences ingest — so a merchant’s existing inventory is discoverable and purchasable by agents without the merchant building anything new.

Which artifact do I point at?

The ACP file spec accepts tab- or comma-delimited .tsv, .txt, or .csv, optionally gzipped. It rejects JSON, XML, RSS, and Atom. Submit a delimited artifact to an ACP ingester — a .json URL will not parse. Background: Feed formats.
All three delimited artifacts carry the same rows, rebuilt together. As of 2026-09-01 the feed holds 35,655 rows, of which 947 are checkout-eligible.
The delimited artifacts and the JSON endpoint are not the same catalogue. Measured 2026-09-01, the delimited artifact carried 35,655 rows across both supply sources (native and impact_brand), while walking the JSON endpoint’s cursor to exhaustion returned 24,173 items, all native. If completeness matters — and for ACP ingestion it does — use the delimited artifact.

The delimited feed

latest.tsv.gz is a gzipped, tab-separated file with a header row and 23 columns. Column positions are 1-indexed — useful when you are slicing it with awk or cut:

Coverage, as measured 2026-09-01

Several columns are present in the header but thin or synthetic in the data. Check before you rank, join, or dedupe on them: latest.jsonl carries the same fields as one JSON object per line, omitting keys that are empty for that row — convenient for streaming consumers that do not want to hold the file in memory.

Read it

latest.tsv.gz is served with a Content-Encoding: gzip header. curl without --compressed receives the raw gzip bytes, so piping through gunzip -c is correct. HTTP libraries that negotiate encoding by default (Python requests, most browsers) have already decompressed the body — decompressing again fails. When in doubt, use the uncompressed latest.tsv.

Search eligibility vs checkout eligibility

Two separate gates, and they are not the same number. Every row in the feed is search-eligible; a row becomes checkout-eligible only once the requirements in columns 14 and 15 are met. When column 13 is false, column 17 tells you exactly why:
The dominant blocker is missing seller policy URLs — a merchant-side fix that needs no code. See Get listed in MCP discovery.

The JSON API

https://apiv3.droplinked.com/feed/acp.json serves the catalogue as JSON. It is the right tool for a direct query — a jq lookup, a fetch inside an agent tool — and the wrong tool to hand an ACP ingester. It is cursor-paginated: one request returns one page plus a next_cursor, not the whole catalogue. Filtering a single response and finding nothing does not mean the item is absent. Follow next_cursor until it is absent, or use the delimited artifact, which is complete in one file and covers supply sources this endpoint does not. limit caps the page size, which is what you want for a quick look — the unbounded response is tens of megabytes. Use it for inspection only: with a small limit the endpoint can return an empty page while still handing back a next_cursor, so a cursor walk should stop on an empty page as well as on a missing cursor.
price is an object ({ "value": 30, "currency": "USD" }) in the JSON API and a single string ("30.00 USD") in the delimited artifacts. Normalise accordingly.

Quick agent integration

How it’s used

  • Agents & shopping surfaces ingest the delimited artifact to make Droplinked inventory searchable and buyable in-context.
  • The MCP servers let an agent query the same catalog directly — search_products / find_inventory on mcp.droplinked.com — rather than ingesting a feed at all.
  • Purchases route through the Stripe ACP / x402 layer with the 70/20/10 revenue split.

MCP Server

Direct programmatic API access for agents (search, fetch, checkout).

OpenAPI Spec

Full machine-readable API surface (cart, checkout, orders) for fresher-than-feed data.

Connect your store

Make your existing inventory agent-shoppable.

x402 premium feed

The paid, ranked slice of the same catalogue.

Cache + refresh

  • The feed regenerates on product create/edit/delete plus a short refresh cycle for inventory and price. generated_at on the JSON response and the S3 Last-Modified header on the delimited artifacts both tell you the snapshot time.
  • For agents requiring up-to-the-second data, hit the cart/checkout endpoints in the OpenAPI Spec directly.