@0xmonaco/types 1.0.58 → 1.0.60

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.
@@ -585,8 +585,21 @@ export interface paths {
585
585
  * @description Create authentication challenge.
586
586
  *
587
587
  * Generate a cryptographic challenge (nonce) for wallet-based authentication.
588
- * The user must sign the returned message with their private key to prove
589
- * ownership of the wallet.
588
+ * The wallet must authorize the returned message to prove control of the
589
+ * address. An EOA does that by signing it with its private key. A
590
+ * smart-contract wallet has no private key and instead produces a signature
591
+ * its own contract will accept, which Monaco checks under EIP-1271 — see
592
+ * Verify.
593
+ *
594
+ * The challenge is single-use and binds the session public key supplied here,
595
+ * so it authorizes exactly one keypair, once. The lifetime is 5 minutes, or
596
+ * 30 minutes for EVERY address while contract-signature login is enabled on
597
+ * the deployment — a multisig must collect owner approvals before it can
598
+ * answer, and the window is uniform rather than eligibility-specific so this
599
+ * unauthenticated endpoint cannot be used to probe which addresses hold a
600
+ * BuilderCodes payout bucket. Widening it is cheap: a longer window is a
601
+ * longer-lived offer to authorize one predetermined keypair once, never a
602
+ * longer-lived credential.
590
603
  */
591
604
  post: operations["create_challenge"];
592
605
  delete?: never;
@@ -659,6 +672,30 @@ export interface paths {
659
672
  * Verify the signed challenge message and create an authenticated session.
660
673
  * Binds the caller-provided ed25519 session public key to the new session;
661
674
  * subsequent requests are signed with the matching private key.
675
+ *
676
+ * How the signature is checked depends on the address. Almost every address
677
+ * is verified by recovering the signing key, exactly as before. EIP-1271
678
+ * verification applies only to an address that is BOTH eligible for
679
+ * contract-signature login AND has contract code deployed on chain: an
680
+ * eligible payout wallet that is an ordinary EOA is still verified by
681
+ * recovery. The two are mutually exclusive, and the request is identical
682
+ * either way — `signature` carries whatever the wallet produced, and no
683
+ * field changes. The one bound is length: a contract signature over 8192
684
+ * decoded bytes is refused as invalid rather than forwarded to the chain,
685
+ * which is far above any realistic owner set.
686
+ *
687
+ * Because deciding that requires reading the chain, this adds one
688
+ * client-visible outcome the recovery path does not have: UNAVAILABLE (REST
689
+ * 503). It is retryable and is NOT a verdict on the signature. It covers
690
+ * three cases, and an eligible address can see any of them even when it turns
691
+ * out to be an EOA, because the code lookup happens first: the chain did not
692
+ * answer, it did not answer within the deadline, or the server declined to
693
+ * ask because its own concurrent-verification capacity was full. That last
694
+ * one is local saturation rather than a chain fault, so an operator
695
+ * diagnosing it should check this service before the RPC endpoint.
696
+ *
697
+ * A rejected signature is 401, and so is a contract that rejects by
698
+ * REVERTING: that is the wallet answering "no", not a failure to ask.
662
699
  */
663
700
  post: operations["verify_signature"];
664
701
  delete?: never;
@@ -667,6 +704,180 @@ export interface paths {
667
704
  patch?: never;
668
705
  trace?: never;
669
706
  };
707
+ "/api/v1/buildercodes/config": {
708
+ parameters: {
709
+ query?: never;
710
+ header?: never;
711
+ path?: never;
712
+ cookie?: never;
713
+ };
714
+ /**
715
+ * Get your BuilderCodes program configuration
716
+ * @description Read this application's BuilderCodes program state.
717
+ *
718
+ * The application is taken from the authenticated session; there is no
719
+ * application id in the request. The caller must be the application's
720
+ * configured payout wallet. This method is gated by `buildercodes_enabled`
721
+ * like the rest of the service.
722
+ */
723
+ get: operations["get_buildercodes_config"];
724
+ put?: never;
725
+ post?: never;
726
+ delete?: never;
727
+ options?: never;
728
+ head?: never;
729
+ patch?: never;
730
+ trace?: never;
731
+ };
732
+ "/api/v1/buildercodes/payouts": {
733
+ parameters: {
734
+ query?: never;
735
+ header?: never;
736
+ path?: never;
737
+ cookie?: never;
738
+ };
739
+ /**
740
+ * List your per-trade BuilderCodes earnings
741
+ * @description List this application's per-trade BuilderCodes earnings.
742
+ *
743
+ * Newest credits are returned first. The application is taken from the
744
+ * authenticated session and cannot be selected by the caller.
745
+ */
746
+ get: operations["list_buildercode_payouts"];
747
+ put?: never;
748
+ post?: never;
749
+ delete?: never;
750
+ options?: never;
751
+ head?: never;
752
+ patch?: never;
753
+ trace?: never;
754
+ };
755
+ "/api/v1/buildercodes/payouts/summary": {
756
+ parameters: {
757
+ query?: never;
758
+ header?: never;
759
+ path?: never;
760
+ cookie?: never;
761
+ };
762
+ /**
763
+ * Summarize your BuilderCodes earnings
764
+ * @description Summarize this application's BuilderCodes earnings by token.
765
+ *
766
+ * Amounts stay separated by token because they are RAW atomic units. The
767
+ * application is taken from the authenticated session.
768
+ */
769
+ get: operations["get_buildercode_payout_summary"];
770
+ put?: never;
771
+ post?: never;
772
+ delete?: never;
773
+ options?: never;
774
+ head?: never;
775
+ patch?: never;
776
+ trace?: never;
777
+ };
778
+ "/api/v1/buildercodes/rewards/balance": {
779
+ parameters: {
780
+ query?: never;
781
+ header?: never;
782
+ path?: never;
783
+ cookie?: never;
784
+ };
785
+ /**
786
+ * Get your accrued BuilderCodes balance
787
+ * @description Read the caller's accrued BuilderCodes reward-bucket balances.
788
+ *
789
+ * The bucket is derived from the authenticated wallet under the reserved
790
+ * BuilderCodes application. Current enrollment is not required, so a former
791
+ * payout wallet can still inspect and claim what it accrued. Returns an empty
792
+ * list when no payout bucket or non-zero balance exists.
793
+ */
794
+ get: operations["get_buildercode_rewards_balance"];
795
+ put?: never;
796
+ post?: never;
797
+ delete?: never;
798
+ options?: never;
799
+ head?: never;
800
+ patch?: never;
801
+ trace?: never;
802
+ };
803
+ "/api/v1/buildercodes/rewards/claim": {
804
+ parameters: {
805
+ query?: never;
806
+ header?: never;
807
+ path?: never;
808
+ cookie?: never;
809
+ };
810
+ get?: never;
811
+ put?: never;
812
+ /**
813
+ * Claim accrued BuilderCodes payout balance
814
+ * @description Claim accrued BuilderCodes payout balance.
815
+ *
816
+ * Move accrued BuilderCodes payout balance from your reserved payout bucket
817
+ * into a trading balance under the authenticated application, making it
818
+ * withdrawable through the ordinary withdrawal flow. Ledger-only (one shared
819
+ * vault + one backend ledger) — no on-chain transaction and no gas.
820
+ *
821
+ * The bucket is resolved from the AUTHENTICATED caller's own wallet address,
822
+ * never from the request body, so a caller can only ever claim their own
823
+ * accrued balance. A wallet that has never been an enrolled frontend's payout
824
+ * address simply has an empty bucket. A wallet that USED to be a payout
825
+ * address keeps whatever it accrued back then and can still claim it —
826
+ * payout-address changes are not retroactive, so current enrollment is
827
+ * deliberately not required.
828
+ *
829
+ * The payout wallet may be an EOA or a smart-contract wallet. An EOA answers
830
+ * Monaco's signature challenge directly. A contract wallet — a multisig such
831
+ * as a Safe — holds no private key and cannot, so it authenticates by EIP-1271
832
+ * contract signature instead: Monaco asks the wallet contract whether it
833
+ * accepts the challenge. That path is deliberately narrow. It is offered only
834
+ * to a wallet that holds a BuilderCodes payout bucket, only while the
835
+ * `contract_wallet_auth_enabled` flag is on, and only where the deployment has
836
+ * a chain RPC endpoint configured. While any of those is not met, login is
837
+ * EOA-only and a contract payout wallet can neither call this endpoint nor
838
+ * withdraw afterwards, so its accrued share stays unclaimable.
839
+ *
840
+ * Delegated-agent sessions are refused: a delegated grant conveys only
841
+ * order-management authority, and this claim converts reserved balance into a
842
+ * tradeable one. The refusal happens before the feature check, so a delegated
843
+ * caller is refused whether or not BuilderCodes is enabled.
844
+ *
845
+ * Transport contracts differ, and this comment is emitted into the generated
846
+ * gRPC SDK where HTTP statuses do not exist. An insufficient payout balance
847
+ * is **HTTP 409** on REST and **FAILED_PRECONDITION** on gRPC; a refused
848
+ * caller (delegated session, or BuilderCodes disabled) is **HTTP 403** on
849
+ * REST and **PERMISSION_DENIED** on gRPC.
850
+ *
851
+ * A claim can also fail as **HTTP 503** / **UNAVAILABLE** when the matching
852
+ * engine is unreachable, restarting, or slow to answer. Treat that as an
853
+ * UNKNOWN outcome, NOT a rejection. The request is admitted to the sequencer
854
+ * before its reply is sent, so a claim that timed out in transit may still
855
+ * commit, and there is no idempotency key — a blind retry can claim a SECOND
856
+ * time. Do NOT retry automatically, and do not settle it with a balance
857
+ * read: an admitted claim can still be sitting in the sequencer queue when
858
+ * the balance is read, so an unchanged balance does not prove the claim will
859
+ * not commit. Treat the claim as PENDING rather than failed, re-check once
860
+ * the engine is healthy again, and reconcile before issuing another claim.
861
+ *
862
+ * Not every 503 is ambiguous, and the safe ones are tagged. TWO outcomes are
863
+ * refused BEFORE the claim can be admitted to the sequencer, so they left no
864
+ * durable-log or state footprint and definitely committed nothing. One is a
865
+ * deliberate maintenance block, where REST carries
866
+ * `"error": "OPERATIONS_BLOCKED"` and gRPC tags the status with
867
+ * `x-maintenance-blocked: true`. The other is a sequencer admission rejection
868
+ * when the engine is saturated, where REST carries `"code": "OVERLOADED"` and
869
+ * gRPC carries the same code in the status' error details. Both are safe to
870
+ * retry with backoff, and an overload positively wants one. Only an UNTAGGED
871
+ * availability failure — matching-engine transport, timeout and fail-closed
872
+ * paths — carries the unknown outcome.
873
+ */
874
+ post: operations["claim_buildercode_rewards"];
875
+ delete?: never;
876
+ options?: never;
877
+ head?: never;
878
+ patch?: never;
879
+ trace?: never;
880
+ };
670
881
  "/api/v1/delegated-agents": {
671
882
  parameters: {
672
883
  query?: never;
@@ -868,6 +1079,66 @@ export interface paths {
868
1079
  patch?: never;
869
1080
  trace?: never;
870
1081
  };
1082
+ "/api/v1/managed-markets/assignments": {
1083
+ parameters: {
1084
+ query?: never;
1085
+ header?: never;
1086
+ path?: never;
1087
+ cookie?: never;
1088
+ };
1089
+ /**
1090
+ * List caller managed market assignments
1091
+ * @description Requires the configured maker wallet session. Delegated-agent sessions are not supported and receive 403.
1092
+ */
1093
+ get: operations["list_managed_market_assignments"];
1094
+ put?: never;
1095
+ post?: never;
1096
+ delete?: never;
1097
+ options?: never;
1098
+ head?: never;
1099
+ patch?: never;
1100
+ trace?: never;
1101
+ };
1102
+ "/api/v1/managed-markets/{launchId}/lease": {
1103
+ parameters: {
1104
+ query?: never;
1105
+ header?: never;
1106
+ path?: never;
1107
+ cookie?: never;
1108
+ };
1109
+ get?: never;
1110
+ put?: never;
1111
+ /**
1112
+ * Claim or renew a fenced maker lease
1113
+ * @description Requires the configured maker wallet session. Delegated-agent sessions are not supported and receive 403.
1114
+ */
1115
+ post: operations["claim_managed_market_lease"];
1116
+ delete?: never;
1117
+ options?: never;
1118
+ head?: never;
1119
+ patch?: never;
1120
+ trace?: never;
1121
+ };
1122
+ "/api/v1/managed-markets/{launchId}/quotes": {
1123
+ parameters: {
1124
+ query?: never;
1125
+ header?: never;
1126
+ path?: never;
1127
+ cookie?: never;
1128
+ };
1129
+ get?: never;
1130
+ put?: never;
1131
+ /**
1132
+ * Refresh the server-bounded managed quote set
1133
+ * @description Requires the configured maker wallet session. Delegated-agent sessions are not supported and receive 403.
1134
+ */
1135
+ post: operations["refresh_managed_market_quotes"];
1136
+ delete?: never;
1137
+ options?: never;
1138
+ head?: never;
1139
+ patch?: never;
1140
+ trace?: never;
1141
+ };
871
1142
  "/api/v1/margin/accounts": {
872
1143
  parameters: {
873
1144
  query?: never;
@@ -3042,6 +3313,73 @@ export interface components {
3042
3313
  matchResult?: components["schemas"]["MatchResult"];
3043
3314
  error?: components["schemas"]["BatchReplaceError"];
3044
3315
  };
3316
+ BuildercodePayout: {
3317
+ /**
3318
+ * Format: uuid
3319
+ * @description Trade that generated this credit.
3320
+ */
3321
+ tradeId?: string | null;
3322
+ /**
3323
+ * @description Application payout address at credit time.
3324
+ * @example 0x0000000000000000000000000000000000000001
3325
+ */
3326
+ payoutAddress?: string | null;
3327
+ /**
3328
+ * @description Credit token contract address.
3329
+ * @example 0x0000000000000000000000000000000000000002
3330
+ */
3331
+ token?: string | null;
3332
+ /**
3333
+ * @description Credited amount in RAW atomic units of the token.
3334
+ * @example 1000000
3335
+ */
3336
+ amount?: string | null;
3337
+ /**
3338
+ * Format: int32
3339
+ * @description Realized whole-basis-point rate for this credit after the Monaco-floor clamp, computed from the credited amount divided by the gross protocol take and truncated down. This can be lower than the configured BuilderCodes budget.
3340
+ * @example 1000
3341
+ */
3342
+ appliedBps?: number | null;
3343
+ /**
3344
+ * Format: date-time
3345
+ * @description RFC 3339 credit timestamp.
3346
+ */
3347
+ createdAt?: string | null;
3348
+ };
3349
+ BuildercodePayoutTokenTotal: {
3350
+ /**
3351
+ * @description Credit token contract address.
3352
+ * @example 0x0000000000000000000000000000000000000002
3353
+ */
3354
+ token?: string | null;
3355
+ /**
3356
+ * @description Summed credits in RAW atomic units of this token.
3357
+ * @example 5000000
3358
+ */
3359
+ totalAmount?: string | null;
3360
+ /**
3361
+ * Format: int64
3362
+ * @description Number of credits included in this token total.
3363
+ */
3364
+ payoutCount?: number | null;
3365
+ /**
3366
+ * Format: date-time
3367
+ * @description RFC 3339 timestamp of this token's newest credit.
3368
+ */
3369
+ lastCreditedAt?: string | null;
3370
+ };
3371
+ BuildercodeRewardsBalance: {
3372
+ /**
3373
+ * @description Reward token contract address.
3374
+ * @example 0x0000000000000000000000000000000000000002
3375
+ */
3376
+ token?: string | null;
3377
+ /**
3378
+ * @description Available BuilderCodes reward balance in RAW atomic units.
3379
+ * @example 1200000
3380
+ */
3381
+ available?: string | null;
3382
+ };
3045
3383
  CancelConditionalOrderResponse: {
3046
3384
  /**
3047
3385
  * Format: uuid
@@ -3217,6 +3555,36 @@ export interface components {
3217
3555
  */
3218
3556
  reason?: string | null;
3219
3557
  };
3558
+ ClaimBuildercodeRewardsRequest: {
3559
+ /**
3560
+ * @description Payout token contract address (0x-prefixed) to claim. BuilderCodes shares accrue in the quote token of the traded pair.
3561
+ * @example 0x0000000000000000000000000000000000000002
3562
+ */
3563
+ token: string;
3564
+ /**
3565
+ * @description Amount to claim, in RAW atomic units of the token. Must be positive and no greater than the accrued payout balance.
3566
+ * @example 1000000
3567
+ */
3568
+ amount: string;
3569
+ };
3570
+ ClaimBuildercodeRewardsResponse: {
3571
+ /**
3572
+ * @description Your BuilderCodes payout-bucket balance after the claim, RAW atomic units.
3573
+ * @example 0
3574
+ */
3575
+ payoutBalance?: string | null;
3576
+ /**
3577
+ * @description Your trading balance for the token after the claim, RAW atomic units.
3578
+ * @example 1000000
3579
+ */
3580
+ tradingBalance?: string | null;
3581
+ };
3582
+ ClaimManagedMarketLeaseRequest: {
3583
+ launchId?: string | null;
3584
+ ownerId?: string | null;
3585
+ /** @description Required when renewing an unexpired lease. Decimal string in JSON. */
3586
+ expectedGeneration?: string | null;
3587
+ };
3220
3588
  ClosePositionRequest: {
3221
3589
  quantity?: string | null;
3222
3590
  closeType?: string | null;
@@ -3266,6 +3634,8 @@ export interface components {
3266
3634
  * @example 918342
3267
3635
  */
3268
3636
  version?: number | null;
3637
+ /** @description Present only when state is TRIGGERED: the execution outcome of the order this conditional fired into (triggeredOrderId) — status, filled quantity, volume-weighted average fill price, taker fees and fill time — read from that order at request time. Trigger price and fill price are different numbers: the trigger fires on the mark price and the leg then trades against the book, so a MARKET leg fills at least the half-spread plus its own impact away from triggerPrice, and a LIMIT leg may still be resting (SUBMITTED / PARTIALLY_FILLED) or have been cut by the protective band (CANCELLED with a terminalReason). Absent while waiting on the trigger, on the conditional_orders WebSocket frames, and in the rare case the triggered order cannot be read. */
3638
+ triggeredOrder?: components["schemas"]["TriggeredOrderSummary"] | null;
3269
3639
  };
3270
3640
  CreateDelegatedSessionRequest: {
3271
3641
  /**
@@ -4061,6 +4431,46 @@ export interface components {
4061
4431
  */
4062
4432
  totalPages?: number | null;
4063
4433
  };
4434
+ GetBuildercodePayoutSummaryResponse: {
4435
+ /**
4436
+ * Format: int64
4437
+ * @description Total credit count across every token.
4438
+ */
4439
+ totalPayouts?: number | null;
4440
+ /**
4441
+ * Format: date-time
4442
+ * @description RFC 3339 timestamp of the newest credit, or null when none exists.
4443
+ */
4444
+ lastCreditedAt?: string | null;
4445
+ /** @description Per-token earnings totals. Empty when this application has no payouts. */
4446
+ byToken?: components["schemas"]["BuildercodePayoutTokenTotal"][] | null;
4447
+ };
4448
+ GetBuildercodeRewardsBalanceResponse: {
4449
+ /** @description One entry per reward token with a non-zero available balance. */
4450
+ balances?: components["schemas"]["BuildercodeRewardsBalance"][] | null;
4451
+ };
4452
+ GetBuildercodesConfigResponse: {
4453
+ /**
4454
+ * Format: uuid
4455
+ * @description Application id derived from the authenticated session.
4456
+ */
4457
+ applicationId?: string | null;
4458
+ /** @description Whether this application is currently enrolled in BuilderCodes. */
4459
+ enrolled?: boolean | null;
4460
+ /**
4461
+ * @description Current lowercase-normalized payout address, or null when none is configured.
4462
+ * @example 0x0000000000000000000000000000000000000001
4463
+ */
4464
+ payoutAddress?: string | null;
4465
+ /** @description Current BuilderCodes feature-flag state. Successful responses are true because this endpoint is gated by the flag. */
4466
+ buildercodesEnabled?: boolean | null;
4467
+ /**
4468
+ * Format: uint32
4469
+ * @description Target BuilderCodes share in basis points, computed from the fill's gross non-negative Monaco protocol take and capped by the remainder after Monaco's floor.
4470
+ * @example 1000
4471
+ */
4472
+ buildercodesBudgetBps?: number | null;
4473
+ };
4064
4474
  /** @description OHLCV candlestick data. */
4065
4475
  GetCandlesResponse: {
4066
4476
  candles?: components["schemas"]["Candle"][] | null;
@@ -4662,6 +5072,11 @@ export interface components {
4662
5072
  * @enum {string|null}
4663
5073
  */
4664
5074
  selfTradePreventionMode?: "CANCEL_MAKER" | "CANCEL_TAKER" | "CANCEL_BOTH" | "SKIP" | null;
5075
+ /**
5076
+ * @description Present only on an order the engine placed for a take-profit or stop-loss trigger: the conditional order (GET /api/v1/orders/conditional/{conditionalOrderId}) that fired it. The reverse of ConditionalOrder.triggeredOrderId, so a close in order history can be attributed to the TP/SL that produced it without scanning the conditional list. Absent on every order a client placed itself, on TWAP slice children (those carry parentOrderId), and on triggered closes written before the field existed — there is no backfill, so a missing key on an older close means unknown, not placed by hand.
5077
+ * @example 019aefab-f665-854c-99dc-ced6db9014aa
5078
+ */
5079
+ conditionalOrderId?: string | null;
4665
5080
  };
4666
5081
  /** @description Orderbook snapshot with token metadata and sequence number. */
4667
5082
  GetOrderbookResponse: {
@@ -4979,6 +5394,30 @@ export interface components {
4979
5394
  */
4980
5395
  liquidationPrice?: string | null;
4981
5396
  status?: string | null;
5397
+ /**
5398
+ * @description RFC 3339 instant at which this position was last MUTATED — a fill,
5399
+ * collateral transfer, funding settlement or close — as the producer that
5400
+ * owns the position recorded it. It is NOT the instant the response was
5401
+ * built: polling an unchanged position returns the same value, and an oracle
5402
+ * reprice does not move it. For an OPEN position every surface reports the
5403
+ * same instant — the list, the detail read, the risk read, the WebSocket
5404
+ * positions snapshot, and the live position_update frames.
5405
+ *
5406
+ * Two cases come from the persistence clock instead and differ from the
5407
+ * matching engine's by the persistence lag: a TERMINAL row (the live
5408
+ * position_update frame carries the engine's close instant, this field
5409
+ * carries the stored one), and any position read after a matching-engine
5410
+ * restart. Accurate to that lag, not to the microsecond.
5411
+ *
5412
+ * A third case is not lag-bounded: an OPEN row read while the matching
5413
+ * engine is unreachable falls back to the row's own lifecycle columns
5414
+ * (close, then last funding, then open), so a position filled repeatedly
5415
+ * since it opened reports its opening instant until funding settles. The
5416
+ * live position_update frame is unaffected.
5417
+ *
5418
+ * Display metadata. `version` is the reconciliation key; ordering position
5419
+ * state by this field is never correct.
5420
+ */
4982
5421
  updatedAt?: string | null;
4983
5422
  riskBucketId?: string | null;
4984
5423
  marginMode?: string | null;
@@ -5030,6 +5469,12 @@ export interface components {
5030
5469
  * partial.
5031
5470
  */
5032
5471
  cumFees?: string | null;
5472
+ /**
5473
+ * Format: int64
5474
+ * @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, does restamp the account's open positions), 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. A response served from live matching-engine state reports 0 (unranked): the engine holds the state but not the version.
5475
+ * @example 918342
5476
+ */
5477
+ version?: number | null;
5033
5478
  };
5034
5479
  GetPositionRiskResponse: {
5035
5480
  positionId?: string | null;
@@ -5066,6 +5511,30 @@ export interface components {
5066
5511
  * position has no open exposure.
5067
5512
  */
5068
5513
  initialMarginRequired?: string | null;
5514
+ /**
5515
+ * @description RFC 3339 instant at which this position was last MUTATED — a fill,
5516
+ * collateral transfer, funding settlement or close — as the producer that
5517
+ * owns the position recorded it. It is NOT the instant the response was
5518
+ * built: polling an unchanged position returns the same value, and an oracle
5519
+ * reprice does not move it. For an OPEN position every surface reports the
5520
+ * same instant — the list, the detail read, the risk read, the WebSocket
5521
+ * positions snapshot, and the live position_update frames.
5522
+ *
5523
+ * Two cases come from the persistence clock instead and differ from the
5524
+ * matching engine's by the persistence lag: a TERMINAL row (the live
5525
+ * position_update frame carries the engine's close instant, this field
5526
+ * carries the stored one), and any position read after a matching-engine
5527
+ * restart. Accurate to that lag, not to the microsecond.
5528
+ *
5529
+ * A third case is not lag-bounded: an OPEN row read while the matching
5530
+ * engine is unreachable falls back to the row's own lifecycle columns
5531
+ * (close, then last funding, then open), so a position filled repeatedly
5532
+ * since it opened reports its opening instant until funding settles. The
5533
+ * live position_update frame is unaffected.
5534
+ *
5535
+ * Display metadata. `version` is the reconciliation key; ordering position
5536
+ * state by this field is never correct.
5537
+ */
5069
5538
  updatedAt?: string | null;
5070
5539
  };
5071
5540
  GetProfileResponse: {
@@ -5623,15 +6092,39 @@ export interface components {
5623
6092
  */
5624
6093
  totalPages?: number | null;
5625
6094
  };
5626
- ListConditionalOrdersResponse: {
5627
- orders?: components["schemas"]["ConditionalOrder"][] | null;
5628
- /** Format: uint32 */
6095
+ ListBuildercodePayoutsResponse: {
6096
+ /** @description Per-trade credits, newest first. */
6097
+ payouts?: components["schemas"]["BuildercodePayout"][] | null;
6098
+ /**
6099
+ * Format: uint32
6100
+ * @description Total payout rows for this application.
6101
+ */
5629
6102
  total?: number | null;
5630
- /** Format: uint32 */
6103
+ /**
6104
+ * Format: uint32
6105
+ * @description Current page number.
6106
+ */
5631
6107
  page?: number | null;
5632
- /** Format: uint32 */
6108
+ /**
6109
+ * Format: uint32
6110
+ * @description Items per page.
6111
+ */
5633
6112
  pageSize?: number | null;
5634
- };
6113
+ /**
6114
+ * Format: uint32
6115
+ * @description Total number of pages.
6116
+ */
6117
+ totalPages?: number | null;
6118
+ };
6119
+ ListConditionalOrdersResponse: {
6120
+ orders?: components["schemas"]["ConditionalOrder"][] | null;
6121
+ /** Format: uint32 */
6122
+ total?: number | null;
6123
+ /** Format: uint32 */
6124
+ page?: number | null;
6125
+ /** Format: uint32 */
6126
+ pageSize?: number | null;
6127
+ };
5635
6128
  ListDelegatedAgentOwnersResponse: {
5636
6129
  /** @description Owners that have an active delegation to the calling agent */
5637
6130
  owners?: components["schemas"]["DelegatedAgentOwner"][] | null;
@@ -5676,6 +6169,17 @@ export interface components {
5676
6169
  */
5677
6170
  totalPages?: number | null;
5678
6171
  };
6172
+ ListManagedMarketAssignmentsResponse: {
6173
+ /** @description Expected assignments, including phases currently unable to quote. */
6174
+ items?: components["schemas"]["ManagedMarketAssignment"][] | null;
6175
+ /** Format: uint32 */
6176
+ total?: number | null;
6177
+ /** Format: uint32 */
6178
+ page?: number | null;
6179
+ /** Format: uint32 */
6180
+ pageSize?: number | null;
6181
+ inventoryObservedAt?: string | null;
6182
+ };
5679
6183
  ListMarginAccountsResponse: {
5680
6184
  accounts?: components["schemas"]["MarginAccountSummary"][] | null;
5681
6185
  /** Format: uint32 */
@@ -5834,6 +6338,41 @@ export interface components {
5834
6338
  */
5835
6339
  pageSize?: number | null;
5836
6340
  };
6341
+ ManagedMarketAssignment: {
6342
+ launchId?: string | null;
6343
+ /** Format: uuid */
6344
+ tradingPairId?: string | null;
6345
+ symbol?: string | null;
6346
+ phase?: string | null;
6347
+ /** Format: uint32 */
6348
+ refreshIntervalMs?: number | null;
6349
+ allocationUsdc?: string | null;
6350
+ /** @description Last reserved lease. A claim reconciles its actual engine fencing state. */
6351
+ lease?: components["schemas"]["ManagedMarketLease"] | null;
6352
+ quoteEnabled?: boolean | null;
6353
+ };
6354
+ ManagedMarketLease: {
6355
+ launchId?: string | null;
6356
+ ownerId?: string | null;
6357
+ /** @description All uint64 fences are decimal strings in JSON to preserve exact values. */
6358
+ generation?: string | null;
6359
+ quoteRevision?: string | null;
6360
+ expiresAt?: string | null;
6361
+ /** Format: uint32 */
6362
+ refreshIntervalMs?: number | null;
6363
+ phase?: string | null;
6364
+ };
6365
+ ManagedMarketQuoteStatus: {
6366
+ launchId?: string | null;
6367
+ generation?: string | null;
6368
+ quoteRevision?: string | null;
6369
+ phase?: string | null;
6370
+ bidNotional?: string | null;
6371
+ askNotional?: string | null;
6372
+ oracleReady?: boolean | null;
6373
+ readyToActivate?: boolean | null;
6374
+ observedAt?: string | null;
6375
+ };
5837
6376
  MarginAccountMovement: {
5838
6377
  id?: string | null;
5839
6378
  movementType?: string | null;
@@ -6457,6 +6996,30 @@ export interface components {
6457
6996
  */
6458
6997
  liquidationPrice?: string | null;
6459
6998
  status?: string | null;
6999
+ /**
7000
+ * @description RFC 3339 instant at which this position was last MUTATED — a fill,
7001
+ * collateral transfer, funding settlement or close — as the producer that
7002
+ * owns the position recorded it. It is NOT the instant the response was
7003
+ * built: polling an unchanged position returns the same value, and an oracle
7004
+ * reprice does not move it. For an OPEN position every surface reports the
7005
+ * same instant — the list, the detail read, the risk read, the WebSocket
7006
+ * positions snapshot, and the live position_update frames.
7007
+ *
7008
+ * Two cases come from the persistence clock instead and differ from the
7009
+ * matching engine's by the persistence lag: a TERMINAL row (the live
7010
+ * position_update frame carries the engine's close instant, this field
7011
+ * carries the stored one), and any position read after a matching-engine
7012
+ * restart. Accurate to that lag, not to the microsecond.
7013
+ *
7014
+ * A third case is not lag-bounded: an OPEN row read while the matching
7015
+ * engine is unreachable falls back to the row's own lifecycle columns
7016
+ * (close, then last funding, then open), so a position filled repeatedly
7017
+ * since it opened reports its opening instant until funding settles. The
7018
+ * live position_update frame is unaffected.
7019
+ *
7020
+ * Display metadata. `version` is the reconciliation key; ordering position
7021
+ * state by this field is never correct.
7022
+ */
6460
7023
  updatedAt?: string | null;
6461
7024
  riskBucketId?: string | null;
6462
7025
  marginMode?: string | null;
@@ -6508,6 +7071,12 @@ export interface components {
6508
7071
  * partial.
6509
7072
  */
6510
7073
  cumFees?: string | null;
7074
+ /**
7075
+ * Format: int64
7076
+ * @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, does restamp the account's open positions), 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. A response served from live matching-engine state reports 0 (unranked): the engine holds the state but not the version.
7077
+ * @example 918342
7078
+ */
7079
+ version?: number | null;
6511
7080
  };
6512
7081
  PositionHistoryEvent: {
6513
7082
  id?: string | null;
@@ -6713,6 +7282,12 @@ export interface components {
6713
7282
  */
6714
7283
  relevance?: number | null;
6715
7284
  };
7285
+ RefreshManagedMarketQuotesRequest: {
7286
+ launchId?: string | null;
7287
+ ownerId?: string | null;
7288
+ generation?: string | null;
7289
+ quoteRevision?: string | null;
7290
+ };
6716
7291
  RefreshRequest: Record<string, never>;
6717
7292
  RefreshResponse: {
6718
7293
  /**
@@ -7152,7 +7727,17 @@ export interface components {
7152
7727
  riskBucketId?: string | null;
7153
7728
  /** @description Present when the simulation resolved against a risk bucket. Values: ISOLATED, CROSS. */
7154
7729
  marginMode?: string | null;
7155
- /** @description Present for cross risk-bucket simulations. */
7730
+ /**
7731
+ * @description The cross scope the preview ran against; absent for isolated previews and
7732
+ * never a request's deprecated list. `SimulateRiskBucketOrderRisk` in CROSS
7733
+ * mode reports the DERIVED scope: the active cross bucket's recorded pairs
7734
+ * (a pair whose positions have closed stays recorded until a later cross
7735
+ * order on another pair reconciles the bucket), every pair with an open
7736
+ * position in that bucket, and the previewed pair — the previewed pair alone
7737
+ * before the first cross order. `SimulateOrderRisk` and
7738
+ * `SimulateParentMarginOrderRisk` report the recorded pairs plus the
7739
+ * previewed pair.
7740
+ */
7156
7741
  selectedTradingPairIds?: string[] | null;
7157
7742
  };
7158
7743
  SimulateParentMarginOrderRiskRequest: {
@@ -7183,7 +7768,10 @@ export interface components {
7183
7768
  reduceOnly?: boolean | null;
7184
7769
  /** @description Risk bucket mode. Defaults to ISOLATED. Values: ISOLATED, CROSS. */
7185
7770
  marginMode?: string | null;
7186
- /** @description Trading pair UUIDs selected into the cross risk bucket. Required when marginMode is CROSS. */
7771
+ /**
7772
+ * @deprecated
7773
+ * @description Deprecated: accepted and ignored. Cross scope is derived from trading (a pair joins the cross bucket when a cross order on it succeeds; after its positions close it stays listed until a later successful cross order on another pair reconciles the bucket), so a cross preview has nothing to declare: it runs against the account's active cross bucket — or the deterministic bucket a first cross order would create — and the previewed pair is in scope by construction. Rejected for ISOLATED, as before. The response's selectedTradingPairIds reports the derived scope (recorded pairs, pairs with open positions in the bucket, and the previewed pair), never this list.
7774
+ */
7187
7775
  selectedTradingPairIds?: string[] | null;
7188
7776
  };
7189
7777
  SubAccount: {
@@ -7694,7 +8282,7 @@ export interface components {
7694
8282
  marginMode?: string | null;
7695
8283
  /**
7696
8284
  * @deprecated
7697
- * @description Deprecated: accepted and ignored. Cross scope is derived from trading (a pair joins the cross bucket when a cross order on it succeeds and leaves when its positions close), so a cross transfer-in has nothing to declare and can no longer replace the scope. Rejected for ISOLATED, as before. Read the current scope from the cross bucket's row in the margin-accounts list or from this response's selectedTradingPairIds; the parent row carries no scope. Pairs declared before scope became derived stay recorded until they trade and their positions close.
8285
+ * @description Deprecated: accepted and ignored. Cross scope is derived from trading (a pair joins the cross bucket when a cross order on it succeeds; after its positions close it stays listed until a later successful cross order on another pair reconciles the bucket), so a cross transfer-in has nothing to declare and can no longer replace the scope. Rejected for ISOLATED, as before. Read the current scope from the cross bucket's row in the margin-accounts list or from this response's selectedTradingPairIds; the parent row carries no scope. Pairs declared before scope became derived stay recorded until they trade and their positions close.
7698
8286
  */
7699
8287
  selectedTradingPairIds?: string[] | null;
7700
8288
  /**
@@ -7747,6 +8335,53 @@ export interface components {
7747
8335
  */
7748
8336
  tradingBalance?: string | null;
7749
8337
  };
8338
+ /**
8339
+ * @description The execution outcome of the order a conditional order fired into — a
8340
+ * projection of that order's own row, read at request time (0XM-2744), so a
8341
+ * TP/SL history can show what the close actually did next to the price that
8342
+ * fired it. Trigger price and fill price are different numbers: the trigger
8343
+ * fires on the mark, the leg then trades against the book, so a MARKET leg
8344
+ * fills at least the half-spread (plus its own impact) away from the
8345
+ * trigger, and a LIMIT leg may rest or fill only partly.
8346
+ */
8347
+ TriggeredOrderSummary: {
8348
+ /**
8349
+ * Format: uuid
8350
+ * @description The triggered order's id — the same value as the parent's triggeredOrderId, repeated so the summary is self-contained.
8351
+ * @example 01a0887b-8e7c-7612-983f-b7ee89c2cbbf
8352
+ */
8353
+ orderId?: string | null;
8354
+ /**
8355
+ * @description The triggered order's CURRENT status, as GET /api/v1/orders/{orderId} reports it: SETTLED for a leg that filled in full (a fully filled order is written as SETTLED, so FILLED does not appear here); SUBMITTED or PARTIALLY_FILLED for a LIMIT leg still resting; CANCELLED when the protective band left nothing fillable or a reduce-only remainder was cut (see terminalReason); EXPIRED for a LIMIT leg that lapsed. Never REJECTED: a close the engine refused leaves the conditional order FAILED with no triggeredOrderId, so no summary exists for it.
8356
+ * @example SETTLED
8357
+ */
8358
+ status?: string | null;
8359
+ /**
8360
+ * @description Quantity the triggered order has filled so far, in base units. "0" until it fills. Numerically equal to the order's own filledQuantity; the printed decimal scale can differ between this read (served from the database) and GET /api/v1/orders/{orderId} (served from the cache), so compare numerically.
8361
+ * @example 3090659.3
8362
+ */
8363
+ filledQuantity?: string | null;
8364
+ /**
8365
+ * @description Volume-weighted average price the triggered order filled at. Compare with the parent's triggerPrice: the difference is the half-spread plus the order's own market impact. Absent until the first fill.
8366
+ * @example 0.145611
8367
+ */
8368
+ averageFillPrice?: string | null;
8369
+ /**
8370
+ * @description Total taker fees the triggered order has paid, in quote units. Absent until it fills.
8371
+ * @example 202.52
8372
+ */
8373
+ totalTakerFees?: string | null;
8374
+ /**
8375
+ * @description When the triggered order reached FILLED (RFC 3339). Absent while it is resting or partially filled, and on a terminal state that is not a full fill.
8376
+ * @example 2026-09-09T23:23:13.936682Z
8377
+ */
8378
+ filledAt?: string | null;
8379
+ /**
8380
+ * @description Stable cause when status is CANCELLED — the same vocabulary as the order's own terminalReason. Absent otherwise.
8381
+ * @example SYSTEM
8382
+ */
8383
+ terminalReason?: string | null;
8384
+ };
7750
8385
  TwapOrder: {
7751
8386
  /**
7752
8387
  * Format: uuid
@@ -8052,7 +8687,7 @@ export interface components {
8052
8687
  */
8053
8688
  address: string;
8054
8689
  /**
8055
- * @description Wallet signature over the challenge message
8690
+ * @description Wallet authorization of the challenge message, hex with an optional 0x prefix. An EOA sends a 65-byte EIP-191 signature; a contract wallet verified under EIP-1271 sends whatever its own contract accepts, which is usually longer and need not be 65 bytes. Capped at 8192 decoded bytes (16386 characters with the prefix) — enough for well over a hundred owner slots — and a longer value is rejected as an invalid signature rather than forwarded to the chain.
8056
8691
  * @example 0x1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0
8057
8692
  */
8058
8693
  signature: string;
@@ -9618,6 +10253,13 @@ export interface operations {
9618
10253
  };
9619
10254
  content?: never;
9620
10255
  };
10256
+ /** @description Authentication rate limit exceeded — challenge and verify share one per-client-address budget (60 requests/min sustained, burst 120); retry after the interval in details.retryAfter */
10257
+ 429: {
10258
+ headers: {
10259
+ [name: string]: unknown;
10260
+ };
10261
+ content?: never;
10262
+ };
9621
10263
  /** @description Internal server error */
9622
10264
  500: {
9623
10265
  headers: {
@@ -9774,6 +10416,13 @@ export interface operations {
9774
10416
  };
9775
10417
  content?: never;
9776
10418
  };
10419
+ /** @description Authentication rate limit exceeded — challenge and verify share one per-client-address budget (60 requests/min sustained, burst 120), checked before the signature; retry after the interval in details.retryAfter */
10420
+ 429: {
10421
+ headers: {
10422
+ [name: string]: unknown;
10423
+ };
10424
+ content?: never;
10425
+ };
9777
10426
  /** @description Internal server error */
9778
10427
  500: {
9779
10428
  headers: {
@@ -9781,6 +10430,276 @@ export interface operations {
9781
10430
  };
9782
10431
  content?: never;
9783
10432
  };
10433
+ /** @description Contract-wallet (EIP-1271) verification could not be completed for an eligible address: the chain did not answer, did not answer within the deadline, or the server was at its concurrent-verification capacity and declined to ask. Retryable, and not a verdict on the signature. */
10434
+ 503: {
10435
+ headers: {
10436
+ [name: string]: unknown;
10437
+ };
10438
+ content?: never;
10439
+ };
10440
+ };
10441
+ };
10442
+ get_buildercodes_config: {
10443
+ parameters: {
10444
+ query?: never;
10445
+ header?: never;
10446
+ path?: never;
10447
+ cookie?: never;
10448
+ };
10449
+ requestBody?: never;
10450
+ responses: {
10451
+ /** @description OK */
10452
+ 200: {
10453
+ headers: {
10454
+ [name: string]: unknown;
10455
+ };
10456
+ content: {
10457
+ "application/json": components["schemas"]["GetBuildercodesConfigResponse"];
10458
+ };
10459
+ };
10460
+ /** @description Authentication required */
10461
+ 401: {
10462
+ headers: {
10463
+ [name: string]: unknown;
10464
+ };
10465
+ content?: never;
10466
+ };
10467
+ /** @description Refused: BuilderCodes is disabled, the caller is delegated, or the caller is not this application's payout wallet (gRPC: PERMISSION_DENIED) */
10468
+ 403: {
10469
+ headers: {
10470
+ [name: string]: unknown;
10471
+ };
10472
+ content?: never;
10473
+ };
10474
+ /** @description Authenticated application not found (gRPC: NOT_FOUND) */
10475
+ 404: {
10476
+ headers: {
10477
+ [name: string]: unknown;
10478
+ };
10479
+ content?: never;
10480
+ };
10481
+ /** @description Internal server error */
10482
+ 500: {
10483
+ headers: {
10484
+ [name: string]: unknown;
10485
+ };
10486
+ content?: never;
10487
+ };
10488
+ };
10489
+ };
10490
+ list_buildercode_payouts: {
10491
+ parameters: {
10492
+ query?: {
10493
+ /** @description Page number (1-indexed) */
10494
+ page?: number;
10495
+ /** @description Items per page (max 100) */
10496
+ pageSize?: number;
10497
+ };
10498
+ header?: never;
10499
+ path?: never;
10500
+ cookie?: never;
10501
+ };
10502
+ requestBody?: never;
10503
+ responses: {
10504
+ /** @description OK */
10505
+ 200: {
10506
+ headers: {
10507
+ [name: string]: unknown;
10508
+ };
10509
+ content: {
10510
+ "application/json": components["schemas"]["ListBuildercodePayoutsResponse"];
10511
+ };
10512
+ };
10513
+ /** @description Invalid pagination */
10514
+ 400: {
10515
+ headers: {
10516
+ [name: string]: unknown;
10517
+ };
10518
+ content?: never;
10519
+ };
10520
+ /** @description Authentication required */
10521
+ 401: {
10522
+ headers: {
10523
+ [name: string]: unknown;
10524
+ };
10525
+ content?: never;
10526
+ };
10527
+ /** @description Refused: BuilderCodes is disabled, the caller is delegated, or the caller is not this application's payout wallet (gRPC: PERMISSION_DENIED) */
10528
+ 403: {
10529
+ headers: {
10530
+ [name: string]: unknown;
10531
+ };
10532
+ content?: never;
10533
+ };
10534
+ /** @description Authenticated application not found (gRPC: NOT_FOUND) */
10535
+ 404: {
10536
+ headers: {
10537
+ [name: string]: unknown;
10538
+ };
10539
+ content?: never;
10540
+ };
10541
+ /** @description Internal server error */
10542
+ 500: {
10543
+ headers: {
10544
+ [name: string]: unknown;
10545
+ };
10546
+ content?: never;
10547
+ };
10548
+ };
10549
+ };
10550
+ get_buildercode_payout_summary: {
10551
+ parameters: {
10552
+ query?: never;
10553
+ header?: never;
10554
+ path?: never;
10555
+ cookie?: never;
10556
+ };
10557
+ requestBody?: never;
10558
+ responses: {
10559
+ /** @description OK */
10560
+ 200: {
10561
+ headers: {
10562
+ [name: string]: unknown;
10563
+ };
10564
+ content: {
10565
+ "application/json": components["schemas"]["GetBuildercodePayoutSummaryResponse"];
10566
+ };
10567
+ };
10568
+ /** @description Authentication required */
10569
+ 401: {
10570
+ headers: {
10571
+ [name: string]: unknown;
10572
+ };
10573
+ content?: never;
10574
+ };
10575
+ /** @description Refused: BuilderCodes is disabled, the caller is delegated, or the caller is not this application's payout wallet (gRPC: PERMISSION_DENIED) */
10576
+ 403: {
10577
+ headers: {
10578
+ [name: string]: unknown;
10579
+ };
10580
+ content?: never;
10581
+ };
10582
+ /** @description Authenticated application not found (gRPC: NOT_FOUND) */
10583
+ 404: {
10584
+ headers: {
10585
+ [name: string]: unknown;
10586
+ };
10587
+ content?: never;
10588
+ };
10589
+ /** @description Internal server error */
10590
+ 500: {
10591
+ headers: {
10592
+ [name: string]: unknown;
10593
+ };
10594
+ content?: never;
10595
+ };
10596
+ };
10597
+ };
10598
+ get_buildercode_rewards_balance: {
10599
+ parameters: {
10600
+ query?: never;
10601
+ header?: never;
10602
+ path?: never;
10603
+ cookie?: never;
10604
+ };
10605
+ requestBody?: never;
10606
+ responses: {
10607
+ /** @description OK */
10608
+ 200: {
10609
+ headers: {
10610
+ [name: string]: unknown;
10611
+ };
10612
+ content: {
10613
+ "application/json": components["schemas"]["GetBuildercodeRewardsBalanceResponse"];
10614
+ };
10615
+ };
10616
+ /** @description Authentication required */
10617
+ 401: {
10618
+ headers: {
10619
+ [name: string]: unknown;
10620
+ };
10621
+ content?: never;
10622
+ };
10623
+ /** @description Refused: BuilderCodes is disabled or the caller is delegated (gRPC: PERMISSION_DENIED) */
10624
+ 403: {
10625
+ headers: {
10626
+ [name: string]: unknown;
10627
+ };
10628
+ content?: never;
10629
+ };
10630
+ /** @description Internal server error */
10631
+ 500: {
10632
+ headers: {
10633
+ [name: string]: unknown;
10634
+ };
10635
+ content?: never;
10636
+ };
10637
+ };
10638
+ };
10639
+ claim_buildercode_rewards: {
10640
+ parameters: {
10641
+ query?: never;
10642
+ header?: never;
10643
+ path?: never;
10644
+ cookie?: never;
10645
+ };
10646
+ requestBody: {
10647
+ content: {
10648
+ "application/json": components["schemas"]["ClaimBuildercodeRewardsRequest"];
10649
+ };
10650
+ };
10651
+ responses: {
10652
+ /** @description OK */
10653
+ 200: {
10654
+ headers: {
10655
+ [name: string]: unknown;
10656
+ };
10657
+ content: {
10658
+ "application/json": components["schemas"]["ClaimBuildercodeRewardsResponse"];
10659
+ };
10660
+ };
10661
+ /** @description Invalid token or amount */
10662
+ 400: {
10663
+ headers: {
10664
+ [name: string]: unknown;
10665
+ };
10666
+ content?: never;
10667
+ };
10668
+ /** @description Authentication required */
10669
+ 401: {
10670
+ headers: {
10671
+ [name: string]: unknown;
10672
+ };
10673
+ content?: never;
10674
+ };
10675
+ /** @description Refused: BuilderCodes is not enabled, or the caller is a delegated-agent session (gRPC: PERMISSION_DENIED) */
10676
+ 403: {
10677
+ headers: {
10678
+ [name: string]: unknown;
10679
+ };
10680
+ content?: never;
10681
+ };
10682
+ /** @description Insufficient BuilderCodes payout balance, including a wallet that never accrued one (gRPC: FAILED_PRECONDITION) */
10683
+ 409: {
10684
+ headers: {
10685
+ [name: string]: unknown;
10686
+ };
10687
+ content?: never;
10688
+ };
10689
+ /** @description Internal server error */
10690
+ 500: {
10691
+ headers: {
10692
+ [name: string]: unknown;
10693
+ };
10694
+ content?: never;
10695
+ };
10696
+ /** @description Matching engine unavailable or slow to answer. Outcome UNKNOWN, not a rejection — the claim may still commit and there is no idempotency key, so treat it as pending and do not retry automatically; a balance read does not settle it, because an admitted claim may still be queued. Two tagged cases are the exception, both refused before the claim can be admitted and so provably non-committing, and both safe to retry: a maintenance block (`error: OPERATIONS_BLOCKED`; gRPC metadata `x-maintenance-blocked: true`) and a sequencer overload (`code: OVERLOADED`) (gRPC: UNAVAILABLE) */
10697
+ 503: {
10698
+ headers: {
10699
+ [name: string]: unknown;
10700
+ };
10701
+ content?: never;
10702
+ };
9784
10703
  };
9785
10704
  };
9786
10705
  list_delegated_agents: {
@@ -10273,6 +11192,104 @@ export interface operations {
10273
11192
  };
10274
11193
  };
10275
11194
  };
11195
+ list_managed_market_assignments: {
11196
+ parameters: {
11197
+ query?: {
11198
+ /** @description Page number (1-indexed) */
11199
+ page?: number;
11200
+ /** @description Items per page (max 100) */
11201
+ pageSize?: number;
11202
+ };
11203
+ header?: never;
11204
+ path?: never;
11205
+ cookie?: never;
11206
+ };
11207
+ requestBody?: never;
11208
+ responses: {
11209
+ /** @description OK */
11210
+ 200: {
11211
+ headers: {
11212
+ [name: string]: unknown;
11213
+ };
11214
+ content: {
11215
+ "application/json": components["schemas"]["ListManagedMarketAssignmentsResponse"];
11216
+ };
11217
+ };
11218
+ /** @description Delegated-agent sessions cannot use managed maker controls */
11219
+ 403: {
11220
+ headers: {
11221
+ [name: string]: unknown;
11222
+ };
11223
+ content?: never;
11224
+ };
11225
+ };
11226
+ };
11227
+ claim_managed_market_lease: {
11228
+ parameters: {
11229
+ query?: never;
11230
+ header?: never;
11231
+ path: {
11232
+ launchId: string;
11233
+ };
11234
+ cookie?: never;
11235
+ };
11236
+ requestBody: {
11237
+ content: {
11238
+ "application/json": components["schemas"]["ClaimManagedMarketLeaseRequest"];
11239
+ };
11240
+ };
11241
+ responses: {
11242
+ /** @description OK */
11243
+ 200: {
11244
+ headers: {
11245
+ [name: string]: unknown;
11246
+ };
11247
+ content: {
11248
+ "application/json": components["schemas"]["ManagedMarketLease"];
11249
+ };
11250
+ };
11251
+ /** @description Delegated-agent sessions cannot use managed maker controls */
11252
+ 403: {
11253
+ headers: {
11254
+ [name: string]: unknown;
11255
+ };
11256
+ content?: never;
11257
+ };
11258
+ };
11259
+ };
11260
+ refresh_managed_market_quotes: {
11261
+ parameters: {
11262
+ query?: never;
11263
+ header?: never;
11264
+ path: {
11265
+ launchId: string;
11266
+ };
11267
+ cookie?: never;
11268
+ };
11269
+ requestBody: {
11270
+ content: {
11271
+ "application/json": components["schemas"]["RefreshManagedMarketQuotesRequest"];
11272
+ };
11273
+ };
11274
+ responses: {
11275
+ /** @description OK */
11276
+ 200: {
11277
+ headers: {
11278
+ [name: string]: unknown;
11279
+ };
11280
+ content: {
11281
+ "application/json": components["schemas"]["ManagedMarketQuoteStatus"];
11282
+ };
11283
+ };
11284
+ /** @description Delegated-agent sessions cannot use managed maker controls */
11285
+ 403: {
11286
+ headers: {
11287
+ [name: string]: unknown;
11288
+ };
11289
+ content?: never;
11290
+ };
11291
+ };
11292
+ };
10276
11293
  list_margin_accounts: {
10277
11294
  parameters: {
10278
11295
  query?: {