{"name": "China Snapshot Professional research API", "status": "available", "checkout_open": true, "note": "Professional API access requires an authenticated Bearer token or API key with the api_access entitlement. Billing/checkout is not yet open (business formation pending); email contact@china-snapshot.com for early access.", "method": "POST", "auth": "Authorization: Bearer <session JWT>, or Authorization: Bearer cs_live_<api key>", "request_body": {"operation": "<tool name>", "arguments": {}}, "operations": [{"name": "get_digest", "description": "Get the latest complete China Snapshot professional briefing. Returns {edition_key, published_at, status, preview, brief, commercial_mode}. When no edition exists yet it returns edition_key=null with `reason` and `detail` fields rather than failing, and a pre-launch edition is returned with preview=true plus the same two fields — check `preview` before quoting an edition as published.", "inputSchema": {"type": "object", "properties": {}, "additionalProperties": false}}, {"name": "get_signal_packet", "description": "Retrieve the latest available validated Professional Signal Packet v1, or the protected historical beta-evaluation case when packet_id matches exactly. Historical evaluation material is never the no-argument default. The packet is bounded, not exhaustive: observations are source-backed; interpretations are generated analysis; uncertainty must be retained; historical comparisons may be non-exhaustive; adjacent market/social signals do not establish causation. retained_last_known_good=true means historical context, not today's change. availability=historical_evaluation means a preserved exercise, not current evidence. No packet is not evidence that no relevant event occurred elsewhere.", "inputSchema": {"type": "object", "properties": {"packet_id": {"type": "string", "maxLength": 180}}, "additionalProperties": false}}, {"name": "export_signal_packet", "description": "Export the same complete validated Professional packet as Markdown or JSON. Markdown preserves Observation, Interpretation, Uncertainty, Watch next, and Evidence labels. The same bounded-coverage and retained-last-known-good cautions as get_signal_packet apply; no direct Professional asset URL is returned.", "inputSchema": {"type": "object", "required": ["format"], "properties": {"packet_id": {"type": "string", "maxLength": 180}, "format": {"type": "string", "enum": ["markdown", "json"]}}, "additionalProperties": false}}, {"name": "search_stories", "description": "Search the bilingual source archive and return attributed evidence records. Honesty fields on every response: `coverage` ('full' or 'none'), per-item `low_confidence`, `mode` ('semantic' or 'static') and the `limits` thresholds. coverage='none' means the corpus has no material clearing the relevance floor — items is empty by design, not an error; do not treat it as absence of evidence elsewhere. `count` and `returned` are both the number of items in this response; `total_matched` appears only in 'static' keyword mode and is the corpus-wide match count. There is no pagination: results are the top-ranked slice up to `limit` (max 20), so absence from this response is not absence from the archive.", "inputSchema": {"type": "object", "required": ["query"], "properties": {"query": {"type": "string", "maxLength": 180}, "limit": {"type": "integer", "minimum": 1, "maximum": 20}}, "additionalProperties": false}}, {"name": "get_entity_timeline", "description": "Return recent source records mentioning an entity, newest evidence first. Retrieval is semantic, so this is a relevance-ranked chronology, not an exhaustive register: `exhaustive` is always false, an item can rank in without naming the entity, and `window` reports only the date span of the records returned — a gap inside it is not evidence that nothing happened. Carries the same `coverage`, `low_confidence`, `mode` and `limits` honesty fields as search_stories.", "inputSchema": {"type": "object", "required": ["entity"], "properties": {"entity": {"type": "string", "maxLength": 120}, "limit": {"type": "integer", "minimum": 1, "maximum": 20}}, "additionalProperties": false}}], "rate_limits": {"per_ip": "30 requests / 60s", "per_account": "120 requests / 60s"}, "quotas": {"api_monthly": "plan allowance (Professional: 5,000 requests/calendar month)", "max_results_per_call": 20, "pagination": "unsupported", "reset": "00:00 UTC on the 1st of each calendar month", "over_quota_response": "429 with Retry-After, RateLimit-* and X-RateLimit-* headers; no overage is ever charged"}, "usage_headers": ["X-Api-Version", "RateLimit-Limit", "RateLimit-Remaining", "RateLimit-Reset", "X-RateLimit-Limit", "X-RateLimit-Remaining", "X-RateLimit-Reset"], "versioning": {"current": "v2 (X-Api-Version: 2)", "policy": "v1 was an internal preview with no public consumers and was superseded in place by v2 (no notice period). A future v3 will coexist with v2 during a Deprecation notice period rather than replacing it in place; Deprecation (RFC 9745) and Sunset (RFC 8594) headers announce any retirement. See /openapi.json and /developers.md."}, "unauthenticated_response": "401 Unauthorized", "unentitled_response": "403 Forbidden", "pricing_url": "https://china-snapshot.com/pricing.html", "account_url": "https://china-snapshot.com/account.html", "contact": "mailto:contact@china-snapshot.com", "mcp_url": "https://china-snapshot.com/api/mcp"}