美国 IPO(首次公开募股)
机器翻译译自英文(docs.alpaca.markets)本页 151 段已全部译完
美国 IPO 概述
Alpaca 提供广泛的美国 IPO 发行渠道,使合作伙伴能够在 IPO 上市时、股票在二级市场上市之前购买股票。
IPO API 提供:
- IPO 发行的只读发现
- 通过现有 Broker API 进行订单下达和管理
- 通过服务器发送事件(SSE)获取实时发行更新
订单管理
美国 IPO 仅接受名义金额(美元金额)的 GTC 订单。最终用户可以在每个 IPO 发行在 API 中可用后提交一个有条件买入订单(COB)。该订单可以在 60 分钟窗口结束前修改/取消。
IPO 不支持碎股。
IPO 时间线示例
以下是 IPO 时间线示例。请注意,并非所有 IPO 都遵循此时间线,且它们始终可能变更。
| 步骤 | 事件 | 描述 | 日期与时间(ET) |
|---|---|---|---|
| 1 | 订单录入窗口打开 | 投资者开始提交有条件买入要约(COB)。 | 6 月 9 日星期一上午 9:00 |
| 2 | 发送 60 分钟通知 | 定价前的最终撤回/修改窗口。此后 COB 具有约束力。 | 6 月 11 日星期三下午 3:00 |
| 3 | 分配引擎运行 | 根据需求和分配执行分配算法。 | 6 月 12 日星期四上午 7:01 |
| 4 | Alpaca 向合作伙伴发送分配 | 通过 API 向合作伙伴发送分配信息 | 6 月 12 日星期四上午 7:30 |
| 5 | IPO 日期 | 股票在上市交易所开始交易 | 6 月 12 日星期四上午 11:00 |
| 6 | 分配结算 | 股票通过 DTC 交付至合作伙伴清算账户(T+1) | 6 月 13 日星期五 |
认证
身份验证使用与 Broker API 相同的 Alpaca OAuth 2.0 持有者令牌。无需更改。
示例头:
Authorization: Bearer <token>| 响应代码 | 描述 |
|---|---|
401 Unauthorized | 令牌缺失、无效或已过期 |
403 Forbidden | 令牌有效但权限范围不足 |
更多信息,请参阅身份验证。
属性
| 属性 | 类型 | 说明 |
|---|---|---|
| name | string | 发行的官方名称。 |
| description | string | 发行的人类可读的较长描述(如果可用)。 |
| ticker_symbol | string | 该证券开始在二级市场交易后将使用的股票代码。 |
| ipo_reference | string | 在 IPO 事件流和 /v1/ipos/{ipo_reference} 中使用的唯一发行标识符。也是 get-one 端点上的路径参数。视为不透明——格式各异(例如 FDXF、333290518、BBWRLH2QEC);不要解析。 |
| cusip_id | string | 发行的 CUSIP 标识符。标准 CUSIP 为 9 个字母数字字符;沙箱可能使用合成测试值。 |
| prospectus_url | string | 招股说明书文档的 URL。映射到 IPO 事件流上相应 Prospectus 事件的 prospectus_url 负载。 |
| offering_type | string | 发行类型。目前始终为 IPO。 |
| availability | string enum | 发行当前是否接受订单。为 available(开放订单)、not_available(尚未开放)或 closed(终态——不再接受订单)之一。 |
| anticipated_shares | integer | 发行的预期总股数(如果已知)。 |
| max_price | string (decimal) | 指示价格范围的上限。十进制字符串,无固定精度(例如 "25" 或 "25.50")。 |
| min_price | string (decimal) | 指示价格范围的下限。十进制字符串,无固定精度(例如 "20" 或 "20.50")。 |
| trade_date | string (date) | 预期的二级市场首个交易日,格式为 YYYY-MM-DD。 |
| settlement_date | string (date) | 预期结算日期,格式为 YYYY-MM-DD。 |
| no_new_orders | boolean | 当 true 时,发行处于 60 分钟撤回窗口,不接受新订单。这映射到 IPO 事件流上的 SixtyMinMail 事件。 |
| sixty_minute_expiration_time | string (RFC3339) | 可选。 当此发行开始 60 分钟撤回窗口时,这是窗口到期的 RFC3339 时间戳(例如 "2026-05-19T20:00:01Z")。在 60 分钟窗口尚未开始的发行上缺失。注意: 此字段仅为窗口的到期时间——要了解窗口何时打开,请订阅 IPO 事件流上的 SixtyMinMail 事件。该字段旨在通过 SSE 通知后驱动 UI 倒计时。 |
| underwriters | array of strings | 参与发行的承销商名称列表。 |
| unit_step_size | string (decimal) | 可选。 指定订单金额(notional)的最小增量。仅在强制执行步长约束的发行上出现;无步长约束时缺失。 |
| min_ticket_size | string (decimal) | 允许的最小订单金额。十进制字符串,无固定精度。 |
| max_ticket_size | string (decimal) | 允许的最大订单金额。十进制字符串,无固定精度。 |
端点
列出 IPO 发行
GET /v1/ipos
检索分页的 IPO 发行列表。
关于发行的说明:
两个发行可以共享相同的
ticker_symbol,但具有不同的ipo_reference,availability。如果发行人在上市后取消或推迟交易,并且经过足够时间(财务状况变化、招股说明书变更等),就可能发生这种情况。在这种情况下,IPO 参考将不同,但代码仍相同。
参数
| 参数 | 类型 | 描述 | 备注 |
|---|---|---|---|
availability | string | IPO 可用性状态 | not_available、available、closed |
ticker | string | 按股票代码过滤 | 例如 EXMP、ACME |
limit | integer | 每页结果数量 | 默认:50,最大:200 |
page_token | string | 分页令牌 | 用于获取下一页 |
示例请求
curl -s -H "Authorization: Bearer $TOKEN" \
"https://broker-api.alpaca.markets/v1/ipos?availability=available&limit=50"示例响应(200)
{
"data": [
{
"name": "Example Corp",
"description": "Example business description",
"ticker_symbol": "EXMP",
"ipo_reference": "EXMP260615",
"cusip_id": "123456789",
"prospectus_url": "https://example.com/prospectus.pdf",
"offering_type": "IPO",
"availability": "available",
"anticipated_shares": 1000000,
"max_price": "25",
"min_price": "20",
"trade_date": "2026-06-15",
"settlement_date": "2026-06-16",
"no_new_orders": false,
"underwriters": ["Bank A", "Bank B"],
"min_ticket_size": "100",
"max_ticket_size": "10000"
}
],
"next_page_token": null
}关于示例的说明:
unit_step_size被省略,因为此发行不强制执行步长约束。sixty_minute_expiration_time缺失,因为 60 分钟撤回窗口尚未开始。- 数值字段(
min_price、max_price、min_ticket_size等)是十进制字符串,无固定精度——不要假定为两位小数格式。ipo_reference是不透明的;不要解析或假定其具体形态。
按 ID 获取 IPO
GET /v1/ipos/{ipo_reference}
通过参考 ID 检索单个 IPO 发行。
示例请求
curl -s -H "Authorization: Bearer $TOKEN" \
"https://broker-api.alpaca.markets/v1/ipos/EXMP260615"示例响应(200)
{
"data": {
"name": "Example Corp",
"description": "Example business description",
"ticker_symbol": "EXMP",
"ipo_reference": "EXMP260615",
"cusip_id": "123456789",
"prospectus_url": "https://example.com/prospectus.pdf",
"offering_type": "IPO",
"availability": "available",
"anticipated_shares": 1000000,
"max_price": "25",
"min_price": "20",
"trade_date": "2026-06-15",
"settlement_date": "2026-06-16",
"no_new_orders": true,
"sixty_minute_expiration_time": "2026-06-15T13:00:00Z",
"underwriters": ["Bank A", "Bank B"],
"unit_step_size": "1",
"min_ticket_size": "100",
"max_ticket_size": "10000"
}
}此示例适用于处于 60 分钟撤回窗口内的发行——注意
no_new_orders: true以及已填充的sixty_minute_expiration_time。
下达 IPO 订单
IPO 订单通过标准 Broker API 订单端点下达。订单请求和响应使用标准 Order schema——有关完整的请求和响应字段集,请参阅创建账户订单参考文档。以下字段是 IPO 特定的注意事项。
Note
📘 Omnibus 和 Omnisub 合作伙伴必须为同一发行下多个订单。对于 IPO 发行的每个最终用户订单,都必须下新订单。不支持批量订单/订单聚合。
IPO 特定订单规则
- 使用
ipo_reference(发行参考)作为订单请求中的symbol字段。 - IPO 订单仅接受名义金额:提供
notional;省略qty。在响应中,IPO 订单的qty始终为null。 - IPO 仅接受
side=buy。 type必须为market。time_in_force必须为gtc——仅在发行期和 60 分钟撤回窗口内有效。- 订单会根据发行约束进行验证(
min_ticket_size、max_ticket_size,以及存在时的unit_step_size)。 - 响应中的
asset_class为"ipo"。
下达 IPO 订单
POST /v1/trading/accounts/{account_id}/orders
仅在发行处于 availability=available 且 60 分钟撤回窗口开始之前(no_new_orders=false)才可以下新订单。在 60 分钟窗口开始后提交的订单可能会同步受理,之后通过交易事件 SSE 流拒绝——详情请参见错误处理。
示例请求
curl -s -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"https://broker-api.alpaca.markets/v1/trading/accounts/{account_id}/orders" \
-d '{
"symbol": "EXMP260615",
"side": "buy",
"type": "market",
"time_in_force": "gtc",
"notional": "1000",
"client_order_id": "my-unique-order-123"
}'示例响应(200)
响应是一个标准 Order 对象。需重点关注的 IPO 特定字段:
{
"id": "b50c01d4-3d71-4295-8426-93c953c1ceb6",
"client_order_id": "my-unique-order-123",
"status": "new",
"asset_class": "ipo",
"symbol": "EXMP260615",
"notional": "1000",
"qty": null,
"side": "buy",
"type": "market",
"time_in_force": "gtc",
"created_at": "2026-06-09T15:30:00.000Z",
"submitted_at": "2026-06-09T15:30:00.000Z"
}完整响应还包含标准 Order 字段(updated_at、filled_at、filled_qty、filled_avg_price、expired_at、canceled_at、failed_at、replaced_at、replaced_by、replaces、asset_id、order_class、order_type、position_intent、limit_price、stop_price、extended_hours、legs、trail_percent、trail_price、hwm、subtag、source)。有关规范 schema,请参阅创建账户订单参考文档。
替换 IPO 订单
PATCH /v1/trading/accounts/{account_id}/orders/{order_id}
有关完整 schema,请参阅替换账户订单参考文档。对于 IPO 订单,请求体中只有 notional 和 client_order_id 有意义。在整个发行期和 60 分钟撤回窗口内均接受修改——一旦撤回窗口结束,COB 即具有约束力,不再允许修改。
示例请求
curl -s -X PATCH \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
"https://broker-api.alpaca.markets/v1/trading/accounts/{account_id}/orders/{order_id}" \
-d '{
"notional": "1500"
}'修改窗口关闭后的拒绝
在修改窗口关闭后提交的替换请求目前同步受理(HTTP 200),并稍后通过交易事件 SSE 流拒绝——请参见异步拒绝。交易事件作为 rejected 事件到达,其内部 order.reason 引用已关闭的修改窗口。订阅交易事件流以向最终用户呈现此最终状态。
取消 IPO 订单
DELETE /v1/trading/accounts/{account_id}/orders/{order_id}
请参阅删除账户订单参考文档。在整个发行期和 60 分钟撤回窗口内均接受取消——一旦撤回窗口结束,COB 即具有约束力,不再允许取消。
示例请求
curl -s -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://broker-api.alpaca.markets/v1/trading/accounts/{account_id}/orders/{order_id}"获取 IPO 订单
GET /v1/trading/accounts/{account_id}/orders/{order_id}
检索 IPO 订单的当前状态。返回标准 Order schema——请参阅获取账户订单。
示例请求
curl -s -H "Authorization: Bearer $TOKEN" \
"https://broker-api.alpaca.markets/v1/trading/accounts/{account_id}/orders/{order_id}"示例响应(200)
下面显示的是 IPO 特定字段;完整响应包括所有标准 Order 字段。
{
"id": "b50c01d4-3d71-4295-8426-93c953c1ceb6",
"client_order_id": "my-unique-order-123",
"status": "new",
"asset_class": "ipo",
"symbol": "EXMP260615",
"notional": "1000",
"qty": null,
"filled_qty": "0",
"filled_avg_price": null,
"side": "buy",
"type": "market",
"time_in_force": "gtc",
"created_at": "2026-06-09T15:30:00.000Z",
"submitted_at": "2026-06-09T15:30:00.000Z",
"filled_at": null
}列出 IPO 订单
GET /v1/trading/accounts/{account_id}/orders
列出账户的订单,可选按 IPO 代码过滤。使用标准列出账户订单端点和参数集。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
symbols | string | 按 IPO 代码(ipo_reference)过滤 |
status | string | 按订单状态过滤 |
limit | integer | 结果数量(默认:50,最大:500) |
示例请求
curl -s -H "Authorization: Bearer $TOKEN" \
"https://broker-api.alpaca.markets/v1/trading/accounts/{account_id}/orders?symbols=EXMP260615"订单状态流
IPO 订单遵循特定的生命周期:
| 状态 | 描述 |
|---|---|
pending_new | 订单已提交,等待确认(瞬态) |
new | 订单已受理,等待分配 |
filled | 股票按最终价格分配 |
canceled | 订单在撤回窗口内取消 |
rejected | 订单被拒绝(未满足约束、发行关闭等) |
replaced | 订单已替换 |
典型流程:
- 订单下达 →
pending_new(短暂) - 受理 →
new - 收到分配 →
filled(填充filled_qty和filled_avg_price)
注意: 全天候 24/7 可用,因此订单在受理后立即从 pending_new 转为 new。订单保持 new 状态,直到发行结束并分配额度。pending_new 状态是瞬态的,应在几秒内解决。
重要: 状态 held、accepted、pending_cancel 和 pending_replace 不属于标准 IPO 订单生命周期。如果你观察到这些状态持续存在,可能表明存在问题。
异步拒绝
某些拒绝条件不会在提交时同步评估,而是稍后作为 rejected 事件在交易事件 SSE 流(GET /v2/events/trades)上传递。最常见的情况是:
- 对已进入 60 分钟撤回窗口(
no_new_orders=true)的发行提交新订单——订单被受理为pending_new并异步拒绝。 - 在修改窗口关闭后替换或取消订单——请求同步受理并异步拒绝。
- 受理后失败的账户级资格检查。
- 分配时的拒绝(例如重复订单、分配引擎约束)。
始终在订阅 IPO 事件流的同时订阅交易事件流,以向最终用户呈现这些最终状态变更。
IPO 头寸
一旦 IPO 分配给最终用户,它就会以 asset_class: "us_equity" 出现在标准头寸端点上。有关完整 schema,请参阅头寸 API 参考。
生命周期
与头寸可见性相关的有三种生命周期状态:
- 分配前。 当订单仍处于
new/pending_new时,不存在头寸记录——尚无成交。 - 分配后、二级市场上市前。 一旦分配送达,就会出现头寸记录,其中
qty、qty_available、avg_entry_price和cost_basis由分配填充。在此窗口内,市场数据派生字段不可用,因为该证券尚未在二级市场开始交易——请参见下文。 - 二级市场交易开始后。 该证券的定价源激活;市场数据字段在后续读取时正常填充。
上市前窗口的市场数据字段
当头寸处于分配后、二级市场上市前窗口时,以下字段返回为 null:
market_valueunrealized_pl、unrealized_plpcunrealized_intraday_pl、unrealized_intraday_plpccurrent_price、lastday_price、change_todayexchange返回为空字符串
此窗口内填充的字段为:
asset_class: "ipo"symbol(即ipo_reference)qty、qty_available(已分配的股数)avg_entry_price、cost_basis(源自最终分配价格)side
建议: 在渲染已分配但尚未上市的 IPO 头寸时,对于通常显示当前价格的任何 UI 单元格,回退使用 avg_entry_price,并在二级市场交易开始前将未实现盈亏视为零。
示例响应(200)——上市前 IPO 头寸
{
"asset_id": "0a1b2c3d-4e5f-6789-abcd-ef0123456789",
"symbol": "EXMP260615",
"exchange": "",
"asset_class": "ipo",
"qty": "100",
"qty_available": "100",
"side": "long",
"avg_entry_price": "20",
"cost_basis": "2000",
"market_value": null,
"current_price": null,
"lastday_price": null,
"change_today": null,
"unrealized_pl": null,
"unrealized_plpc": null,
"unrealized_intraday_pl": null,
"unrealized_intraday_plpc": null
}服务器发送事件(SSE)
GET /v2/events/ipos
流式传输实时 IPO 更新,包括发行变更、可用性更新、分配和时间线里程碑。
查询参数
| 参数 | 类型 | 描述 |
|---|---|---|
since | string (date) | 可选。从此日期开始重放历史事件(YYYY-MM-DD)。省略时,流仅从连接时刻起传递新事件。用于重连/重放。 |
事件类型
| 事件 | 描述 | 可见性 |
|---|---|---|
Offering | 创建新 IPO 发行 | 广播 |
OfferingUpdate | 发行详情已更改 | 广播 |
OfferingCancellation | 发行已取消 | 广播 |
Prospectus | 招股说明书 URL 已更新 | 广播 |
SixtyMinMail | 60 分钟撤回窗口已开始 | 广播 |
Allocation | 股票已分配给用户 | 按账户 |
关于动词大小写的说明:
verb值为 PascalCase(例如Offering、SixtyMinMail)。过滤事件时须精确匹配。
可见性:
- 广播事件发送给所有连接的客户端。
- 按账户事件仅过滤到接收该分配的特定账户。
沙箱限制: 沙箱环境目前不发出
Prospectus事件。请在生产环境中测试Prospectus处理程序。
事件 Schema
所有事件遵循通用的信封结构:
{
"verb": "Offering",
"offering_reference": "EXMP260615",
"event_id": "01JBPXJ4Z8XWQK3QY2Q5N9R8KT",
"payload": {},
"at": "2026-06-09T10:30:00.000Z",
"received_at": "2026-06-09T10:30:00.000Z"
}| 字段 | 类型 | 描述 |
|---|---|---|
verb | string | 事件类型标识符(PascalCase——请参见上文事件类型)。 |
offering_reference | string | 唯一 IPO 发行 ID。视为不透明。 |
event_id | string (ULID) | 唯一标识此事件的 ULID。用于在使用 since= 重连时去重。 |
payload | object | absent | 事件特定数据。可选——OfferingCancellation 事件不包含 payload。 |
at | string (RFC3339) | 来自上游 IPO 系统的源时间戳。 |
received_at | string (RFC3339) | Alpaca 接收并广播事件的时间戳。通常非常接近 at。 |
分配事件
分配事件在顶层(信封之外)包含额外的账户特定字段:
{
"verb": "Allocation",
"offering_reference": "EXMP260615",
"event_id": "01JBPXJ4Z8XWQK3QY2Q5N9R8KT",
"account_number": "511768662",
"correspondent": "LPCA",
"payload": {
"cusip_id": "123456789",
"final_price": "20",
"allocated_shares": "100",
"allocated_amount": "2000",
"subject": "IPO Allocation: Example Corp"
},
"at": "2026-06-12T07:30:00.000Z",
"received_at": "2026-06-12T07:30:00.000Z"
}| 字段 | 类型 | 描述 |
|---|---|---|
account_number | string | Alpaca 账户号码 |
correspondent | string | 经纪商代理代码(例如 LPCA) |
示例请求
# Live tail
curl -N \
-H "Accept: text/event-stream" \
-H "Authorization: Bearer $TOKEN" \
"https://broker-api.alpaca.markets/v2/events/ipos"
# Replay events from a given date forward
curl -N \
-H "Accept: text/event-stream" \
-H "Authorization: Bearer $TOKEN" \
"https://broker-api.alpaca.markets/v2/events/ipos?since=2026-06-01"示例事件负载
发行已创建:
data: {"verb":"Offering","offering_reference":"EXMP260615","event_id":"01JBPXJ4Z8XWQK3QY2Q5N9R8KT","payload":{"name":"Example Corp","ticker_symbol":"EXMP","offering_type_name":"IPO","available_to_order":"Available","min_price":"18","max_price":"22","source":"sync-offerings"},"at":"2026-06-09T10:30:00.000Z","received_at":"2026-06-09T10:30:00.000Z"}
payload.available_to_order以 PascalCase 枚举字符串形式发出——为"Available"、"NotAvailable"或"Closed"之一。请注意,这与发行对象的availability字段的值空间不同,后者为小写(available/not_available/closed)。在两者之间映射时,请在客户端进行规范化。payload.source标识上游同步来源(例如"sync-offerings")。视为仅供参考。
六十分钟邮件:
data: {"verb":"SixtyMinMail","offering_reference":"EXMP260615","event_id":"01JBPXJ4Z8XWQK3QY2Q5N9R8KT","payload":{"subject":"60-minute withdrawal window: Example Corp","sixty_minute_expiration_time":"2026-06-15 13:00:02 UTC"},"at":"2026-06-15T12:00:02.000Z","received_at":"2026-06-15T12:00:02.000Z"}
payload.sixty_minute_expiration_time是形式为YYYY-MM-DD HH:MM:SS UTC的自由格式字符串——不是 RFC3339,也不与发行对象上的sixty_minute_expiration_time属性(为 RFC3339)格式相同。从 SSE 负载读取时,按显式的YYYY-MM-DD HH:MM:SS UTC布局解析。
发行取消:
data: {"verb":"OfferingCancellation","offering_reference":"EXMP260615","event_id":"01JBPXJ4Z8XWQK3QY2Q5N9R8KT","at":"2026-06-09T11:00:00.000Z","received_at":"2026-06-09T11:00:00.000Z"}
OfferingCancellation事件不包含payload。将其缺失视为空正文。
分配:
data: {"verb":"Allocation","offering_reference":"EXMP260615","event_id":"01JBPXJ4Z8XWQK3QY2Q5N9R8KT","account_number":"511768662","correspondent":"LPCA","payload":{"final_price":"20","allocated_shares":"100","allocated_amount":"2000"},"at":"2026-06-12T07:30:00.000Z","received_at":"2026-06-12T07:30:00.000Z"}IPO 生命周期

响应头
| 请求头 | 值 | 描述 |
|---|---|---|
Content-Type | text/event-stream | |
Cache-Control | no-cache | |
Connection | keep-alive | |
X-Ratelimit-Limit | 20 | 每个访问令牌的最大并发 SSE 消费者数。 |
说明
- 重连连接断开时:重新发出带有
since=<last-received-date>的请求以重放你可能在断开期间错过的事件,然后使用event_id去重。 - 浏览器说明:原生
EventSource不支持设置请求头;请使用 polyfill 或基于 fetch 的 SSE shim,以允许传递Authorization头。
SixtyMinMail 事件
此事件标志着生效日 60 分钟 COB(有条件买入订单)撤回/取消最终窗口的开始:
- 投资者可在此窗口内取消或修改订单。
- 60 分钟窗口开始后无法下新订单。
- 窗口结束后,COB 具有约束力。
- 考虑向最终用户发送额外的电子邮件通知以提供可审计性。
驱动 UI 倒计时: 一旦窗口开始,发行对象会公开
sixty_minute_expiration_time(RFC3339)——使用SixtyMinMailSSE 事件作为进入倒计时 UI 的触发器,然后读取发行对象的sixty_minute_expiration_time(或 SSE 负载中的sixty_minute_expiration_time)获取截止时间。仅凭发行对象上的到期字段不能用作开始信号,因为当它出现时,窗口已经开始。
分页
- 在列表端点上使用
limit和page_token - 在 200 响应中,如果还有更多结果,则返回
next_page_token - 在后续请求中将
next_page_token作为page_token传递
错误处理
错误来源
- API 响应(同步)——服务器返回 HTTP 错误状态以及包含
code和message的 JSON 正文。 - 交易事件(SSE,异步)——订单被受理后,之后可能被拒绝。该拒绝通过账户的交易事件流(
GET /v2/events/trades)传递——请参见上文的异步拒绝。
REST API 接口
出错时,API 返回:
- HTTP 状态: 400、401、403、404、422、429、500、501、503、504
- JSON 正文:
code(number)、message(string)
示例:
{ "code": 40020012, "message": "IPO orders must specify notional and omit qty" }通用错误代码(所有 API,包括 IPO)
适用于所有 Alpaca API 端点的相同错误代码和 HTTP 状态也适用于 IPO 端点。完整列表请参见主要 API 文档。
IPO 特定错误代码
IPO 订单创建和替换可能返回以下内容。HTTP 状态各异(400、404、422、500、501、429、503、504)。
| HTTP 状态码 | 错误代码 | 错误消息 |
|---|---|---|
| 400 | 40010000 | 请求正文格式无效 |
| 422 | 40020010 | IPO 订单的 time_in_force 必须为 gtc |
| 422 | 40020011 | IPO 订单的 type 必须为 market |
| 422 | 40020012 | IPO 订单必须指定 notional 并省略 qty |
| 422 | 40020013 | IPO 订单必须为买入方向 |
| 422 | 42210000 | 此账户未启用 IPO 交易 |
| 404 | 40410000 | 未找到 \<id> 的 IPO |
| 404 | 40410000 | 未找到 \<uuid> 的订单 |
| 422 | 42210000 | 未找到资产 "\<symbol>" |
| 422 | 40010001 | 资产 \<symbol> 未激活 |
| 422 | 42210000 | 未找到 IPO 发行详情 |
| 422 | 42210000 | IPO 发行不可下单 |
| 422 | 40010001 | notional 必须 > 0 |
| 422 | 42210000 | 无效的 notional 值:\<detail> |
| 422 | 42210000 | IPO 订单仅支持买入方向 |
| 422 | 42210000 | 订单金额 \<X> 低于最小单笔订单规模 \<Y> |
| 422 | 42210000 | 订单金额 \<X> 高于最大单笔订单规模 \<Y> |
| 422 | 42210000 | 订单金额 \<X> 不是步长 \<Y> 的整数倍 |
| 422 | 42210000 | 账户已有发行资产 \<symbol> 的未结订单 |
| 422 | 42210000 | 订单不是 IPO 订单 |
| 422 | 42210000 | 订单未开放,状态:\<status> |
| 422 | 42210000 | 无法替换处于 pending_cancel 状态的订单 |
| 422 | 42210000 | 订单已处于待替换状态 |
| 422 | 42210000 | IPO 订单替换需要 notional |
| 501 | 50110000 | 未启用 IPO 交易 |
| 500 | 50010000 | IPO 订单路由失败:\<detail> |
| 500 | 50010000 | 发生内部服务器错误 |
| 429 | 42910000 | 超出速率限制 |
| 503 | 50310000 | 服务不可用 |
| 504 | 50410000 | 请求超时 |
常见情况说明
- 对已关闭发行提交返回
422 / 40010001 / "asset <symbol> is not active"。(availability=closed的拒绝通过标准非活动资产代码呈现,而不是通过42210000。) - 提交非数字或格式错误的
notional在请求验证层、IPO 特定检查运行之前返回400 / 40010000 / "request body format is invalid"。 - 对处于 60 分钟撤回窗口内的发行提交(
no_new_orders=true)会同步受理为pending_new,之后通过交易事件 SSE 流拒绝——请参见异步拒绝。 - 在修改窗口关闭后替换或取消订单也同步受理,之后通过交易事件 SSE 流拒绝。目前没有同步的
40320060/ "modification window closed" 错误。
交易事件(SSE)
订单受理后的拒绝通过交易事件 SSE 流(GET /v2/events/trades)传递。每次拒绝作为 rejected 事件到达,其内部 order 对象携带标准订单字段,以及可用时的 reason 字符串。常见的 IPO 拒绝原因包括发行关闭、账户资格、重复订单和分配引擎结果——这些原因是自由文本,可能不同。
有关完整的事件信封、schema 和重连语义,请参阅订阅交易事件(SSE)参考文档。其中记录的 since / since_id 重放参数同样适用。
集成检查清单
- 确保你的 OAuth 令牌具有所需的权限范围。
- 实现
GET /v1/ipos以发现可用发行;将ipo_reference视为不透明。 - 下单时使用
ipo_reference作为symbol。 - 使用仅名义金额订单(提供
notional,省略qty);side=buy、type=market、time_in_force=gtc。 - 根据
min_ticket_size、max_ticket_size以及存在时的unit_step_size验证订单(注意unit_step_size是可选的,可能缺失)。 - 处理 60 分钟撤回窗口:一旦
no_new_orders=true就停止允许新订单,并在SixtyMinMailSSE 事件触发后使用sixty_minute_expiration_time显示倒计时。 - 订阅 IPO 事件 SSE 流(
GET /v2/events/ipos)以获取发行生命周期事件。过滤时使用 PascalCase 动词。 - 订阅交易事件 SSE 流(
GET /v2/events/trades)以获取异步订单拒绝(例如在 60 分钟窗口内提交的订单)。 - 使用
since=<date>实现重连逻辑以重放,并按event_id(ULID)去重。 - 处理上市前的 IPO 头寸:市场数据字段在分配与二级市场首笔交易之间为
null;在价格填充之前,从avg_entry_price渲染 UI 单元格。
投资首次公开募股(“IPO”)涉及重大风险,并非适合所有投资者。IPO 证券没有先前的公开交易历史,发行价可能不反映发行后的市场价格。IPO 证券的市场价格可能波动,投资者可能损失部分或全部投资。
有关 IPO 发行人的信息可能有限,发行人可能经营历史有限或未实现盈利。无法保证会形成活跃或流动的交易市场。
本材料仅供参考,不构成出售证券的要约或购买证券要约的招揽。任何要约将仅通过向美国证券交易委员会提交的招股说明书进行。投资者在投资前应仔细阅读招股说明书,包括其中描述的风险因素。