# Bitget fill

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/fill, 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.

The fills of the unified trading account in real time. Bitget says nothing is pushed on first subscribing, and that a push follows when a spot, leveraged or futures order is filled.

- Message: `fill`
- Interface: Bitget WebSocket API
- Group: Private channels
- Status: verified. Source: [bitget.com](https://www.bitget.com/docs/uta/websocket/private/Fill-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: `fill`
- Direction: Subscription, opened by the client and then fed by the server
- Subscribed to as: `fill`
- Carried by: WebSocket. This channel is in the private section of Bitget's WebSocket documentation, so the connection has to send login first. 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.
- Private channel: `wss://ws.bitget.com/v3/ws/private`
- Private channel, demo trading: `wss://wspap.bitget.com/v3/ws/private`

## Fields

- `op` (type String, required or not: not stated): subscribe to start the channel, unsubscribe to stop it.
- `args` (type List\<Object>, required or not: not stated): The channels to act on. Each entry names one.
- `args[].instType` (type String, required or not: not stated): Always UTA, for the unified trading account.
- `args[].topic` (type String, required or not: not stated): Always fill.

## What arrives

`fill`: 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.
- `data` (type List\<Object>, required or not: not stated): The fills.
- `data[].category` (type String, required or not: not stated): The product type: spot, margin, usdt-futures, coin-futures or usdc-futures.
- `data[].orderId` (type String, required or not: not stated): The id of the order.
- `data[].clientOid` (type String, required or not: not stated): The client's own id for the order.
- `data[].execId` (type String, required or not: not stated): The id of the fill.
- `data[].execLinkId` (type String, required or not: not stated): An id that links related executions.
- `data[].symbol` (type String, required or not: not stated): The symbol.
- `data[].orderType` (type String, required or not: not stated): limit or market.
- `data[].side` (type String, required or not: not stated): buy or sell.
- `data[].holdSide` (type String, required or not: not stated): The direction of the position: long or short.
- `data[].tradeSide` (type String, required or not: not stated): open or close.
- `data[].execPrice` (type String, required or not: not stated): The fill price.
- `data[].execQty` (type String, required or not: not stated): The quantity filled, in the base coin.
- `data[].execValue` (type String, required or not: not stated): The value filled, in the quote coin.
- `data[].execPnl` (type String, required or not: not stated): The profit and loss of the execution.
- `data[].tradeScope` (type String, required or not: not stated): taker or maker.
- `data[].feeDetail` (type String, required or not: not stated): The fees. Each entry holds a feeCoin and a fee.
- `data[].execTime` (type String, required or not: not stated): When the matching engine made the fill, as Unix time in milliseconds.
- `data[].updatedTime` (type String, required or not: not stated): When the fill was updated, as Unix time in milliseconds.
- `data[].isRPI` (type String, required or not: not stated): yes where it is an RPI fill, no where it is not.

## 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": "UTA",
      "topic": "fill"
    }
  ]
}
```

## 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: Private channels

- [account](https://openbrokerapi.com/brokers/bitget/messages/account): The unified trading account: equity, margin figures and the balance of each coin. Bitget says data is pushed on first subscribing, when orders are filled, when funds are settled and when a balance changes.
- [order](https://openbrokerapi.com/brokers/bitget/messages/order): The orders of the unified trading account. Bitget says nothing is pushed on first subscribing, and that a push follows when a spot, margin or futures order is placed, filled or cancelled.
- [position](https://openbrokerapi.com/brokers/bitget/messages/position): The positions of the unified trading account. Bitget says data is pushed on first subscribing, and then incrementally when futures positions are opened or closed and when orders that close a position are placed, changed or cancelled.

## 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 fill. Broker API Hub, https://openbrokerapi.com/brokers/bitget/messages/fill, 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.
