Technical preview · every chip below is curl-checkable

Live, sanitized cross-border government-tender data your AI agents can query.

One agent-facing layer over public procurement across seven markets — reachable by REST, MCP and CLI. Artifact-transparent by design: we publish the schema, the endpoints and the proofs. What we never expose is how the data is sourced or cleaned.

This hub describes artifacts — a stable schema, live endpoints, falsifiable counts. It does not describe sourcing, sanitization internals or refresh cadence. Every “LIVE” badge on this page was set by an actual HTTP probe recorded in status.probe.json, not by a marketing decision.

01 · Status board

What's live right now.

Each badge below reflects a real HTTP probe. ● LIVE means a curl returned the expected JSON today. SHIPS WITH ROLLOUT means the path answers with the site shell, not JSON, yet. PENDING PUBLISH means it isn't published yet. Nothing is marked LIVE on faith.

Tender listings feed● LIVE

The full sanitized listing set as JSON — 2,395 rows across 7 markets, shaped as asaptic.tender.v1.

MCP server● LIVE · 9 TOOLS

Model Context Protocol endpoint. tools/list returns 9 sourcing and tender tools for Claude, Cursor, codex and Gemini.

OpenAPI 3.1 spec● LIVE

Machine-readable description of the agent-facing sourcing interface. Import straight into your tool-caller.

llms.txt● LIVE

The AI-native site map — a plain-text index pointing crawlers and agents at the machine surfaces.

MCP discovery doc● LIVE

Well-known descriptor so agents can auto-discover the MCP endpoint and its capabilities.

REST tender API● LIVE

Query, filter and page tender listings by market. Returns application/json — a data array plus meta with total count and a pagination cursor.

security.txtSHIPS WITH ROLLOUT

Coordinated-disclosure contact. The signed descriptor lands with the API rollout; today the path returns the site shell.

CLI · @asaptic/cliPENDING PUBLISH

A thin command-line client over the REST surface. Not yet on npm — npm view returns 404 today.

npx @asaptic/cli — pending publish

Every badge above is checkable. Click any GET link, or POST tools/list to /mcp. The exact probe commands and their recorded verdicts live in status.probe.json next to this page.

02 · Quickstart

Three ways in. Sixty seconds.

Pick your surface. The feed, MCP and REST API work today; the CLI is marked honestly for its npm publish.

① MCP — wire it into Claude / Cursor / codex / Gemini+

Live today — POST /mcp returns 9 tools

{
  "mcpServers": {
    "asaptic": {
      "url": "https://asaptic.com/mcp",
      "transport": "http"
    }
  }
}

Drop into your agent's MCP config. Then ask it to list_sourcing_lanes or get_engagement.

② Feed — pull the whole sanitized listing set+

Live today — 200 application/json

# the full asaptic.tender.v1 listing set, one request
curl https://asaptic.com/tender/rows.json

# filter to Hong Kong rows with jq
curl -s https://asaptic.com/tender/rows.json \
  | jq '[.rows[] | select(.market=="HK")]'

Sample row id shape: AT-TEST-0001. Fields are the 11-field contract below — no source identifiers.

③ REST — query by market (live)+

Live today — 200 application/json

# GET tenders filtered by market
curl "https://asaptic.com/api/v1/tenders?market=HK&limit=20"

# CLI over the same surface (pending npm publish)
npx -y @asaptic/cli tenders list --market HK

The REST path is live and returns JSON today; @asaptic/cli goes LIVE when it lands on npm. Track their state on the board above.

03 · Proof Lab

Don't trust the claims. Attack them.

Interactive · in your browser

Attack our leak-gate and matcher.

The Proof Lab lets you probe the sanitization gate and the matcher directly — feed it inputs, watch what the contract does and does not expose, and try to make it leak a source identifier. If you can, we want to know.

asaptic.com/demo/proof-lab/ SHIPS WITH PROOF-LAB MERGE

The Proof Lab is built on a separate branch. This link goes live when that branch merges — see MERGE_NOTES_devhub.md.

04 · Falsifiable numbers

Specific enough to check.

Every number here comes straight out of the live feed you can pull above. No estimates, no projections.

2,395
rows in the live feed
7
markets · HK MO SG GB EU AU CA
11
fields · asaptic.tender.v1
9
MCP tools · tools/list

Check them yourself: curl -s https://asaptic.com/tender/rows.json | jq '.rows | length' → 2,395 · jq '[.rows[].market]|unique' → 7 markets · jq '.rows[0]|keys|length' → 11 fields.

05 · The contract

asaptic.tender.v1

One stable shape for every market. Eleven fields, all sanitized — the identity of the buyer, the reference, the deadline and the source stay on our side of the gate. What crosses is a queryable, comparable listing.

asaptic_idstable synthetic id — e.g. AT-TEST-0001
marketHK · MO · SG · GB · EU · AU · CA
categoryprocurement category
value_bandbanded contract size, not exact figure
closing_bucketcoarse closing window, never a raw date
lead_okwhether the internal lead window is met
new_this_issuefirst appearance flag
sort_keydeterministic ordering key
summary_zh · summary_zht · summary_ensanitized trilingual summary

The named internals — brand chips, not open source:

Cleanroom · 净室 — the sanitization gate Pathfinder · 探路引擎 — the matcher asaptic.tender.v1 — the public schema

Ships with the developers-surface merge: the published JSON-Schema for asaptic.tender.v1 and its fixtures. Until then, the live shape is observable directly in /tender/rows.json. See MERGE_NOTES_devhub.md.

06 · AI-native distribution

Built to be found by machines.

The discovery surfaces an agent looks for — present today or shipping with the rollout, marked by real probe.

Probe them: for p in /llms.txt /openapi.json /.well-known/mcp.json; do curl -s -o /dev/null -w "%{http_code} %{content_type}\n" https://asaptic.com$p; done