diff --git a/Bitget.Net.UnitTests/Bitget.Net.UnitTests.csproj b/Bitget.Net.UnitTests/Bitget.Net.UnitTests.csproj
index 7894ec5..a412cc5 100644
--- a/Bitget.Net.UnitTests/Bitget.Net.UnitTests.csproj
+++ b/Bitget.Net.UnitTests/Bitget.Net.UnitTests.csproj
@@ -6,7 +6,7 @@
false
-
+
diff --git a/Bitget.Net.UnitTests/Endpoints/Unified/Trading/GetClosedOrders.txt b/Bitget.Net.UnitTests/Endpoints/Unified/Trading/GetClosedOrders.txt
new file mode 100644
index 0000000..05987d2
--- /dev/null
+++ b/Bitget.Net.UnitTests/Endpoints/Unified/Trading/GetClosedOrders.txt
@@ -0,0 +1,54 @@
+GET
+/api/v3/trade/history-orders
+true
+UriParams: {"category": "SPOT"}
+{
+ "code": "00000",
+ "msg": "success",
+ "requestTime": 1730186730084,
+ "data": {
+ "list": [
+ {
+ "orderId": "111111111111111111",
+ "clientOid": "111111111111111111",
+ "category": "USDT-FUTURES",
+ "symbol": "BTCUSDT",
+ "orderType": "limit",
+ "side": "sell",
+ "price": "49534.4",
+ "qty": "0.429",
+ "amount": "0",
+ "cumExecQty": "0.429",
+ "cumExecValue": "21250.2929",
+ "avgPrice": "49534.4",
+ "timeInForce": "gtc",
+ "orderStatus": "filled",
+ "posSide": "long",
+ "holdMode": "hedge_mode",
+ "delegateType": "normal",
+ "reduceOnly": "NO",
+ "marginMode": "crossed",
+ "stpMode": "none",
+ "takeProfit": "",
+ "stopLoss": "",
+ "tpTriggerBy": "",
+ "slTriggerBy": "",
+ "tpOrderType": "",
+ "slOrderType": "",
+ "tpLimitPrice": "",
+ "slLimitPrice": "",
+ "feeDetail": [
+ {
+ "feeCoin": "USDT",
+ "fee": "4.2500586"
+ }
+ ],
+ "cancelReason": "normal_cancel",
+ "execType": "liquidation",
+ "createdTime": "1730181468493",
+ "updatedTime": "1730181468493"
+ }
+ ],
+ "cursor": "1233319323918499840"
+ }
+}
\ No newline at end of file
diff --git a/Bitget.Net.UnitTests/RestRequestTests.cs b/Bitget.Net.UnitTests/RestRequestTests.cs
index a9e0ccf..370562c 100644
--- a/Bitget.Net.UnitTests/RestRequestTests.cs
+++ b/Bitget.Net.UnitTests/RestRequestTests.cs
@@ -298,6 +298,7 @@ public async Task ValidateUnifiedTradingCalls()
await tester.ValidateAsync(client => client.UnifiedApi.Trading.ClosePositionsAsync(ProductCategory.UsdtFutures), "ClosePositions", nestedJsonProperty: "data.list");
await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetOrderAsync(), "GetOrder", nestedJsonProperty: "data", ignoreProperties: ["reduceOnly"]);
await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetOpenOrdersAsync(), "GetOpenOrders", nestedJsonProperty: "data", ignoreProperties: ["reduceOnly"]);
+ await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetClosedOrdersAsync(ProductCategory.Spot), "GetClosedOrders", nestedJsonProperty: "data");
await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetUserTradesAsync(), "GetUserTrades", nestedJsonProperty: "data", ignoreProperties: ["isRPI"]);
await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetPositionsAsync(ProductCategory.UsdtFutures), "GetPositions", nestedJsonProperty: "data.list");
await tester.ValidateAsync(client => client.UnifiedApi.Trading.GetPositionHistoryAsync(ProductCategory.UsdtFutures), "GetPositionHistory", nestedJsonProperty: "data");
diff --git a/Bitget.Net/Clients/UnifiedApi/BitgetRestClientUnifiedApiTrading.cs b/Bitget.Net/Clients/UnifiedApi/BitgetRestClientUnifiedApiTrading.cs
index 9fc8601..b3123f2 100644
--- a/Bitget.Net/Clients/UnifiedApi/BitgetRestClientUnifiedApiTrading.cs
+++ b/Bitget.Net/Clients/UnifiedApi/BitgetRestClientUnifiedApiTrading.cs
@@ -205,6 +205,32 @@ public async Task> GetOpenOrdersAsync(
#endregion
+ #region Get Closed Orders (history)
+
+ ///
+ public async Task> GetClosedOrdersAsync(
+ ProductCategory category,
+ string? orderId = null,
+ DateTime? startTime = null,
+ DateTime? endTime = null,
+ int? limit = null,
+ string? cursor = null,
+ CancellationToken ct = default)
+ {
+ var parameters = new Parameters(BitgetExchange._parameterSerializationSettings);
+ parameters.Add("category", category);
+ parameters.Add("orderId", orderId);
+ parameters.Add("startTime", startTime);
+ parameters.Add("endTime", endTime);
+ parameters.Add("limit", limit);
+ parameters.Add("cursor", cursor);
+ var request = _definitions.GetOrCreate(HttpMethod.Get, _baseClient.BaseAddress, "/api/v3/trade/history-orders", BitgetExchange.RateLimiter.Overall, 1, true, limitGuard: new SingleLimitGuard(20, TimeSpan.FromSeconds(1), RateLimitWindowType.Sliding));
+ var result = await _baseClient.SendAsync(request, parameters, ct).ConfigureAwait(false);
+ return result;
+ }
+
+ #endregion
+
#region Get User Trades
///
diff --git a/Bitget.Net/Interfaces/Clients/UnifiedApi/IBitgetRestClientUnifiedApiTrading.cs b/Bitget.Net/Interfaces/Clients/UnifiedApi/IBitgetRestClientUnifiedApiTrading.cs
index 3ee8f12..dc593af 100644
--- a/Bitget.Net/Interfaces/Clients/UnifiedApi/IBitgetRestClientUnifiedApiTrading.cs
+++ b/Bitget.Net/Interfaces/Clients/UnifiedApi/IBitgetRestClientUnifiedApiTrading.cs
@@ -182,6 +182,31 @@ Task> GetOpenOrdersAsync(
string? cursor = null,
CancellationToken ct = default);
+ ///
+ /// Get order history
+ ///
+ /// Docs:
+ ///
+ /// Endpoint:
+ /// GET /api/v3/trade/history-orders
+ ///
+ ///
+ /// ["category"] Category
+ /// ["symbol"] Filter by symbol, for example `ETHUSDT`
+ /// ["startTime"] Filter by start time
+ /// ["endTime"] Filter by end time
+ /// ["limit"] Max number of results, max 100
+ /// ["cursor"] Pagination cursor
+ /// Cancellation token
+ Task> GetClosedOrdersAsync(
+ ProductCategory category,
+ string? symbol = null,
+ DateTime? startTime = null,
+ DateTime? endTime = null,
+ int? limit = null,
+ string? cursor = null,
+ CancellationToken ct = default);
+
///
/// Get user trades
///