Infoway Go SDK
Official Infoway Go SDK for REST market data, fundamentals, and WebSocket streams.
If APIKey is omitted, the SDK reads INFOWAY_API_KEY. REST methods take context.Context and return errors as values.
Contents
Install
Quick start
Symbols
Client
REST
Return values
WebSocket
Error codes
Changelog
REST paths
Install
Quick start
Symbols
US
{code}.US
AAPL.US
AAPL
Hong Kong
5-digit + .HK
00700.HK
700.HK
Shanghai
{code}.SH
600519.SH
600519.CN
Shenzhen
{code}.SZ
000001.SZ
000001.CN
Japan
{code}.JP
7203.JP
Korea
{code}.KS
005930.KS
India
{code}.IN
RELIANCE.IN
Taiwan
{code}.TW
2330.TW
Crypto
Pair
BTCUSDT
FX
Pair
USDJPY
Basic / Financial take a product type such as STOCK_US or CRYPTO, not a market code like US.
Client
APIKey
INFOWAY_API_KEY
API key
BaseURL
https://data.infoway.io
REST base URL
Timeout
15s
Per-request timeout
MaxRetries
3
Retry count
Clients: Stock / Crypto / Japan / India / Korea / Taiwan / Common / Basic / Packages / Market / Plate / StockInfo / Financial.
REST
Join symbols with commas. Rate limits: REST API Limitation.
Quotes
GetTrade(ctx, codes)
Latest trade
GetDepth(ctx, codes)
Order book
GetKline(ctx, codes, klineType, count, timestamp)
Candles. Pass nil for the latest
KlineMin1 / KlineMin5 / KlineMin15 / KlineMin30
1–4
Minutes
KlineHour1 / KlineHour2 / KlineHour4
5–7
Hours
KlineDay / KlineWeek / KlineMonth / KlineQuarter / KlineYear
8–12
Daily and above
Up to 500 bars per symbol; multi-symbol calls return 2 bars each. vw is turnover.
Basic info
Dates use YYYYMMDD.
Overview / sectors / stock info / financials
Rank key values come from GetRankCategories. Financial methods require symbol and type. period_type: fq quarter, fy year, fh half-year.
Return values
REST methods decode JSON into any ([]any or map[string]any). Numbers are float64; prices remain strings on the wire. Trade t is milliseconds; candle t is a seconds string; book a/b is [[price…],[qty…]].
WebSocket
Quotes
Business must match the symbol market. Connect blocks — run it in a goroutine. 60 frames per minute per connection. See WebSocket Limitation.
Equity trade types: SubscribeTrade(codes, true).
Heartbeat
10010 every 30 seconds; server does not reply
Reconnect
Replays the current subscription set
OnReconnect
After a later successful open
OnDisconnect
Unexpected drop only. Close() does not fire it
HTTP 401
Stops reconnecting
Quota exceeded (516)
Retried on the same socket with backoff instead of closing it; first delay SubscribeRetry (default 2s)
Stale resubscribe
After a push has been seen, silence beyond StaleAfter (default 90s, 0 disables) resends the subscriptions
Subscribe fail:
A plain-text subscribe failure is delivered to OnError as SUBSCRIBE_FAIL
out
10000 / 10003 / 10006
Subscribe trade / depth / kline
out
11000 / 11001 / 11002
Unsubscribe
out
10010
Heartbeat
in
10002 / 10005 / 10008
Push
in
11010
Unsubscribe ack
in
200
Connected
News
wss://data.infoway.io/news requires a separate entitlement. One news connection per key.
Subscribe 10020, unsubscribe 11020, push 10022.
Error codes
REST uses ret. WebSocket uses code. 508–514 mean different things on each side. Full tables: REST API Error Codes and WebSocket Error Codes.
REST budget is about 1200 calls/minute/key. An invalid key is *AuthError on REST; WebSocket handshake HTTP 401 does not reconnect.
REST ret
Description
200
Success
400
Bad request
500
Server error
501 / 502
Rate limit
503
Candle count exceeded
505
Symbol count exceeded
506 / 507
Invalid / missing parameter
508
Symbol not found
509
Permission expired
513
Timestamp outside plan history
514
No permission
WebSocket code
Description
501 / 502
Rate limit
505
Too many products on this connection (the SDK stops resending)
516
Account-wide subscription quota exceeded (the SDK retries with backoff)
506 / 507
Invalid / missing parameter
508–511
API key expired / invalid / empty / blacklisted
512
Connection count exceeded
513
Heartbeat timeout
515
Not JSON
517–521
Handshake failed
Changelog
v0.4.1 — A subscribe quota rejection (516) no longer terminates the socket: subscriptions are retried on the same connection with backoff, and both the retries and the watchdog resends stay inside the 60-frames-per-minute budget. A plain-text Subscribe fail: reply is surfaced on OnError as SUBSCRIBE_FAIL. After a 505 the watchdog stops resending, and the resend gap widens automatically when many subscription groups are open. New StaleAfter (default 90s, 0 disables) and SubscribeRetry (default 2s). Outbound timestamps are capped at 256 entries. Japan and India examples now use .JP / .IN (Yahoo's .T / .NS return 508).
v0.4.0 — Client-side request limits (≤ 100 symbols, ≤ 500 kline bars for one symbol, ≤ 2 bars per symbol when batched), ValidSymbolType validates the financial type, ClassifyRest recovers business codes wrapped in ret=500, IsTerminalWs stops reconnecting on non-retryable errors, unified API key resolution (an explicit empty string no longer falls back to the environment), calls after Close return an error and idle connections are released.
v0.3.0 — First public release.
REST paths
{market} = stock / crypto / japan / india / korea / taiwan / common. Full list: Endpoints.
Latest trade
GET /{market}/batch_trade/{codes}
Order book
GET /{market}/batch_depth/{codes}
Candles
POST /{market}/v2/batch_kline
Symbols / calendar / financials
GET /common/basic/*
Overview / sectors / stock info
GET /common/v2/basic/*
Package
GET /package/info
License
MIT. API key: infoway.io.
Last updated
