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.

1 · curl the weekly feed LIVE
curl -sL https://asaptic.com/tender/rows.json | head -c 600

# { "generated": "…", "issue_id": "2026-W32", "total": 2395, "withheld": 6, "rows": [ … ] }
1b · REST with filters IN BUILD
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.
2 · command line IN BUILD
npx -y @asaptic/cli tenders list
# npm publish is release-gated; the same binary also bridges MCP over stdio: `asaptic mcp`.
3 · MCP endpoint (for agents) LIVE
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.

FieldTypeDomainExample
asaptic_idstringStable listing id. Synthetic fixtures use the AT-TEST- prefix.AT-TEST-HK-0000-001
marketstringHK · SG · MO · GB · AU · CA · EUHK
categoryobjectTrilingual label: name_en, name_zh, name_zht{"name_en":"IT & software", …}
summary_enstringSanitized English summary — generic procurement language only"Supply and support of …"
summary_zhstringSanitized Simplified Chinese summary「采购…」
summary_zhtstringSanitized Traditional Chinese summary「採購…」
value_bandstring | nulllt_500k · 500k_2m · 2m_10m · gt_10m · null2m_10m
closing_bucketstringle_2w · 2_4w · gt_4w · deadline_passed2_4w
lead_okbooleanWhether supplier interest is accepted for this listingtrue
new_this_issuebooleanFirst appeared in the current weekly issuefalse
sort_keystringOpaque 64-hex stable sort key; carries no recoverable information01727e…dc4ccf
Verify the live feed against the contract yourself LIVE
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
Fetch the feed →

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.