Get the HK IPO list
GET/api/v1.0/quote/ipo-list/hkGet the HK IPO list. Data is fetched from the current user's primary broker (broker selection is not exposed); when no broker is available for the HK market for this user, an empty list may be returned. Use request_type to switch between subscribing / waiting-to-list / upcoming (default, includes both). Includes only recent IPOs; does not include historical IPOs. For US IPOs use quote.ipo_list_us; A-shares quote.ipo_list_cn; Singapore quote.ipo_list_sg; Malaysia quote.ipo_list_my; Japan quote.ipo_list_jp.
Parameters
| Name | Type | In | Required | Description |
|---|---|---|---|---|
request_type | int | query | no | Request type: 9=COMMON_APPLYING (currently subscribing) / 10=COMMON_WAITING_IPO (waiting to list) / 11=COMMON_TO_BE_List (default, subscribing + waiting) |
Example
bash
curl 'https://webapi.moomoo.com/api/v1.0/quote/ipo-list/hk' | jqResponse
| Name | Type | Description |
|---|---|---|
data.code | string | Stock symbol (with market prefix), e.g. HK.12233 |
data.name | string | English name |
data.sc_name | string | Simplified Chinese name |
data.tc_name | string | Traditional Chinese name |
data.list_time | string | Listing date string, format yyyy-MM-dd; "--" when missing |
data.list_timestamp | int | Listing time, millisecond timestamp; 0 when missing |
data.ipo_price_min | number | Lower bound of the IPO offer price range (HKD); 0 when missing |
data.ipo_price_max | number | Upper bound of the IPO offer price range (HKD); 0 when missing |
data.list_price | number | Offer price (final pricing, HKD); 0 when missing |
data.lot_size | string | Shares per lot |
data.entrance_price | number | Entrance fee (HKD) |
data.apply_start_timestamp | int | Subscription start time, millisecond timestamp; 0 when missing |
data.apply_end_time | string | Subscription deadline date string, format yyyy-MM-dd |
data.apply_end_timestamp | int | Subscription deadline time, millisecond timestamp; 0 when missing |
data.apply_countdown_secs | int | Subscription deadline countdown (seconds); 0 when missing |
data.is_apply_started | int | Whether subscription has started (start_apply_flag==1) |
data.is_support_apply | int | Whether subscription is supported (eipo_flag != 0) |
data.is_subscribe_status | int | Whether subscription is currently open (started and the deadline has not passed) |
data.apply_multiple | string | Subscription multiple (string), e.g. 12.5 |
data.lucky_ratio | string | One-lot winning ratio (string), e.g. 30% |
data.win_ratio_msg | string | Winning probability description, e.g. "Apply xx.xx lots to guarantee one" |
data.lucky_time | string | Winning announcement date string, format yyyy-MM-dd; "--" when missing |
data.lucky_timestamp | int | Winning announcement time, millisecond timestamp; 0 when missing |
data.margin_fee_ratio | number | Margin subscription fee ratio (percentage) |
data.margin_fee_ratio_min | number | Minimum margin subscription fee ratio (percentage); 0 when missing |
data.margin_fee_ratio_max | number | Maximum margin subscription fee ratio (percentage); 0 when missing |
data.margin_lever_ratio | number | Margin leverage ratio |
data.real_margin_lever_ratio | number | Real available margin leverage ratio; 0 when missing |
data.margin_rate | number | Margin rate (4-digit precision) |
data.dark_trade_date | string | Dark trade date string; empty when missing |
data.dark_trade_timestamp | int | Dark trade date timestamp (ms); 0 when missing |
data.dark_trade_period | string | Dark trade period text, e.g. 16:15~18:30; empty when missing |
data.dark_trade_start_timestamp | int | Dark trade start time, ms timestamp; 0 when missing |
data.dark_trade_end_timestamp | int | Dark trade end time, ms timestamp; 0 when missing |
data.is_support_dark_trade | int | Whether dark trade is supported |
data.is_support_intl_placing | int | Whether the stock supports international placing |
data.show_intl_placing_info | int | Whether to display international placing info to the current user (based on assets) |
data.intl_placing_apply_start_timestamp | int | International placing subscription start time, ms timestamp; 0 when missing |
data.intl_placing_apply_end_timestamp | int | International placing subscription deadline, ms timestamp; 0 when missing |
data.intl_placing_apply_limit | number | International placing minimum subscription amount (HKD) |
data.intl_placing_apply_limit_str | string | International placing minimum subscription amount as a formatted string |
data.placing_countdown_secs | int | International placing deadline countdown (seconds); 0 when missing |
data.offer_type | int | Offer type: UNSUPPORTED / PUBLIC_OFFER_ONLY / INTERNATIONAL_PLACING_ONLY / PUBLIC_AND_INTER_PLACING |
data.security_type | int | Security type: NORMAL / SPAC / HK_IBOND / HK_CLIMATE_BOND / HK_SILVER_BOND / HK_ETF / SG_ETF |
data.etf_distributors | string | ETF distributor (only set for ETF IPOs) |
data.etf_ipo_price_display | string | ETF offer price display text (only set for ETF IPOs) |
data.apply_status | int | Public offering apply status: NOT_APPLIED / APPLY_PENDING / APPLY_PROCESSING / APPLY_WON / APPLY_LOST |
data.placing_apply_status | int | International placing apply status (same values as apply_status) |
data.etf_apply_status | int | ETF apply status (same values as apply_status, only set for ETF IPOs) |
Errors
| ret_code | error.code | When |
|---|---|---|
| 0 | — | Success |
| -3 | invalid_parameter | A parameter is missing or not in the allowed set |
| -7 | invalid_symbol | Symbol is not in the security master |
| -8 | unsupported | Market or instrument is outside this API |
| -9 | permission_denied | Authenticated, but without quote permission |
| -10 | no_data | Nothing is returned |
| -11 | rate_limited | Per-user rate limit |
Response example
json
{
"ret_code": 0,
"ret_msg": "success",
"data": {
"code": "US.AAPL",
"name": "example",
"sc_name": "example",
"tc_name": "example",
"list_time": "example",
"list_timestamp": 1710000000000000,
"ipo_price_min": 1.2,
"ipo_price_max": 1.2,
"list_price": 1.2,
"lot_size": "example",
"entrance_price": 1.2,
"apply_start_timestamp": 1710000000000000,
"apply_end_time": "example",
"apply_end_timestamp": 1710000000000000,
"apply_countdown_secs": 0,
"is_apply_started": 0,
"is_support_apply": 0,
"is_subscribe_status": 0,
"apply_multiple": "example",
"lucky_ratio": "example",
"win_ratio_msg": "example",
"lucky_time": "example",
"lucky_timestamp": 1710000000000000,
"margin_fee_ratio": 1.2,
"margin_fee_ratio_min": 1.2,
"margin_fee_ratio_max": 1.2,
"margin_lever_ratio": 1.2,
"real_margin_lever_ratio": 1.2,
"margin_rate": 1.2,
"dark_trade_date": "2026-10-16",
"dark_trade_timestamp": 1710000000000000,
"dark_trade_period": "example",
"dark_trade_start_timestamp": 1710000000000000,
"dark_trade_end_timestamp": 1710000000000000,
"is_support_dark_trade": 0,
"is_support_intl_placing": 0,
"show_intl_placing_info": 0,
"intl_placing_apply_start_timestamp": 1710000000000000,
"intl_placing_apply_end_timestamp": 1710000000000000,
"intl_placing_apply_limit": 1.2,
"intl_placing_apply_limit_str": "example",
"placing_countdown_secs": 0,
"offer_type": 0,
"security_type": 0,
"etf_distributors": "example",
"etf_ipo_price_display": "example",
"apply_status": 0,
"placing_apply_status": 0,
"etf_apply_status": 0
}
}