cibo is a HK IPO data analytics platform built by Panda Securities CEO JW using AI-assisted programming. Core capabilities: (1) oversubscription-multiple and allotment hit-rate prediction during the subscription period (with adjustable subscription multiple and allocation-method coefficient α); (2) Stock Connect inclusion analysis (including not-yet-listed IPOs); (3) allotment results and allottee profiling (region/nationality/gender/age inference); (4) allotment tiers, A/B comparison, and institution rankings; (5) HKEXnews disclosures (buybacks / interest / suspension / earnings calendar / director changes / corporate actions), full-market financials, and listing hearings. All endpoints use GET requests and return JSON.
Base URL: https://cibo.hk
All responses are JSON. Successful responses include "ok": true. Errors include ok: false and an error message.
Free tier: 30 requests per minute per IP, 5,000 per day
cibo exposes its full site data as a set of tools via the Model Context Protocol (MCP), directly callable by AI agents: oversub/allotment prediction, inclusion analysis, allottee profiling, allotment tiers, A/B comparison, institution rankings (sponsors/underwriters/cornerstone/stabilizing managers), frozen-capital calendar, market insights, flash news, HKEXnews disclosures (buybacks/interest/suspension/earnings/director changes/corporate actions), full-market financials and director rosters, listing hearings, prices (first-day close/dual-listing/OHLC), registrar analysis, HK company directory, blog posts, hynix arbitrage, A-share ETF flow, and data-center macro/US-market data.
Endpoint: https://cibo.hk/mcp
Tools: 58
Client config:
{
"mcpServers": {
"cibo": {"url": "https://cibo.hk/mcp"}
}
}
| Prediction & Allotment | predict_allotment subscription_cost get_prediction get_agent_grid get_allotment_tiers get_oversub |
|---|---|
| Stocks | list_stocks search_stocks get_stock_summary get_stock_overview get_stock_ccass get_allottee_profile get_stock_announcements get_stock_buyback get_stock_disclosure get_stock_narrative compare_stocks |
| Inclusion Analysis | get_inclusion_batch get_stock_inclusion |
| Institution Rankings | get_sponsor_ranking get_underwriter_ranking get_cornerstone_ranking get_coinvestment_network get_stabilizing_ranking |
| A/B Comparison | get_ab_comparison get_group_ab |
| Market Data | get_frozen_calendar get_market_insights get_scatter get_cmp_overview |
| Flash News | get_flash_events |
| HKEXnews Disclosures | get_buyback_ranking get_disclosure_interest get_suspension_resumption get_earnings_calendar get_director_changes get_corporate_actions |
| Full-market Financials | get_financial_data get_director_roster get_listing_hearings |
| Prices | get_listing_day_close get_dual_listing_price get_stock_ohlc |
| Registrar | get_registrar_analysis get_registrar_research |
| HK Company Directory | list_hk_companies |
| Blog | get_blog_posts |
| Hynix | get_hynix_snapshot get_hynix_history |
| A-share ETF | get_a_share_etf_flow |
| Data Center | get_macro_tags get_macro_indicators get_macro_indicator_data get_us_corp_actions get_us_listings |
| Name | Type | Required |
|---|---|---|
code | string | Yes |
curl -s 'https://cibo.hk/api/stocks/06872/predict' | python3 -m json.tool
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code |
oversub | number | No | Final oversubscription multiple (>0). When omitted, cibo's predicted multiple is used (model median weighted by margin statistics). |
alpha | number | No | Allocation method coefficient alpha in [0,1]. When omitted, the model's recommended value is used. |
agent | string | No | Prediction agent (default: knn_calibrated) |
curl -s 'https://cibo.hk/api/stocks/06872/predict/custom?oversub=300&alpha=0.5' | python3 -m json.tool
curl -s 'https://cibo.hk/api/predict-agent-grid/06872' | python3 -m json.tool
curl -s 'https://cibo.hk/api/stocks' | python3 -m json.tool | head -30
{
"ok": true,
"stocks": [
{"code": "06872", "name": "丹诺医药", "name_zh": "丹诺医药", "listing_date": 20260522},
{"code": "03388", "name": "創想三維", "name_zh": "创想三维", "listing_date": 20260529},
...
]
}
curl -s 'https://cibo.hk/api/stocks/oversub?year=2026' | python3 -m json.tool | head -40
{
"ok": true,
"stocks": [
{"stock_code": "06872", "name": "丹诺医药", "listing_date": 20260522,
"oversubscription": 178.73, "frozen_bn": 12.34, "offer_price": 5.5,
"hit_rate": 1.2, "n_applicants": 43120},
...
],
"n": 101
}
| Field | Description |
|---|---|
stock_code | 5-digit stock code |
name | Stock name |
listing_date | Listing date (YYYYMMDD) |
oversubscription | Oversubscription multiple |
frozen_bn | Frozen capital (HK$100M) |
offer_price | Offer price (HKD) |
hit_rate | One-lot hit rate (%) |
n_applicants | Number of applicants |
curl -s 'https://cibo.hk/api/stocks/index' | python3 -m json.tool | head -50
{
"ok": true,
"normal": [{"c":"06872","n":"丹诺医药","o":"9015","p":"75.7","d":20260522,"f":178.73,...}],
"recent": [{"c":"03310","n":"云英谷科技","f":91.73,...}],
"prelist": [{"c":"03388","n":"創想三維","d":20260529,...}]
}
| Field | Description |
|---|---|
c | 5-digit stock code |
n | Stock name |
o | Oversubscription multiple |
p | Offer price (HKD) |
d | Listing date (YYYYMMDD) |
f | First-day change (%) |
h | One-lot hit rate (%) |
m | Offering mechanism text |
k | Offering mechanism key |
curl -s 'https://cibo.hk/api/stocks/homepage' | python3 -m json.tool
| Name | Type | Required | Description |
|---|---|---|---|
codes | string | Yes | Comma-separated stock codes (max 10), e.g. 01779,01081 |
locale | string | No | Locale code (default: zh-CN). Affects text fields like industry, mechanism names. |
curl -s 'https://cibo.hk/api/stocks/compare?codes=01779,01081&locale=zh-CN' | python3 -m json.tool
{
"stocks": [
{
"code": "01779", "name": "天辰生物-B",
"listing_date": 20260605, "offer_price": 96.06,
"oversub": 4762.58, "first_day_change": 37.21,
"applicants_hk_public": 266377, "lot_size": 50,
"hit_rate": "<1%", "reallocation_zero": true,
"industry": "生物医药", "mechanism": "机制B",
"listing_chapter": "第18A章", "market_cap_hkd": 11500000000,
"raised_amount": 989310000, "greenshoe": true,
"total_shares_post_ipo": 119740740, "hk_initial_pct": 5.0,
"listing_expenses_hkd": 88900000,
"listing_expenses_ratio_pct": 8.99,
"entry_threshold": 4803, "face_value_cny": 1.0,
"registration_location": "开曼群岛",
"listing_method": "发售以供认购",
"price_upper": 96.06, "price_lower": null
}, ...
],
"count": 2
}
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code, e.g. 06872 |
curl -s 'https://cibo.hk/api/stocks/06872/overview' | python3 -m json.tool | head -50
{
"ok": true,
"data": {
"code": "06872", "name": "丹诺医药",
"summary": {"oversubscription": 9015, "hit_rate": 6.0, "price": 75.7, ...},
"ccass": {"total_holders": 15821, "cn_pct": 63.6, "hk_pct": 35.6, ...},
"allotment": {"tiers": [...], "lot_size": 50},
"cornerstone": [...],
"syndicate": {...},
"close_price": {...}
},
"cmp": {...}
}
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code, e.g. 06872 |
curl -s 'https://cibo.hk/api/stocks/06872/prospectus' | python3 -m json.tool
{
"ok": true,
"code": "06872",
"prospectus": {"offer_price": 75.7, "mechanism": "机制B", "greenshoe": true,
"secondary_listing": false, "global_shares": 100000000,
"market_cap_hkd": 11500000000, "listing_expenses_hkd": 88900000, ...},
"cornerstone": [{"investor_name": "...", "shares_subscribed": 1000000, ...}],
"financial": {"income": {"periods": [...], "items": [...]},
"balance": {...}, "cashflow": {...},
"currency": "CNY", "unit": "thousand"}
}
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code, e.g. 06872 |
curl -s 'https://cibo.hk/api/stocks/06872/allotment-result' | python3 -m json.tool
{
"ok": true,
"code": "06872",
"summary": {"offer_price": 75.7, "oversubscription": 178.73, "frozen_bn": 12.34,
"hk_public_shares": 10000000, "intl_shares": 90000000,
"intl_oversubscription": 3.2, "placee_count": 131, "reallocation": "...",
"greenshoe": true, "hit_rate": 1.2, "n_applicants": 43120, ...},
"concentration": [{"rank_label": "前5名承配人", "intl_pct": 45.2, "total_pct": 40.1, "shares": ...}],
"cornerstone": [{"investor_name": "...", "shares": 1000000, "pct_offer": 8.0,
"lockup_end_date": 20261122, ...}],
"tiers": [{"tier_group": "甲组", "applied_shares": 50, "allotment_pct": 1.2, ...}]
}
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code, e.g. 06872 |
locale | string | No | Locale code: zh-CN / zh-HK / en (default: zh-CN) |
curl -s 'https://cibo.hk/api/stocks/06872/allottee-profile' | python3 -m json.tool
{
"ok": true,
"code": "06872",
"profile": {"s": {"total": 100000000, "person": ..., "comp": ...},
"type": [...], "country": [...], "province": [...], "gender": [...],
"ah": {...}, "py": {...}, "hl": [...], "he": [...], "hd": [...]}
}
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code, e.g. 06872 |
locale | string | No | Locale code: zh-CN / zh-HK / en (default: zh-CN) |
curl -s 'https://cibo.hk/api/stocks/06872/announcements' | python3 -m json.tool
{
"ok": true,
"code": "06872",
"name": "...",
"groups": [{"category": "...", "label": "...",
"announcements": [{"title": "...", "publish_date": 20261122, "file_url": "..."}]}],
"stats": {"total": 42}
}
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code, e.g. 06872 |
locale | string | No | Locale code: zh-CN / zh-HK / en (default: zh-CN) |
curl -s 'https://cibo.hk/api/stocks/06872/buyback' | python3 -m json.tool
{
"ok": true,
"code": "06872",
"name": "...",
"records": [{"date": 20261122, "shares": 500000, "amount": 1234567.0, ...}],
"stats": {"total_days": 12, "total_shares": 6000000, "total_amount": ...}
}
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code, e.g. 06872 |
locale | string | No | Locale code: zh-CN / zh-HK / en (default: zh-CN) |
curl -s 'https://cibo.hk/api/stocks/06872/disclosure' | python3 -m json.tool
{
"ok": true,
"code": "06872",
"name": "...",
"items": [{"holder": "...", "capacity": "...", "event_type": "buy",
"shares_display": "1,000,000", "pct_display": "5.2%", "event_date": 20261122}],
"stats": {"total": 8, "buy": 5, "sell": 3}
}
| Name | Type | Required | Description |
|---|---|---|---|
code | string | Yes | 5-digit stock code |
curl -s 'https://cibo.hk/api/stocks/06872/summary' | python3 -m json.tool
{
"ok": true,
"s": {
"oversubscription": 9015, // Oversubscription multiple
"hit_rate": 6.0, // One-lot hit rate (%)
"price": 75.7, // Offer price (HKD)
"n_applicants": 275978, // Number of applicants
"frozen_bn": 5651.3, // Frozen capital (HK$100M)
"cn_pct": 63.6, // Mainland China holder share (%)
"hk_pct": 35.6, // Hong Kong holder share (%)
"offering_mechanism": "机制B", // Offering mechanism text
"final_public_pct": 9.35 // Final public offering share (%)
},
"tier": {...} // Allotment tier data
}
| Name | Type | Required |
|---|---|---|
code | string | Yes |
curl -s 'https://cibo.hk/api/stocks/06872/ccass' | python3 -m json.tool | head -30
| Name | Type | Required |
|---|---|---|
q | string | Yes |
curl -s 'https://cibo.hk/api/stocks/search?q=06872' | python3 -m json.tool
curl -s 'https://cibo.hk/api/stocks/06872/inclusion-analysis' | python3 -m json.tool
curl -s 'https://cibo.hk/api/stocks/batch-inclusion-analysis' | python3 -m json.tool
curl -s 'https://cibo.hk/api/charts/frozen-calendar' | python3 -m json.tool | head -30
curl -s 'https://cibo.hk/api/charts/scatter-oversub-pnl' | python3 -m json.tool | head -20
curl -s 'https://cibo.hk/api/market-insights' | python3 -m json.tool
curl -s 'https://cibo.hk/api/flash-events?locale=zh-CN&limit=50' | python3 -m json.tool
| Name | Type | Required |
|---|---|---|
code | string | Yes |
curl -s 'https://cibo.hk/api/allotment-tiers/06872' | python3 -m json.tool | head -40
{
"ok": true,
"lot_size": 50,
"tiers_a": [ // Pool A: subscription amount <= HK$5M
{"applied_shares": 50, "applicant_count": 124567, "winner_count": 7474, "allotment_pct": 6.0},
...
],
"tiers_b": [ // Pool B: subscription amount > HK$5M
{"applied_shares": 500000, "applicant_count": 1234, "winner_count": 12, "allotment_pct": 0.97},
...
]
}
| Name | Type | Required |
|---|---|---|
code | string | Yes |
curl -s 'https://cibo.hk/api/listing-day-close-price/06872'
{"ok": true, "code": "06872", "listing_date": 20260522, "listing_day_close_price": 16.2, "source": "hkex"}
| Name | Type | Required |
|---|---|---|
codes | string | Yes |
# GET
curl -s 'https://cibo.hk/api/listing-day-close-prices-batch?codes=06872,03310'
# POST
curl -s -X POST 'https://cibo.hk/api/listing-day-close-prices-batch' \
-H 'Content-Type: application/json' \
-d '{"codes": ["06872", "03310"]}'
curl -s 'https://cibo.hk/api/stock-ohlc/06872' | python3 -m json.tool
curl -s 'https://cibo.hk/api/dual-listing-price/06872' | python3 -m json.tool
curl -s 'https://cibo.hk/api/agents' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cmp/overview' | python3 -m json.tool | head -30
The following endpoints return pre-computed aggregated statistics and chart data from database cache tables rather than real-time computation, offering faster response times. Ideal for external bots to fetch processed high-value data in bulk.
curl -s 'https://cibo.hk/api/cache/status' | python3 -m json.tool
| Name | Type | Required |
|---|---|---|
code | string | Yes |
curl -s 'https://cibo.hk/api/cache/stocks/02511/analysis' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/cmp' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/ab' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/group-ab' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/frozen-calendar' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/scatter' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/rankings/sponsors' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/rankings/underwriters' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/rankings/cornerstone' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/rankings/coinvestment' | python3 -m json.tool
curl -s 'https://cibo.hk/api/cache/rankings/stabilizing' | python3 -m json.tool
curl -s 'https://cibo.hk/api/stocks/full-market?search=&limit=200' | python3 -m json.tool | head -40
curl -s 'https://cibo.hk/api/hynix/snapshot' | python3 -m json.tool
Auto-generated from the single source of truth; every public endpoint is listed.
| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/api/stocks |
public | List all IPO stocks with basic info (code, name, listing date). |
GET |
/api/stocks/oversub |
public | Batch oversubscription + frozen capital for all stocks with allotment data. Query: ?year=2026. (params: year) |
GET |
/api/flash-events |
public | Derived flash-event feed (ipo_launch / allotment_result / listing / inclusion / prediction) as structured JSON for AI crawlers. Query: ?locale=zh-CN&limit=50&stock_code=07688. (params: locale, limit, stock_code) |
GET |
/api/stocks/index |
public | Stock cards grouped by index with filtering, pagination, search. |
GET |
/api/stocks/homepage |
public | Homepage stock cards: upcoming (prelist) and recently listed stocks with status. |
GET |
/api/stocks/{code}/overview |
public | Full per-stock IPO analysis: subscription rates, allotment tiers, PnL scenarios, CCASS demographics. |
GET |
/api/stocks/{code}/prospectus |
public | Full prospectus info page data: prospectus details (offer price, mechanism, greenshoe, secondary listing), cornerstone investors, and IPO financial statements. |
GET |
/api/stocks/{code}/allotment-result |
public | Full allotment results page data: allotment summary (incl. international placing, greenshoe), placing concentration, cornerstone allocation + lock-up, Pool A/B tiers. |
GET |
/api/stocks/{code}/allottee-profile |
public | 中签画像 (allottee profile): winner demographics from the registrar allotment dataset — total lots, person/company split, region/nationality, province, gender, age histogram + pyramid, HK ID letter/era/district. |
GET |
/api/stocks/{code}/announcements |
public | 个股公告中心 (announcement center): all HKEXnews announcements for one stock, grouped by headline category with publish date and file URL. |
GET |
/api/stocks/{code}/buyback |
public | 回购明细 (per-stock buyback): share buyback records for one stock, newest first, with per-day shares/amount and aggregate totals. |
GET |
/api/stocks/{code}/disclosure |
public | 增减持明细 (per-stock disclosure-of-interest): DI records for one stock, newest first, with holder, capacity, event type, shares and pct. |
GET |
/api/stocks/{code}/summary |
public | Lightweight stock summary: key stats and tier classification. |
GET |
/api/stocks/{code}/ccass |
public | CCASS custodian demographics: type, province, gender, age distributions. |
GET |
/api/stocks/{code}/narrative |
public | AI-generated narrative (zh/en) summarizing the IPO's key characteristics. |
GET |
/api/stocks/compare |
public | Side-by-side comparison of up to 10 stocks. Query: ?codes=00001,00002 (params: codes) |
GET |
/api/allotment-tiers/{code} |
public | Detailed allotment tier table: Pool A and Pool B subscription tiers with expected lots. |
GET |
/api/stocks/{code}/predict |
public | Full allotment prediction data (default predicted oversub/alpha) backing the prediction page. |
GET |
/api/stocks/{code}/predict/custom |
public | On-demand single-point allotment prediction for arbitrary parameters. Query: ?oversub=300&alpha=0.5&agent=knn_calibrated. (params: oversub, alpha, agent) |
GET |
/api/predict-agent-grid/{code} |
public | Pre-computed prediction grid (18 oversub x 5 alpha) for interpolation. |
POST |
/api/stocks/{code}/predict/batch |
public | Exact single-point predictions for a batch of (oversub, alpha) pairs in one request. Body: {"points":[{"oversub":300,"alpha":0.5}],"agent":"knn_calibrated"} (<=64 points). (params: points, agent) |
GET |
/api/listing-day-close-price/{code} |
public | First-day closing price for a single stock. |
GET|POST |
/api/listing-day-close-prices-batch |
public | Batch first-day closing prices. GET: ?codes=07688,01511 POST: {"codes":[...]} |
GET |
/api/market-insights |
public | Cross-IPO market insights, trends, and aggregate analysis. |
GET |
/api/cmp/overview |
public | Cross-market comparison overview for peer stock context. |
GET |
/api/charts/frozen-calendar |
public | Frozen capital calendar: date series, daily max, regulatory milestones (for index page stacked bar chart). |
GET |
/api/charts/scatter-oversub-pnl |
public | Oversubscription vs first-day P&L scatter plot data. |
GET |
/api/cache/rankings/sponsors |
public | Sponsor institution rankings by IPO involvement. |
GET |
/api/cache/rankings/underwriters |
public | Underwriter institution rankings by IPO involvement. |
GET |
/api/cache/rankings/cornerstone |
public | Cornerstone investor rankings. |
GET |
/api/cache/rankings/coinvestment |
public | Co-investment rankings. |
GET |
/api/cache/rankings/stabilizing |
public | Stabilizing manager (稳价人) institution rankings by IPO involvement. |
GET |
/api/cache/stocks/{code}/analysis |
public | Pre-computed per-stock analysis (tier data, demographic distributions, HK letter/era breakdowns). |
GET |
/api/cache/ab |
public | A-tail vs B-head comparison matrix. |
GET |
/api/cache/frozen-calendar |
public | Pre-computed frozen capital calendar (dates, series, max_daily). |
GET |
/api/cache/scatter |
public | Pre-computed scatter plot data (oversubscription vs P&L). |
GET |
/api/cache/status |
public | Freshness status for all cache tables (row count, last_built timestamp). |
GET |
/api/blog/posts |
public | List published blog posts with pagination. Query: ?locale=zh-CN&limit=20&offset=0 |
GET |
/api/blog/posts/{slug} |
public | Get a single published blog post by slug. |
GET |
/api/stocks/full-market |
public | Directory of all HK-listed companies (code, zh/en name, board, isin). Query: ?search=&limit=200. (params: search, limit) |
GET |
/api/hynix/snapshot |
public | SK Hynix cross-market arbitrage snapshot (instruments with premium_pct, FX rates, base price). |
GET |
/api/a-share-etf/overview |
public | A-share ETF capital flow overview (merged proxy, ETF inflow, margin). Query: ?limit=60. |
GET |
/api/dual-listing-price/{stock_code} |
public | Dual-listing (A+H / secondary) cross-market price and premium/discount. |
GET |
/api/stocks/batch-inclusion-analysis |
public | Batch Stock Connect inclusion analysis for all candidate stocks (full data as JSON). |
GET |
/api/stocks/{code}/inclusion-analysis |
public | Per-stock Stock Connect inclusion analysis across all review periods. |
GET |
/api/user/me |
optional JWT | Current user info from JWT. Returns {user: null} when unauthenticated. |
GET |
/api/user/watchlist |
pcell JWT | User's watchlist as array of stock codes. |
POST |
/api/user/watchlist/{stock_code} |
pcell JWT | Toggle a stock in/out of the watchlist. Returns {in_watchlist: bool}. |
GET|PUT |
/api/user/preferences |
pcell JWT | Get or update saved user preferences JSON. |
GET |
/api/ |
public | API discovery root: lists all endpoints with methods, auth, and return types. |
GET |
/.well-known/agent-protocol |
public | Machine-readable agent protocol: service description, auth methods, data categories, recommended agent onboarding flow. |
GET |
/health |
public | Health check: uptime, DB stats, agent status, cache warmth, pipeline health (no pid or internal error messages). |
GET |
/api/agents |
public | Agent heartbeat status, last run, age and duration (public leaderboard; internal error messages omitted). |

