# Bitget kline

Independent and unofficial. Not affiliated with or endorsed by any broker or platform named here. Educational only: nothing here is advice, and nothing here recommends a broker or a trade.

This is the markdown version of https://openbrokerapi.com/brokers/bitget/messages/kline, written from the same records as that page.

Risk warning: CFDs and spread bets are complex instruments and come with a high risk of losing money rapidly due to leverage. You can lose money on these products, and each provider publishes its own loss figure under FCA rules. You should consider whether you understand how they work and whether you can afford to take the high risk of losing your money. Automated and API trading can amplify losses through bugs, connectivity failures and runaway orders.

Candlesticks for one symbol at one interval. Bitget says data is pushed once a second while there are trades, and once per interval when there are none.

- Message: `kline`
- Interface: Bitget WebSocket API
- Group: Public channels
- Status: verified. Source: [bitget.com](https://www.bitget.com/docs/uta/websocket/public/Candlesticks-Channel), checked 2026-10-12.

This is a subscription of the Bitget WebSocket API, not an HTTP endpoint. It has no method and no path: it is sent as JSON over an open WebSocket connection. It is in no OpenAPI file on this site and the request builder does not list it.

## The message

- Name: `kline`
- Direction: Subscription, opened by the client and then fed by the server
- Subscribed to as: `kline`
- Carried by: WebSocket. This channel is in the public section of Bitget's WebSocket documentation. The addresses are the ones on Bitget's quick start page (bitget.com/docs/uta/quick-start), opened the same day, which also lists VIP and low latency hosts.
- Public channel: `wss://ws.bitget.com/v3/ws/public`
- Public channel, demo trading: `wss://wspap.bitget.com/v3/ws/public`

## Fields

- `op` (type String, required): subscribe to start the channel, unsubscribe to stop it.
- `args` (type List\<Object>, required): The channels to act on. Each entry names one.
- `args[].instType` (type String, required): The product type: spot, usdt-futures, coin-futures or usdc-futures.
- `args[].topic` (type String, required): Always kline.
- `args[].symbol` (type String, required): The symbol, for example BTCUSDT.
- `args[].interval` (type String, required): The width of the candle: 1m, 3m, 5m, 15m, 30m, 1H, 4H, 6H, 12H or 1D.

## What arrives

`kline`: A message with the event subscribe and the same arg confirms the subscription, with a connId for the connection. On an error the event is error, with a code and a msg. Data then arrives as below.

- `arg` (type Object, required or not: not stated): The channel the data belongs to: the instType, the topic and, on a public channel, the symbol that were subscribed to.
- `action` (type String, required or not: not stated): snapshot for full data, update for incremental data.
- `data` (type List\<Object>, required or not: not stated): The candles.
- `data[].start` (type String, required or not: not stated): The start of the candle, as Unix time in milliseconds.
- `data[].open` (type String, required or not: not stated): The opening price.
- `data[].close` (type String, required or not: not stated): The closing price.
- `data[].high` (type String, required or not: not stated): The highest price.
- `data[].low` (type String, required or not: not stated): The lowest price.
- `data[].volume` (type String, required or not: not stated): The volume traded, in the base coin.
- `data[].turnover` (type String, required or not: not stated): The turnover, in the quote coin.

## Sample

Written by this site from the fields recorded on this page. It has not been run against a terminal, a server or an account, and the values in it are placeholders. No credential is typed into it: where a field holds one, the placeholder says where it comes from. Nothing is entered on this site.

```json
{
  "op": "subscribe",
  "args": [
    {
      "instType": "spot",
      "topic": "kline",
      "symbol": "BTCUSDT",
      "interval": "1D"
    }
  ]
}
```

## Limits that apply at Bitget

- Public market data, legacy v1 API: 20 per 2 s per IP, public market data
  - Scope: Per IP address, public market data endpoints of the legacy v1 API
  - Status: verified. Source: [bitgetlimited.github.io](https://bitgetlimited.github.io/apidoc/en/spot/), checked 2026-10-12.
  - Note: Re-read on the legacy v1 documentation on 12 Oct 2026: 20 requests in 2 seconds. Authenticated endpoints there are set per endpoint per UID, and a general endpoint with no figure of its own is 10 a second. HTTP 429 on breach. The window is 2 seconds, which a single unit cannot state, so the figure stays as wording. The current API states its own overall limit, held in a separate record.
- Overall requests a minute: 6,000 requests per minute
  - Scope: Per IP address, all requests to the common domain name, with REST and WebSocket sharing one allowance
  - Status: verified. Source: [bitget.com](https://www.bitget.com/docs/uta/quick-start), checked 2026-10-12.
  - Note: Each endpoint also carries its own limit on its own documentation page, counted separately. HTTP 429 on breach.
- Concurrent WebSocket connections: 100 connections
  - Scope: Per IP address
  - Status: verified. Source: [bitget.com](https://www.bitget.com/docs/uta/quick-start), checked 2026-10-12.
  - Note: Also 300 connection requests per IP in 5 minutes.
- WebSocket messages a second: 10 messages per second
  - Scope: Per WebSocket connection, counting ping, login, subscribe and unsubscribe messages
  - Status: verified. Source: [bitget.com](https://www.bitget.com/docs/uta/quick-start), checked 2026-10-12.
  - Note: A connection that sends more is disconnected, and an IP that is disconnected repeatedly may be blocked.
- WebSocket subscription requests an hour: 240 subscription requests per hour
  - Scope: Per WebSocket connection
  - Status: verified. Source: [bitget.com](https://www.bitget.com/docs/uta/quick-start), checked 2026-10-12.
- Concurrent WebSocket channel subscriptions: 1,000 channel subscriptions
  - Scope: Per WebSocket connection
  - Status: verified. Source: [bitget.com](https://www.bitget.com/docs/uta/quick-start), checked 2026-10-12.
  - Note: Bitget recommends fewer than 50 channels on one connection.

## Related Bitget messages: Public channels

- [books](https://openbrokerapi.com/brokers/bitget/messages/books): Order book depth for one symbol. The topic chooses the depth: books for every level, books1 for 1, books5 for 5 and books50 for 50. books and books50 send a snapshot first and then incremental updates, while books1 and books5 send a snapshot every time.
- [publicTrade](https://openbrokerapi.com/brokers/bitget/messages/publictrade): The public trades of one symbol, pushed in real time: the price, the size, the side and the time of each fill.
- [ticker](https://openbrokerapi.com/brokers/bitget/messages/ticker): The latest price of one symbol with its best bid and ask and its 24 hour figures. Bitget says updates are pushed every 200 ms while the market is changing.

## More on Bitget

- [All Bitget messages](https://openbrokerapi.com/brokers/bitget/messages): 10 documented here, grouped by what they do.
- [Bitget API page](https://openbrokerapi.com/brokers/bitget): The full record: access, authentication, limits and the source for each.

## Licence and how to cite

The records behind this page are all rights reserved. This file is the page itself, at its own address, in another format. It is not part of the CC BY 4.0 downloads listed at https://openbrokerapi.com/data. Quote from it with a link to the page.

Cite as: Bitget kline. Broker API Hub, https://openbrokerapi.com/brokers/bitget/messages/kline, newest check 2026-10-12.

Where you rely on a single figure, cite the source and the checked date printed beside it as well. Where this page and a broker's own documentation differ, the documentation wins.
