Closed Orders
List terminal-state futures orders (EXECUTED, PARTIALLY_EXECUTED, CANCELLED).
HTTP
| Method | POST |
| Endpoint | /trade/api/v2/futures/orders/closed |
| Rate limit | 20 requests per 60 seconds |
Request Parameters
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
exchange | string | Yes | EXCHANGE_2. |
symbol | string | No | Filter to a single symbol (e.g. BTCUSDT). |
status | string | No | Filter to a specific terminal status. |
limit | integer | No | Page size. Maximum 50. |
from_time | integer | No | Filter: orders created at/after this timestamp (Unix ms). |
to_time | integer | No | Filter: orders created at/before this timestamp (Unix ms). |
Time window
The difference between from_time and to_time cannot exceed 7 days. If you omit both, you get the latest 50 orders from the last 7 days.
To page through more, use the cursor returned in the response as the next call's to_time.
Example
- Python
- Java
- Go
- Node.js
import requests
body = {"exchange": "EXCHANGE_2", "symbol": "btcusdt", "limit": 10}
headers, path = sign_request("POST", "/trade/api/v2/futures/orders/closed")
response = requests.post(BASE_URL + path, headers=headers, json=body)
print(response.json())
HashMap<String, Object> body = new HashMap<>();
body.put("exchange", "EXCHANGE_2");
body.put("symbol", "btcusdt");
body.put("limit", 10);
HttpResponse<String> resp = client.send(
"POST", "/trade/api/v2/futures/orders/closed", null, body);
System.out.println(resp.body());
body := map[string]any{
"exchange": "EXCHANGE_2",
"symbol": "btcusdt",
"limit": 10,
}
bodyJSON, _ := json.Marshal(body)
headers, p, err := SignRequest("POST", "/trade/api/v2/futures/orders/closed", nil)
if err != nil { panic(err) }
req, _ := http.NewRequest("POST", BaseURL+p, bytes.NewReader(bodyJSON))
for k, v := range headers { req.Header.Set(k, v) }
resp, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
out, _ := io.ReadAll(resp.Body)
fmt.Println(string(out))
const {signRequest, BASE_URL} = require('./reference-client');
const body = {"exchange": "EXCHANGE_2", "symbol": "btcusdt", "limit": 10};
const {headers, path} = signRequest('POST', '/trade/api/v2/futures/orders/closed');
const r = await fetch(BASE_URL + path, {
method: 'POST',
headers,
body: JSON.stringify(body),
});
console.log(await r.json());
Response
Same shape as Open Orders — data.orders array of order objects, plus a data.cursor pagination marker.
{
"data": {
"orders": [
{
"order_id": "01936be4-9e37-7487-8e31-20fede6ef271",
"exchange": "EXCHANGE_2",
"symbol": "BTCUSDT",
"side": "BUY",
"status": "CANCELLED",
"order_type": "LIMIT",
"quantity": "160",
"exec_quantity": "0",
"price": "80000",
"avg_execution_price": "0",
"execution_fee": "0.1051",
"realised_pnl": "0",
"reduce_only": false,
"created_at": 1732681965292,
"updated_at": 1732681965292
}
],
"cursor": 1732616972834
}
}