DEVELOPERS — FEED · CONTRACT · MCP · STATUS
Build on the tender feed.
A weekly-refreshed feed of sanitized public-procurement opportunities across seven markets, published under a versioned data contract — asaptic.tender.v1. Everything on this page is verifiable: every claim below is a link you can click, with an honest status chip.
60-SECOND QUICKSTART
Three ways in. Runnable as-is.
No key, no signup for the public listing tier. Copy, paste, run.
curl -sL https://asaptic.com/tender/rows.json | head -c 600
# { "generated": "…", "issue_id": "2026-W32", "total": 2395, "withheld": 6, "rows": [ … ] }
curl -sL https://asaptic.com/api/v1/tenders
# Filterable JSON REST access is being wired up now — until it ships, rows.json above is the full feed.
npx -y @asaptic/cli tenders list
# npm publish is release-gated; the same binary also bridges MCP over stdio: `asaptic mcp`.
curl -s -X POST https://asaptic.com/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# tools: list_tenders · get_tender · tender_facets · get_spec_coded · request_tender_access · list_sourcing_lanes · get_lane_capability · get_engagement · submit_rfq
THE DATA CONTRACT — asaptic.tender.v1
The 11-field public row.
Every row in the feed carries exactly these eleven fields — no more, no fewer. The shape is versioned; breaking changes mean a new version name, never a silent mutation.
| Field | Type | Domain | Example |
|---|---|---|---|
| asaptic_id | string | Stable listing id. Synthetic fixtures use the AT-TEST- prefix. | AT-TEST-HK-0000-001 |
| market | string | HK · SG · MO · GB · AU · CA · EU | HK |
| category | object | Trilingual label: name_en, name_zh, name_zht | {"name_en":"IT & software", …} |
| summary_en | string | Sanitized English summary — generic procurement language only | "Supply and support of …" |
| summary_zh | string | Sanitized Simplified Chinese summary | 「采购…」 |
| summary_zht | string | Sanitized Traditional Chinese summary | 「採購…」 |
| value_band | string | null | lt_500k · 500k_2m · 2m_10m · gt_10m · null | 2m_10m |
| closing_bucket | string | le_2w · 2_4w · gt_4w · deadline_passed | 2_4w |
| lead_ok | boolean | Whether supplier interest is accepted for this listing | true |
| new_this_issue | boolean | First appeared in the current weekly issue | false |
| sort_key | string | Opaque 64-hex stable sort key; carries no recoverable information | 01727e…dc4ccf |
curl -sLO https://asaptic.com/developers/contract/asaptic.tender.v1.schema.json \
&& curl -sLO https://asaptic.com/developers/contract/validate.mjs \
&& curl -sL https://asaptic.com/tender/rows.json | node validate.mjs --stdin --sample 20
# PASS stdin (sampled 20 rows)
ACCESS TIERS
Public listing is keyless. Detail is gated.
Public listing LIVE · KEYLESS
The full weekly feed, every market, no key and no signup:
- All 11 fields of asaptic.tender.v1
- Weekly issue cycle with new_this_issue flags
- Schema, fixtures and validator to build against
Spec-coded detail PRIVATE BETA — REQUEST ACCESS
Field-level requirement detail beyond the public 11 fields, per approved counterparty. Unauthenticated calls receive a structured 403 — the exact shape is published as a negative fixture so your error handling is testable before you ever apply.
Request access → [email protected]WHAT'S LIVE RIGHT NOW
Click any claim to verify it.
This board is generated from status.json. Nothing here is a static badge: if a thing isn't live, its chip says so.
A DELIBERATE NON-GOAL
Why we don't publish OCDS fields.
Asaptic is artifact-transparent and process-opaque: the published rows, their schema, and their conformance are fully verifiable, but the sourcing pipeline behind them is not disclosed. OCDS-style fields — issuing bodies, notice identifiers, exact dates and procedure metadata — would let anyone reconstruct where and how each listing was collected, and that pipeline is the product. So the public contract is deliberately the sanitized 11-field shape, versioned and schema-checked, rather than a crosswalk to open-contracting identifiers. If your use case needs deeper structure, talk to us about the gated tier instead.