Longbridge Developers
Get Started

Manage Group Securities

Update watched group

Quote Permission RequiredFree

Included with OpenAPI activation — no extra purchase needed.

>_ CLI
# add symbols to a group
longbridge watchlist update <id> --add TSLA.US --add AAPL.US
# remove a symbol from a group
longbridge watchlist update <id> --remove NVDA.US
# add and remove at the same time
longbridge watchlist update <id> --add TSLA.US --remove AAPL.US

Request

HTTP MethodPUT
HTTP URL/v1/watchlist/groups

Parameters

Content-Type: application/json; charset=utf-8

NameTypeRequiredDescription
idintegerYESGroup ID, for example 10086.
namestringNOGroup name, for example Information Technology Group.
If this parameter is not passed, the group name will not be updated.
securitiesstring[]NOSecurity list, for example ["BABA.US", "AAPL.US"].
Combined with the mode parameter below, it can be used to add securities, remove securities, and sort the watchlist.
modestringNOOperation method
optional values:
add - Add securities
remove - Remove securities
replace - Update securities

When selecting add, the securities in the above list will be added to this group in order.

When selecting remove, the securities in the above list will be removed from this group.

When selecting update, the securities in the above list will completely replace the securities in this group.
For example, if the original group contains APPL.US, BABA.US, TSLA.US, and it is updated with ["BABA.US", "AAPL.US", "MSFT.US"], it will become BABA.US, AAPL.US, MSFT.US, removing TSLA.US and adding MSFT.US, while adjusting the order of BABA.US and AAPL.US.

Request Example

from longbridge.openapi import QuoteContext, Config, SecuritiesUpdateMode, OAuthBuilder

oauth = OAuthBuilder("your-client-id").build(lambda url: print("Visit:", url))
config = Config.from_oauth(oauth)
ctx = QuoteContext(config)
ctx.update_watchlist_group(10086, name = "Watchlist2", securities = ["700.HK", "AAPL.US"], SecuritiesUpdateMode.Replace)
import asyncio
from longbridge.openapi import AsyncQuoteContext, Config, SecuritiesUpdateMode, OAuthBuilder

async def main() -> None:
    oauth = await OAuthBuilder("your-client-id").build_async(lambda url: print("Visit:", url))
    config = Config.from_oauth(oauth)
    ctx = AsyncQuoteContext.create(config)
    ctx.update_watchlist_group(10086, name = "Watchlist2", securities = ["700.HK", "AAPL.US"], SecuritiesUpdateMode.Replace)

if __name__ == "__main__":
    asyncio.run(main())
const { Config, QuoteContext, OAuth } = 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)
  await ctx.updateWatchlistGroup(1, 'New Name', ['700.HK'])
  console.log('updated')
}
main().catch(console.error)
import com.longbridge.*;
import com.longbridge.quote.*;

class Main {
    public static void main(String[] args) throws Exception {
        try (OAuth oauth = new OAuthBuilder("your-client-id").build(url -> System.out.println("Open to authorize: " + url)).get();
             Config config = Config.fromOAuth(oauth);
             QuoteContext ctx = QuoteContext.create(config)) {
            ctx.updateWatchlistGroup(1, "New Name", new String[] { "700.HK" }).get();
            System.out.println("updated");
        }
    }
}
use std::sync::Arc;
use longbridge::{oauth::OAuthBuilder, quote::QuoteContext, Config};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let oauth = OAuthBuilder::new("your-client-id").build(|url| println!("Open this URL to authorize: {url}")).await?;
    let config = Arc::new(Config::from_oauth(oauth));
    let (ctx, _) = QuoteContext::new(config);
    ctx.update_watchlist_group(1, "New Name", vec!["700.HK".to_string()]).await?;
    println!("updated");
    Ok(())
}
#include &lt;iostream&gt;
#include <longbridge.hpp>

#ifdef WIN32
#include <windows.h>
#endif

using namespace longbridge;
using namespace longbridge::quote;

static void
run(const OAuth& oauth)
{
    Config config = Config::from_oauth(oauth);
    QuoteContext ctx = QuoteContext::create(config);

    ctx.update_watchlist_group(1, "New Name", symbols, [](auto res) {
        if (!res) { std::cout << "failed" << std::endl; return; }
        std::cout << "updated" << std::endl;
    });
}

int main(int argc, char const* argv[]) {
#ifdef WIN32
    SetConsoleOutputCP(CP_UTF8);
#endif

    const std::string client_id = "your-client-id";
    OAuthBuilder(client_id).build(
    [](const std::string& url) {
        std::cout << "Open this URL to authorize: " << url << std::endl;
    },
    [](auto res) {
        if (!res) {
            std::cout << "authorization failed: " << *res.status().message() << std::endl;
            return;
        }
        run(*res);
    });

    std::cin.get();
    return 0;
}
package main

import (
	"context"
	"fmt"
	"log"

	"github.com/longbridge/openapi-go/config"
	"github.com/longbridge/openapi-go/oauth"
	"github.com/longbridge/openapi-go/quote"
)

func main() {
	o := oauth.New("your-client-id").
		OnOpenURL(func(url string) { fmt.Println("Open this URL to authorize:", url) })
	if err := o.Build(context.Background()); err != nil {
		log.Fatal(err)
	}
	conf, err := config.New(config.WithOAuthClient(o))
	if err != nil {
		log.Fatal(err)
	}
	qctx, err := quote.NewFromCfg(conf)
	if err != nil {
		log.Fatal(err)
	}
	defer qctx.Close()
	err = qctx.UpdateWatchlistGroup(context.Background(), 1, "New Name", []string{"700.HK"}, quote.AddWatchlist)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("updated")
}

Response

Response Headers

  • Content-Type: application/json

Response Example

{
  "code": 0
}

Response Status

StatusDescriptionSchema
200SuccessNone
500Internal errorNone