longbridge provides an easy-to-use interface for invoking Longbridge OpenAPI.
| Context | Description |
|---|---|
QuoteContext |
Real-time quotes, candlesticks, options, warrants, watchlists, push subscriptions |
TradeContext |
Orders, positions, account balance, executions, cash flow |
AssetContext |
Account statement download |
ContentContext |
News, community topics |
FundamentalContext |
Financial reports, analyst ratings, dividends, valuation, company overview, shareholders |
MarketContext |
Market status, broker holdings, A/H premium, trade statistics, anomaly alerts, index constituents |
CalendarContext |
Financial calendar (earnings, dividends, splits, IPOs, macro data, market closures) |
PortfolioContext |
Exchange rates, portfolio P&L analysis |
AlertContext |
Price alert management (add/enable/disable/delete) |
DCAContext |
Dollar-cost averaging plan management |
SharelistContext |
Community sharelist management |
Runnable examples live in examples/nodejs/:
examples/nodejs/account_asset.jsexamples/nodejs/http_client.jsexamples/nodejs/subscribe_candlesticks.jsexamples/nodejs/subscribe_quote.jsexamples/nodejs/submit_order.jsexamples/nodejs/today_orders.jsInstall Longbridge OpenAPI SDK
npm install longbridge
Longbridge OpenAPI supports two authentication methods:
OAuth 2.0 is the modern authentication method that uses Bearer tokens without requiring HMAC signatures.
Step 1: Register OAuth Client
First, register an OAuth client to get your client_id:
bash / macOS / Linux
curl -X POST https://openapi.longbridge.com/oauth2/register \
-H "Content-Type: application/json" \
-d '{
"client_name": "My Application",
"redirect_uris": ["http://localhost:60355/callback"],
"grant_types": ["authorization_code", "refresh_token"]
}'
PowerShell (Windows)
Invoke-RestMethod -Method Post -Uri https://openapi.longbridge.com/oauth2/register `
-ContentType "application/json" `
-Body '{
"client_name": "My Application",
"redirect_uris": ["http://localhost:60355/callback"],
"grant_types": ["authorization_code", "refresh_token"]
}'
Response:
{
"client_id": "your-client-id-here",
"client_secret": null,
"client_name": "My Application",
"redirect_uris": ["http://localhost:60355/callback"]
}
Save the client_id for use in your application.
Step 2: Build an OAuth client and create Config
OAuth.build() loads a cached token from
~/.longbridge/openapi/tokens/<client_id>
(%USERPROFILE%\.longbridge\openapi\tokens\<client_id> on Windows) if one
exists and is still valid, or starts the browser authorization flow
automatically. The token is persisted to the same path after a successful
authorization or refresh.
const { OAuth, Config } = require('longbridge');
async function main() {
const oauth = await OAuth.build(
"your-client-id",
(_, url) => console.log("Open this URL to authorize: " + url)
);
const config = Config.fromOAuth(oauth);
// Use config to create contexts...
}
main();
Setting environment variables (macOS/Linux)
export LONGBRIDGE_APP_KEY="App Key get from user center"
export LONGBRIDGE_APP_SECRET="App Secret get from user center"
export LONGBRIDGE_ACCESS_TOKEN="Access Token get from user center"
Setting environment variables (Windows)
setx LONGBRIDGE_APP_KEY "App Key get from user center"
setx LONGBRIDGE_APP_SECRET "App Secret get from user center"
setx LONGBRIDGE_ACCESS_TOKEN "Access Token get from user center"
| Name | Description |
|---|---|
| LONGBRIDGE_LANGUAGE | Language identifier, zh-CN, zh-HK or en (Default: en) |
| LONGBRIDGE_HTTP_URL | HTTP endpoint url (Default: https://openapi.longbridge.com) |
| LONGBRIDGE_QUOTE_WS_URL | Quote websocket endpoint url (Default: wss://openapi-quote.longbridge.com/v2) |
| LONGBRIDGE_TRADE_WS_URL | Trade websocket endpoint url (Default: wss://openapi-trade.longbridge.com/v2) |
| LONGBRIDGE_ENABLE_OVERNIGHT | Enable overnight quote, true or false (Default: false) |
| LONGBRIDGE_PUSH_CANDLESTICK_MODE | realtime or confirmed (Default: realtime) |
| LONGBRIDGE_PRINT_QUOTE_PACKAGES | Print quote packages when connected, true or false (Default: true) |
| LONGBRIDGE_LOG_PATH | Set the path of the log files (Default: no logs) |
| LONGBRIDGE_PAPERTRADING | Enable paper trading mode, true or false (Default: false). See Paper Trading. |
Then create a config from the environment:
const { Config } = require('longbridge');
const config = Config.fromApikeyEnv();
const { OAuth, Config, QuoteContext } = require('longbridge');
async function main() {
const oauth = await OAuth.build(
"your-client-id",
(_, url) => console.log("Open this URL to authorize: " + url)
);
const config = Config.fromOAuth(oauth);
const ctx = QuoteContext.new(config);
const resp = await ctx.quote(["700.HK", "AAPL.US", "TSLA.US", "NFLX.US"]);
for (let obj of resp) {
console.log(obj.toString());
}
}
main();
const { OAuth, Config, QuoteContext, SubType } = require('longbridge');
async function main() {
const oauth = await OAuth.build(
"your-client-id",
(_, url) => console.log("Open this URL to authorize: " + url)
);
const config = Config.fromOAuth(oauth);
const ctx = QuoteContext.new(config);
ctx.setOnQuote((_, event) => console.log(event.toString()));
await ctx.subscribe(
["700.HK", "AAPL.US", "TSLA.US", "NFLX.US"],
[SubType.Quote],
);
}
main();
const {
OAuth,
Config,
TradeContext,
Decimal,
OrderSide,
TimeInForceType,
OrderType,
} = require('longbridge');
async function main() {
const oauth = await OAuth.build(
"your-client-id",
(_, url) => console.log("Open this URL to authorize: " + url)
);
const config = Config.fromOAuth(oauth);
const ctx = TradeContext.new(config);
const resp = await ctx.submitOrder({
symbol: "700.HK",
orderType: OrderType.LO,
side: OrderSide.Buy,
timeInForce: TimeInForceType.Day,
submittedPrice: new Decimal("50"),
submittedQuantity: new Decimal(200),
});
console.log(resp.toString());
}
main();
If your account is a paper trading (simulation) account and you want to place orders, you must explicitly enable paper trading mode. When enabled, all API calls target the paper trading environment and the server validates the token — if the token belongs to a real-money account the server returns an error.
By default this option is off: the server imposes no restrictions and accepts requests from both paper trading and real-money accounts.
Via environment variable (applies automatically to all constructor methods):
export LONGBRIDGE_PAPERTRADING=true # macOS / Linux
$env:LONGBRIDGE_PAPERTRADING = "true" # Windows PowerShell
Programmatically:
const { Config } = require('longbridge');
const config = Config.fromApikey(
process.env.LONGBRIDGE_APP_KEY,
process.env.LONGBRIDGE_APP_SECRET,
process.env.LONGBRIDGE_ACCESS_TOKEN,
{ enablePapertrading: true },
);
setx requires a new terminal; use set for the current cmd.exe session.LONGBRIDGE_LOG_PATH to enable SDK logs.Licensed under either of