topstepx-api 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +132 -132
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [2.0.1] - 2026-02-23
9
+
10
+ ### Fixed
11
+
12
+ - Fixed README.md and MIGRATION.md to use correct `Interface`/`Enum` suffixed type names in all code examples and type references.
13
+ - Added MIGRATION.md to package distribution and git tracking.
14
+
8
15
  ## [2.0.0] - 2026-02-15
9
16
 
10
17
  ### 🚨 BREAKING CHANGES
package/README.md CHANGED
@@ -31,7 +31,7 @@ Get your API key from your TopstepX account settings.
31
31
  ## Quick Start
32
32
 
33
33
  ```typescript
34
- import { TopstepXClient, OrderType, OrderSide } from 'topstepx-api';
34
+ import { TopstepXClient, OrderTypeEnum, OrderSideEnum } from 'topstepx-api';
35
35
 
36
36
  const client = new TopstepXClient({
37
37
  username: process.env.TOPSTEP_USERNAME!,
@@ -48,8 +48,8 @@ console.log('Accounts:', response.accounts);
48
48
  const order = await client.orders.place({
49
49
  accountId: response.accounts[0].id,
50
50
  contractId: 'CON.F.US.ENQ.M25',
51
- type: OrderType.Market,
52
- side: OrderSide.Buy,
51
+ type: OrderTypeEnum.Market,
52
+ side: OrderSideEnum.Buy,
53
53
  size: 1,
54
54
  });
55
55
  console.log('Order placed:', order.orderId);
@@ -110,15 +110,15 @@ const response = await client.accounts.search({
110
110
  onlyActiveAccounts: boolean;
111
111
  });
112
112
 
113
- // Returns: SearchAccountsResponse
114
- interface SearchAccountsResponse {
115
- accounts: Account[];
113
+ // Returns: SearchAccountsResponseInterface
114
+ interface SearchAccountsResponseInterface {
115
+ accounts: AccountInterface[];
116
116
  success: boolean;
117
117
  errorCode: number;
118
118
  errorMessage: string | null;
119
119
  }
120
120
 
121
- interface Account {
121
+ interface AccountInterface {
122
122
  id: number;
123
123
  name: string;
124
124
  canTrade: boolean;
@@ -137,13 +137,13 @@ Access via `client.orders`
137
137
  Place a new order.
138
138
 
139
139
  ```typescript
140
- import { OrderType, OrderSide } from 'topstepx-api';
140
+ import { OrderTypeEnum, OrderSideEnum } from 'topstepx-api';
141
141
 
142
142
  const result = await client.orders.place({
143
143
  accountId: number;
144
144
  contractId: string;
145
- type: OrderType; // Market, Limit, Stop, StopLimit
146
- side: OrderSide; // Buy, Sell
145
+ type: OrderTypeEnum; // Market, Limit, Stop, StopLimit
146
+ side: OrderSideEnum; // Buy, Sell
147
147
  size: number;
148
148
  limitPrice?: number; // Required for Limit/StopLimit
149
149
  stopPrice?: number; // Required for Stop/StopLimit
@@ -152,8 +152,8 @@ const result = await client.orders.place({
152
152
  linkedOrderId?: number; // Optional linked order (OCO)
153
153
  });
154
154
 
155
- // Returns: PlaceOrderResponse
156
- interface PlaceOrderResponse {
155
+ // Returns: PlaceOrderResponseInterface
156
+ interface PlaceOrderResponseInterface {
157
157
  orderId: number;
158
158
  success: boolean;
159
159
  errorCode: number;
@@ -171,8 +171,8 @@ const response = await client.orders.cancel({
171
171
  orderId: number;
172
172
  });
173
173
 
174
- // Returns: CancelOrderResponse
175
- interface CancelOrderResponse {
174
+ // Returns: CancelOrderResponseInterface
175
+ interface CancelOrderResponseInterface {
176
176
  success: boolean;
177
177
  errorCode: number;
178
178
  errorMessage: string | null;
@@ -193,8 +193,8 @@ const response = await client.orders.modify({
193
193
  trailPrice?: number;
194
194
  });
195
195
 
196
- // Returns: ModifyOrderResponse
197
- interface ModifyOrderResponse {
196
+ // Returns: ModifyOrderResponseInterface
197
+ interface ModifyOrderResponseInterface {
198
198
  success: boolean;
199
199
  errorCode: number;
200
200
  errorMessage: string | null;
@@ -212,23 +212,23 @@ const response = await client.orders.search({
212
212
  endTimestamp?: string;
213
213
  });
214
214
 
215
- // Returns: SearchOrdersResponse
216
- interface SearchOrdersResponse {
217
- orders: Order[];
215
+ // Returns: SearchOrdersResponseInterface
216
+ interface SearchOrdersResponseInterface {
217
+ orders: OrderInterface[];
218
218
  success: boolean;
219
219
  errorCode: number;
220
220
  errorMessage: string | null;
221
221
  }
222
222
 
223
- interface Order {
223
+ interface OrderInterface {
224
224
  id: number;
225
225
  accountId: number;
226
226
  contractId: string;
227
227
  creationTimestamp: string;
228
228
  updateTimestamp: string | null;
229
- status: OrderStatus;
230
- type: OrderType;
231
- side: OrderSide;
229
+ status: OrderStatusEnum;
230
+ type: OrderTypeEnum;
231
+ side: OrderSideEnum;
232
232
  size: number;
233
233
  limitPrice: number | null;
234
234
  stopPrice: number | null;
@@ -244,9 +244,9 @@ const response = await client.orders.searchOpen({
244
244
  accountId: number;
245
245
  });
246
246
 
247
- // Returns: SearchOpenOrdersResponse
248
- interface SearchOpenOrdersResponse {
249
- orders: Order[];
247
+ // Returns: SearchOpenOrdersResponseInterface
248
+ interface SearchOpenOrdersResponseInterface {
249
+ orders: OrderInterface[];
250
250
  success: boolean;
251
251
  errorCode: number;
252
252
  errorMessage: string | null;
@@ -268,20 +268,20 @@ const response = await client.positions.searchOpen({
268
268
  accountId: number;
269
269
  });
270
270
 
271
- // Returns: SearchOpenPositionsResponse
272
- interface SearchOpenPositionsResponse {
273
- positions: Position[];
271
+ // Returns: SearchOpenPositionsResponseInterface
272
+ interface SearchOpenPositionsResponseInterface {
273
+ positions: PositionInterface[];
274
274
  success: boolean;
275
275
  errorCode: number;
276
276
  errorMessage: string | null;
277
277
  }
278
278
 
279
- interface Position {
279
+ interface PositionInterface {
280
280
  id: number;
281
281
  accountId: number;
282
282
  contractId: string;
283
283
  creationTimestamp: string;
284
- type: PositionType; // Long, Short
284
+ type: PositionTypeEnum; // Long, Short
285
285
  size: number;
286
286
  averagePrice: number;
287
287
  }
@@ -297,8 +297,8 @@ const response = await client.positions.close({
297
297
  contractId: string;
298
298
  });
299
299
 
300
- // Returns: ClosePositionResponse
301
- interface ClosePositionResponse {
300
+ // Returns: ClosePositionResponseInterface
301
+ interface ClosePositionResponseInterface {
302
302
  success: boolean;
303
303
  errorCode: number;
304
304
  errorMessage: string | null;
@@ -316,8 +316,8 @@ const response = await client.positions.partialClose({
316
316
  size: number; // Number of contracts to close
317
317
  });
318
318
 
319
- // Returns: PartialClosePositionResponse
320
- interface PartialClosePositionResponse {
319
+ // Returns: PartialClosePositionResponseInterface
320
+ interface PartialClosePositionResponseInterface {
321
321
  success: boolean;
322
322
  errorCode: number;
323
323
  errorMessage: string | null;
@@ -341,15 +341,15 @@ const response = await client.trades.search({
341
341
  endTimestamp: string;
342
342
  });
343
343
 
344
- // Returns: SearchTradesResponse
345
- interface SearchTradesResponse {
346
- trades: Trade[];
344
+ // Returns: SearchTradesResponseInterface
345
+ interface SearchTradesResponseInterface {
346
+ trades: TradeInterface[];
347
347
  success: boolean;
348
348
  errorCode: number;
349
349
  errorMessage: string | null;
350
350
  }
351
351
 
352
- interface Trade {
352
+ interface TradeInterface {
353
353
  id: number;
354
354
  accountId: number;
355
355
  contractId: string;
@@ -357,7 +357,7 @@ interface Trade {
357
357
  price: number;
358
358
  profitAndLoss: number | null;
359
359
  fees: number;
360
- side: OrderSide;
360
+ side: OrderSideEnum;
361
361
  size: number;
362
362
  voided: boolean;
363
363
  orderId: number;
@@ -380,15 +380,15 @@ const response = await client.contracts.search({
380
380
  live: boolean; // true for live, false for sim
381
381
  });
382
382
 
383
- // Returns: SearchContractsResponse
384
- interface SearchContractsResponse {
385
- contracts: Contract[];
383
+ // Returns: SearchContractsResponseInterface
384
+ interface SearchContractsResponseInterface {
385
+ contracts: ContractInterface[];
386
386
  success: boolean;
387
387
  errorCode: number;
388
388
  errorMessage: string | null;
389
389
  }
390
390
 
391
- interface Contract {
391
+ interface ContractInterface {
392
392
  id: string;
393
393
  name: string;
394
394
  description: string;
@@ -408,9 +408,9 @@ const response = await client.contracts.searchById({
408
408
  live: boolean;
409
409
  });
410
410
 
411
- // Returns: SearchContractByIdResponse
412
- interface SearchContractByIdResponse {
413
- contract: Contract | null;
411
+ // Returns: SearchContractByIdResponseInterface
412
+ interface SearchContractByIdResponseInterface {
413
+ contract: ContractInterface | null;
414
414
  success: boolean;
415
415
  errorCode: number;
416
416
  errorMessage: string | null;
@@ -428,28 +428,28 @@ Access via `client.history`
428
428
  Get historical OHLCV bars.
429
429
 
430
430
  ```typescript
431
- import { BarUnit } from 'topstepx-api';
431
+ import { BarUnitEnum } from 'topstepx-api';
432
432
 
433
433
  const response = await client.history.retrieveBars({
434
434
  contractId: string;
435
435
  live: boolean;
436
436
  startTime: string; // ISO 8601 format
437
437
  endTime: string;
438
- unit: BarUnit; // Second, Minute, Hour, Day, Week, Month
438
+ unit: BarUnitEnum; // Second, Minute, Hour, Day, Week, Month
439
439
  unitNumber: number; // e.g., 5 for 5-minute bars
440
440
  limit: number; // Max bars to return
441
441
  includePartialBar: boolean;
442
442
  });
443
443
 
444
- // Returns: RetrieveBarsResponse
445
- interface RetrieveBarsResponse {
446
- bars: Bar[];
444
+ // Returns: RetrieveBarsResponseInterface
445
+ interface RetrieveBarsResponseInterface {
446
+ bars: BarInterface[];
447
447
  success: boolean;
448
448
  errorCode: number;
449
449
  errorMessage: string | null;
450
450
  }
451
451
 
452
- interface Bar {
452
+ interface BarInterface {
453
453
  t: string; // timestamp
454
454
  o: number; // open
455
455
  h: number; // high
@@ -518,7 +518,7 @@ client.marketHub.on('depth', ({ contractId, data }) => {
518
518
  #### Event Types
519
519
 
520
520
  ```typescript
521
- interface MarketQuote {
521
+ interface RealtimeMarketQuoteEventInterface {
522
522
  symbol: string;
523
523
  lastPrice: number;
524
524
  bestBid: number;
@@ -530,7 +530,7 @@ interface MarketQuote {
530
530
  timestamp: string;
531
531
  }
532
532
 
533
- interface MarketTrade {
533
+ interface RealtimeMarketTradeEventInterface {
534
534
  symbolId: string;
535
535
  price: number;
536
536
  timestamp: string;
@@ -538,7 +538,7 @@ interface MarketTrade {
538
538
  volume: number;
539
539
  }
540
540
 
541
- interface MarketDepth {
541
+ interface RealtimeMarketDepthEventInterface {
542
542
  price: number;
543
543
  volume: number;
544
544
  currentVolume: number;
@@ -603,43 +603,43 @@ client.userHub.on('account', (account) => {
603
603
 
604
604
  ```typescript
605
605
  import {
606
- OrderType,
607
- OrderSide,
608
- OrderStatus,
609
- BarUnit,
610
- PositionType,
611
- TradeType,
606
+ OrderTypeEnum,
607
+ OrderSideEnum,
608
+ OrderStatusEnum,
609
+ BarUnitEnum,
610
+ PositionTypeEnum,
611
+ TradeTypeEnum,
612
612
  } from 'topstepx-api';
613
613
 
614
- // OrderType
615
- OrderType.Limit // 1
616
- OrderType.Market // 2
617
- OrderType.Stop // 3
618
- OrderType.StopLimit // 4
619
-
620
- // OrderSide
621
- OrderSide.Buy // 0
622
- OrderSide.Sell // 1
623
-
624
- // OrderStatus
625
- OrderStatus.Pending // 0
626
- OrderStatus.Working // 1
627
- OrderStatus.Filled // 2
628
- OrderStatus.Cancelled // 3
629
- OrderStatus.Rejected // 4
630
- OrderStatus.PartiallyFilled // 5
631
-
632
- // BarUnit
633
- BarUnit.Second // 1
634
- BarUnit.Minute // 2
635
- BarUnit.Hour // 3
636
- BarUnit.Day // 4
637
- BarUnit.Week // 5
638
- BarUnit.Month // 6
639
-
640
- // PositionType
641
- PositionType.Long // 0
642
- PositionType.Short // 1
614
+ // OrderTypeEnum
615
+ OrderTypeEnum.Limit // 1
616
+ OrderTypeEnum.Market // 2
617
+ OrderTypeEnum.Stop // 3
618
+ OrderTypeEnum.StopLimit // 4
619
+
620
+ // OrderSideEnum
621
+ OrderSideEnum.Buy // 0
622
+ OrderSideEnum.Sell // 1
623
+
624
+ // OrderStatusEnum
625
+ OrderStatusEnum.Pending // 0
626
+ OrderStatusEnum.Working // 1
627
+ OrderStatusEnum.Filled // 2
628
+ OrderStatusEnum.Cancelled // 3
629
+ OrderStatusEnum.Rejected // 4
630
+ OrderStatusEnum.PartiallyFilled // 5
631
+
632
+ // BarUnitEnum
633
+ BarUnitEnum.Second // 1
634
+ BarUnitEnum.Minute // 2
635
+ BarUnitEnum.Hour // 3
636
+ BarUnitEnum.Day // 4
637
+ BarUnitEnum.Week // 5
638
+ BarUnitEnum.Month // 6
639
+
640
+ // PositionTypeEnum
641
+ PositionTypeEnum.Long // 0
642
+ PositionTypeEnum.Short // 1
643
643
  ```
644
644
 
645
645
  ---
@@ -683,9 +683,9 @@ All errors extend `TopstepXError` and include:
683
683
  ```typescript
684
684
  import {
685
685
  TopstepXClient,
686
- OrderType,
687
- OrderSide,
688
- BarUnit,
686
+ OrderTypeEnum,
687
+ OrderSideEnum,
688
+ BarUnitEnum,
689
689
  ApiError,
690
690
  } from 'topstepx-api';
691
691
  import 'dotenv/config';
@@ -723,7 +723,7 @@ async function main() {
723
723
  live: false,
724
724
  startTime: startTime.toISOString(),
725
725
  endTime: endTime.toISOString(),
726
- unit: BarUnit.Hour,
726
+ unit: BarUnitEnum.Hour,
727
727
  unitNumber: 1,
728
728
  limit: 24,
729
729
  includePartialBar: false,
@@ -747,8 +747,8 @@ async function main() {
747
747
  const order = await client.orders.place({
748
748
  accountId: account.id,
749
749
  contractId: esContract!.id,
750
- type: OrderType.Limit,
751
- side: OrderSide.Buy,
750
+ type: OrderTypeEnum.Limit,
751
+ side: OrderSideEnum.Buy,
752
752
  size: 1,
753
753
  limitPrice: barsResponse.bars[barsResponse.bars.length - 1].c - 10, // 10 points below last close
754
754
  });
@@ -795,42 +795,42 @@ import type {
795
795
  TopstepXClientConfig,
796
796
  TopstepXClientEvents,
797
797
 
798
- // REST shared
799
- Account,
800
- Order,
801
- Position,
802
- Trade,
803
- Contract,
804
- Bar,
805
-
806
- // Response shared
807
- SearchAccountsResponse,
808
- PlaceOrderResponse,
809
- CancelOrderResponse,
810
- ModifyOrderResponse,
811
- SearchOrdersResponse,
812
- SearchOpenOrdersResponse,
813
- SearchOpenPositionsResponse,
814
- ClosePositionResponse,
815
- PartialClosePositionResponse,
816
- SearchTradesResponse,
817
- SearchContractsResponse,
818
- SearchContractByIdResponse,
819
- RetrieveBarsResponse,
820
-
821
- // Request shared
822
- PlaceOrderRequest,
823
- ModifyOrderRequest,
798
+ // REST domain models
799
+ AccountInterface,
800
+ OrderInterface,
801
+ PositionInterface,
802
+ TradeInterface,
803
+ ContractInterface,
804
+ BarInterface,
805
+
806
+ // Response interfaces
807
+ SearchAccountsResponseInterface,
808
+ PlaceOrderResponseInterface,
809
+ CancelOrderResponseInterface,
810
+ ModifyOrderResponseInterface,
811
+ SearchOrdersResponseInterface,
812
+ SearchOpenOrdersResponseInterface,
813
+ SearchOpenPositionsResponseInterface,
814
+ ClosePositionResponseInterface,
815
+ PartialClosePositionResponseInterface,
816
+ SearchTradesResponseInterface,
817
+ SearchContractsResponseInterface,
818
+ SearchContractByIdResponseInterface,
819
+ RetrieveBarsResponseInterface,
820
+
821
+ // Request interfaces
822
+ PlaceOrderRequestInterface,
823
+ ModifyOrderRequestInterface,
824
824
  SearchOrdersRequestInterface,
825
- RetrieveBarsRequest,
826
-
827
- // WebSocket shared
828
- MarketQuote,
829
- MarketTrade,
830
- MarketDepth,
831
- OrderUpdate,
832
- PositionUpdate,
833
- TradeUpdate,
825
+ RetrieveBarsRequestInterface,
826
+
827
+ // WebSocket interfaces
828
+ RealtimeMarketQuoteEventInterface,
829
+ RealtimeMarketTradeEventInterface,
830
+ RealtimeMarketDepthEventInterface,
831
+ RealtimeUserOrderUpdateInterface,
832
+ RealtimeUserPositionUpdateInterface,
833
+ RealtimeUserTradeUpdateInterface,
834
834
  } from 'topstepx-api';
835
835
  ```
836
836
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "topstepx-api",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Framework-agnostic TypeScript client for the TopstepX trading API with REST and WebSocket support",
5
5
  "author": "Hunter Evanoff",
6
6
  "license": "MIT",