longbridge provides an easy-to-use interface for invoking Longbridge OpenAPI.
- SDK docs: https://longbridge.github.io/openapi/nodejs/index.html
- Longbridge OpenAPI: https://open.longbridge.com/en/
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.js
Install Longbridge OpenAPI SDK
npm install longbridgeLongbridge 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.longbridgeapp.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.longbridgeapp.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) |
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 = await 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 = await 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 = await 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();- Windows
setxrequires a new terminal; usesetfor the currentcmd.exesession. - If the script exits, you won't receive push events; keep Node running.
- For debugging, set
LONGBRIDGE_LOG_PATHto enable SDK logs.
Licensed under either of
- Apache License, Version 2.0,(LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.