# BNM Data Shop

Official public data as JSON at https://ticks.bnm.farm. Thirty-seven paid GETs. USDC on Base (eip155:8453). payTo 0xf59621FC406D266e18f314Ae18eF0a33b8401004. Extracted-body doors: free index/search on /{door}/manifest.json or /{door}/index (?q=, optional before/date), then pay one official text GET ?id= ($0.02) or the page ($0.05). newest 10 official texts on a plain GET ($0.05), or the whole current set if fewer; older pages on the same URL (?before, another $0.05). Table doors (/ticks, /import-alerts) stay the whole current table.

## Paid

- GET /ticks — $0.05 — US hay, cattle, and grain ticks (USDA AMS nationwide plus official dairy, hogs, and terminal produce). Idaho / PNW barns are example geography inside the table, not the SKU. Paid JSON keeps ticks[] and adds records[] + asOf.
- GET /import-alerts — $0.05 — FDA Import Alerts / DWPE firm-product snapshot. Paid JSON keeps ticks[] and adds records[] + asOf.
- GET /mariners — $0.05 — USCG D13 / Northwest Local Notice to Mariners
- GET /mariners-d11 — $0.05 — USCG D11 / Southwest Local Notice to Mariners
- GET /mariners-d7 — $0.05 — USCG D7 / Southeast Local Notice to Mariners
- GET /mariners-d8 — $0.05 — USCG D8 / Gulf Local Notice to Mariners
- GET /warning-letters — $0.05 — FDA warning-letter bodies (firm, date, subject, full letter text). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /untitled-letters — $0.05 — FDA Untitled Letter text (CDER OPDP + CBER promo PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /awa — $0.05 — USDA APHIS AWA inspection-report observation text (official per-report PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /swisspar — $0.05 — Swissmedic first-authorisation SwissPAR evaluation text (official per-product PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /pcac — $0.05 — FDA PCAC 503A briefing-memo evaluation text (official per-substance PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ftc-wl — $0.05 — FTC BCP warning-letter text (official per-letter PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /cfpb-orders — $0.05 — CFPB consent-order / administrative-order text (official per-order PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /occ-cd — $0.05 — OCC institution C&D / consent-order text (official per-order PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /fdic-orders — $0.05 — FDIC institution consent-order / C&D text (official per-order PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /frb-orders — $0.05 — FRB institution C&D / written-agreement / PCA text (official per-order PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ncua-orders — $0.05 — NCUA institution consent C&D text (official per-order HTML). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /fincen-orders — $0.05 — FinCEN institution consent-order text (official per-order PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ferc-orders — $0.05 — FERC institution stipulation-and-consent text (official cms.ferc.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ofac-orders — $0.05 — OFAC institution enforcement-release text (official ofac.treasury.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /bis-orders — $0.05 — BIS institution charging-letter / order text (official bis.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /cftc-orders — $0.05 — CFTC institution enforcement-order / settlement text (official cftc.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /fifra-orders — $0.05 — EPA FIFRA institution order / consent text (official yosemite.epa.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /denovo-orders — $0.05 — FDA De Novo classification-order text (official accessdata.fda.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ttb-oic — $0.05 — TTB Offer in Compromise text (official ttb.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /air-letters — $0.05 — USDA APHIS AIR confirmation-letter text (official direct.aphis.usda.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /superfund-rods — $0.05 — EPA Superfund Record of Decision text (official semspub.epa.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ico-mpn — $0.05 — ICO Monetary Penalty Notice text (official ico.org.uk PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /cma-ca98 — $0.05 — UK CMA CA98 infringement-decision text (official assets.publishing.service.gov.uk PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ema-referrals — $0.05 — EMA human-medicine referral procedure text (official ema.europa.eu English PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /cder-reviews — $0.05 — FDA CDER Integrated Review text (official accessdata.fda.gov Drugs@FDA PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /npdes-permits — $0.05 — EPA-issued individual NPDES permit text (official epa.gov PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ofsted-inspections — $0.05 — Ofsted school / provider inspection-report text (official files.ofsted.gov.uk PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /ofwat-enforcement — $0.05 — Ofwat Water Industry Act 1991 enforcement-notice text (official ofwat.gov.uk PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /form-483 — $0.05 — FDA Form 483 inspectional observation bodies (posted OII FOIA PDFs). Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /gmp — $0.05 — Health Canada Drug GMP report-card observation text + C.02 cites. Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.
- GET /gmp-md — $0.05 — Health Canada medical-device report-card observation text + MDR cites. Newest 10 official texts. Same URL ?before=<id or date> is the next older 10 for another $0.05.

Unpaid GET returns HTTP 402 with PAYMENT-REQUIRED and extensions.bazaar. Unpaid POST on the same paid path (empty JSON `{}` accepted) returns that same 402 challenge and does not return data. After a valid X-PAYMENT, the same URL returns JSON: newest chunk on extracted-body doors, older chunk if they ask, whole current table on /ticks and /import-alerts. No API key. GET has no request body.
402 accepts[].extra names searchUrl, oneDocPath, priceAtomic, pagePriceAtomic, pageDefault, tableWhole, firmCheckUrl, sampleUrl. extra.name stays USD Coin.

## Free discovery

- GET /sample — free canned paid-JSON keys (table SKU + ?id= body SKU). HTTP 200. Not live cache. Not a SKU.
- GET /firm-check?q= — free firm-name search across Form 483, FDA warning letters, and the FDA import-alert catalog. HTTP 200. Names the door and the id or page to buy ($0.02 one text / $0.05 page or table). Not a SKU.
- GET /openapi.json — OpenAPI 3.1 with x-payment-info for the thirty-seven paid doors
- GET /.well-known/x402 — absolute URLs of the thirty-seven paid routes only
- GET / — shop JSON (payTo + the thirty-seven products)
- GET/POST /mcp — Streamable HTTP MCP for the same thirty-seven paid GETs plus free search and firm-check. Not a new SKU.
- GET /manifest.json — US hay, cattle, and grain count + schema + official composites (median rollups of ticks already on the door; no listings scrape)
- GET /import-alerts/manifest.json — FDA count + schema (not the firm dump)
- GET /mariners/manifest.json — D13 LNM count + official PDF (not the notice body)
- GET /mariners-d11/manifest.json — D11 LNM count + official PDF (not the notice body)
- GET /mariners-d7/manifest.json — D7 LNM count + official PDF (not the notice body)
- GET /mariners-d8/manifest.json — D8 LNM count + official PDF (not the notice body)
- GET /warning-letters/manifest.json — FDA letter count + firm/date/subject (full catalog + page cursor; ?q= is free search; not the letter body)
- GET /untitled-letters/manifest.json — FDA untitled count + id/firm/date/product (full catalog + page cursor; ?q= is free search; not the letter text)
- GET /awa/manifest.json — APHIS AWA count + id/firm/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the observation text)
- GET /swisspar/manifest.json — SwissPAR count + name/date/MA/sourceUrl (full catalog + page cursor; ?q= is free search; not the evaluation text)
- GET /pcac/manifest.json — FDA PCAC count + substance/date/meeting/mediaId/sourceUrl (full catalog + page cursor; ?q= is free search; not the evaluation text)
- GET /ftc-wl/manifest.json — FTC BCP count + firm/date/subject/sourceUrl (full catalog + page cursor; ?q= is free search; not the letter body)
- GET /cfpb-orders/manifest.json — CFPB order count + firm/date/title/fileNo/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /occ-cd/manifest.json — OCC C&D count + bank/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /fdic-orders/manifest.json — FDIC order count + bank/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /frb-orders/manifest.json — FRB order count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /ncua-orders/manifest.json — NCUA order count + credit union/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /fincen-orders/manifest.json — FinCEN order count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /ferc-orders/manifest.json — FERC order count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /ofac-orders/manifest.json — OFAC order count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /bis-orders/manifest.json — BIS order count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /cftc-orders/manifest.json — CFTC order count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /fifra-orders/manifest.json — EPA FIFRA order count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /denovo-orders/manifest.json — FDA De Novo order count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /ttb-oic/manifest.json — TTB OIC count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the order body)
- GET /air-letters/manifest.json — APHIS AIR letter count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the letter body)
- GET /superfund-rods/manifest.json — EPA Superfund ROD count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the ROD body)
- GET /ico-mpn/manifest.json — ICO MPN count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the MPN body)
- GET /cma-ca98/manifest.json — CMA CA98 count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the decision body)
- GET /ema-referrals/manifest.json — EMA referral count + name/date/status/sourceUrl (full catalog + page cursor; ?q= is free search; not the procedure body)
- GET /cder-reviews/manifest.json — CDER Integrated Review count + name/date/application/sourceUrl (full catalog + page cursor; ?q= is free search; not the review body)
- GET /npdes-permits/manifest.json — EPA individual NPDES permit count + name/date/permit/sourceUrl (full catalog + page cursor; ?q= is free search; not the permit body)
- GET /ofsted-inspections/manifest.json — Ofsted inspection count + provider/URN/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the report body)
- GET /ofwat-enforcement/manifest.json — Ofwat enforcement count + institution/docket/date/sourceUrl (full catalog + page cursor; ?q= is free search; not the notice body)
- GET /form-483/manifest.json — FDA 483 count + id/date/firm (full catalog + page cursor; ?q= is free search; not the observation body)
- GET /gmp/manifest.json — Health Canada GMP count + id/firm/date/rating (full catalog + page cursor; ?q= is free search; not the observation text)
- GET /gmp-md/manifest.json — Health Canada MD count + id/firm/date/rating (full catalog + page cursor; ?q= is free search; not the report-card body text)

/ofwat-enforcement is a live public SKU on purpose. No thirty-eighth public SKU. Free manifests are not the paid body.

## Prompt for AI

- Search a free index: GET https://ticks.bnm.farm/{door}/manifest.json?q=…
- Then one official text: GET https://ticks.bnm.farm/{door}?id=… ($0.02)
- Or a page of 10: GET https://ticks.bnm.farm/{door} ($0.05; whole current set if n<10)
- Tables: GET https://ticks.bnm.farm/ticks and GET https://ticks.bnm.farm/import-alerts ($0.05 = entire current table)
- Paid JSON keys (canned example, not live): GET https://ticks.bnm.farm/sample

## MCP

- URL — https://ticks.bnm.farm/mcp
- Connect — `npx -y mcp-remote https://ticks.bnm.farm/mcp`
- One tool per live paid GET from /.well-known/x402 (generated at request time; later SKUs appear without an MCP rewrite). Same thirty-seven URLs today. Free search + free firm-check + paid get-page. Extracted-body doors: free index/search on /{door}/manifest.json or /{door}/index (?q=, optional before/date), then pay one official text GET ?id= ($0.02) or the page ($0.05). newest 10 official texts on a plain GET ($0.05), or the whole current set if fewer; older pages on the same URL (?before, another $0.05). Table doors (/ticks, /import-alerts) stay the whole current table. Unpaid tool calls still HTTP 402. Not Bazaar-indexed.

## Agent catalogs

- x402scan — https://www.x402scan.com/server/c6f584c5-e494-41d1-aa02-2efb07ac3546
- Chainlink for Agents / CDP Bazaar — not listed until a CDP facilitator settle catalogs the route. Validate already accepts the listed paid URLs.
