@0xmonaco/types 1.0.70 → 1.0.73

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.
@@ -621,9 +621,11 @@ export interface paths {
621
621
  * Refresh session expiry
622
622
  * @description Refresh session expiry.
623
623
  *
624
- * Extends the expiration of the current session. The request must be signed
624
+ * Refreshes the expiration of the current session. The request must be signed
625
625
  * by the session private key (RFC 9421 or legacy X-Monaco-* headers); no body is
626
- * required.
626
+ * required. Delegated sessions require an active, unexpired delegation;
627
+ * their resulting expiry is capped by the delegation expiry and may move
628
+ * earlier if the owner shortened that delegation.
627
629
  */
628
630
  post: operations["refresh_session"];
629
631
  delete?: never;
@@ -704,6 +706,74 @@ export interface paths {
704
706
  patch?: never;
705
707
  trace?: never;
706
708
  };
709
+ "/api/v1/buildercodes/builder-fee": {
710
+ parameters: {
711
+ query?: never;
712
+ header?: never;
713
+ path?: never;
714
+ cookie?: never;
715
+ };
716
+ get?: never;
717
+ /**
718
+ * Set your builder fee
719
+ * @description Set this application's builder fee.
720
+ *
721
+ * The builder fee is an additional taker fee, in basis points, that this
722
+ * frontend charges its own users on top of Monaco's fee. The application is
723
+ * taken from the authenticated session; the caller must be the application's
724
+ * BuilderCodes payout wallet, and delegated-agent sessions are refused.
725
+ *
726
+ * `bps` must be between 0 and the current builder-fee cap
727
+ * (`builderFeeCapBps` on `GetBuildercodesConfig`) inclusive. The application
728
+ * must be enrolled in BuilderCodes with a payout address. At most two changes
729
+ * are allowed in any rolling 24 hours; changes Monaco makes on the
730
+ * application's behalf do not count. Setting the fee it already has is a
731
+ * no-op that succeeds and does not use up a change.
732
+ *
733
+ * The fee can be set while builder fees are switched off
734
+ * (`builderFeeEnabled` false): it is stored and nothing is charged until they
735
+ * are switched on. Once charged, a new fee applies to orders placed after the
736
+ * change within a few seconds; resting orders keep the fee they were placed
737
+ * with.
738
+ *
739
+ * A refused change is **HTTP 409** / **FAILED_PRECONDITION** when the
740
+ * application is not enrolled with a payout address or has no changes left
741
+ * (REST adds `details.nextChangeAllowedAt`), and **HTTP 400** /
742
+ * **INVALID_ARGUMENT** when `bps` is above the cap.
743
+ */
744
+ put: operations["set_builder_fee"];
745
+ post?: never;
746
+ delete?: never;
747
+ options?: never;
748
+ head?: never;
749
+ patch?: never;
750
+ trace?: never;
751
+ };
752
+ "/api/v1/buildercodes/builder-fee/changes": {
753
+ parameters: {
754
+ query?: never;
755
+ header?: never;
756
+ path?: never;
757
+ cookie?: never;
758
+ };
759
+ /**
760
+ * List your builder-fee changes
761
+ * @description List this application's builder-fee changes.
762
+ *
763
+ * Newest first, cursor-paginated. Includes every change to this
764
+ * application's builder fee: those its payout wallet made (`BUILDER`) and
765
+ * those Monaco made on its behalf (`ADMIN`). The application is taken from
766
+ * the authenticated session.
767
+ */
768
+ get: operations["list_builder_fee_changes"];
769
+ put?: never;
770
+ post?: never;
771
+ delete?: never;
772
+ options?: never;
773
+ head?: never;
774
+ patch?: never;
775
+ trace?: never;
776
+ };
707
777
  "/api/v1/buildercodes/config": {
708
778
  parameters: {
709
779
  query?: never;
@@ -914,6 +984,36 @@ export interface paths {
914
984
  patch?: never;
915
985
  trace?: never;
916
986
  };
987
+ "/api/v1/copy-trading/follows/close-positions": {
988
+ parameters: {
989
+ query?: never;
990
+ header?: never;
991
+ path?: never;
992
+ cookie?: never;
993
+ };
994
+ get?: never;
995
+ put?: never;
996
+ /**
997
+ * Close all your copy positions
998
+ * @description Close all your copy positions.
999
+ *
1000
+ * Closes the copy positions of every live follow of yours, as
1001
+ * CloseFollowPositions does for one: one batch per follow, the follows
1002
+ * kept, and the same limits (not a flatten guarantee; the follows keep
1003
+ * mirroring). A follow whose stop is in progress is listed in
1004
+ * `stoppingFollowIds` and left to its stop. A follow whose close could not
1005
+ * run is listed in `failedFollows` and the others still close. Never gated
1006
+ * by copy trading being switched off or by an operations block; only a
1007
+ * delegated agent session is refused. Shares CloseFollowPositions' rate
1008
+ * limit.
1009
+ */
1010
+ post: operations["close_all_copy_positions"];
1011
+ delete?: never;
1012
+ options?: never;
1013
+ head?: never;
1014
+ patch?: never;
1015
+ trace?: never;
1016
+ };
917
1017
  "/api/v1/copy-trading/follows/preview": {
918
1018
  parameters: {
919
1019
  query?: never;
@@ -965,6 +1065,41 @@ export interface paths {
965
1065
  patch?: never;
966
1066
  trace?: never;
967
1067
  };
1068
+ "/api/v1/copy-trading/follows/{followId}/close-positions": {
1069
+ parameters: {
1070
+ query?: never;
1071
+ header?: never;
1072
+ path?: never;
1073
+ cookie?: never;
1074
+ };
1075
+ get?: never;
1076
+ put?: never;
1077
+ /**
1078
+ * Close a follow's copy positions
1079
+ * @description Close a follow's copy positions.
1080
+ *
1081
+ * Closes every position in the follow's copy account at market (reduce-only,
1082
+ * immediate-or-cancel) and cancels the resting orders and conditional
1083
+ * orders (TP/SL) on its copy risk buckets (a TWAP cannot run on a copy risk
1084
+ * bucket), but keeps the follow: it stays ACTIVE (or CLOSE_ONLY) and the
1085
+ * leader's next trades keep mirroring. StopFollow is the close-and-stop
1086
+ * path. The proceeds stay in the copy account. Not a flatten guarantee:
1087
+ * on a thin or halted market part of a position can stay open
1088
+ * (`positionsNotClosed`), and a leader trade after the close opens copy
1089
+ * positions again; stop the follow to end the copying. A close is never
1090
+ * gated by copy trading being switched off or by an operations block, and
1091
+ * only a delegated agent session is refused. Both close routes share a
1092
+ * small per-account rate limit (about one close per second, burst 5). The
1093
+ * response is sent once the batch is durably logged; each close's fills
1094
+ * arrive on the order, position and copy channels.
1095
+ */
1096
+ post: operations["close_follow_positions"];
1097
+ delete?: never;
1098
+ options?: never;
1099
+ head?: never;
1100
+ patch?: never;
1101
+ trace?: never;
1102
+ };
968
1103
  "/api/v1/copy-trading/follows/{followId}/leader-positions": {
969
1104
  parameters: {
970
1105
  query?: never;
@@ -989,6 +1124,41 @@ export interface paths {
989
1124
  patch?: never;
990
1125
  trace?: never;
991
1126
  };
1127
+ "/api/v1/copy-trading/follows/{followId}/position-margin": {
1128
+ parameters: {
1129
+ query?: never;
1130
+ header?: never;
1131
+ path?: never;
1132
+ cookie?: never;
1133
+ };
1134
+ get?: never;
1135
+ put?: never;
1136
+ /**
1137
+ * Add margin to a copy position
1138
+ * @description Add margin to a copy position (0XM-2971).
1139
+ *
1140
+ * Moves collateral from the follow's copy account into the margin of its
1141
+ * isolated copy position on one trading pair: the position's margin rises
1142
+ * by exactly `amount`, the copy account's remaining collateral falls by the
1143
+ * same, and your margin account is never touched. It lowers the position's
1144
+ * leverage and moves its liquidation price away; it opens no exposure, so
1145
+ * it works while copy trading is switched off and on a CLOSE_ONLY follow.
1146
+ * There is no margin reduction: a follow exits by being stopped. Follow
1147
+ * writes need a master account session (not a delegated agent or a
1148
+ * sub-account). 404 unless the follow is yours; 409 while it is stopping
1149
+ * or once it is stopped, and when copy trading is not available on the
1150
+ * platform at all (the platform then runs copy trading exits only). It
1151
+ * spends the per-user movement budget withdrawals and collateral transfers
1152
+ * share. It is not idempotent: a retry after a timeout whose first attempt
1153
+ * landed adds the amount twice, so read the follow before retrying.
1154
+ */
1155
+ post: operations["add_follow_position_margin"];
1156
+ delete?: never;
1157
+ options?: never;
1158
+ head?: never;
1159
+ patch?: never;
1160
+ trace?: never;
1161
+ };
992
1162
  "/api/v1/copy-trading/follows/{followId}/stop": {
993
1163
  parameters: {
994
1164
  query?: never;
@@ -1242,7 +1412,9 @@ export interface paths {
1242
1412
  * `ListDelegatedAgentOwners`) and a freshly generated session public key.
1243
1413
  * The new session acts as the owner but records the agent's address for
1244
1414
  * policy enforcement. Requires an active delegation for the (owner, agent)
1245
- * pair.
1415
+ * pair. Session expiry is bounded by the delegation expiry, if set. Every
1416
+ * authenticated request and periodic WebSocket session revalidation requires
1417
+ * the backing delegation to remain active and unexpired.
1246
1418
  */
1247
1419
  post: operations["create_delegated_session"];
1248
1420
  delete?: never;
@@ -1266,8 +1438,9 @@ export interface paths {
1266
1438
  * @description Revoke a delegated agent.
1267
1439
  *
1268
1440
  * Master accounts only. Revokes the delegation identified by
1269
- * `delegated_agent_id`. Existing delegated sessions are not invalidated; only
1270
- * future session creation is blocked.
1441
+ * `delegated_agent_id` and its existing delegated sessions. Subsequent signed
1442
+ * requests and session refresh fail; connected WebSockets lose access at
1443
+ * their next periodic session revalidation. Existing orders are not canceled.
1271
1444
  */
1272
1445
  delete: operations["revoke_delegated_agent"];
1273
1446
  options?: never;
@@ -1360,6 +1533,8 @@ export interface paths {
1360
1533
  /**
1361
1534
  * Get my fee tier and pair schedule
1362
1535
  * @description Return the caller's current fee tier, rolling 14-day volumes, and a pair's schedule.
1536
+ *
1537
+ * Volumes and the tier are wallet-wide: the caller's wallet total across every application.
1363
1538
  */
1364
1539
  get: operations["get_my_fee_tier"];
1365
1540
  put?: never;
@@ -3039,6 +3214,55 @@ export interface components {
3039
3214
  */
3040
3215
  version?: number | null;
3041
3216
  };
3217
+ AddFollowPositionMarginRequest: {
3218
+ /**
3219
+ * Format: uuid
3220
+ * @description The follow's id
3221
+ */
3222
+ followId?: string | null;
3223
+ /**
3224
+ * Format: uuid
3225
+ * @description Trading pair UUID of the copy position to add margin to
3226
+ */
3227
+ tradingPairId?: string | null;
3228
+ /**
3229
+ * @description Margin to add, in quote units: a positive decimal, taken from the follow's copy account
3230
+ * @example 25
3231
+ */
3232
+ amount?: string | null;
3233
+ };
3234
+ AddFollowPositionMarginResponse: {
3235
+ /**
3236
+ * Format: uuid
3237
+ * @description The follow's id
3238
+ */
3239
+ followId?: string | null;
3240
+ /**
3241
+ * Format: uuid
3242
+ * @description Trading pair UUID of the copy position
3243
+ */
3244
+ tradingPairId?: string | null;
3245
+ /**
3246
+ * Format: uuid
3247
+ * @description The copy position's isolated risk bucket
3248
+ */
3249
+ riskBucketId?: string | null;
3250
+ /**
3251
+ * Format: uuid
3252
+ * @description The copy position's id
3253
+ */
3254
+ positionId?: string | null;
3255
+ /**
3256
+ * @description The copy position's margin after the add, in quote units
3257
+ * @example 125
3258
+ */
3259
+ positionMargin?: string | null;
3260
+ /**
3261
+ * @description What the copy account can still put into this position, in quote units, after the add
3262
+ * @example 875
3263
+ */
3264
+ copyAccountAvailable?: string | null;
3265
+ };
3042
3266
  AppUser: {
3043
3267
  /**
3044
3268
  * Format: uuid
@@ -3667,6 +3891,36 @@ export interface components {
3667
3891
  matchResult?: components["schemas"]["MatchResult"];
3668
3892
  error?: components["schemas"]["BatchReplaceError"];
3669
3893
  };
3894
+ BuilderFeeChange: {
3895
+ /**
3896
+ * @description Who made the change: `BUILDER` (this application's payout wallet) or `ADMIN` (Monaco, on the application's behalf).
3897
+ * @example BUILDER
3898
+ * @enum {string|null}
3899
+ */
3900
+ actorType?: "BUILDER" | "ADMIN" | null;
3901
+ /**
3902
+ * @description The lowercase payout wallet address for a `BUILDER` change, or the Monaco operator's email for an `ADMIN` change.
3903
+ * @example 0x0000000000000000000000000000000000000001
3904
+ */
3905
+ actor?: string | null;
3906
+ /**
3907
+ * Format: uint32
3908
+ * @description Builder fee before the change, in basis points.
3909
+ * @example 0
3910
+ */
3911
+ oldBps?: number | null;
3912
+ /**
3913
+ * Format: uint32
3914
+ * @description Builder fee after the change, in basis points.
3915
+ * @example 10
3916
+ */
3917
+ newBps?: number | null;
3918
+ /**
3919
+ * Format: date-time
3920
+ * @description RFC 3339 time of the change.
3921
+ */
3922
+ createdAt?: string | null;
3923
+ };
3670
3924
  BuildercodePayout: {
3671
3925
  /**
3672
3926
  * Format: uuid
@@ -3700,7 +3954,7 @@ export interface components {
3700
3954
  */
3701
3955
  createdAt?: string | null;
3702
3956
  /**
3703
- * @description Payout stream this credit belongs to: `REVENUE_SHARE` (the frontend's share of Monaco's fee) or `BUILDER_FEE` (the frontend's own builder fee, paid by the taker). Both land in the same claimable balance.
3957
+ * @description Payout category for this credit. `REVENUE_SHARE` is active; `BUILDER_FEE` is reserved and is not currently emitted.
3704
3958
  * @example REVENUE_SHARE
3705
3959
  * @enum {string|null}
3706
3960
  */
@@ -3973,6 +4227,37 @@ export interface components {
3973
4227
  /** @description Required when renewing an unexpired lease. Decimal string in JSON. */
3974
4228
  expectedGeneration?: string | null;
3975
4229
  };
4230
+ CloseAllCopyPositionsResponse: {
4231
+ /**
4232
+ * @description Every live follow whose stop is not in progress and whose close ran,
4233
+ * including one with nothing to close (0 orders placed, 0 positions not
4234
+ * closed).
4235
+ */
4236
+ follows?: components["schemas"]["CloseFollowPositionsResponse"][] | null;
4237
+ /** @description Follows whose stop is in progress: their stop closes their positions. */
4238
+ stoppingFollowIds?: string[] | null;
4239
+ /** @description Follows whose close could not run; the other follows still closed. */
4240
+ failedFollows?: components["schemas"]["FollowCloseFailure"][] | null;
4241
+ };
4242
+ CloseFollowPositionsResponse: {
4243
+ /**
4244
+ * Format: uuid
4245
+ * @description The follow's id
4246
+ */
4247
+ followId?: string | null;
4248
+ /**
4249
+ * Format: uint32
4250
+ * @description Reduce-only, immediate-or-cancel close orders placed; each may fill in part
4251
+ * @example 2
4252
+ */
4253
+ closeOrdersPlaced?: number | null;
4254
+ /**
4255
+ * Format: uint32
4256
+ * @description Copy positions still open after the batch (for example a thin or halted market); 0 when the copy account is flat
4257
+ * @example 0
4258
+ */
4259
+ positionsNotClosed?: number | null;
4260
+ };
3976
4261
  ClosePositionRequest: {
3977
4262
  quantity?: string | null;
3978
4263
  closeType?: string | null;
@@ -4097,7 +4382,7 @@ export interface components {
4097
4382
  };
4098
4383
  CreateDelegatedSessionResponse: {
4099
4384
  /**
4100
- * @description Session expiry as a Unix timestamp (seconds)
4385
+ * @description Session expiry as a Unix timestamp (seconds), bounded by the delegation expiry when set. Earlier revocation or policy expiry also ends access.
4101
4386
  * @example 1735689599
4102
4387
  */
4103
4388
  expiresAt?: string | null;
@@ -4684,6 +4969,19 @@ export interface components {
4684
4969
  /** @description FOLLOWER, STOP_LOSS, SKIP_LIMIT, ADMIN or LEADER_SUSPENDED */
4685
4970
  stopReason?: string | null;
4686
4971
  };
4972
+ /** @description A follow whose close could not run. */
4973
+ FollowCloseFailure: {
4974
+ /**
4975
+ * Format: uuid
4976
+ * @description The follow's id
4977
+ */
4978
+ followId?: string | null;
4979
+ /**
4980
+ * @description Why the close could not run, as a fixed sentence; retry the close
4981
+ * @example The copy positions could not be closed right now; retry shortly
4982
+ */
4983
+ reason?: string | null;
4984
+ };
4687
4985
  Follower: {
4688
4986
  /** @description The follower's wallet address (lowercase hex) */
4689
4987
  walletAddress?: string | null;
@@ -4993,6 +5291,31 @@ export interface components {
4993
5291
  * @example 1000
4994
5292
  */
4995
5293
  buildercodesBudgetBps?: number | null;
5294
+ /** @description Whether builder fees are currently charged. While false, `builderFeeBps` is stored but no builder fee is charged. */
5295
+ builderFeeEnabled?: boolean | null;
5296
+ /**
5297
+ * Format: uint32
5298
+ * @description This application's stored builder fee in basis points: the additional taker fee it charges its users. The fee charged is this value capped at `builderFeeCapBps`, and 0 while `builderFeeEnabled` is false or the application is not enrolled with a payout address.
5299
+ * @example 10
5300
+ */
5301
+ builderFeeBps?: number | null;
5302
+ /**
5303
+ * Format: uint32
5304
+ * @description The highest builder fee, in basis points, that can currently be set or charged.
5305
+ * @example 100
5306
+ */
5307
+ builderFeeCapBps?: number | null;
5308
+ /**
5309
+ * Format: uint32
5310
+ * @description Builder-fee changes this application can still make in the current rolling 24 hours (at most 2).
5311
+ * @example 2
5312
+ */
5313
+ changesRemaining?: number | null;
5314
+ /**
5315
+ * Format: date-time
5316
+ * @description RFC 3339 time at which the next builder-fee change becomes allowed, or null while `changesRemaining` is above 0.
5317
+ */
5318
+ nextChangeAllowedAt?: string | null;
4996
5319
  };
4997
5320
  /** @description OHLCV candlestick data. */
4998
5321
  GetCandlesResponse: {
@@ -5337,22 +5660,22 @@ export interface components {
5337
5660
  GetMyFeeTierResponse: {
5338
5661
  /**
5339
5662
  * Format: int32
5340
- * @description Caller's resolved tier (1–6) from stored weighted 14-day volume
5663
+ * @description Caller's resolved tier (1–6) from their wallet's stored weighted 14-day volume
5341
5664
  * @example 2
5342
5665
  */
5343
5666
  currentTierLevel?: number | null;
5344
5667
  /**
5345
- * @description Caller's weighted 14-day volume (perp + 2.5× spot)
5668
+ * @description Caller's weighted 14-day volume (perp + 2.5× spot), summed across every application the wallet trades through
5346
5669
  * @example 7500000
5347
5670
  */
5348
5671
  weightedVolume14d?: string | null;
5349
5672
  /**
5350
- * @description Caller's rolling 14-day spot volume
5673
+ * @description Caller's rolling 14-day spot volume, summed across every application the wallet trades through
5351
5674
  * @example 1000000
5352
5675
  */
5353
5676
  spotVolume14d?: string | null;
5354
5677
  /**
5355
- * @description Caller's rolling 14-day perp volume
5678
+ * @description Caller's rolling 14-day perp volume, summed across every application the wallet trades through
5356
5679
  * @example 5000000
5357
5680
  */
5358
5681
  perpVolume14d?: string | null;
@@ -6071,7 +6394,7 @@ export interface components {
6071
6394
  cumFees?: string | null;
6072
6395
  /**
6073
6396
  * Format: int64
6074
- * @description Opaque, non-negative producer-owned version for this position row. Compare only within the same position; higher is newer. 0 is the unranked legacy sentinel and never participates in ordering: treat it exactly as an absent version and fall back to a full field comparison rather than ranking it as oldest. It advances on sequenced position mutations (open, add, reduce, close, funding, margin transfer, liquidation, ADL) and is shared by the persisted read, the WebSocket positions snapshot and a RANKED live position_update frame. A live frame is ranked only when it is a faithful projection of the row persisted at that sequence: in practice the fills that leave a position open. Frames that re-read live risk state after sequencing (funding, margin_added/margin_reduced) and terminal frames (which report size 0 and LIQUIDATED, while the stored row keeps its size and records CLOSED) omit the version even though the mutation did advance the persisted one, so an absent version never implies that nothing was persisted. mark_price, unrealized_pnl, liquidation_price, leverage, maintenance_margin_required and initial_margin_required are UNVERSIONED valuation fields, re-derived per payload rather than served from the versioned row: the version does not advance for them (five move with the oracle mark; leverage does not, being opening notional over posted margin, but the live surfaces derive it while the persisted row serves its stored column, so it can still disagree at an unchanged version) (a valuation-only oracle tick persists nothing; a state-transitioning one, a breach or recovery, persists the account's snapshot and restamps the positions it changed), so the merge rule is per field group — on an equal version skip the versioned fields but still take all six from the newer payload, because discarding a whole payload on an equal version freezes displayed PnL and can leave a stale margin requirement on screen. isolated_margin is the one exception among the versioned fields: the WebSocket positions snapshot overlays it from an independent live matching-engine read rather than the versioned row, so take it from the newest payload on an equal version too or a consumer can retain stale backing. The version advances exactly when the row's versioned content changed at that sequence, a change undone within one persistence batch included; a position a command left unchanged keeps its version, so a RANKED live frame for an untouched sibling of a filled position can carry a higher version than the persisted row while describing identical content — rank it as newer, and nothing changes. A response served from live matching-engine state reports 0 (unranked): the engine holds the state but not the version.
6397
+ * @description Opaque, non-negative producer-owned version for this position row. Compare only within the same position; higher is newer. 0 is the unranked legacy sentinel and never participates in ordering: treat it exactly as an absent version and fall back to a full field comparison rather than ranking it as oldest. It advances on sequenced position mutations (open, add, reduce, close, funding, margin transfer, liquidation, ADL) and is shared by the persisted read, the WebSocket positions snapshot and a RANKED live position_update frame. Ranked live frames include fills that leave a position open, direct isolated-position margin adds/reductions, and copy-position margin adds; the copy add refreshes its isolated child and copy-cross siblings at the same version. Cross-risk-bucket ALLOCATE/RELEASE and copy follow/stop refreshes use margin_added/margin_reduced but omit the version because those commands write no position rows. Funding omits it because it re-reads live state after sequencing; terminal frames omit it because they report size 0 and sometimes LIQUIDATED while the stored row keeps its size and records CLOSED. Wallet IN/OUT and plain isolated allocation send no position frame. Transfer frames use captured post-command state and are released only after durable acknowledgement. mark_price, unrealized_pnl, liquidation_price, leverage, maintenance_margin_required and initial_margin_required are UNVERSIONED valuation fields, re-derived per payload rather than served from the versioned row: the version does not advance for them (five move with the oracle mark; leverage does not, being opening notional over posted margin, but the live surfaces derive it while the persisted row serves its stored column, so it can still disagree at an unchanged version) (a valuation-only oracle tick persists nothing; a state-transitioning one, a breach or recovery, persists the account's snapshot and restamps the positions it changed), so the merge rule is per field group — on an equal version skip the versioned fields but still take all six from the newer payload, because discarding a whole payload on an equal version freezes displayed PnL and can leave a stale margin requirement on screen. isolated_margin is the one exception among the versioned fields: the WebSocket positions snapshot overlays it from an independent live matching-engine read rather than the versioned row, so take it from the newest payload on an equal version too or a consumer can retain stale backing. The version advances exactly when the row's versioned content changed at that sequence, a change undone within one persistence batch included; a position a command left unchanged keeps its version, so a RANKED live frame for an untouched sibling of a filled position can carry a higher version than the persisted row while describing identical content — rank it as newer, and nothing changes. A response served from live matching-engine state reports 0 (unranked): the engine holds the state but not the version.
6075
6398
  * @example 918342
6076
6399
  */
6077
6400
  version?: number | null;
@@ -6797,6 +7120,12 @@ export interface components {
6797
7120
  */
6798
7121
  totalPages?: number | null;
6799
7122
  };
7123
+ ListBuilderFeeChangesResponse: {
7124
+ /** @description Builder-fee changes, newest first. */
7125
+ changes?: components["schemas"]["BuilderFeeChange"][] | null;
7126
+ /** @description Cursor for the next page; empty when there are no more. */
7127
+ nextPageToken?: string | null;
7128
+ };
6800
7129
  ListBuildercodePayoutsResponse: {
6801
7130
  /** @description Per-trade credits, newest first. */
6802
7131
  payouts?: components["schemas"]["BuildercodePayout"][] | null;
@@ -7882,7 +8211,7 @@ export interface components {
7882
8211
  cumFees?: string | null;
7883
8212
  /**
7884
8213
  * Format: int64
7885
- * @description Opaque, non-negative producer-owned version for this position row. Compare only within the same position; higher is newer. 0 is the unranked legacy sentinel and never participates in ordering: it means the row predates this field or came from a producer that does not stamp it, so treat it exactly as an absent version and fall back to a full field comparison rather than ranking it as oldest. It advances on sequenced position mutations (open, add, reduce, close, funding, margin transfer, liquidation, ADL) and is shared by the persisted read, the WebSocket positions snapshot and a RANKED live position_update frame. A live frame is ranked only when it is a faithful projection of the row persisted at that sequence: in practice the fills that leave a position open. Frames that re-read live risk state after sequencing (funding, margin_added/margin_reduced) and terminal frames (which report size 0 and LIQUIDATED, while the stored row keeps its size and records CLOSED) omit the version even though the mutation did advance the persisted one, so an absent version never implies that nothing was persisted. mark_price, unrealized_pnl, liquidation_price, leverage, maintenance_margin_required and initial_margin_required are UNVERSIONED valuation fields, re-derived per payload rather than served from the versioned row: the version does not advance for them (five move with the oracle mark; leverage does not, being opening notional over posted margin, but the live surfaces derive it while the persisted row serves its stored column, so it can still disagree at an unchanged version) (a valuation-only oracle tick persists nothing; a state-transitioning one, a breach or recovery, persists the account's snapshot and restamps the positions it changed), so the merge rule is per field group — on an equal version skip the versioned fields but still take all six from the newer payload, because discarding a whole payload on an equal version freezes displayed PnL and can leave a stale margin requirement on screen. isolated_margin is the one exception among the versioned fields: the WebSocket positions snapshot overlays it from an independent live matching-engine read rather than the versioned row, so take it from the newest payload on an equal version too or a consumer can retain stale backing. The version advances exactly when the row's versioned content changed at that sequence, a change undone within one persistence batch included; a position a command left unchanged keeps its version, so a RANKED live frame for an untouched sibling of a filled position can carry a higher version than the persisted row while describing identical content — rank it as newer, and nothing changes. A response served from live matching-engine state reports 0 (unranked): the engine holds the state but not the version.
8214
+ * @description Opaque, non-negative producer-owned version for this position row. Compare only within the same position; higher is newer. 0 is the unranked legacy sentinel and never participates in ordering: it means the row predates this field or came from a producer that does not stamp it, so treat it exactly as an absent version and fall back to a full field comparison rather than ranking it as oldest. It advances on sequenced position mutations (open, add, reduce, close, funding, margin transfer, liquidation, ADL) and is shared by the persisted read, the WebSocket positions snapshot and a RANKED live position_update frame. Ranked live frames include fills that leave a position open, direct isolated-position margin adds/reductions, and copy-position margin adds; the copy add refreshes its isolated child and copy-cross siblings at the same version. Cross-risk-bucket ALLOCATE/RELEASE and copy follow/stop refreshes use margin_added/margin_reduced but omit the version because those commands write no position rows. Funding omits it because it re-reads live state after sequencing; terminal frames omit it because they report size 0 and sometimes LIQUIDATED while the stored row keeps its size and records CLOSED. Wallet IN/OUT and plain isolated allocation send no position frame. Transfer frames use captured post-command state and are released only after durable acknowledgement. mark_price, unrealized_pnl, liquidation_price, leverage, maintenance_margin_required and initial_margin_required are UNVERSIONED valuation fields, re-derived per payload rather than served from the versioned row: the version does not advance for them (five move with the oracle mark; leverage does not, being opening notional over posted margin, but the live surfaces derive it while the persisted row serves its stored column, so it can still disagree at an unchanged version) (a valuation-only oracle tick persists nothing; a state-transitioning one, a breach or recovery, persists the account's snapshot and restamps the positions it changed), so the merge rule is per field group — on an equal version skip the versioned fields but still take all six from the newer payload, because discarding a whole payload on an equal version freezes displayed PnL and can leave a stale margin requirement on screen. isolated_margin is the one exception among the versioned fields: the WebSocket positions snapshot overlays it from an independent live matching-engine read rather than the versioned row, so take it from the newest payload on an equal version too or a consumer can retain stale backing. The version advances exactly when the row's versioned content changed at that sequence, a change undone within one persistence batch included; a position a command left unchanged keeps its version, so a RANKED live frame for an untouched sibling of a filled position can carry a higher version than the persisted row while describing identical content — rank it as newer, and nothing changes. A response served from live matching-engine state reports 0 (unranked): the engine holds the state but not the version.
7886
8215
  * @example 918342
7887
8216
  */
7888
8217
  version?: number | null;
@@ -8300,7 +8629,7 @@ export interface components {
8300
8629
  RefreshResponse: {
8301
8630
  /**
8302
8631
  * Format: int32
8303
- * @description Unix timestamp when the session expires after refresh
8632
+ * @description Unix timestamp when the session expires after refresh. For delegated sessions, bounded by the active delegation expiry when set.
8304
8633
  * @example 1699876543
8305
8634
  */
8306
8635
  expiresAt?: number | null;
@@ -8620,6 +8949,39 @@ export interface components {
8620
8949
  */
8621
8950
  isCustom?: boolean | null;
8622
8951
  };
8952
+ SetBuilderFeeRequest: {
8953
+ /**
8954
+ * Format: uint32
8955
+ * @description New builder fee in basis points, from 0 up to the current `builderFeeCapBps` inclusive. 0 stops charging a builder fee.
8956
+ * @example 10
8957
+ */
8958
+ bps: number;
8959
+ };
8960
+ SetBuilderFeeResponse: {
8961
+ /**
8962
+ * Format: uint32
8963
+ * @description The builder fee now stored, in basis points.
8964
+ * @example 10
8965
+ */
8966
+ builderFeeBps?: number | null;
8967
+ /**
8968
+ * Format: uint32
8969
+ * @description The builder fee this change replaced, in basis points. Equal to `builderFeeBps` when the request set the fee it already had, which changes nothing.
8970
+ * @example 0
8971
+ */
8972
+ previousBuilderFeeBps?: number | null;
8973
+ /**
8974
+ * Format: uint32
8975
+ * @description Builder-fee changes this application can still make in the current rolling 24 hours (at most 2).
8976
+ * @example 1
8977
+ */
8978
+ changesRemaining?: number | null;
8979
+ /**
8980
+ * Format: date-time
8981
+ * @description RFC 3339 time at which the next builder-fee change becomes allowed, or null while `changesRemaining` is above 0.
8982
+ */
8983
+ nextChangeAllowedAt?: string | null;
8984
+ };
8623
8985
  SetSelfTradePreventionDefaultRequest: {
8624
8986
  /**
8625
8987
  * @description The self-trade-prevention mode applied when an order from this wallet would match the wallet family's own resting order and the order names no override: `CANCEL_MAKER` (cancel the resting order — the platform default), `CANCEL_TAKER` (cancel the incoming order), `CANCEL_BOTH`, or `SKIP` (trade around own orders). Input is case-insensitive.
@@ -9763,12 +10125,12 @@ export interface components {
9763
10125
  };
9764
10126
  UpdatedFields: {
9765
10127
  /**
9766
- * @description New price (if changed)
10128
+ * @description The replacement's limit price: the requested price, or the original order's price when price was omitted.
9767
10129
  * @example 35500.00
9768
10130
  */
9769
10131
  price?: string | null;
9770
10132
  /**
9771
- * @description New quantity (if changed)
10133
+ * @description The replacement's total quantity: the requested quantity, or the original order's total when quantity was omitted. It is not the resting size: the replacement rests this total minus the already-filled amount, so a 100-lot with 60 filled reports 100 here and rests 40. Read the order's remainingQuantity for the resting size. Margin reduce-only replacements are the exception: this is the close size placed, which is the requested quantity or, when omitted, the original's remaining quantity.
9772
10134
  * @example 0.7
9773
10135
  */
9774
10136
  quantity?: string | null;
@@ -9785,7 +10147,7 @@ export interface components {
9785
10147
  */
9786
10148
  name?: string | null;
9787
10149
  /**
9788
- * @description Optional delegation expiry timestamp (ISO 8601). Omit for no expiry.
10150
+ * @description Optional delegation expiry timestamp (ISO 8601). Ends delegated reads, trading, and session refresh. Omit for no delegation expiry; session expiry still applies.
9789
10151
  * @example 2026-12-31T23:59:59Z
9790
10152
  */
9791
10153
  expiresAt?: string | null;
@@ -11728,14 +12090,18 @@ export interface operations {
11728
12090
  };
11729
12091
  };
11730
12092
  };
11731
- get_buildercodes_config: {
12093
+ set_builder_fee: {
11732
12094
  parameters: {
11733
12095
  query?: never;
11734
12096
  header?: never;
11735
12097
  path?: never;
11736
12098
  cookie?: never;
11737
12099
  };
11738
- requestBody?: never;
12100
+ requestBody: {
12101
+ content: {
12102
+ "application/json": components["schemas"]["SetBuilderFeeRequest"];
12103
+ };
12104
+ };
11739
12105
  responses: {
11740
12106
  /** @description OK */
11741
12107
  200: {
@@ -11743,9 +12109,16 @@ export interface operations {
11743
12109
  [name: string]: unknown;
11744
12110
  };
11745
12111
  content: {
11746
- "application/json": components["schemas"]["GetBuildercodesConfigResponse"];
12112
+ "application/json": components["schemas"]["SetBuilderFeeResponse"];
11747
12113
  };
11748
12114
  };
12115
+ /** @description bps is above the current builder-fee cap (gRPC: INVALID_ARGUMENT) */
12116
+ 400: {
12117
+ headers: {
12118
+ [name: string]: unknown;
12119
+ };
12120
+ content?: never;
12121
+ };
11749
12122
  /** @description Authentication required */
11750
12123
  401: {
11751
12124
  headers: {
@@ -11767,6 +12140,13 @@ export interface operations {
11767
12140
  };
11768
12141
  content?: never;
11769
12142
  };
12143
+ /** @description The application is not enrolled in BuilderCodes with a payout address, or it has already made two changes in the last 24 hours; the latter carries `details.nextChangeAllowedAt` (gRPC: FAILED_PRECONDITION) */
12144
+ 409: {
12145
+ headers: {
12146
+ [name: string]: unknown;
12147
+ };
12148
+ content?: never;
12149
+ };
11770
12150
  /** @description Internal server error */
11771
12151
  500: {
11772
12152
  headers: {
@@ -11776,15 +12156,16 @@ export interface operations {
11776
12156
  };
11777
12157
  };
11778
12158
  };
11779
- list_buildercode_payouts: {
12159
+ list_builder_fee_changes: {
11780
12160
  parameters: {
11781
12161
  query?: {
11782
- /** @description Page number (1-indexed) */
11783
- page?: number;
11784
12162
  /** @description Items per page (max 100) */
11785
12163
  pageSize?: number;
11786
- /** @description Only return BuilderCodes payouts of this payout kind: REVENUE_SHARE (the frontend's share of Monaco's fee) or BUILDER_FEE (the frontend's own builder fee). Omit for every kind. */
11787
- kind?: "REVENUE_SHARE" | "BUILDER_FEE";
12164
+ /**
12165
+ * @description Opaque cursor from a previous response's `nextPageToken`; omit or send an
12166
+ * empty string for the first page.
12167
+ */
12168
+ pageToken?: string;
11788
12169
  };
11789
12170
  header?: never;
11790
12171
  path?: never;
@@ -11798,10 +12179,10 @@ export interface operations {
11798
12179
  [name: string]: unknown;
11799
12180
  };
11800
12181
  content: {
11801
- "application/json": components["schemas"]["ListBuildercodePayoutsResponse"];
12182
+ "application/json": components["schemas"]["ListBuilderFeeChangesResponse"];
11802
12183
  };
11803
12184
  };
11804
- /** @description Invalid pagination */
12185
+ /** @description Invalid page size or page token */
11805
12186
  400: {
11806
12187
  headers: {
11807
12188
  [name: string]: unknown;
@@ -11838,7 +12219,7 @@ export interface operations {
11838
12219
  };
11839
12220
  };
11840
12221
  };
11841
- get_buildercode_payout_summary: {
12222
+ get_buildercodes_config: {
11842
12223
  parameters: {
11843
12224
  query?: never;
11844
12225
  header?: never;
@@ -11853,7 +12234,7 @@ export interface operations {
11853
12234
  [name: string]: unknown;
11854
12235
  };
11855
12236
  content: {
11856
- "application/json": components["schemas"]["GetBuildercodePayoutSummaryResponse"];
12237
+ "application/json": components["schemas"]["GetBuildercodesConfigResponse"];
11857
12238
  };
11858
12239
  };
11859
12240
  /** @description Authentication required */
@@ -11886,9 +12267,16 @@ export interface operations {
11886
12267
  };
11887
12268
  };
11888
12269
  };
11889
- get_buildercode_rewards_balance: {
12270
+ list_buildercode_payouts: {
11890
12271
  parameters: {
11891
- query?: never;
12272
+ query?: {
12273
+ /** @description Page number (1-indexed) */
12274
+ page?: number;
12275
+ /** @description Items per page (max 100) */
12276
+ pageSize?: number;
12277
+ /** @description Only return BuilderCodes payouts of this payout kind: REVENUE_SHARE (the frontend's share of Monaco's fee) or BUILDER_FEE (reserved and not currently emitted). Omit for every kind. */
12278
+ kind?: "REVENUE_SHARE" | "BUILDER_FEE";
12279
+ };
11892
12280
  header?: never;
11893
12281
  path?: never;
11894
12282
  cookie?: never;
@@ -11901,12 +12289,115 @@ export interface operations {
11901
12289
  [name: string]: unknown;
11902
12290
  };
11903
12291
  content: {
11904
- "application/json": components["schemas"]["GetBuildercodeRewardsBalanceResponse"];
12292
+ "application/json": components["schemas"]["ListBuildercodePayoutsResponse"];
11905
12293
  };
11906
12294
  };
11907
- /** @description Authentication required */
11908
- 401: {
11909
- headers: {
12295
+ /** @description Invalid pagination */
12296
+ 400: {
12297
+ headers: {
12298
+ [name: string]: unknown;
12299
+ };
12300
+ content?: never;
12301
+ };
12302
+ /** @description Authentication required */
12303
+ 401: {
12304
+ headers: {
12305
+ [name: string]: unknown;
12306
+ };
12307
+ content?: never;
12308
+ };
12309
+ /** @description Refused: BuilderCodes is disabled, the caller is delegated, or the caller is not this application's payout wallet (gRPC: PERMISSION_DENIED) */
12310
+ 403: {
12311
+ headers: {
12312
+ [name: string]: unknown;
12313
+ };
12314
+ content?: never;
12315
+ };
12316
+ /** @description Authenticated application not found (gRPC: NOT_FOUND) */
12317
+ 404: {
12318
+ headers: {
12319
+ [name: string]: unknown;
12320
+ };
12321
+ content?: never;
12322
+ };
12323
+ /** @description Internal server error */
12324
+ 500: {
12325
+ headers: {
12326
+ [name: string]: unknown;
12327
+ };
12328
+ content?: never;
12329
+ };
12330
+ };
12331
+ };
12332
+ get_buildercode_payout_summary: {
12333
+ parameters: {
12334
+ query?: never;
12335
+ header?: never;
12336
+ path?: never;
12337
+ cookie?: never;
12338
+ };
12339
+ requestBody?: never;
12340
+ responses: {
12341
+ /** @description OK */
12342
+ 200: {
12343
+ headers: {
12344
+ [name: string]: unknown;
12345
+ };
12346
+ content: {
12347
+ "application/json": components["schemas"]["GetBuildercodePayoutSummaryResponse"];
12348
+ };
12349
+ };
12350
+ /** @description Authentication required */
12351
+ 401: {
12352
+ headers: {
12353
+ [name: string]: unknown;
12354
+ };
12355
+ content?: never;
12356
+ };
12357
+ /** @description Refused: BuilderCodes is disabled, the caller is delegated, or the caller is not this application's payout wallet (gRPC: PERMISSION_DENIED) */
12358
+ 403: {
12359
+ headers: {
12360
+ [name: string]: unknown;
12361
+ };
12362
+ content?: never;
12363
+ };
12364
+ /** @description Authenticated application not found (gRPC: NOT_FOUND) */
12365
+ 404: {
12366
+ headers: {
12367
+ [name: string]: unknown;
12368
+ };
12369
+ content?: never;
12370
+ };
12371
+ /** @description Internal server error */
12372
+ 500: {
12373
+ headers: {
12374
+ [name: string]: unknown;
12375
+ };
12376
+ content?: never;
12377
+ };
12378
+ };
12379
+ };
12380
+ get_buildercode_rewards_balance: {
12381
+ parameters: {
12382
+ query?: never;
12383
+ header?: never;
12384
+ path?: never;
12385
+ cookie?: never;
12386
+ };
12387
+ requestBody?: never;
12388
+ responses: {
12389
+ /** @description OK */
12390
+ 200: {
12391
+ headers: {
12392
+ [name: string]: unknown;
12393
+ };
12394
+ content: {
12395
+ "application/json": components["schemas"]["GetBuildercodeRewardsBalanceResponse"];
12396
+ };
12397
+ };
12398
+ /** @description Authentication required */
12399
+ 401: {
12400
+ headers: {
11910
12401
  [name: string]: unknown;
11911
12402
  };
11912
12403
  content?: never;
@@ -12122,6 +12613,75 @@ export interface operations {
12122
12613
  };
12123
12614
  };
12124
12615
  };
12616
+ close_all_copy_positions: {
12617
+ parameters: {
12618
+ query?: never;
12619
+ header?: never;
12620
+ path?: never;
12621
+ cookie?: never;
12622
+ };
12623
+ requestBody?: never;
12624
+ responses: {
12625
+ /** @description OK */
12626
+ 200: {
12627
+ headers: {
12628
+ [name: string]: unknown;
12629
+ };
12630
+ content: {
12631
+ "application/json": components["schemas"]["CloseAllCopyPositionsResponse"];
12632
+ };
12633
+ };
12634
+ /** @description The close was refused */
12635
+ 400: {
12636
+ headers: {
12637
+ [name: string]: unknown;
12638
+ };
12639
+ content?: never;
12640
+ };
12641
+ /** @description Authentication required */
12642
+ 401: {
12643
+ headers: {
12644
+ [name: string]: unknown;
12645
+ };
12646
+ content?: never;
12647
+ };
12648
+ /** @description Delegated agent sessions cannot close copy positions */
12649
+ 403: {
12650
+ headers: {
12651
+ [name: string]: unknown;
12652
+ };
12653
+ content?: never;
12654
+ };
12655
+ /** @description Copy trading is not available */
12656
+ 409: {
12657
+ headers: {
12658
+ [name: string]: unknown;
12659
+ };
12660
+ content?: never;
12661
+ };
12662
+ /** @description Copy position close rate limit exceeded; retry after the interval in details.retryAfter */
12663
+ 429: {
12664
+ headers: {
12665
+ [name: string]: unknown;
12666
+ };
12667
+ content?: never;
12668
+ };
12669
+ /** @description Internal server error */
12670
+ 500: {
12671
+ headers: {
12672
+ [name: string]: unknown;
12673
+ };
12674
+ content?: never;
12675
+ };
12676
+ /** @description The matching engine is unavailable; retry */
12677
+ 503: {
12678
+ headers: {
12679
+ [name: string]: unknown;
12680
+ };
12681
+ content?: never;
12682
+ };
12683
+ };
12684
+ };
12125
12685
  preview_follow: {
12126
12686
  parameters: {
12127
12687
  query?: never;
@@ -12259,6 +12819,84 @@ export interface operations {
12259
12819
  };
12260
12820
  };
12261
12821
  };
12822
+ close_follow_positions: {
12823
+ parameters: {
12824
+ query?: never;
12825
+ header?: never;
12826
+ path: {
12827
+ followId: string;
12828
+ };
12829
+ cookie?: never;
12830
+ };
12831
+ requestBody?: never;
12832
+ responses: {
12833
+ /** @description OK */
12834
+ 200: {
12835
+ headers: {
12836
+ [name: string]: unknown;
12837
+ };
12838
+ content: {
12839
+ "application/json": components["schemas"]["CloseFollowPositionsResponse"];
12840
+ };
12841
+ };
12842
+ /** @description Invalid follow id, or the close was refused */
12843
+ 400: {
12844
+ headers: {
12845
+ [name: string]: unknown;
12846
+ };
12847
+ content?: never;
12848
+ };
12849
+ /** @description Authentication required */
12850
+ 401: {
12851
+ headers: {
12852
+ [name: string]: unknown;
12853
+ };
12854
+ content?: never;
12855
+ };
12856
+ /** @description Delegated agent sessions cannot close copy positions */
12857
+ 403: {
12858
+ headers: {
12859
+ [name: string]: unknown;
12860
+ };
12861
+ content?: never;
12862
+ };
12863
+ /** @description Follow not found */
12864
+ 404: {
12865
+ headers: {
12866
+ [name: string]: unknown;
12867
+ };
12868
+ content?: never;
12869
+ };
12870
+ /** @description The follow is stopped, or its stop is in progress (which closes its positions itself), or copy trading is not available */
12871
+ 409: {
12872
+ headers: {
12873
+ [name: string]: unknown;
12874
+ };
12875
+ content?: never;
12876
+ };
12877
+ /** @description Copy position close rate limit exceeded; retry after the interval in details.retryAfter */
12878
+ 429: {
12879
+ headers: {
12880
+ [name: string]: unknown;
12881
+ };
12882
+ content?: never;
12883
+ };
12884
+ /** @description Internal server error */
12885
+ 500: {
12886
+ headers: {
12887
+ [name: string]: unknown;
12888
+ };
12889
+ content?: never;
12890
+ };
12891
+ /** @description The close cannot run right now, or the matching engine is unavailable; retry */
12892
+ 503: {
12893
+ headers: {
12894
+ [name: string]: unknown;
12895
+ };
12896
+ content?: never;
12897
+ };
12898
+ };
12899
+ };
12262
12900
  list_follow_leader_positions: {
12263
12901
  parameters: {
12264
12902
  query?: never;
@@ -12330,6 +12968,88 @@ export interface operations {
12330
12968
  };
12331
12969
  };
12332
12970
  };
12971
+ add_follow_position_margin: {
12972
+ parameters: {
12973
+ query?: never;
12974
+ header?: never;
12975
+ path: {
12976
+ followId: string;
12977
+ };
12978
+ cookie?: never;
12979
+ };
12980
+ requestBody: {
12981
+ content: {
12982
+ "application/json": components["schemas"]["AddFollowPositionMarginRequest"];
12983
+ };
12984
+ };
12985
+ responses: {
12986
+ /** @description OK */
12987
+ 200: {
12988
+ headers: {
12989
+ [name: string]: unknown;
12990
+ };
12991
+ content: {
12992
+ "application/json": components["schemas"]["AddFollowPositionMarginResponse"];
12993
+ };
12994
+ };
12995
+ /** @description Invalid follow id, trading pair or amount, or refused by the engine with code COPY_TRADING_REJECTED (no copy position on the pair, the position or the margin account is being liquidated, the position has lost more than its margin, more than the copy account holds; the message names the rule) */
12996
+ 400: {
12997
+ headers: {
12998
+ [name: string]: unknown;
12999
+ };
13000
+ content?: never;
13001
+ };
13002
+ /** @description Authentication required */
13003
+ 401: {
13004
+ headers: {
13005
+ [name: string]: unknown;
13006
+ };
13007
+ content?: never;
13008
+ };
13009
+ /** @description Only a master account session can add margin (not a delegated agent or a sub-account) */
13010
+ 403: {
13011
+ headers: {
13012
+ [name: string]: unknown;
13013
+ };
13014
+ content?: never;
13015
+ };
13016
+ /** @description Follow not found */
13017
+ 404: {
13018
+ headers: {
13019
+ [name: string]: unknown;
13020
+ };
13021
+ content?: never;
13022
+ };
13023
+ /** @description The follow is stopping or stopped, or code COPY_TRADING_UNAVAILABLE: copy trading is not available on the platform */
13024
+ 409: {
13025
+ headers: {
13026
+ [name: string]: unknown;
13027
+ };
13028
+ content?: never;
13029
+ };
13030
+ /** @description Movement rate limit exceeded — withdrawals and collateral transfers share a per-user budget; retry after the interval in details.retryAfter */
13031
+ 429: {
13032
+ headers: {
13033
+ [name: string]: unknown;
13034
+ };
13035
+ content?: never;
13036
+ };
13037
+ /** @description Internal server error */
13038
+ 500: {
13039
+ headers: {
13040
+ [name: string]: unknown;
13041
+ };
13042
+ content?: never;
13043
+ };
13044
+ /** @description Matching engine unavailable; retry */
13045
+ 503: {
13046
+ headers: {
13047
+ [name: string]: unknown;
13048
+ };
13049
+ content?: never;
13050
+ };
13051
+ };
13052
+ };
12333
13053
  stop_follow: {
12334
13054
  parameters: {
12335
13055
  query?: never;